Files
html/command-center.html
opus e30ddf5007
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-sync via WEVIA git_sync_all intent 2026-04-20T13:11:38+02:00
2026-04-20 13:11:38 +02:00

714 lines
58 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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">&#128506;</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>