feat: dark-mode injection for ALL SaaS product iframes + Huawei Cloud reseller block in CloudCost + Huawei logo

This commit is contained in:
2026-03-28 12:39:25 +01:00
parent 9974c63ea4
commit 7be249ffbc
18 changed files with 205 additions and 12 deletions

BIN
ALL_1_QUICK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
ALL_2_MERMAID.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
ALL_3_LOGO.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
ALL_4_SWOT.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
FINAL_LOGO.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
LANG_DARIJA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
LANG_EN.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
LANG_ES.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
LANG_FR.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
NOLANG_DARIJA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
PROOF_DEEP.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
PROOF_FAST.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
PROOF_LOGO.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
PROOF_MERMAID.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -9,6 +9,97 @@ $in = json_decode(file_get_contents('php://input'), true) ?: [];
$msg = trim($in['message'] ?? '');
if (strlen($msg) < 2) { die(json_encode(['error'=>'message required'])); }
// Auto-detect language from message or use provided lang
$detectedLang = strtolower(trim($in['lang'] ?? 'fr'));
$langInstructions = [
'fr' => 'Reponds en francais.',
'en' => 'Respond in English.',
'es' => 'Responde en espanol.',
'de' => 'Antworte auf Deutsch.',
'it' => 'Rispondi in italiano.',
'pt' => 'Responda em portugues.',
'ar' => 'اجب بالعربية.',
'darija' => 'Jawb b darija maghribiya, kteb b l7orouf latinia (franco-arabe). Exemple: wach, kifash, labas, etc.',
'zh' => '用中文回答。',
'ru' => 'Отвечай по-русски.',
'tr' => 'Turkce cevap ver.',
'ja' => '日本語で答えてください。',
'ko' => '한국어로 대답하세요.',
'hi' => 'हिंदी में जवाब दो।'
];
$langPrompt = $langInstructions[$detectedLang] ?? $langInstructions['fr'];
// ═══ INTELLIGENCE AUGMENTÉE: SearXNG + Qdrant RAG ═══
// --- SearXNG Web Search (for current info queries) ---
$webContext = '';
if (preg_match('/(actualite|news|recent|prix|cours|meteo|score|election|dernier|nouveau|2026|2025|tendance|marche|bourse)/iu', $msg)) {
$sq = urlencode(mb_substr($msg, 0, 100));
$sch = curl_init("http://localhost:8080/search?q={$sq}&format=json&categories=general&language=fr");
curl_setopt_array($sch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>4, CURLOPT_CONNECTTIMEOUT=>2]);
$sr = curl_exec($sch); curl_close($sch);
if ($sr) {
$sd = json_decode($sr, true);
$results = array_slice($sd['results'] ?? [], 0, 3);
foreach ($results as $r) {
$webContext .= "- " . ($r['title'] ?? '') . ": " . mb_substr($r['content'] ?? '', 0, 150) . "\n";
}
}
}
// --- Qdrant RAG (for WEVAL/consulting specific queries) ---
$kbContext = '';
if (preg_match('/(weval|wevia|consulting|erp|sap|vistex|ethica|hcp|pharma|cloud|cyber|notre|nos|votre)/iu', $msg)) {
// Simple keyword search via Qdrant scroll (no embedding needed for keyword match)
$qBody = json_encode(['limit'=>3, 'with_payload'=>true, 'filter'=>['should'=>[['key'=>'text','match'=>['text'=>mb_substr($msg,0,50)]]]]]);
$qch = curl_init("http://localhost:6333/collections/wevia_kb/points/scroll");
curl_setopt_array($qch, [CURLOPT_POST=>true, CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>3, CURLOPT_CONNECTTIMEOUT=>1, CURLOPT_HTTPHEADER=>['Content-Type: application/json'], CURLOPT_POSTFIELDS=>$qBody]);
$qr = curl_exec($qch); curl_close($qch);
if ($qr) {
$qd = json_decode($qr, true);
foreach (($qd['result']['points'] ?? []) as $pt) {
$kbContext .= mb_substr($pt['payload']['text'] ?? '', 0, 200) . "\n";
}
}
}
// --- Augment system prompt with context ---
$augment = '';
if ($webContext) $augment .= "\nINFO WEB RECENTE:\n{$webContext}";
if ($kbContext) $augment .= "\nBASE DE CONNAISSANCES WEVAL:\n{$kbContext}";
// Logo shortcut — route to local qwen3:8b for better SVG
if (preg_match('/(logo|logos|genere.*logo|cree.*logo|design.*logo|branding)/i', $msg)) {
$logoSys = "Tu es un designer de logos expert. Quand on te demande un logo, tu generes UNIQUEMENT du code SVG dans des blocs ```svg. Chaque logo doit etre un SVG complet avec viewBox=\"0 0 200 200\", des formes geometriques modernes, des degrades (linearGradient), du texte stylise, et des couleurs professionnelles. Genere 2 logos differents. AUCUN texte descriptif, UNIQUEMENT du SVG.";
$logoBody = json_encode([
'model' => 'qwen3:8b',
'messages' => [
['role' => 'system', 'content' => $logoSys],
['role' => 'user', 'content' => mb_substr($msg, 0, 500)]
],
'stream' => false, 'think' => false,
'options' => ['num_predict' => 1200, 'temperature' => 0.8]
]);
$ch = curl_init('http://127.0.0.1:11434/api/chat');
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30, CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => $logoBody
]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
if ($code == 200 && $r) {
$d = json_decode($r, true);
$t = trim($d['message']['content'] ?? '');
if (strlen($t) > 50 && stripos($t, '<svg') !== false) {
die(json_encode(['response' => $t, 'provider' => 'WEVIA Engine (qwen3:8b)', 'sources' => []]));
}
}
// Fallback to cloud providers below if local fails
}
// Image shortcut
if (preg_match('/(image|photo|visuel|genere.*image|futuris)/i', $msg)) {
// Extract meaningful keywords (skip stopwords)
@@ -21,10 +112,11 @@ if (preg_match('/(image|photo|visuel|genere.*image|futuris)/i', $msg)) {
die(json_encode(['response'=>"Image generee avec succes\n\n![Image]($imgUrl)",'provider'=>'WEVIA IA','sources'=>[]]));
}
// ═══ PROVIDER CHAIN: Groq → Cerebras → S151 granite4 ═══
require_once '/opt/wevads/vault/credentials.php';
$sys = "Tu es WEVIA, assistant IA souverain de WEVAL Consulting. Reponds en francais, utile et professionnel. Specialise en consulting digital, ERP, IA, cybersecurite. SCHEMAS: Quand on te demande un schema, diagramme, architecture, processus, ishikawa, flowchart ou mermaid, tu DOIS generer du code mermaid valide dans un bloc ```mermaid. Utilise graph TD ou graph LR. JAMAIS de liste a la place. Les noeuds: labels simples sans accents ni apostrophes. LOGOS: Quand on te demande un logo, genere 4 concepts. Pour CHAQUE: titre en gras, description (typo, couleurs HEX, style, usage) puis un bloc ```svg viewBox='0 0 200 200' elabore avec linearGradient, formes multiples (circle rect path polygon), texte stylise bold. Styles: Monogramme, Icone, Wordmark, Badge. JAMAIS un simple cercle avec 2 lettres.";
$body = [["role"=>"system","content"=>$sys],["role"=>"user","content"=>mb_substr($msg,0,2000)]];
$sys = "Tu es WEVIA, intelligence artificielle de WEVAL Consulting (Casablanca). Direct, professionnel, concret. Specialiste: ERP/SAP, Cloud, IA, cybersecurite, email marketing, pharma Maghreb. REGLES: 1)Va droit au but, pas de filler phrases. 2)Quantifie plutot que qualifier. 3)Si incertain, dis-le. SCHEMAS: Quand on demande un schema/diagramme/flowchart/mermaid, tu DOIS generer un bloc ```mermaid avec graph TD ou LR. Labels simples sans accents. JAMAIS de liste a la place. LOGOS: Quand on demande un logo, tu DOIS generer du SVG dans un bloc ```svg. Vrai logo vectoriel avec formes geometriques, degrades, et texte. JAMAIS de description textuelle. CODE: Bloc ```python ou ```php etc. avec syntaxe correcte. " . $langPrompt;
$body = [["role"=>"system","content"=>$sys . $augment],["role"=>"user","content"=>mb_substr($msg,0,2000)]];
$resp = ''; $provider = '';
// Adaptive max_tokens: logos/schemas need more space
@@ -81,7 +173,29 @@ if (!$resp) {
}
}
// ── 4. S151 GRANITE4 (CPU sovereign fallback) ──
// ── 4. S204 LOCAL (weval-brain sovereign) ──
if (!$resp) {
$ch = curl_init('http://127.0.0.1:11434/api/chat');
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15, CURLOPT_CONNECTTIMEOUT => 2,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'model' => 'weval-brain',
'messages' => [['role'=>'system','content'=>$sys],['role'=>'user','content'=>mb_substr($msg,0,2000)]],
'stream' => false, 'think' => false,
'options' => ['num_predict'=>500,'temperature'=>0.7]
])
]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
if ($code == 200 && $r) {
$d = json_decode($r, true);
$t = trim($d['message']['content'] ?? '');
if (strlen($t) > 20) { $resp = $t; $provider = 'WEVIA Brain (sovereign)'; }
}
}
// ── 5. S151 GRANITE4 (CPU sovereign fallback) ──
if (!$resp) {
$ch = curl_init('http://151.80.235.110:11434/api/chat');
curl_setopt_array($ch, [
@@ -89,7 +203,7 @@ if (!$resp) {
CURLOPT_TIMEOUT => 10, CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'model' => 'granite4',
'model' => 'qwen3:4b',
'messages' => [['role'=>'system','content'=>$sys],['role'=>'user','content'=>mb_substr($msg,0,2000)]],
'stream' => false, 'think' => false,
'options' => ['num_predict'=>300,'temperature'=>0.7]
@@ -105,4 +219,5 @@ if (!$resp) {
if (!$resp) { $resp = 'Service temporairement indisponible, veuillez reessayer.'; $provider = 'WEVIA IA'; }
die(json_encode(['response'=>$resp,'provider'=>$provider,'mode'=>$in['mode']??'deep','sources'=>[]]));
$src = []; if ($webContext) $src[] = 'SearXNG'; if ($kbContext) $src[] = 'Qdrant KB';
die(json_encode(['response'=>$resp,'provider'=>$provider,'mode'=>$in['mode']??'deep','sources'=>$src,'used_web'=>!!$webContext,'used_kb'=>!!$kbContext]));

View File

@@ -21,19 +21,24 @@ if (preg_match('/(image|photo|visuel|genere.*image|futuris)/i', $msg)) {
die(json_encode(['response'=>"Image generee avec succes\n\n![Image]($imgUrl)",'provider'=>'WEVIA IA','sources'=>[]]));
}
// ═══ PROVIDER CHAIN: Groq → Cerebras → S151 granite4 ═══
require_once '/opt/wevads/vault/credentials.php';
$sys = "Tu es WEVIA, assistant IA souverain de WEVAL Consulting. Reponds en francais, utile et professionnel. Specialise en consulting digital, ERP, IA, cybersecurite. Quand on te demande un schema, diagramme, architecture, processus, ishikawa, ou mermaid, tu DOIS generer du code mermaid valide dans un bloc ```mermaid. Utilise graph TD ou graph LR. Ne fais PAS de liste numerotee a la place du diagramme.";
$sys = "Tu es WEVIA, assistant IA souverain de WEVAL Consulting (Casablanca). Direct, structure, actionable. Specialise en consulting digital, ERP/SAP, IA, cybersecurite. SCHEMAS: Pour tout schema/diagramme/architecture/processus/mermaid, genere du code mermaid valide dans un bloc ```mermaid (graph TD/LR). Labels sans accents ni apostrophes. JAMAIS de liste a la place. LOGOS: Pour tout logo, genere du SVG dans un bloc ```svg. Vrai logo vectoriel avec formes geometriques et texte. JAMAIS de description textuelle. CODE: Pour tout code, utilise des blocs ``` avec le langage. Sois concis, quantifie, propose des actions concretes.";
$body = [["role"=>"system","content"=>$sys],["role"=>"user","content"=>mb_substr($msg,0,2000)]];
$resp = ''; $provider = '';
// Adaptive max_tokens: logos/schemas need more space
$isRich = preg_match('/(logo|schema|mermaid|diagramme|architecture|svg|flowchart|swot|analyse)/i', $msg);
$maxTok = $isRich ? 2000 : 800;
// ── 1. GROQ (llama-3.3-70b, ~1-3s) ──
$ch = curl_init('https://api.groq.com/openai/v1/chat/completions');
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 8, CURLOPT_CONNECTTIMEOUT => 2,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Authorization: Bearer '.GROQ_KEY],
CURLOPT_POSTFIELDS => json_encode(['model'=>'llama-3.3-70b-versatile','messages'=>$body,'max_tokens'=>800,'temperature'=>0.7])
CURLOPT_POSTFIELDS => json_encode(['model'=>'llama-3.3-70b-versatile','messages'=>$body,'max_tokens'=>$maxTok,'temperature'=>0.7])
]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
if ($code == 200 && $r) {
@@ -50,7 +55,7 @@ if (!$resp) {
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 6, CURLOPT_CONNECTTIMEOUT => 2,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Authorization: Bearer '.$ck],
CURLOPT_POSTFIELDS => json_encode(['model'=>'qwen-3-235b-a22b-instruct-2507','messages'=>$body,'max_tokens'=>800,'temperature'=>0.7])
CURLOPT_POSTFIELDS => json_encode(['model'=>'qwen-3-235b-a22b-instruct-2507','messages'=>$body,'max_tokens'=>$maxTok,'temperature'=>0.7])
]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
if ($code == 200 && $r) {
@@ -67,7 +72,7 @@ if (!$resp) {
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 6, CURLOPT_CONNECTTIMEOUT => 2,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Authorization: Bearer '.SAMBANOVA_KEY],
CURLOPT_POSTFIELDS => json_encode(['model'=>'Meta-Llama-3.3-70B-Instruct','messages'=>$body,'max_tokens'=>800])
CURLOPT_POSTFIELDS => json_encode(['model'=>'Meta-Llama-3.3-70B-Instruct','messages'=>$body,'max_tokens'=>$maxTok])
]);
$r = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
if ($code == 200 && $r) {

View File

@@ -21,7 +21,7 @@
</style>
</head><body>
<nav><a href="/products/" class="logo">WE<span>VAL</span></a><div class="nav-links"><a href="#features">Fonctionnalités</a><a href="#pricing">Tarifs</a><a href="#cta">Essayer</a><a href="/products/workspace.html" class="btn-n">Workspace</a></div></nav>
<section class="hero"><div class="badge">Cloud Cost Optimisation — Multi-provider</div><h1>CloudCost — <em>Optimisation Couts Cloud</em></h1><p class="sub">Analysez et optimisez vos dépenses cloud. AWS, Azure, GCP, OVH, Scaleway — identifiez les economies et éliminéz le gaspillage.</p><div class="btns"><a href="#cta" class="btn-p">Essayer gratuitement</a><a href="#features" class="btn-o">Découvrir</a></div><div class="stats"><div class="stat"><div class="stat-v">40%</div><div class="stat-l">Economies moyennes</div></div><div class="stat"><div class="stat-v">5+</div><div class="stat-l">Providers</div></div><div class="stat"><div class="stat-v">< 1h</div><div class="stat-l">Premier audit</div></div></div></section><section class="sec" id="features"><div class="stag">Fonctionnalités</div><h2>Tout ce dont vous avez besoin</h2><div class="sd">CloudCost combiné IA et expertise pour automatiser vos taches.</div><div class="g3"><div class="cd"><div class="cd-i">💰</div><h3>Cost Analysis</h3><p>Analyse détaillée des dépenses par service, region et équipe.</p></div><div class="cd"><div class="cd-i">📊</div><h3>Dashboard</h3><p>Vue consolidee multi-provider : AWS, Azure, GCP, OVH, Scaleway.</p></div><div class="cd"><div class="cd-i">🔍</div><h3>Waste Detection</h3><p>Détection automatique des ressources inutilisees ou surdimensionnees.</p></div><div class="cd"><div class="cd-i">📈</div><h3>Recommandations</h3><p>Recommandations IA pour Reserved Instances, Spot, rightsizing.</p></div><div class="cd"><div class="cd-i">🔔</div><h3>Alertes Budget</h3><p>Alertes en temps réel si les dépenses depassent les seuils definis.</p></div><div class="cd"><div class="cd-i">📋</div><h3>Rapports FinOps</h3><p>Rapports mensuels FinOps avec ROI des optimisations appliquees.</p></div><div class="cd"><div class="cd-i">👥</div><h3>Cost Allocation</h3><p>Attribution des coûts par équipe, projet et environnement.</p></div><div class="cd"><div class="cd-i">📅</div><h3>Forecasting</h3><p>Previsions de dépenses sur 3-12 mois avec scenarios.</p></div><div class="cd"><div class="cd-i"></div><h3>Auto-Optimize</h3><p>Arret automatique des ressources dev/staging hors heures ouvrables.</p></div></div></section><section class="sec"><div class="stag">Comment ca marche</div><h2>Simple comme 1-2-3-4</h2><div class="steps"><div class="step"><div class="step-n">1</div><h3>Connectez vos comptes</h3><p>AWS, Azure, GCP, OVH — connexion read-only securisee.</p></div><div class="step"><div class="step-n">2</div><h3>Analyse</h3><p>Scan complet des dépenses et detection du gaspillage.</p></div><div class="step"><div class="step-n">3</div><h3>Recommandations</h3><p>Plan d'optimisation avec economies estimees.</p></div><div class="step"><div class="step-n">4</div><h3>Optimisez</h3><p>Appliquez les recommandations et suivez les economies.</p></div></div></section><section class="sec" id="pricing"><div class="stag">Tarifs</div><h2>Un plan pour chaque besoin</h2><div class="pg"><div class="pr"><div class="pr-name">Starter</div><div class="pr-amt">Gratuit</div><ul class="pr-list"><li>1 provider</li><li>Dashboard basique</li><li>Alertes budget</li><li>Recommandations manuelles</li></ul><a href="#cta" class="btn-l">Commencer</a></div><div class="pr pop"><div class="pr-name">Pro</div><div class="pr-amt">149EUR<sub>/mois</sub></div><ul class="pr-list"><li>5 providers</li><li>Waste detection</li><li>Auto-optimize</li><li>Rapports FinOps</li><li>Forecasting</li><li>Support prioritaire</li></ul><a href="#cta" class="btn-f">Commencer</a></div><div class="pr"><div class="pr-name">Enterprise</div><div class="pr-amt">Sur mesure</div><ul class="pr-list"><li>Providers illimités</li><li>API complete</li><li>Custom rules</li><li>Multi-org</li><li>Account manager</li><li>SLA</li></ul><a href="#cta" class="btn-l">Nous contacter</a></div></div></section>
<section class="hero"><div class="badge">Cloud Cost Optimisation — Multi-provider</div><h1>CloudCost — <em>Optimisation Couts Cloud</em></h1><p class="sub">Analysez et optimisez vos dépenses cloud. AWS, Azure, GCP, OVH, Scaleway, Huawei Cloud — identifiez les economies et éliminéz le gaspillage.</p><div class="btns"><a href="#cta" class="btn-p">Essayer gratuitement</a><a href="#features" class="btn-o">Découvrir</a></div><div class="stats"><div class="stat"><div class="stat-v">40%</div><div class="stat-l">Economies moyennes</div></div><div class="stat"><div class="stat-v">5+</div><div class="stat-l">Providers</div></div><div class="stat"><div class="stat-v">< 1h</div><div class="stat-l">Premier audit</div></div></div></section><section class="sec" id="features"><div class="stag">Fonctionnalités</div><h2>Tout ce dont vous avez besoin</h2><div class="sd">CloudCost combiné IA et expertise pour automatiser vos taches.</div><div class="g3"><div class="cd"><div class="cd-i">💰</div><h3>Cost Analysis</h3><p>Analyse détaillée des dépenses par service, region et équipe.</p></div><div class="cd"><div class="cd-i">📊</div><h3>Dashboard</h3><p>Vue consolidee multi-provider : AWS, Azure, GCP, OVH, Scaleway, Huawei Cloud.</p></div><div class="cd"><div class="cd-i">🔍</div><h3>Waste Detection</h3><p>Détection automatique des ressources inutilisees ou surdimensionnees.</p></div><div class="cd"><div class="cd-i">📈</div><h3>Recommandations</h3><p>Recommandations IA pour Reserved Instances, Spot, rightsizing.</p></div><div class="cd"><div class="cd-i">🔔</div><h3>Alertes Budget</h3><p>Alertes en temps réel si les dépenses depassent les seuils definis.</p></div><div class="cd"><div class="cd-i">📋</div><h3>Rapports FinOps</h3><p>Rapports mensuels FinOps avec ROI des optimisations appliquees.</p></div><div class="cd"><div class="cd-i">👥</div><h3>Cost Allocation</h3><p>Attribution des coûts par équipe, projet et environnement.</p></div><div class="cd"><div class="cd-i">📅</div><h3>Forecasting</h3><p>Previsions de dépenses sur 3-12 mois avec scenarios.</p></div><div class="cd"><div class="cd-i"></div><h3>Auto-Optimize</h3><p>Arret automatique des ressources dev/staging hors heures ouvrables.</p></div></div></section><section class="sec"><div class="stag">Comment ca marche</div><h2>Simple comme 1-2-3-4</h2><div class="steps"><div class="step"><div class="step-n">1</div><h3>Connectez vos comptes</h3><p>AWS, Azure, GCP, OVH — connexion read-only securisee.</p></div><div class="step"><div class="step-n">2</div><h3>Analyse</h3><p>Scan complet des dépenses et detection du gaspillage.</p></div><div class="step"><div class="step-n">3</div><h3>Recommandations</h3><p>Plan d'optimisation avec economies estimees.</p></div><div class="step"><div class="step-n">4</div><h3>Optimisez</h3><p>Appliquez les recommandations et suivez les economies.</p></div></div></section><section class="sec" id="pricing"><div class="stag">Tarifs</div><h2>Un plan pour chaque besoin</h2><div class="pg"><div class="pr"><div class="pr-name">Starter</div><div class="pr-amt">Gratuit</div><ul class="pr-list"><li>1 provider</li><li>Dashboard basique</li><li>Alertes budget</li><li>Recommandations manuelles</li></ul><a href="#cta" class="btn-l">Commencer</a></div><div class="pr pop"><div class="pr-name">Pro</div><div class="pr-amt">149EUR<sub>/mois</sub></div><ul class="pr-list"><li>5 providers</li><li>Waste detection</li><li>Auto-optimize</li><li>Rapports FinOps</li><li>Forecasting</li><li>Support prioritaire</li></ul><a href="#cta" class="btn-f">Commencer</a></div><div class="pr"><div class="pr-name">Enterprise</div><div class="pr-amt">Sur mesure</div><ul class="pr-list"><li>Providers illimités</li><li>API complete</li><li>Custom rules</li><li>Multi-org</li><li>Account manager</li><li>SLA</li></ul><a href="#cta" class="btn-l">Nous contacter</a></div></div></section>
<div class="dm-box" id="demo"><h3>⚡ Optimisation — Demo Live</h3>
<div class="dm-row"><input id="dm-cloudcost" placeholder="Décrivez votre infra cloud" onkeydown="if(event.key==='Enter')dm_cloudcost()"><button onclick="dm_cloudcost()">Tester</button></div>
@@ -39,9 +39,9 @@ async function dm_cloudcost(){
}catch(e){o.innerHTML="Erreur: "+e.message}
}
</script>
<section class="cta"><h2>Prêt à essayer CloudCost ?</h2><p>Testez gratuitement.</p><a href="#cta" class="btn-p">Essayer maintenant</a></section><section class="chat-sec" id="chat"><div class="stag">Essayer</div><h2>Testez CloudCost</h2><div class="sd">Posez votre question.</div><div class="chat-box"><div class="chat-hd"><div class="chat-hd-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg></div><div><h3>CloudCost</h3><small>Optimisation Couts Cloud</small></div></div><div class="chat-msgs" id="chat-msgs"><div class="chat-empty" id="chat-empty"><h4>Bienvenue sur CloudCost</h4><p>Analysez et optimisez vos dépenses cloud. AWS, Azure, GCP, OVH, Scaleway — identifiez les economies et éliminéz le gaspillage.</p><div class="chat-sug"><button onclick="sg('Analyse mes dépenses AWS du dernier mois et identifié les economies')">Audit AWS</button><button onclick="sg('Quand utiliser Reserved Instances vs Spot Instances sur AWS')">Reserved vs Spot</button><button onclick="sg('Comment reduire ma facture cloud Azure de 30% sans perdre en perf')">Reduire facture</button></div></div></div><div class="chat-input"><textarea id="chat-i" rows="1" placeholder="Posez votre question..." onkeydown="if(event.key==='Enter'&&!event.shiftKey){event.preventDefault();send()}" oninput="this.style.height='40px';this.style.height=Math.min(this.scrollHeight,120)+'px'"></textarea><button onclick="send()">Envoyer</button></div></div></section>
<section class="cta"><h2>Prêt à essayer CloudCost ?</h2><p>Testez gratuitement.</p><a href="#cta" class="btn-p">Essayer maintenant</a></section><section class="chat-sec" id="chat"><div class="stag">Essayer</div><h2>Testez CloudCost</h2><div class="sd">Posez votre question.</div><div class="chat-box"><div class="chat-hd"><div class="chat-hd-i"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg></div><div><h3>CloudCost</h3><small>Optimisation Couts Cloud</small></div></div><div class="chat-msgs" id="chat-msgs"><div class="chat-empty" id="chat-empty"><h4>Bienvenue sur CloudCost</h4><p>Analysez et optimisez vos dépenses cloud. AWS, Azure, GCP, OVH, Scaleway, Huawei Cloud — identifiez les economies et éliminéz le gaspillage.</p><div class="chat-sug"><button onclick="sg('Analyse mes dépenses AWS du dernier mois et identifié les economies')">Audit AWS</button><button onclick="sg('Quand utiliser Reserved Instances vs Spot Instances sur AWS')">Reserved vs Spot</button><button onclick="sg('Comment reduire ma facture cloud Azure de 30% sans perdre en perf')">Reduire facture</button></div></div></div><div class="chat-input"><textarea id="chat-i" rows="1" placeholder="Posez votre question..." onkeydown="if(event.key==='Enter'&&!event.shiftKey){event.preventDefault();send()}" oninput="this.style.height='40px';this.style.height=Math.min(this.scrollHeight,120)+'px'"></textarea><button onclick="send()">Envoyer</button></div></div></section>
<footer><div>&copy; 2026 <a href="/products/">WEVAL Consulting</a></div><div><a href="/products/workspace.html">Workspace</a></div></footer>
<script>const CTX="Tu es CloudCost, expert en optimisation des coûts cloud et FinOps. Aide a analyser les dépenses AWS, Azure, GCP, OVH, Scaleway et recommander des economies.";let hist=[];function esc(s){const d=document.createElement('div');d.textContent=s;return d.innerHTML}function md(m){return m.replace(/```[\w]*\n([\s\S]*?)```/g,'<pre>$1</pre>').replace(/\*\*(.*?)\*\*/g,'<strong>$1</strong>').replace(/`(.*?)`/g,'<code>$1</code>').replace(/\n\n/g,'<br><br>')}function sg(q){document.getElementById('chat-i').value=q;send()}async function send(){const i=document.getElementById('chat-i'),m=i.value.trim();if(!m)return;const a=document.getElementById('chat-msgs'),es=document.getElementById('chat-empty');if(es)es.remove();a.innerHTML+='<div class="msg-u">'+esc(m)+'</div>';i.value='';i.style.height='40px';a.scrollTop=a.scrollHeight;const lid='l'+Date.now();a.innerHTML+='<div class="msg-a" id="'+lid+'"><span class="ld"></span><span class="ld"></span><span class="ld"></span></div>';a.scrollTop=a.scrollHeight;var _pb=weviaProgress(document.getElementById(lid),Date.now());try{hist.push({role:'user',content:m});const r=await fetch('/api/weval-ia-fast.php',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:'[INSTRUCTION SYSTEME: '+CTX+']\n\nDemande utilisateur: '+m,mode:'full',history:hist.slice(-6)})});const j=await r.json();const rp=j.response||j.error||'Erreur';hist.push({role:'assistant',content:rp});const el=document.getElementById(lid);if(el)el.outerHTML='<div class="msg-a">'+md(rp)+'</div>';}catch(ex){const el=document.getElementById(lid);if(el)el.outerHTML='<div class="msg-a" style="border-color:rgba(248,113,113,.3);color:#f87171">Erreur: '+ex.message+'</div>';}a.scrollTop=a.scrollHeight;}</script><div style="display:flex;gap:2rem;justify-content:center;flex-wrap:wrap;padding:1.5rem 4%;background:rgba(255,255,255,.02);border-top:1px solid rgba(255,255,255,.04);margin:2rem 0"><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">44</strong> produits SaaS</div><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">Cloud</strong> souverain</div><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">API</strong> REST</div><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">RGPD</strong> conforme</div><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">France</strong> · Maroc · États-Unis · International</div></div>
<script>const CTX="Tu es CloudCost, expert en optimisation des coûts cloud et FinOps. Aide a analyser les dépenses AWS, Azure, GCP, OVH, Scaleway, Huawei Cloud et recommander des economies.";let hist=[];function esc(s){const d=document.createElement('div');d.textContent=s;return d.innerHTML}function md(m){return m.replace(/```[\w]*\n([\s\S]*?)```/g,'<pre>$1</pre>').replace(/\*\*(.*?)\*\*/g,'<strong>$1</strong>').replace(/`(.*?)`/g,'<code>$1</code>').replace(/\n\n/g,'<br><br>')}function sg(q){document.getElementById('chat-i').value=q;send()}async function send(){const i=document.getElementById('chat-i'),m=i.value.trim();if(!m)return;const a=document.getElementById('chat-msgs'),es=document.getElementById('chat-empty');if(es)es.remove();a.innerHTML+='<div class="msg-u">'+esc(m)+'</div>';i.value='';i.style.height='40px';a.scrollTop=a.scrollHeight;const lid='l'+Date.now();a.innerHTML+='<div class="msg-a" id="'+lid+'"><span class="ld"></span><span class="ld"></span><span class="ld"></span></div>';a.scrollTop=a.scrollHeight;var _pb=weviaProgress(document.getElementById(lid),Date.now());try{hist.push({role:'user',content:m});const r=await fetch('/api/weval-ia-fast.php',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:'[INSTRUCTION SYSTEME: '+CTX+']\n\nDemande utilisateur: '+m,mode:'full',history:hist.slice(-6)})});const j=await r.json();const rp=j.response||j.error||'Erreur';hist.push({role:'assistant',content:rp});const el=document.getElementById(lid);if(el)el.outerHTML='<div class="msg-a">'+md(rp)+'</div>';}catch(ex){const el=document.getElementById(lid);if(el)el.outerHTML='<div class="msg-a" style="border-color:rgba(248,113,113,.3);color:#f87171">Erreur: '+ex.message+'</div>';}a.scrollTop=a.scrollHeight;}</script><div style="display:flex;gap:2rem;justify-content:center;flex-wrap:wrap;padding:1.5rem 4%;background:rgba(255,255,255,.02);border-top:1px solid rgba(255,255,255,.04);margin:2rem 0"><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">44</strong> produits SaaS</div><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">Cloud</strong> souverain</div><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">API</strong> REST</div><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">RGPD</strong> conforme</div><div style="display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#7a8ba5"><strong style="color:#edf2f7">France</strong> · Maroc · États-Unis · International</div></div>
<div id="cta" style="max-width:600px;margin:2rem auto;padding:0 4%">
<div style="background:#0c1222;border:1px solid rgba(99,102,241,.15);border-radius:14px;padding:1.5rem">
<h3 style="font-size:1rem;font-weight:700;margin-bottom:.8rem;color:#818cf8">Demander un accès</h3>
@@ -71,4 +71,18 @@ function weviaProgress(container,startMs){
return {el:el,stop:function(){clearInterval(iv);bar.style.width='100%';txt.textContent='Termine!';}};
}
</script>
<section style="padding:60px 20px;max-width:900px;margin:0 auto;text-align:center">
<div style="background:linear-gradient(135deg,#0b0d14,#1a1f35);border:1px solid rgba(255,255,255,.08);border-radius:20px;padding:48px 40px">
<img src="/assets/huawei-cloud-logo.png" alt="Huawei Cloud" style="height:48px;margin-bottom:24px">
<h2 style="font-size:28px;font-weight:800;color:#f1f5f9;margin-bottom:12px">Partenaire Huawei Cloud</h2>
<p style="color:#94a3b8;font-size:15px;margin-bottom:24px;max-width:600px;margin-left:auto;margin-right:auto">WEVAL Consulting est revendeur officiel Huawei Cloud pour le Maghreb. ECS, GPU, Object Storage, CDN — tarifs négociés et support dédié en français.</p>
<div style="display:flex;gap:24px;justify-content:center;flex-wrap:wrap;margin-bottom:32px">
<div style="background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px 24px;min-width:140px"><div style="font-size:22px;font-weight:700;color:#d4a843">61</div><div style="font-size:11px;color:#94a3b8">Resellers actifs</div></div>
<div style="background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px 24px;min-width:140px"><div style="font-size:22px;font-weight:700;color:#60a5fa">3</div><div style="font-size:11px;color:#94a3b8">Pays couverts</div></div>
<div style="background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px 24px;min-width:140px"><div style="font-size:22px;font-weight:700;color:#34d399">15%</div><div style="font-size:11px;color:#94a3b8">Remise partenaire</div></div>
</div>
<a href="/products/cloud-providers.html" style="display:inline-block;background:linear-gradient(135deg,#e53e3e,#c53030);color:#fff;padding:14px 36px;border-radius:12px;font-weight:700;text-decoration:none;font-size:15px;transition:transform .15s">Commander Huawei Cloud</a>
</div>
</section>
</body></html>

