714 lines
58 KiB
HTML
714 lines
58 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>WEVAL Command Center</title>
|
||
<style>
|
||
:root{--bg:#06080f;--card:#0d1117;--border:#1e293b;--text:#e2e8f0;--dim:#64748b;--accent:#a5b4fc;--green:#22c55e;--red:#ef4444;--warn:#f59e0b;--blue:#3b82f6}
|
||
*{box-sizing:border-box;margin:0;padding:0}
|
||
body{font-family:'Segoe UI',system-ui,sans-serif;background:var(--bg);color:var(--text);height:100vh;display:flex;flex-direction:column;overflow:hidden}
|
||
header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:var(--card);border-bottom:1px solid var(--border);flex-shrink:0}
|
||
header h1{font-size:15px;color:var(--accent);font-weight:700}
|
||
.nav{display:flex;gap:4px;flex-wrap:wrap}
|
||
.nav button{padding:5px 10px;border:1px solid var(--border);background:var(--card);color:var(--dim);border-radius:5px;cursor:pointer;font-size:11px;transition:.15s;white-space:nowrap}
|
||
.nav button:hover{color:var(--text);border-color:var(--accent)}
|
||
.nav button.active{background:var(--accent);color:#000;border-color:var(--accent);font-weight:600}
|
||
.nav button .dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:4px}
|
||
.dot-ok{background:var(--green)}.dot-fail{background:var(--red)}.dot-warn{background:var(--warn)}
|
||
.main{flex:1;display:flex;overflow:hidden}
|
||
.sidebar{width:220px;background:var(--card);border-right:1px solid var(--border);overflow-y:auto;flex-shrink:0;padding:8px 0}
|
||
.sidebar.hidden{display:none}
|
||
.sg{padding:4px 12px}
|
||
.sg-title{font-size:10px;color:var(--dim);font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:8px 0 4px}
|
||
.sg a{display:flex;align-items:center;gap:6px;padding:5px 8px;color:var(--dim);text-decoration:none;font-size:12px;border-radius:4px;cursor:pointer;transition:.1s}
|
||
.sg a:hover{background:#1e293b;color:var(--text)}
|
||
.sg a.active{background:var(--accent);color:#000;font-weight:600}
|
||
.sg a .st{font-size:9px;padding:1px 5px;border-radius:3px;margin-left:auto}
|
||
.st-ok{background:#052e16;color:var(--green)}.st-auth{background:rgba(245,158,11,.15);color:#f59e0b}.st-fail{background:#450a0a;color:var(--red)}
|
||
.content{flex:1;display:flex;flex-direction:column;overflow:hidden}
|
||
.toolbar{display:flex;gap:6px;padding:6px 10px;background:var(--card);border-bottom:1px solid var(--border);align-items:center;flex-shrink:0}
|
||
.toolbar span{font-size:11px;color:var(--dim)}
|
||
.toolbar button{padding:3px 8px;border:1px solid var(--border);background:var(--card);color:var(--dim);border-radius:4px;cursor:pointer;font-size:11px}
|
||
.toolbar button:hover{color:var(--text)}
|
||
#frame{flex:1;border:none;width:100%;background:var(--bg)}
|
||
.grid-view{flex:1;overflow-y:auto;padding:10px;display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:8px}
|
||
.grid-view .tile{background:var(--card);border:1px solid var(--border);border-radius:8px;overflow:hidden;height:300px;display:flex;flex-direction:column}
|
||
.grid-view .tile-header{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;border-bottom:1px solid var(--border);flex-shrink:0}
|
||
.grid-view .tile-header span{font-size:11px;font-weight:600;color:var(--accent)}
|
||
.grid-view .tile-header button{padding:2px 6px;border:1px solid var(--border);background:transparent;color:var(--dim);border-radius:3px;cursor:pointer;font-size:10px}
|
||
.grid-view .tile-header button:hover{color:var(--text)}
|
||
.grid-view .tile iframe{flex:1;border:none;width:100%}
|
||
.status-bar{display:flex;gap:12px;padding:4px 16px;background:var(--card);border-top:1px solid var(--border);font-size:10px;color:var(--dim);flex-shrink:0;align-items:center}
|
||
.status-bar .pill{padding:1px 6px;border-radius:3px;font-weight:600}
|
||
.pill-ok{background:#052e16;color:var(--green)}.pill-fail{background:#450a0a;color:var(--red)}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<header>
|
||
<h1>WEVAL Command Center</h1>
|
||
<div class="nav" id="cats"></div>
|
||
<div style="display:flex;gap:6px">
|
||
<button class="nav" onclick="toggleSidebar()" style="padding:5px 8px;border:1px solid var(--border);background:var(--card);color:var(--dim);border-radius:5px;cursor:pointer;font-size:11px">☰</button>
|
||
<button class="nav" onclick="setView('single')" id="vSingle" style="padding:5px 8px;border:1px solid var(--border);background:var(--card);color:var(--dim);border-radius:5px;cursor:pointer;font-size:11px">▣</button>
|
||
<button class="nav" onclick="setView('grid')" id="vGrid" style="padding:5px 8px;border:1px solid var(--border);background:var(--card);color:var(--dim);border-radius:5px;cursor:pointer;font-size:11px">⊞</button>
|
||
<button class="nav" onclick="healthCheck()" id="btnHealth" style="padding:5px 8px;border:1px solid var(--border);background:var(--card);color:var(--dim);border-radius:5px;cursor:pointer;font-size:11px">🔄 Health</button>
|
||
</div>
|
||
</header>
|
||
|
||
<div class="main">
|
||
<div class="sidebar" id="sidebar"></div>
|
||
<div class="content" id="content">
|
||
<div class="toolbar" id="toolbar">
|
||
<span id="currentLabel">—</span>
|
||
<span style="flex:1"></span>
|
||
<button onclick="openNew()">↗ Nouvel onglet</button>
|
||
<button onclick="reloadFrame()">↻ Refresh</button>
|
||
</div>
|
||
<iframe id="frame" src="about:blank"></iframe>
|
||
<div class="grid-view" id="gridView" style="display:none"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="status-bar" id="statusBar">
|
||
<span>WEVAL Command Center v1.0</span>
|
||
<span id="sbTime"></span>
|
||
<span style="flex:1"></span>
|
||
<span id="sbHealth"></span>
|
||
</div>
|
||
|
||
<script>
|
||
var SCREENS=[
|
||
{id:'master',name:'6σ Master Test',url:'/master-test.html',cat:'Tests',icon:'🧪'},
|
||
{id:'mega',name:'WEVIA Mega-test',url:'/wevia-ia/mega-test.html',cat:'Tests',icon:'🤖'},
|
||
{id:'nonreg',name:'NonReg OPUS',url:'/nonreg.html',cat:'Tests',icon:'✅'},
|
||
{id:'golive',name:'GoLive Dashboard',url:'/golive.html',cat:'Tests',icon:'🚀'},
|
||
{id:'codereview',name:'Code Review',url:'/wevia-ia/code-review-22mars.html',cat:'Tests',icon:'🔍'},
|
||
{id:'capshealth',name:'Capabilities Health',url:'/api/wevia-capabilities.php?cap=health',cat:'Infra',icon:'💡'},
|
||
{id:'visual',name:'Visual NonReg',url:'/wevia-ia/screenshots/nonreg_20260323_0059.html',cat:'Tests',icon:'📸'},
|
||
{id:'wevads',name:'WEVADS ADX',url:'https://wevads.weval-consulting.com/',cat:'Ops',icon:'⚡'},
|
||
{id:"crons",name:"Cron Control All",url:"/wevia-ia/cron-control-all.html",cat:"Ops",icon:"⏰"},
|
||
|
||
{id:'cyber',name:'Cyber Monitor',url:'/wevia-ia/wevia-cyber-monitor.php',cat:'WEVIA',icon:'🛡'},
|
||
{id:'failover',name:'Failover Monitor',url:'/wevia-ia/wevia-failover-monitor.php',cat:'WEVIA',icon:'🔄'},
|
||
{id:'convos',name:'Admin Conversations',url:'/wevia-ia/wevia-admin-conversations.php',cat:'WEVIA',icon:'💬'},
|
||
|
||
{id:'ethmon',name:'Ethica Monitor',url:'/ethica-monitor.html',cat:'Ethica',icon:'📊'},
|
||
{id:'ethdash',name:'Ethica Dashboard',url:'/arsenal-proxy/ethica-dashboard.html',cat:'Ethica',icon:'📈'},
|
||
{id:'ethdrill',name:'Ethica Drill',url:'/ethica-drill.html',cat:'Ethica',icon:'🔍'},
|
||
{id:'ethhcp',name:'Ethica HCP',url:'/ethica-hcp.html',cat:'Ethica',icon:'👨⚕'},
|
||
{id:'ethsms',name:'Ethica SMS',url:'/ethica-sms.html',cat:'Ethica',icon:'📱'},
|
||
|
||
{id:'kuma',name:'Uptime Kuma',url:'https://monitor.weval-consulting.com',cat:'Infra',icon:'📡'},
|
||
{id:'plausible',name:'Plausible Analytics',url:'https://analytics.weval-consulting.com',cat:'Infra',icon:'📉'},
|
||
{id:'authentik',name:'Authentik SSO',url:'https://auth.weval-consulting.com',cat:'Infra',icon:'🔐'},
|
||
{id:'isp',name:'ISP Monitor',url:'/products/ispmonitor.html',cat:'Infra',icon:'🌐'},
|
||
|
||
{id:'droid',name:'Droid Terminal',url:'/droid-terminal.html',cat:'Ops',icon:'🖥'},
|
||
{id:"crons",name:"Cron Control All",url:"/wevia-ia/cron-control-all.html",cat:"Ops",icon:"⏰"},
|
||
{id:'office',name:'Office Workflow',url:'/office-workflow.html',cat:'Ops',icon:'📋'},
|
||
{id:'fmg',name:'FMG App',url:'https://wevads.weval-consulting.com/auth/login.html',cat:'Ops',icon:'📋'},
|
||
{id:'bcg',name:'BCG App',url:'https://wevads.weval-consulting.com/auth/login.html',cat:'Ops',icon:'📊'},
|
||
{id:'dkim',name:'DKIM Manager',url:'https://wevads.weval-consulting.com/auth/login.html',cat:'Ops',icon:'🔑'},
|
||
{id:'fmgtrack',name:'FMG Tracking',url:'https://wevads.weval-consulting.com/',cat:'Ops',icon:'📡'},
|
||
{id:'bcgtrack',name:'BCG Tracking',url:'https://wevads.weval-consulting.com/',cat:'Ops',icon:'📡'},
|
||
{id:"crons",name:"Cron Control All",url:"/wevia-ia/cron-control-all.html",cat:"Ops",icon:"⏰"},
|
||
|
||
{id:'workspace',name:'Workspace',url:'/products/workspace.html',cat:'Site',icon:'🏠'},
|
||
{id:'home',name:'Homepage',url:'/',cat:'Site',icon:'🌍'},
|
||
{id:'s95nonreg',name:'WEVADS S95 NonReg',url:'/wevads-nonreg/',cat:'Tests',icon:'[T]'},
|
||
{id:'authreport',name:'Auth+Overlap Report',url:'/test-report/auth-report.html',cat:'Tests',icon:'[T]'},
|
||
{id:'inventory',name:'Master Inventory',url:'/weval-master-inventory.html',cat:'Tests',icon:'[T]'},
|
||
{id:'arsdeep',name:'Arsenal Deep E2E',url:'/test-report/arsenal-report.html',cat:'Tests',icon:'[T]'},
|
||
{id:'vizproof',name:'Visual Proof 21T',url:'/test-report/visual-proof-report.html',cat:'Tests',icon:'📸'},
|
||
{id:'visreg25',name:'VisReg 25Mar 25T',url:'/test-report/visual-regression-25mar.html',cat:'Tests',icon:'🎯'},
|
||
{id:'authbattery',name:'Auth Battery 19T',url:'/test-report/auth-battery-test.html',cat:'Tests',icon:'🔒'},
|
||
{id:'fullnonreg',name:'Full NonReg 36T',url:'/test-report/full-nonreg-dashboard.html',cat:'Tests',icon:'🎯'},
|
||
{id:'wevadmin',name:'WEVIA Admin',url:'/wevia-admin',cat:'Admin',icon:'[A]'},
|
||
{id:'wevcode2',name:'WEVCODE',url:'/wevcode',cat:'Admin',icon:'[A]'},
|
||
{id:'wevfull',name:'WEVIA Fullscreen',url:'/wevia-fullscreen',cat:'Admin',icon:'[A]'},
|
||
{id:'wevlife',name:'WEVIA Life',url:'/products/wevialife-app.html',cat:'Admin',icon:'[A]'},
|
||
{id:'infracmd',name:'Infra Command',url:'/infra-command.html',cat:'Infra',icon:'[I]'},
|
||
{id:'blade',name:'Blade Sync',url:'/dl/index.php',cat:'Ops',icon:'[O]'},
|
||
{id:'sessmon',name:'Sessions Monitor',url:'/sessions-monitor.html',cat:'Infra',icon:'[I]'},
|
||
{id:'wedroid',name:'WEDROID',url:'/wevia-ia/droid.html',cat:'WEVIA',icon:'[W]'},
|
||
{id:'appshub',name:'Apps Hub',url:'/apps.html',cat:'Admin',icon:'[A]'},
|
||
{id:'toolshub',name:'Tools Hub',url:'/tools-hub.html',cat:'Admin',icon:'[A]'},
|
||
{id:'techradar',name:'Technology Radar',url:'/technology-radar.html',cat:'Admin',icon:'[A]'},
|
||
{id:'megacc',name:'Mega Command Center',url:'/mega-command-center.html',cat:'Admin',icon:'[A]'},
|
||
{id:'arsmenu',name:'Arsenal Menu',url:'/arsenal-proxy/menu.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsdash',name:'Arsenal Dashboard',url:'/arsenal-proxy/dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'brainsend',name:'Brain Send',url:'/arsenal-proxy/brain-send.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'sendpipe',name:'Send Pipeline',url:'/arsenal-proxy/send-pipeline.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'campaign',name:'Campaign Manager',url:'/arsenal-proxy/campaign-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'offadm',name:'Office Admins',url:'/arsenal-proxy/office-admins.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'offwork',name:'Office Workflow',url:'/arsenal-proxy/office-workflow.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'emailpipe',name:'Emailing Pipeline',url:'/arsenal-proxy/emailing-pipeline.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arscron',name:'Cron Control',url:'/arsenal-proxy/cron-control.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsdomain',name:'Domain Manager',url:'/arsenal-proxy/domain-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arscentral',name:'Brain Central',url:'/arsenal-proxy/brain-central.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsreport',name:'Brain Report',url:'/arsenal-proxy/brain-report.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arssentinel',name:'Sentinel',url:'/arsenal-proxy/sentinel-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsblacklist',name:'Blacklist Monitor',url:'/arsenal-proxy/blacklist-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsreputation',name:'Reputation',url:'/arsenal-proxy/reputation-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arswarming',name:'Warming Engine',url:'/arsenal-proxy/warming-engine.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsengines',name:'Send Engines',url:'/arsenal-proxy/send-engines-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arshealth',name:'System Health',url:'/arsenal-proxy/system-health.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsceo',name:'CEO Dashboard',url:'/arsenal-proxy/ceo-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsperf',name:'Performance',url:'/arsenal-proxy/performance-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsops',name:'Operations',url:'/arsenal-proxy/operations-overview.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arscrm',name:'CRM',url:'/arsenal-proxy/crm.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsaffiliate',name:'Affiliate',url:'/arsenal-proxy/affiliate-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsdata',name:'Data Manager',url:'/arsenal-proxy/data-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arscloud',name:'Cloud Providers',url:'/arsenal-proxy/cloud-providers.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsconfig',name:'Configuration',url:'/arsenal-proxy/configuration-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsmap',name:'World Map',url:'/arsenal-proxy/world-map-live.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arscc',name:'Arsenal CC',url:'/arsenal-proxy/command-center.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsadvdash',name:'Advanced Dash',url:'/arsenal-proxy/advanced-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsmonv3',name:'Monitor v3',url:'/arsenal-proxy/wevads-monitor-v3.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsscout',name:'Scout Intel',url:'/arsenal-proxy/scout-intelligence.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsdarkscout',name:'Dark Scout',url:'/arsenal-proxy/dark-scout.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arstrack',name:'Unified Tracking',url:'/arsenal-proxy/unified-tracking.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arssmart',name:'Smart Report',url:'/arsenal-proxy/smart-report.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'arsethdash',name:'Ethica Dashboard',url:'/arsenal-proxy/ethica-dashboard.html',cat:'Ethica',icon:'[E]'},
|
||
{id:'arsethapp',name:'Ethica App v3',url:'/arsenal-proxy/ethica-app-v3.html',cat:'Ethica',icon:'[E]'},
|
||
{id:'arsethsms',name:'Ethica SMS',url:'/arsenal-proxy/ethica-sms.html',cat:'Ethica',icon:'[E]'},
|
||
{id:'adxdash',name:'ADX Dashboard',url:'https://wevads.weval-consulting.com/dashboard.html',cat:'ADX',icon:'[ADX]'},
|
||
{id:'adxusers',name:'ADX Users',url:'https://wevads.weval-consulting.com/users.html',cat:'ADX',icon:'[ADX]'},
|
||
{id:'adxdomains',name:'ADX Domains',url:'https://wevads.weval-consulting.com/domains.html',cat:'ADX',icon:'[ADX]'},
|
||
{id:'adxaffil',name:'ADX Affiliates',url:'https://wevads.weval-consulting.com/affiliate-networks.html',cat:'ADX',icon:'[ADX]'},
|
||
{id:'adxoffers',name:'ADX Offers',url:'https://wevads.weval-consulting.com/offers.html',cat:'ADX',icon:'[ADX]'},
|
||
{id:'adxsmtp',name:'ADX SMTP',url:'https://wevads.weval-consulting.com/smtp-servers.html',cat:'ADX',icon:'[ADX]'},
|
||
{id:'wevdash',name:'WEVIA Dashboard',url:'/wevia-dashboard',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevconvo',name:'WEVIA Conversations',url:'/wevia-conversations',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevcyber',name:'WEVIA Cyber',url:'/wevia-cyber',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevbrain',name:'WEVIA Brain',url:'/wevia-brain',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevkb',name:'WEVIA KB',url:'/wevia-kb',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevcontrol',name:'WEVIA Control',url:'/wevia-control-center',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevfailover',name:'WEVIA Failover',url:'/wevia-failover',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevmonitor',name:'WEVIA Monitor',url:'/wevia-monitor',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevrouter',name:'WEVIA Router',url:'/wevia-router',cat:'WEVIA',icon:'[W]'},
|
||
{id:'wevadxproxy',name:'WEVADS ADX Proxy',url:'https://wevads.weval-consulting.com/',cat:'Ops',icon:'[O]'},
|
||
{id:'wevdkimproxy',name:'WEVADS DKIM',url:'/wevads-dkim/',cat:'Ops',icon:'[O]'},
|
||
{id:'wevadsv2',name:'WEVADS IA v2',url:'/wevads-v2/',cat:'Ops',icon:'[Ops]'},
|
||
{id:'ethapp',name:'Ethica App v3',url:'https://ethica.wevup.app/ethica-app-v3.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethcampaign',name:'Ethica Campaigns',url:'https://ethica.wevup.app/ethica-campaign-creator.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethaudit',name:'Ethica Audit',url:'https://ethica.wevup.app/ethica-audit.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethconsent',name:'Ethica Consent',url:'https://ethica.wevup.app/ethica-consent-hub.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethvalid',name:'Ethica Validation',url:'https://ethica.wevup.app/ethica-validation-monitor.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethsmseng',name:'Ethica SMS Engine',url:'https://ethica.wevup.app/ethica-sms-engine.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethhcp2',name:'Ethica HCP Manager',url:'https://ethica.wevup.app/ethica-hcp-manager.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethchat',name:'Ethica Chatbot',url:'https://ethica.wevup.app/ethica-chatbot.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethcollecteur',name:'Ethica collecteur',url:'https://ethica.wevup.app/ethica-real-collecteur.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethtrack',name:'Ethica Tracking',url:'https://ethica.wevup.app/ethica-tracking-dashboard.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethtokens',name:'Ethica Tokens',url:'https://ethica.wevup.app/ethica-tokens.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'ethsend',name:'Ethica Send Engine',url:'https://ethica.wevup.app/ethica-send-engine.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'consent',name:'Consent Landing',url:'https://consent.wevup.app/ethica-consent-landing.html',cat:'Ethica',icon:'[Ethica]'},
|
||
{id:'fulldeep',name:'Full Deep E2E',url:'/test-report/visual-report.html',cat:'Tests',icon:'[Tests]'},
|
||
{id:'wproof',name:'WEVIA Proof',url:'/test-report/wevia-proof.html',cat:'Tests',icon:'🔬'},
|
||
{id:'wprooflive',name:'WEVIA Proof Live',url:'/test-report/wevia-proof-live.html',cat:'Tests',icon:'⚡'},
|
||
{id:'wchatmon',name:'WEVIA Chat Monitor',url:'/test-report/wevia-chat-monitor.html',cat:'Tests',icon:'💬'},
|
||
{id:'pwdash',name:'Playwright Dashboard',url:'/test-report/pw-dashboard.html',cat:'Tests',icon:'🎭'},
|
||
{id:'weviawidget',name:'WEVIA Widget',url:'/wevia-widget.html',cat:'WEVIA',icon:'💬'},
|
||
{id:'weviaconsole',name:'WEVIA Console',url:'/wevia-console.html',cat:'WEVIA',icon:'🖥'},
|
||
{id:'openclaw',name:'OpenClaw AI',url:'/openclaw.html',cat:'WEVIA',icon:'🦀'},
|
||
{id:'monitor',name:'WEVAL Monitoring',url:'/monitoring.html',cat:'Infra',icon:'📊'},
|
||
{id:'booking',name:'Booking',url:'/booking.html',cat:'Site',icon:'📅'},
|
||
{id:'products',name:'Products Index',url:'/products/',cat:'Site',icon:'📦'},
|
||
{id:'wevadsia',name:'WEVADS IA v3.3',url:'/wevads-ia/',cat:'Ops',icon:'🧠'},
|
||
{id:'medreach',name:'MedReach Dash',url:'https://ethica.wevup.app/medreach-dashboard.html',cat:'Ethica',icon:'💊'},
|
||
{id:'medcamp',name:'MedReach Campaign',url:'https://ethica.wevup.app/medreach-campaign.html',cat:'Ethica',icon:'📨'},
|
||
{id:'ethpipeline',name:'Ethica Pipeline',url:'/ethica-pipeline.html',cat:'Ethica',icon:'🔄'},
|
||
{id:'gomaster',name:'GoLive Master',url:'/test-report/golive-master-test.html',cat:'Tests',icon:'🚀'},
|
||
{id:'report1',name:'Test Report',url:'/test-report/report.html',cat:'Tests',icon:'📋'},
|
||
{id:'quality',name:'Ultimate Quality',url:'/ultimate-quality.html',cat:'Tests',icon:'💎'},
|
||
{id:'weviatest30',name:'WEVIA Test 30mars',url:'/wevia-test-30mars.html',cat:'WEVIA',icon:'🧪'},
|
||
{id:'weviadashtest',name:'WEVIA Dash Test',url:'/wevia-dashboard-test.html',cat:'WEVIA',icon:'📊'},
|
||
{id:'wevadsperf',name:'WEVADS Performance',url:'/wevads-performance.html',cat:'Ops',icon:'📈'},
|
||
{id:'opscenter',name:'Ops Center',url:'/ops-center.html',cat:'Ops',icon:'🎯'},
|
||
{id:'bladecenter',name:'Blade Center',url:'/blade-center.html',cat:'Ops',icon:'💾'},
|
||
{id:'bladeai',name:'Blade AI',url:'/blade-ai.html',cat:'Ops',icon:'🤖'},
|
||
{id:'cronmon',name:'Crons Monitor',url:'/crons-monitor.html',cat:'Ops',icon:'⏱'},
|
||
{id:'claudemon',name:'Claude Monitor',url:'/claude-monitor.html',cat:'Ops',icon:'🧠'},
|
||
{id:'inframon',name:'Infra Monitor',url:'/infra-monitor.html',cat:'Infra',icon:'🖥'},
|
||
{id:'worldmap',name:'World Map Live',url:'/world-map-live.html',cat:'Infra',icon:'🗺'},
|
||
{id:'gwssetup',name:'GWS Setup',url:'/gws-setup.html',cat:'Infra',icon:'⚙'},
|
||
{id:'casestudy',name:'Case Studies',url:'/case-studies.html',cat:'Site',icon:'📖'},
|
||
{id:'ecosysteme',name:'Ecosystème IA Maroc',url:'/ecosysteme-ia-maroc.html',cat:'Site',icon:'🇲🇦'},
|
||
{id:'methodo',name:'Méthodologie',url:'/methodologie.html',cat:'Site',icon:'📐'},
|
||
{id:'huawei',name:'Huawei Cloud',url:'/huawei-cloud.html',cat:'Site',icon:'☁'},
|
||
{id:'pricing',name:'Pricing',url:'/pricing.html',cat:'Site',icon:'💰'},
|
||
{id:'trustcenter',name:'Trust Center',url:'/trust-center.html',cat:'Site',icon:'🔒'},
|
||
{id:'cgu',name:'CGU',url:'/cgu.html',cat:'Site',icon:'📜'},
|
||
{id:'plansite',name:'Plan du Site',url:'/plan-du-site.html',cat:'Site',icon:'🗺'},
|
||
{id:'usecases',name:'Use Cases',url:'/use-cases.html',cat:'Site',icon:'💡'},
|
||
{id:'solfinder',name:'Solution Finder',url:'/solution-finder.html',cat:'Site',icon:'🔍'},
|
||
{id:'aibench',name:'AI Benchmark',url:'/ai-benchmark.html',cat:'Site',icon:'⚡'},
|
||
{id:'ossdiscov',name:'OSS Discovery',url:'/oss-discovery.html',cat:'Site',icon:'🔓'},
|
||
{id:'ethlogin',name:'Ethica Login',url:'/ethica-login.html',cat:'Ethica',icon:'🔐'},
|
||
{id:'adxdata',name:'ADX Data Lists',url:'https://wevads.weval-consulting.com/data-lists.html',cat:'ADX',icon:'📋'},
|
||
{id:'ars_accountcrea',name:'Account Creator',url:'/arsenal-proxy/account-creator.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_adherencemo',name:'Adherence Monitor',url:'/arsenal-proxy/adherence-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_adhérencemo',name:'Adhérence Monitor',url:'/arsenal-proxy/adhérence-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_adscommande',name:'Ads Commander',url:'/arsenal-proxy/ads-commander.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_advancedcra',name:'Advanced Craping Factory',url:'/arsenal-proxy/advanced-craping-factory.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_adversarial',name:'Adversarial Sandbox',url:'/arsenal-proxy/adversarial-sandbox.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_aicopywrite',name:'Ai Copywriter',url:'/arsenal-proxy/ai-copywriter.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_apikeypool',name:'Api Key Pool',url:'/arsenal-proxy/api-key-pool.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_aqualinkhtm',name:'Aqualink',url:'/arsenal-proxy/aqualink.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_arbitragebo',name:'Arbitrage Bot',url:'/arsenal-proxy/arbitrage-bot.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_arsenalwidg',name:'Arsenal Widget',url:'/arsenal-proxy/arsenal-widget.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_autohealing',name:'Auto Healing Dashboard',url:'/arsenal-proxy/auto-healing-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_automirrori',name:'Auto Mirroring',url:'/arsenal-proxy/auto-mirroring.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_autosupply',name:'Auto Supply',url:'/arsenal-proxy/auto-supply.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_beastmonito',name:'Beast Monitor',url:'/arsenal-proxy/beast-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_behavioralm',name:'Behavioral Mimicry',url:'/arsenal-proxy/behavioral-mimicry.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_bouncemanag',name:'Bounce Manager',url:'/arsenal-proxy/bounce-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_bpmscommand',name:'Bpms Command Center',url:'/arsenal-proxy/bpms-command-center.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_bpmsgareht',name:'Bpms Gare',url:'/arsenal-proxy/bpms-gare.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_braincombo',name:'Brain Combo Discovery',url:'/arsenal-proxy/brain-combo-discovery.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_brainconsen',name:'Brain Consent',url:'/arsenal-proxy/brain-consent.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_braindrilld',name:'Brain Drilldown',url:'/arsenal-proxy/brain-drilldown.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_brainunifie',name:'Brain Unified Send',url:'/arsenal-proxy/brain-unified-send.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_captchasolv',name:'Captcha Solver',url:'/arsenal-proxy/captcha-solver.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_chefbossht',name:'Chef Boss',url:'/arsenal-proxy/chef-boss.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_cloudaccoun',name:'Cloud Account Factory Extended',url:'/arsenal-proxy/cloud-account-factory-extended.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_cloudcostm',name:'Cloud Cost Monitor',url:'/arsenal-proxy/cloud-cost-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_cloudflarea',name:'Cloudflare Accounts',url:'/arsenal-proxy/cloudflare-accounts.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_cloudflarem',name:'Cloudflare Manager',url:'/arsenal-proxy/cloudflare-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_controlhub',name:'Control Hub',url:'/arsenal-proxy/control-hub.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_creativefac',name:'Creative Factory',url:'/arsenal-proxy/creative-factory.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_creativeper',name:'Creative Performance',url:'/arsenal-proxy/creative-performance.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_crmglobalh',name:'Crm Global',url:'/arsenal-proxy/crm-global.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_crmsendhtm',name:'Crm Send',url:'/arsenal-proxy/crm-send.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_croncontrol',name:'Cron Control All',url:'/arsenal-proxy/cron-control-all.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_crosschanne',name:'Cross Channel Sync',url:'/arsenal-proxy/cross-channel-sync.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_cvcvaultht',name:'Cvc Vault',url:'/arsenal-proxy/cvc-vault.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_darkmatrix',name:'Dark Matrix',url:'/arsenal-proxy/dark-matrix.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_darkscraper',name:'Dark Scraper',url:'/arsenal-proxy/dark-scraper.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_darkslotht',name:'Dark Slot',url:'/arsenal-proxy/dark-slot.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_dashboardet',name:'Dashboard Etat',url:'/arsenal-proxy/dashboard-etat.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_dealpipelin',name:'Deal Pipeline',url:'/arsenal-proxy/deal-pipeline.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_deepfakesoc',name:'Deepfake Social',url:'/arsenal-proxy/deepfake-social.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_drillinject',name:'Drill Inject',url:'/arsenal-proxy/drill-inject.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_e2epipeline',name:'E2E Pipeline',url:'/arsenal-proxy/e2e-pipeline.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_edgerouting',name:'Edge Routing',url:'/arsenal-proxy/edge-routing.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicaapph',name:'Ethica App',url:'/arsenal-proxy/ethica-app.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicaaudit',name:'Ethica Audit',url:'/arsenal-proxy/ethica-audit.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicacampa',name:'Ethica Campaigns',url:'/arsenal-proxy/ethica-campaigns.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicachatb',name:'Ethica Chatbot',url:'/arsenal-proxy/ethica-chatbot.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicaconse',name:'Ethica Consent',url:'/arsenal-proxy/ethica-consent.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicacross',name:'Ethica Crossvalidator',url:'/arsenal-proxy/ethica-crossvalidator.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicadata',name:'Ethica Data List',url:'/arsenal-proxy/ethica-data-list.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicadiagn',name:'Ethica Diagnostic',url:'/arsenal-proxy/ethica-diagnostic.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicadrill',name:'Ethica Drill',url:'https://ethica.wevup.app/ethica-drill.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicagoogl',name:'Ethica Google Badge',url:'/arsenal-proxy/ethica-google-badge.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicahcpm',name:'Ethica Hcp Manager',url:'https://ethica.wevup.app/ethica-hcp-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicainscr',name:'Ethica Inscription',url:'/arsenal-proxy/ethica-inscription.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicametho',name:'Ethica Methodology',url:'/arsenal-proxy/ethica-methodology.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicareal',name:'Ethica Real Scraper',url:'/arsenal-proxy/ethica-real-scraper.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicascrap',name:'Ethica Scraper',url:'/arsenal-proxy/ethica-scraper.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicasmse',name:'Ethica Sms Engine',url:'/arsenal-proxy/ethica-sms-engine.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicatrack',name:'Ethica Track',url:'/arsenal-proxy/ethica-track.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ethicavalid',name:'Ethica Validation Monitor',url:'/arsenal-proxy/ethica-validation-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_facebookads',name:'Facebook Ads',url:'/arsenal-proxy/facebook-ads.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_financialgu',name:'Financial Guard',url:'/arsenal-proxy/financial-guard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_fingerprint',name:'Fingerprint Sync',url:'/arsenal-proxy/fingerprint-sync.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_freednsfact',name:'Freedns Factory',url:'/arsenal-proxy/freedns-factory.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ganadversar',name:'Gan Adversarial',url:'/arsenal-proxy/gan-adversarial.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ghostnetwor',name:'Ghost Network',url:'/arsenal-proxy/ghost-network.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_globalvisio',name:'Global Vision',url:'/arsenal-proxy/global-vision.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_googleadsh',name:'Google Ads',url:'/arsenal-proxy/google-ads.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_graphewsse',name:'Graph Ews Sender',url:'/arsenal-proxy/graph-ews-sender.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_growthengin',name:'Growth Engine',url:'/arsenal-proxy/growth-engine.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_gsuiteaccou',name:'Gsuite Accounts',url:'/arsenal-proxy/gsuite-accounts.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_guardiandas',name:'Guardian Dashboard',url:'/arsenal-proxy/guardian-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_harvestmana',name:'Harvest Manager',url:'/arsenal-proxy/harvest-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_healthhtml',name:'Health',url:'/arsenal-proxy/health.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_hosthunter',name:'Host Hunter',url:'/arsenal-proxy/host-hunter.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_iadiscover',name:'Ia Discover',url:'/arsenal-proxy/ia-discover.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_iaprovider',name:'Ia Provider Factory',url:'/arsenal-proxy/ia-provider-factory.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_inboxtester',name:'Inbox Tester',url:'/arsenal-proxy/inbox-tester.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ispdelivera',name:'Isp Deliverability',url:'/arsenal-proxy/isp-deliverability.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_kbsyncmoni',name:'Kb Sync Monitor',url:'/arsenal-proxy/kb-sync-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_keymanager',name:'Key Manager',url:'/arsenal-proxy/key-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_linkedinads',name:'Linkedin Ads',url:'/arsenal-proxy/linkedin-ads.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_lookalikeen',name:'Lookalike Engine',url:'/arsenal-proxy/lookalike-engine.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_mailpersona',name:'Mail Personas',url:'/arsenal-proxy/mail-personas.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_muamimicry',name:'Mua Mimicry',url:'/arsenal-proxy/mua-mimicry.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_n8nbridgeh',name:'N8N Bridge',url:'/arsenal-proxy/n8n-bridge.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_nativeadsh',name:'Native Ads',url:'/arsenal-proxy/native-ads.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_neuraldomm',name:'Neural Dom Mutator',url:'/arsenal-proxy/neural-dom-mutator.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_newslettere',name:'Newsletter Extractor',url:'/arsenal-proxy/newsletter-extractor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ocrnoisefo',name:'Ocr Noise Forge',url:'/arsenal-proxy/ocr-noise-forge.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_offerengine',name:'Offer Engine',url:'/arsenal-proxy/offer-engine.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_officecheck',name:'Office Checker',url:'/arsenal-proxy/office-checker.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_orchestrator',name:'Orchestrator Central',url:'/arsenal-proxy/orchestrator-central.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_patternshuf',name:'Pattern Shuffler',url:'/arsenal-proxy/pattern-shuffler.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_phonegenera',name:'Phone Generator',url:'/arsenal-proxy/phone-generator.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_pinterestad',name:'Pinterest Ads',url:'/arsenal-proxy/pinterest-ads.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_pipelineadm',name:'Pipeline Admin',url:'/arsenal-proxy/pipeline-admin.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_pipelinemon',name:'Pipeline Monitor',url:'/arsenal-proxy/pipeline-monitor.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_postbackset',name:'Postback Setup',url:'/arsenal-proxy/postback-setup.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_predictives',name:'Predictive Send Window',url:'/arsenal-proxy/predictive-send-window.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_profitorche',name:'Profit Orchestrator',url:'/arsenal-proxy/profit-orchestrator.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_progression',name:'Progression Dashboard',url:'/arsenal-proxy/progression-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_provideronb',name:'Provider Onboarding',url:'/arsenal-proxy/provider-onboarding.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_ptrdiscover',name:'Ptr Discovery',url:'/arsenal-proxy/ptr-discovery.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_sandboxdeco',name:'Sandbox Decoy',url:'/arsenal-proxy/sandbox-decoy.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_scrappingfa',name:'Scrapping Factory Enhanced',url:'/arsenal-proxy/scrapping-factory-enhanced.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_seedcleaner',name:'Seed Cleaner',url:'/arsenal-proxy/seed-cleaner.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_selfhealing',name:'Self Healing',url:'/arsenal-proxy/self-healing.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_semiautose',name:'Semi Auto Send',url:'/arsenal-proxy/semi-auto-send.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_sendcapacit',name:'Send Capacity Dashboard',url:'/arsenal-proxy/send-capacity-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_senddatafa',name:'Send Data Factory',url:'/arsenal-proxy/send-data-factory.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_sendprocess',name:'Send Process Fix',url:'/arsenal-proxy/send-process-fix.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_sentinelv4',name:'Sentinel V4',url:'/arsenal-proxy/sentinel-v4.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_sentinelv5',name:'Sentinel V5 Dashboard',url:'/arsenal-proxy/sentinel-v5-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_sentinelvau',name:'Sentinel Vault Controller',url:'/arsenal-proxy/sentinel-vault-controller.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_sessionhija',name:'Session Hijacker',url:'/arsenal-proxy/session-hijacker.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_shadowrespo',name:'Shadow Responder',url:'/arsenal-proxy/shadow-responder.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_sidebaradmi',name:'Sidebar Admin',url:'/arsenal-proxy/sidebar-admin.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_smartfailov',name:'Smart Failover',url:'/arsenal-proxy/smart-failover.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_smssendeng',name:'Sms Send Engine',url:'/arsenal-proxy/sms-send-engine.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_smstemplate',name:'Sms Templates',url:'/arsenal-proxy/sms-templates.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_smtpsmuggle',name:'Smtp Smuggler',url:'/arsenal-proxy/smtp-smuggler.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_snapchatads',name:'Snapchat Ads',url:'/arsenal-proxy/snapchat-ads.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_statushtml',name:'Status',url:'/arsenal-proxy/status.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_supplychain',name:'Supply Chain',url:'/arsenal-proxy/supply-chain.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_systemdashb',name:'System Dashboard',url:'/arsenal-proxy/system-dashboard.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_tempemailf',name:'Temp Email Factory',url:'/arsenal-proxy/temp-email-factory.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_tempemailm',name:'Temp Email Manager',url:'/arsenal-proxy/temp-email-manager.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_testintegra',name:'Test Integration',url:'/arsenal-proxy/test-integration.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_testmetrics',name:'Test Metrics',url:'/arsenal-proxy/test-metrics.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_testresults',name:'Test Results Live',url:'/arsenal-proxy/test-results-live.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_testsendtr',name:'Test Send Tracking Full',url:'/arsenal-proxy/test-send-tracking-full.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_tiktokadsh',name:'Tiktok Ads',url:'/arsenal-proxy/tiktok-ads.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_trackingars',name:'Tracking Arsenal',url:'/arsenal-proxy/tracking-arsenal.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_trapdetecto',name:'Trap Detector',url:'/arsenal-proxy/trap-detector.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_twitterads',name:'Twitter Ads',url:'/arsenal-proxy/twitter-ads.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_universaldr',name:'Universal Drill',url:'/arsenal-proxy/universal-drill.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_wevadsarchi',name:'Wevads Architecture',url:'/arsenal-proxy/wevads-architecture.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_wevalmindd',name:'Weval Mind Dashboard Enhanced',url:'/arsenal-proxy/weval-mind-dashboard-enhanced.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_winningconf',name:'Winning Config',url:'/arsenal-proxy/winning-config.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_workflowvis',name:'Workflow Visual',url:'/arsenal-proxy/workflow-visual.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'ars_youtubefact',name:'Youtube Factory',url:'/arsenal-proxy/youtube-factory.html',cat:'Arsenal',icon:'[AR]'},
|
||
{id:'prod_academyelea',name:'Academy Elearning V2',url:'/products/academy-elearning-v2.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_academyhtml',name:'Academy',url:'/products/academy.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_adscontrolh',name:'Adscontrol',url:'/products/adscontrol.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_affiliatesh',name:'Affiliates',url:'/products/affiliates.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_aisdrhtml',name:'Ai Sdr',url:'/products/ai-sdr.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_arsenalhtml',name:'Arsenal',url:'/products/arsenal.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_auditaihtml',name:'Auditai',url:'/products/auditai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_bizplanhtml',name:'Bizplan',url:'/products/bizplan.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_blacklistgua',name:'Blacklistguard',url:'/products/blacklistguard.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_blueprintai',name:'Blueprintai',url:'/products/blueprintai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_canvasaihtm',name:'Canvasai',url:'/products/canvasai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_casestudies',name:'Case Studies',url:'/products/case-studies.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_cloudprovid',name:'Cloud Providers',url:'/products/cloud-providers.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_cloudcostht',name:'Cloudcost',url:'/products/cloudcost.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_consultingh',name:'Consulting',url:'/products/consulting.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_contentfact',name:'Content Factory',url:'/products/content-factory.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_contractaih',name:'Contractai',url:'/products/contractai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_copyaihtml',name:'Copyai',url:'/products/copyai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_creativefact',name:'Creativefactory',url:'/products/creativefactory.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_dashboardht',name:'Dashboard',url:'/products/dashboard.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_dashboardai',name:'Dashboardai',url:'/products/dashboardai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_dataharvest',name:'Dataharvest',url:'/products/dataharvest.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_datainsight',name:'Datainsight',url:'/products/datainsight.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_deliveradsh',name:'Deliverads',url:'/products/deliverads.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_deliverscore',name:'Deliverscore',url:'/products/deliverscore.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_devforgehtm',name:'Devforge',url:'/products/devforge.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_ecosystemei',name:'Ecosysteme Ia Maroc',url:'/products/ecosysteme-ia-maroc.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_emailplatfo',name:'Email Platform',url:'/products/email-platform.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_emailwhitel',name:'Email Whitelabel',url:'/products/email-whitelabel.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_emailverify',name:'Emailverify',url:'/products/emailverify.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_esignatureh',name:'Esignature',url:'/products/esignature.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_ethicahtml',name:'Ethica',url:'/products/ethica.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_ethicab2bht',name:'Ethicab2B',url:'/products/ethicab2b.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_formbuilder',name:'Formbuilder',url:'/products/formbuilder.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_gpuinferenc',name:'Gpu Inference',url:'/products/gpu-inference.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_healthcarec',name:'Healthcare Crm',url:'/products/healthcare-crm.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_huaweicloud',name:'Huawei Cloud',url:'/products/huawei-cloud.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_huaweisucce',name:'Huawei Success',url:'/products/huawei-success.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_iaarabehtm',name:'Ia Arabe',url:'/products/ia-arabe.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_iframetest',name:'Iframe Test',url:'/products/iframe-test.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_inboxtestht',name:'Inboxtest',url:'/products/inboxtest.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_leadforgeht',name:'Leadforge',url:'/products/leadforge.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_leansixsigma',name:'Leansixsigma',url:'/products/leansixsigma.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_linkedinman',name:'Linkedin Manager',url:'/products/linkedin-manager.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_mailforgeht',name:'Mailforge',url:'/products/mailforge.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_mailstreamh',name:'Mailstream',url:'/products/mailstream.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_mailwarmhtm',name:'Mailwarm',url:'/products/mailwarm.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_medreachapi',name:'Medreach Api',url:'/products/medreach-api.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_medreachcam',name:'Medreach Campaign',url:'/products/medreach-campaign.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_medreachdas',name:'Medreach Dashboard',url:'/products/medreach-dashboard.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_medreachhtm',name:'Medreach',url:'/products/medreach.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_medreachhcp',name:'Medreachhcp',url:'/products/medreachhcp.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_meetingaiht',name:'Meetingai',url:'/products/meetingai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_networkguard',name:'Networkguard',url:'/products/networkguard.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_newsletterin',name:'Newsletterinsight',url:'/products/newsletterinsight.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_outreachaih',name:'Outreachai',url:'/products/outreachai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_partnerprogr',name:'Partnerprogram',url:'/products/partnerprogram.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_presentation',name:'Presentationai',url:'/products/presentationai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_proposalaih',name:'Proposalai',url:'/products/proposalai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_reputationai',name:'Reputationai',url:'/products/reputationai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_roicalculat',name:'Roi Calculator',url:'/products/roi-calculator.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_scoutaihtml',name:'Scoutai',url:'/products/scoutai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_sentinelhtm',name:'Sentinel',url:'/products/sentinel.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_serviceshtm',name:'Services',url:'/products/services.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_signuphtml',name:'Signup',url:'/products/signup.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_smsforgehtm',name:'Smsforge',url:'/products/smsforge.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_solutionfin',name:'Solution Finder',url:'/products/solution-finder.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_storeaihtml',name:'Storeai',url:'/products/storeai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_storeforgeh',name:'Storeforge',url:'/products/storeforge.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_technologyr',name:'Technology Radar',url:'/products/technology-radar.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_translateai',name:'Translateai',url:'/products/translateai.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_trustcenter',name:'Trust Center',url:'/products/trust-center.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_wevadsiav2',name:'Wevads Ia V2',url:'/products/wevads-ia-v2.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_wevadsiaht',name:'Wevads Ia',url:'/products/wevads-ia.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_wevadsperfo',name:'Wevads Performance',url:'/products/wevads-performance.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_wevadshtml',name:'Wevads',url:'/products/wevads.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_wevalcrmhtm',name:'Wevalcrm',url:'/products/wevalcrm.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_wevalmindht',name:'Wevalmind',url:'/products/wevalmind.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_weviaagency',name:'Wevia Agency',url:'/products/wevia-agency.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_weviaenterp',name:'Wevia Enterprise',url:'/products/wevia-enterprise.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_weviawhitel',name:'Wevia Whitelabel',url:'/products/wevia-whitelabel.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_wevialifeht',name:'Wevialife',url:'/products/wevialife.html',cat:'Products',icon:'📦'},
|
||
{id:'prod_youtubefacto',name:'Youtubefactory',url:'/products/youtubefactory.html',cat:'Products',icon:'📦'},
|
||
{id:'blog_chatbotiam',name:'Chatbot Ia Multi Provider',url:'/blog/chatbot-ia-multi-provider.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_cloudcomput',name:'Cloud Computing Afrique 2026',url:'/blog/cloud-computing-afrique-2026.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_cloudsouver',name:'Cloud Souverain Afrique 2026',url:'/blog/cloud-souverain-afrique-2026.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_cybersecurit',name:'Cybersecurite Pme Maroc 2026',url:'/blog/cybersecurite-pme-maroc-2026.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_delivrabilit',name:'Delivrabilite Email 2026',url:'/blog/delivrabilite-email-2026.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_iaagentique',name:'Ia Agentique Entreprise 2026',url:'/blog/ia-agentique-entreprise-2026.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_iagenerativ',name:'Ia Generative Maroc 2026',url:'/blog/ia-generative-maroc-2026.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_indexseoht',name:'Index Seo',url:'/blog/index-seo.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_migrationsa',name:'Migration Sap S4Hana 2027',url:'/blog/migration-sap-s4hana-2027.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_transformati',name:'Transformation Digitale Pme Ma',url:'/blog/transformation-digitale-pme-maroc.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_usecasesht',name:'Use Cases',url:'/blog/use-cases.html',cat:'Blog',icon:'📝'},
|
||
{id:'blog_wevalscalew',name:'Weval Scaleway Partenaire Maro',url:'/blog/weval-scaleway-partenaire-maroc.html',cat:'Blog',icon:'📝'},
|
||
];
|
||
|
||
var currentView='single',currentScreen=null,health={};
|
||
|
||
function $(id){return document.getElementById(id)}
|
||
|
||
function buildSidebar(){
|
||
var cats={};
|
||
SCREENS.forEach(function(s){if(!cats[s.cat])cats[s.cat]=[];cats[s.cat].push(s)});
|
||
var html='';
|
||
Object.keys(cats).forEach(function(cat){
|
||
html+='<div class="sg"><div class="sg-title">'+cat+'</div>';
|
||
cats[cat].forEach(function(s){
|
||
var st=health[s.id];
|
||
var stHtml=st===undefined?'':'<span class="st '+(st===true?'st-ok':st==='auth'?'st-auth':'st-fail')+'">'+(st===true?'OK':st==='auth'?'AUTH':'ERR')+'</span>';
|
||
html+='<a onclick="loadScreen(\''+s.id+'\')" id="sb_'+s.id+'">'+s.icon+' '+s.name+stHtml+'</a>';
|
||
});
|
||
html+='</div>';
|
||
});
|
||
$('sidebar').innerHTML=html;
|
||
}
|
||
|
||
function buildCats(){
|
||
var cats=[];
|
||
SCREENS.forEach(function(s){if(cats.indexOf(s.cat)<0)cats.push(s.cat)});
|
||
var html='<button class="active" onclick="filterCat(\'all\',this)">All</button>';
|
||
cats.forEach(function(c){html+='<button onclick="filterCat(\''+c+'\',this)">'+c+'</button>'});
|
||
$('cats').innerHTML=html;
|
||
}
|
||
|
||
function filterCat(cat,btn){
|
||
document.querySelectorAll('.nav button').forEach(function(b){b.classList.remove('active')});
|
||
if(btn)btn.classList.add('active');
|
||
var items=document.querySelectorAll('.sg a');
|
||
items.forEach(function(a){
|
||
var sid=a.id.replace('sb_','');
|
||
var s=SCREENS.find(function(x){return x.id===sid});
|
||
if(!s)return;
|
||
a.style.display=(cat==='all'||s.cat===cat)?'flex':'none';
|
||
});
|
||
// Also filter grid
|
||
document.querySelectorAll('.tile').forEach(function(t){
|
||
var sid=t.dataset.id;
|
||
var s=SCREENS.find(function(x){return x.id===sid});
|
||
if(!s)return;
|
||
t.style.display=(cat==='all'||s.cat===cat)?'flex':'none';
|
||
});
|
||
}
|
||
|
||
function loadScreen(id){
|
||
var s=SCREENS.find(function(x){return x.id===id});
|
||
if(!s)return;
|
||
currentScreen=s;
|
||
document.querySelectorAll('.sg a').forEach(function(a){a.classList.remove('active')});
|
||
var el=$('sb_'+id);if(el)el.classList.add('active');
|
||
if(currentView==='single'){
|
||
$('frame').src=s.url;
|
||
$('currentLabel').textContent=s.icon+' '+s.name;
|
||
$('frame').style.display='';
|
||
$('gridView').style.display='none';
|
||
$('toolbar').style.display='';
|
||
}
|
||
}
|
||
|
||
function setView(v){
|
||
currentView=v;
|
||
$('vSingle').style.borderColor=v==='single'?'var(--accent)':'var(--border)';
|
||
$('vGrid').style.borderColor=v==='grid'?'var(--accent)':'var(--border)';
|
||
if(v==='grid'){
|
||
$('frame').style.display='none';
|
||
$('toolbar').style.display='none';
|
||
$('gridView').style.display='';
|
||
buildGrid();
|
||
} else {
|
||
$('frame').style.display='';
|
||
$('toolbar').style.display='';
|
||
$('gridView').style.display='none';
|
||
if(currentScreen)loadScreen(currentScreen.id);
|
||
}
|
||
}
|
||
|
||
function buildGrid(){
|
||
var html='';
|
||
SCREENS.forEach(function(s){
|
||
html+='<div class="tile" data-id="'+s.id+'"><div class="tile-header"><span>'+s.icon+' '+s.name+'</span><button onclick="loadScreen(\''+s.id+'\');setView(\'single\')">↗</button></div><iframe src="'+s.url+'" loading="lazy"></iframe></div>';
|
||
});
|
||
$('gridView').innerHTML=html;
|
||
}
|
||
|
||
function finishHealth(ok,fail,auth){
|
||
$('btnHealth').textContent='🔄 Health';
|
||
var h='<span class="pill pill-ok">'+ok+' OK</span>';
|
||
if(auth)h+=' <span class="pill" style="background:rgba(245,158,11,.15);color:#f59e0b">'+auth+' AUTH</span>';
|
||
if(fail)h+=' <span class="pill pill-fail">'+fail+' ERR</span>';
|
||
$('sbHealth').innerHTML=h;
|
||
buildSidebar();
|
||
}
|
||
function openNew(){if(currentScreen)window.open(currentScreen.url,'_blank')}
|
||
function reloadFrame(){if(currentScreen)$('frame').src=currentScreen.url}
|
||
function toggleSidebar(){$('sidebar').classList.toggle('hidden')}
|
||
|
||
function healthCheck(){
|
||
$('btnHealth').textContent='Checking...';
|
||
var ok=0,fail=0,auth=0,done=0;
|
||
var authDomains=['wevads.weval-consulting.com','crm.weval-consulting.com','monitor.weval-consulting.com','analytics.weval-consulting.com','auth.weval-consulting.com','mm.weval-consulting.com','n8n.weval-consulting.com','deerflow.weval-consulting.com','ethica.wevup.app','consent.wevup.app'];
|
||
var toCheck=[];
|
||
SCREENS.forEach(function(s){
|
||
if(authDomains.some(function(d){return s.url.indexOf(d)>-1})){health[s.id]='auth';auth++}
|
||
else{toCheck.push(s)}
|
||
});
|
||
var total=toCheck.length,BATCH=25;
|
||
function runBatch(idx){
|
||
var batch=toCheck.slice(idx,idx+BATCH);
|
||
if(!batch.length){finishHealth(ok,fail,auth);return}
|
||
Promise.allSettled(batch.map(function(s){
|
||
return fetch(s.url,{credentials:'same-origin',signal:AbortSignal.timeout(8000)}).then(function(r){
|
||
if(r.ok||r.status===302||r.status===301||r.type==='opaque'){health[s.id]=true;ok++}
|
||
else if(r.status===401||r.status===403){health[s.id]='auth';auth++}
|
||
else{health[s.id]=false;fail++}
|
||
}).catch(function(){health[s.id]=false;fail++})
|
||
})).then(function(){
|
||
done+=batch.length;$('btnHealth').textContent='Checking '+done+'/'+total+'...';
|
||
buildSidebar();runBatch(idx+BATCH);
|
||
});
|
||
}
|
||
runBatch(0);
|
||
}
|
||
|
||
function updateTime(){$('sbTime').textContent=new Date().toLocaleTimeString()}
|
||
setInterval(updateTime,1000);updateTime();
|
||
|
||
buildSidebar();
|
||
buildCats();
|
||
loadScreen('master');
|
||
setTimeout(healthCheck,2000);
|
||
</script>
|
||
<!-- CARTO_REMOVED -->
|
||
<!-- CARTO_BANNER_V1 -->
|
||
<div style="position:fixed;bottom:20px;right:20px;z-index:9999;background:linear-gradient(135deg,#141931,#2d1b5e);border:1px solid #64ffda;border-radius:12px;padding:12px 18px;box-shadow:0 4px 20px rgba(100,255,218,.3);font-family:-apple-system,Segoe UI,sans-serif;font-size:13px">
|
||
<a href="/cartographie-screens.html" style="color:#64ffda;text-decoration:none;font-weight:600;display:flex;align-items:center;gap:8px" title="Cartographie exhaustive de tous les ecrans live">
|
||
<span style="font-size:18px">🗺</span> Cartographie live
|
||
<span id="carto-banner-count" style="color:#8892b0;font-size:11px">3914 ecrans</span>
|
||
</a>
|
||
</div>
|
||
<script>
|
||
(function(){
|
||
fetch('/api/screens-health.php?_='+Date.now(),{cache:'no-store'}).then(r=>r.json()).then(d=>{
|
||
const c=d.counts||{}; const up=c.UP||0; const slow=c.SLOW||0; const br=c.BROKEN||0;
|
||
const el=document.getElementById('carto-banner-count');
|
||
if(el) el.innerHTML=`<span style="color:#22c55e">${up} UP</span> / <span style="color:#f59e0b">${slow} Lent</span> / <span style="color:#ef4444">${br} 5xx</span>`;
|
||
}).catch(()=>{});
|
||
})();
|
||
</script>
|
||
<!-- /CARTO_BANNER_V1 -->
|
||
|
||
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
|
||
<script>
|
||
(function(){
|
||
if (window.__opusUniversalDrill) return; window.__opusUniversalDrill = true;
|
||
var d = document;
|
||
var m = d.createElement('div');
|
||
m.id = 'opus-udrill';
|
||
m.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:99995;padding:20px;cursor:pointer';
|
||
var inner = d.createElement('div');
|
||
inner.id = 'opus-udrill-in';
|
||
inner.style.cssText = 'max-width:900px;width:100%;max-height:90vh;overflow:auto;background:#0b0d15;border:1px solid rgba(99,102,241,0.35);border-radius:14px;padding:28px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6);color:#e2e8f0;font:14px/1.55 Inter,system-ui,sans-serif';
|
||
inner.addEventListener('click', function(e){ e.stopPropagation(); });
|
||
m.appendChild(inner);
|
||
m.addEventListener('click', function(){ m.style.display='none'; });
|
||
d.addEventListener('keydown', function(e){ if(e.key==='Escape') m.style.display='none'; });
|
||
(d.body || d.documentElement).appendChild(m);
|
||
|
||
function openCard(card) {
|
||
// Clone card content + show close btn + increase font-size
|
||
var html = '<div style="display:flex;justify-content:flex-end;margin-bottom:14px"><button id="opus-udrill-close" style="padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.25);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button></div>';
|
||
html += '<div style="transform-origin:top left;font-size:1.05em">' + card.outerHTML + '</div>';
|
||
inner.innerHTML = html;
|
||
d.getElementById('opus-udrill-close').onclick = function(){ m.style.display='none'; };
|
||
m.style.display = 'flex';
|
||
}
|
||
|
||
function wire(root) {
|
||
var sels = '.card,[class*="card"],.kpi,[class*="kpi"],.stat,[class*="stat"],.tile,[class*="tile"],.metric,[class*="metric"],.widget,[class*="widget"]';
|
||
var cards = root.querySelectorAll(sels);
|
||
for (var i = 0; i < cards.length; i++) {
|
||
var c = cards[i];
|
||
if (c.__opusWired) continue;
|
||
if (c.closest('button, a, input, select, textarea, #opus-udrill')) continue;
|
||
var r = c.getBoundingClientRect();
|
||
if (r.width < 60 || r.height < 40) continue;
|
||
c.__opusWired = true;
|
||
c.style.cursor = 'pointer';
|
||
c.setAttribute('role','button');
|
||
c.setAttribute('tabindex','0');
|
||
c.addEventListener('click', function(ev){
|
||
// If a more-specific drill is already active (e.g. pp-card custom), let it handle
|
||
if (ev.target.closest('[data-pp-id]') && window.__opusDrillInit) return;
|
||
if (ev.target.closest('a,button,input,select')) return;
|
||
ev.preventDefault(); ev.stopPropagation();
|
||
openCard(this);
|
||
});
|
||
c.addEventListener('keydown', function(ev){ if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();openCard(this);} });
|
||
}
|
||
}
|
||
|
||
// Initial + mutation observer
|
||
var initRun = function(){ wire(d.body || d.documentElement); };
|
||
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
|
||
else initRun();
|
||
var mo = new MutationObserver(function(muts){
|
||
var newCard = false;
|
||
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
|
||
if (newCard) initRun();
|
||
});
|
||
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
|
||
})();
|
||
</script>
|
||
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
|
||
|
||
<script src="/api/archi-meta-badge.js" defer></script>
|
||
</body>
|
||
</html>
|