diff --git a/products/workspace.html b/products/workspace.html
index dd1821258..bb107588f 100644
--- a/products/workspace.html
+++ b/products/workspace.html
@@ -524,6 +524,96 @@ function renderHome(){
'emailwl':'/assets/logo-mailforge.svg',
'consultingpkg':'/assets/logo-consulting.svg',
};
+
+// V134 · Smart logo resolver · auto-match module key → /assets/logo-KEY.svg
+// Full map for all 79 modules using existing assets in /var/www/html/assets/
+var ICONS_AUTO = {
+ // Match module keys to logo-*.svg / .png files that exist
+ svc: '/assets/logo-consulting.svg',
+ consultingpkg: '/assets/logo-consulting.svg',
+ academy: '/assets/logo-academy.svg',
+ weviaagency: '/assets/logo-wevia-official.svg',
+ wevalcrm: '/assets/logo-dashboard.svg',
+ cloudcost: '/assets/logo-cloudcost.svg',
+ pa: '/assets/logo-proposalai.svg',
+ bp: '/assets/logo-blueprintai.svg',
+ canvasai: '/assets/logo-canvasai.svg',
+ copyai: '/assets/logo-copyai.svg',
+ df: '/assets/logo-devforge.svg',
+ translate: '/assets/logo-translateai.svg',
+ meeting: '/assets/logo-meeting-summary.svg',
+ ppt: '/assets/logo-presentationai.svg',
+ contracts: '/assets/logo-contractai.svg',
+ bizplan: '/assets/logo-bizplan.svg',
+ esign: '/assets/logo-esignature.svg',
+ leansixsigma: '/assets/logo-leansixsigma.svg',
+ audit: '/assets/logo-auditcompliance.svg',
+ dashboardai: '/assets/logo-dashboardai.svg',
+ cf: '/assets/logo-content-factory.svg',
+ crf: '/assets/logo-creative-factory.svg',
+ iaarabe: '/assets/logo-wevia-official.svg',
+ wedroid: '/assets/logo-wevia-official.svg',
+ boardflow: '/assets/logo-dashboard.svg',
+ projectflow: '/assets/logo-dashboard.svg',
+ weviadesk: '/assets/logo-wevia-official.svg',
+ wv: '/assets/logo-dashboard.svg',
+ wevadsia: '/assets/logo-dashboard.svg',
+ da: '/assets/logo-deliverads.svg',
+ mailstream: '/assets/logo-mailstream.svg',
+ mw: '/assets/logo-mailwarm.svg',
+ mailforge: '/assets/logo-mailforge.svg',
+ oa: '/assets/logo-outreachai.svg',
+ smsforge: '/assets/logo-mailforge.svg',
+ adscontrol: '/assets/logo-adscontrol.svg',
+ reputationai: '/assets/logo-dashboard.svg',
+ newsletter: '/assets/logo-newsletter.svg',
+ aisdr: '/assets/logo-outreachai.svg',
+ aff: '/assets/logo-affiliates.svg',
+ campaignstudio: '/assets/logo-content-factory.svg',
+ linkedinmgr: '/assets/logo-outreachai.svg',
+ wevadsperf: '/assets/logo-deliverads.svg',
+ mr: '/assets/logo-medreach.svg',
+ medreachapi: '/assets/logo-medreach.svg',
+ medreachcampaign: '/assets/logo-medreach.svg',
+ medreachdash: '/assets/logo-medreach.svg',
+ healthcarecrm: '/assets/logo-medreach.svg',
+ wevialife: '/assets/logo-wevialife.svg',
+ et: '/assets/logo-ethica.svg',
+ dataharvest: '/assets/logo-dataharvest.svg',
+ scout: '/assets/logo-scout.svg',
+ mind: '/assets/logo-weval-mind.svg',
+ researchflow: '/assets/logo-weval-mind.svg',
+ techradar: '/assets/logo-weval-mind.svg',
+ yt: '/assets/logo-youtube-factory.svg',
+ arsenal: '/assets/logo-arsenal.svg',
+ sentinel: '/assets/logo-sentinel.svg',
+ ds: '/assets/logo-deliverscore.svg',
+ blacklistguard: '/assets/logo-blacklistguard.svg',
+ emailverify: '/assets/logo-emailverify.svg',
+ inboxtest: '/assets/logo-inboxtest.svg',
+ ispmonitor: '/assets/logo-ispmonitor.svg',
+ networkguard: '/assets/logo-sentinel.svg',
+ stackscan: '/assets/logo-sentinel.svg',
+ trustcenter: '/assets/logo-sentinel.svg',
+ consentmgr: '/assets/logo-sentinel.svg',
+ cloudbridge: '/assets/logo-cloudbridge.svg',
+ gpu: '/assets/logo-gpu-inference.svg',
+ fb: '/assets/logo-formbuilder.svg',
+ storeai: '/assets/logo-storeforge.svg',
+ sf: '/assets/logo-storeforge.svg',
+ wl: '/assets/logo-wevia-whitelabel.svg',
+ we: '/assets/logo-wevia-enterprise.svg',
+ weviaem: '/assets/logo-wevia-enterprise.svg',
+ emailplatform: '/assets/logo-mailstream.svg',
+ emailwl: '/assets/logo-wevia-whitelabel.svg',
+ lf: '/assets/logo-leadforge.svg',
+ roicalc: '/assets/logo-dashboardai.svg',
+ solutionfinder: '/assets/logo-weval-mind.svg',
+ partnerprogram: '/assets/logo-affiliates.svg',
+};
+// Merge ICONS_AUTO into ICONS (ICONS takes priority)
+Object.keys(ICONS_AUTO).forEach(function(k){ if(!ICONS[k]) ICONS[k] = ICONS_AUTO[k]; });
+
// Recent products
var recents=JSON.parse(localStorage.getItem('wv_recent')||'[]');
var favs=JSON.parse(localStorage.getItem('wv_favs')||'[]');
@@ -588,23 +678,78 @@ function getSuiteColor(suite){
return map[suite] || 'accent';
}
function getFallbackLogoSVG(name, color){
- var palette = {'purple':'#8b5cf6','green':'#22c55e','orange':'#f59e0b','red':'#ef4444','accent':'#3b82f6','dim':'#64748b'};
- var c = palette[color] || palette.accent;
- // Extract 2-letter abbrev (caps of first 2 words, or first 2 chars)
- var words = String(name).split(/[\s-]+/).filter(Boolean);
- var initials = words.length >= 2
- ? (words[0][0] + words[1][0]).toUpperCase()
- : name.substring(0, 2).toUpperCase();
- // Build SVG data URL (WEVIA-style: gradient + rounded)
+ // V134 · Ultra premium WEVIA-inspired SVG · contextual glyph per category + dual gradient + glow
+ var palette = {
+ 'purple':{a:'#a78bfa',b:'#7c3aed',glow:'#c4b5fd'},
+ 'green':{a:'#4ade80',b:'#16a34a',glow:'#86efac'},
+ 'orange':{a:'#fbbf24',b:'#d97706',glow:'#fcd34d'},
+ 'red':{a:'#f87171',b:'#dc2626',glow:'#fca5a5'},
+ 'accent':{a:'#60a5fa',b:'#2563eb',glow:'#93c5fd'},
+ 'dim':{a:'#94a3b8',b:'#475569',glow:'#cbd5e1'}
+ };
+ var p = palette[color] || palette.accent;
+ var nameLC = String(name).toLowerCase();
+ // V134 Contextual glyph selector (SVG path d attribute) based on name keywords
+ var glyph = '';
+ if(/mail|email|inbox|newsletter|outreach|smsforge|campaign/i.test(nameLC)){
+ // Envelope glyph
+ glyph = '';
+ } else if(/ai|copy|canvas|paper|content|creative|blueprint|proposal|translate|contract|bizplan|esign|audit|meeting/i.test(nameLC)){
+ // Document + spark glyph (AI)
+ glyph = '';
+ } else if(/dash|board|analyt|chart|metric|insight|data|research|project|solution/i.test(nameLC)){
+ // Bar chart glyph
+ glyph = '';
+ } else if(/cloud|bridge|stack|guard|sentinel|trust|blacklist|network|ispmonitor|consent|verify/i.test(nameLC)){
+ // Shield glyph
+ glyph = '';
+ } else if(/med|pharma|health|life|ethica/i.test(nameLC)){
+ // Medical cross glyph
+ glyph = '';
+ } else if(/crm|consult|service|academy|roi|agency/i.test(nameLC)){
+ // People/connection glyph
+ glyph = '';
+ } else if(/devforge|code|stackscan|gpu|storeforge|store|platform|desk|em|whitelabel|wl|enterprise/i.test(nameLC)){
+ // Code/terminal glyph
+ glyph = '';
+ } else if(/scout|radar|techrad|ads|deliverads|deliverscore|reputation|sdr|ai.sdr/i.test(nameLC)){
+ // Target glyph
+ glyph = '';
+ } else if(/youtube|video|factory/i.test(nameLC)){
+ // Play triangle
+ glyph = '';
+ } else if(/form|builder|survey/i.test(nameLC)){
+ // Form fields
+ glyph = '';
+ } else if(/lead|forge|arsenal|prospect|affili|partner/i.test(nameLC)){
+ // Funnel
+ glyph = '';
+ } else if(/linkedin|linkedinmgr/i.test(nameLC)){
+ // LinkedIn style LI
+ glyph = '';
+ } else if(/arabe|arab|translate/i.test(nameLC)){
+ // Arabic-inspired ornamental circle
+ glyph = '';
+ } else {
+ // Default: WEVIA-inspired brain-lobe shape
+ glyph = '';
+ }
var svg = '';
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ glyph +
+ '';
return 'data:image/svg+xml;utf8,' + encodeURIComponent(svg);
}
function switchView(v){
@@ -638,7 +783,8 @@ function renderSuites(){
groups[suite].push(k);
});
// Sort suites by size DESC (biggest first)
- var sortedSuites = Object.keys(groups).sort(function(a,b){ return groups[b].length - groups[a].length; });
+ var sidebarOrder = ['Conseil & Services','IA & Productivite','Marketing Digital','Santé & Pharma','Data & Intelligence','Cloud & Sécurité','Enterprise'];
+ var sortedSuites = sidebarOrder.filter(function(s){ return groups[s]; }).concat(Object.keys(groups).filter(function(s){ return sidebarOrder.indexOf(s) === -1; }));
var html = '';
sortedSuites.forEach(function(suite, idx){
var modules = groups[suite];