Files
html/wtp.html
Opus 177feddb04
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
phase46 doctrine 184 inject 19 pages PRIO4 business - 146 pages UX total
19 pages PRIO4 business enrichies:
- gws-setup v63-send-queue l99-fullscreen v78-real-wire weval-portal
- ethica-country crm-audit infra-tour infra-tour-2s-5c-blade
- partners-emails onboarding-em arsenal-offline ultimate-quality
- wevia-demo-autonomous linkedin-automation-v96 blade-install
- solutions oss-catalog wtp

Cumul session:
- 146 pages UX doctrine 60 (127 + 19)
- 32 tags Opus
- 29 doctrines vault (146-184)

Handler robuste 75+ pages consecutives ZERO regression.
NR 153/153 invariant.
2026-04-24 14:27:55 +02:00

270 lines
10 KiB
HTML
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.0">
<title>WEVAL Technology Platform — Pleine largeur</title>
<style>
* { margin:0; padding:0; box-sizing:border-box }
html, body { width:100%; height:100vh; overflow:hidden; background:#0a0e1a; color:#e2e8f0; font-family:-apple-system,system-ui,sans-serif }
.wtp-container { width:100%; height:100vh; position:relative }
.wtp-iframe { width:100%; height:100%; border:0; display:block }
/* Floating action button for WEVIA chat */
.wevia-fab {
position:fixed; bottom:24px; right:24px;
width:64px; height:64px; border-radius:50%;
background:linear-gradient(135deg,#6366f1,#818cf8);
color:#fff; font-size:28px;
display:flex; align-items:center; justify-content:center;
cursor:pointer; box-shadow:0 8px 24px rgba(99,102,241,.4);
z-index:9999; transition:transform .2s, box-shadow .2s;
border:none;
}
.wevia-fab:hover { transform:scale(1.08); box-shadow:0 12px 32px rgba(99,102,241,.6) }
.wevia-fab .pulse {
position:absolute; inset:-4px; border-radius:50%; border:2px solid #818cf8;
animation:pulse 2s infinite; pointer-events:none;
}
@keyframes pulse { 0% { transform:scale(1); opacity:1 } 100% { transform:scale(1.3); opacity:0 } }
/* Chat panel slide from right */
.wevia-panel {
position:fixed; top:0; right:-100%; width:min(420px, 100vw);
height:100vh; background:#0f172a; border-left:1px solid rgba(99,102,241,.2);
transition:right .3s ease; z-index:9998; display:flex; flex-direction:column;
box-shadow:-12px 0 40px rgba(0,0,0,.5);
}
.wevia-panel.open { right:0 }
.wevia-head {
padding:14px 18px; background:#1e293b; border-bottom:1px solid rgba(99,102,241,.15);
display:flex; align-items:center; justify-content:space-between;
}
.wevia-head-title { display:flex; align-items:center; gap:10px; font-weight:600; font-size:14px }
.wevia-head-title .dot { width:8px; height:8px; border-radius:50%; background:#4ade80; box-shadow:0 0 8px #4ade80; animation:pulse-dot 2s infinite }
@keyframes pulse-dot { 50% { opacity:.5 } }
.wevia-close {
background:rgba(248,113,113,.1); border:1px solid rgba(248,113,113,.3);
color:#f87171; width:32px; height:32px; border-radius:8px; cursor:pointer; font-size:18px;
display:flex; align-items:center; justify-content:center;
}
.wevia-close:hover { background:rgba(248,113,113,.2) }
.wevia-iframe { flex:1; width:100%; border:0; background:#0a0e1a }
/* Overlay backdrop */
.wevia-backdrop {
position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:9997;
opacity:0; pointer-events:none; transition:opacity .3s;
}
.wevia-backdrop.show { opacity:1; pointer-events:auto }
/* Banner si pas connecté */
.auth-banner {
position:fixed; top:0; left:0; right:0; padding:12px 20px;
background:linear-gradient(90deg,#6366f1,#818cf8); color:#fff;
text-align:center; z-index:10000; display:none; font-size:14px; font-weight:500;
}
.auth-banner a { color:#fff; text-decoration:underline; margin-left:8px; font-weight:600 }
.auth-banner.show { display:block }
.auth-banner.show + .wtp-container { padding-top:44px }
</style>
<!-- DOCTRINE-60-UX-ENRICH direct-inject-20260424-142737 -->
<style id="doctrine60-ux-direct">
/* DOCTRINE-60-UX-ENRICH injected-direct */
body::before {
content: '';
position: fixed;
top: 0; left: 0; width: 100vw; height: 100vh;
background: radial-gradient(circle at 50% 50%, rgba(100,180,255,0.08), transparent 60%);
pointer-events: none;
z-index: -1;
}
.card, .kpi, .panel, .btn {
transition: all 0.3s cubic-bezier(0.2,0,0.1,1);
}
.card:hover, .kpi:hover, .panel:hover {
box-shadow: 0 4px 20px rgba(100,180,255,0.2);
border-color: rgba(100,180,255,0.5);
}
@keyframes pulseD60 {
0%,100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.7; transform: scale(1.05); }
}
.pulse, .live-indicator, .active, .online {
animation: pulseD60 3s ease-in-out infinite;
}
.modal, .chat, .speech, .overlay {
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
.enter-stagger {
animation: enterStagD60 0.5s cubic-bezier(0.2,0,0.1,1) forwards;
}
@keyframes enterStagD60 {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body>
<div id="auth-banner" class="auth-banner">
🔐 Session non authentifiée · <a href="/wtp-login.html">Se connecter</a>
</div>
<div class="wtp-container">
<iframe class="wtp-iframe" src="/weval-technology-platform.html?embed=1" title="WEVAL Technology Platform"></iframe>
</div>
<!-- Floating WEVIA button -->
<button class="wevia-fab" id="weviaFab" title="Ouvrir chat WEVIA Master">
<span class="pulse"></span>
💬
</button>
<!-- WEVIA chat panel -->
<div class="wevia-backdrop" id="weviaBackdrop"></div>
<div class="wevia-panel" id="weviaPanel">
<div class="wevia-head">
<div class="wevia-head-title"><span class="dot"></span>WEVIA Master · multi-agents</div>
<button class="wevia-close" id="weviaClose">×</button>
</div>
<iframe class="wevia-iframe" id="weviaFrame" src="about:blank" title="WEVIA chat"></iframe>
</div>
<script>
// Check auth
(async function() {
try {
const r = await fetch('/api/weval-auth-session.php?action=status', { credentials:'include' });
const d = await r.json();
if (!d.authenticated) {
document.getElementById('auth-banner').classList.add('show');
}
} catch(e) {}
})();
// Toggle chat panel
const fab = document.getElementById('weviaFab');
const panel = document.getElementById('weviaPanel');
const backdrop = document.getElementById('weviaBackdrop');
const closeBtn = document.getElementById('weviaClose');
const frame = document.getElementById('weviaFrame');
let chatLoaded = false;
function openChat() {
if (!chatLoaded) {
frame.src = '/wevia-widget.html';
chatLoaded = true;
}
panel.classList.add('open');
backdrop.classList.add('show');
}
function closeChat() {
panel.classList.remove('open');
backdrop.classList.remove('show');
}
fab.addEventListener('click', openChat);
closeBtn.addEventListener('click', closeChat);
backdrop.addEventListener('click', closeChat);
// ESC to close
document.addEventListener('keydown', e => {
if (e.key === 'Escape') closeChat();
});
// Keyboard shortcut Ctrl+/ or Ctrl+K to open chat
document.addEventListener('keydown', e => {
if ((e.ctrlKey || e.metaKey) && (e.key === '/' || e.key === 'k')) {
e.preventDefault();
openChat();
}
});
</script>
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
<script>
(function(){
if (window.__opusUniversalDrill) return; window.__opusUniversalDrill = true;
var d = document;
var m = d.createElement('div');
m.id = 'opus-udrill';
m.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:99995;padding:20px;cursor:pointer';
var inner = d.createElement('div');
inner.id = 'opus-udrill-in';
inner.style.cssText = 'max-width:900px;width:100%;max-height:90vh;overflow:auto;background:#0b0d15;border:1px solid rgba(99,102,241,0.35);border-radius:14px;padding:28px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6);color:#e2e8f0;font:14px/1.55 Inter,system-ui,sans-serif';
inner.addEventListener('click', function(e){ e.stopPropagation(); });
m.appendChild(inner);
m.addEventListener('click', function(){ m.style.display='none'; });
d.addEventListener('keydown', function(e){ if(e.key==='Escape') m.style.display='none'; });
(d.body || d.documentElement).appendChild(m);
function openCard(card) {
var html = '<div style="display:flex;justify-content:flex-end;margin-bottom:14px"><button id="opus-udrill-close" style="padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.25);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button></div>';
html += '<div style="transform-origin:top left;font-size:1.05em">' + card.outerHTML + '</div>';
inner.innerHTML = html;
d.getElementById('opus-udrill-close').onclick = function(){ m.style.display='none'; };
m.style.display = 'flex';
}
function wire(root) {
var sels = '.card,[class*="card"],.kpi,[class*="kpi"],.stat,[class*="stat"],.tile,[class*="tile"],.metric,[class*="metric"],.widget,[class*="widget"]';
var cards = root.querySelectorAll(sels);
for (var i = 0; i < cards.length; i++) {
var c = cards[i];
if (c.__opusWired) continue;
if (c.closest('button, a, input, select, textarea, #opus-udrill')) continue;
var r = c.getBoundingClientRect();
if (r.width < 60 || r.height < 40) continue;
c.__opusWired = true;
c.style.cursor = 'pointer';
c.setAttribute('role','button');
c.setAttribute('tabindex','0');
c.addEventListener('click', function(ev){
if (ev.target.closest('[data-pp-id]') && window.__opusDrillInit) return;
if (ev.target.closest('a,button,input,select')) return;
ev.preventDefault(); ev.stopPropagation();
openCard(this);
});
c.addEventListener('keydown', function(ev){ if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();openCard(this);} });
}
}
var initRun = function(){ wire(d.body || d.documentElement); };
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
else initRun();
var mo = new MutationObserver(function(muts){
var newCard = false;
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
if (newCard) initRun();
});
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
})();
</script>
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
<script src="/api/a11y-auto-enhancer.js" defer></script>
<!-- WTP_UDOCK_V1 (Opus 21-avr t34final) --><script src="/wtp-unified-dock.js" defer></script>
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
<!-- DOCTRINE-60-UX-JS --><script id="doctrine60-ux-js-direct">
// DOCTRINE-60-UX-JS staggered entrance
(function(){
if (!('IntersectionObserver' in window)) return;
const obs = new IntersectionObserver((entries) => {
entries.forEach((e, i) => {
if (e.isIntersecting) {
setTimeout(() => e.target.classList.add('enter-stagger'), i * 80);
obs.unobserve(e.target);
}
});
});
document.querySelectorAll('.card, .kpi, .panel').forEach(el => obs.observe(el));
})();
</script>
</body>
</html>