Files
html/value-stream.html
2026-04-19 21:20:03 +02:00

137 lines
10 KiB
HTML
Raw 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><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>WEVIA — Value Stream</title>
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@700;900&family=Nunito:wght@600;700;800&display=swap" rel="stylesheet">
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Nunito';background:#060d1a;color:#e2e8f0;min-height:100vh}
.top{display:flex;justify-content:space-between;align-items:center;padding:8px 16px;background:rgba(5,10,24,.95);border-bottom:1px solid rgba(6,182,212,.15)}
.logo{font:900 14px Orbitron;color:#06b6d4;letter-spacing:2px}
.nav{display:flex;gap:4px;flex-wrap:wrap}
.nav a{padding:3px 10px;border-radius:4px;text-decoration:none;font:700 10px Nunito;color:#64748b;border:1px solid #1e293b;transition:.2s}
.nav a:hover,.nav a.active{background:#06b6d4;color:#fff;border-color:#06b6d4}
.container{max-width:1400px;margin:0 auto;padding:20px}
h1{font:900 28px Orbitron;background:linear-gradient(135deg,#06b6d4,#8b5cf6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:8px}
h2{font:800 16px Nunito;color:#06b6d4;margin:16px 0 8px;border-left:3px solid #06b6d4;padding-left:10px}
.card{background:rgba(15,23,42,.8);border:1px solid rgba(100,116,139,.15);border-radius:12px;padding:16px;margin-bottom:12px;backdrop-filter:blur(8px)}
.card:hover{border-color:rgba(6,182,212,.3);box-shadow:0 0 20px rgba(6,182,212,.08)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.tag{display:inline-block;padding:2px 8px;border-radius:12px;font:700 9px Nunito;margin:2px}
.tag.green{background:rgba(74,222,128,.15);color:#4ade80}
.tag.blue{background:rgba(6,182,212,.15);color:#22d3ee}
.tag.purple{background:rgba(139,92,246,.15);color:#a78bfa}
.tag.yellow{background:rgba(245,158,11,.15);color:#fbbf24}
.tag.red{background:rgba(239,68,68,.15);color:#ef4444}
.metric{font:900 24px Orbitron;color:#06b6d4}
.label{font:600 9px Nunito;color:#64748b;text-transform:uppercase;letter-spacing:2px}
table{width:100%;border-collapse:collapse;font:600 11px Nunito}
th{text-align:left;padding:8px;color:#06b6d4;border-bottom:1px solid rgba(6,182,212,.2);font-size:10px;text-transform:uppercase;letter-spacing:1px}
td{padding:6px 8px;border-bottom:1px solid rgba(100,116,139,.1);color:#cbd5e1}
tr:hover td{background:rgba(6,182,212,.05)}
.hero{text-align:center;padding:30px 0 20px}
.search{width:100%;max-width:500px;padding:10px 16px;border-radius:8px;border:1px solid rgba(6,182,212,.3);background:rgba(15,23,42,.9);color:#e2e8f0;font:600 12px Nunito;outline:none;margin:12px auto;display:block}
.search:focus{border-color:#06b6d4;box-shadow:0 0 12px rgba(6,182,212,.2)}
@media(max-width:900px){.grid{grid-template-columns:1fr}.nav{font-size:8px}h1{font-size:20px}}
</style></head><body>
<div class="top"><div class="logo">WEVIA — Value Stream</div><div class="nav"><a href="/agents-archi.html">3D</a><a href="/director-center.html">Director</a><a href="/wevia-meeting-rooms.html">Meeting</a><a href="/enterprise-model.html">Enterprise</a><a href="/agents-fleet.html">Fleet</a><a href="/value-stream.html" class="active">Value Stream</a><a href="/value-chain.html">Value Chain</a><a href="/toolhub.html">ToolHub</a><a href="/wiki.html">Wiki</a></div></div>
<div class="container"><div class="hero"><h1>Value Stream Mapping</h1><p style="color:#94a3b8;font:600 12px Nunito">Flux de valeur end-to-end · Lean 6σ · Élimination des gaspillages</p></div>
<div style="display:flex;gap:12px;justify-content:center;margin:16px 0;flex-wrap:wrap">
<div class="card" style="text-align:center;min-width:140px"><div class="metric">676</div><div class="label">Agents</div></div>
<div class="card" style="text-align:center;min-width:140px"><div class="metric">22</div><div class="label">Départements</div></div>
<div class="card" style="text-align:center;min-width:140px"><div class="metric">151/153</div><div class="label">NonReg</div></div>
<div class="card" style="text-align:center;min-width:140px"><div class="metric" style="color:#4ade80">0€</div><div class="label">Coût IA</div></div>
</div>
<h2>Pipeline de Valeur</h2>
<div style="display:flex;gap:8px;overflow-x:auto;padding:12px 0">
<div class="card" style="min-width:180px;border-top:3px solid #06b6d4"><div style="font:800 11px Nunito;color:#06b6d4">1. STRATÉGIE</div><div style="font:600 9px Nunito;color:#94a3b8;margin-top:6px">WEVIA Master orchestration<br>39 décisions/cycle<br>14 providers 0€</div></div>
<div style="color:#06b6d4;align-self:center;font-size:20px"></div>
<div class="card" style="min-width:180px;border-top:3px solid #8b5cf6"><div style="font:800 11px Nunito;color:#8b5cf6">2. DIRECTION</div><div style="font:600 9px Nunito;color:#94a3b8;margin-top:6px">Director autonome<br>Consensus 9.8/10<br>46 routes</div></div>
<div style="color:#8b5cf6;align-self:center;font-size:20px"></div>
<div class="card" style="min-width:180px;border-top:3px solid #f59e0b"><div style="font:800 11px Nunito;color:#f59e0b">3. TACTIQUE</div><div style="font:600 9px Nunito;color:#94a3b8;margin-top:6px">NonReg 151/153<br>141K+ HCPs Ethica<br>1935 skills</div></div>
<div style="color:#f59e0b;align-self:center;font-size:20px"></div>
<div class="card" style="min-width:180px;border-top:3px solid #ef4444"><div style="font:800 11px Nunito;color:#ef4444">4. EXÉCUTION</div><div style="font:600 9px Nunito;color:#94a3b8;margin-top:6px">17 Docker UP<br>10 Ollama<br>669 Fleet</div></div>
</div>
<h2>Waste Analysis (Muda)</h2>
<div class="grid">
<div class="card"><span class="tag green">ÉLIMINÉ</span> <b>Surproduction</b><br><span style="color:#94a3b8;font-size:10px">Auto-scaling Docker · Pas de surallocation</span></div>
<div class="card"><span class="tag green">ÉLIMINÉ</span> <b>Attente</b><br><span style="color:#94a3b8;font-size:10px">Groq &lt;200ms · Cascade 7 providers</span></div>
<div class="card"><span class="tag green">ÉLIMINÉ</span> <b>Transport</b><br><span style="color:#94a3b8;font-size:10px">WireGuard S204↔S95 · Relay direct</span></div>
<div class="card"><span class="tag yellow">EN COURS</span> <b>Défauts</b><br><span style="color:#94a3b8;font-size:10px">2 skip WebGL · Paperclip DNS DOWN</span></div>
</div>
</div><div style="text-align:center;padding:20px;font:600 8px Nunito;color:#475569">WEVIA Architecture v3.3 · WEVAL Consulting · 0€</div>
<script>
fetch('/api/infra-monitor-api.php').then(r=>r.text().then(t=>{/* HTML_GUARD_V2_BATCH */var q=(t||"").trim();if(q.startsWith("<!DOCTYPE")||q.startsWith("<html")){return{error:"[HTTP "+r.status+"]",isHtmlError:true}}try{return JSON.parse(q)}catch(e){return{error:"JSON "+e.message}}})).then(d=>{
if(!d)return;
document.querySelectorAll('.metric').forEach(el=>{
if(el.nextElementSibling&&el.nextElementSibling.textContent==='NonReg')
el.textContent=(d.nonreg_pass||'151')+'/'+(d.nonreg_total||'153');
if(el.nextElementSibling&&el.nextElementSibling.textContent==='Docker')
el.textContent=(d.docker_up||'17')+' UP';
});
}).catch(()=>{});
</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) {
// Clone card content + show close btn + increase font-size
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 a more-specific drill is already active (e.g. pp-card custom), let it handle
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);} });
}
}
// Initial + mutation observer
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 === -->
</body></html>