{"id":164816,"date":"2025-09-20T19:07:29","date_gmt":"2025-09-20T17:07:29","guid":{"rendered":"https:\/\/via-agency.media\/?page_id=164816"},"modified":"2026-04-05T17:34:20","modified_gmt":"2026-04-05T15:34:20","slug":"164816-2","status":"publish","type":"page","link":"https:\/\/via-agency.media\/en\/","title":{"rendered":""},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"164816\" class=\"elementor elementor-164816\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7a14b90 e-con-full e-flex e-con e-parent\" data-id=\"7a14b90\" data-element_type=\"container\" data-e-type=\"container\" id=\"headerYB\">\n\t\t\t\t<div class=\"elementor-element elementor-element-31b9063 elementor-widget elementor-widget-html\" data-id=\"31b9063\" 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<script>\r\n\/**\r\n * VIA Agency \/ Yearbook Media - Main Site JavaScript\r\n * Architecture modulaire et configuration centralis\u00e9e\r\n *\/\r\n\r\n(function($) {\r\n    'use strict';\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Configuration centralis\u00e9e\r\n    \/\/ ===========================================\r\n    const CONFIG = {\r\n        selectors: {\r\n            cards: '.card',\r\n            loginTrigger: '.popup-login-trigger',\r\n            languageToggle: '.SiteLangue',\r\n            servicesContainer: '#ServicesYB',\r\n            hiddenOverflow: '#headerYB, #ServicesYB, #FooterYB'\r\n        },\r\n        popups: {\r\n            mainPopup: 21589,\r\n            loginPopup: 14297\r\n        },\r\n        timing: {\r\n            loginDelay: 1000,\r\n            servicesDelay: 200,\r\n            imageFadeOut: 400,\r\n            imageRotation: 7000\r\n        },\r\n        urls: {\r\n            purchaseFR: 'https:\/\/yearbook-media.com\/achat-espaces-publicitaires\/',\r\n            purchaseEN: 'https:\/\/yearbook-media.com\/en\/achat-espaces-publicitaires\/'\r\n        }\r\n    };\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Donn\u00e9es des images de fond\r\n    \/\/ ===========================================\r\n    const BACKGROUND_IMAGES = {\r\n        institutionnel: [\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0011-e1743496545225.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0010.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0008.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0007-e1743496641582.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0006-1.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0005-e1743496663944.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0004.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0002.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0001-e1743496988645.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0001-e1743496885474.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/IMG-20250328-WA0006.jpg'\r\n        ],\r\n        corporate: [\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/03\/diverse-business-team-watching-content-tablet-scaled-e1735712679495.jpg',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/output-39-e1743105475145.png',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/output-38-e1743105496530.png',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/output-36-e1743105756403.png',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/output-35-e1743105774440.png',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/output-4-e1743105849120.png',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/output-2-e1743105877618.png',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/output-42-e1743105910417.png',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2024\/10\/portrait-professional-business-people-working-together-min-scaled-e1730019909530.jpg'\r\n        ],\r\n        achat: [\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2024\/03\/camion-benne-basculante-dans-mine-ciel-ouvert.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/Fish-farm-hero-e1719496465267-r3clr75cvm42pgeousjafh0mlvq263dy3czyutxjho.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpswiki.seg_.orgwikiAgriculturemediaFileWeb1_soybeans.jpg.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/002_Production_line_-_car_assembly_line_in_General_Motors_Manufacturing_Poland_-_Gliwice_Poland.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/Oil_platform_P-51_Brazil-e1718916041927-r3clr59ohy1i28hf5rq1ahhpf3zbqp6hf3ozwa0bja.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpsen.wikipedia.orgwikiTelecommunicationsmediaFileErdfunkstelle_Raisting_2.jpg.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpsfr.wikipedia.orgwikiChaC3AEne_de_productionmediaFichierJetstars_first_787_on_the_production_line_9132370198.jpg.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpsen.wikipedia.orgwikiHuman_powermediaFileFlickr_-_Official_U.S._Navy_Imagery_-_Sailors_turn_hand_cranks_to_raise_a_steam-powered_catapult_chamber._.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/9577892004_bc44b4b406_c-e1719421155976-r3clr2g5xfxn3elim8i5l07bmyd83lvaepqjgg4ib4.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/african-woman-biochemist-researcher-checking-manifestations-vaccine-working-modern-equipped-laboratory-multiethnic-doctors-examining-virus-evolution-using-high-tech-researching-diagnosis-e1718912240204-r3clr59ohy1i28hf5rq1ahhpf3zbqp6hf3ozwa0bfe.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/pexels-photo-12047372-e1719420010112-r3clr2g5xfxn3elim8i5l07bmyd83lvaepqjgg4ifk.jpeg',\r\n            'https:\/\/madagascar.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/30426179964_43b5716870_c-e1719570358451-r3clpbgz7jjfhj4ztza5fy3fu4zmrvx9u210awpvra.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/Chutes_dEkom_Nkam-r3clr67fn554ibeft6nvwjqadrg4hq6vjgm52g3aui.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpsfr.m.wikipedia.orgwikiFichierWashington_Dulles_International_Airport_at_Dusk.jpg.jpg'\r\n        ],\r\n        media: [\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/Photo-Media-1-e1743178447613.jpg',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/Photo-Media-4.jpg',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/Photo-Media-5-e1743178533279.jpg',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/Photo-Media-6-e1743178518860.jpg',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/Photo-Media-8-e1743178482439.jpg',\r\n            'https:\/\/yearbook-media.com\/wp-content\/uploads\/2025\/03\/Photo-Media-9-e1743178463211.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpscommons.wikimedia.orgwikiFile2020_Corn_Harvest.jpg.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpsen.wikipedia.orgwikiCarmichael_coal_minemediaFileBlogskale_20220412-ccm-404.jpg.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpsen.wikipedia.orgwikiCoal_miningmediaFileOpen_pit_coal_mine_in_Germany_9260.jpg.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/33918478960_fdac5decfa_c-e1719519910721-r3clr59ohy1i28hf5rq1ahhpf3zbqp6hf3ozwa0bxq.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/doctor-performing-medical-research-lab-r3clr1ib4oif7385qb0680xoptm56z5affjdwy6sfe.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/Atterrissement-e1708622042591-r3clr8340t7p5jbpi7h51j97kj6ux4ec7px4100ik0.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpsen.wikipedia.orgwikiOil_refinerymediaFileBidboland_gas_refinery.jpg.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpsfr.wikipedia.orgwikiPuits_de_pC3A9trolemediaFichierPuits_de_pC3A9trole.jpg.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/640px-Deplacement_de_containers_au_port-e1718913072226-r3clr4bub407qmisb9bepzq8tq3yj02r2z1if01q3e.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/2024\/02\/cameroun-small.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/1024px-Salifou_lindou_installation_3648_moy-r3clr2g120u6hrbqavrb945x0zbik4x59hd6yobi3g.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/high-angle-ct-scan-machine-room-small-e1719499037714-r3clr59ohy1i28hf5rq1ahhpf3zbqp6hf3ozwa0bo0.jpg',\r\n            'https:\/\/via-agency.media\/wp-content\/uploads\/2025\/09\/httpscommons.wikimedia.orgwikiFileAnse_Source_d27Argent_2-La_Digue.jpg.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/personne-recevant-nourriture-rue-scaled-e1734549194927-r3clr75cvm42pgeousjafh0mlvq263dy3czyutxiz2.jpg',\r\n            'https:\/\/afrique.yearbook-media.com\/wp-content\/uploads\/elementor\/thumbs\/Street_Houphouet_Boigny_-_panoramio-e1719507729859-r3clr75cvm42pgeousjafh0mlvq263dy3czyutxjn8.jpg'\r\n        ]\r\n    };\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Module: Utilitaires\r\n    \/\/ ===========================================\r\n    const Utils = {\r\n        \/**\r\n         * Fisher-Yates shuffle algorithm\r\n         *\/\r\n        shuffleArray(array) {\r\n            const shuffled = [...array];\r\n            for (let i = shuffled.length - 1; i > 0; i--) {\r\n                const j = Math.floor(Math.random() * (i + 1));\r\n                [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];\r\n            }\r\n            return shuffled;\r\n        },\r\n\r\n        \/**\r\n         * Obtient un index al\u00e9atoire diff\u00e9rent de l'actuel\r\n         *\/\r\n        getRandomIndexExcluding(arrayLength, excludeIndex) {\r\n            let newIndex;\r\n            do {\r\n                newIndex = Math.floor(Math.random() * arrayLength);\r\n            } while (newIndex === excludeIndex && arrayLength > 1);\r\n            return newIndex;\r\n        },\r\n\r\n        \/**\r\n         * Pr\u00e9charge une image\r\n         *\/\r\n        preloadImage(src) {\r\n            return new Promise((resolve, reject) => {\r\n                const img = new Image();\r\n                img.onload = () => resolve(img);\r\n                img.onerror = reject;\r\n                img.src = src;\r\n            });\r\n        }\r\n    };\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Module: Gestion des cartes\r\n    \/\/ ===========================================\r\n    const CardManager = {\r\n        init() {\r\n            this.randomiseFlexOrder();\r\n        },\r\n\r\n        randomiseFlexOrder() {\r\n            const cards = document.querySelectorAll(CONFIG.selectors.cards);\r\n            if (!cards.length) return;\r\n\r\n            const shuffled = Utils.shuffleArray([...cards]);\r\n            shuffled.forEach((el, i) => {\r\n                el.style.order = i;\r\n            });\r\n        }\r\n    };\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Module: Gestion des popups\r\n    \/\/ ===========================================\r\n    const PopupManager = {\r\n        init() {\r\n            this.bindEvents();\r\n            this.checkHashLogin();\r\n        },\r\n\r\n        bindEvents() {\r\n            $(document).on('click', CONFIG.selectors.loginTrigger, (e) => {\r\n                e.preventDefault();\r\n                this.showLogin();\r\n            });\r\n        },\r\n\r\n        checkHashLogin() {\r\n            if (window.location.hash === '#login') {\r\n                setTimeout(() => this.showLogin(), CONFIG.timing.loginDelay);\r\n            }\r\n        },\r\n\r\n        showLogin() {\r\n            $(`#elementor-popup-modal-${CONFIG.popups.mainPopup}`).hide();\r\n            \r\n            if (typeof elementorProFrontend !== 'undefined') {\r\n                elementorProFrontend.modules.popup.showPopup({ \r\n                    id: CONFIG.popups.loginPopup \r\n                });\r\n            }\r\n        }\r\n    };\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Module: Carrousel d'images de fond\r\n    \/\/ ===========================================\r\n    const BackgroundCarousel = {\r\n        containers: [\r\n            { id: 'ComInstitutionnelleContainer', images: BACKGROUND_IMAGES.institutionnel },\r\n            { id: 'ComCorporateContainer', images: BACKGROUND_IMAGES.corporate },\r\n            { id: 'AchatContainer', images: BACKGROUND_IMAGES.achat },\r\n            { id: 'MediaContainer', images: BACKGROUND_IMAGES.media }\r\n        ],\r\n        currentContainerIndex: 0,\r\n        currentImageIndexes: {},\r\n\r\n        init() {\r\n            this.initializeOverlays();\r\n            this.startRotation();\r\n        },\r\n\r\n        initializeOverlays() {\r\n            this.containers.forEach(container => {\r\n                const overlay = document.querySelector(`#${container.id} .bgOverlay`);\r\n                if (!overlay) return;\r\n\r\n                const randomIndex = Math.floor(Math.random() * container.images.length);\r\n                this.currentImageIndexes[container.id] = randomIndex;\r\n                overlay.style.backgroundImage = `url(${container.images[randomIndex]})`;\r\n            });\r\n        },\r\n\r\n        async changeNextContainer() {\r\n            const container = this.containers[this.currentContainerIndex];\r\n            const overlay = document.querySelector(`#${container.id} .bgOverlay`);\r\n            \r\n            if (!overlay) {\r\n                this.advanceToNextContainer();\r\n                return;\r\n            }\r\n\r\n            const nextIndex = Utils.getRandomIndexExcluding(\r\n                container.images.length, \r\n                this.currentImageIndexes[container.id]\r\n            );\r\n\r\n            try {\r\n                await Utils.preloadImage(container.images[nextIndex]);\r\n                \r\n                overlay.style.opacity = 0;\r\n                \r\n                setTimeout(() => {\r\n                    overlay.style.backgroundImage = `url(${container.images[nextIndex]})`;\r\n                    overlay.style.opacity = 1;\r\n                    this.currentImageIndexes[container.id] = nextIndex;\r\n                }, CONFIG.timing.imageFadeOut);\r\n                \r\n            } catch (error) {\r\n                console.warn(`Erreur chargement image: ${container.images[nextIndex]}`);\r\n            }\r\n\r\n            this.advanceToNextContainer();\r\n        },\r\n\r\n        advanceToNextContainer() {\r\n            this.currentContainerIndex = (this.currentContainerIndex + 1) % this.containers.length;\r\n        },\r\n\r\n        startRotation() {\r\n            setInterval(() => this.changeNextContainer(), CONFIG.timing.imageRotation);\r\n        }\r\n    };\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Module: Gestion des langues\r\n    \/\/ ===========================================\r\n    const LanguageManager = {\r\n        storageKey: 'SiteLangue',\r\n\r\n        init() {\r\n            this.detectLanguage();\r\n            this.bindEvents();\r\n        },\r\n\r\n        bindEvents() {\r\n            $(CONFIG.selectors.languageToggle).on('click', (e) => {\r\n                e.preventDefault();\r\n                this.toggleLanguage();\r\n            });\r\n        },\r\n\r\n        detectLanguage() {\r\n            const currentUrl = window.location.href;\r\n            const isEnglish = currentUrl.includes('\/en\/');\r\n            \r\n            sessionStorage.setItem(this.storageKey, isEnglish ? 'EN' : 'FR');\r\n            $(CONFIG.selectors.languageToggle).html(isEnglish ? 'FR' : 'EN');\r\n        },\r\n\r\n        getCurrentLanguage() {\r\n            return sessionStorage.getItem(this.storageKey) || 'FR';\r\n        },\r\n\r\n        toggleLanguage() {\r\n            const currentUrl = window.location.href;\r\n            let newUrl;\r\n\r\n            if (this.getCurrentLanguage() === 'FR') {\r\n                const urlObj = new URL(currentUrl);\r\n                newUrl = urlObj.origin + '\/en' + urlObj.pathname + urlObj.search + urlObj.hash;\r\n            } else {\r\n                newUrl = currentUrl.replace('\/en', '');\r\n            }\r\n\r\n            window.location.href = newUrl;\r\n        },\r\n\r\n        redirectToPurchase() {\r\n            const url = this.getCurrentLanguage() === 'FR' \r\n                ? CONFIG.urls.purchaseFR \r\n                : CONFIG.urls.purchaseEN;\r\n            window.location.href = url;\r\n        }\r\n    };\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Module: Initialisation UI\r\n    \/\/ ===========================================\r\n    const UIManager = {\r\n        init() {\r\n            this.removeImageTitles();\r\n            this.showServicesContainer();\r\n            this.setOverflowHidden();\r\n        },\r\n\r\n        removeImageTitles() {\r\n            $('img[title]').removeAttr('title');\r\n        },\r\n\r\n        showServicesContainer() {\r\n            setTimeout(() => {\r\n                $(CONFIG.selectors.servicesContainer).show();\r\n            }, CONFIG.timing.servicesDelay);\r\n        },\r\n\r\n        setOverflowHidden() {\r\n            $(CONFIG.selectors.hiddenOverflow).css('overflow', 'hidden');\r\n        }\r\n    };\r\n\r\n    \/\/ ===========================================\r\n    \/\/ Initialisation principale\r\n    \/\/ ===========================================\r\n    function init() {\r\n        CardManager.init();\r\n        PopupManager.init();\r\n        BackgroundCarousel.init();\r\n        LanguageManager.init();\r\n        UIManager.init();\r\n    }\r\n\r\n    \/\/ D\u00e9marrage\r\n    $(document).ready(init);\r\n\r\n})(jQuery);\r\n<\/script>\r\n\r\n<style>\r\nbody:not(.elementor-editor-active) .ServicesYB {\r\n    display: none;\r\n}\r\n\r\n.HPType {\r\n  width: 23%;\r\n  min-height: 2,3rem;\r\n  margin-top: 6px;\r\n}\r\n#ListeSecteurs {\r\n  width: 100%;\r\n  overflow-x: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n}\r\n\r\n.scroll-row {\r\n  display: flex;\r\n  flex-wrap: nowrap;\r\n  margin-bottom: 0px;\r\n  width: max-content; \/* Important: ensures the row expands to fit all content *\/\r\n  margin-left: auto; \/* This aligns the content to the right *\/\r\n  justify-content: flex-end; \/* Additional right alignment *\/\r\n}\r\n\r\n.scroll-row > * {\r\n  flex: 0 0 auto;\r\n  margin-right: 10px;\r\n}\r\n.HPContinentPays {\r\n  width: 30%;\r\n}\r\n\r\n.ClassMenuFR{\r\n    display: none;\r\n}\r\n\r\n#EnteteSite {\r\n  display: none;\r\n}\r\n#HeaderMobilehorizontal {\r\n  display: none;\r\n}\r\n\r\n#HeaderMobilehorizontal {\r\n  display: none;\r\n}\r\n\r\n#HeaderMobilehorizontal {\r\n  display: none;\r\n}\r\n\r\n#EnteteSite {\r\n  display: none;\r\n}\r\n\r\n\/* Apply smooth fade only on the overlay layer *\/\r\n.bgOverlay {\r\n    background-size: cover;\r\n    background-position: center;\r\n    background-repeat: no-repeat;\r\n    transition: opacity 1s ease-in-out;\r\n}\r\n\r\n\r\n\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b92ef66 e-con-full CarrouselHP e-flex e-con e-child\" data-id=\"b92ef66\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-e17cad4 e-con-full CarrouselHP e-flex e-con e-child\" data-id=\"e17cad4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c161916 e-con-full e-flex e-con e-child\" data-id=\"c161916\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-d2808be e-con-full e-flex e-con e-child\" data-id=\"d2808be\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1ace001 e-con-full e-flex e-con e-child\" data-id=\"1ace001\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a195aed elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"a195aed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6IjIxNTg5IiwidG9nZ2xlIjpmYWxzZX0%3D\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwg.png\" title=\"Menu.png\" alt=\"Menu.png\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\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-4a4e885 elementor-hidden-desktop elementor-widget elementor-widget-image\" data-id=\"4a4e885\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6IjIxNTg5IiwidG9nZ2xlIjpmYWxzZX0%3D\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-bleu-1-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwg.webp\" title=\"Menu-bleu-1.webp\" alt=\"Menu-bleu-1.webp\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\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-50d485d e-con-full e-flex e-con e-child\" data-id=\"50d485d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ac592b8 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"ac592b8\" 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\tVia Agency media\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-0dc9946 elementor-hidden-tablet elementor-hidden-mobile elementor-hidden-desktop elementor-widget elementor-widget-text-editor\" data-id=\"0dc9946\" 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\tMedia Communication Agency\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-f7eb6b4 elementor-hidden-desktop elementor-widget elementor-widget-text-editor\" data-id=\"f7eb6b4\" 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\tVia Agency media\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-9a99929 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"9a99929\" 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\tMedia Communication Agency\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<a class=\"elementor-element elementor-element-6147f71 e-con-full e-flex e-con e-child\" data-id=\"6147f71\" data-element_type=\"container\" data-e-type=\"container\" href=\"#\">\n\t\t\t\t<div class=\"elementor-element elementor-element-83c696b SiteLangue notranslate elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"83c696b\" 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\tIN\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-0f6b452 SiteLangue notranslate elementor-hidden-desktop elementor-widget elementor-widget-text-editor\" data-id=\"0f6b452\" 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>IN<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\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-33c2619 e-con-full e-flex e-con e-parent\" data-id=\"33c2619\" data-element_type=\"container\" data-e-type=\"container\" id=\"ServicesYB\">\n\t\t<div class=\"elementor-element elementor-element-49901e3 e-con-full e-flex e-con e-child\" data-id=\"49901e3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<a class=\"elementor-element elementor-element-ced382c e-con-full card e-flex e-con e-child\" data-id=\"ced382c\" data-element_type=\"container\" data-e-type=\"container\" id=\"ComInstitutionnelleContainer\" href=\"https:\/\/via-agency.media\/en\/communication-institutionnelle\/\">\n\t\t<div class=\"elementor-element elementor-element-f648a8c e-con-full bgOverlay  e-flex e-con e-child\" data-id=\"f648a8c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-b9183bf e-con-full content e-flex e-con e-child\" data-id=\"b9183bf\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-65790f0 e-con-full e-flex e-con e-child\" data-id=\"65790f0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-6d72222 e-con-full e-flex e-con e-child\" data-id=\"6d72222\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7d36c9f RecapitulatifVosCommandestitre elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"7d36c9f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"fas fa-angle-right\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-26b0745 elementor-widget elementor-widget-text-editor\" data-id=\"26b0745\" 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\tInstitutional communication\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<\/div>\n\t\t<div class=\"elementor-element elementor-element-a6e071d e-con-full e-flex e-con e-child\" data-id=\"a6e071d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1cbd753 e-con-full e-flex e-con e-child\" data-id=\"1cbd753\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-334ef71 elementor-widget elementor-widget-text-editor\" data-id=\"334ef71\" 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 style=\"text-align: justify;\">In partnership with the Presidencies, Prime Ministers&#039; Offices, Ministries and Investment Promotion Agencies, Via Agency supports the promotion of investments and institutional events.<\/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<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-8a0df3d e-con-full card e-flex e-con e-child\" data-id=\"8a0df3d\" data-element_type=\"container\" data-e-type=\"container\" id=\"ComCorporateContainer\" href=\"https:\/\/via-agency.media\/en\/communication-corporate\/\">\n\t\t<div class=\"elementor-element elementor-element-34ab29a e-con-full bgOverlay  e-flex e-con e-child\" data-id=\"34ab29a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-ac5e8ce e-con-full content e-flex e-con e-child\" data-id=\"ac5e8ce\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-954c496 e-con-full e-flex e-con e-child\" data-id=\"954c496\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-06c8367 e-con-full e-flex e-con e-child\" data-id=\"06c8367\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-46e618a RecapitulatifVosCommandestitre elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"46e618a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"fas fa-angle-right\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d90a4c9 elementor-widget elementor-widget-text-editor\" data-id=\"d90a4c9\" 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\tCorporate communication\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<\/div>\n\t\t<div class=\"elementor-element elementor-element-9876a5f e-con-full e-flex e-con e-child\" data-id=\"9876a5f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-5901748 e-con-full e-flex e-con e-child\" data-id=\"5901748\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bc3ceef elementor-widget elementor-widget-text-editor\" data-id=\"bc3ceef\" 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 style=\"text-align: justify;\">Companies, Investors and Advertisers, Via Agency supports you by designing and implementing your corporate communication.<\/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<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-b3b85b9 e-con-full card e-flex e-con e-child\" data-id=\"b3b85b9\" data-element_type=\"container\" data-e-type=\"container\" id=\"AchatContainer\" href=\"https:\/\/yearbook-media.com\/?via_reset=1\">\n\t\t<div class=\"elementor-element elementor-element-87cd087 e-con-full bgOverlay  e-flex e-con e-child\" data-id=\"87cd087\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-fa2825d e-con-full content e-flex e-con e-child\" data-id=\"fa2825d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-feae056 e-con-full e-flex e-con e-child\" data-id=\"feae056\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-2fbf985 e-con-full e-flex e-con e-child\" data-id=\"2fbf985\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4c450d3 RecapitulatifVosCommandestitre elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"4c450d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"fas fa-angle-right\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab47279 elementor-widget elementor-widget-text-editor\" data-id=\"ab47279\" 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\tPurchase of advertising space\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<div class=\"elementor-element elementor-element-d2dd066 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"d2dd066\" 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>Institutional and corporate advertisers, advertise on the Yearbook Economic Report websites using banner, video, pop-up, press release, interview, and sponsorship formats via the yearbook-media.com advertising network.<\/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<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-6030d37 e-con-full card e-flex e-con e-child\" data-id=\"6030d37\" data-element_type=\"container\" data-e-type=\"container\" id=\"MediaContainer\" href=\"https:\/\/via-agency.media\/en\/vous-accompagner\/\">\n\t\t<div class=\"elementor-element elementor-element-5714482 e-con-full bgOverlay  e-flex e-con e-child\" data-id=\"5714482\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-ff0c3ea e-con-full content e-flex e-con e-child\" data-id=\"ff0c3ea\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-67bc1aa e-con-full e-flex e-con e-child\" data-id=\"67bc1aa\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-65ff09f e-con-full e-flex e-con e-child\" data-id=\"65ff09f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2fd8445 RecapitulatifVosCommandestitre elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"2fd8445\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<i aria-hidden=\"true\" class=\"fas fa-angle-right\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae5439c elementor-widget elementor-widget-text-editor\" data-id=\"ae5439c\" 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\tAccompany you\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<\/div>\n\t\t<div class=\"elementor-element elementor-element-cf06e29 e-con-full e-flex e-con e-child\" data-id=\"cf06e29\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-0ee90ad e-con-full e-flex e-con e-child\" data-id=\"0ee90ad\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-40ced7a elementor-widget elementor-widget-text-editor\" data-id=\"40ced7a\" 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>Governments, Institutions and Corporates, depending on your objectives, Via Agency supports you in designing and distributing your digital and print communication.<\/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<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e3d6b50 e-con-full e-flex e-con e-child\" data-id=\"e3d6b50\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-28cd21a e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"28cd21a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8b1acfd elementor-widget-mobile__width-initial UrlMentionsLegales elementor-widget elementor-widget-text-editor\" data-id=\"8b1acfd\" 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<a href=\"https:\/\/via-agency.media\/en\/mentions-legales-disclaimers\/\">Mentions<br>\nlegal<\/a>\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-4829ed5 e-con-full e-flex e-con e-child\" data-id=\"4829ed5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4a6cefa elementor-widget-mobile__width-initial notranslate UrlAchatEspaces elementor-widget__width-inherit elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"4a6cefa\" 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><span style=\"color: #417ec6;\"><a style=\"color: #417ec6;\" href=\"#\">Purchase of advertising space<\/a><\/span><\/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-eefef91 elementor-hidden-desktop elementor-widget elementor-widget-image\" data-id=\"eefef91\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Logo-Via-Agency-020525-V3-r9oaxbyxv08ppt1nhzq5ppsqwqubcmx64lgnnm3pqa.png\" title=\"Logo Via Agency 020525 V3\" alt=\"Logo Via Agency 020525 V3\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\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-a3bf054 elementor-widget-mobile__width-initial notranslate UrlAchatEspaces elementor-widget__width-inherit elementor-hidden-tablet elementor-hidden-mobile elementor-hidden-desktop elementor-widget elementor-widget-text-editor\" data-id=\"a3bf054\" 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<a href=\"#\">yearbook-media.com<\/a>\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-aa85ccd e-con-full e-flex e-con e-child\" data-id=\"aa85ccd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-40b5051 e-con-full e-flex e-con e-child\" data-id=\"40b5051\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6d882b0 elementor-widget-mobile__width-inherit notranslate elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"6d882b0\" 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<a href=\"https:\/\/via-agency.media\/en\/via-agency-direction-redaction-media\/\">Via Agency<\/a>\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-e0379a8 elementor-widget-mobile__width-inherit notranslate elementor-hidden-desktop elementor-widget elementor-widget-text-editor\" data-id=\"e0379a8\" 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<a href=\"https:\/\/via-agency.media\/en\/via-agency-direction-redaction-media\/\">Via Agency<\/a>\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-3113083 elementor-widget-mobile__width-inherit notranslate elementor-hidden-desktop elementor-widget elementor-widget-text-editor\" data-id=\"3113083\" 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\tGovernance Writing Purpose\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<div class=\"elementor-element elementor-element-0b5c16a elementor-widget-mobile__width-initial notranslate elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"0b5c16a\" 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>168 rue Saint Honor\u00e9 75001 Paris \u2013 France<\/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-eea2b90 e-con-full e-flex e-con e-child\" data-id=\"eea2b90\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-de7632a elementor-widget-mobile__width-initial UrlMentionsLegales elementor-hidden-desktop elementor-widget elementor-widget-text-editor\" data-id=\"de7632a\" 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<a href=\"https:\/\/via-agency.media\/en\/mentions-legales-disclaimers\/\">Legal notices<\/a>\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-419767c e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"419767c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7bea608 elementor-widget-mobile__width-inherit notranslate elementor-widget elementor-widget-text-editor\" data-id=\"7bea608\" 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><a href=\"mailto:contact@via-agency.media\">contact@via-agency.media<\/a><\/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-83dfd17 elementor-widget-mobile__width-inherit notranslate elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-text-editor\" data-id=\"83dfd17\" 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<a href=\"tel:+33 (0)1 71 18 64 92\">+33 (0)1 71 18 64 92<\/a>\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<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34334b1 elementor-widget elementor-widget-html\" data-id=\"34334b1\" 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<script>\r\n(function() {\r\n    'use strict';\r\n\r\n    \/\/ Anti-doublon\r\n    if (window.ViaPopupInitialized) return;\r\n    window.ViaPopupInitialized = true;\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ CONFIGURATION\r\n    \/\/ =========================================================================\r\n    \r\n    const VIA_POPUP_CONFIG = {\r\n        \/\/ Patterns de chemins \u00e0 intercepter (fonctionne sur tous les domaines\/sous-domaines)\r\n        targetPaths: [\r\n            '\/communication-institutionnelle',\r\n            '\/communication-corporate',\r\n            '\/vous-accompagner',\r\n            '\/via-agency-direction-redaction-media',\r\n            '\/espace-commercial',\r\n            '\/espace-annonceur',\r\n            '\/espace-institutionnel',\r\n            '\/espace-via-agency'\r\n        ],\r\n        \r\n        \/\/ Domaines autoris\u00e9s (et leurs sous-domaines)\r\n        allowedDomains: [\r\n            'via-agency.media',\r\n            'yearbook-media.com'\r\n        ],\r\n        \r\n        \/\/ Page d'accueil yearbook \u00e0 intercepter\r\n        yearbookHomepage: true,\r\n        \r\n        \/\/ Titres personnalis\u00e9s par chemin (fran\u00e7ais)\r\n        titles: {\r\n            '\/communication-institutionnelle': 'Communication institutionnelle',\r\n            '\/communication-corporate': 'Communication corporate',\r\n            '\/vous-accompagner': 'Vous accompagner',\r\n            '\/via-agency-direction-redaction-media': 'Gouvernance & R\u00e9daction',\r\n            '\/espace-commercial': 'Advisory desk',\r\n            '\/espace-annonceur': 'Espace Acteurs priv\u00e9s',\r\n            '\/espace-institutionnel': 'Espace Acteurs publics',\r\n            '\/espace-via-agency': 'Espace Via Agency',\r\n            '\/': 'Achat d\\'espaces publicitaires'\r\n        },\r\n        \r\n        \/\/ Titres en anglais\r\n        titlesEN: {\r\n            '\/communication-institutionnelle': 'Institutional Communication',\r\n            '\/communication-corporate': 'Corporate Communication',\r\n            '\/vous-accompagner': 'Support Services',\r\n            '\/via-agency-direction-redaction-media': 'Governance & Editorial',\r\n            '\/espace-commercial': 'Advisory desk',\r\n            '\/espace-annonceur': 'Private Sector Area',\r\n            '\/espace-institutionnel': 'Public Sector Area',\r\n            '\/espace-via-agency': 'Via Agency Area',\r\n            '\/': 'Advertising Space Purchase'\r\n        },\r\n        \r\n        \/\/ Chemins n\u00e9cessitant des dimensions personnalis\u00e9es\r\n        customDimensionsPaths: [\r\n            '\/',\r\n            '\/espace-commercial',\r\n            '\/espace-annonceur',\r\n            '\/espace-institutionnel',\r\n            '\/espace-via-agency'\r\n        ],\r\n        \r\n        \/\/ Chemins n\u00e9cessitant la transmission du sessionStorage\r\n        sessionPaths: [\r\n            '\/espace-commercial',\r\n            '\/espace-annonceur',\r\n            '\/espace-institutionnel',\r\n            '\/espace-via-agency'\r\n        ],\r\n        \r\n        \/\/ Chemins sans loader (affichage direct)\r\n        noLoaderPaths: [\r\n            '\/'\r\n        ],\r\n        \r\n        popup: {\r\n            width: 1100,\r\n            height: 600,\r\n            customWidth: 1300,\r\n            customHeight: 630\r\n        },\r\n        baseZIndex: 10000,\r\n        cascadeOffset: 30,\r\n        cssPrefix: 'via-popup-v2'\r\n    };\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ STATE\r\n    \/\/ =========================================================================\r\n    \r\n    const state = {\r\n        popups: new Map(),\r\n        currentZIndex: VIA_POPUP_CONFIG.baseZIndex,\r\n        popupCount: 0,\r\n        stylesInjected: false,\r\n        hoveredPopup: null,\r\n        draggingPopup: null,\r\n        resizingPopup: null\r\n    };\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ STYLES CSS\r\n    \/\/ =========================================================================\r\n    \r\n    function injectStyles() {\r\n        if (state.stylesInjected) return;\r\n        \r\n        const styles = `\r\n            \/* Container du popup *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-container {\r\n                position: fixed;\r\n                background: #fff;\r\n                border-radius: 4px;\r\n                box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);\r\n                display: flex;\r\n                flex-direction: column;\r\n                overflow: hidden;\r\n                opacity: 0;\r\n                transition: opacity 0.2s ease, box-shadow 0.2s ease;\r\n                border: 1px solid #d0d0d0;\r\n                min-width: 300px;\r\n                min-height: 200px;\r\n                max-width: 95vw;\r\n                max-height: 90vh;\r\n            }\r\n            \r\n            .${VIA_POPUP_CONFIG.cssPrefix}-container.visible {\r\n                opacity: 1;\r\n            }\r\n            \r\n            .${VIA_POPUP_CONFIG.cssPrefix}-container.closing {\r\n                opacity: 0;\r\n            }\r\n            \r\n            \/* Poign\u00e9es de redimensionnement - bords et coins *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-handle {\r\n                position: absolute;\r\n                z-index: 10;\r\n                background: transparent;\r\n            }\r\n            \r\n            \/* Bord haut *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-top {\r\n                top: 0;\r\n                left: 10px;\r\n                right: 10px;\r\n                height: 6px;\r\n                cursor: ns-resize;\r\n            }\r\n            \r\n            \/* Bord bas *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-bottom {\r\n                bottom: 0;\r\n                left: 10px;\r\n                right: 10px;\r\n                height: 6px;\r\n                cursor: ns-resize;\r\n            }\r\n            \r\n            \/* Bord gauche *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-left {\r\n                left: 0;\r\n                top: 10px;\r\n                bottom: 10px;\r\n                width: 6px;\r\n                cursor: ew-resize;\r\n            }\r\n            \r\n            \/* Bord droit *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-right {\r\n                right: 0;\r\n                top: 10px;\r\n                bottom: 10px;\r\n                width: 6px;\r\n                cursor: ew-resize;\r\n            }\r\n            \r\n            \/* Coin haut-gauche *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-tl {\r\n                top: 0;\r\n                left: 0;\r\n                width: 10px;\r\n                height: 10px;\r\n                cursor: nwse-resize;\r\n            }\r\n            \r\n            \/* Coin haut-droit *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-tr {\r\n                top: 0;\r\n                right: 0;\r\n                width: 10px;\r\n                height: 10px;\r\n                cursor: nesw-resize;\r\n            }\r\n            \r\n            \/* Coin bas-gauche *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-bl {\r\n                bottom: 0;\r\n                left: 0;\r\n                width: 10px;\r\n                height: 10px;\r\n                cursor: nesw-resize;\r\n            }\r\n            \r\n            \/* Coin bas-droit *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-resize-br {\r\n                bottom: 0;\r\n                right: 0;\r\n                width: 10px;\r\n                height: 10px;\r\n                cursor: nwse-resize;\r\n            }\r\n            \r\n            \/* Header - Style \u00e9pur\u00e9 gris clair - DESIGN COMPACT *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-header {\r\n                display: flex;\r\n                align-items: center;\r\n                justify-content: center;\r\n                position: relative;\r\n                padding: 8px 35px;\r\n                background: #f5f5f5;\r\n                border-bottom: 1px solid #e0e0e0;\r\n                cursor: move;\r\n                user-select: none;\r\n                flex-shrink: 0;\r\n                touch-action: none;\r\n            }\r\n            \r\n            \/* Titre du popup - DESIGN COMPACT *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-title {\r\n                font-size: 15px;\r\n                font-weight: 600;\r\n                color: #225da9;\r\n                text-align: center;\r\n                white-space: nowrap;\r\n                overflow: hidden;\r\n                text-overflow: ellipsis;\r\n            }\r\n            \r\n            \/* Bouton fermer - Style \u00d7 simple - DESIGN COMPACT *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-btn-close {\r\n                position: absolute;\r\n                right: 8px;\r\n                top: 50%;\r\n                transform: translateY(-50%);\r\n                width: 20px;\r\n                height: 20px;\r\n                border: none;\r\n                background: transparent !important;\r\n                cursor: pointer;\r\n                display: flex;\r\n                align-items: center;\r\n                justify-content: center;\r\n                color: #225DA9;\r\n                font-size: 16px;\r\n                font-weight: 500;\r\n                line-height: 1;\r\n                padding: 0;\r\n                transition: color 0.2s ease;\r\n                touch-action: manipulation;\r\n                -webkit-tap-highlight-color: transparent;\r\n                -webkit-appearance: none;\r\n            }\r\n            \r\n            .${VIA_POPUP_CONFIG.cssPrefix}-btn-close:hover {\r\n                color: #1a4a8a;\r\n                background: transparent !important;\r\n                outline: none;\r\n                box-shadow: none;\r\n            }\r\n            \r\n            .${VIA_POPUP_CONFIG.cssPrefix}-btn-close:focus {\r\n                outline: none;\r\n                background: transparent !important;\r\n                box-shadow: none;\r\n            }\r\n            \r\n            .${VIA_POPUP_CONFIG.cssPrefix}-btn-close:active {\r\n                background: transparent !important;\r\n                box-shadow: none;\r\n            }\r\n            \r\n            \/* Contenu (iframe) *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-content {\r\n                flex: 1;\r\n                position: relative;\r\n                overflow: hidden;\r\n                background: #fff;\r\n            }\r\n            \r\n            .${VIA_POPUP_CONFIG.cssPrefix}-iframe {\r\n                width: 100%;\r\n                height: 100%;\r\n                border: none;\r\n            }\r\n            \r\n            \/* Loader - NOUVEAU STYLE *\/\r\n            .${VIA_POPUP_CONFIG.cssPrefix}-loader {\r\n                position: absolute;\r\n                top: 25%;\r\n                left: 50%;\r\n                transform: translate(-50%, -50%);\r\n                display: flex;\r\n                flex-direction: column;\r\n                align-items: center;\r\n                gap: 16px;\r\n            }\r\n            \r\n            .${VIA_POPUP_CONFIG.cssPrefix}-spinner {\r\n                width: 50px;\r\n                height: 50px;\r\n                border: 4px solid #eee;\r\n                border-top: 4px solid #00FF19;\r\n                border-radius: 50%;\r\n                animation: ${VIA_POPUP_CONFIG.cssPrefix}-spin 0.8s linear infinite;\r\n            }\r\n            \r\n            @keyframes ${VIA_POPUP_CONFIG.cssPrefix}-spin {\r\n                0% { transform: rotate(0deg); }\r\n                100% { transform: rotate(360deg); }\r\n            }\r\n            \r\n            .${VIA_POPUP_CONFIG.cssPrefix}-loader-text {\r\n                color: #00FF19;\r\n                font-size: 18px;\r\n                font-weight: 500;\r\n            }\r\n            \r\n            \/* Responsive - DESIGN COMPACT MOBILE *\/\r\n            @media (max-width: 768px) {\r\n                .${VIA_POPUP_CONFIG.cssPrefix}-container {\r\n                    width: 95vw !important;\r\n                    height: calc(80vh - 100px) !important;\r\n                    left: 2.5vw !important;\r\n                    top: 10vh !important;\r\n                }\r\n                \r\n                .${VIA_POPUP_CONFIG.cssPrefix}-resize-handle {\r\n                    display: none;\r\n                }\r\n                \r\n                .${VIA_POPUP_CONFIG.cssPrefix}-header {\r\n                    padding: 6px 28px;\r\n                }\r\n                \r\n                .${VIA_POPUP_CONFIG.cssPrefix}-title {\r\n                    font-size: 14px;\r\n                }\r\n                \r\n                .${VIA_POPUP_CONFIG.cssPrefix}-btn-close {\r\n                    right: 6px;\r\n                    width: 18px;\r\n                    height: 18px;\r\n                    font-size: 14px;\r\n                }\r\n            }\r\n        `;\r\n        \r\n        const styleEl = document.createElement('style');\r\n        styleEl.id = `${VIA_POPUP_CONFIG.cssPrefix}-styles`;\r\n        styleEl.textContent = styles;\r\n        document.head.appendChild(styleEl);\r\n        \r\n        state.stylesInjected = true;\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ UTILITAIRES\r\n    \/\/ =========================================================================\r\n    \r\n    \/**\r\n     * V\u00e9rifie si un domaine est autoris\u00e9 (domaine principal ou sous-domaine)\r\n     *\/\r\n    function isAllowedDomain(hostname) {\r\n        return VIA_POPUP_CONFIG.allowedDomains.some(domain => \r\n            hostname === domain || hostname.endsWith('.' + domain)\r\n        );\r\n    }\r\n    \r\n    \/**\r\n     * Obtient la langue du site depuis sessionStorage\r\n     * @returns {string} 'FR' ou 'EN'\r\n     *\/\r\n    function getSiteLangue() {\r\n        return sessionStorage.getItem('SiteLangue') || 'FR';\r\n    }\r\n    \r\n    \/**\r\n     * Extrait le chemin de base sans le pr\u00e9fixe de langue\r\n     * \/en\/communication-institutionnelle -> \/communication-institutionnelle\r\n     * \/communication-institutionnelle -> \/communication-institutionnelle\r\n     *\/\r\n    function getBasePathWithoutLang(path) {\r\n        const normalized = normalizePath(path);\r\n        if (normalized.startsWith('\/en\/')) {\r\n            return normalized.substring(3); \/\/ Enl\u00e8ve '\/en'\r\n        }\r\n        if (normalized === '\/en') {\r\n            return '\/';\r\n        }\r\n        return normalized;\r\n    }\r\n    \r\n    \/**\r\n     * Adapte un chemin selon la langue\r\n     * @param {string} basePath - Chemin de base (sans \/en\/)\r\n     * @returns {string} Chemin adapt\u00e9 \u00e0 la langue courante\r\n     *\/\r\n    function getLocalizedPath(basePath) {\r\n        const lang = getSiteLangue();\r\n        if (lang === 'EN') {\r\n            if (basePath === '\/') {\r\n                return '\/en';\r\n            }\r\n            return '\/en' + basePath;\r\n        }\r\n        return basePath;\r\n    }\r\n    \r\n    \/**\r\n     * Adapte une URL compl\u00e8te selon la langue\r\n     * @param {string} url - URL \u00e0 adapter\r\n     * @returns {string} URL adapt\u00e9e \u00e0 la langue courante\r\n     *\/\r\n    function getLocalizedUrl(url) {\r\n        try {\r\n            const urlObj = new URL(url, window.location.origin);\r\n            const basePath = getBasePathWithoutLang(urlObj.pathname);\r\n            const localizedPath = getLocalizedPath(basePath);\r\n            urlObj.pathname = localizedPath;\r\n            return urlObj.href;\r\n        } catch (e) {\r\n            return url;\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * Normalise un chemin (supprime le slash final)\r\n     *\/\r\n    function normalizePath(path) {\r\n        return path.replace(\/\\\/$\/, '') || '\/';\r\n    }\r\n    \r\n    \/**\r\n     * V\u00e9rifie si une URL doit \u00eatre intercept\u00e9e\r\n     *\/\r\n    function shouldIntercept(url) {\r\n        try {\r\n            const urlObj = new URL(url, window.location.origin);\r\n            const hostname = urlObj.hostname;\r\n            const path = normalizePath(urlObj.pathname);\r\n            const basePath = getBasePathWithoutLang(path);\r\n            \r\n            \/\/ V\u00e9rifier si le domaine est autoris\u00e9\r\n            if (!isAllowedDomain(hostname)) {\r\n                return false;\r\n            }\r\n            \r\n            \/\/ Cas sp\u00e9cial : page d'accueil yearbook (\/ ou \/en)\r\n            if (VIA_POPUP_CONFIG.yearbookHomepage && (basePath === '\/') && hostname.includes('yearbook-media.com')) {\r\n                return true;\r\n            }\r\n            \r\n            \/\/ V\u00e9rifier si le chemin de base est dans la liste\r\n            return VIA_POPUP_CONFIG.targetPaths.some(targetPath => \r\n                normalizePath(targetPath) === basePath\r\n            );\r\n        } catch (e) {\r\n            return false;\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * Obtient le titre pour une URL\r\n     *\/\r\n    function getTitleFromUrl(url) {\r\n        try {\r\n            const urlObj = new URL(url, window.location.origin);\r\n            const path = normalizePath(urlObj.pathname);\r\n            const basePath = getBasePathWithoutLang(path);\r\n            const lang = getSiteLangue();\r\n            \r\n            \/\/ Choisir le mapping de titres selon la langue\r\n            const titlesMap = lang === 'EN' ? VIA_POPUP_CONFIG.titlesEN : VIA_POPUP_CONFIG.titles;\r\n            \r\n            \/\/ Chercher dans le mapping des titres\r\n            if (titlesMap[basePath]) {\r\n                return titlesMap[basePath];\r\n            }\r\n            \r\n            \/\/ Fallback sur les titres FR si pas trouv\u00e9 en EN\r\n            if (lang === 'EN' && VIA_POPUP_CONFIG.titles[basePath]) {\r\n                return VIA_POPUP_CONFIG.titles[basePath];\r\n            }\r\n            \r\n            \/\/ Fallback : g\u00e9n\u00e9rer depuis le chemin\r\n            const lastSegment = basePath.split('\/').filter(Boolean).pop() || 'Page';\r\n            return lastSegment\r\n                .replace(\/-\/g, ' ')\r\n                .replace(\/\\b\\w\/g, c => c.toUpperCase());\r\n        } catch (e) {\r\n            return 'Page';\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * Obtient les dimensions pour une URL\r\n     *\/\r\n    function getDimensions(url) {\r\n        try {\r\n            const urlObj = new URL(url, window.location.origin);\r\n            const path = normalizePath(urlObj.pathname);\r\n            const basePath = getBasePathWithoutLang(path);\r\n            \r\n            \/\/ V\u00e9rifier si ce chemin n\u00e9cessite des dimensions personnalis\u00e9es\r\n            if (VIA_POPUP_CONFIG.customDimensionsPaths.some(p => normalizePath(p) === basePath)) {\r\n                return {\r\n                    width: VIA_POPUP_CONFIG.popup.customWidth,\r\n                    height: VIA_POPUP_CONFIG.popup.customHeight\r\n                };\r\n            }\r\n        } catch (e) {}\r\n        \r\n        return {\r\n            width: VIA_POPUP_CONFIG.popup.width,\r\n            height: VIA_POPUP_CONFIG.popup.height\r\n        };\r\n    }\r\n    \r\n    \/**\r\n     * V\u00e9rifie si une URL n\u00e9cessite la transmission du sessionStorage\r\n     *\/\r\n    function requiresSession(url) {\r\n        try {\r\n            const urlObj = new URL(url, window.location.origin);\r\n            const path = normalizePath(urlObj.pathname);\r\n            const basePath = getBasePathWithoutLang(path);\r\n            \r\n            return VIA_POPUP_CONFIG.sessionPaths.some(p => normalizePath(p) === basePath);\r\n        } catch (e) {\r\n            return false;\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * V\u00e9rifie si une URL doit afficher le loader\r\n     *\/\r\n    function shouldShowLoader(url) {\r\n        try {\r\n            const urlObj = new URL(url, window.location.origin);\r\n            const path = normalizePath(urlObj.pathname);\r\n            const basePath = getBasePathWithoutLang(path);\r\n            \r\n            \/\/ Ne pas afficher le loader pour les chemins dans noLoaderPaths\r\n            return !VIA_POPUP_CONFIG.noLoaderPaths.some(p => normalizePath(p) === basePath);\r\n        } catch (e) {\r\n            return true; \/\/ Par d\u00e9faut, afficher le loader\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * Normalise une URL compl\u00e8te (pour cl\u00e9 unique des popups)\r\n     *\/\r\n    function normalizeUrl(url) {\r\n        try {\r\n            const urlObj = new URL(url, window.location.origin);\r\n            return urlObj.href.replace(\/\\\/$\/, '');\r\n        } catch (e) {\r\n            return url.replace(\/\\\/$\/, '');\r\n        }\r\n    }\r\n    \r\n    function getInitialPosition(width, height) {\r\n        const offset = (state.popupCount % 5) * VIA_POPUP_CONFIG.cascadeOffset;\r\n        const viewportWidth = window.innerWidth;\r\n        const viewportHeight = window.innerHeight;\r\n        \r\n        \/\/ Horizontal : bas\u00e9 sur la largeur r\u00e9elle (pour voir la croix de fermeture)\r\n        const left = Math.max(50, (viewportWidth - width) \/ 2 + offset);\r\n        \r\n        \/\/ Vertical : dimensions de r\u00e9f\u00e9rence pour cascade coh\u00e9rente\r\n        const refHeight = VIA_POPUP_CONFIG.popup.height; \/\/ 600\r\n        const top = Math.max(50, (viewportHeight - refHeight) \/ 2 + offset);\r\n        \r\n        return { left, top };\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ SESSION STORAGE TRANSMISSION\r\n    \/\/ =========================================================================\r\n    \r\n    \/**\r\n     * Envoie les donn\u00e9es sessionStorage \u00e0 l'iframe via postMessage\r\n     *\/\r\n    function sendSessionStorageToIframe(iframe, targetUrl) {\r\n        try {\r\n            const targetOrigin = new URL(targetUrl).origin;\r\n            \r\n            \/\/ Collecter toutes les donn\u00e9es sessionStorage\r\n            const sessionData = {};\r\n            for (let i = 0; i < sessionStorage.length; i++) {\r\n                const key = sessionStorage.key(i);\r\n                sessionData[key] = sessionStorage.getItem(key);\r\n            }\r\n            \r\n            \/\/ Envoyer via postMessage\r\n            iframe.contentWindow.postMessage({\r\n                type: 'VIA_SESSION_DATA',\r\n                data: sessionData\r\n            }, targetOrigin);\r\n            \r\n            console.log('\u2705 SessionStorage transmis \u00e0:', targetOrigin);\r\n        } catch (e) {\r\n            console.error('Erreur transmission sessionStorage:', e);\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * Configure la transmission du sessionStorage avec retry\r\n     *\/\r\n    function setupSessionTransmission(iframe, url) {\r\n        \/\/ V\u00e9rifier si cette URL n\u00e9cessite le sessionStorage\r\n        if (!requiresSession(url)) {\r\n            return;\r\n        }\r\n        \r\n        \/\/ Envoyer d\u00e8s que l'iframe est charg\u00e9e\r\n        iframe.addEventListener('load', () => {\r\n            sendSessionStorageToIframe(iframe, url);\r\n            \r\n            \/\/ Retry apr\u00e8s 500ms au cas o\u00f9\r\n            setTimeout(() => {\r\n                sendSessionStorageToIframe(iframe, url);\r\n            }, 500);\r\n        });\r\n        \r\n        \/\/ \u00c9couter si l'iframe signale qu'elle est pr\u00eate\r\n        window.addEventListener('message', function handler(event) {\r\n            if (event.data && event.data.type === 'VIA_IFRAME_READY') {\r\n                console.log('\ud83d\udce8 Iframe pr\u00eate, envoi des donn\u00e9es session...');\r\n                sendSessionStorageToIframe(iframe, url);\r\n                \r\n                \/\/ Retirer le listener apr\u00e8s utilisation\r\n                window.removeEventListener('message', handler);\r\n            }\r\n        });\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ CR\u00c9ATION DU POPUP\r\n    \/\/ =========================================================================\r\n    \r\n    function createPopup(url) {\r\n        \/\/ Fermer le menu Elementor s'il est ouvert\r\n        const menuPopupId = findMenuPopupId();\r\n        const menuPopup = document.getElementById(menuPopupId);\r\n        if (menuPopup) {\r\n            menuPopup.style.display = 'none';\r\n        }\r\n        \r\n        \/\/ Adapter l'URL selon la langue\r\n        const localizedUrl = getLocalizedUrl(url);\r\n        \r\n        const normalizedUrl = normalizeUrl(localizedUrl);\r\n        if (state.popups.has(normalizedUrl)) {\r\n            bringToFront(state.popups.get(normalizedUrl));\r\n            return;\r\n        }\r\n        \r\n        injectStyles();\r\n        \r\n        const title = getTitleFromUrl(localizedUrl);\r\n        const zIndex = ++state.currentZIndex;\r\n        \r\n        \/\/ Dimensions : personnalis\u00e9es ou par d\u00e9faut\r\n        const dimensions = getDimensions(localizedUrl);\r\n        const width = dimensions.width;\r\n        const height = dimensions.height;\r\n        \r\n        const position = getInitialPosition(width, height);\r\n        \r\n        \/\/ V\u00e9rifier si on doit afficher le loader\r\n        const showLoader = shouldShowLoader(localizedUrl);\r\n        \r\n        \/\/ Container\r\n        const container = document.createElement('div');\r\n        container.className = `${VIA_POPUP_CONFIG.cssPrefix}-container`;\r\n        container.style.cssText = `\r\n            left: ${position.left}px;\r\n            top: ${position.top}px;\r\n            width: ${width}px;\r\n            height: ${height}px;\r\n            z-index: ${zIndex};\r\n        `;\r\n        container.dataset.url = normalizedUrl;\r\n        \r\n        \/\/ Header \u00e9pur\u00e9\r\n        const header = document.createElement('div');\r\n        header.className = `${VIA_POPUP_CONFIG.cssPrefix}-header`;\r\n        header.innerHTML = `\r\n            <span class=\"${VIA_POPUP_CONFIG.cssPrefix}-title\">${title}<\/span>\r\n            <button class=\"${VIA_POPUP_CONFIG.cssPrefix}-btn-close\" title=\"Fermer\">\u00d7<\/button>\r\n        `;\r\n        \r\n        \/\/ Contenu - avec ou sans loader selon le chemin\r\n        const content = document.createElement('div');\r\n        content.className = `${VIA_POPUP_CONFIG.cssPrefix}-content`;\r\n        content.innerHTML = `\r\n            ${showLoader ? `\r\n            <div class=\"${VIA_POPUP_CONFIG.cssPrefix}-loader\">\r\n                <div class=\"${VIA_POPUP_CONFIG.cssPrefix}-spinner\"><\/div>\r\n                <span class=\"${VIA_POPUP_CONFIG.cssPrefix}-loader-text\">Loading in progress<\/span>\r\n            <\/div>\r\n            ` : ''}\r\n            <iframe class=\"${VIA_POPUP_CONFIG.cssPrefix}-iframe\" src=\"${localizedUrl}\"><\/iframe>\r\n        `;\r\n        \r\n        \/\/ Assemblage\r\n        container.appendChild(header);\r\n        container.appendChild(content);\r\n        \r\n        \/\/ Poign\u00e9es de redimensionnement - 4 bords + 4 coins\r\n        const zones = ['top', 'bottom', 'left', 'right', 'tl', 'tr', 'bl', 'br'];\r\n        zones.forEach(zone => {\r\n            const handle = document.createElement('div');\r\n            handle.className = `${VIA_POPUP_CONFIG.cssPrefix}-resize-handle ${VIA_POPUP_CONFIG.cssPrefix}-resize-${zone}`;\r\n            handle.dataset.zone = zone;\r\n            container.appendChild(handle);\r\n        });\r\n        \r\n        document.body.appendChild(container);\r\n        \r\n        \/\/ Enregistrement\r\n        state.popups.set(normalizedUrl, container);\r\n        state.popupCount++;\r\n        \r\n        \/\/ Animation d'entr\u00e9e\r\n        requestAnimationFrame(() => {\r\n            container.classList.add('visible');\r\n        });\r\n        \r\n        \/\/ Gestion iframe\r\n        const iframe = content.querySelector(`.${VIA_POPUP_CONFIG.cssPrefix}-iframe`);\r\n        const loader = content.querySelector(`.${VIA_POPUP_CONFIG.cssPrefix}-loader`);\r\n        \r\n        \/\/ Fonction pour masquer le loader (seulement si le loader existe)\r\n        function hideLoader() {\r\n            if (loader) {\r\n                loader.style.display = 'none';\r\n            }\r\n        }\r\n        \r\n        \/\/ Masquer apr\u00e8s un d\u00e9lai minimum (seulement si loader affich\u00e9)\r\n        if (showLoader) {\r\n            setTimeout(hideLoader, 10000);\r\n            \r\n            \/\/ Masquer au load complet (fallback)\r\n            iframe.addEventListener('load', hideLoader);\r\n        }\r\n        \r\n        \/\/ \u00c9couter VIA_IFRAME_READY pour le sessionStorage (mais pas pour le loader)\r\n        const readyHandler = function(event) {\r\n            if (event.data && event.data.type === 'VIA_IFRAME_READY') {\r\n                \/\/ Ne pas masquer le loader ici, juste pour le sessionStorage\r\n            }\r\n        };\r\n        window.addEventListener('message', readyHandler);\r\n        \r\n        \/\/ Configuration de la transmission du sessionStorage\r\n        setupSessionTransmission(iframe, url);\r\n        \/\/ \u2705 v2.6 : Yearbook homepage \u2014 reset sessionStorage stale avant affichage\r\n        (function() {\r\n            try {\r\n                var _urlObj = new URL(localizedUrl);\r\n                var _isYearbookHome = _urlObj.hostname.includes('yearbook-media.com') &&\r\n                    (getBasePathWithoutLang(_urlObj.pathname) === '\/');\r\n                if (!_isYearbookHome) return;\r\n                iframe.addEventListener('load', function _ybReset() {\r\n                    iframe.removeEventListener('load', _ybReset);\r\n                    setTimeout(function() {\r\n                        try {\r\n                            iframe.contentWindow.postMessage(\r\n                                { type: 'VIA_RESET_YEARBOOK_SESSION' },\r\n                                'https:\/\/yearbook-media.com'\r\n                            );\r\n                        } catch(e) {}\r\n                    }, 400);\r\n                });\r\n            } catch(e) {}\r\n        })();\r\n        \r\n        \/\/ Events\r\n        setupDrag(container, header);\r\n        setupClose(container);\r\n        setupFocus(container);\r\n        setupResizeAllZones(container);\r\n        \r\n        return container;\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ DRAG & DROP\r\n    \/\/ =========================================================================\r\n    \r\n    \/\/ \u00c9v\u00e9nements globaux pour le drag (attach\u00e9s une seule fois)\r\n    let dragEventsInitialized = false;\r\n    \r\n    function initGlobalDragEvents() {\r\n        if (dragEventsInitialized) return;\r\n        \r\n        document.addEventListener('mousemove', drag);\r\n        document.addEventListener('mouseup', dragEnd);\r\n        document.addEventListener('touchmove', drag, { passive: false });\r\n        document.addEventListener('touchend', dragEnd);\r\n        \r\n        dragEventsInitialized = true;\r\n    }\r\n    \r\n    function setupDrag(container, header) {\r\n        initGlobalDragEvents();\r\n        \r\n        \/\/ Donn\u00e9es de drag pour ce popup\r\n        container.dragData = {\r\n            isDragging: false,\r\n            currentX: 0,\r\n            currentY: 0,\r\n            initialX: 0,\r\n            initialY: 0,\r\n            xOffset: 0,\r\n            yOffset: 0\r\n        };\r\n        \r\n        header.addEventListener('mousedown', (e) => dragStart(e, container));\r\n        header.addEventListener('touchstart', (e) => dragStart(e, container), { passive: false });\r\n    }\r\n    \r\n    function dragStart(e, container) {\r\n        \/\/ Ignorer si clic sur le bouton fermer\r\n        if (e.target.closest(`.${VIA_POPUP_CONFIG.cssPrefix}-btn-close`)) {\r\n            return;\r\n        }\r\n        \r\n        e.preventDefault();\r\n        \r\n        const data = container.dragData;\r\n        \r\n        if (e.type === \"touchstart\") {\r\n            data.initialX = e.touches[0].clientX - data.xOffset;\r\n            data.initialY = e.touches[0].clientY - data.yOffset;\r\n        } else {\r\n            data.initialX = e.clientX - data.xOffset;\r\n            data.initialY = e.clientY - data.yOffset;\r\n        }\r\n        \r\n        data.isDragging = true;\r\n        state.draggingPopup = container;\r\n        \r\n        bringToFront(container);\r\n        \r\n        \/\/ Feedback visuel\r\n        container.style.boxShadow = '0 8px 25px rgba(0,0,0,0.3)';\r\n    }\r\n    \r\n    function drag(e) {\r\n        const container = state.draggingPopup;\r\n        if (!container || !container.dragData.isDragging) return;\r\n        \r\n        e.preventDefault();\r\n        \r\n        const data = container.dragData;\r\n        \r\n        if (e.type === \"touchmove\") {\r\n            data.currentX = e.touches[0].clientX - data.initialX;\r\n            data.currentY = e.touches[0].clientY - data.initialY;\r\n        } else {\r\n            data.currentX = e.clientX - data.initialX;\r\n            data.currentY = e.clientY - data.initialY;\r\n        }\r\n        \r\n        \/\/ Limites pour garder le popup visible (au moins une partie)\r\n        const containerWidth = container.offsetWidth;\r\n        const containerHeight = container.offsetHeight;\r\n        const viewportWidth = window.innerWidth;\r\n        const viewportHeight = window.innerHeight;\r\n        \r\n        \/\/ R\u00e9cup\u00e9rer la position initiale du popup\r\n        const initialTop = parseFloat(container.style.top) || 0;\r\n        const initialLeft = parseFloat(container.style.left) || 0;\r\n        \r\n        \/\/ Horizontal : garder 50px du popup visible \u00e0 gauche et \u00e0 droite\r\n        const minX = 50 - initialLeft - containerWidth; \/\/ 50px visible quand on va \u00e0 gauche\r\n        const maxX = viewportWidth - 50 - initialLeft; \/\/ 50px visible quand on va \u00e0 droite\r\n        data.currentX = Math.max(minX, Math.min(maxX, data.currentX));\r\n        \r\n        \/\/ Vertical : peut remonter jusqu'\u00e0 20px du haut, descendre jusqu'\u00e0 20px du bas (header visible)\r\n        const minY = 20 - initialTop;\r\n        const maxY = viewportHeight - 20 - initialTop - 50; \/\/ 50 = hauteur du header environ\r\n        data.currentY = Math.max(minY, Math.min(maxY, data.currentY));\r\n        \r\n        data.xOffset = data.currentX;\r\n        data.yOffset = data.currentY;\r\n        \r\n        container.style.transform = `translate(${data.currentX}px, ${data.currentY}px)`;\r\n    }\r\n    \r\n    function dragEnd() {\r\n        const container = state.draggingPopup;\r\n        if (!container) return;\r\n        \r\n        const data = container.dragData;\r\n        \r\n        if (data.isDragging) {\r\n            data.initialX = data.currentX;\r\n            data.initialY = data.currentY;\r\n            data.isDragging = false;\r\n            \r\n            \/\/ Reset feedback visuel\r\n            container.style.boxShadow = '';\r\n        }\r\n        \r\n        state.draggingPopup = null;\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ RESIZE - 4 BORDS + 4 COINS\r\n    \/\/ =========================================================================\r\n    \r\n    let resizeEventsInitialized = false;\r\n    \r\n    function initGlobalResizeEvents() {\r\n        if (resizeEventsInitialized) return;\r\n        \r\n        document.addEventListener('mousemove', resizeMove);\r\n        document.addEventListener('mouseup', resizeEnd);\r\n        document.addEventListener('touchmove', resizeMove, { passive: false });\r\n        document.addEventListener('touchend', resizeEnd);\r\n        \r\n        resizeEventsInitialized = true;\r\n    }\r\n    \r\n    function setupResizeAllZones(container) {\r\n        initGlobalResizeEvents();\r\n        \r\n        container.resizeData = {\r\n            isResizing: false,\r\n            zone: null,\r\n            startX: 0,\r\n            startY: 0,\r\n            startWidth: 0,\r\n            startHeight: 0,\r\n            startLeft: 0,\r\n            startTop: 0\r\n        };\r\n        \r\n        \/\/ Attacher les \u00e9v\u00e9nements \u00e0 chaque poign\u00e9e\r\n        const handles = container.querySelectorAll(`.${VIA_POPUP_CONFIG.cssPrefix}-resize-handle`);\r\n        handles.forEach(handle => {\r\n            handle.addEventListener('mousedown', (e) => resizeStart(e, container, handle.dataset.zone));\r\n            handle.addEventListener('touchstart', (e) => resizeStart(e, container, handle.dataset.zone), { passive: false });\r\n        });\r\n    }\r\n    \r\n    function resizeStart(e, container, zone) {\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n        \r\n        const data = container.resizeData;\r\n        const rect = container.getBoundingClientRect();\r\n        \r\n        \/\/ Position initiale de la souris\r\n        if (e.type === 'touchstart') {\r\n            data.startX = e.touches[0].clientX;\r\n            data.startY = e.touches[0].clientY;\r\n        } else {\r\n            data.startX = e.clientX;\r\n            data.startY = e.clientY;\r\n        }\r\n        \r\n        \/\/ Dimensions et position initiales du popup\r\n        data.startWidth = rect.width;\r\n        data.startHeight = rect.height;\r\n        data.startLeft = rect.left;\r\n        data.startTop = rect.top;\r\n        data.zone = zone;\r\n        \r\n        data.isResizing = true;\r\n        state.resizingPopup = container;\r\n        \r\n        bringToFront(container);\r\n        \r\n        \/\/ Feedback visuel\r\n        container.style.boxShadow = '0 8px 25px rgba(0,0,0,0.3)';\r\n    }\r\n    \r\n    function resizeMove(e) {\r\n        const container = state.resizingPopup;\r\n        if (!container || !container.resizeData.isResizing) return;\r\n        \r\n        e.preventDefault();\r\n        \r\n        const data = container.resizeData;\r\n        \r\n        let currentX, currentY;\r\n        if (e.type === 'touchmove') {\r\n            currentX = e.touches[0].clientX;\r\n            currentY = e.touches[0].clientY;\r\n        } else {\r\n            currentX = e.clientX;\r\n            currentY = e.clientY;\r\n        }\r\n        \r\n        \/\/ Calcul du delta\r\n        const deltaX = currentX - data.startX;\r\n        const deltaY = currentY - data.startY;\r\n        \r\n        \/\/ Limites\r\n        const minWidth = 300;\r\n        const minHeight = 200;\r\n        const maxWidth = window.innerWidth * 0.95;\r\n        const maxHeight = window.innerHeight * 0.9;\r\n        \r\n        let newWidth = data.startWidth;\r\n        let newHeight = data.startHeight;\r\n        let newLeft = data.startLeft;\r\n        let newTop = data.startTop;\r\n        \r\n        \/\/ Comportement selon la zone\r\n        switch (data.zone) {\r\n            \/\/ Bords\r\n            case 'top':\r\n                newHeight = data.startHeight - deltaY;\r\n                newTop = data.startTop + deltaY;\r\n                break;\r\n                \r\n            case 'bottom':\r\n                newHeight = data.startHeight + deltaY;\r\n                break;\r\n                \r\n            case 'left':\r\n                newWidth = data.startWidth - deltaX;\r\n                newLeft = data.startLeft + deltaX;\r\n                break;\r\n                \r\n            case 'right':\r\n                newWidth = data.startWidth + deltaX;\r\n                break;\r\n                \r\n            \/\/ Coins\r\n            case 'tl': \/\/ Top-left\r\n                newWidth = data.startWidth - deltaX;\r\n                newHeight = data.startHeight - deltaY;\r\n                newLeft = data.startLeft + deltaX;\r\n                newTop = data.startTop + deltaY;\r\n                break;\r\n                \r\n            case 'tr': \/\/ Top-right\r\n                newWidth = data.startWidth + deltaX;\r\n                newHeight = data.startHeight - deltaY;\r\n                newTop = data.startTop + deltaY;\r\n                break;\r\n                \r\n            case 'bl': \/\/ Bottom-left\r\n                newWidth = data.startWidth - deltaX;\r\n                newHeight = data.startHeight + deltaY;\r\n                newLeft = data.startLeft + deltaX;\r\n                break;\r\n                \r\n            case 'br': \/\/ Bottom-right\r\n                newWidth = data.startWidth + deltaX;\r\n                newHeight = data.startHeight + deltaY;\r\n                break;\r\n        }\r\n        \r\n        \/\/ Appliquer les limites de taille et corriger la position si n\u00e9cessaire\r\n        if (newWidth < minWidth) {\r\n            if (data.zone === 'left' || data.zone === 'tl' || data.zone === 'bl') {\r\n                newLeft = data.startLeft + data.startWidth - minWidth;\r\n            }\r\n            newWidth = minWidth;\r\n        }\r\n        if (newWidth > maxWidth) {\r\n            newWidth = maxWidth;\r\n        }\r\n        \r\n        if (newHeight < minHeight) {\r\n            if (data.zone === 'top' || data.zone === 'tl' || data.zone === 'tr') {\r\n                newTop = data.startTop + data.startHeight - minHeight;\r\n            }\r\n            newHeight = minHeight;\r\n        }\r\n        if (newHeight > maxHeight) {\r\n            newHeight = maxHeight;\r\n        }\r\n        \r\n        \/\/ Limites de position\r\n        newLeft = Math.max(20, newLeft);\r\n        newTop = Math.max(20, newTop);\r\n        \r\n        \/\/ Appliquer\r\n        container.style.width = newWidth + 'px';\r\n        container.style.height = newHeight + 'px';\r\n        container.style.left = newLeft + 'px';\r\n        container.style.top = newTop + 'px';\r\n        \r\n        \/\/ Reset transform car on utilise left\/top directement\r\n        container.style.transform = 'none';\r\n        \r\n        \/\/ Reset les offsets du drag\r\n        if (container.dragData) {\r\n            container.dragData.xOffset = 0;\r\n            container.dragData.yOffset = 0;\r\n            container.dragData.currentX = 0;\r\n            container.dragData.currentY = 0;\r\n            container.dragData.initialX = 0;\r\n            container.dragData.initialY = 0;\r\n        }\r\n    }\r\n    \r\n    function resizeEnd() {\r\n        const container = state.resizingPopup;\r\n        if (!container) return;\r\n        \r\n        if (container.resizeData.isResizing) {\r\n            container.resizeData.isResizing = false;\r\n            container.resizeData.zone = null;\r\n            container.style.boxShadow = '';\r\n        }\r\n        \r\n        state.resizingPopup = null;\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ FERMETURE\r\n    \/\/ =========================================================================\r\n    \r\n    function setupClose(container) {\r\n        const closeBtn = container.querySelector(`.${VIA_POPUP_CONFIG.cssPrefix}-btn-close`);\r\n        \r\n        \/\/ Desktop\r\n        closeBtn.addEventListener('click', (e) => {\r\n            e.stopPropagation();\r\n            e.preventDefault();\r\n            closePopup(container);\r\n        });\r\n        \r\n        \/\/ Mobile - touchstart pour \u00e9viter le d\u00e9lai\r\n        closeBtn.addEventListener('touchstart', (e) => {\r\n            e.stopPropagation();\r\n        }, { passive: true });\r\n        \r\n        closeBtn.addEventListener('touchend', (e) => {\r\n            e.stopPropagation();\r\n            e.preventDefault();\r\n            closePopup(container);\r\n        });\r\n    }\r\n    \r\n    function closePopup(container) {\r\n        const url = container.dataset.url;\r\n        \r\n        \/\/ V\u00e9rifier si c'est un espace utilisateur \u2192 d\u00e9connexion\r\n        if (requiresSession(url)) {\r\n            performLogout();\r\n        }\r\n        \r\n        container.classList.add('closing');\r\n        container.classList.remove('visible');\r\n        \r\n        setTimeout(() => {\r\n            state.popups.delete(url);\r\n            container.remove();\r\n        }, 200);\r\n    }\r\n    \r\n    \/**\r\n     * D\u00e9connexion automatique\r\n     *\/\r\n    function performLogout() {\r\n        console.log('\ud83d\udd12 D\u00e9connexion automatique...');\r\n        \r\n        \/\/ Vider sessionStorage\r\n        sessionStorage.clear();\r\n        \r\n        \/\/ Appel AJAX pour d\u00e9connecter c\u00f4t\u00e9 serveur\r\n        fetch('\/wp-admin\/admin-ajax.php', {\r\n            method: 'POST',\r\n            headers: {\r\n                'Content-Type': 'application\/x-www-form-urlencoded',\r\n            },\r\n            body: 'action=custom_logout'\r\n        })\r\n        .then(response => {\r\n            console.log('\u2705 D\u00e9connexion effectu\u00e9e');\r\n        })\r\n        .catch(error => {\r\n            console.error('Erreur d\u00e9connexion:', error);\r\n        });\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ FOCUS (Z-INDEX)\r\n    \/\/ =========================================================================\r\n    \r\n    function setupFocus(container) {\r\n        \/\/ Clic sur le container (header, bordures)\r\n        container.addEventListener('mousedown', () => {\r\n            bringToFront(container);\r\n        });\r\n        \r\n        \/\/ D\u00e9tection du clic dans l'iframe via focus\r\n        const iframe = container.querySelector(`.${VIA_POPUP_CONFIG.cssPrefix}-iframe`);\r\n        \r\n        \/\/ Quand l'iframe re\u00e7oit le focus (clic dedans)\r\n        iframe.addEventListener('mouseenter', () => {\r\n            \/\/ Marquer ce container comme \"survol\u00e9\"\r\n            state.hoveredPopup = container;\r\n        });\r\n        \r\n        iframe.addEventListener('mouseleave', () => {\r\n            if (state.hoveredPopup === container) {\r\n                state.hoveredPopup = null;\r\n            }\r\n        });\r\n    }\r\n    \r\n    \/\/ D\u00e9tection globale : quand la fen\u00eatre principale perd le focus,\r\n    \/\/ c'est qu'on a cliqu\u00e9 dans une iframe\r\n    function setupGlobalFocusDetection() {\r\n        window.addEventListener('blur', () => {\r\n            \/\/ Si on a un popup survol\u00e9, c'est celui qui a re\u00e7u le clic\r\n            if (state.hoveredPopup) {\r\n                bringToFront(state.hoveredPopup);\r\n            }\r\n        });\r\n    }\r\n    \r\n    function bringToFront(container) {\r\n        state.currentZIndex++;\r\n        container.style.zIndex = state.currentZIndex;\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ INTERCEPTION DES LIENS\r\n    \/\/ =========================================================================\r\n    \r\n    function interceptLinks() {\r\n        document.addEventListener('click', (e) => {\r\n            const link = e.target.closest('a[href]');\r\n            if (!link) return;\r\n            \r\n            const href = link.getAttribute('href');\r\n            if (!href) return;\r\n            \r\n            \/\/ Ne PAS intercepter les liens Elementor action (menu, popups, etc.)\r\n            if (href.includes('elementor-action')) {\r\n                return;\r\n            }\r\n            \r\n            \/\/ Ne PAS intercepter les liens avec # seulement ou # au d\u00e9but (ancres, toggles)\r\n            if (href === '#' || href.startsWith('#')) {\r\n                return;\r\n            }\r\n            \r\n            let fullUrl;\r\n            try {\r\n                fullUrl = new URL(href, window.location.origin).href;\r\n            } catch (err) {\r\n                return;\r\n            }\r\n            \r\n            if (shouldIntercept(fullUrl)) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                createPopup(fullUrl);\r\n            }\r\n        }, true);\r\n    }\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ GESTION POPUPS ELEMENTOR (Connexion + Menu)\r\n    \/\/ =========================================================================\r\n    \r\n    const ELEMENTOR_POPUP_IDS = {\r\n        LOGIN: 'elementor-popup-modal-14297'\r\n        \/\/ MENU est d\u00e9tect\u00e9 dynamiquement\r\n    };\r\n    \r\n    \/**\r\n     * Trouve l'ID du popup menu Elementor dynamiquement\r\n     * Fonctionne sur via-agency.media (21589) et les sites pays (diff\u00e9rents IDs)\r\n     *\/\r\n    function findMenuPopupId() {\r\n        \/\/ Chercher tous les popups Elementor\r\n        const popups = document.querySelectorAll('[id^=\"elementor-popup-modal-\"]');\r\n        for (const popup of popups) {\r\n            \/\/ Exclure le popup de connexion\r\n            if (popup.id === ELEMENTOR_POPUP_IDS.LOGIN) continue;\r\n            \/\/ Le popup menu contient g\u00e9n\u00e9ralement des liens de navigation\r\n            if (popup.querySelector('.elementor-nav-menu, .menu-item, a[href]')) {\r\n                return popup.id;\r\n            }\r\n        }\r\n        \/\/ Fallback : retourner le premier popup qui n'est pas celui de connexion\r\n        for (const popup of popups) {\r\n            if (popup.id !== ELEMENTOR_POPUP_IDS.LOGIN) {\r\n                return popup.id;\r\n            }\r\n        }\r\n        \/\/ Fallback ultime pour via-agency.media\r\n        return 'elementor-popup-modal-21589';\r\n    }\r\n    \r\n    let elementorPopupHandled = false; \/\/ Flag pour \u00e9viter les boucles\r\n    \r\n    \/**\r\n     * Met un popup Elementor au-dessus de tous les ViaPopup\r\n     *\/\r\n    function bringElementorPopupToFront(popupId) {\r\n        if (elementorPopupHandled) return; \/\/ \u00c9viter la boucle\r\n        \r\n        const popup = document.getElementById(popupId);\r\n        if (popup) {\r\n            elementorPopupHandled = true;\r\n            \r\n            state.currentZIndex++;\r\n            const newZIndex = state.currentZIndex + 1000;\r\n            popup.style.zIndex = newZIndex.toString();\r\n            \r\n            \/\/ S'assurer que l'overlay est aussi au bon z-index\r\n            const overlay = popup.querySelector('.dialog-lightbox-overlay');\r\n            if (overlay) {\r\n                overlay.style.zIndex = (newZIndex - 1).toString();\r\n            }\r\n            \r\n            console.log('\ud83d\udd1d Popup Elementor pass\u00e9 au premier plan, z-index:', newZIndex);\r\n            \r\n            \/\/ Reset le flag apr\u00e8s un court d\u00e9lai\r\n            setTimeout(() => {\r\n                elementorPopupHandled = false;\r\n            }, 500);\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * Met le popup de connexion au premier plan\r\n     *\/\r\n    function bringLoginPopupToFront() {\r\n        bringElementorPopupToFront(ELEMENTOR_POPUP_IDS.LOGIN);\r\n    }\r\n    \r\n    \/**\r\n     * Met le menu au premier plan\r\n     *\/\r\n    function bringMenuPopupToFront() {\r\n        const menuPopupId = findMenuPopupId();\r\n        bringElementorPopupToFront(menuPopupId);\r\n    }\r\n    \r\n    \/**\r\n     * Ouvre le popup de connexion Elementor (uniquement sur via-agency.media)\r\n     * Sur yearbook-media.com, utiliser ViaLoginOverlay \u00e0 la place\r\n     *\/\r\n    function showLoginPopup() {\r\n        \/\/ Seulement sur via-agency.media\r\n        if (!window.location.hostname.includes('via-agency.media')) {\r\n            console.log('showLoginPopup ignor\u00e9 - utiliser ViaLoginOverlay sur ce site');\r\n            return;\r\n        }\r\n        \r\n        \/\/ Masquer le menu s'il est ouvert\r\n        const menuPopupId = findMenuPopupId();\r\n        const menuPopup = document.getElementById(menuPopupId);\r\n        if (menuPopup) {\r\n            menuPopup.style.display = 'none';\r\n        }\r\n        \r\n        \/\/ Ouvrir le popup Elementor\r\n        if (typeof elementorProFrontend !== 'undefined' && elementorProFrontend.modules && elementorProFrontend.modules.popup) {\r\n            elementorProFrontend.modules.popup.showPopup({ id: 14297 });\r\n        }\r\n        \r\n        elementorPopupHandled = false;\r\n        setTimeout(bringLoginPopupToFront, 150);\r\n    }\r\n    \r\n    \/**\r\n     * Passe le popup de connexion en dessous puis le masque\r\n     *\/\r\n    function hideLoginPopup() {\r\n        elementorPopupHandled = true; \/\/ Emp\u00eacher bringToFront pendant la fermeture\r\n        \r\n        const loginPopup = document.getElementById(ELEMENTOR_POPUP_IDS.LOGIN);\r\n        if (loginPopup) {\r\n            \/\/ Passer en dessous\r\n            loginPopup.style.zIndex = '1';\r\n            console.log('\ud83d\udd3d Popup connexion pass\u00e9 en dessous');\r\n            \r\n            \/\/ Masquer apr\u00e8s un court d\u00e9lai\r\n            setTimeout(() => {\r\n                loginPopup.style.display = 'none';\r\n                document.body.classList.remove('elementor-popup-is-opened');\r\n                console.log('\ud83d\ude48 Popup connexion masqu\u00e9');\r\n                \r\n                \/\/ Reset le flag\r\n                setTimeout(() => {\r\n                    elementorPopupHandled = false;\r\n                }, 100);\r\n            }, 300);\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * V\u00e9rifie si l'URL contient #login pour ouvrir automatiquement le popup\r\n     *\/\r\n    function checkHashLogin() {\r\n        if (window.location.hash === '#login') {\r\n            setTimeout(showLoginPopup, 1000);\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     * Intercepter les ouvertures des popups Elementor\r\n     *\/\r\n    function setupElementorPopupInterception() {\r\n        \/\/ Intercepter les clics sur les d\u00e9clencheurs du popup de connexion\r\n        document.addEventListener('click', (e) => {\r\n            \/\/ D\u00e9clencheurs du popup de connexion (.popup-login-trigger)\r\n            const loginTrigger = e.target.closest('.popup-login-trigger');\r\n            if (loginTrigger) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                showLoginPopup();\r\n                return;\r\n            }\r\n            \r\n            \/\/ D\u00e9clencheurs du menu sandwich - tout lien avec elementor-action popup\r\n            const menuLink = e.target.closest('a[href*=\"elementor-action\"]');\r\n            if (menuLink && menuLink.href.includes('popup')) {\r\n                elementorPopupHandled = false;\r\n                setTimeout(bringMenuPopupToFront, 150);\r\n                return;\r\n            }\r\n        }, true);\r\n        \r\n        \/\/ Observer le menu popup directement pour d\u00e9tecter son ouverture\r\n        let menuWasHidden = true;\r\n        const observeMenuPopup = () => {\r\n            const menuPopupId = findMenuPopupId();\r\n            const menuPopup = document.getElementById(menuPopupId);\r\n            if (menuPopup) {\r\n                const observer = new MutationObserver(() => {\r\n                    const display = window.getComputedStyle(menuPopup).display;\r\n                    const isVisible = display !== 'none';\r\n                    \r\n                    \/\/ Seulement si le popup vient de devenir visible (transition hidden -> visible)\r\n                    if (isVisible && menuWasHidden) {\r\n                        menuWasHidden = false;\r\n                        elementorPopupHandled = false;\r\n                        setTimeout(bringMenuPopupToFront, 50);\r\n                    } else if (!isVisible) {\r\n                        menuWasHidden = true;\r\n                    }\r\n                });\r\n                observer.observe(menuPopup, { attributes: true, attributeFilter: ['style', 'class'] });\r\n                console.log('\ud83d\udc40 Observer menu popup install\u00e9:', menuPopupId);\r\n            } else {\r\n                setTimeout(observeMenuPopup, 1000);\r\n            }\r\n        };\r\n        observeMenuPopup();\r\n        \r\n        \/\/ Observer aussi le popup de connexion\r\n        let loginWasHidden = true;\r\n        const observeLoginPopup = () => {\r\n            const loginPopup = document.getElementById(ELEMENTOR_POPUP_IDS.LOGIN);\r\n            if (loginPopup) {\r\n                const observer = new MutationObserver(() => {\r\n                    const display = window.getComputedStyle(loginPopup).display;\r\n                    const isVisible = display !== 'none';\r\n                    \r\n                    if (isVisible && loginWasHidden) {\r\n                        loginWasHidden = false;\r\n                        elementorPopupHandled = false;\r\n                        setTimeout(bringLoginPopupToFront, 50);\r\n                    } else if (!isVisible) {\r\n                        loginWasHidden = true;\r\n                    }\r\n                });\r\n                observer.observe(loginPopup, { attributes: true, attributeFilter: ['style', 'class'] });\r\n                console.log('\ud83d\udc40 Observer login popup install\u00e9');\r\n            } else {\r\n                setTimeout(observeLoginPopup, 1000);\r\n            }\r\n        };\r\n        observeLoginPopup();\r\n        \r\n        \/\/ V\u00e9rifier si #login dans l'URL\r\n        checkHashLogin();\r\n        \r\n        console.log('\u2705 Interception popups Elementor install\u00e9e');\r\n    }\r\n    \r\n    \/\/ Lancer l'interception\r\n    setupElementorPopupInterception();\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ API PUBLIQUE\r\n    \/\/ =========================================================================\r\n    \r\n    window.ViaPopup = {\r\n        open: function(url) {\r\n            createPopup(url);\r\n        },\r\n        closeAll: function() {\r\n            state.popups.forEach((container) => closePopup(container));\r\n        },\r\n        close: function(url) {\r\n            const container = state.popups.get(normalizeUrl(url));\r\n            if (container) closePopup(container);\r\n        },\r\n        addPath: function(path) {\r\n            VIA_POPUP_CONFIG.targetPaths.push(normalizePath(path));\r\n        },\r\n        \/**\r\n         * Ouvre un popup apr\u00e8s connexion (utilis\u00e9 par le module de login)\r\n         * @param {string} url - URL de l'espace utilisateur\r\n         *\/\r\n        openAfterLogin: function(url) {\r\n            \/\/ Fermer le popup de connexion si ouvert\r\n            \/\/ puis ouvrir le nouvel espace\r\n            createPopup(url);\r\n        },\r\n        \/**\r\n         * V\u00e9rifie si une URL est configur\u00e9e pour les popups\r\n         * @param {string} url - URL \u00e0 v\u00e9rifier\r\n         * @returns {boolean}\r\n         *\/\r\n        isPopupUrl: function(url) {\r\n            return shouldIntercept(url);\r\n        },\r\n        \/**\r\n         * D\u00e9connexion manuelle\r\n         *\/\r\n        logout: function() {\r\n            performLogout();\r\n        },\r\n        \/**\r\n         * Masque le popup de connexion (passe en dessous puis dispara\u00eet)\r\n         *\/\r\n        hideLoginPopup: hideLoginPopup,\r\n        \/**\r\n         * Met le popup de connexion au premier plan\r\n         *\/\r\n        bringLoginPopupToFront: bringLoginPopupToFront,\r\n        \/**\r\n         * Met le menu sandwich au premier plan\r\n         *\/\r\n        bringMenuPopupToFront: bringMenuPopupToFront,\r\n        \/**\r\n         * Ouvre le popup de connexion\r\n         *\/\r\n        showLoginPopup: showLoginPopup\r\n    };\r\n\r\n    \/\/ =========================================================================\r\n    \/\/ INIT\r\n    \/\/ =========================================================================\r\n    \r\n    function init() {\r\n        interceptLinks();\r\n        setupGlobalFocusDetection();\r\n        console.log('\u2705 ViaPopup System initialis\u00e9');\r\n    }\r\n    \r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', init);\r\n    } else {\r\n        init();\r\n    }\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Via Agency mediaMedia Communication R\u00e9gieVia Agency mediaMedia Communication R\u00e9gieEN EN Communication institutionnelle En partenariat avec les Pr\u00e9sidences, les Primatures, les Minist\u00e8res et les Agences de promotion de l&rsquo;investissement, Via Agency accompagne la promotion des investissements et des \u00e9v\u00e9nements institutionnels. Communication corporate Entreprises, Investisseurs et Annonceurs, Via Agency vous accompagne en concevant et en mettant en &#8230; <a title=\"\" class=\"read-more\" href=\"https:\/\/via-agency.media\/en\/\" aria-label=\"More on \">Read more<\/a><\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-164816","page","type-page","status-publish"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>VIA AGENCY<\/title>\n<meta name=\"description\" content=\"Via Agency : communication institutionnelle et corporate. Partenaire des Pr\u00e9sidences, Primatures, Minist\u00e8res et des Agences de promotion de l&#039;investissement.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/via-agency.media\/en\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VIA AGENCY\" \/>\n<meta property=\"og:description\" content=\"Via Agency : communication institutionnelle et corporate. Partenaire des Pr\u00e9sidences, Primatures, Minist\u00e8res et des Agences de promotion de l&#039;investissement.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/via-agency.media\/en\/\" \/>\n<meta property=\"og:site_name\" content=\"VIA AGENCY\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-05T15:34:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwq.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/via-agency.media\/\",\"url\":\"https:\/\/via-agency.media\/\",\"name\":\"VIA AGENCY\",\"isPartOf\":{\"@id\":\"https:\/\/via-agency.media\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/via-agency.media\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/via-agency.media\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwq.png\",\"datePublished\":\"2025-09-20T17:07:29+00:00\",\"dateModified\":\"2026-04-05T15:34:20+00:00\",\"description\":\"Via Agency : communication institutionnelle et corporate. Partenaire des Pr\u00e9sidences, Primatures, Minist\u00e8res et des Agences de promotion de l'investissement.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/via-agency.media\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/via-agency.media\/#primaryimage\",\"url\":\"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwq.png\",\"contentUrl\":\"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwq.png\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/via-agency.media\/#website\",\"url\":\"https:\/\/via-agency.media\/\",\"name\":\"VIA AGENCY\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/via-agency.media\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"VIA AGENCY","description":"Via Agency: institutional and corporate communication. Partner of Presidencies, Prime Ministers&#039; Offices, Ministries and Investment Promotion Agencies.","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:\/\/via-agency.media\/en\/","og_locale":"en_US","og_type":"article","og_title":"VIA AGENCY","og_description":"Via Agency : communication institutionnelle et corporate. Partenaire des Pr\u00e9sidences, Primatures, Minist\u00e8res et des Agences de promotion de l'investissement.","og_url":"https:\/\/via-agency.media\/en\/","og_site_name":"VIA AGENCY","article_modified_time":"2026-04-05T15:34:20+00:00","og_image":[{"url":"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwq.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/via-agency.media\/","url":"https:\/\/via-agency.media\/","name":"VIA AGENCY","isPartOf":{"@id":"https:\/\/via-agency.media\/#website"},"primaryImageOfPage":{"@id":"https:\/\/via-agency.media\/#primaryimage"},"image":{"@id":"https:\/\/via-agency.media\/#primaryimage"},"thumbnailUrl":"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwq.png","datePublished":"2025-09-20T17:07:29+00:00","dateModified":"2026-04-05T15:34:20+00:00","description":"Via Agency: institutional and corporate communication. Partner of Presidencies, Prime Ministers&#039; Offices, Ministries and Investment Promotion Agencies.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/via-agency.media\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/via-agency.media\/#primaryimage","url":"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwq.png","contentUrl":"https:\/\/via-agency.media\/wp-content\/uploads\/elementor\/thumbs\/Menu-2-r3obmxpkh1qqfr6xsm81pwo5aq00ocm8781dm1yxwq.png"},{"@type":"WebSite","@id":"https:\/\/via-agency.media\/#website","url":"https:\/\/via-agency.media\/","name":"VIA AGENCY","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/via-agency.media\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/via-agency.media\/en\/wp-json\/wp\/v2\/pages\/164816","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/via-agency.media\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/via-agency.media\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/via-agency.media\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/via-agency.media\/en\/wp-json\/wp\/v2\/comments?post=164816"}],"version-history":[{"count":8,"href":"https:\/\/via-agency.media\/en\/wp-json\/wp\/v2\/pages\/164816\/revisions"}],"predecessor-version":[{"id":186127,"href":"https:\/\/via-agency.media\/en\/wp-json\/wp\/v2\/pages\/164816\/revisions\/186127"}],"wp:attachment":[{"href":"https:\/\/via-agency.media\/en\/wp-json\/wp\/v2\/media?parent=164816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}