auto-sync-0300
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled

This commit is contained in:
Opus
2026-04-24 03:00:11 +02:00
parent ecef678798
commit a55d69ada1
43 changed files with 312 additions and 1994 deletions

View File

@@ -90,6 +90,16 @@ body.light #theme-toggle::before{content:"\263D"}
body{padding-bottom:26px}
</style>
<link rel="stylesheet" href="/css/wevia-portal-consistency.css">
<!-- DOCTRINE-60-UX-ENRICH cerebras-qwen235b 20260424-025706 -->
<style id="doctrine60-ux-all-ia-hub">
.card, .panel, .btn, .kpi { opacity: 0; transform: translateY(20px); transition: opacity 0.6s ease, transform 0.6s ease; }
.pulse, .live-indicator, .active, .online { animation: pulseAnim 3s ease-in-out infinite; }
@keyframes pulseAnim { 0% { opacity: 0.6; } 50% { opacity: 1; } 100% { opacity: 0.6; } }
.btn:hover, .panel:hover, .card:hover { box-shadow: 0 0 20px rgba(0, 120, 255, 0.3); border-color: rgba(0, 120, 255, 0.5); transition: all 0.3s; }
body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background: radial-gradient(circle at 50% 50%, rgba(100, 180, 255, 0.12), transparent 70%); pointer-events: none; }
.chat, .speech, .modal, .overlay { backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
</style>
</head>
<body>
<div class="wevia-portal-banner">
@@ -1374,3 +1384,20 @@ setInterval(refreshStats,60000);
</div>
<!-- /WEVIA-AUTONOMY-NAV-AIH -->
</html>
<!-- DOCTRINE-60-UX-JS -->
<script id="doctrine60-ux-js-all-ia-hub">
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry, i) => {
if (entry.isIntersecting) {
setTimeout(() => {
entry.target.style.opacity = 1;
entry.target.style.transform = 'translateY(0)';
}, i * 100);
observer.unobserve(entry.target);
}
});
}, { threshold: 0.1 });
document.querySelectorAll('.card, .panel, .btn, .kpi').forEach(el => observer.observe(el));
</script>

View File

