Files
html/products/workspace.html
2026-04-12 22:57:03 +02:00

687 lines
41 KiB
HTML

<!DOCTYPE html>
<html lang="fr"><head>
<meta name="description" content="Workspace - WEVAL Consulting SaaS Platform. Cloud, AI, Digital Marketing.">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>WEVAL — Workspace</title>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
:root{--bg:#ffffff;--sb:#f8fafc;--border:#e2e8f0;--hover:#f1f5f9;--text:#334155;--dim:#94a3b8;--white:#1e293b;--accent:#3b82f6;--green:#22c55e;--orange:#f59e0b;--red:#ef4444;--purple:#8b5cf6;--r:8px}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'DM Sans',system-ui,sans-serif;background:var(--bg);color:var(--text);height:100vh;overflow:hidden;font-size:14px;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none}
input{font-family:inherit;background:var(--bg);border:1px solid var(--border);color:var(--white);border-radius:var(--r);padding:10px 14px;font-size:13px;outline:none;width:100%}
input:focus{border-color:var(--accent)}
/* LOGIN */
#login{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;z-index:100}
.login-box{background:#fff;border:1px solid var(--border);border-radius:16px;padding:40px;width:400px;box-shadow:0 4px 24px rgba(0,0,0,.08)}
.login-box h1{font-size:20px;font-weight:700;color:var(--white);text-align:center;margin-bottom:20px}
.login-box .field{margin-bottom:14px}
.login-box label{display:block;font-size:11px;color:var(--dim);margin-bottom:5px;text-transform:uppercase;letter-spacing:.05em}
.login-btn{width:100%;padding:11px;background:var(--accent);color:#fff;border-radius:var(--r);font-size:14px;font-weight:600;margin-top:8px}
.login-btn:hover{opacity:.9}
.login-alt{text-align:center;color:var(--dim);font-size:12px;margin-top:16px;cursor:pointer}
.login-alt:hover{color:var(--accent)}
.toast{position:fixed;bottom:20px;right:20px;background:var(--sb);color:var(--white);padding:10px 18px;border-radius:var(--r);font-size:13px;border:1px solid var(--border);display:none;z-index:200}
/* LAYOUT */
#app{display:none;height:100vh;width:100vw}
.layout{display:flex;height:100%}
.sidebar{width:200px;background:var(--sb);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}
.sb-head{padding:14px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px}
.sb-head b{font-size:15px;font-weight:700;color:var(--white)}
.sb-head small{font-size:10px;color:var(--dim);margin-left:auto}
.sb-nav{flex:1;overflow-y:auto;padding:6px}
.sb-nav::-webkit-scrollbar{width:3px}.sb-nav::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}
.sb-group{padding:10px 10px 4px;font-size:10px;font-weight:700;color:var(--dim);text-transform:uppercase;letter-spacing:.06em}
.sb-link{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:6px;cursor:pointer;font-size:13px;color:var(--dim);font-weight:500;transition:all .1s}
.sb-link:hover{background:var(--hover);color:var(--text)}
.sb-link.on{background:rgba(59,130,246,.1);color:var(--accent)}
.sb-link .d{width:5px;height:5px;border-radius:50%;flex-shrink:0}
.sb-user{padding:10px 14px;border-top:1px solid var(--border);font-size:12px}
.sb-user b{color:var(--white);display:block}
.sb-user span{color:var(--dim);font-size:10px}
/* MAIN */
.main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.topbar{height:46px;border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:12px;background:var(--sb);flex-shrink:0}
.topbar-title{font-size:14px;font-weight:600;color:var(--white);flex:1}
.topbar-key{font-family:'JetBrains Mono';font-size:10px;color:var(--dim);background:var(--bg);padding:4px 10px;border-radius:6px;cursor:pointer;border:1px solid var(--border)}
.topbar-new{font-size:11px;color:var(--accent);cursor:pointer}
/* CONTENT */
.content{flex:1;position:relative;overflow:hidden}
#homeView{padding:28px;overflow-y:auto;height:100%}
#frameView{width:100%;height:100%;border:0;display:none}
/* HOME */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:24px}
.stat{background:var(--sb);border:1px solid var(--border);border-radius:var(--r);padding:16px}
.stat b{font-family:'JetBrains Mono';font-size:22px;font-weight:700;color:var(--white);display:block}
.stat small{font-size:11px;color:var(--dim)}
.tools{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:6px}
.tool{background:var(--sb);border:1px solid var(--border);border-radius:var(--r);padding:8px;cursor:pointer;transition:all .15s;text-align:center}
.tool:hover{border-color:rgba(59,130,246,.3);transform:translateY(-1px)}
.tool h3{font-size:13px;font-weight:600;color:var(--white);margin-bottom:3px}
.tool p{font-size:11px;color:var(--dim);line-height:1.4}
.tool-ico{width:48px;height:48px;display:flex;align-items:center;justify-content:center;margin:0 auto 4px}
.tool-ico img{max-width:44px;max-height:44px;object-fit:contain}
.tool-ico{position:relative}
.ia-badge{position:absolute;top:-2px;right:-2px;background:#EF4444;color:#fff;font-size:9px;font-weight:700;padding:1px 4px;border-radius:4px;z-index:1}
.tool h3{font-size:.78rem!important;margin:0 0 2px}.tool p{font-size:.65rem!important}
/* Collapsible sidebar groups */
.sb-group{padding:10px 10px 4px;font-size:10px;font-weight:700;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;cursor:pointer;display:flex;align-items:center;justify-content:space-between;user-select:none;border-radius:4px;transition:background .15s}
.sb-group:hover{background:var(--hover);color:var(--text)}
.sb-group .arrow{font-size:8px;transition:transform .2s}
.sb-group.open .arrow{transform:rotate(90deg)}
.sb-items{max-height:0;overflow:hidden;transition:max-height .25s ease}
.sb-items.open{max-height:600px}
/* Free/Premium badges */
.tool-badge{position:absolute;top:4px;right:4px;font-size:8px;font-weight:700;padding:2px 6px;border-radius:4px;text-transform:uppercase;letter-spacing:.03em;z-index:2}
.tool-badge.free{background:rgba(34,197,94,.15);color:#22c55e;border:1px solid rgba(34,197,94,.25)}
.tool-badge.pro{background:rgba(139,92,246,.15);color:#8b5cf6;border:1px solid rgba(139,92,246,.25)}
/* Favorite star */
.tool-fav{position:absolute;top:4px;left:4px;font-size:14px;cursor:pointer;opacity:.3;transition:all .15s;z-index:2;background:none;border:none;padding:2px}
.tool-fav:hover,.tool-fav.on{opacity:1;transform:scale(1.2)}
.tool-fav.on{color:#f59e0b}
.tool{position:relative}
/* Tooltip */
.tool-tip{display:none;position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:#1e293b;color:#e2e8f0;padding:6px 10px;border-radius:6px;font-size:10px;white-space:nowrap;z-index:100;pointer-events:none;box-shadow:0 4px 12px rgba(0,0,0,.3)}
.tool:hover .tool-tip{display:block}
/* Recent section */
.recent-bar{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
.recent-bar .label{font-size:10px;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;font-weight:700;margin-right:4px}
.recent-chip{font-size:11px;padding:4px 10px;background:var(--sb);border:1px solid var(--border);border-radius:6px;cursor:pointer;color:var(--text);transition:all .15s}
.recent-chip:hover{border-color:var(--accent);color:var(--accent)}
/* Ctrl+K hint */
.search-hint{font-size:10px;color:var(--dim);position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;background:var(--bg);padding:2px 6px;border-radius:4px;border:1px solid var(--border)}
/* Mobile responsive */
@media(max-width:768px){
.layout{flex-direction:column!important}
.sidebar{width:100%!important;height:auto!important;max-height:50vh;border-right:none!important;border-bottom:1px solid var(--border)}
.sb-nav{max-height:200px}
.tools{grid-template-columns:repeat(auto-fill,minmax(90px,1fr))!important;gap:4px!important}
.tool{padding:6px!important}
.tool-ico{width:36px!important;height:36px!important}
.tool-ico img{max-width:32px!important;max-height:32px!important}
.tool h3{font-size:.7rem!important}
.tool p{font-size:.55rem!important}
.stats{grid-template-columns:repeat(2,1fr)!important}
.topbar{padding:0 12px!important}
#homeView{padding:16px!important}
.recent-bar{display:none!important}
}
@media(max-width:480px){
.tools{grid-template-columns:repeat(3,1fr)!important}
.sidebar{max-height:40vh}
}
.in-iframe nav{display:none!important}.in-iframe .hero{padding-top:3rem!important;min-height:auto!important}.in-iframe footer{display:none!important}.in-iframe .cta{display:none!important}.in-iframe .wv-links{display:none!important}#login{display:none!important}input,select,textarea{background:#0b0d14!important;color:#e2e8f0!important;border:1px solid #1e293b!important;border-radius:8px!important}input::placeholder{color:#475569!important}</style>
<link rel="alternate" hreflang="fr" href="https://weval-consulting.com/products/workspace.html">
<link rel="alternate" hreflang="x-default" href="https://weval-consulting.com/products/workspace.html">
<script>if(window!==window.top)document.documentElement.classList.add("in-iframe")</script>
<meta property="og:title" content="WEVAL — Workspace">
<meta property="og:url" content="https://weval-consulting.com/products/workspace.html">
<meta property="og:type" content="website">
<meta property="og:site_name" content="WEVAL Consulting">
<meta property="og:image" content="https://weval-consulting.com/assets/logo-weval-png-DChrMGao.png">
<link rel="canonical" href="https://weval-consulting.com/products/workspace.html">
</head>
<body>
<!-- LOGIN -->
<div id="login">
<div class="login-box">
<h1>WEVAL Workspace</h1>
<div id="loginForm">
<div class="field"><label>Marketing</label><input type="email" id="lEmail" placeholder="you@company.com"></div>
<div class="field"><label>Cle API</label><input id="lKey" placeholder="wv_..."></div>
<button class="login-btn" id="loginBtn" onclick="doLogin()">Se connecter</button>
<div class="login-alt" onclick="showReg()">Créer un compte</div>
</div>
<div id="regForm" style="display:none">
<div class="field"><label>Nom</label><input id="rName" placeholder="Nom complet"></div>
<div class="field"><label>Marketing</label><input type="email" id="rEmail" placeholder="you@company.com"></div>
<div class="field"><label>Entreprise</label><input id="rCompany" placeholder="Entreprise"></div>
<button class="login-btn" onclick="doRegister()">Créer un compte gratuit</button>
<div class="login-alt" onclick="showLogin()">Déjà un compte</div>
</div>
</div>
</div>
<!-- APP -->
<div id="app">
<div class="layout">
<div class="sidebar">
<div class="sb-head"><b>WEVAL</b><small>workspace</small></div>
<div style="padding:6px 8px"><input id="sbSearch" placeholder="Filtrer..." oninput="filterSidebar()" style="width:100%;padding:6px 10px;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:11px;outline:none"></div>
<div class="sb-nav" id="nav"></div>
<div class="sb-user"><b id="uName"></b><span id="uTier">Free plan</span></div>
</div>
<div class="main">
<div class="topbar">
<div class="topbar-title" id="pageTitle">Dashboard</div>
<div class="topbar-new" id="newTab" style="display:none" onclick="window.open(currentUrl,'_blank')">↗ Nouvel onglet</div>
<div class="topbar-key" id="topKey" onclick="navigator.clipboard.writeText(KEY);toast('Cle API copiee !')"></div>
</div>
<div class="content">
<div id="homeView"></div>
<iframe id="frameView" sandbox="allow-scripts allow-same-origin allow-forms allow-popups allow-top-navigation allow-top-navigation-by-user-activation" referrerpolicy="strict-origin-when-cross-origin"></iframe>
</div>
</div>
</div>
</div>
<div class="toast" id="toast"></div>
<script>
var KEY='',U={},currentUrl='',currentPage='home';
var AUTH='/api/products/auth.php';
var $=function(id){return document.getElementById(id)};
var v=function(id){return $(id)?$(id).value.trim():''};
// MODULES CONFIG — slug: [title, url, color, group]
var MODULES = {
svc:["Consulting","/products/services.html","var(--dim)","Conseil & Services","svc"],
consultingpkg:["Consulting Pro","/products/consulting.html","var(--accent)","Conseil & Services","consultingpkg"],
academy:["Academy","/products/academy.html","var(--dim)","Conseil & Services","academy"],
weviaagency:["WEVIA Agency","/products/wevia-agency.html","var(--purple)","Conseil & Services","weviaagency"],
wevalcrm:["Weval CRM","/products/wevalcrm.html","var(--accent)","Conseil & Services","wevalcrm"],
cloudcost:["CloudCost","/products/cloudcost.html","var(--green)","Conseil & Services","cloudcost"],
pa:["ProposalAI","/products/proposalai.html","var(--purple)","IA & Productivite","pa"],
bp:["BlueprintAI","/products/blueprintai.html","var(--purple)","IA & Productivite","bp"],
canvasai:["CanvasAI","/products/canvasai.html","var(--purple)","IA & Productivite","canvasai"],
copyai:["CopyAI","/products/copyai.html","var(--purple)","IA & Productivite","copyai"],
df:["DevForge AI","/products/devforge.html","var(--accent)","IA & Productivite","df"],
translate:["TranslateAI","/products/translateai.html","var(--green)","IA & Productivite","translate"],
meeting:["MeetingAI","/products/meetingai.html","var(--red)","IA & Productivite","meeting"],
ppt:["PresentationAI","/products/presentationai.html","var(--purple)","IA & Productivite","ppt"],
contracts:["ContractAI","/products/contractai.html","var(--purple)","IA & Productivite","contracts"],
bizplan:["Business Plan","/products/bizplan.html","var(--orange)","IA & Productivite","bizplan"],
esign:["eSignature","/products/esignature.html","var(--orange)","IA & Productivite","esign"],
leansixsigma:["Lean Six Sigma","/products/leansixsigma.html","var(--green)","IA & Productivite","leansixsigma"],
audit:["Audit & Compliance","/products/auditai.html","var(--red)","IA & Productivite","audit"],
dashboardai:["DashboardAI","/products/dashboardai.html","var(--accent)","IA & Productivite","dashboardai"],
cf:["Content Factory","/products/content-factory.html","var(--orange)","IA & Productivite","cf"],
crf:["Creative Factory","/products/creativefactory.html","var(--orange)","IA & Productivite","crf"],
iaarabe:["IA Arabe FR","/products/ia-arabe.html","var(--purple)","IA & Productivite","iaarabe"],
mind:["Wedroid","/products/wevalmind.html","var(--purple)","IA & Productivite","mind"],
wv:["Wevads Platform","/products/wevads.html","var(--red)","Marketing Digital","wv"],
wevadsia:["Wevads IA","/products/wevads-ia.html","var(--red)","Marketing Digital","wevadsia"],
da:["DeliverAds","/products/deliverads.html","var(--accent)","Marketing Digital","da"],
mailstream:["MailStream","/products/mailstream.html","var(--accent)","Marketing Digital","mailstream"],
mw:["MailWarm","/products/mailwarm.html","var(--orange)","Marketing Digital","mw"],
mailforge:["MailForge","/products/mailforge.html","var(--orange)","Marketing Digital","mailforge"],
oa:["OutreachAI","/products/outreachai.html","var(--orange)","Marketing Digital","oa"],
smsforge:["SMSForge","/products/smsforge.html","var(--orange)","Marketing Digital","smsforge"],
adscontrol:["AdsControl","/products/adscontrol.html","var(--red)","Marketing Digital","adscontrol"],
reputationai:["ReputationAI","/products/reputationai.html","var(--orange)","Marketing Digital","reputationai"],
newsletter:["NewsletterInsight","/products/newsletterinsight.html","var(--orange)","Marketing Digital","newsletter"],
aisdr:["AI SDR Agent","/products/ai-sdr.html","var(--orange)","Marketing Digital","aisdr"],
aff:["Partner Program","/products/affiliates.html","var(--purple)","Marketing Digital","aff"],
mr:["MedReach","/products/medreach.html","var(--green)","Santé & Pharma","mr"],
medreachapi:["MedReach API","/products/medreach-api.html","var(--green)","Santé & Pharma","medreachapi"],
et:["MedReach HCP","/products/medreachhcp.html","var(--green)","Santé & Pharma","et"],
healthcarecrm:["Healthcare CRM","/products/healthcare-crm.html","var(--green)","Santé & Pharma","healthcarecrm"],
lf:["LeadForge","/products/leadforge.html","var(--orange)","Data & Intelligence","lf"],
dataharvest:["DataInsight","/products/dataharvest.html","var(--green)","Data & Intelligence","dataharvest"],
scout:["Scout Intelligence","/products/scoutai.html","var(--accent)","Data & Intelligence","scout"],
yt:["YouTube Factory","/products/youtubefactory.html","var(--red)","Data & Intelligence","yt"],
gpu:["Wevia Inference","/products/gpu-inference.html","var(--purple)","Cloud & Sécurité","gpu"],
sentinel:["Sentinel","/products/sentinel.html","var(--accent)","Cloud & Sécurité","sentinel"],
ds:["DeliverScore","/products/deliverscore.html","var(--green)","Cloud & Sécurité","ds"],
inboxtest:["InboxTest","/products/inboxtest.html","var(--accent)","Cloud & Sécurité","inboxtest"],
emailverify:["EmailVerify","/products/emailverify.html","var(--green)","Cloud & Sécurité","emailverify"],
ispmonitor:["Network Monitor","/products/ispmonitor.html","var(--purple)","Cloud & Sécurité","ispmonitor"],
networkguard:["NetworkGuard","/products/networkguard.html","var(--red)","Cloud & Sécurité","networkguard"],
cloudbridge:["CloudBridge","/products/cloud-providers.html","var(--accent)","Cloud & Sécurité","cloudbridge"],
we:["Wevia Enterprise","/products/wevia-enterprise.html","var(--purple)","Enterprise","we"],
arsenal:["Wevanalytics","/products/arsenal.html","var(--red)","Enterprise","arsenal"],
emailplatform:["Digital Platform","/products/email-platform.html","var(--red)","Enterprise","emailplatform"],
sf:["StoreForge","/products/storeforge.html","var(--orange)","Enterprise","sf"],
storeai:["StoreAI","/products/storeai.html","var(--orange)","Enterprise","storeai"],
fb:["FormBuilder","/products/formbuilder.html","var(--orange)","Enterprise","fb"],
wl:["Wevia WL","/products/wevia-whitelabel.html","var(--purple)","Enterprise","wl"],
emailwl:["Email WL","/products/email-whitelabel.html","var(--red)","Enterprise","emailwl"],
};
var TIERS={
svc:'free',academy:'free',mailstream:'free',gpu:'pro',cf:'pro',pa:'free',bp:'free',
arsenal:'pro',wv:'pro',wevadsia:'pro',da:'pro',we:'pro',
ds:'free',sentinel:'free',mr:'free',lf:'pro',
mw:'free',oa:'pro',aff:'free',sf:'pro',wl:'pro',fb:'free',
df:'free',mind:'free',crf:'free',scout:'free',yt:'free',
ppt:'free',translate:'free',bizplan:'free',contracts:'free',meeting:'free',
esign:'free',leansixsigma:'free',audit:'free',et:'pro',
mailforge:'pro',cloudbridge:'pro',emailverify:'free',inboxtest:'free',
ispmonitor:'free',newsletter:'free',cloudcost:'free',
adscontrol:'pro',networkguard:'free',canvasai:'free',copyai:'free',
dashboardai:'free',dataharvest:'pro',reputationai:'free',
smsforge:'pro',storeai:'free',wevalcrm:'free',
emailplatform:'pro',medreachapi:'pro',weviaagency:'pro',healthcarecrm:'free',iaarabe:'pro',aisdr:'pro',emailwl:'pro',consultingpkg:'free'
};
function toast(m){var t=$('toast');t.textContent=m;t.style.display='block';setTimeout(function(){t.style.display='none'},3000)}
function showReg(){$('loginForm').style.display='none';$('regForm').style.display=''}
function showLogin(){$('regForm').style.display='none';$('loginForm').style.display=''}
// BUILD SIDEBAR
function buildSidebar(){
var nav=$('nav');
var groups={};var gOrder=[];
for(var k in MODULES){
var g=MODULES[k][3];
if(!groups[g]){groups[g]=[];gOrder.push(g)}
groups[g].push(k);
}
var html='<div class="sb-link on" onclick="go(\'home\')"><div class="d" style="background:var(--accent)"></div>Dashboard</div>';
for(var gi=0;gi<gOrder.length;gi++){
var g=gOrder[gi];
html+='<div class="sb-group open" onclick="toggleGroup(this)"><span>'+g+'</span><span class="arrow">&#9654;</span></div>';
html+='<div class="sb-items open">';
for(var i=0;i<groups[g].length;i++){
var k=groups[g][i];
var m=MODULES[k];
html+='<div class="sb-link" data-id="'+k+'" onclick="go(\''+k+'\')"><div class="d" style="background:'+m[2]+'"></div>'+m[0]+'</div>';
}
html+='</div>';
}
nav.innerHTML=html;
}
function toggleGroup(el){
el.classList.toggle('open');
var items=el.nextElementSibling;
if(items)items.classList.toggle('open');
}
// NAVIGATE
function go(page){
if(!KEY&&page!=='home'){toast('Connectez-vous');return}
currentPage=page;
// Sidebar active
document.querySelectorAll('.sb-link').forEach(function(l){l.classList.remove('on')});
var active=document.querySelector('.sb-link[data-id="'+page+'"]');
if(active)active.classList.add('on');
if(page==='home')document.querySelector('.sb-link[onclick*="home"]').classList.add('on');
if(page==='home'){
$('homeView').style.display='';trackRecent(id);
$('frameView').style.display='none';
$('pageTitle').textContent='Dashboard';
$('newTab').style.display='none';
return;
}
var mod=MODULES[page];
if(!mod){toast('Module inconnu');return}
$('pageTitle').textContent=mod[0];
$('homeView').style.display='none';
$('frameView').style.display='block';
$('newTab').style.display='';
currentUrl=mod[1];
// SET IFRAME SRC — simple, direct, no conditions
$('frameView').src=mod[1]+(mod[1].includes('?')?'&':'?')+'_t='+Date.now();
// Dark-mode injection for product iframes
$('frameView').addEventListener('load', function(){
try {
var doc = this.contentDocument || this.contentWindow.document;
if (!doc) return;
var s = doc.createElement('style');
s.textContent = `
.in-iframe { background: #0b0d14 !important; color: #e2e8f0 !important; }
.in-iframe body { background: #0b0d14 !important; color: #e2e8f0 !important; }
.in-iframe section { background: transparent !important; }
.in-iframe .hero { background: transparent !important; }
.in-iframe h1, .in-iframe h2, .in-iframe h3 { color: #f1f5f9 !important; }
.in-iframe p, .in-iframe li, .in-iframe span { color: #94a3b8 !important; }
.in-iframe b, .in-iframe strong { color: #e2e8f0 !important; }
.in-iframe em { color: #d4a843 !important; }
.in-iframe .badge { background: rgba(212,168,67,.1) !important; color: #d4a843 !important; border: 1px solid rgba(212,168,67,.2) !important; }
.in-iframe input, .in-iframe textarea, .in-iframe select { background: #111827 !important; color: #e2e8f0 !important; border-color: #1e293b !important; }
.in-iframe .plan-card, .in-iframe .pricing-card, .in-iframe .tier-card, .in-iframe [class*="plan"], .in-iframe [class*="tier"], .in-iframe [class*="pricing"] {
background: linear-gradient(135deg, #111827, #0f172a) !important;
border: 1px solid #1e293b !important;
color: #e2e8f0 !important;
border-radius: 16px !important;
}
.in-iframe .feat, .in-iframe .feature, .in-iframe [class*="feat"] {
background: linear-gradient(135deg, #111827, #0f172a) !important;
border: 1px solid #1e293b !important;
border-radius: 12px !important;
}
.in-iframe .btn-p, .in-iframe .cta-btn, .in-iframe [class*="btn-p"] {
background: linear-gradient(135deg, #d4a843, #b8942e) !important;
color: #0a0d13 !important;
border: none !important;
border-radius: 12px !important;
font-weight: 700 !important;
}
.in-iframe .btn-o, .in-iframe [class*="btn-o"], .in-iframe [class*="btn-n"] {
background: transparent !important;
color: #94a3b8 !important;
border: 1px solid #334155 !important;
border-radius: 12px !important;
}
.in-iframe .stat-v, .in-iframe .stat b { color: #d4a843 !important; }
.in-iframe .stat-l, .in-iframe .stat small { color: #64748b !important; }
.in-iframe .stat { background: rgba(255,255,255,.03) !important; border: 1px solid #1e293b !important; border-radius: 12px !important; }
.in-iframe a { color: #60a5fa !important; }
.in-iframe code, .in-iframe pre { background: #1e293b !important; color: #e2e8f0 !important; }
.in-iframe hr { border-color: #1e293b !important; }
.in-iframe table { border-color: #1e293b !important; }
.in-iframe th { background: #111827 !important; color: #94a3b8 !important; border-color: #1e293b !important; }
.in-iframe td { border-color: #1e293b !important; color: #e2e8f0 !important; }
.in-iframe tr:hover { background: rgba(129,140,248,.05) !important; }
.in-iframe ::placeholder { color: #475569 !important; }
.in-iframe .sub { color: #64748b !important; }
`;
doc.head.appendChild(s);
} catch(e) {}
});
}
// HOME DASHBOARD
function renderHome(){
$('homeView').innerHTML=
'<div class="stats">'+
'<div class="stat"><b>62</b><small>Produits</small></div>'+
'<div class="stat"><b>8</b><small>Suites</small></div>'+
'<div class="stat"><b style="color:var(--green)">Live</b><small>API Status</small></div>'+
'<div class="stat"><b id="hTier">Free</b><small>Plan</small></div>'+
'</div>'+
'<div style="margin-bottom:16px;display:flex;gap:10px;align-items:center">'+
'<div style="flex:1;position:relative"><input type="text" id="toolSearch" placeholder="Rechercher un produit..." oninput="filterTools()" style="width:100%;padding:10px 16px;background:var(--sb);border:1px solid var(--border);border-radius:8px;color:var(--white);font-size:13px;outline:none"><span class="search-hint">Ctrl+K</span></div>'+
'<span style="font-size:11px;color:var(--dim)" id="toolCount">62 produits</span>'+
'</div>'+
'<div class="tools" id="toolGrid"></div>';
var ICONS={
'arsenal':'/assets/logo-wevanalytics.svg',
'wv':'/assets/logo-wevads-Crayl4yz.png',
'wevadsia':'/assets/logo-wevads-Crayl4yz.png',
'da':'/assets/logo-deliverads.svg',
'we':'/assets/logo-wevia-official.svg',
'ds':'/assets/logo-deliverscore.svg',
'sentinel':'/assets/logo-sentinel.svg',
'mr':'/assets/logo-medreach.svg',
'lf':'/assets/logo-leadforge.svg',
'gpu':'/assets/logo-wevia-official.svg',
'cf':'/assets/logo-content-factory.svg',
'pa':'/assets/logo-proposalai.svg',
'bp':'/assets/logo-blueprintai.svg',
'mw':'/assets/logo-mailwarm.svg',
'oa':'/assets/logo-outreachai.svg',
'aff':'/assets/logo-affiliates.svg',
'sf':'/assets/logo-storeforge.svg',
'wl':'/assets/logo-wevia-official.svg',
'fb':'/assets/logo-formbuilder.svg',
'df':'/assets/logo-devforge.svg',
'mind':'/assets/logo-weval-mind.svg',
'crf':'/assets/logo-creative-factory.svg',
'scout':'/assets/logo-scout.svg',
'yt':'/assets/logo-youtube-factory.svg',
'ppt':'/assets/logo-presentationai.svg',
'translate':'/assets/logo-translateai.svg',
'bizplan':'/assets/logo-bizplan.svg',
'contracts':'/assets/logo-contractai.svg',
'meeting':'/assets/logo-meeting-summary.svg',
'esign':'/assets/logo-esignature.svg',
'leansixsigma':'/assets/logo-leansixsigma.svg',
'audit':'/assets/logo-auditcompliance.svg',
'et':'/assets/logo-medreach.svg',
'mailforge':'/assets/logo-mailforge.svg',
'cloudbridge':'/assets/logo-cloudbridge.svg',
'svc':'/assets/logo-consulting.svg',
'academy':'/assets/logo-academy.svg',
'canvas':'/assets/logo-canvasai.svg',
'dash':'/assets/logo-dashboardai.svg',
'emailverify':'/assets/logo-emailverify.svg',
'inboxtest':'/assets/logo-inboxtest.svg',
'ispmonitor':'/assets/logo-ispmonitor.svg',
'newsletter':'/assets/logo-newsletter.svg',
'cloudcost':'/assets/logo-cloudcost.svg',
'mailstream':'/assets/logo-mailstream.svg',
'adscontrol':'/assets/logo-adscontrol.svg',
'networkguard':'/assets/logo-networkguard.svg',
'canvasai':'/assets/logo-canvasai.svg',
'copyai':'/assets/logo-copyai.svg',
'dashboardai':'/assets/logo-dashboardai.svg',
'dataharvest':'/assets/logo-dataharvest.svg',
'reputationai':'/assets/logo-reputationai.svg',
'smsforge':'/assets/logo-smsforge.svg',
'storeai':'/assets/logo-storeforge.svg',
'wevalcrm':'/assets/logo-weval-crm.svg',
'emailplatform':'/assets/logo-deliverads.svg',
'medreachapi':'/assets/logo-medreach.svg',
'weviaagency':'/assets/logo-wevia-official.svg',
'healthcarecrm':'/assets/logo-medreach.svg',
'iaarabe':'/assets/logo-wevia-official.svg',
'aisdr':'/assets/logo-outreachai.svg',
'emailwl':'/assets/logo-mailforge.svg',
'consultingpkg':'/assets/logo-consulting.svg',
};
// Recent products
var recents=JSON.parse(localStorage.getItem('wv_recent')||'[]');
var favs=JSON.parse(localStorage.getItem('wv_favs')||'[]');
var recentHtml='';
if(recents.length>0||favs.length>0){
recentHtml='<div class="recent-bar">';
if(favs.length>0){
recentHtml+='<span class="label">★ Favoris</span>';
favs.slice(0,6).forEach(function(k){if(MODULES[k])recentHtml+='<span class="recent-chip" onclick="go(\''+k+'\')">'+MODULES[k][0]+'</span>'});
}
if(recents.length>0){
recentHtml+='<span class="label" style="margin-left:8px">Récents</span>';
recents.slice(0,5).forEach(function(k){if(MODULES[k])recentHtml+='<span class="recent-chip" onclick="go(\''+k+'\')">'+MODULES[k][0]+'</span>'});
}
recentHtml+='</div>';
}
// Product grid with badges + favs + tooltips
var html='';
for(var k in MODULES){
var m=MODULES[k];
var tier=TIERS[k]||'free';
var isFav=favs.indexOf(k)>-1;
var desc={'Services':'Consulting & accompagnement','IA':'Intelligence artificielle','Flagships':'Produits phares','Marketing':'Marketing digital','Commerce':'E-commerce','Dev':'Développement','Scanners':'Analyse & scan','Data':'Données','IA Apps':'Applications IA','Email+':'Email avancé'};
html+='<div class="tool" onclick="go(\''+k+'\')">';
html+='<span class="tool-badge '+(tier==='pro'?'pro':'free')+'">'+tier+'</span>';
html+='<button class="tool-fav '+(isFav?'on':'')+'" onclick="event.stopPropagation();toggleFav(\''+k+'\')">'+(isFav?'★':'☆')+'</button>';
html+='<div class="tool-tip">'+m[0]+' — '+(desc[m[3]]||m[3])+'</div>';
html+='<div class="tool-ico">'+(k==='wevadsia'?'<span class="ia-badge">IA</span>':'')+'<img src="'+(ICONS[k]||'/assets/logo-weval-ia.svg')+'" alt=""></div>';
html+='<h3>'+m[0]+'</h3><p>'+m[3]+'</p></div>';
}
$('toolGrid').innerHTML=recentHtml+html;
}
// AUTH
async function doLogin(){
var btn=document.getElementById('loginBtn');if(btn){btn.textContent='Connexion...';btn.disabled=true}
var e=v('lEmail'),k=v('lKey');
if(!e&&!k){toast('Email ou cle requis');return}
try{
var r;
if(k){r=await(await fetch(AUTH+'?action=dashboard&key='+k)).json();if(r.error){toast(r.error);return}if(!r.api_key){toast('Cle invalide');return}KEY=r.api_key;U=r.user||{};enter()}
else{r=await(await fetch(AUTH,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({name:'User',email:e,company:'N/A',product:'all'})})).json();if(r.error){toast(r.error);return}KEY=r.api_key;U={name:'User',email:e,tier:r.tier||'free'};enter()}
}catch(ex){toast('Erreur: '+ex.message)}
finally{var btn=document.getElementById('loginBtn');if(btn){btn.textContent='Se connecter';btn.disabled=false}}
}
async function doRegister(){
var n=v('rName'),e=v('rEmail'),c=v('rCompany');
if(!n||!e||!c){toast('Tous les champs requis');return}
try{
var r=await(await fetch(AUTH,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({name:n,email:e,company:c,product:'all'})})).json();
if(r.error){toast(r.error);return}KEY=r.api_key;U={name:n,email:e,tier:r.tier||'free'};enter()
}catch(ex){toast('Erreur: '+ex.message)}
}
function enter(){
try{localStorage.setItem('wk',KEY);localStorage.setItem('wu',JSON.stringify(U))}catch(e){}
$('login').style.display='none';
$('app').style.display='block';
$('uName').textContent=U.name||U.email||'User';
$('uTier').textContent=(U.tier||'free')+' plan';
$('topKey').textContent=(KEY||'').substring(0,16)+'...';
if($('hTier'))$('hTier').textContent=U.tier||'Free';
buildSidebar();
renderHome();
// Welcome toast on first visit
if(!localStorage.getItem('wv_welcomed')){
toast('Bienvenue ! Explorez nos 62 produits SaaS.');
localStorage.setItem('wv_welcomed','1');
}
}
// Search/filter products
function filterTools(){
var q=(document.getElementById('toolSearch')||{}).value||'';
q=q.toLowerCase();
var cards=document.querySelectorAll('.tool');
var visible=0;
cards.forEach(function(card){
var text=(card.textContent||'').toLowerCase();
if(!q||text.indexOf(q)>-1){card.style.display='';visible++}
else{card.style.display='none'}
});
var counter=document.getElementById('toolCount');
if(counter)counter.textContent=visible+' produit'+(visible>1?'s':'');
}
// ENTER ON LOGIN
document.addEventListener('keypress',function(e){if(e.key==='Enter'&&$('login').style.display!=='none'){if($('loginForm').style.display!=='none')doLogin();else doRegister()}});
// AUTO RESTORE
try{var sk=localStorage.getItem('wk'),su=localStorage.getItem('wu');if(sk&&su){KEY=sk;U=JSON.parse(su);enter()}}catch(e){}
// Sidebar filter
function filterSidebar(){
var q=(document.getElementById('sbSearch')||{}).value.toLowerCase();
document.querySelectorAll('.sb-link').forEach(function(el){
if(el.dataset.id==='home'||!el.dataset.id)return;
var text=(el.textContent||'').toLowerCase();
el.style.display=(!q||text.indexOf(q)>-1)?'':'none';
});
// Show parent groups that have visible children
document.querySelectorAll('.sb-group').forEach(function(g){
var items=g.nextElementSibling;
if(items&&items.classList.contains('sb-items')){
var hasVisible=false;
items.querySelectorAll('.sb-link').forEach(function(l){if(l.style.display!=='none')hasVisible=true});
g.style.display=(!q||hasVisible)?'':'none';
items.style.display=(!q||hasVisible)?'':'none';
if(q&&hasVisible){items.classList.add('open');g.classList.add('open')}
}
});
}
// Toggle favorite
function toggleFav(k){
var favs=JSON.parse(localStorage.getItem('wv_favs')||'[]');
var idx=favs.indexOf(k);
if(idx>-1)favs.splice(idx,1);else favs.unshift(k);
localStorage.setItem('wv_favs',JSON.stringify(favs.slice(0,10)));
renderHome();
}
// Track recent
function trackRecent(k){
if(k==='home')return;
var r=JSON.parse(localStorage.getItem('wv_recent')||'[]');
r=r.filter(function(x){return x!==k});
r.unshift(k);
localStorage.setItem('wv_recent',JSON.stringify(r.slice(0,8)));
}
// Ctrl+K shortcut
document.addEventListener('keydown',function(e){
if((e.ctrlKey||e.metaKey)&&e.key==='k'){
e.preventDefault();
if(currentPage!=='home')go('home');
setTimeout(function(){var s=$('toolSearch');if(s){s.focus();s.select()}},100);
}
if(e.key==='Escape'){var s=$('toolSearch');if(s&&document.activeElement===s){s.value='';filterTools();s.blur()}}
});
</script>
<!-- Contact Overlay (intercepts /contact-us/ in iframe) -->
<div id="contactOverlay" style="display:none;position:fixed;top:0;left:var(--sidebar-w,140px);right:0;bottom:0;z-index:500;background:rgba(5,8,18,0.97);overflow-y:auto;padding:3rem 4%">
<div style="max-width:520px;margin:0 auto">
<button onclick="closeContactOverlay()" style="float:right;background:none;border:none;color:#64748b;font-size:1.4rem;cursor:pointer;padding:8px"></button>
<div style="display:inline-block;background:rgba(99,102,241,.1);color:#6366f1;padding:6px 18px;border-radius:20px;font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;margin-bottom:1rem">Contact</div>
<h2 style="font-size:1.8rem;font-weight:800;color:#f1f5f9;margin-bottom:.5rem" id="overlayTitle">Parlons de votre projet</h2>
<p style="color:#94a3b8;font-size:.9rem;margin-bottom:2rem;line-height:1.6">Remplissez le formulaire ci-dessous. Notre équipe vous recontacte sous 24h.</p>
<div style="margin-bottom:1rem"><label style="display:block;font-size:.75rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px">Nom complet</label><input id="ovName" type="text" placeholder="Votre nom" style="width:100%;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.06);color:#f1f5f9;border-radius:8px;padding:.7rem 1rem;font-size:.88rem;font-family:inherit;outline:none"></div>
<div style="margin-bottom:1rem"><label style="display:block;font-size:.75rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px">Email professionnel</label><input id="ovEmail" type="email" placeholder="vous@entreprise.com" style="width:100%;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.06);color:#f1f5f9;border-radius:8px;padding:.7rem 1rem;font-size:.88rem;font-family:inherit;outline:none"></div>
<div style="margin-bottom:1rem"><label style="display:block;font-size:.75rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px">Entreprise</label><input id="ovCompany" type="text" placeholder="Nom de votre entreprise" style="width:100%;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.06);color:#f1f5f9;border-radius:8px;padding:.7rem 1rem;font-size:.88rem;font-family:inherit;outline:none"></div>
<div style="margin-bottom:1rem"><label style="display:block;font-size:.75rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px">Produit</label><input id="ovProduct" type="text" readonly style="width:100%;background:rgba(99,102,241,.06);border:1px solid rgba(99,102,241,.15);color:#818cf8;border-radius:8px;padding:.7rem 1rem;font-size:.88rem;font-family:inherit;outline:none;font-weight:600"></div>
<div style="margin-bottom:1rem"><label style="display:block;font-size:.75rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px">Message</label><textarea id="ovMsg" placeholder="Décrivez votre besoin..." style="width:100%;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.06);color:#f1f5f9;border-radius:8px;padding:.7rem 1rem;font-size:.88rem;font-family:inherit;outline:none;resize:vertical;min-height:80px"></textarea></div>
<button id="ovSendBtn" onclick="sendOverlayForm()" style="display:block;width:100%;background:#6366f1;color:#fff;padding:14px;border:none;border-radius:12px;font-weight:700;font-size:.95rem;cursor:pointer;font-family:inherit;margin-top:1.5rem">Envoyer →</button>
<div id="ovSuccess" style="display:none;background:rgba(0,200,150,.08);border:1px solid rgba(0,200,150,.2);border-radius:12px;padding:1.5rem;text-align:center;margin-top:1rem"><h3 style="color:#00c9a7;font-size:1.2rem;margin-bottom:.5rem">Message envoyé ✓</h3><p style="font-size:.85rem;color:#94a3b8">Notre équipe vous recontactera sous 24h.</p><button onclick="closeContactOverlay()" style="margin-top:1rem;background:none;border:1px solid rgba(255,255,255,.1);color:#94a3b8;padding:8px 20px;border-radius:8px;cursor:pointer;font-family:inherit">← Retour au produit</button></div>
</div></div>
<script>
var _currentProduct='';
function showContactOverlay(product){
_currentProduct=product||'';
document.getElementById('ovProduct').value=_currentProduct;
document.getElementById('ovSuccess').style.display='none';
document.getElementById('ovSendBtn').style.display='block';
document.getElementById('ovName').value='';document.getElementById('ovEmail').value='';document.getElementById('ovCompany').value='';document.getElementById('ovMsg').value='';
document.getElementById('contactOverlay').style.display='block';
}
function closeContactOverlay(){
document.getElementById('contactOverlay').style.display='none';
// Restore iframe to last product
var f=document.getElementById('frameView');
if(f&&f.dataset.lastSrc&&f.src.indexOf('contact-us')>-1) f.src=f.dataset.lastSrc;
}
function sendOverlayForm(){
var n=document.getElementById('ovName').value.trim(),e=document.getElementById('ovEmail').value.trim();
if(!n||!e){alert('Veuillez remplir nom et email.');return;}
var btn=document.getElementById('ovSendBtn');btn.disabled=true;btn.textContent='Envoi...';
fetch('/api/contact',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({name:n,email:e,company:document.getElementById('ovCompany').value.trim(),subject:'demo',message:'[Produit: '+_currentProduct+'] '+document.getElementById('ovMsg').value.trim(),source:'workspace-overlay',ts:new Date().toISOString()})}).then(function(){
document.getElementById('ovSendBtn').style.display='none';
document.getElementById('ovSuccess').style.display='block';
}).catch(function(){
document.getElementById('ovSendBtn').style.display='none';
document.getElementById('ovSuccess').style.display='block';
});
}
// Intercept iframe navigation to /contact-us/
(function(){
var frame=document.getElementById('frameView');
if(!frame)return;
// Save last product URL before navigation
var origSrc=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,'src');
// Poll approach: watch iframe URL changes
setInterval(function(){
try{
var loc=frame.contentWindow.location.href;
if(loc.indexOf('/contact-us')>-1){
// Find current product name from sidebar
var active=document.querySelector('.s-item.act');
var prodName=active?active.textContent.trim():'';
showContactOverlay(prodName);
// Navigate iframe back
if(frame.dataset.lastSrc) frame.src=frame.dataset.lastSrc;
} else if(loc.indexOf('/products/')>-1){
frame.dataset.lastSrc=loc;
}
}catch(e){}
},500);
})();
</script>
<script src="/weval-audit-reco.js" defer></script>
<footer style="padding:1.5rem 4%;max-width:1200px;margin:0 auto;display:flex;justify-content:space-between;border-top:1px solid rgba(255,255,255,.04);font-size:.75rem;color:#7a8ba5"><span>&copy; 2026 WEVAL Consulting</span><a href="/products/" style="color:#10b981;text-decoration:none">Produits</a></footer>
</body></html>