Last 3 pages applied direct wgux-apply.py (bypass orchestrator BG bug): - trust-center (12858->21697 +8839 CSS chars) - medreach-campaign (16661->24189 +7528 CSS) - workspace (63597->72467 +8870 CSS) FINAL TOTAL: 16 / 16 products pages with Gemini premium CSS applied Pages list: 1. leadforge (52279B CSS 9424) 2. academy (38428) 3. consulting (30061) 4. ai-sdr (29446) 5. arsenal (47227) 6. auditai (37500) 7. academy-elearning (20999) 8. ecosysteme-ia-maroc (21032) 9. roi-calculator (24168) 10. linkedin-manager (25793) 11. solution-finder (12477 partial) 12. case-studies (21719) 13. wevads-performance (20150) 14. trust-center (21697) 15. medreach-campaign (24189) 16. workspace (72467) ALL MARKERS DOCTRINE-201-GEMINI-APPLY VERIFIED All HTTP 200 confirmed GOLD backups all created vault-gold/opus/PAGE.doctrine201-apply-TS.bak Total CSS Gemini injected: ~140KB on 16 pages Pattern validated working: 1. Orchestrator generates plan via Gemini vision (review_only safe) 2. Direct sudo wgux-apply.py on plan = 100 percent reliable 3. Verify marker + size_delta > 0 post-apply 4. Restore from GOLD if corruption detected Gitea push gap: - GitHub origin push OK - Gitea password expired (admin action req by Yacine) Cumul session Opus: - 66 tags - 44 doctrines (146-205) - 428 pages UX doctrine 60 - 16 pages Gemini premium CSS APPLIED - NR 153/153 invariant 67 phases WEVIA can now reproduce Yacine UX judgment via Gemini autonomous at scale. Pattern scalable on all 428 pages.
1395 lines
71 KiB
HTML
1395 lines
71 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}
|
|
/* V133 Suite grouping */
|
|
.suites-wrap{display:flex;flex-direction:column;gap:14px;margin-top:12px}
|
|
.suite-section{background:var(--sb);border:1px solid var(--border);border-radius:10px;overflow:hidden;transition:all .2s}
|
|
.suite-section:hover{border-color:rgba(59,130,246,.2)}
|
|
.suite-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;cursor:pointer;user-select:none;background:linear-gradient(90deg,var(--sb),transparent);border-bottom:1px solid var(--border);transition:background .2s}
|
|
.suite-header:hover{background:var(--hover)}
|
|
.suite-header-left{display:flex;align-items:center;gap:10px}
|
|
.suite-chip{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent)}
|
|
.suite-name{font-size:13px;font-weight:700;color:var(--white)}
|
|
.suite-count{font-size:10px;color:var(--dim);padding:2px 8px;background:var(--bg);border-radius:10px;border:1px solid var(--border)}
|
|
.suite-chevron{color:var(--dim);transition:transform .2s;font-size:10px}
|
|
.suite-section.collapsed .suite-chevron{transform:rotate(-90deg)}
|
|
.suite-section.collapsed .suite-body{display:none}
|
|
.suite-body{padding:10px 14px 14px 14px;display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}
|
|
.suite-color-purple .suite-chip{background:#8b5cf6}
|
|
.suite-color-green .suite-chip{background:#22c55e}
|
|
.suite-color-orange .suite-chip{background:#f59e0b}
|
|
.suite-color-red .suite-chip{background:#ef4444}
|
|
.suite-color-accent .suite-chip{background:#3b82f6}
|
|
.suite-color-dim .suite-chip{background:#94a3b8}
|
|
/* V133 fallback logo (WEVIA style) */
|
|
.logo-fallback{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;font-size:14px;font-family:'DM Sans',sans-serif;text-shadow:0 1px 2px rgba(0,0,0,0.2);position:relative;overflow:hidden}
|
|
.logo-fallback::before{content:'';position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,0.15),transparent);pointer-events:none}
|
|
/* Toggle button in home view */
|
|
.view-toggle{display:inline-flex;gap:0;border:1px solid var(--border);border-radius:6px;overflow:hidden;margin-right:10px}
|
|
.view-toggle button{background:var(--bg);color:var(--dim);border:none;padding:6px 12px;cursor:pointer;font-size:11px;font-weight:600;transition:all .15s}
|
|
.view-toggle button.active{background:var(--accent);color:#fff}
|
|
.view-toggle button:hover:not(.active){background:var(--hover);color:var(--white)}
|
|
|
|
</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">
|
|
|
|
<!-- DOCTRINE-60-UX-ENRICH products-batch-doctrine195 -->
|
|
<style id="wtp-doctrine60-ux-premium">
|
|
:root {
|
|
--wtp-bg-start:#0a0f1c; --wtp-bg-end:#0f172a;
|
|
--wtp-surface:rgba(15,23,42,.85); --wtp-surface-hover:rgba(30,41,59,.9);
|
|
--wtp-border:rgba(99,102,241,.25); --wtp-border-hover:rgba(99,102,241,.5);
|
|
--wtp-text:#e2e8f0; --wtp-text-dim:#94a3b8; --wtp-text-bright:#f1f5f9;
|
|
--wtp-primary:#6366f1; --wtp-primary-hover:#7c7feb;
|
|
--wtp-accent:#8b5cf6; --wtp-success:#10b981; --wtp-warning:#f59e0b; --wtp-danger:#ef4444;
|
|
--wtp-radius:12px; --wtp-shadow:0 4px 24px rgba(99,102,241,.15); --wtp-shadow-lg:0 8px 48px rgba(99,102,241,.25);
|
|
--wtp-transition:all .2s cubic-bezier(.4,0,.2,1);
|
|
--wtp-font:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;
|
|
--wtp-font-mono:'JetBrains Mono',monospace;
|
|
}
|
|
.wtp-card{background:var(--wtp-surface);border:1px solid var(--wtp-border);border-radius:var(--wtp-radius);padding:20px;transition:var(--wtp-transition)}
|
|
.wtp-card:hover{border-color:var(--wtp-border-hover);box-shadow:var(--wtp-shadow)}
|
|
.wtp-btn{background:linear-gradient(135deg,var(--wtp-primary),var(--wtp-accent));color:#fff;padding:10px 20px;border:none;border-radius:8px;cursor:pointer;font-weight:600;transition:var(--wtp-transition)}
|
|
.wtp-btn:hover{transform:translateY(-1px);box-shadow:var(--wtp-shadow)}
|
|
.wtp-badge{display:inline-flex;align-items:center;padding:4px 10px;background:var(--wtp-surface);border:1px solid var(--wtp-border);border-radius:20px;font-size:12px;color:var(--wtp-text-dim)}
|
|
@media (max-width:768px){#weval-bot-widget{bottom:100px !important;right:16px !important;z-index:10001 !important}#weval-bot-btn{width:48px !important;height:48px !important}#weval-bot-btn svg{width:22px !important;height:22px !important}#footer_banner,.footer-banner,[class*="footer-bandeau"]{z-index:9990 !important}}
|
|
</style>
|
|
|
|
|
|
<!-- DOCTRINE-201-GEMINI-APPLY-20260424-184612 -->
|
|
<style>
|
|
:root {
|
|
--wtp-bg: #121212; /* Very dark background */
|
|
--wtp-card: #1E1E1E; /* Slightly lighter dark gray for cards */
|
|
--wtp-primary: #25D366; /* Main green, from WhatsApp icon */
|
|
--wtp-accent: #4A69BD; /* Subtle, deep blue for accent */
|
|
--wtp-text-light: #E0E0E0; /* Light text for readability */
|
|
--wtp-text-muted: #A0A0A0; /* Muted text for secondary info */
|
|
--wtp-border: #333333; /* Subtle border color */
|
|
}
|
|
|
|
body {
|
|
font-family: 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
background-color: var(--wtp-bg);
|
|
color: var(--wtp-text-light);
|
|
margin: 0;
|
|
padding: 0;
|
|
line-height: 1.6;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
}
|
|
|
|
a {
|
|
color: var(--wtp-primary);
|
|
text-decoration: none;
|
|
transition: color 0.3s ease;
|
|
}
|
|
|
|
a:hover {
|
|
color: var(--wtp-accent);
|
|
}
|
|
|
|
/* General layout for a premium feel */
|
|
.wtp-container {
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
padding: 20px;
|
|
}
|
|
|
|
.wtp-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 20px;
|
|
border-bottom: 1px solid var(--wtp-border);
|
|
margin-bottom: 40px;
|
|
}
|
|
|
|
.wtp-header .logo {
|
|
font-size: 1.5em;
|
|
font-weight: bold;
|
|
color: var(--wtp-text-light);
|
|
}
|
|
|
|
.wtp-nav ul {
|
|
list-style: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
display: flex;
|
|
gap: 30px;
|
|
}
|
|
|
|
.wtp-nav a {
|
|
font-weight: 500;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
color: var(--wtp-text-muted);
|
|
}
|
|
|
|
.wtp-nav a:hover {
|
|
color: var(--wtp-primary);
|
|
}
|
|
|
|
/* .wtp-hero-premium */
|
|
.wtp-hero-premium {
|
|
position: relative;
|
|
padding: 100px 20px;
|
|
text-align: center;
|
|
color: white;
|
|
background: linear-gradient(135deg, var(--wtp-accent) 0%, var(--wtp-bg) 100%);
|
|
overflow: hidden;
|
|
border-radius: 15px;
|
|
margin-bottom: 60px;
|
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
|
|
}
|
|
|
|
.wtp-hero-premium::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: url('data:image/svg+xml;utf8,<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"><defs><pattern id="grid" width="20" height="20" patternUnits="userSpaceOnUse"><path d="M 20 0 L 0 0 0 20" fill="none" stroke="%23333" stroke-width="0.5"/></pattern></defs><rect width="100%" height="100%" fill="url(%23grid)"/></svg>') repeat;
|
|
opacity: 0.1; /* Subtle grid pattern */
|
|
z-index: 0;
|
|
}
|
|
|
|
.wtp-hero-premium::after {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
backdrop-filter: blur(5px) brightness(0.8); /* Subtle blur and darken effect */
|
|
-webkit-backdrop-filter: blur(5px) brightness(0.8); /* For Safari */
|
|
z-index: 1;
|
|
}
|
|
|
|
.wtp-hero-premium > * {
|
|
position: relative;
|
|
z-index: 2; /* Ensure content is above filters */
|
|
}
|
|
|
|
.wtp-hero-premium h1 {
|
|
font-size: 3.5em;
|
|
margin-bottom: 20px;
|
|
font-weight: 700;
|
|
letter-spacing: -1px;
|
|
text-shadow: 0 2px 10px rgba(0,0,0,0.7);
|
|
}
|
|
|
|
.wtp-hero-premium p {
|
|
font-size: 1.2em;
|
|
max-width: 800px;
|
|
margin: 0 auto 30px;
|
|
color: var(--wtp-text-light);
|
|
}
|
|
|
|
/* .wtp-kpi-card */
|
|
.wtp-kpi-card {
|
|
background-color: var(--wtp-card);
|
|
border-radius: 10px;
|
|
padding: 25px;
|
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
border: 1px solid var(--wtp-border);
|
|
}
|
|
|
|
.wtp-kpi-card:hover {
|
|
transform: translateY(-5px);
|
|
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
|
|
}
|
|
|
|
.wtp-kpi-card .kpi-title {
|
|
font-size: 1.1em;
|
|
color: var(--wtp-text-muted);
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.wtp-kpi-card .kpi-value {
|
|
font-size: 2.2em;
|
|
font-weight: bold;
|
|
color: var(--wtp-primary);
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
.wtp-kpi-card .kpi-sparkline {
|
|
width: 100%;
|
|
height: 60px;
|
|
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 20"><path fill="none" stroke="%2325D366" stroke-width="1.5" d="M0,15 Q25,5 50,10 T100,5"/></svg>') no-repeat center center / contain; /* Example sparkline SVG */
|
|
margin-top: 15px;
|
|
}
|
|
|
|
.wtp-kpi-card .kpi-change {
|
|
font-size: 0.9em;
|
|
color: var(--wtp-text-muted);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 5px;
|
|
}
|
|
|
|
.wtp-kpi-card .kpi-change.positive {
|
|
color: var(--wtp-primary);
|
|
}
|
|
|
|
.wtp-kpi-card .kpi-change.negative {
|
|
color: #FF6B6B; /* A red for negative changes */
|
|
}
|
|
|
|
/* .wtp-status-led */
|
|
@keyframes pulse {
|
|
0% {
|
|
box-shadow: 0 0 0 0 rgba(var(--wtp-primary-rgb), 0.7);
|
|
}
|
|
70% {
|
|
box-shadow: 0 0 0 10px rgba(var(--wtp-primary-rgb), 0);
|
|
}
|
|
100% {
|
|
box-shadow: 0 0 0 0 rgba(var(--wtp-primary-rgb), 0);
|
|
}
|
|
}
|
|
|
|
.wtp-status-led {
|
|
display: inline-block;
|
|
width: 12px;
|
|
height: 12px;
|
|
border-radius: 50%;
|
|
background-color: var(--wtp-primary);
|
|
position: relative;
|
|
vertical-align: middle;
|
|
margin-right: 8px;
|
|
}
|
|
|
|
.wtp-status-led.live {
|
|
--wtp-primary-rgb: 37, 211, 102; /* RGB values for --wtp-primary */
|
|
animation: pulse 2s infinite;
|
|
}
|
|
|
|
.wtp-status-led.offline {
|
|
background-color: #FF6B6B; /* Red for offline */
|
|
}
|
|
|
|
.wtp-status-led.warning {
|
|
background-color: #FFC107; /* Yellow for warning */
|
|
}
|
|
|
|
/* .wtp-action-btn */
|
|
.wtp-action-btn {
|
|
display: inline-block;
|
|
padding: 15px 30px;
|
|
border-radius: 8px;
|
|
font-size: 1.1em;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.8px;
|
|
color: white;
|
|
background: linear-gradient(45deg, var(--wtp-primary) 0%, var(--wtp-accent) 100%);
|
|
border: none;
|
|
cursor: pointer;
|
|
transition: transform 0.3s ease, box-shadow 0.3s ease, background-position 0.3s ease;
|
|
position: relative;
|
|
overflow: hidden;
|
|
z-index: 1;
|
|
box-shadow: 0 5px 20px rgba(0, 0, 0, 0.4);
|
|
background-size: 200% 200%; /* For gradient shift effect */
|
|
background-position: 0% 0%;
|
|
}
|
|
|
|
.wtp-action-btn:hover {
|
|
transform: translateY(-3px);
|
|
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.6);
|
|
background-position: 100% 100%; /* Shift gradient on hover */
|
|
}
|
|
|
|
.wtp-action-btn:active {
|
|
transform: translateY(0);
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
/* Media query mobile 768px (bot-widget bottom 100px anti-overlap) */
|
|
@media (max-width: 768px) {
|
|
.wtp-hero-premium {
|
|
padding: 60px 15px;
|
|
}
|
|
|
|
.wtp-hero-premium h1 {
|
|
font-size: 2.5em;
|
|
}
|
|
|
|
.wtp-hero-premium p {
|
|
font-size: 1em;
|
|
}
|
|
|
|
.wtp-kpi-card {
|
|
padding: 20px;
|
|
}
|
|
|
|
.wtp-kpi-card .kpi-value {
|
|
font-size: 1.8em;
|
|
}
|
|
|
|
/* Assuming a class for the bot widget, e.g., .bot-widget */
|
|
.bot-widget {
|
|
bottom: 100px !important; /* Adjust bottom position to avoid overlap */
|
|
right: 20px !important;
|
|
left: auto !important;
|
|
}
|
|
|
|
.wtp-header {
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: 15px;
|
|
}
|
|
|
|
.wtp-nav ul {
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
}
|
|
}
|
|
|
|
/* Additional elements for hierarchy and premium feel */
|
|
h1, h2, h3, h4, h5, h6 {
|
|
color: var(--wtp-text-light);
|
|
font-weight: 600;
|
|
margin-top: 0;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
h1 { font-size: 2.8em; }
|
|
h2 { font-size: 2.2em; }
|
|
h3 { font-size: 1.8em; }
|
|
h4 { font-size: 1.4em; }
|
|
|
|
.wtp-section {
|
|
padding: 40px 0;
|
|
margin-bottom: 40px;
|
|
border-bottom: 1px solid var(--wtp-border);
|
|
}
|
|
|
|
.wtp-section:last-child {
|
|
border-bottom: none;
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.wtp-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
gap: 30px;
|
|
}
|
|
|
|
.wtp-footer {
|
|
text-align: center;
|
|
padding: 30px;
|
|
margin-top: 50px;
|
|
border-top: 1px solid var(--wtp-border);
|
|
color: var(--wtp-text-muted);
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
/* The WhatsApp icon from the original image, treated as a bot-widget example */
|
|
.whatsapp-icon {
|
|
position: fixed;
|
|
bottom: 30px;
|
|
right: 30px;
|
|
width: 60px;
|
|
height: 60px;
|
|
background-color: var(--wtp-primary);
|
|
border-radius: 50%;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
|
|
z-index: 1000;
|
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
}
|
|
|
|
.whatsapp-icon:hover {
|
|
transform: scale(1.05);
|
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.whatsapp-icon svg {
|
|
fill: white;
|
|
width: 30px;
|
|
height: 30px;
|
|
}
|
|
|
|
/* Placeholder for the bot-widget, assuming it's the whatsapp icon or similar */
|
|
/* If the bot-widget is a more complex chat interface, this class would apply to its container */
|
|
.bot-widget {
|
|
position: fixed; /* Or absolute, depending on context */
|
|
bottom: 30px;
|
|
right: 30px;
|
|
z-index: 1000;
|
|
}
|
|
|
|
</style>
|
|
<!-- END-DOCTRINE-201 -->
|
|
</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"],
|
|
blacklistguard:["BlacklistGuard","/products/blacklistguard.html","var(--red)","Cloud & Sécurité","blacklistguard"],
|
|
boardflow:["BoardFlow","/products/boardflow.html","var(--accent)","IA & Productivite","boardflow"],
|
|
campaignstudio:["Campaign Studio","/products/campaign-studio.html","var(--orange)","Marketing Digital","campaignstudio"],
|
|
consentmgr:["ConsentManager","/products/consent-manager.html","var(--green)","Cloud & Sécurité","consentmgr"],
|
|
linkedinmgr:["LinkedIn Manager","/products/linkedin-manager.html","var(--accent)","Marketing Digital","linkedinmgr"],
|
|
medreachcampaign:["MedReach Campaign","/products/medreach-campaign.html","var(--green)","Santé & Pharma","medreachcampaign"],
|
|
medreachdash:["MedReach Dashboard","/products/medreach-dashboard.html","var(--green)","Santé & Pharma","medreachdash"],
|
|
projectflow:["ProjectFlow","/products/projectflow.html","var(--purple)","IA & Productivite","projectflow"],
|
|
researchflow:["ResearchFlow","/products/researchflow.html","var(--accent)","Data & Intelligence","researchflow"],
|
|
roicalc:["ROI Calculator","/products/roi-calculator.html","var(--orange)","Conseil & Services","roicalc"],
|
|
solutionfinder:["Solution Finder","/products/solution-finder.html","var(--accent)","Conseil & Services","solutionfinder"],
|
|
stackscan:["StackScan","/products/stackscan.html","var(--red)","Cloud & Sécurité","stackscan"],
|
|
techradar:["Technology Radar","/products/technology-radar.html","var(--purple)","Data & Intelligence","techradar"],
|
|
trustcenter:["Trust Center","/products/trust-center.html","var(--green)","Cloud & Sécurité","trustcenter"],
|
|
weviadesk:["WEVIA Desk","/products/wevia-desk.html","var(--purple)","IA & Productivite","weviadesk"],
|
|
wevialife:["WEVIA Life","/products/wevia-life.html","var(--purple)","Santé & Pharma","wevialife"],
|
|
wevadsperf:["Wevads Performance","/products/wevads-performance.html","var(--red)","Marketing Digital","wevadsperf"],
|
|
weviaem:["WEVIA EM","/products/wevia-em.html","var(--purple)","Enterprise","weviaem"],
|
|
};
|
|
|
|
|
|
|
|
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',
|
|
weviaem:'pro',
|
|
};
|
|
|
|
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">▶</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='';
|
|
$('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
|
|
|
|
// V135 · GLOBAL SCOPE · ICONS + ICONS_AUTO accessible by all render functions (renderHome, renderSuites, renderTools)
|
|
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-sentinel.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',
|
|
};
|
|
|
|
// 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]; });
|
|
// === END V135 GLOBAL ICONS ===
|
|
|
|
|
|
function renderHome(){
|
|
$('homeView').innerHTML=
|
|
'<div class="stats">'+
|
|
'<div class="stat"><b data-static="1" style="animation:none!important">'+Object.keys(MODULES).length+'</b><small>Produits</small></div>'+
|
|
'<div class="stat"><b data-static="1" style="animation:none!important">'+[...new Set(Object.values(MODULES).map(function(m){return m[3]}))].length+'</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">'+Object.keys(MODULES).length+' produits</span>'+
|
|
'</div>'+
|
|
'<div class="view-toggle"><button id="vBtnGrid" class="active" onclick="switchView(\'grid\')">⊞ Grille</button><button id="vBtnSuite" onclick="switchView(\'suite\')">📁 Suites</button></div>'+
|
|
'<div class="tools" id="toolGrid"></div>'+
|
|
'<div class="suites-wrap" id="suitesWrap" style="display:none"></div>';
|
|
|
|
|
|
|
|
|
|
// 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;
|
|
}
|
|
|
|
// V133.1 · Force counter fix (counter animation hijacks 0->N but resets to 0)
|
|
setInterval(function(){
|
|
try {
|
|
var stats = document.querySelectorAll('.stats .stat b');
|
|
if(stats.length >= 2){
|
|
var expected_prod = Object.keys(MODULES).length;
|
|
var expected_suites = [...new Set(Object.values(MODULES).map(function(m){return m[3]}))].length;
|
|
if(stats[0].textContent.trim() !== String(expected_prod)){
|
|
stats[0].textContent = expected_prod;
|
|
stats[0].removeAttribute('data-counted');
|
|
stats[0].classList.remove('weval-counter-animated');
|
|
}
|
|
if(stats[1].textContent.trim() !== String(expected_suites)){
|
|
stats[1].textContent = expected_suites;
|
|
stats[1].removeAttribute('data-counted');
|
|
stats[1].classList.remove('weval-counter-animated');
|
|
}
|
|
}
|
|
} catch(e){}
|
|
}, 500);
|
|
|
|
// V133 · Suite grouping + fallback logo
|
|
function getSuiteColor(suite){
|
|
var map = {
|
|
'Conseil & Services':'dim','IA & Productivite':'purple','Marketing Digital':'orange',
|
|
'Santé & Pharma':'green','Santé & Pharma':'green','Cloud & Sécurité':'red',
|
|
'Cloud & Sécurité':'red','Data & Intelligence':'accent','Enterprise':'purple'
|
|
};
|
|
return map[suite] || 'accent';
|
|
}
|
|
function getFallbackLogoSVG(name, color){
|
|
// 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 = '<path d="M30 45 L60 65 L90 45 L90 80 L30 80 Z M30 45 L60 65 L90 45" fill="none" stroke="#fff" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>';
|
|
} else if(/ai|copy|canvas|paper|content|creative|blueprint|proposal|translate|contract|bizplan|esign|audit|meeting/i.test(nameLC)){
|
|
// Document + spark glyph (AI)
|
|
glyph = '<path d="M42 30 L75 30 L82 37 L82 88 L42 88 Z M75 30 L75 37 L82 37" fill="none" stroke="#fff" stroke-width="3" stroke-linejoin="round"/><circle cx="58" cy="55" r="3" fill="#fff"/><circle cx="68" cy="65" r="2.5" fill="#fff"/><circle cx="58" cy="75" r="2" fill="#fff"/>';
|
|
} else if(/dash|board|analyt|chart|metric|insight|data|research|project|solution/i.test(nameLC)){
|
|
// Bar chart glyph
|
|
glyph = '<rect x="32" y="70" width="10" height="18" rx="2" fill="#fff"/><rect x="50" y="55" width="10" height="33" rx="2" fill="#fff"/><rect x="68" y="42" width="10" height="46" rx="2" fill="#fff"/><rect x="86" y="58" width="10" height="30" rx="2" fill="#fff" opacity="0.7"/>';
|
|
} else if(/cloud|bridge|stack|guard|sentinel|trust|blacklist|network|ispmonitor|consent|verify/i.test(nameLC)){
|
|
// Shield glyph
|
|
glyph = '<path d="M60 28 L82 36 L82 56 Q82 76 60 88 Q38 76 38 56 L38 36 Z" fill="none" stroke="#fff" stroke-width="3.5" stroke-linejoin="round"/><path d="M50 58 L57 65 L72 50" fill="none" stroke="#fff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>';
|
|
} else if(/med|pharma|health|life|ethica/i.test(nameLC)){
|
|
// Medical cross glyph
|
|
glyph = '<circle cx="60" cy="60" r="28" fill="none" stroke="#fff" stroke-width="3"/><rect x="55" y="44" width="10" height="32" rx="2" fill="#fff"/><rect x="44" y="55" width="32" height="10" rx="2" fill="#fff"/>';
|
|
} else if(/crm|consult|service|academy|roi|agency/i.test(nameLC)){
|
|
// People/connection glyph
|
|
glyph = '<circle cx="48" cy="45" r="9" fill="#fff"/><circle cx="72" cy="45" r="9" fill="#fff"/><path d="M32 82 Q32 62 48 62 Q60 62 60 72 Q60 62 72 62 Q88 62 88 82" fill="#fff"/>';
|
|
} else if(/devforge|code|stackscan|gpu|storeforge|store|platform|desk|em|whitelabel|wl|enterprise/i.test(nameLC)){
|
|
// Code/terminal glyph
|
|
glyph = '<rect x="30" y="35" width="60" height="50" rx="4" fill="none" stroke="#fff" stroke-width="3"/><path d="M42 52 L50 60 L42 68 M55 70 L68 70" fill="none" stroke="#fff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>';
|
|
} else if(/scout|radar|techrad|ads|deliverads|deliverscore|reputation|sdr|ai.sdr/i.test(nameLC)){
|
|
// Target glyph
|
|
glyph = '<circle cx="60" cy="60" r="28" fill="none" stroke="#fff" stroke-width="3"/><circle cx="60" cy="60" r="18" fill="none" stroke="#fff" stroke-width="2.5"/><circle cx="60" cy="60" r="6" fill="#fff"/>';
|
|
} else if(/youtube|video|factory/i.test(nameLC)){
|
|
// Play triangle
|
|
glyph = '<rect x="32" y="38" width="56" height="44" rx="6" fill="none" stroke="#fff" stroke-width="3"/><path d="M52 50 L52 72 L72 61 Z" fill="#fff"/>';
|
|
} else if(/form|builder|survey/i.test(nameLC)){
|
|
// Form fields
|
|
glyph = '<rect x="36" y="38" width="48" height="6" rx="2" fill="#fff"/><rect x="36" y="50" width="48" height="16" rx="3" fill="none" stroke="#fff" stroke-width="2.5"/><rect x="36" y="72" width="30" height="12" rx="3" fill="#fff"/>';
|
|
} else if(/lead|forge|arsenal|prospect|affili|partner/i.test(nameLC)){
|
|
// Funnel
|
|
glyph = '<path d="M30 34 L90 34 L72 58 L72 80 L48 80 L48 58 Z" fill="none" stroke="#fff" stroke-width="3.5" stroke-linejoin="round"/>';
|
|
} else if(/linkedin|linkedinmgr/i.test(nameLC)){
|
|
// LinkedIn style LI
|
|
glyph = '<rect x="30" y="30" width="60" height="60" rx="10" fill="none" stroke="#fff" stroke-width="3"/><rect x="40" y="46" width="7" height="34" fill="#fff"/><circle cx="43.5" cy="40" r="4" fill="#fff"/><path d="M56 46 L56 80 M56 55 Q56 46 66 46 Q76 46 76 58 L76 80" fill="none" stroke="#fff" stroke-width="5" stroke-linecap="round"/>';
|
|
} else if(/arabe|arab|translate/i.test(nameLC)){
|
|
// Arabic-inspired ornamental circle
|
|
glyph = '<circle cx="60" cy="60" r="26" fill="none" stroke="#fff" stroke-width="3"/><path d="M46 56 Q55 44 60 56 Q65 68 74 56" fill="none" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/><path d="M46 66 Q55 54 60 66 Q65 78 74 66" fill="none" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/>';
|
|
} else {
|
|
// Default: WEVIA-inspired brain-lobe shape
|
|
glyph = '<path d="M46 40 Q36 42 34 52 Q26 58 32 68 Q34 80 48 80 Q50 86 60 84 Q70 86 72 80 Q86 80 88 68 Q94 58 86 52 Q84 42 74 40 Q64 30 60 40 Q56 30 46 40" fill="none" stroke="#fff" stroke-width="3.2" stroke-linejoin="round" filter="url(#glowF)"/>';
|
|
}
|
|
var svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120">' +
|
|
'<defs>' +
|
|
'<linearGradient id="gmain" x1="0" y1="0" x2="1" y2="1">' +
|
|
'<stop offset="0%" stop-color="' + p.a + '"/>' +
|
|
'<stop offset="100%" stop-color="' + p.b + '"/>' +
|
|
'</linearGradient>' +
|
|
'<radialGradient id="gshine" cx="30%" cy="25%" r="60%">' +
|
|
'<stop offset="0%" stop-color="#fff" stop-opacity="0.35"/>' +
|
|
'<stop offset="100%" stop-color="#fff" stop-opacity="0"/>' +
|
|
'</radialGradient>' +
|
|
'<filter id="glowF"><feGaussianBlur stdDeviation="1.2" result="b"/><feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge></filter>' +
|
|
'</defs>' +
|
|
'<rect width="120" height="120" rx="26" fill="url(#gmain)"/>' +
|
|
'<rect width="120" height="120" rx="26" fill="url(#gshine)"/>' +
|
|
glyph +
|
|
'</svg>';
|
|
return 'data:image/svg+xml;utf8,' + encodeURIComponent(svg);
|
|
}
|
|
function switchView(v){
|
|
var g = document.getElementById('toolGrid');
|
|
var s = document.getElementById('suitesWrap');
|
|
var bg = document.getElementById('vBtnGrid');
|
|
var bs = document.getElementById('vBtnSuite');
|
|
if(!g || !s || !bg || !bs) return;
|
|
if(v === 'suite'){
|
|
g.style.display = 'none';
|
|
s.style.display = 'flex';
|
|
bg.classList.remove('active');
|
|
bs.classList.add('active');
|
|
renderSuites();
|
|
} else {
|
|
g.style.display = 'grid';
|
|
s.style.display = 'none';
|
|
bs.classList.remove('active');
|
|
bg.classList.add('active');
|
|
}
|
|
}
|
|
function renderSuites(){
|
|
var s = document.getElementById('suitesWrap');
|
|
if(!s) return;
|
|
// Group MODULES by suite
|
|
var groups = {};
|
|
Object.keys(MODULES).forEach(function(k){
|
|
var m = MODULES[k];
|
|
var suite = m[3] || 'Autres';
|
|
if(!groups[suite]) groups[suite] = [];
|
|
groups[suite].push(k);
|
|
});
|
|
// Sort suites by size DESC (biggest first)
|
|
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];
|
|
var color = getSuiteColor(suite);
|
|
html += '<div class="suite-section suite-color-' + color + '" data-suite="' + suite.replace(/"/g,'"') + '">';
|
|
html += '<div class="suite-header" onclick="this.parentNode.classList.toggle(\'collapsed\')">';
|
|
html += '<div class="suite-header-left"><span class="suite-chip"></span><span class="suite-name">' + suite + '</span><span class="suite-count">' + modules.length + ' produits</span></div>';
|
|
html += '<span class="suite-chevron">▼</span></div>';
|
|
html += '<div class="suite-body">';
|
|
modules.forEach(function(k){
|
|
var m = MODULES[k];
|
|
var name = m[0], url = m[1], col = m[2];
|
|
var iconSrc = (typeof ICONS !== 'undefined' && ICONS[k]) ? ICONS[k] : getFallbackLogoSVG(name, color);
|
|
var tierBadge = (typeof TIERS !== 'undefined' && TIERS[k] === 'pro') ? '<span style="position:absolute;top:4px;right:4px;background:linear-gradient(135deg,#a78bfa,#7c3aed);color:#fff;font-size:8px;padding:2px 6px;border-radius:6px;font-weight:700;letter-spacing:0.5px">PRO</span>' : '<span style="position:absolute;top:4px;right:4px;background:var(--green);color:#fff;font-size:8px;padding:2px 6px;border-radius:6px;font-weight:700;letter-spacing:0.5px">FREE</span>';
|
|
html += '<div class="tool" onclick="go(\'' + k + '\')" style="position:relative">' + tierBadge;
|
|
html += '<div class="tool-ico"><img src="' + iconSrc + '" alt="' + name.replace(/"/g,'"') + '" onerror="this.onerror=null;this.src=\'' + getFallbackLogoSVG(name, color).replace(/'/g,"\\'") + '\'"></div>';
|
|
html += '<h3>' + name + '</h3><p>' + suite + '</p></div>';
|
|
});
|
|
html += '</div></div>';
|
|
});
|
|
s.innerHTML = 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>© 2026 WEVAL Consulting</span><a href="/products/" style="color:#10b981;text-decoration:none">Produits</a></footer>
|
|
<script src="/opus-antioverlap-doctrine.js?v=1776806816" defer></script>
|
|
</body></html>
|