Files
html/weval-audit-reco12.js
2026-04-12 22:57:03 +02:00

678 lines
42 KiB
JavaScript

/* == WEVAL-AUDIT-RECO v3 -- Clean rebuild == */
/* == GLOBAL CTA FUNCTIONS == */
window.__wrOpenCalendly = function() { window.open("/booking.html", "_blank"); };
window.__wrOpenContactModal = function() { window.location.href = "/contact-us"; };
(function(){
'use strict';
if(window.__wevalAuditV3) return;
window.__wevalAuditV3 = true;
/* == AUTH INTERCEPTOR -- kill popups, enforce real auth == */
(function(){
try { localStorage.removeItem('isAdmin'); } catch(e){}
var adminRoutes = ['/moulChi','/admin-talent-form','/admin-mission-form','/admin-messages','/admin-dashboard','/analytics'];
var path = window.location.pathname;
var hasToken = !!localStorage.getItem('adminToken');
if(!hasToken && adminRoutes.indexOf(path) >= 0) {
window.location.replace('/auth');
return;
}
var origPrompt = window.prompt;
window.prompt = function(msg) {
if(msg && (msg.toLowerCase().indexOf('password') >= 0 || msg.toLowerCase().indexOf('admin') >= 0)) {
window.location.replace('/auth');
return null;
}
return origPrompt ? origPrompt.apply(window, arguments) : null;
};
})();
// ============================================================
// 1. CSS -- Single injection, no nav override
// ============================================================
var css = document.createElement('style');
css.id = 'wr-v3-css';
css.textContent = [
/* Floating CTA bar */
'.wr-floating-cta{position:fixed;bottom:-80px;left:0;right:0;z-index:9000;background:rgba(5,8,15,0.95);backdrop-filter:blur(10px);border-top:1px solid rgba(99,102,241,0.15);padding:0.6rem 4%;display:flex;justify-content:center;align-items:center;gap:12px;transition:bottom 0.4s ease}',
'.wr-floating-cta.visible{bottom:0}',
'.wr-floating-cta-text{font-size:0.82rem;color:#94a3b8}',
'.wr-floating-cta-text strong{color:#f1f5f9}',
'.wr-cta-btn{border:none;border-radius:8px;padding:8px 16px;font-size:0.82rem;font-weight:600;cursor:pointer;transition:all 0.2s}',
'.wr-cta-primary{background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff}',
'.wr-cta-primary:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(99,102,241,0.4)}',
'.wr-cta-secondary{background:rgba(99,102,241,0.1);color:#a5b4fc;border:1px solid rgba(99,102,241,0.2)}',
'.wr-cta-close{background:none;border:none;color:#64748b;font-size:1.2rem;cursor:pointer;padding:4px 8px}',
/* Contact modal */
'.wr-modal-overlay{display:none;position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.7);backdrop-filter:blur(4px);justify-content:center;align-items:center}',
'.wr-modal-overlay.open{display:flex}',
'.wr-modal{background:#0f172a;border:1px solid #1e293b;border-radius:16px;padding:32px;max-width:560px;width:90%;max-height:85vh;overflow-y:auto;position:relative}',
'.wr-modal h2{font-family:Sora,sans-serif;font-size:1.4rem;color:#f1f5f9;margin-bottom:8px}',
'.wr-modal p{color:#94a3b8;font-size:0.9rem;margin-bottom:20px}',
'.wr-modal-close{position:absolute;top:12px;right:16px;background:none;border:none;color:#64748b;font-size:1.5rem;cursor:pointer}',
'.wr-form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}',
'.wr-form-group{margin-bottom:12px}',
'.wr-form-group label{display:block;color:#94a3b8;font-size:0.8rem;margin-bottom:4px}',
'.wr-form-group input,.wr-form-group select,.wr-form-group textarea{width:100%;padding:10px 12px;background:#1e293b;border:1px solid #334155;border-radius:8px;color:#f1f5f9;font-size:0.9rem}',
'.wr-form-group textarea{min-height:80px;resize:vertical}',
'.wr-form-submit{width:100%;padding:12px;background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;border:none;border-radius:10px;font-weight:700;font-size:1rem;cursor:pointer;margin-top:8px}',
/* FAQ */
'.wr-faq-section{padding:60px 20px;background:#0a0e1a;border-top:1px solid rgba(99,102,241,.05)}',
'.wr-faq-inner{max-width:740px;margin:0 auto;text-align:center}',
'.wr-faq-title{font-family:Sora,sans-serif;font-size:1.6rem;font-weight:800;color:#f1f5f9;margin:16px 0 32px}',
'.wr-faq-list{text-align:left}',
'.wr-faq-item{border:1px solid #1e293b;border-radius:12px;margin-bottom:10px;overflow:hidden;transition:border-color .3s}',
'.wr-faq-item:hover{border-color:#334155}',
'.wr-faq-item.open{border-color:#6366f1}',
'.wr-faq-q{width:100%;padding:18px 20px;background:#0f172a;border:none;color:#f1f5f9;font-size:.95rem;font-weight:600;cursor:pointer;display:flex;justify-content:space-between;align-items:center;text-align:left;font-family:Outfit,Sora,sans-serif}',
'.wr-faq-arrow{color:#6366f1;transition:transform .3s;font-size:1.2rem}',
'.wr-faq-item.open .wr-faq-arrow{transform:rotate(90deg)}',
'.wr-faq-a{max-height:0;overflow:hidden;transition:max-height .4s ease,padding .3s}',
'.wr-faq-item.open .wr-faq-a{max-height:300px;padding:0 20px 18px}',
'.wr-faq-a p{color:#94a3b8;font-size:.9rem;line-height:1.6;margin:0}',
/* Case Studies */
'.wr-cases-section{padding:60px 20px;background:#050816;border-top:1px solid rgba(99,102,241,.05)}',
'.wr-cases-inner{max-width:900px;margin:0 auto;text-align:center}',
'.wr-cases-title{font-family:Sora,sans-serif;font-size:1.6rem;font-weight:800;color:#f1f5f9;margin:16px 0 32px}',
'.wr-cases-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}',
'.wr-case-card{background:#0f172a;border:1px solid #1e293b;border-radius:14px;padding:24px;text-align:left;transition:border-color .3s}',
'.wr-case-card:hover{border-color:#6366f1}',
'.wr-case-card h3{font-size:1rem;font-weight:700;color:#f1f5f9;margin-bottom:8px}',
'.wr-case-card p{color:#94a3b8;font-size:.85rem;line-height:1.5}',
'.wr-case-badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:.72rem;font-weight:600;margin-bottom:10px}',
/* Newsletter */
'.wr-newsletter-badge{display:inline-block;padding:4px 14px;border-radius:20px;font-size:.75rem;font-weight:600;background:rgba(99,102,241,.1);color:#a5b4fc;margin-bottom:12px}',
/* Responsive */
'@media(max-width:768px){.wr-floating-cta{flex-wrap:wrap;gap:6px;padding:8px}.wr-floating-cta-text{display:none}.wr-form-row{grid-template-columns:1fr}.wr-cases-grid{grid-template-columns:1fr}.wr-faq-q{font-size:.85rem;padding:14px 16px}.wr-faq-a p{font-size:.82rem}.wr-cases-section{padding:40px 16px}.wr-faq-section{padding:40px 16px}.wr-cases-title,.wr-faq-title{font-size:1.3rem}.wr-case-card{padding:18px}.wr-case-card h3{font-size:.95rem}.wr-case-card p{font-size:.8rem}.wr-modal{padding:20px;width:95%}.wr-newsletter-badge{font-size:.7rem}}',
/* Logo pulse */
'@keyframes weval-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.06);opacity:.85}}.weval-logo{animation:weval-pulse 3s ease-in-out infinite!important}'
].join('');
document.head.appendChild(css);
// ============================================================
// 2. FLOATING CTA BAR
// ============================================================
var ctaBar = document.createElement('div');
ctaBar.className = 'wr-floating-cta';
ctaBar.innerHTML = '<span class="wr-floating-cta-text"><strong>Projet de transformation digitale ?</strong> Nos experts vous accompagnent</span><button class="wr-cta-btn wr-cta-primary" onclick="window.__wrOpenContactModal()">Demander un devis</button><button class="wr-cta-btn wr-cta-secondary" onclick="window.__wrOpenCalendly()">Prendre RDV</button><button class="wr-cta-close" onclick="this.parentElement.remove()">&times;</button>';
document.body.appendChild(ctaBar);
var ctaShown = false;
function showCTA(){ if(!ctaShown && window.scrollY > 200){ ctaShown = true; ctaBar.classList.add('visible'); } }
setTimeout(function(){ window.addEventListener('scroll', showCTA); showCTA(); }, 3000);
// ============================================================
// 3. HELPER -- Find footer in SPA or static pages
// ============================================================
function findFooter(cb) {
var tries = 0;
var t = setInterval(function(){
tries++;
if(tries > 50) { clearInterval(t); return; }
var ft = document.querySelector('footer.footer') || document.querySelector('.footer-container') || document.querySelector('footer');
if(ft) { clearInterval(t); cb(ft); }
}, 300);
}
// ============================================================
// 4. FAQ SECTION (homepage only)
// ============================================================
function injectFAQ() {
var p = window.location.pathname;
if(p !== '/' && p !== '' && p !== '/index.html' && p !== '/index-test-v3.html') return;
if(document.querySelector('.wr-faq-section')) return;
findFooter(function(ft) {
var faq = document.createElement('div');
faq.className = 'wr-faq-section';
faq.innerHTML = '<div class="wr-faq-inner"><div class="wr-newsletter-badge">FAQ</div><h2 class="wr-faq-title">Questions fréquentes</h2><div class="wr-faq-list">' +
'<div class="wr-faq-item"><button class="wr-faq-q" onclick="this.parentElement.classList.toggle(\'open\')"><span>Quels services propose WEVAL Consulting ?</span><span class="wr-faq-arrow">&#9656;</span></button><div class="wr-faq-a"><p>WEVAL Consulting structure son offre autour de 6 p\u00f4les d\'excellence : Conseil Strat\u00e9gique &amp; IA, Solutions ERP &amp; Cloud (SAP, Huawei, Vistex), Marketing Digital &amp; CRM, Cybers\u00e9curit\u00e9 IA, Talent as a Service, et Formations Certifiantes. Nous intervenons dans 8 pays sur 3 continents.</p></div></div>' +
'<div class="wr-faq-item"><button class="wr-faq-q" onclick="this.parentElement.classList.toggle(\'open\')"><span>WEVAL intervient-il au Maroc et en Afrique ?</span><span class="wr-faq-arrow">&#9656;</span></button><div class="wr-faq-a"><p>Oui. Bas\u00e9 \u00e0 Casablanca avec des bureaux \u00e0 Paris et aux USA, WEVAL intervient dans 8 pays dont le Maroc, la France et plusieurs pays africains. Plus de 200 projets livr\u00e9s avec un taux de satisfaction de 97%.</p></div></div>' +
'<div class="wr-faq-item"><button class="wr-faq-q" onclick="this.parentElement.classList.toggle(\'open\')"><span>Qu\'est-ce que WEVIA, l\'IA de WEVAL ?</span><span class="wr-faq-arrow">&#9656;</span></button><div class="wr-faq-a"><p>WEVIA est notre assistant IA propriétaire. Il génère des analyses, diagrammes, images et documents PDF couvrant plus de 50 domaines d\'expertise, en mode 100% souverain sur GPU dédié.</p></div></div>' +
'<div class="wr-faq-item"><button class="wr-faq-q" onclick="this.parentElement.classList.toggle(\'open\')"><span>Comment fonctionne la méthodologie WEVAL 4D ?</span><span class="wr-faq-arrow">&#9656;</span></button><div class="wr-faq-a"><p>Notre framework 4D suit 4 phases : Diagnostic (audit 360\u00b0), Design (roadmap sur-mesure), Delivery (sprints agiles), Durabilit\u00e9 (formation + support). Chaque phase est acc\u00e9l\u00e9r\u00e9e par notre IA WEVIA.</p></div></div>' +
'<div class="wr-faq-item"><button class="wr-faq-q" onclick="this.parentElement.classList.toggle(\'open\')"><span>WEVAL est-il certifi\u00e9 et conforme RGPD ?</span><span class="wr-faq-arrow">&#9656;</span></button><div class="wr-faq-a"><p>Oui. WEVAL est conforme RGPD et Loi marocaine 09-08, partenaire certifi\u00e9 Huawei Cloud, SAP, Vistex et IQVIA. Nos solutions respectent les normes de s\u00e9curit\u00e9 les plus strictes.</p></div></div>' +
'</div></div>';
ft.parentNode.insertBefore(faq, ft);
});
}
// ============================================================
// 5. CASE STUDIES SECTION (homepage only)
// ============================================================
function injectCaseStudies() {
var p = window.location.pathname;
if(p !== '/' && p !== '' && p !== '/index.html' && p !== '/index-test-v3.html') return;
if(document.querySelector('.wr-cases-section')) return;
findFooter(function(ft) {
var cases = document.createElement('div');
cases.className = 'wr-cases-section';
cases.innerHTML = '<div class="wr-cases-inner"><div class="wr-newsletter-badge">Case Studies</div><h2 class="wr-cases-title">Nos dernières réalisations</h2><div class="wr-cases-grid">' +
'<div class="wr-case-card"><div class="wr-case-badge" style="background:rgba(0,201,167,.1);color:#00c9a7">Pharma</div><h3>Plateforme HCP Multi-Pays</h3><p>141,000+ professionnels de santé vérifiés dans 3 pays (Maroc, Tunisie, Algérie). Collecte multi-sources, consentement RGPD automatisé, enrichissement Google-verified.</p></div>' +
'<div class="wr-case-card"><div class="wr-case-badge" style="background:rgba(99,102,241,.1);color:#818cf8">ERP</div><h3>Integration ERP Multi-Vendor</h3><p>Migration ERP complete : SAP S/4HANA, Oracle, Odoo, Sage. Modules Vistex, conduite du changement, formation des équipes et support post-go-live.</p></div>' +
'<div class="wr-case-card"><div class="wr-case-badge" style="background:rgba(251,191,36,.1);color:#f59e0b">IA</div><h3>IA Souveraine sur GPU dédié</h3><p>Déploiement d\'une infrastructure IA souveraine avec inférence locale. Zéro dépendance cloud, latence inférieure à 300ms, plus de 50 modèles disponibles.</p></div>' +
'</div></div>';
// Insert BEFORE FAQ if exists, otherwise before footer
var faqEl = document.querySelector('.wr-faq-section');
if(faqEl) { faqEl.parentNode.insertBefore(cases, faqEl); }
else { ft.parentNode.insertBefore(cases, ft); }
});
}
// ============================================================
// 6. SERVICE LINKS (homepage only -- adds links to service sections)
// ============================================================
function injectServiceLinks() {
if(window.location.pathname !== '/' && window.location.pathname !== '') return;
var mapping = [
{id:'conseil-detail', href:'/service/conseil', label:'Conseil Strategique'},
{id:'solutions-detail', href:'/service/solutions', label:'Nos Solutions SaaS'},
{id:'recrutement-detail', href:'/service/recrutement', label:'Talent as a Service'},
{id:'formation-detail', href:'/service/formation', label:'Training Platform'},
{id:'marketing-detail', href:'/service/marketing', label:'Marketing Digital'},
{id:'cyber-detail', href:'/service/cyber', label:'Cybers\u00e9curit\u00e9 IA'}
];
mapping.forEach(function(m) {
var section = document.getElementById(m.id);
if(!section || section.querySelector('.wr-service-link')) return;
var a = document.createElement('a');
a.className = 'wr-service-link';
a.href = m.href;
a.textContent = 'Decouvrir ' + m.label + ' \u2192';
a.style.cssText = 'display:inline-block;margin-top:20px;padding:12px 28px;background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;border-radius:10px;text-decoration:none;font-weight:600;font-size:0.88rem;transition:all 0.3s;box-shadow:0 4px 15px rgba(99,102,241,0.3)';
var content = section.querySelector('.service-detail-content');
try { if(content) content.appendChild(a); else if(section) section.appendChild(a); } catch(e){}
});
}
// ============================================================
// 7. FIX ALL NAV BUTTONS -- Direct click handlers bypass React
// ============================================================
function fixNavButtons() {
var routes = {
'Accueil': function(){ window.scrollTo({top:0,behavior:'smooth'}); },
'Services': function(){ var el=document.getElementById('our-services'); if(el) el.scrollIntoView({behavior:'smooth'}); },
'Solutions': function(){ window.location.href='/solutions'; },
'Marketplace': function(){ window.location.href='/marketplace'; },
'Actualites': function(){ window.location.href='/actualites'; },
'Actualites': function(){ window.location.href='/actualites'; },
'Blog': function(){ window.location.href='/blog'; },
'Products': function(){ window.location.href='/products/index.html'; },
'WEVIA': function(){ window.location.href='/wevia.html'; },
'IA Academy': function(){ window.location.href='/products/academy.html'; },
'Tech Radar': function(){ window.location.href='/products/technology-radar.html'; },
'Trouver ma solution': function(){ window.location.href='/solution-finder.html'; },
'Contact': function(){ window.location.href='/contact-us'; }
};
var navs = document.querySelectorAll('nav, .main-navigation, .header-wrapper');
navs.forEach(function(nav) {
var btns = nav.querySelectorAll('button, a');
btns.forEach(function(btn) {
var text = (btn.textContent || '').trim();
// Also handle Products link href
var href = btn.getAttribute('href') || '';
if(href === '/products' || href === '/products/' || href === '/products/index.html') {
text = 'Products';
}
// Fuzzy match for nav items with emojis/icons
if(!routes[text]) {
Object.keys(routes).forEach(function(k) {
if(text.indexOf(k) !== -1) text = k;
});
}
if(routes[text] && !btn.dataset.wrFixed) {
btn.dataset.wrFixed = '1';
btn.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
routes[text]();
}, true); // capture phase = fires BEFORE React
}
});
});
}
// ============================================================
// 8. INIT -- Delayed to let React SPA render first
// ============================================================
function initAll() {
try { injectFAQ(); } catch(e) { console.warn('[WR] FAQ:', e.message); }
try { injectCaseStudies(); } catch(e) { console.warn('[WR] Cases:', e.message); }
try { injectServiceLinks(); } catch(e) { console.warn('[WR] Links:', e.message); }
try { fixNavButtons(); } catch(e) { console.warn('[WR] Nav:', e.message); }
}
// Wait for SPA to render, then inject
if(document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function(){ setTimeout(initAll, 2000); });
} else {
setTimeout(initAll, 2000);
}
// Re-run on SPA navigation
var _lastPath = location.pathname;
setInterval(function(){
if(location.pathname !== _lastPath) {
_lastPath = location.pathname;
// Cleanup when leaving homepage
if(_lastPath !== '/' && _lastPath !== '') {
document.querySelectorAll('.wr-faq-section,.wr-cases-section').forEach(function(el){ el.remove(); });
}
setTimeout(initAll, 1500);
}
}, 300);
})();
// LocalBusiness Schema Markup (SEO)
if(!document.querySelector('script[type="application/ld+json"]')){
var s=document.createElement('script');s.type='application/ld+json';
s.textContent=JSON.stringify({
"@context":"https://schema.org",
"@type":"ProfessionalService",
"name":"WEVAL Consulting",
"description":"Cabinet de conseil en transformation digitale, IA souveraine, SAP, Cloud et Cybers\u00e9curit\u00e9",
"url":"https://weval-consulting.com",
"logo":"https://weval-consulting.com/assets/logo-weval-png-DChrMGao.png",
"image":"https://weval-consulting.com/assets/logo-weval-png-DChrMGao.png",
"telephone":"+33647087627",
"email":"contact@weval-consulting.com",
"address":{"@type":"PostalAddress","streetAddress":"Casablanca","addressLocality":"Casablanca","addressCountry":"MA"},
"geo":{"@type":"GeoCoordinates","latitude":33.5731,"longitude":-7.5898},
"areaServed":[{"@type":"Country","name":"Morocco"},{"@type":"Country","name":"France"},{"@type":"Country","name":"United States"}],
"sameAs":["https://www.linkedin.com/company/weval-consulting"],
"priceRange":"$$",
"openingHoursSpecification":{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"18:00"},
"hasOfferCatalog":{"@type":"OfferCatalog","name":"WEVAL SaaS Products","numberOfItems":54},
"knowsAbout":["SAP S/4HANA","Cloud Migration","Artificial Intelligence","Cybersecurity","Digital Transformation","Pharmaceutical IT"]
});document.head.appendChild(s);}
// FR/EN Language Toggle
(function(){
if(window!==window.top)return;
var tr={
"Nos Solutions":"Our Solutions","Nos Services":"Our Services","Decouvrir":"Discover",
"Methodologie":"Methodology","Blog":"Blog","Actualites":"News",
"Contactez-nous":"Contact Us","Contact":"Contact","? propos":"About",
"Essayer gratuitement":"Try for free","Commencer":"Get Started",
"Fonctionnalites":"Features","Tarifs":"Pricing","Comment ca marche":"How it works",
"Tout ce dont vous avez besoin":"Everything you need","Un plan pour chaque besoin":"A plan for every need",
"Posez votre question":"Ask your question","Envoyer":"Send",
"Creer mon compte gratuit":"Create my free account","Mode Test Gratuit":"Free Test Mode",
"Gratuit":"Free","Sur mesure":"Custom","Nous contacter":"Contact us",
"Accelerer la transformation digitale":"Accelerate digital transformation",
"Solutions IA Souveraines":"Sovereign AI Solutions"
};
var isEN=localStorage.getItem("weval_lang")==="en";
function toggleLang(){
isEN=!isEN;
localStorage.setItem("weval_lang",isEN?"en":"fr");
applyLang();
}
function applyLang(){
var btn=document.getElementById("weval-lang-toggle");
if(btn)btn.textContent=isEN?"FR":"EN";
if(!isEN)return location.reload();
document.querySelectorAll("h1,h2,h3,p,a,button,span,label,div,li,option").forEach(function(el){
if(el.children.length>1)return;
var t=el.textContent.trim();
if(tr[t])el.textContent=tr[t];
});
}
var nav=document.querySelector("nav .nav-links,nav .btns,header .nav-links");
if(!nav)nav=document.querySelector("nav");
if(nav){
var btn=document.createElement("button");
btn.id="weval-lang-toggle";
btn.textContent=isEN?"FR":"EN";
btn.onclick=toggleLang;
btn.style.cssText="background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.2);color:#fff;padding:4px 10px;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;margin-left:8px;font-family:inherit;";
if(nav) nav.appendChild(btn);
}
if(isEN)setTimeout(applyLang,500);
})();
// Client Logos Bar (SAP Gold Partner, Vistex, IQVIA, Huawei Cloud, Scaleway)
(function(){
if(window.location.pathname !== '/' && !window.location.pathname.endsWith('index.html')) return;
if(document.getElementById('weval-logos-bar')) return;
var hero = document.querySelector('.hero, section:first-of-type, main > div:first-child');
if(!hero) return;
var bar = document.createElement('div');
bar.id = 'weval-logos-bar';
bar.style.cssText = 'display:flex;align-items:center;justify-content:center;gap:2.5rem;flex-wrap:wrap;padding:2rem 4%;opacity:.6;filter:grayscale(1);transition:all .3s;margin:1rem auto;max-width:900px;';
bar.onmouseover = function(){this.style.opacity='1';this.style.filter='none';};
bar.onmouseout = function(){this.style.opacity='.6';this.style.filter='grayscale(1)';};
var logos = [
{name:'SAP Gold Partner',svg:'<svg viewBox="0 0 92 46" width="72"><rect width="92" height="46" rx="4" fill="#0070C0"/><text x="46" y="28" text-anchor="middle" fill="#fff" font-size="16" font-weight="800" font-family="Arial">SAP</text><text x="46" y="40" text-anchor="middle" fill="#fff" font-size="7" font-family="Arial">Gold Partner</text></svg>'},
{name:'Vistex',svg:'<svg viewBox="0 0 80 36" width="64"><text x="40" y="24" text-anchor="middle" fill="#1a73e8" font-size="18" font-weight="700" font-family="Arial">Vistex</text></svg>'},
{name:'IQVIA',svg:'<svg viewBox="0 0 80 36" width="64"><text x="40" y="24" text-anchor="middle" fill="#00A3E0" font-size="18" font-weight="700" font-family="Arial">IQVIA</text></svg>'},
{name:'Huawei Cloud',svg:'<svg viewBox="0 0 100 36" width="80"><text x="50" y="22" text-anchor="middle" fill="#CF0A2C" font-size="14" font-weight="700" font-family="Arial">HUAWEI</text><text x="50" y="33" text-anchor="middle" fill="#CF0A2C" font-size="9" font-family="Arial">Cloud</text></svg>'},
{name:'Scaleway',svg:'<svg viewBox="0 0 90 36" width="72"><text x="45" y="24" text-anchor="middle" fill="#4F0599" font-size="16" font-weight="600" font-family="Arial">Scaleway</text></svg>'},
{name:'Abbott',svg:'<svg viewBox="0 0 80 36" width="64"><text x="40" y="24" text-anchor="middle" fill="#0071CE" font-size="16" font-weight="700" font-family="Arial">Abbott</text></svg>'}
];
logos.forEach(function(l){
var d=document.createElement('div');
d.title=l.name;
d.innerHTML=l.svg;
d.style.cssText='display:flex;align-items:center;';
bar.appendChild(d);
});
var label=document.createElement('div');
label.style.cssText='width:100%;text-align:center;font-size:11px;color:rgba(255,255,255,.3);margin-top:8px;font-weight:500;letter-spacing:1px;text-transform:uppercase;';
label.textContent='Nos partenaires technologiques';
bar.appendChild(label);
if(hero && hero.parentNode) hero.parentNode.insertBefore(bar, hero.nextSibling);
})();
// WhatsApp Support Widget
(function(){
if(window!==window.top)return;
if(document.getElementById('weval-whatsapp'))return;
var wa=document.createElement('a');
wa.id='weval-whatsapp';
wa.href='https://wa.me/33647087627?text=Bonjour%20WEVAL%2C%20je%20souhaite%20en%20savoir%20plus';
wa.target='_blank';
wa.title='WhatsApp Support';
wa.style.cssText='position:fixed;bottom:150px;right:24px;width:48px;height:48px;background:#25D366;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px rgba(37,211,102,.4);z-index:9998;cursor:pointer;transition:transform .2s;';
wa.onmouseover=function(){this.style.transform='scale(1.1)'};
wa.onmouseout=function(){this.style.transform='scale(1)'};
wa.innerHTML='<svg width="28" height="28" viewBox="0 0 24 24" fill="white"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/></svg>';
document.body.appendChild(wa);
})();
// Animated Statistics Counters
(function(){
if(document.querySelector('.weval-counter-animated'))return;
var observer=new IntersectionObserver(function(entries){
entries.forEach(function(e){
if(!e.isIntersecting)return;
var el=e.target;
if(el.dataset.counted)return;
el.dataset.counted='1';
var target=parseInt(el.textContent.replace(/[^0-9]/g,''))||0;
if(target<2)return;
var suffix=el.textContent.replace(/[0-9.,\s]/g,'');
var prefix=el.textContent.match(/^[^0-9]*/)[0]||'';
var duration=1200;
var start=0;
var step=Math.ceil(target/60);
var timer=setInterval(function(){
start+=step;
if(start>=target){start=target;clearInterval(timer);}
el.textContent=prefix+start.toLocaleString('fr')+suffix;
},duration/60);
el.classList.add('weval-counter-animated');
});
},{threshold:0.3});
document.querySelectorAll('.stat-v,.stat b,.flagship-stat-v,b').forEach(function(el){
var t=el.textContent.trim();
if(/^[\d.,\s]+[+%]?$/.test(t.replace(/[^\d.,+%\s]/g,''))){
observer.observe(el);
}
});
})();
// Client Logo Bar (SAP Gold Partner, Vistex, IQVIA, Huawei Cloud, Scaleway)
(function(){
if(window!==window.top)return;
if(document.getElementById('weval-partners'))return;
var hero=document.querySelector(".hero,section:first-of-type,.hero-section");
if(!hero)return;
var bar=document.createElement("div");
bar.id="weval-partners";
bar.style.cssText="display:flex;align-items:center;justify-content:center;gap:2.5rem;padding:1.5rem 4%;opacity:.45;flex-wrap:wrap;border-top:1px solid rgba(255,255,255,.06);border-bottom:1px solid rgba(255,255,255,.06);margin:0;";
var logos=["SAP Gold Partner","Vistex","IQVIA","Huawei Cloud","Scaleway"];
bar.innerHTML="<span style='font-size:.65rem;text-transform:uppercase;letter-spacing:.2em;opacity:.6;font-weight:600'>Partenaires</span>"+logos.map(function(n){return "<span style='font-size:.8rem;font-weight:700;opacity:.7;white-space:nowrap;letter-spacing:.02em'>"+n+"</span>";}).join("");
hero.parentNode.insertBefore(bar,hero.nextSibling);
})();
// WhatsApp Support Widget
// Animated Statistics Counters
(function(){
if(window!==window.top)return;
function animateCount(el,target,suffix){
var start=0,dur=1500,step=Math.ceil(target/60);
var timer=setInterval(function(){
start+=step;if(start>=target){start=target;clearInterval(timer);}
el.textContent=start.toLocaleString('fr')+(suffix||'');
},dur/60);
}
var observer=new IntersectionObserver(function(entries){
entries.forEach(function(e){
if(e.isIntersecting&&!e.target.dataset.animated){
e.target.dataset.animated="1";
var t=e.target.textContent.trim();
var num=parseInt(t.replace(/[^\d]/g,''));
var suffix=t.replace(/[\d\s.,]/g,'');
if(num>10)animateCount(e.target,num,suffix);
}
});
},{threshold:0.5});
document.querySelectorAll('.stat-v,.stat b,.flagship-stat-v,.kpi-val,.pr-amt').forEach(function(el){
var num=parseInt(el.textContent.replace(/[^\d]/g,''));
if(num>10){el.textContent='0';observer.observe(el);}
});
})();
// AOS-like Scroll Reveal Animations
(function(){
if(window!==window.top)return;
var style=document.createElement("style");
style.textContent=".wv-reveal{opacity:0;transform:translateY(30px);transition:opacity .6s ease,transform .6s ease}.wv-reveal.visible{opacity:1;transform:translateY(0)}";
document.head.appendChild(style);
var obs=new IntersectionObserver(function(entries){
entries.forEach(function(e){if(e.isIntersecting){e.target.classList.add("visible");obs.unobserve(e.target);}});
},{threshold:0.1,rootMargin:"0px 0px -50px 0px"});
document.querySelectorAll(".cd,.pr,.product,.service,.flagship,.card,.step,.feature,.stat-card,.kpi").forEach(function(el,i){
el.classList.add("wv-reveal");
el.style.transitionDelay=(i%6)*0.08+"s";
obs.observe(el);
});
})();
// Trust Center link in footer
(function(){
if(window!==window.top)return;
var footer=document.querySelector('footer');
if(!footer)return;
var existing=footer.querySelector('a[href*="trust"]');
if(existing)return;
var link=document.createElement('a');
link.href='/products/trust-center.html';
link.textContent='Trust Center';
link.style.cssText='color:var(--a,#10b981);text-decoration:none;font-size:.75rem;margin-left:1rem;';
footer.appendChild(link);
})();
// Lightweight AOS scroll animations
(function(){
if(window!==window.top)return;
var style=document.createElement('style');
style.textContent=`
.weval-aos{opacity:0;transform:translateY(30px);transition:opacity .6s ease,transform .6s ease}
.weval-aos.visible{opacity:1;transform:translateY(0)}
.weval-aos[data-delay="1"]{transition-delay:.1s}
.weval-aos[data-delay="2"]{transition-delay:.2s}
.weval-aos[data-delay="3"]{transition-delay:.3s}
`;
document.head.appendChild(style);
var targets=document.querySelectorAll('.cd,.pr,.step,.stat,.feat,.card,.certif,.tl-item,section>div>div.g3>div,section>div>div.pg>div');
var idx=0;
targets.forEach(function(el){
el.classList.add('weval-aos');
el.setAttribute('data-delay',String((idx%3)+1));
idx++;
});
var observer=new IntersectionObserver(function(entries){
entries.forEach(function(e){
if(e.isIntersecting){e.target.classList.add('visible');observer.unobserve(e.target);}
});
},{threshold:0.15,rootMargin:'0px 0px -50px 0px'});
document.querySelectorAll('.weval-aos').forEach(function(el){observer.observe(el);});
})();
// Plausible Analytics (RGPD compliant)
(function(){if(window!==window.top)return;var s=document.createElement("script");s.defer=true;s.setAttribute("data-domain","weval-consulting.com");s.src="https://analytics.weval-consulting.com/js/script.js";document.head.appendChild(s);})();
// === WEVAL GLOBAL LOGOUT -- discrete button on protected pages ===
(function(){
var protectedPaths = [
'/products/workspace', '/command-center', '/infra-command', '/tools-hub',
'/nonreg', '/master-test', '/mega-command', '/technology-radar',
'/ultimate-quality', '/wevia-center', '/wevia-go-live', '/apps',
'/ethica-drill', '/ethica-hcp', '/ethica-sms', '/gws-setup',
'/weval-master-inventory', '/redirect-admin', '/dl/', '/arsenal-proxy/',
'/wevia-ia/', '/office-'
];
var path = window.location.pathname;
var isProtected = protectedPaths.some(function(p){ return path.indexOf(p) !== -1; });
var hasCookie = document.cookie.indexOf('PHPSESSID') !== -1;
if (!isProtected || !hasCookie) return;
// Skip if page already has its own logout
if (document.getElementById('weval-logout-btn') || document.getElementById('weval-global-logout')) return;
var btn = document.createElement('a');
btn.id = 'weval-global-logout';
btn.href = '/api/weval-auth-session.php?action=logout';
btn.title = 'Deconnexion';
btn.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:middle;margin-right:4px"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg><span style="vertical-align:middle">Logout</span>';
btn.style.cssText = 'position:fixed;top:10px;right:12px;z-index:99990;padding:5px 10px;background:rgba(30,30,50,0.7);color:rgba(200,210,230,0.8);border:1px solid rgba(100,100,140,0.3);border-radius:6px;font:500 11px system-ui,sans-serif;text-decoration:none;cursor:pointer;backdrop-filter:blur(8px);transition:all .2s;opacity:0.6;display:flex;align-items:center';
btn.onmouseover = function(){ this.style.opacity='1'; this.style.background='rgba(239,68,68,0.9)'; this.style.color='white'; this.style.borderColor='rgb(239,68,68)'; };
btn.onmouseout = function(){ this.style.opacity='0.6'; this.style.background='rgba(30,30,50,0.7)'; this.style.color='rgba(200,210,230,0.8)'; this.style.borderColor='rgba(100,100,140,0.3)'; };
document.body.appendChild(btn);
})();
// === PARTNER LOGO SIZE FIX ===
(function(){
var css = document.createElement('style');
css.id = 'partner-logo-fix';
css.textContent = '.partners-section .partner-logo-container{height:100px!important;min-width:120px!important}.partners-section .partner-logo{height:auto!important;max-height:80px!important;width:auto!important;max-width:180px!important;object-fit:contain!important}.partners-section img[alt*="SAP"]{transform:scale(1.6)!important}.partners-section img[alt*="Huawei"]{transform:scale(1.5)!important}.partners-container{gap:2rem!important;max-width:900px!important}@media(max-width:768px){.partners-container{flex-wrap:wrap!important;gap:1.5rem!important}.partners-section .partner-item{flex:0 0 40%!important}.partners-section .partner-logo{max-height:50px!important;max-width:120px!important}.partners-section img[alt*="SAP"]{transform:scale(1.4)!important}.partners-section img[alt*="Huawei"]{transform:scale(1.3)!important}}';
document.head.appendChild(css);
})();
// === LINKEDIN + BLOG TABS on /actualites ===
(function(){
if(window!==window.top)return;
var LI='https://www.linkedin.com/company/69533182';
var WLS='https://www.linkedin.com/company/weval-life-science';
window.posts=[];
window.postsLoaded=false;
window.loadLinkedInPosts=function(){
if(window.postsLoaded&&window.posts.length>0){if(typeof window.inject==='function')window.inject();return;}
fetch('/api/linkedin-posts.php?action=list')
.then(function(r){return r.json()})
.then(function(d){
if(d.posts&&d.posts.length){
window.posts=d.posts.map(function(p){
var dd=p.post_date||'';
return{d:dd.substring(8,10)+'/'+dd.substring(5,7)+'/'+dd.substring(0,4),t:p.title||'',x:p.excerpt||'',l:parseInt(p.likes)||0,c:parseInt(p.comments)||0,rp:parseInt(p.reposts)||0,v:parseInt(p.views)||0,i:p.image||'',s:p.source||'W'};
});
window.postsLoaded=true;
if(typeof window.inject==='function')window.inject();
}
})
.catch(function(e){console.log('Posts fetch error',e)});
}
loadLinkedInPosts();
/* Fix accent titles on React pages */
(function(){
function fixAccents(){
document.querySelectorAll('h1,h2,h3,.title').forEach(function(el){
var t=el.textContent;
if(t.indexOf('Actualites')!==-1) el.textContent=t.replace('Actualites','Actualités');
if(t.indexOf('Reseaux')!==-1) el.textContent=t.replace('Reseaux','Réseaux');
});
}
fixAccents();
new MutationObserver(fixAccents).observe(document.body,{childList:true,subtree:true,characterData:true});
})();
/* Actualites nav: document-level click capture bypasses React */
document.addEventListener('click', function(e) {
var el = e.target;
while (el && el !== document.body) {
var txt = (el.textContent || '').trim();
if ((el.tagName === 'BUTTON' || el.tagName === 'A') && (txt.indexOf('Actualit')===0 || txt === 'News')) {
var inNav = !!el.closest('nav, header, .clean-header, .main-navigation');
if (inNav) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
window.location.href = '/actualites';
return false;
}
}
el = el.parentElement;
}
}, true);
function n(x){return x>=1000?(x/1000).toFixed(1)+'K':''+x}
window.inject=function(){
if(!location.pathname.includes('actualit'))return;
if(document.getElementById('weval-news-overlay'))return;
if(!window.posts||window.posts.length===0)return;
var o=document.createElement('div');
o.id='weval-news-overlay';
o.style.cssText='position:fixed;inset:0;z-index:9999;background:#fafbfc;overflow-y:auto';
var nav=document.querySelector('header.clean-header')||document.querySelector('nav')||document.querySelector('header');
if(nav){var nc=nav.cloneNode(true);nc.style.position='sticky';nc.style.top='0';nc.style.zIndex='10';o.appendChild(nc);nc.querySelectorAll('a').forEach(function(a){a.addEventListener('click',function(e){var h=a.getAttribute('href');if(h&&h.startsWith('/')&&!h.includes('actualit')){e.preventDefault();var ov=document.getElementById('weval-news-overlay');if(ov)ov.remove();window.location.href=h;}});});}
var LI='https://www.linkedin.com/company/69533182';
var WLS='https://www.linkedin.com/company/weval-life-science';
function n(x){return x>=1000?(x/1000).toFixed(1)+'K':''+x}
var h='<div style="max-width:1200px;margin:0 auto;padding:2rem 1rem">';
h+='<div style="text-align:center;margin-bottom:2rem;padding-top:1rem"><h1 style="font-size:2.2rem;font-weight:800;color:#1f2937">Actualit\u00e9s & R\u00e9seaux</h1>';
h+='<p style="color:#6b7280">Nos publications LinkedIn et derni\u00e8res annonces</p>';
h+='<div style="display:flex;justify-content:center;gap:1rem;margin-top:1rem;flex-wrap:wrap">';
h+='<a href="'+LI+'" target="_blank" style="display:inline-flex;align-items:center;gap:.4rem;background:#0a66c2;color:#fff;padding:8px 20px;border-radius:20px;font-weight:600;font-size:.85rem;text-decoration:none">\ud83d\udcbc WEVAL - '+window.posts.filter(function(p){return p.s!=='L'}).length+' posts</a>';
h+='<a href="'+WLS+'" target="_blank" style="display:inline-flex;align-items:center;gap:.4rem;background:#10b981;color:#fff;padding:8px 20px;border-radius:20px;font-weight:600;font-size:.85rem;text-decoration:none">\ud83e\uddec Life Sciences - '+window.posts.filter(function(p){return p.s==='L'}).length+' posts</a>';
h+='</div></div>';
h+='<div id="li-section" style="display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1.2rem">';
window.posts.forEach(function(p){
var isW=p.s==='L';
var badge=isW?'<span style="background:#10b981;color:#fff;font-size:10px;padding:2px 8px;border-radius:4px;font-weight:600">Life Sciences</span> ':'';
var link=isW?WLS+'/posts/':LI+'/posts/';
h+='<a href="'+link+'" target="_blank" rel="noopener" style="text-decoration:none;background:#fff;border-radius:12px;border:1px solid #e5e7eb;padding:1.2rem;display:flex;flex-direction:column;gap:.6rem;transition:all .2s">';
h+='<div style="display:flex;align-items:center;gap:.6rem"><span style="font-size:12px;color:#6b7280">'+p.d+'</span>';
h+='<svg viewBox="0 0 24 24" style="width:18px;height:18px;margin-left:auto;fill:#0a66c2"><path d="M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14m-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.32 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93h2.79M6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37h2.77z"/></svg></div>';
h+=badge;
h+='<div style="font-weight:700;font-size:15px;color:#1f2937;line-height:1.3">'+p.t+'</div>';
if(p.i)h+='<div style="border-radius:8px;overflow:hidden;margin:4px 0"><img src="'+p.i+'" style="width:100%;height:140px;object-fit:cover;display:block" loading="lazy"></div>';
h+='<div style="font-size:13px;color:#6b7280;line-height:1.4;flex:1">'+p.x+'</div>';
h+='<div style="display:flex;gap:1rem;padding-top:.5rem;border-top:1px solid #f3f4f6;font-size:12px;color:#6b7280">';
h+='\ud83d\udc4d '+p.l+' \ud83d\udcac '+(p.c||0)+' \ud83d\udd01 '+(p.rp||0)+' \ud83d\udc41 '+n(p.v||0);
h+='</div></a>';
});
h+='</div>';
h+='<div style="text-align:center;margin:2rem 0"><a href="'+LI+'" target="_blank" style="display:inline-flex;align-items:center;gap:.5rem;background:#0a66c2;color:#fff;padding:12px 28px;border-radius:28px;font-weight:700;font-size:14px;text-decoration:none">Suivez WEVAL sur LinkedIn \u2192</a></div>';
h+='</div>';
var content=document.createElement('div');content.innerHTML=h;o.appendChild(content);document.body.appendChild(o);
}
var css2=document.createElement('style');
css2.textContent='@media(max-width:768px){#li-section{grid-template-columns:1fr!important}}';
document.head.appendChild(css2);
})();
(function(){
if(window.innerWidth>768)return;
function fixPositions(){
var btn=document.querySelector('.chat-toggle-btn');
if(btn){btn.style.setProperty('bottom','210px','important');btn.style.setProperty('z-index','10001','important');}
var wa=document.getElementById('weval-whatsapp');
if(wa){wa.style.setProperty('bottom','270px','important');}
}
fixPositions();
setInterval(fixPositions,2000);
new MutationObserver(fixPositions).observe(document.body,{childList:true,subtree:true});
})();