Files
weval-consulting/wevia-ux-v3.js

242 lines
19 KiB
JavaScript

(function(){
console.log('WX5 START');if(document.getElementById('wx5')){console.log('WX5 SKIP');return;}
var s=document.createElement('style');
s.textContent=`
/* SIDEBAR CLEAN */
.sb-cat{font-size:9px!important;letter-spacing:1.5px!important;color:rgba(255,255,255,0.22)!important;padding:12px 14px 3px!important;font-weight:600!important}
.sb-item{font-size:11.5px!important;padding:5px 12px!important;border-radius:6px!important;margin:1px 6px!important;transition:all .12s!important;color:rgba(255,255,255,0.5)!important}
.sb-item:hover{background:rgba(100,220,160,0.07)!important;color:#fff!important}
/* WELCOME CENTERED + COMPACT */
.welcome{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;text-align:center!important;padding:16px 20px!important;min-height:auto!important}
.welcome h1{font-size:36px!important;font-weight:700!important;letter-spacing:8px!important;background:linear-gradient(135deg,#64dca0,#4a9eff,#a78bfa)!important;-webkit-background-clip:text!important;-webkit-text-fill-color:transparent!important;margin:0 0 4px!important}
.welcome>p{color:rgba(255,255,255,0.25)!important;font-size:12px!important;margin:0 0 16px!important}
/* CARDS - COMPACT 2x4 GRID */
.wx-grid{display:grid!important;grid-template-columns:repeat(2,1fr)!important;gap:8px!important;width:100%!important;max-width:560px!important;margin:0 auto!important}
.wx-grid>div{background:rgba(255,255,255,0.02)!important;border:1px solid rgba(255,255,255,0.06)!important;border-radius:12px!important;padding:12px 14px!important;cursor:pointer!important;transition:all .2s!important;text-align:center!important;display:flex!important;flex-direction:column!important;align-items:center!important;gap:2px!important}
.wx-grid>div:hover{border-color:rgba(100,220,160,0.35)!important;background:rgba(100,220,160,0.04)!important;transform:translateY(-2px)!important;box-shadow:0 8px 20px rgba(0,0,0,0.2)!important}
.wx-grid .ci{font-size:20px!important;margin-bottom:2px!important}
.wx-grid b{color:#ddd!important;font-size:12.5px!important;font-weight:600!important}
.wx-grid small{color:rgba(255,255,255,0.25)!important;font-size:10.5px!important}
/* INPUT - CENTERED BUTTONS */
.input-wrap{display:flex!important;align-items:center!important;gap:6px!important;padding:6px 12px!important;background:rgba(30,30,30,0.95)!important;border:1px solid rgba(255,255,255,0.08)!important;border-radius:16px!important;max-width:700px!important;margin:0 auto!important;width:calc(100% - 40px)!important}
.input-box{flex:1!important;position:relative!important;display:flex!important;align-items:center!important;background:transparent!important;border:none!important;padding:0!important;margin:0!important}
.input-box textarea{background:transparent!important;border:none!important;outline:none!important;color:#eee!important;font-size:14px!important;width:100%!important;padding:6px 8px 6px 36px!important;resize:none!important}
.attach-btn{position:absolute!important;left:8px!important;top:50%!important;transform:translateY(-50%)!important;z-index:5!important;opacity:0.35!important;transition:opacity .2s!important;background:none!important;border:none!important;cursor:pointer!important}
.attach-btn:hover{opacity:0.8!important}
.voice-btn{flex-shrink:0!important;opacity:0.3!important;transition:opacity .2s!important;background:none!important;border:none!important;cursor:pointer!important;position:static!important;transform:none!important}
.voice-btn:hover{opacity:0.8!important}
.send-btn{flex-shrink:0!important;opacity:0.9!important;background:rgb(100,220,160)!important;border:none!important;border-radius:10px!important;width:36px!important;height:36px!important;cursor:pointer!important;display:flex!important;align-items:center!important;justify-content:center!important;transition:all .2s!important;position:static!important;transform:none!important}
.send-btn:hover{background:rgb(80,200,140)!important;transform:scale(1.05)!important}
.file-preview{display:none!important}
/* NO DOUBLE SCROLLBAR */
.sidebar{overflow-y:auto!important;overflow-x:hidden!important}
.sidebar::-webkit-scrollbar{width:2px}
.sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.04);border-radius:2px}
`;
document.head.appendChild(s);
/* Clean wrong items */
['AnythingLLM','CrewAI','Flowise','AIOS','Browser-Use'].forEach(function(w){
document.querySelectorAll('.sb-item').forEach(function(el){if(el.textContent.indexOf(w)>=0)el.remove();});
});
var seen={};document.querySelectorAll('.sb-cat').forEach(function(c){var t=c.textContent.trim();if(seen[t])c.remove();seen[t]=1;});
console.log('WX5 SIDEBAR');/* Sidebar sections */
console.log('WX5 SB SEARCH',document.querySelectorAll('.sb-item').length);var sb=document.querySelector('.sb-item');if(!sb)return;
var p=sb.parentElement;
p.style.overflowY='auto';p.style.maxHeight='calc(100vh - 150px)';p.style.paddingBottom='40px';
function S(cat,items){console.log('S() called:',cat,items.length);
var h='<div class="sb-cat">'+cat+'</div>';
items.forEach(function(i){h+='<div class="sb-item" data-w5="1" onclick="q(\''+i[2]+'\')"><span class="ico">'+i[0]+'</span> '+i[1]+'</div>';});
p.insertAdjacentHTML('beforeend',h);
}
if(!document.querySelector('[data-w5]')){
S('\u2728 IA AGENTS',[['\ud83e\udde0','Consensus','consensus expert meilleur LLM'],['\ud83d\udc1f','MiroFish','status mirofish'],['\ud83e\udd8c','DeerFlow','status deerflow'],['\ud83d\udcce','Paperclip','status paperclip'],['\ud83e\udd16','DeepAgent','status deepagent'],['\ud83e\uddea','Opus Deep','analyse profonde']]);
S('\ud83d\udcbb CODE',[['\ud83d\udc07','CodeRabbit','code review'],['\ud83e\udd80','Claw-Code','status claw-code'],['\ud83d\udd0d','Nuclei','scan nuclei'],['\ud83d\udee1','CrowdSec','status CrowdSec'],['\ud83d\udd12','SSL','scan SSL'],['\u2328','Execute','execute python print(42)']]);
S('\ud83d\ude80 OPS',[['\ud83d\udc33','Docker','docker containers'],['\ud83c\udf10','Nginx','nginx config'],['\ud83d\udcc2','Git','git log'],['\u23f0','Crons','cron list'],['\ud83d\udce7','Email','liste email'],['\ud83d\udcf8','Screenshot','screenshot weval-consulting.com'],['\ud83e\uddf9','Cleanup','nettoie logs'],['\ud83d\udcbe','Backup','status vault gold']]);
S('\ud83e\udde9 OSS',[['\ud83d\udd0d','Qdrant','collections qdrant'],['\ud83d\udd04','n8n','status n8n'],['\ud83c\udf0e','SearXNG','recherche WEVAL'],['\ud83e\udd86','Goose','status goose'],['\ud83c\udf10','Browser','status browser-use'],['\ud83d\udcda','AnythingLLM','status anythingllm'],['\ud83e\udde9','CrewAI','status crewai'],['\ud83d\udd17','Flowise','status flowise'],['\ud83e\uddbe','AIOS','status aios'],['\ud83d\udd2e','Dify','status dify'],['\ud83d\udcda','554 Skills','liste skills']]);
S('\ud83d\udca4 DREAM ENGINE',[['\ud83c\udf19','autoDream','dream consolider memoires Qdrant'],['\u26a1','KAIROS','kairos daemon proactif alertes'],['\ud83d\udcdd','ULTRAPLAN','ultraplan architecture microservices'],['\ud83d\udddc','Compress','compress texte contexte'],['\ud83e\ude79','Self-Heal','heal memoire contradictions']]);
S('\ud83c\udfe2 ENTERPRISE',[['\ud83d\udcca','Dashboard','dashboard entreprise WEVAL stats'],['\ud83c\udfaf','Strategie','strategie WEVAL Consulting 2026'],['\ud83d\udcc8','Pipeline','pipeline commercial deals actifs'],['\ud83d\udcb0','Financier','plan financier revenus couts'],['\ud83d\uddd3','Roadmap','roadmap produit Q2 Q3 2026'],['\u2694','Concurrents','analyse concurrentielle Maroc'],['\ud83e\udd1d','Partenaires','strategie partenaires SAP Huawei Vistex'],['\ud83d\udc65','RH','plan recrutement equipe 2026'],['\ud83d\udcca','KPIs','indicateurs performance WEVAL'],['\ud83d\ude80','Evolution','plan evolution entreprise 12 mois']]);
S('\ud83c\udfdb ECOSYSTEM WEVAL',[['\ud83d\udce7','WEVIA Life','status wevia-life emails opps'],['\ud83d\udda5','Blade IA','status blade agent razer'],['\ud83d\udee0','PowerToys','ouvre powertoys DNS SSL QR Hash'],['\ud83d\udcbc','CRM','status CRM deals'],['\u2705','L99 Tests','status L99 passed total'],['\ud83d\udccb','NonReg','status nonreg 153 tests'],['\ud83c\udfd7','Architecture','architecture WEVIA complete'],['\ud83d\ude80','Ops Center','status ops-center 36 tools'],['\ud83c\udf0e','Tech Radar','status tech-radar 101 tools'],['\ud83d\udcdd','WEVADS','status wevads 79 modules'],['\ud83d\udcc5','Booking','booking calendly WEVAL']]);
S('\ud83d\udd75 DARK & ARSENAL',[['\ud83d\udd0d','Nuclei Scan','scan nuclei vulnerabilites weval-consulting.com'],['\ud83d\udd12','Gitleaks','scan gitleaks secrets code'],['\ud83d\udee1','Trivy','scan trivy containers vulnerabilites'],['\ud83d\udd75','Sherlock','sherlock OSINT username'],['\ud83d\udce7','Holehe','holehe OSINT email'],['\ud83c\udf10','Amass','amass subdomains weval-consulting.com'],['\ud83d\udcca','ADX Stats','status ADX contacts campaigns'],['\ud83d\udc8a','Ethica DB','status ethica medecins validated'],['\ud83d\udd04','Arsenal','status arsenal sentinel S95'],['\ud83d\udd77','Scrapers','status scrapers ethica']]);
S('\u26a1 PROVIDERS',[['\ud83c\udf1f','13 Providers','liste providers IA'],['\ud83e\udde0','R1 671B','test deepseek R1'],['\ud83d\ude80','Cerebras','test cerebras'],['\ud83d\udcca','Ollama','modeles Ollama']]);
}
/* Replace welcome cards - COMPACT */
var wc=document.querySelector('.welcome-cards');
if(wc){
var g=document.createElement('div');g.className='wx-grid';
g.innerHTML=[
['\ud83d\udcca','Audit Infra','S204\u2022S95\u2022S151','audit complet RAM disk Docker'],
['\ud83d\udc8a','Ethica HCP','135K m\u00e9decins','status ethica count HCP'],
['\ud83e\udde0','Consensus','3 IA experts','consensus expert stack IA'],
['\ud83d\udd12','Security','SSL\u2022Nuclei','scan SSL nuclei securite'],
['\ud83d\udc33','Docker','24 containers','docker containers status'],
['\ud83d\udcbb','Code Exec','Python\u2022PHP','execute python: print(42)'],
['\ud83e\udd8c','Research','554 skills','deerflow recherche IA'],
['\ud83d\ude80','Architecture','182 routes','architecture WEVIA Master'],
].map(function(c){return'<div onclick="q(\''+c[3]+'\')"><span class="ci">'+c[0]+'</span><b>'+c[1]+'</b><br><small>'+c[2]+'</small></div>';}).join('');
wc.parentElement.replaceChild(g,wc);
}
var wsub=document.querySelector('.welcome>p');
if(wsub)wsub.textContent='IA souveraine \u2014 13 providers \u2014 R1 671B \u2014 28 tools \u2014 554 skills \u2014 0\u20ac';
document.createElement('div').id='wx5';document.body.appendChild(document.getElementById('wx5')||Object.assign(document.createElement('div'),{id:'wx5'}));
})();
/* WEVIA Stream Premium — Rich response rendering */
(function(){
if(document.getElementById('wsp'))return;
var s=document.createElement('style');
s.textContent=`
/* RICH MESSAGE RENDERING */
.msg-assistant{font-family:'Plus Jakarta Sans','DM Sans',sans-serif!important}
.msg-assistant pre{background:rgba(0,0,0,0.3)!important;border:1px solid rgba(255,255,255,0.08)!important;border-radius:10px!important;padding:14px!important;overflow-x:auto!important;font-size:12px!important;line-height:1.5!important}
.msg-assistant code{font-family:'JetBrains Mono',monospace!important;font-size:12px!important;background:rgba(255,255,255,0.06)!important;padding:1px 5px!important;border-radius:4px!important}
.msg-assistant pre code{background:none!important;padding:0!important}
.msg-assistant h1,.msg-assistant h2,.msg-assistant h3{color:#64dca0!important;font-weight:600!important;margin:12px 0 6px!important}
.msg-assistant h1{font-size:18px!important;border-bottom:1px solid rgba(255,255,255,0.08)!important;padding-bottom:6px!important}
.msg-assistant h2{font-size:15px!important}
.msg-assistant h3{font-size:13px!important;color:rgba(255,255,255,0.5)!important}
.msg-assistant strong{color:#e8e8e8!important}
.msg-assistant ul,.msg-assistant ol{padding-left:20px!important;margin:6px 0!important}
.msg-assistant li{margin:3px 0!important;line-height:1.5!important}
.msg-assistant table{border-collapse:collapse!important;width:100%!important;margin:8px 0!important;font-size:12px!important}
.msg-assistant th{background:rgba(100,220,160,0.1)!important;color:#64dca0!important;padding:6px 10px!important;text-align:left!important;font-weight:600!important;border-bottom:1px solid rgba(255,255,255,0.1)!important}
.msg-assistant td{padding:5px 10px!important;border-bottom:1px solid rgba(255,255,255,0.04)!important}
.msg-assistant tr:hover td{background:rgba(255,255,255,0.02)!important}
/* ACTION BADGES */
.action-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:8px;font-size:11px;font-weight:500;margin:2px 4px 2px 0}
.action-badge.exec{background:rgba(100,220,160,0.1);color:#64dca0;border:1px solid rgba(100,220,160,0.2)}
.action-badge.error{background:rgba(255,80,80,0.1);color:#ff5050;border:1px solid rgba(255,80,80,0.2)}
.action-badge.info{background:rgba(80,160,255,0.1);color:#50a0ff;border:1px solid rgba(80,160,255,0.2)}
/* STATS CARDS */
.stat-row{display:flex;gap:8px;margin:8px 0;flex-wrap:wrap}
.stat-card{background:rgba(255,255,255,0.03);border:1px solid rgba(255,255,255,0.06);border-radius:10px;padding:10px 14px;flex:1;min-width:100px;text-align:center}
.stat-card .stat-value{font-size:20px;font-weight:700;color:#64dca0}
.stat-card .stat-label{font-size:10px;color:rgba(255,255,255,0.35);text-transform:uppercase;letter-spacing:1px;margin-top:2px}
/* PROGRESS */
.stream-progress{display:flex;align-items:center;gap:8px;padding:8px 12px;background:rgba(255,255,255,0.02);border-radius:8px;margin:4px 0;font-size:12px;color:rgba(255,255,255,0.4)}
.stream-progress .dot{width:6px;height:6px;border-radius:50%;background:#64dca0;animation:blink 1.2s infinite}
@keyframes blink{0%,100%{opacity:1}50%{opacity:0.2}}
/* COPY BUTTON */
.copy-btn{position:absolute;top:6px;right:6px;background:rgba(255,255,255,0.08);border:none;border-radius:4px;color:rgba(255,255,255,0.4);padding:3px 8px;font-size:10px;cursor:pointer;opacity:0;transition:opacity .2s}
pre:hover .copy-btn{opacity:1}
.copy-btn:hover{color:#fff;background:rgba(255,255,255,0.15)}
`;
document.head.appendChild(s);
// Post-process messages: convert markdown-like to rich HTML
var observer = new MutationObserver(function(mutations){
mutations.forEach(function(m){
m.addedNodes.forEach(function(node){
if(node.nodeType===1 && (node.classList.contains('msg')||node.classList.contains('bubble')||node.querySelector)){
// Find text content that looks like markdown
var el = node.classList.contains('msg-assistant') ? node : node.querySelector('.msg-assistant,.assistant');
if(!el||el.dataset.rendered) return;
var html = el.innerHTML;
// Convert code blocks
html = html.replace(/\x60\x60\x60(\w*)\n?([\s\S]*?)\x60\x60\x60/g, function(m,lang,code){
return '<pre style="position:relative"><code class="lang-'+lang+'">'+code.trim()+'</code><button class="copy-btn" onclick="navigator.clipboard.writeText(this.previousElementSibling.textContent)">copy</button></pre>';
});
// Convert **bold**
html = html.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
// Convert inline code
html = html.replace(/\x60([^\x60]+)\x60/g, '<code>$1</code>');
// Convert ## headers
html = html.replace(/^### (.+)$/gm, '<h3>$1</h3>');
html = html.replace(/^## (.+)$/gm, '<h2>$1</h2>');
html = html.replace(/^# (.+)$/gm, '<h1>$1</h1>');
// Convert - lists
html = html.replace(/^- (.+)$/gm, '<li>$1</li>');
if(html !== el.innerHTML){
el.innerHTML = html;
el.dataset.rendered = '1';
}
}
});
});
});
var chatArea = document.querySelector('.chat-messages,.messages,.chat-area');
if(chatArea){
observer.observe(chatArea, {childList:true, subtree:true});
}
var d=document.createElement('div');d.id='wsp';document.body.appendChild(d);
})();
/* ═══ WEVIA AUTO-AUDIT UX FIXES (self-recommended) ═══ */
(function(){
if(document.getElementById('wux'))return;
var s=document.createElement('style');
s.id='wux-css';
s.textContent=`
/* 1. CARDS: hover premium avec translateY + glow */
.wcard{transition:transform .22s cubic-bezier(.22,1,.36,1),box-shadow .22s ease!important;cursor:pointer!important}
.wcard:hover{transform:translateY(-3px)!important;box-shadow:0 8px 25px rgba(100,220,160,0.15),0 4px 10px rgba(0,0,0,0.2)!important;border-color:rgba(100,220,160,0.3)!important}
.wcard:active{transform:translateY(0)!important;transition:.08s!important}
/* 2. SIDEBAR: active state + hover glow */
.sb-item{transition:all .18s ease!important;border-radius:8px!important;margin:1px 6px!important;padding:7px 10px!important}
.sb-item:hover{background:rgba(100,220,160,0.08)!important;padding-left:14px!important}
.sb-item:active{background:rgba(100,220,160,0.15)!important;transform:scale(0.98)}
/* 3. MICRO-ANIMATIONS: tout element interactif */
button,a,.send-btn,.voice-btn,.attach-btn{transition:all .2s ease!important}
button:hover,.send-btn:hover{transform:scale(1.05)!important;filter:brightness(1.15)!important}
.send-btn:active,.voice-btn:active{transform:scale(0.95)!important}
/* 4. CONTRASTE: texte secondaire plus lisible */
.wcard>div:last-child{color:rgba(255,255,255,0.5)!important}
.sb-cat{color:rgba(100,220,160,0.7)!important;letter-spacing:1.5px!important;font-size:10px!important;font-weight:700!important}
/* 5. INPUT: focus glow premium */
textarea:focus{box-shadow:0 0 0 2px rgba(100,220,160,0.3),0 0 20px rgba(100,220,160,0.05)!important;border-color:rgba(100,220,160,0.4)!important}
.input-wrap{transition:box-shadow .2s ease!important}
.input-wrap:focus-within{box-shadow:0 0 0 1px rgba(100,220,160,0.2),0 4px 20px rgba(0,0,0,0.15)!important}
/* 6. TITLE: plus grand + meilleur gradient */
.welcome h1{font-size:52px!important;letter-spacing:12px!important;background:linear-gradient(135deg,#64dca0,#50b4ff,#a080ff)!important;-webkit-background-clip:text!important;-webkit-text-fill-color:transparent!important;font-weight:800!important}
.welcome p{font-size:13px!important;color:rgba(255,255,255,0.45)!important;letter-spacing:0.5px!important}
/* 7. SCROLLBAR premium */
::-webkit-scrollbar{width:5px!important}
::-webkit-scrollbar-track{background:transparent!important}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.1)!important;border-radius:10px!important}
::-webkit-scrollbar-thumb:hover{background:rgba(100,220,160,0.3)!important}
/* 8. MESSAGE BUBBLES: premium */
.msg{border-radius:14px!important;padding:14px 18px!important;line-height:1.65!important;font-size:13.5px!important}
.msg-assistant{background:rgba(255,255,255,0.03)!important;border:1px solid rgba(255,255,255,0.05)!important}
/* 9. STATUS BAR: glass effect */
.status-bar,.footer-stats{backdrop-filter:blur(10px)!important;background:rgba(20,20,30,0.8)!important}
/* 10. ANIMATIONS: smooth page load */
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.wcard{animation:fadeIn .4s ease backwards!important}
.wcard:nth-child(1){animation-delay:0s!important}
.wcard:nth-child(2){animation-delay:.05s!important}
.wcard:nth-child(3){animation-delay:.1s!important}
.wcard:nth-child(4){animation-delay:.15s!important}
.wcard:nth-child(5){animation-delay:.2s!important}
.wcard:nth-child(6){animation-delay:.25s!important}
.wcard:nth-child(7){animation-delay:.3s!important}
.wcard:nth-child(8){animation-delay:.35s!important}
.sb-item{animation:fadeIn .3s ease backwards!important}
`;
document.head.appendChild(s);
var d=document.createElement('div');d.id='wux';document.body.appendChild(d);
})();