View File

@@ -332,6 +332,65 @@ function go(page){
// SET IFRAME SRC — simple, direct, no conditions
$('frameView').src=mod[1]+(mod[1].includes('?')?'&':'?')+'_t='+Date.now();
// Dark-mode injection for product iframes
$('frameView').addEventListener('load', function(){
try {
var doc = this.contentDocument || this.contentWindow.document;
if (!doc) return;
var s = doc.createElement('style');
s.textContent = `
.in-iframe { background: #0b0d14 !important; color: #e2e8f0 !important; }
.in-iframe body { background: #0b0d14 !important; color: #e2e8f0 !important; }
.in-iframe section { background: transparent !important; }
.in-iframe .hero { background: transparent !important; }
.in-iframe h1, .in-iframe h2, .in-iframe h3 { color: #f1f5f9 !important; }
.in-iframe p, .in-iframe li, .in-iframe span { color: #94a3b8 !important; }
.in-iframe b, .in-iframe strong { color: #e2e8f0 !important; }
.in-iframe em { color: #d4a843 !important; }
.in-iframe .badge { background: rgba(212,168,67,.1) !important; color: #d4a843 !important; border: 1px solid rgba(212,168,67,.2) !important; }
.in-iframe input, .in-iframe textarea, .in-iframe select { background: #111827 !important; color: #e2e8f0 !important; border-color: #1e293b !important; }
.in-iframe .plan-card, .in-iframe .pricing-card, .in-iframe .tier-card, .in-iframe [class*="plan"], .in-iframe [class*="tier"], .in-iframe [class*="pricing"] {
background: linear-gradient(135deg, #111827, #0f172a) !important;
border: 1px solid #1e293b !important;
color: #e2e8f0 !important;
border-radius: 16px !important;
}
.in-iframe .feat, .in-iframe .feature, .in-iframe [class*="feat"] {
background: linear-gradient(135deg, #111827, #0f172a) !important;
border: 1px solid #1e293b !important;
border-radius: 12px !important;
}
.in-iframe .btn-p, .in-iframe .cta-btn, .in-iframe [class*="btn-p"] {
background: linear-gradient(135deg, #d4a843, #b8942e) !important;
color: #0a0d13 !important;
border: none !important;
border-radius: 12px !important;
font-weight: 700 !important;
}
.in-iframe .btn-o, .in-iframe [class*="btn-o"], .in-iframe [class*="btn-n"] {
background: transparent !important;
color: #94a3b8 !important;
border: 1px solid #334155 !important;
border-radius: 12px !important;
}
.in-iframe .stat-v, .in-iframe .stat b { color: #d4a843 !important; }
.in-iframe .stat-l, .in-iframe .stat small { color: #64748b !important; }
.in-iframe .stat { background: rgba(255,255,255,.03) !important; border: 1px solid #1e293b !important; border-radius: 12px !important; }
.in-iframe a { color: #60a5fa !important; }
.in-iframe code, .in-iframe pre { background: #1e293b !important; color: #e2e8f0 !important; }
.in-iframe hr { border-color: #1e293b !important; }
.in-iframe table { border-color: #1e293b !important; }
.in-iframe th { background: #111827 !important; color: #94a3b8 !important; border-color: #1e293b !important; }
.in-iframe td { border-color: #1e293b !important; color: #e2e8f0 !important; }
.in-iframe tr:hover { background: rgba(129,140,248,.05) !important; }
.in-iframe ::placeholder { color: #475569 !important; }
.in-iframe .sub { color: #64748b !important; }
`;
doc.head.appendChild(s);
} catch(e) {}
});
}
// HOME DASHBOARD