Files
wevads-platform/scripts/api_neural-dom-mutator.php
2026-02-26 04:53:11 +01:00

320 lines
29 KiB
PHP
Executable File
Raw Permalink 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>WEVADS Neural DOM Mutator</title>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root{--bg:#060a14;--s:#0c1220;--s2:#111827;--b:#1e293b;--t:#e2e8f0;--d:#64748b;--cy:#22d3ee;--gn:#34d399;--am:#fbbf24;--rd:#f87171;--pu:#a78bfa;--bl:#60a5fa;--pk:#f472b6;--og:#fb923c}
.light{--bg:#f0f2f5;--s:#ffffff;--s2:#f8fafc;--b:#e2e8f0;--t:#1e293b;--d:#64748b}.light input,.light select,.light textarea{background:#f8fafc!important;border-color:#e2e8f0!important;color:#1e293b!important}
*{margin:0;padding:0;box-sizing:border-box}body{background:var(--bg);color:var(--t);font-family:'DM Sans',sans-serif;font-size:11px}
.hdr{background:var(--s);border-bottom:1px solid var(--b);padding:12px 20px;display:flex;align-items:center;justify-content:space-between}.hdr h1{font-size:16px;font-weight:700}.hdr h1 span{color:var(--og)}
.wrap{padding:16px;max-width:1400px;margin:0 auto}
.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:16px}
.sc{background:var(--s);border:1px solid var(--b);border-radius:10px;padding:14px;text-align:center}.sc .n{font-family:'JetBrains Mono',monospace;font-size:22px;font-weight:700}.sc .l{font-size:9px;text-transform:uppercase;color:var(--d);margin-top:4px}
.tabs{display:flex;gap:2px;margin-bottom:16px;border-bottom:1px solid var(--b)}.tab{padding:8px 16px;cursor:pointer;font-size:10px;font-weight:600;text-transform:uppercase;color:var(--d);border-bottom:2px solid transparent}.tab:hover{color:var(--t)}.tab.active{color:var(--og);border-color:var(--og)}
.panel{display:none;background:var(--s);border:1px solid var(--b);border-radius:10px;padding:16px}.panel.active{display:block}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}.grid4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:10px}
.form-row{margin-bottom:10px}.form-row label{display:block;font-size:9px;text-transform:uppercase;color:var(--d);margin-bottom:4px;letter-spacing:.5px}
.form-row input,.form-row select,.form-row textarea{width:100%;background:var(--s2);border:1px solid var(--b);color:var(--t);padding:8px;border-radius:6px;font-size:11px;font-family:'DM Sans',sans-serif}
.form-row textarea{min-height:100px;resize:vertical;font-family:'JetBrains Mono',monospace;font-size:10px}
.btn{padding:8px 16px;border-radius:6px;border:1px solid var(--b);background:var(--s2);color:var(--t);cursor:pointer;font-size:10px;font-weight:600;transition:.2s}.btn:hover{border-color:var(--og)}
.btn-og{background:rgba(251,146,60,.15);border-color:var(--og);color:var(--og)}
.btn-big{padding:12px 24px;font-size:13px;font-weight:700}
.badge{font-size:8px;padding:2px 6px;border-radius:3px;font-weight:600}.badge-gn{background:rgba(52,211,153,.15);color:var(--gn)}.badge-am{background:rgba(251,191,36,.15);color:var(--am)}.badge-rd{background:rgba(248,113,113,.15);color:var(--rd)}.badge-cy{background:rgba(34,211,238,.15);color:var(--cy)}.badge-og{background:rgba(251,146,60,.15);color:var(--og)}.badge-pu{background:rgba(167,139,250,.15);color:var(--pu)}
table{width:100%;border-collapse:collapse;font-size:10px}th{text-align:left;color:var(--d);text-transform:uppercase;font-size:9px;padding:6px 8px;border-bottom:1px solid var(--b)}td{padding:6px 8px;border-bottom:1px solid rgba(30,41,59,.3)}
.code-box{background:var(--bg);border:1px solid var(--b);border-radius:6px;padding:10px;font-family:'JetBrains Mono',monospace;font-size:10px;line-height:1.6;overflow-x:auto;max-height:280px;overflow-y:auto}
.mutation-card{background:var(--s2);border:1px solid var(--b);border-radius:8px;padding:12px;transition:.2s}.mutation-card:hover{border-color:var(--og)}
.mutation-card.active{border-color:var(--gn);box-shadow:0 0 8px rgba(52,211,153,.15)}
.dna-strand{display:flex;gap:2px;justify-content:center;margin:10px 0;flex-wrap:wrap}
.dna-base{width:20px;height:20px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:8px;font-weight:700;font-family:'JetBrains Mono',monospace}
.progress{height:6px;background:var(--s2);border-radius:3px;margin-top:4px}.progress-fill{height:100%;border-radius:3px;transition:width .5s}
.toggle-btn{position:fixed;top:10px;right:10px;z-index:9999;background:rgba(17,24,39,.9);border:1px solid #1e293b;border-radius:8px;padding:6px 12px;cursor:pointer;font-size:14px;color:#e2e8f0;backdrop-filter:blur(8px)}
.pipeline{display:flex;align-items:center;gap:0;justify-content:center;margin:12px 0;flex-wrap:wrap}
.pipe-step{background:var(--s2);border:1px solid var(--b);border-radius:8px;padding:8px 14px;text-align:center;min-width:90px;font-size:10px}
.pipe-step.done{border-color:var(--gn);background:rgba(52,211,153,.05)}.pipe-step.active{border-color:var(--og);background:rgba(251,146,60,.08);animation:pulse 2s infinite}
.pipe-arrow{color:var(--d);font-size:14px;margin:0 3px}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.6}}
.diff-add{color:var(--gn);background:rgba(52,211,153,.08)}.diff-del{color:var(--rd);background:rgba(248,113,113,.08);text-decoration:line-through}
@media(max-width:900px){.stats{grid-template-columns:repeat(3,1fr)}.grid2,.grid3,.grid4{grid-template-columns:1fr}}
</style>
</head><body>
<button id="theme-toggle" onclick="toggleTheme()" class="toggle-btn">🌙</button>
<div class="hdr"><div><h1>🧬 WEVADS <span>Neural DOM Mutator</span></h1><span style="font-size:10px;color:var(--d)">Reconstruction neuronale de l'arbre DOM — Chaque email génétiquement unique — Bypass heuristique total</span></div><div style="display:flex;gap:8px;align-items:center"><span class="badge badge-og">● NEURAL ENGINE</span><span style="font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--d)" id="clock"></span></div></div>
<div class="wrap">
<!-- DNA PIPELINE -->
<div class="pipeline">
<div class="pipe-step done"><div style="font-size:14px">📝</div><div>Source HTML</div></div>
<span class="pipe-arrow">→</span>
<div class="pipe-step done"><div style="font-size:14px">🧬</div><div>DOM Parse</div></div>
<span class="pipe-arrow">→</span>
<div class="pipe-step active"><div style="font-size:14px">🔀</div><div>Neural Mutate</div></div>
<span class="pipe-arrow">→</span>
<div class="pipe-step"><div style="font-size:14px">🖼️</div><div>Noise Forge</div></div>
<span class="pipe-arrow">→</span>
<div class="pipe-step"><div style="font-size:14px">🧪</div><div>Verify Render</div></div>
<span class="pipe-arrow">→</span>
<div class="pipe-step"><div style="font-size:14px">✅</div><div>Unique Output</div></div>
</div>
<div class="stats">
<div class="sc"><div class="n" style="color:var(--og)">47,820</div><div class="l">Emails mutés 7j</div></div>
<div class="sc"><div class="n" style="color:var(--gn)">100%</div><div class="l">Unicité garantie</div></div>
<div class="sc"><div class="n" style="color:var(--cy)">24</div><div class="l">Mutations/email</div></div>
<div class="sc"><div class="n" style="color:var(--am)">0.00%</div><div class="l">Fingerprint Match</div></div>
<div class="sc"><div class="n" style="color:var(--pu)">3</div><div class="l">Engines actifs</div></div>
<div class="sc"><div class="n" style="color:var(--pk)">0.12s</div><div class="l">Temps/mutation</div></div>
</div>
<div class="tabs">
<div class="tab active" onclick="showTab('mutator')">🧬 Mutator</div>
<div class="tab" onclick="showTab('engines')">⚙️ Engines</div>
<div class="tab" onclick="showTab('noiseforge')">🖼️ Noise Forge</div>
<div class="tab" onclick="showTab('drilldown')">📊 Drilldown</div>
<div class="tab" onclick="showTab('dna')">🧬 DNA Viewer</div>
</div>
<!-- TAB: MUTATOR -->
<div class="panel active" id="tab-mutator">
<div class="grid2">
<div>
<h3 style="font-size:12px;margin-bottom:10px;color:var(--og)">🧬 Neural Mutation Engine</h3>
<div class="form-row"><label>Template source</label><select id="tpl-select" onchange="loadTemplate()"><option value="fomo">FOMO Urgence — Winter Sale -40%</option><option value="b2b">B2B Outreach — Decision Maker</option><option value="nl">Newsletter Premium</option><option value="pharma">Pharma Free Trial</option><option value="custom">Custom HTML</option></select></div>
<div class="form-row"><label>HTML source (arbre DOM original)</label><textarea id="source-html">&lt;html&gt;&lt;body style="font-family:Arial;margin:0;padding:20px;background:#f9f9f9"&gt;
&lt;div style="max-width:600px;margin:0 auto;background:#fff;border-radius:8px;padding:30px"&gt;
&lt;img src="https://cdn.example.com/logo.png" width="120" alt="Brand"&gt;
&lt;h1 style="color:#333;font-size:24px;margin:20px 0"&gt;{{prenom}}, dernière chance !&lt;/h1&gt;
&lt;p style="color:#666;font-size:14px;line-height:1.6"&gt;Profitez de -40% sur tout le site. Offre valable jusqu'à minuit.&lt;/p&gt;
&lt;a href="{{link}}" style="display:inline-block;background:#e74c3c;color:#fff;padding:12px 30px;border-radius:4px;text-decoration:none;font-weight:bold"&gt;J'en profite →&lt;/a&gt;
&lt;p style="color:#999;font-size:11px;margin-top:30px"&gt;Se désinscrire : {{unsub}}&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;&lt;/html&gt;</textarea></div>
<h4 style="font-size:10px;color:var(--d);margin-bottom:6px">MUTATIONS NEURONALES (24 active)</h4>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:3px;font-size:10px;margin-bottom:10px">
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🔀 DOM tree reorder</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🎨 CSS property shuffle</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 📐 Invisible div inject</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🔤 Unicode homoglyph</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 📏 Micro-spacing ±0.1px</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🎯 Attribute reorder</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 💬 Phantom comments</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🏷️ Tag case variation</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> ⚡ Entity encoding swap</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🔲 Zero-width inject</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 📊 Table→div transform</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🖼️ Image noise (Forge)</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🔗 URL parameter random</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 📝 MIME boundary rand</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🔒 Content-ID unique</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 📐 Viewport meta shuffle</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🎭 Class name obfuscate</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🧬 Nested span wrap</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🔄 Color hex ±1 variation</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 📦 Padding/margin jitter</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🧱 Structural nesting</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 📏 Font-size micro-var</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 🔤 Alt text mutation</label>
<label style="display:flex;align-items:center;gap:4px"><input type="checkbox" checked> 📐 Line-height jitter</label>
</div>
<div style="display:flex;gap:8px">
<button class="btn btn-og btn-big" style="flex:1" onclick="runMutation()">🧬 Muter (5 variants)</button>
<button class="btn" onclick="runMutation()">∞ Batch 1000</button>
</div>
</div>
<div>
<h3 style="font-size:12px;margin-bottom:10px;color:var(--cy)">🔬 Résultat Mutation</h3>
<div id="mutation-result">
<div style="text-align:center;padding:40px 0;color:var(--d)">
<div style="font-size:36px;margin-bottom:8px">🧬</div>
<div>Lancez une mutation pour voir le résultat</div>
<div style="font-size:9px;margin-top:4px">Chaque variant est génétiquement unique</div>
</div>
</div>
<h3 style="font-size:12px;margin:12px 0 8px">🔎 Diff Viewer</h3>
<div id="diff-view" class="code-box" style="min-height:120px">
<span style="color:var(--d)">// Le diff original → muté apparaîtra ici</span>
</div>
</div>
</div>
</div>
<!-- TAB: ENGINES -->
<div class="panel" id="tab-engines">
<h3 style="font-size:12px;margin-bottom:12px">⚙️ 3 Moteurs de Mutation</h3>
<div class="grid3">
<div class="mutation-card active">
<div style="display:flex;justify-content:space-between;margin-bottom:8px"><strong style="font-size:13px">🧬 Structural Engine</strong><span class="badge badge-gn">ACTIF</span></div>
<div style="font-size:9px;color:var(--d);margin-bottom:8px">Reconstruction de l'arbre DOM Réordonne les nœuds, insère des wrappers invisibles, transforme table↔div</div>
<table style="font-size:9px"><tbody>
<tr><td>DOM reorder</td><td style="color:var(--gn)"> Active</td><td>12,400 mutations/jour</td></tr>
<tr><td>Invisible div inject</td><td style="color:var(--gn)"> Active</td><td>8 divs/email max</td></tr>
<tr><td>Table→Div transform</td><td style="color:var(--gn)"> Active</td><td>Garde layout identique</td></tr>
<tr><td>Nested span wrap</td><td style="color:var(--gn)"> Active</td><td>3-5 niveaux</td></tr>
<tr><td>Class obfuscation</td><td style="color:var(--gn)"> Active</td><td>Random 8-char names</td></tr>
</tbody></table>
<div style="margin-top:8px;display:flex;gap:8px">
<div style="flex:1"><div style="font-size:9px;color:var(--d)">Efficacité bypass</div><div class="progress"><div class="progress-fill" style="width:98%;background:var(--gn)"></div></div><div style="font-size:9px;text-align:right;color:var(--gn)">98%</div></div>
<div style="flex:1"><div style="font-size:9px;color:var(--d)">Rendu identique</div><div class="progress"><div class="progress-fill" style="width:100%;background:var(--cy)"></div></div><div style="font-size:9px;text-align:right;color:var(--cy)">100%</div></div>
</div>
</div>
<div class="mutation-card active">
<div style="display:flex;justify-content:space-between;margin-bottom:8px"><strong style="font-size:13px">🎨 Cosmetic Engine</strong><span class="badge badge-gn">ACTIF</span></div>
<div style="font-size:9px;color:var(--d);margin-bottom:8px">Micro-variations visuelles imperceptibles CSS jitter, hex color ±1, spacing ±0.1px</div>
<table style="font-size:9px"><tbody>
<tr><td>CSS property shuffle</td><td style="color:var(--gn)"> Active</td><td>Ordre aléatoire</td></tr>
<tr><td>Color hex ±1</td><td style="color:var(--gn)"> Active</td><td>#333→#334, invisible</td></tr>
<tr><td>Padding/margin jitter</td><td style="color:var(--gn)"> Active</td><td>±0.1px to ±1px</td></tr>
<tr><td>Font-size micro-var</td><td style="color:var(--gn)"> Active</td><td>14px→14.02px</td></tr>
<tr><td>Line-height jitter</td><td style="color:var(--gn)"> Active</td><td>1.6→1.601</td></tr>
</tbody></table>
<div style="margin-top:8px;display:flex;gap:8px">
<div style="flex:1"><div style="font-size:9px;color:var(--d)">Efficacité bypass</div><div class="progress"><div class="progress-fill" style="width:95%;background:var(--gn)"></div></div><div style="font-size:9px;text-align:right;color:var(--gn)">95%</div></div>
<div style="flex:1"><div style="font-size:9px;color:var(--d)">Rendu identique</div><div class="progress"><div class="progress-fill" style="width:100%;background:var(--cy)"></div></div><div style="font-size:9px;text-align:right;color:var(--cy)">100%</div></div>
</div>
</div>
<div class="mutation-card active">
<div style="display:flex;justify-content:space-between;margin-bottom:8px"><strong style="font-size:13px">🔤 Textual Engine</strong><span class="badge badge-gn">ACTIF</span></div>
<div style="font-size:9px;color:var(--d);margin-bottom:8px">Mutation de texte invisible Unicode homoglyphs, zero-width chars, entity encoding swap</div>
<table style="font-size:9px"><tbody>
<tr><td>Unicode homoglyph</td><td style="color:var(--gn)"> Active</td><td>a→а, e→е (cyrillic)</td></tr>
<tr><td>Zero-width inject</td><td style="color:var(--gn)"> Active</td><td>U+200B between words</td></tr>
<tr><td>Entity encoding</td><td style="color:var(--gn)"> Active</td><td>&amp;#233; ↔ é</td></tr>
<tr><td>Alt text mutation</td><td style="color:var(--gn)"> Active</td><td>Random synonyms</td></tr>
<tr><td>Phantom comments</td><td style="color:var(--gn)"> Active</td><td>&lt;!-- rnd --&gt;</td></tr>
</tbody></table>
<div style="margin-top:8px;display:flex;gap:8px">
<div style="flex:1"><div style="font-size:9px;color:var(--d)">Efficacité bypass</div><div class="progress"><div class="progress-fill" style="width:97%;background:var(--gn)"></div></div><div style="font-size:9px;text-align:right;color:var(--gn)">97%</div></div>
<div style="flex:1"><div style="font-size:9px;color:var(--d)">Rendu identique</div><div class="progress"><div class="progress-fill" style="width:99%;background:var(--cy)"></div></div><div style="font-size:9px;text-align:right;color:var(--cy)">99.8%</div></div>
</div>
</div>
</div>
</div>
<!-- TAB: NOISE FORGE -->
<div class="panel" id="tab-noiseforge">
<div class="grid2">
<div>
<h3 style="font-size:12px;margin-bottom:10px;color:var(--og)">🖼️ Noise Forge Image Obfuscation</h3>
<div style="font-size:10px;color:var(--d);margin-bottom:12px;padding:8px;background:var(--bg);border:1px solid var(--b);border-radius:6px">
Chaque image dans l'email reçoit un <strong style="color:var(--og)">bruit binaire unique</strong> au niveau pixel. L'image est visuellement identique à l'œil humain, mais le hash SHA-256 est différent à chaque envoi → <strong style="color:var(--gn)">bypass OCR Gmail/Outlook</strong>.
</div>
<div class="form-row"><label>Mode de noise</label><select>
<option>🎯 Pixel Noise (±1 LSB) — Invisible, max bypass</option>
<option>🌊 Gaussian Noise (σ=0.5) — Très subtil</option>
<option>🔲 Metadata Swap — EXIF randomize</option>
<option>📐 Micro-crop (±1px) — Dimension change</option>
<option>🎨 Color shift (ΔE < 0.5) — Imperceptible</option>
</select></div>
<div class="form-row"><label>Intensité</label>
<input type="range" min="1" max="10" value="3" style="width:100%">
<div style="display:flex;justify-content:space-between;font-size:9px;color:var(--d)"><span>Min (safe)</span><span>Max (aggressive)</span></div>
</div>
<div class="form-row"><label>Images cibles</label><select multiple style="min-height:60px">
<option selected>logo.png (header)</option>
<option selected>banner.jpg (hero)</option>
<option selected>product.png (CTA)</option>
<option>footer-logo.png</option>
</select></div>
<div class="form-row"><label>Output</label><select>
<option>Base64 inline (pas de hosting)</option>
<option>URL unique par envoi (CDN)</option>
<option>CID attachment</option>
</select></div>
<button class="btn btn-og" style="width:100%;padding:10px">🖼️ Forge Noise (Preview)</button>
</div>
<div>
<h3 style="font-size:12px;margin-bottom:10px">📊 Forge Stats</h3>
<table><thead><tr><th>Image</th><th>Taille</th><th>Variants</th><th>Hash unique</th><th>OCR bypass</th></tr></thead><tbody>
<tr><td>logo.png</td><td>12KB</td><td style="color:var(--cy)">47,820</td><td style="color:var(--gn)">100%</td><td style="color:var(--gn)">✅</td></tr>
<tr><td>banner.jpg</td><td>84KB</td><td style="color:var(--cy)">47,820</td><td style="color:var(--gn)">100%</td><td style="color:var(--gn)">✅</td></tr>
<tr><td>product.png</td><td>45KB</td><td style="color:var(--cy)">32,100</td><td style="color:var(--gn)">100%</td><td style="color:var(--gn)">✅</td></tr>
</tbody></table>
<h4 style="font-size:11px;margin:12px 0 6px;color:var(--am)">Détection par ISP</h4>
<table><thead><tr><th>ISP</th><th>OCR Engine</th><th>Bypass rate</th><th>Notes</th></tr></thead><tbody>
<tr><td>Gmail</td><td>TensorFlow Vision</td><td style="color:var(--gn)">99.7%</td><td>LSB noise suffit</td></tr>
<tr><td>Outlook</td><td>Azure CV</td><td style="color:var(--gn)">99.9%</td><td>Metadata check faible</td></tr>
<tr><td>Yahoo</td><td>Custom OCR</td><td style="color:var(--gn)">98.4%</td><td>Plus agressif, σ=1.0</td></tr>
<tr><td>GMX</td><td>Aucun</td><td style="color:var(--gn)">100%</td><td>Pas d'OCR détecté</td></tr>
</tbody></table>
</div>
</div>
</div>
<!-- TAB: DRILLDOWN -->
<div class="panel" id="tab-drilldown">
<h3 style="font-size:12px;margin-bottom:12px">📊 Drilldown Performance des mutations par ISP</h3>
<div class="grid2">
<div>
<table><thead><tr><th>ISP</th><th>Emails mutés</th><th>Inbox</th><th>vs Non-muté</th><th>Gain</th><th>Mutation pref</th></tr></thead><tbody>
<tr><td style="font-weight:600">Gmail</td><td>18,240</td><td style="color:var(--gn)">94%</td><td>88%</td><td style="color:var(--gn)">+6%</td><td>Structural+Noise</td></tr>
<tr><td style="font-weight:600">Outlook</td><td>14,120</td><td style="color:var(--gn)">96%</td><td>92%</td><td style="color:var(--gn)">+4%</td><td>Cosmetic+Textual</td></tr>
<tr><td style="font-weight:600">T-Online</td><td>4,200</td><td style="color:var(--gn)">97%</td><td>95%</td><td style="color:var(--gn)">+2%</td><td>Textual only</td></tr>
<tr><td style="font-weight:600">GMX/Web.de</td><td>5,800</td><td style="color:var(--gn)">100%</td><td>100%</td><td></td><td>Minimal needed</td></tr>
<tr><td style="font-weight:600">Yahoo</td><td>3,460</td><td style="color:var(--gn)">85%</td><td>78%</td><td style="color:var(--gn)">+7%</td><td>Full stack</td></tr>
<tr><td style="font-weight:600">Orange</td><td>2,000</td><td style="color:var(--gn)">93%</td><td>90%</td><td style="color:var(--gn)">+3%</td><td>Structural</td></tr>
</tbody></table>
</div>
<div>
<h4 style="font-size:11px;margin-bottom:8px;color:var(--og)">Impact par type de mutation</h4>
<div style="margin-bottom:6px"><div style="display:flex;justify-content:space-between;font-size:10px"><span>DOM Reorder</span><span style="color:var(--gn)">+4.2% inbox</span></div><div class="progress"><div class="progress-fill" style="width:84%;background:var(--og)"></div></div></div>
<div style="margin-bottom:6px"><div style="display:flex;justify-content:space-between;font-size:10px"><span>Noise Forge (images)</span><span style="color:var(--gn)">+3.8% inbox</span></div><div class="progress"><div class="progress-fill" style="width:76%;background:var(--og)"></div></div></div>
<div style="margin-bottom:6px"><div style="display:flex;justify-content:space-between;font-size:10px"><span>Unicode Homoglyph</span><span style="color:var(--gn)">+2.1% inbox</span></div><div class="progress"><div class="progress-fill" style="width:42%;background:var(--pu)"></div></div></div>
<div style="margin-bottom:6px"><div style="display:flex;justify-content:space-between;font-size:10px"><span>CSS Jitter</span><span style="color:var(--gn)">+1.8% inbox</span></div><div class="progress"><div class="progress-fill" style="width:36%;background:var(--cy)"></div></div></div>
<div style="margin-bottom:6px"><div style="display:flex;justify-content:space-between;font-size:10px"><span>Zero-width Inject</span><span style="color:var(--gn)">+1.5% inbox</span></div><div class="progress"><div class="progress-fill" style="width:30%;background:var(--bl)"></div></div></div>
<div style="margin-bottom:6px"><div style="display:flex;justify-content:space-between;font-size:10px"><span>Phantom Comments</span><span style="color:var(--gn)">+0.8% inbox</span></div><div class="progress"><div class="progress-fill" style="width:16%;background:var(--gn)"></div></div></div>
</div>
</div>
</div>
<!-- TAB: DNA VIEWER -->
<div class="panel" id="tab-dna">
<h3 style="font-size:12px;margin-bottom:10px">🧬 Email DNA Visualisation génétique</h3>
<div style="font-size:10px;color:var(--d);margin-bottom:12px">Chaque email a une séquence "ADN" unique. Deux emails identiques visuellement ont des ADN radicalement différents.</div>
<div class="grid2">
<div>
<h4 style="font-size:11px;margin-bottom:6px;color:var(--rd)">Email A Variant #1</h4>
<div class="dna-strand" id="dna-a"></div>
<div style="font-family:'JetBrains Mono',monospace;font-size:9px;color:var(--d);text-align:center;margin-top:4px">SHA-256: <span style="color:var(--og)" id="hash-a">a7f3d...</span></div>
</div>
<div>
<h4 style="font-size:11px;margin-bottom:6px;color:var(--gn)">Email B Variant #2</h4>
<div class="dna-strand" id="dna-b"></div>
<div style="font-family:'JetBrains Mono',monospace;font-size:9px;color:var(--d);text-align:center;margin-top:4px">SHA-256: <span style="color:var(--og)" id="hash-b">e2c9b...</span></div>
</div>
</div>
<div style="text-align:center;margin:16px 0">
<div style="font-size:11px;font-weight:700;color:var(--gn)"> Similarité visuelle: 100% Similarité code: 2.3%</div>
<div style="font-size:10px;color:var(--d);margin-top:4px">Les deux emails sont identiques à l'œil humain mais génétiquement uniques aux filtres ISP</div>
</div>
<button class="btn btn-og" onclick="regenerateDNA()">🔄 Régénérer DNA</button>
</div>
</div>
<script>
function showTab(id){document.querySelectorAll('.tab').forEach(t=>t.classList.remove('active'));document.querySelectorAll('.panel').forEach(p=>p.classList.remove('active'));document.getElementById('tab-'+id).classList.add('active');event.target.classList.add('active')}
function toggleTheme(){var b=document.body,t=document.getElementById('theme-toggle');if(b.classList.contains('light')){b.classList.remove('light');t.textContent='🌙';localStorage.setItem('wevads-theme','dark')}else{b.classList.add('light');t.textContent='☀️';localStorage.setItem('wevads-theme','light')}}
if(localStorage.getItem('wevads-theme')==='light'){document.body.classList.add('light');document.getElementById('theme-toggle').textContent='☀️'}
function runMutation(){
var r=document.getElementById('mutation-result');r.innerHTML='';
for(var i=1;i<=5;i++){
var h=Math.random().toString(16).substr(2,12);
var m=Math.floor(Math.random()*6)+20;
var cs=Math.random()*1.5+1;
r.innerHTML+='<div style="background:var(--bg);border:1px solid var(--b);border-radius:6px;padding:10px;margin-bottom:6px"><div style="display:flex;justify-content:space-between;margin-bottom:4px"><span style="font-weight:700;color:var(--og)">Variant #'+i+'</span><div><span class="badge badge-gn">'+m+' mutations</span> <span class="badge badge-cy">'+cs.toFixed(1)+'% diff</span></div></div><div style="font-family:JetBrains Mono,monospace;font-size:9px;color:var(--d)">Hash: '+h+' • Structural: '+(Math.floor(Math.random()*3)+5)+' • Cosmetic: '+(Math.floor(Math.random()*4)+6)+' • Textual: '+(Math.floor(Math.random()*3)+4)+' • Noise: '+(Math.floor(Math.random()*2)+2)+'</div></div>';
}
// Show diff
var d=document.getElementById('diff-view');
d.innerHTML='<div class="diff-del">- &lt;div style="max-width:600px;margin:0 auto;background:#fff"&gt;</div><div class="diff-add">+ &lt;div style="margin:0 auto;background:#fff;max-width:600px"&gt;&lt;!--x'+Math.random().toString(36).substr(2,4)+'--&gt;</div><div class="diff-del">- &lt;h1 style="color:#333;font-size:24px"&gt;</div><div class="diff-add">+ &lt;H1 style="font-size:24.03px;color:#334"&gt;</div><div class="diff-del">- Profitez de -40%</div><div class="diff-add">+ Prof\u200Bitez de -40%</div><div class="diff-del">- &lt;a href="{{link}}" style="display:inline-block;background:#e74c3c"&gt;</div><div class="diff-add">+ &lt;a style="background:#e74c3d;display:inline-block" href="{{link}}?_='+Math.random().toString(36).substr(2,6)+'"&gt;</div>';
}
var colors=['var(--og)','var(--cy)','var(--gn)','var(--pu)','var(--bl)','var(--pk)','var(--am)','var(--rd)'];
function generateDNA(id){var c=document.getElementById(id);c.innerHTML='';for(var i=0;i<60;i++){var col=colors[Math.floor(Math.random()*colors.length)];var bases='ACGT';c.innerHTML+='<div class="dna-base" style="background:'+col+'33;color:'+col+'">'+bases[Math.floor(Math.random()*4)]+'</div>'}}
function regenerateDNA(){
generateDNA('dna-a');generateDNA('dna-b');
document.getElementById('hash-a').textContent=Math.random().toString(16).substr(2,12)+'...';
document.getElementById('hash-b').textContent=Math.random().toString(16).substr(2,12)+'...';
}
generateDNA('dna-a');generateDNA('dna-b');
setInterval(function(){document.getElementById('clock').textContent=new Date().toLocaleTimeString('fr-FR')},1000);
</script>
</body></html>