@@ -1,7 +1,7 @@
{
"agent": "V41_Disk_Monitor",
"ts": "2026-04-24T02:30:02+02:00",
"disk_pct": 97,
"ts": "2026-04-24T03:00:01+02:00",
"disk_pct": 96,
"disk_free_gb": 6,
"growth_per_day_gb": 1.5,
"runway_days": 4,

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
{
"generated_at": "2026-04-24T02:55:01.373497",
"generated_at": "2026-04-24T03:00:01.454272",
"stats": {
"total": 48,
"pending": 23,

View File

@@ -1,7 +1,7 @@
{
"ok": true,
"agent": "V42_MQL_Scoring_Agent_REAL",
"ts": "2026-04-24T00:50:01+00:00",
"ts": "2026-04-24T01:00:01+00:00",
"status": "DEPLOYED_AUTO",
"deployed": true,
"algorithm": "weighted_behavioral_signals",

View File

@@ -9,7 +9,7 @@ LOG=/tmp/rolling-enrich-inject-${TS}.log
exec > >(tee -a "$LOG") 2>&1
# Les 6 hubs existants (wevia-meeting missing, skip)
HUBS=("wevia-meeting.php")
HUBS=("all-ia-hub" "wevia-orchestrator" "wevia-chat-v2" "wevia-cortex" "sovereign-monitor" "wevia-audit" "wevia-console" "wevia-autonomy-dashboard" "wevia-business-visual-studio")
KC=$(grep -oE "csk-[a-z0-9]+" /opt/wevads/vault/credentials.php 2>/dev/null | head -1)
if [ -z "$KC" ]; then echo "ERR cerebras key"; exit 1; fi

109
api/rolling-enrich-v2.sh Executable file
View File

@@ -0,0 +1,109 @@
#!/bin/bash
# Doctrine 162 v2: Rolling UX enrichment - clean version with pipe stdin
set -u
TS=$(date +%Y%m%d-%H%M%S)
HUBS_DEFAULT=("wevia-master" "all-ia-hub" "wevia-orchestrator" "wevia-chat-v2" "wevia-cortex" "sovereign-monitor" "wevia-audit" "wevia-console" "wevia-autonomy-dashboard" "wevia-business-visual-studio")
HUBS=("${@:-${HUBS_DEFAULT[@]}}")
KC_ALL=$(grep -oE "csk-[a-z0-9]+" /opt/wevads/vault/credentials.php 2>/dev/null); KEY_IDX=0
KC=""
# check moved inside loop
RESULTS=()
for HUB in "${HUBS[@]}"; do
HUB_FILE="$HUB"
[[ "$HUB" != *.* ]] && HUB_FILE="${HUB}.html"
F="/var/www/html/$HUB_FILE"
if [ ! -f "$F" ]; then RESULTS+=("{\"hub\":\"$HUB\",\"status\":\"missing\"}"); continue; fi
if grep -q "DOCTRINE-60-UX-ENRICH" "$F" 2>/dev/null; then RESULTS+=("{\"hub\":\"$HUB\",\"status\":\"already\"}"); continue; fi
SIZE_BEFORE=$(stat -c%s "$F")
[ "$SIZE_BEFORE" -gt 200000 ] && { RESULTS+=("{\"hub\":\"$HUB\",\"status\":\"too_large\"}"); continue; }
MD5_BEFORE=$(md5sum "$F" | cut -c1-10)
# GOLD backup
BACKUP="/var/www/html/vault-gold/opus/${HUB_FILE}.doctrine162v2-enrich-${TS}.bak"
sudo cp "$F" "$BACKUP"
# Build payload via Python stdin (clean escape)
PROMPT="Génère UNIQUEMENT CSS + JS pour UX doctrine 60 hub $HUB WEVAL. Format strict: marqueurs 'CSS_START' ... 'CSS_END' puis 'JS_START' ... 'JS_END'. Inclure: entrance staggered (opacity 0->1 + translateY 20px->0 sur .card .panel .btn .kpi, delay staggered par IntersectionObserver), hover glow (box-shadow + border accent transition 0.3s), activity pulse (keyframe 3s ease-in-out infinite sur .pulse .live-indicator .active .online), ambient radial (radial-gradient body::before circle 50% 50% rgba couleur soft alpha 0.12), backdrop blur speech (backdrop-filter blur(12px) sur .chat .speech .modal .overlay). CSS sans conflits, classes génériques. JS vanilla minimal IntersectionObserver. Max 1800 chars total. Raw code sans markdown."
PAYLOAD=$(python3 -c 'import json, sys; p=sys.stdin.read(); print(json.dumps({"model":"qwen-3-235b-a22b-instruct-2507","messages":[{"role":"user","content":p}],"temperature":0.2,"max_tokens":2200}))' <<< "$PROMPT")
KC=$(echo "$KC_ALL" | sed -n "$((KEY_IDX % 2 + 1))p"); KEY_IDX=$((KEY_IDX+1))
RESP=$(curl -sk -m 30 -X POST "https://api.cerebras.ai/v1/chat/completions" \
-H "Authorization: Bearer $KC" -H "Content-Type: application/json" \
-d "$PAYLOAD" 2>&1)
CONTENT=$(echo "$RESP" | python3 -c '
import sys, json
try: d=json.loads(sys.stdin.read()); print(d["choices"][0]["message"]["content"])
except Exception as e: print(f"ERR:{e}")
')
if [[ "$CONTENT" == ERR:* ]] || [ -z "$CONTENT" ]; then
RESULTS+=("{\"hub\":\"$HUB\",\"status\":\"cerebras_failed\",\"err\":$(echo "$CONTENT" | head -c 100 | python3 -c 'import sys,json;print(json.dumps(sys.stdin.read()))')}")
sleep 3
continue
fi
# Extract CSS and JS
CSS=$(echo "$CONTENT" | python3 -c '
import sys, re
t = sys.stdin.read()
m = re.search(r"CSS_START(.*?)CSS_END", t, re.DOTALL)
print(m.group(1).strip() if m else "")
')
JS=$(echo "$CONTENT" | python3 -c '
import sys, re
t = sys.stdin.read()
m = re.search(r"JS_START(.*?)JS_END", t, re.DOTALL)
print(m.group(1).strip() if m else "")
')
if [ -z "$CSS" ]; then
RESULTS+=("{\"hub\":\"$HUB\",\"status\":\"parsing_failed\"}")
sleep 3
continue
fi
# Unlock + inject + relock via Python (safer)
sudo chattr -i "$F" 2>/dev/null
CSS_B64=$(echo "$CSS" | base64 -w0)
JS_B64=$(echo "$JS" | base64 -w0)
python3 << PYEOF > /dev/null
import base64
with open("$F","r",encoding="utf-8",errors="replace") as fp:
html = fp.read()
css = base64.b64decode("$CSS_B64").decode("utf-8","replace")
js = base64.b64decode("$JS_B64").decode("utf-8","replace")
block_css = f"<!-- DOCTRINE-60-UX-ENRICH cerebras-qwen235b $TS -->\n<style id=\"doctrine60-ux-$HUB\">\n{css}\n</style>"
block_js = f"<!-- DOCTRINE-60-UX-JS -->\n<script id=\"doctrine60-ux-js-$HUB\">\n{js}\n</script>"
if "</head>" in html:
html = html.replace("</head>", block_css + "\n</head>", 1)
else:
html = block_css + "\n" + html
if "</body>" in html:
html = html.replace("</body>", block_js + "\n</body>", 1)
else:
html = html + "\n" + block_js
with open("$F","w",encoding="utf-8") as fp:
fp.write(html)
PYEOF
sudo chattr +i "$F" 2>/dev/null
SIZE_AFTER=$(stat -c%s "$F")
MD5_AFTER=$(md5sum "$F" | cut -c1-10)
HTTP=$(curl -sk -m 5 "https://weval-consulting.com/$HUB_FILE" -o /dev/null -w "%{http_code}")
RESULTS+=("{\"hub\":\"$HUB\",\"status\":\"enriched\",\"size_before\":$SIZE_BEFORE,\"size_after\":$SIZE_AFTER,\"size_delta\":$((SIZE_AFTER-SIZE_BEFORE)),\"md5_before\":\"$MD5_BEFORE\",\"md5_after\":\"$MD5_AFTER\",\"http\":\"$HTTP\"}")
sleep 8
done
echo -n "{\"doctrine\":\"162v2\",\"ts\":\"$(date -Iseconds)\",\"hubs_count\":${#HUBS[@]},\"results\":["
FIRST=1
for r in "${RESULTS[@]}"; do [ $FIRST -eq 1 ] && FIRST=0 || echo -n ","; echo -n "$r"; done
echo "]}"

View File

@@ -1,7 +1,7 @@
{
"ok": true,
"version": "V83-business-kpi",
"ts": "2026-04-24T00:54:35+00:00",
"ts": "2026-04-24T00:59:36+00:00",
"summary": {
"total_categories": 8,
"total_kpis": 64,

View File

@@ -158,7 +158,9 @@ function wevia_orchestrate($q) {
}
$msg = $_GET["msg"] ?? "";
if ($msg) { header("Content-Type: application/json"); echo " "; flush(); ob_flush(); }
if ($msg) { echo chr(10).json_encode(wevia_orchestrate($msg), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE); }
// Guard: only echo if this file is the MAIN script (not when included by SSE endpoint etc)
$__wevia_is_main = isset($_SERVER["SCRIPT_FILENAME"]) && (@realpath($_SERVER["SCRIPT_FILENAME"]) === @realpath(__FILE__));
if ($msg && $__wevia_is_main) { header("Content-Type: application/json"); echo " "; flush(); @ob_flush(); }
if ($msg && $__wevia_is_main) { echo chr(10).json_encode(wevia_orchestrate($msg), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE); }
function _sovereign_synth($q){$ch=curl_init("http://127.0.0.1:4000/v1/chat/completions");curl_setopt_array($ch,[CURLOPT_POST=>1,CURLOPT_POSTFIELDS=>json_encode(["model"=>"auto","messages"=>[["role"=>"system","content"=>"WEVIA Master. Francais. Concis."],["role"=>"user","content"=>$q]],"max_tokens"=>500]),CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>10,CURLOPT_HTTPHEADER=>["Content-Type:application/json"]]);$r=@json_decode(curl_exec($ch),true);curl_close($ch);return $r["choices"][0]["message"]["content"]??null;}

View File

@@ -0,0 +1,22 @@
<?php
// OPUS offload intent created 2026-04-24T02:56:08+0200
return array (
'name' => 'hf_inference',
'domain' => 'infrastructure',
'priority' => 'P2',
'triggers' =>
array (
0 => 'hf inference',
1 => 'huggingface test',
2 => 'hf zero gpu',
3 => 'run huggingface',
4 => 'hf status',
),
'cmd' => 'curl -s "http://localhost/api/gpu-free-stack.php" --max-time 10 | jq -r ".backends.huggingface | \"HF \" + .status + \" - \" + .user + \" - \" + .free_resource"',
'status' => 'ACTIVATED',
'created_at' => '2026-04-24T02:56:08+0200',
'source' => 'opus-offload-intents-24avr',
'description' => 'Test HuggingFace Zero GPU inference (80h/week free, user yace222)',
'out_preview' => 'offload intent ready',
'ms' => 0,
);

View File

@@ -0,0 +1,22 @@
<?php
// OPUS offload intent created 2026-04-24T02:56:08+0200
return array (
'name' => 'kaggle_run_finetune',
'domain' => 'infrastructure',
'priority' => 'P2',
'triggers' =>
array (
0 => 'kaggle finetune',
1 => 'run kaggle',
2 => 'kaggle fine tune',
3 => 'kaggle t4',
4 => 'kaggle notebook status',
),
'cmd' => 'curl -s "http://localhost/api/gpu-free-stack.php" --max-time 10 | jq -r ".backends.kaggle | \"Kaggle \" + .status + \" - script:\" + (.script_exists|tostring) + \" - proofs:\" + (.proofs_count|tostring) + \" - \" + .free_resource"',
'status' => 'ACTIVATED',
'created_at' => '2026-04-24T02:56:08+0200',
'source' => 'opus-offload-intents-24avr',
'description' => 'Check/trigger Kaggle T4 16GB fine-tune (30h/week free, script configured)',
'out_preview' => 'offload intent ready',
'ms' => 0,
);

View File

@@ -0,0 +1,18 @@
<?php
// OPUS offload intent
return array (
'name' => 'offload_backup_s95',
'domain' => 'infrastructure',
'priority' => 'P2',
'triggers' => array(
0 => 'offload backup s95',
1 => 'backup to s95',
2 => 's95 backup status',
3 => 'deport backup s95',
),
'cmd' => 'curl -s -X POST https://wevads.weval-consulting.com/api/sentinel-brain.php --data-urlencode action=exec --data-urlencode cmd="df -h / | tail -1" --max-time 10 | jq -r ".output | \"S95 disk: \" + ."',
'status' => 'ACTIVATED',
'source' => 'opus-offload-24avr',
'description' => 'Deport DB backup S204 to S95 (21GB free vs S204 6GB)',
'out_preview' => 'offload_backup_s95 ready',
);

View File

@@ -0,0 +1,21 @@
<?php
// OPUS offload intent created 2026-04-24T02:56:08+0200
return array (
'name' => 'scraper_ethica_s95',
'domain' => 'infrastructure',
'priority' => 'P2',
'triggers' =>
array (
0 => 'scraper ethica s95',
1 => 'run scraper s95',
2 => 'scrape on s95',
3 => 'ethica scrape status',
),
'cmd' => 'curl -s -X POST https://wevads.weval-consulting.com/api/sentinel-brain.php --data-urlencode "action=exec" --data-urlencode "cmd=systemctl is-active ethica-scraper 2>/dev/null || echo \"no-service\"; ls -la /opt/ethica-scrapers/ 2>/dev/null | head -5; psql -h 127.0.0.1 -U admin -d adx_system -t -c \"SELECT COUNT(*) FROM ethica.medecins_validated;\" 2>&1 | head -1" --max-time 20 | jq -r .output',
'status' => 'ACTIVATED',
'created_at' => '2026-04-24T02:56:08+0200',
'source' => 'opus-offload-intents-24avr',
'description' => 'Run ethica scraper on S95 (data source-of-truth, load 1.55 vs S204 45)',
'out_preview' => 'offload intent ready',
'ms' => 0,
);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 949 KiB

After

Width:  |  Height:  |  Size: 988 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1016 KiB

After

Width:  |  Height:  |  Size: 974 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 859 KiB

After

Width:  |  Height:  |  Size: 856 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1001 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 237 KiB

View File

@@ -14,9 +14,9 @@ pre{background:rgba(0,0,0,.35);padding:14px;border-radius:6px;overflow-x:auto;fo
<div class="stat"><div class="lbl">Total Hubs</div><div class="val">8</div></div>
<div class="stat"><div class="lbl">Passed</div><div class="val" style="color:#2ed573">7</div></div>
<div class="stat"><div class="lbl">Failed</div><div class="val" style="color:#ff4757">1</div></div>
<div class="stat"><div class="lbl">Exec Time</div><div class="val" style="font-size:16px">82s</div></div>
<div class="stat"><div class="lbl">Exec Time</div><div class="val" style="font-size:16px">92s</div></div>
</div>
<p>Timestamp: 2026-04-24T00:52:07.074Z</p>
<p>Timestamp: 2026-04-24T00:58:17.332Z</p>
<table><thead><tr><th>Hub</th><th>Status</th><th>HTTP</th><th>Auth</th><th>Gemini v2</th><th>No TR overlap</th><th>No BR overlap</th><th>Shot</th><th>Hover</th><th>Video</th></tr></thead><tbody><tr><td><a href="https://weval-consulting.com/paperclip-dashboard.html">paperclip-dashboard.html</a></td><td class="pass">PASS</td><td>200</td><td>🌐</td><td></td><td>0 ✅</td><td>0 ✅</td><td><a href="paperclip-dashboard_html.png">📸</a></td><td><a href="paperclip-dashboard_html_hover.png">🖱</a></td><td><a href="paperclip-dashboard_html.webm">🎥</a></td></tr><tr><td><a href="https://weval-consulting.com/deerflow-hub.html">deerflow-hub.html</a></td><td class="pass">PASS</td><td>200</td><td>🌐</td><td></td><td>0 ✅</td><td>0 ✅</td><td><a href="deerflow-hub_html.png">📸</a></td><td><a href="deerflow-hub_html_hover.png">🖱</a></td><td><a href="deerflow-hub_html.webm">🎥</a></td></tr><tr><td><a href="https://weval-consulting.com/ai-hub.html">ai-hub.html</a></td><td class="pass">PASS</td><td>200</td><td>🌐</td><td></td><td>0 ✅</td><td>0 ✅</td><td><a href="ai-hub_html.png">📸</a></td><td><a href="ai-hub_html_hover.png">🖱</a></td><td><a href="ai-hub_html.webm">🎥</a></td></tr><tr><td><a href="https://weval-consulting.com/wevia-multiagent-dashboard.html">wevia-multiagent-dashboard.html</a></td><td class="pass">PASS</td><td>200</td><td>🌐</td><td></td><td>0 ✅</td><td>0 ✅</td><td><a href="wevia-multiagent-dashboard_html.png">📸</a></td><td><a href="wevia-multiagent-dashboard_html_hover.png">🖱</a></td><td><a href="wevia-multiagent-dashboard_html.webm">🎥</a></td></tr><tr><td><a href="https://weval-consulting.com/brain-council.html">brain-council.html</a></td><td class="pass">PASS</td><td>200</td><td>🌐</td><td></td><td>0 ✅</td><td>0 ✅</td><td><a href="brain-council_html.png">📸</a></td><td><a href="brain-council_html_hover.png">🖱</a></td><td><a href="brain-council_html.webm">🎥</a></td></tr><tr><td><a href="https://weval-consulting.com/wevia-meeting.php">wevia-meeting.php</a></td><td class="pass">PASS</td><td>200</td><td>🌐</td><td></td><td>0 ✅</td><td>0 ✅</td><td><a href="wevia-meeting_php.png">📸</a></td><td><a href="wevia-meeting_php_hover.png">🖱</a></td><td><a href="wevia-meeting_php.webm">🎥</a></td></tr><tr><td><a href="https://weval-consulting.com/growth-engine-v2.html">growth-engine-v2.html</a></td><td class="fail">FAIL</td><td>200</td><td>🔐</td><td></td><td>1 ❌</td><td>4 ❌</td><td><a href="growth-engine-v2_html.png">📸</a></td><td></td><td><a href="growth-engine-v2_html.webm">🎥</a></td></tr><tr><td><a href="https://weval-consulting.com/agents-hub.html">agents-hub.html</a></td><td class="pass">PASS</td><td>200</td><td>🔐</td><td></td><td>0 ✅</td><td>0 ✅</td><td><a href="agents-hub_html.png">📸</a></td><td><a href="agents-hub_html_hover.png">🖱</a></td><td><a href="agents-hub_html.webm">🎥</a></td></tr></tbody></table>
<h2>🤖 Gemini 2.5 Flash UX Review</h2><p>Hub analysé: <b>paperclip-dashboard.html</b></p><pre>```json
{
@@ -26,11 +26,11 @@ pre{background:rgba(0,0,0,.35);padding:14px;border-radius:6px;overflow-x:auto;fo
&quot;improvements&quot;: [
{
&quot;priority&quot;: &quot;High&quot;,
&quot;suggestion&quot;: &quot;**</pre>
&quot;suggestion</pre>
<h2>📋 Raw report JSON</h2>
<pre>{
&quot;wave&quot;: 305,
&quot;timestamp&quot;: &quot;2026-04-24T00:52:07.074Z&quot;,
&quot;timestamp&quot;: &quot;2026-04-24T00:58:17.332Z&quot;,
&quot;hubs&quot;: [
{
&quot;hub&quot;: &quot;paperclip-dashboard.html&quot;,
@@ -235,7 +235,7 @@ pre{background:rgba(0,0,0,.35);padding:14px;border-radius:6px;overflow-x:auto;fo
&quot;tag&quot;: &quot;DIV&quot;,
&quot;id&quot;: &quot;&quot;,
&quot;class&quot;: &quot;orb o2&quot;,
&quot;pos&quot;: &quot;1513,1201&quot;,
&quot;pos&quot;: &quot;1510,1204&quot;,
&quot;size&quot;: &quot;500x500&quot;
},
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 986 KiB

After

Width:  |  Height:  |  Size: 979 KiB

View File

@@ -1,6 +1,6 @@
{
"wave": 305,
"timestamp": "2026-04-24T00:52:07.074Z",
"timestamp": "2026-04-24T00:58:17.332Z",
"hubs": [
{
"hub": "paperclip-dashboard.html",
@@ -205,7 +205,7 @@
"tag": "DIV",
"id": "",
"class": "orb o2",
"pos": "1513,1201",
"pos": "1510,1204",
"size": "500x500"
},
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 873 KiB

After

Width:  |  Height:  |  Size: 910 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -53,7 +53,18 @@ dialog{border:1px solid var(--brd);border-radius:var(--r);background:var(--bg2);
dialog h3{font-size:14px;margin-bottom:12px}dialog textarea{width:100%;height:80px;resize:vertical;background:var(--bg);border:1px solid var(--brd);border-radius:8px;padding:8px;font-size:12px;font-family:'JetBrains Mono',monospace;color:var(--text);outline:none}
.dr{display:flex;align-items:center;gap:8px;margin-top:10px}.dr label{font-size:12px;color:var(--text2);min-width:60px}.dr input[type=range]{flex:1;accent-color:var(--accent)}.dr .v{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--accent);min-width:30px}
@media(max-width:768px){.sb{display:none}.iw{left:0}}
</style><style>#wnav{display:none!important}</style></head><body><div id="live-stats" ondblclick="this.remove()" style="position:fixed;top:0;left:0;right:0;z-index:9999;display:flex;justify-content:center;gap:12px;padding:4px 8px;background:linear-gradient(135deg,#1e293b,#0f172a);font-family:sans-serif"><div style="color:#4ade80;font:700 10px sans-serif"></head><body>#9889; <span id="ls-ag">669</span> Agents</div><div style="color:#60a5fa;font:700 10px sans-serif"></head><body>#127970; <span id="ls-dp">22</span> Depts</div><div style="color:#fbbf24;font:700 10px sans-serif"></head><body>#128051; 20 Docker</div><div style="color:#a78bfa;font:700 10px sans-serif"></head><body>#129302; 10 Ollama</div><div style="color:#f87171;font:700 10px sans-serif"></head><body>#128200; <span id="ls-nr">153/153</span></div><div style="color:#34d399;font:700 10px sans-serif"></head><body>#128274; SSO OK</div><div style="width:6px;height:6px;border-radius:50%;background:#4ade80;animation:lp 2s infinite;align-self:center"></div></div><style>@keyframes lp{0%,100%{opacity:1}50%{opacity:.3}}</style><div id="wnav" style="position:relative;z-index:100;padding:8px 12px;display:flex;justify-content:center;gap:6px;background:transparent;font-family:sans-serif"><a href="/l99-saas.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">L99</a><a href="/admin-saas.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Admin</a><a href="/realtime-monitor.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Monitor</a><a href="/agents-goodjob.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Enterprise</a><a href="/sovereign-claude.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Sovereign</a><a href="/cyber-monitor.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Cyber</a></div>
</style><style>#wnav{display:none!important}</style><!-- DOCTRINE-60-UX-ENRICH cerebras-qwen235b 20260424-025724 -->
<style id="doctrine60-ux-wevia-cortex">
.card, .panel, .btn, .kpi { opacity: 0; transform: translateY(20px); transition: opacity 0.6s ease, transform 0.6s ease; }
.card.visible, .panel.visible, .kpi.visible, .btn.visible { opacity: 1; transform: translateY(0); }
.hover-glow:hover { box-shadow: 0 0 16px rgba(100, 200, 255, 0.3); border-color: rgba(100, 200, 255, 0.5); transition: all 0.3s; }
.pulse, .live-indicator, .active, .online { animation: pulse-animation 3s ease-in-out infinite; }
@keyframes pulse-animation { 0% { opacity: 0.6; } 50% { opacity: 1; } 100% { opacity: 0.6; } }
body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 50% 50%, rgba(120, 180, 255, 0.12), transparent 70%); pointer-events: none; z-index: -1; }
.chat, .speech, .modal, .overlay { backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
</style>
</head><body><div id="live-stats" ondblclick="this.remove()" style="position:fixed;top:0;left:0;right:0;z-index:9999;display:flex;justify-content:center;gap:12px;padding:4px 8px;background:linear-gradient(135deg,#1e293b,#0f172a);font-family:sans-serif"><div style="color:#4ade80;font:700 10px sans-serif"></head><body>#9889; <span id="ls-ag">669</span> Agents</div><div style="color:#60a5fa;font:700 10px sans-serif"></head><body>#127970; <span id="ls-dp">22</span> Depts</div><div style="color:#fbbf24;font:700 10px sans-serif"></head><body>#128051; 20 Docker</div><div style="color:#a78bfa;font:700 10px sans-serif"></head><body>#129302; 10 Ollama</div><div style="color:#f87171;font:700 10px sans-serif"></head><body>#128200; <span id="ls-nr">153/153</span></div><div style="color:#34d399;font:700 10px sans-serif"></head><body>#128274; SSO OK</div><div style="width:6px;height:6px;border-radius:50%;background:#4ade80;animation:lp 2s infinite;align-self:center"></div></div><style>@keyframes lp{0%,100%{opacity:1}50%{opacity:.3}}</style><div id="wnav" style="position:relative;z-index:100;padding:8px 12px;display:flex;justify-content:center;gap:6px;background:transparent;font-family:sans-serif"><a href="/l99-saas.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">L99</a><a href="/admin-saas.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Admin</a><a href="/realtime-monitor.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Monitor</a><a href="/agents-goodjob.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Enterprise</a><a href="/sovereign-claude.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Sovereign</a><a href="/cyber-monitor.html" style="padding:4px 12px;border-radius:6px;font-size:10px;font-weight:600;text-decoration:none;background:rgba(0,0,0,.06);color:#555;transition:all .2s">Cyber</a></div>
56a
<div class="sb"><div class="sb-h"><button class="nb" onclick="newChat()">+ Nouveau chat</button></div><div class="sb-l" id="sbl"></div><div class="sb-f"><button onclick="document.body.classList.toggle('dark')">◐ Thème</button><button onclick="document.getElementById('cfg').showModal()">⚙ Config</button></div></div>
<div class="main">
@@ -333,4 +344,17 @@ health();setInterval(health,30000);rSb();document.getElementById('inp').focus();
})();
</script>
<!-- DOCTRINE-60-UX-JS -->
<script id="doctrine60-ux-js-wevia-cortex">
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry, index) => {
if (entry.isIntersecting) {
setTimeout(() => { entry.target.classList.add('visible'); }, index * 100);
observer.unobserve(entry.target);
}
});
}, { threshold: 0.1 });
document.querySelectorAll('.card, .panel, .btn, .kpi').forEach(el => observer.observe(el));
</script>
</body></html>

View File

@@ -153,6 +153,18 @@ body{background:var(--bg);color:var(--tx);font-family:'DM Sans',sans-serif;displ
<!-- V109 Plausible Analytics -->
<script defer data-domain="weval-consulting.com" src="https://analytics.weval-consulting.com/js/script.js"></script>
<link rel="stylesheet" href="/css/wevia-portal-consistency.css">
<!-- DOCTRINE-60-UX-ENRICH cerebras-qwen235b 20260424-025538 -->
<style id="doctrine60-ux-wevia-master">
body::before { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background: radial-gradient(circle at center, rgba(80, 120, 200, 0.15), rgba(10, 20, 40, 0.8)); }
body, .card, .panel, .btn, .kpi { margin: 0; padding: 0; box-sizing: border-box; }
.card, .panel, .btn, .kpi { opacity: 0; transform: translateY(20px); transition: opacity 0.6s ease, transform 0.6s ease, box-shadow 0.4s ease, border 0.4s ease; }
.card.enter-stagger, .panel.enter-stagger, .btn.enter-stagger, .kpi.enter-stagger { opacity: 1; transform: translateY(0); }
.btn:hover, .card:hover, .panel:hover { box-shadow: 0 8px 24px rgba(66, 153, 225, 0.35); border-color: #4299e1; }
.btn, .card, .panel { border: 1px solid rgba(100, 100, 100, 0.2); }
@keyframes pulse-anim { 0%, 100% { opacity: 0.6; transform: scale(1); } 50% { opacity: 1; transform: scale(1.05); } }
.pulse, .live-indicator, .active { animation: pulse-anim 3s ease-in-out infinite; }
.chat, .speech, .modal { backdrop-filter: blur(12px); background: rgba(20, 25, 40, 0.8); }
</style>
</head>
<body>
<div class="wevia-portal-banner">
@@ -895,6 +907,22 @@ const _origAddA = typeof addMsg === 'function' ? addMsg : null;
</script>
<!-- /WAVE 265 Factory pill cross-page -->
<!-- DOCTRINE-60-UX-JS -->
<script id="doctrine60-ux-js-wevia-master">
document.addEventListener('DOMContentLoaded', () => {
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry, index) => {
if (entry.isIntersecting) {
setTimeout(() => {
entry.target.classList.add('enter-stagger');
}, index * 80);
observer.unobserve(entry.target);
}
});
}, { threshold: 0.1 });
document.querySelectorAll('.card, .panel, .btn, .kpi').forEach(el => observer.observe(el));
});
</script>
</body>
<!-- WEVIA-LIVE-OPS-LINK-WM-v1 -->
<a href="/weval-live-ops.html" style="position:fixed;bottom:16px;right:16px;padding:10px 16px;background:linear-gradient(135deg,#e94560,#c03350);color:#fff;border-radius:8px;font-weight:700;font-size:13px;text-decoration:none;z-index:9999;box-shadow:0 4px 12px rgba(233,69,96,0.4)">Live Ops</a>

View File

@@ -102,6 +102,17 @@ body{background:var(--bg);color:var(--t1);font-family:var(--sans);overflow-x:hid
::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--brd);border-radius:4px}
</style>
<link rel="stylesheet" href="/css/wevia-portal-consistency.css">
<!-- DOCTRINE-60-UX-ENRICH cerebras-qwen235b 20260424-025724 -->
<style id="doctrine60-ux-wevia-orchestrator">
.card, .panel, .btn, .kpi { opacity: 0; transform: translateY(20px); transition: opacity 0.6s ease, transform 0.6s ease; }
.card.visible, .panel.visible, .kpi.visible, .btn.visible { opacity: 1; transform: translateY(0); }
.hover-glow:hover { box-shadow: 0 0 12px rgba(0, 120, 255, 0.4); border-color: rgba(0, 120, 255, 0.6); transition: all 0.3s; }
.pulse, .live-indicator, .active, .online { animation: pulse-animation 3s ease-in-out infinite; }
@keyframes pulse-animation { 0%, 100% { opacity: 0.6; } 50% { opacity: 1; } }
body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 50% 50%, rgba(0, 120, 255, 0.12), transparent 70%); pointer-events: none; z-index: -1; }
.chat, .speech, .modal, .overlay { backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
</style>
</head>
<body>
<div class="wevia-portal-banner">
@@ -636,5 +647,17 @@ async function runTask(preset){
</script>
<!-- /WAVE 265 Factory pill cross-page -->
<!-- DOCTRINE-60-UX-JS -->
<script id="doctrine60-ux-js-wevia-orchestrator">
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry, index) => {
if (entry.isIntersecting) {
setTimeout(() => { entry.target.classList.add('visible'); }, index * 100);
}
});
}, { threshold: 0.1 });
document.querySelectorAll('.card, .panel, .btn, .kpi').forEach(el => observer.observe(el));
</script>
</body>
</html>