215 lines
19 KiB
HTML
215 lines
19 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||
<title>WEVIA Enterprise Model</title>
|
||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800;900&family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
:root{--bg:#080a10;--sf:rgba(255,255,255,.03);--bd:rgba(255,255,255,.06);--tx:#eef0f4;--t2:rgba(255,255,255,.5);--t3:rgba(255,255,255,.22);--ac:#4f7df9;--cy:#22d3ee;--gr:#10b981;--or:#f59e0b;--pu:#a78bfa;--pk:#f472b6}
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
html,body{height:100%;overflow:hidden;font-family:'Outfit',system-ui;background:var(--bg);color:var(--tx)}
|
||
.dk{position:relative;width:100vw;height:100vh}
|
||
.sl{position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity .7s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;overflow:hidden}
|
||
.sl.on{opacity:1;pointer-events:all}
|
||
.gl{background:var(--sf);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--bd);border-radius:14px}
|
||
.gl2{background:var(--sf);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--bd);border-radius:8px}
|
||
.nv{position:fixed;bottom:10px;left:50%;transform:translateX(-50%);z-index:200;display:flex;align-items:center;gap:5px;background:rgba(8,10,16,.9);backdrop-filter:blur(20px);border:1px solid var(--bd);border-radius:100px;padding:4px 12px}
|
||
.dot{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.1);border:none;cursor:pointer;transition:.3s}
|
||
.dot.on{background:var(--cy);box-shadow:0 0 10px rgba(34,211,238,.5)}
|
||
.abtn{background:none;border:1px solid var(--bd);color:var(--t3);border-radius:50%;width:22px;height:22px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:10px;transition:.3s}
|
||
.abtn:hover{border-color:var(--cy);color:var(--cy)}
|
||
@keyframes pu{0%,100%{opacity:1}50%{opacity:.3}}
|
||
@keyframes cntUp{0%{opacity:0;transform:scale(.6) translateY(30px)}60%{transform:scale(1.02) translateY(-4px)}100%{opacity:1;transform:scale(1) translateY(0)}}
|
||
@keyframes fUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
|
||
@keyframes glw{0%,100%{box-shadow:0 0 15px rgba(34,211,238,.15)}50%{box-shadow:0 0 25px rgba(34,211,238,.3)}}
|
||
.s1{background:var(--bg);justify-content:center;align-items:center;text-align:center;padding:20px;position:relative}
|
||
.s1::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 50% 42% at 50% 40%,rgba(79,125,249,.09),transparent),radial-gradient(ellipse 30% 22% at 72% 72%,rgba(34,211,238,.06),transparent)}
|
||
.s1-g{position:absolute;inset:0;background-image:linear-gradient(rgba(79,125,249,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(79,125,249,.025) 1px,transparent 1px);background-size:28px 28px;mask-image:radial-gradient(ellipse 42% 42% at 50% 50%,#000,transparent)}
|
||
.s1-hd{position:absolute;top:12px;left:14px;right:14px;display:flex;align-items:center;gap:7px;z-index:3}
|
||
.s1-av{width:38px;height:38px;border-radius:10px;object-fit:cover;border:1.5px solid var(--bd)}
|
||
.s1-br b{font-size:11px;font-weight:800}.s1-br small{font-size:6.5px;letter-spacing:1.8px;color:var(--cy);font-weight:600;display:block}
|
||
.s1-lv{margin-left:auto;display:flex;align-items:center;gap:3px;font-size:7.5px;font-weight:700;color:var(--gr);padding:2px 9px;border-radius:100px;border:1px solid rgba(16,185,129,.15);background:rgba(16,185,129,.06)}
|
||
.s1-lv::before{content:'';width:4px;height:4px;border-radius:50%;background:var(--gr);animation:pu 2s infinite}
|
||
.s1-n{font-family:'IBM Plex Mono';font-size:clamp(4.5rem,13vw,8.5rem);font-weight:700;background:linear-gradient(155deg,var(--ac),var(--cy));-webkit-background-clip:text;-webkit-text-fill-color:transparent;line-height:.85;z-index:1;animation:cntUp 1.1s cubic-bezier(.16,1,.3,1) both}
|
||
.s1-lb{font-size:clamp(.7rem,1.8vw,1rem);font-weight:500;color:var(--t2);letter-spacing:3px;text-transform:uppercase;margin-top:3px;z-index:1;animation:fUp .7s .3s both}
|
||
.s1-tt{font-size:clamp(.9rem,2.5vw,1.5rem);font-weight:700;margin-top:14px;line-height:1.25;max-width:400px;z-index:1;animation:fUp .7s .5s both}
|
||
.s1-tt em{font-style:normal;color:var(--cy)}
|
||
.s1-tg{display:flex;gap:5px;flex-wrap:wrap;justify-content:center;margin-top:14px;z-index:1;animation:fUp .7s .7s both}
|
||
.s1-t{padding:4px 10px;font-size:9.5px;font-weight:600;font-family:'IBM Plex Mono'}
|
||
.s1-t b{color:var(--cy)}.s1-t span{color:var(--t3)}
|
||
.s2{background:var(--bg);padding:14px;justify-content:center;align-items:center;position:relative}
|
||
.s2::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 40% 30% at 50% 50%,rgba(79,125,249,.04),transparent)}
|
||
.s2-h{font-size:clamp(.7rem,1.6vw,.9rem);font-weight:800;text-align:center;margin-bottom:3px;z-index:1}
|
||
.s2-p{font-size:.5rem;color:var(--t3);text-align:center;margin-bottom:8px;z-index:1}
|
||
.s2-sk{display:flex;flex-direction:column;gap:4px;max-width:420px;width:100%;z-index:1}
|
||
.s2-r{display:flex;align-items:center;gap:7px;padding:7px 10px;transition:.35s}
|
||
.s2-r:hover{transform:translateX(3px);border-color:rgba(255,255,255,.1)}
|
||
.s2-i{font-size:15px;width:26px;text-align:center;flex-shrink:0}
|
||
.s2-nm{font-size:10.5px;font-weight:700}.s2-ds{font-size:7.5px;color:var(--t3);margin-top:1px}
|
||
.s2-k{font-family:'IBM Plex Mono';font-size:10px;font-weight:600;flex-shrink:0}
|
||
.s2-gv{position:absolute;right:6px;top:50%;transform:translateY(-50%);writing-mode:vertical-rl;font-size:6.5px;font-weight:700;letter-spacing:3px;color:var(--pu);opacity:.25;z-index:1}
|
||
.s3{background:var(--bg);overflow:hidden;position:relative}
|
||
.s3::before{content:'';position:absolute;inset:0;background-image:radial-gradient(rgba(79,125,249,.03) 1px,transparent 1px);background-size:12px 12px}
|
||
.s3-hu{position:absolute;top:0;left:0;right:0;z-index:5;display:flex;align-items:center;gap:5px;padding:4px 9px;background:rgba(8,10,16,.9);backdrop-filter:blur(16px);border-bottom:1px solid var(--bd)}
|
||
.s3-hu b{font-size:.6rem}.s3-hu small{font-size:.32rem;letter-spacing:1.3px;color:var(--cy);display:block;font-weight:600}
|
||
.s3-l{display:flex;align-items:center;gap:3px;font-size:.38rem;font-weight:700;color:var(--gr);padding:1px 6px;border-radius:100px;background:rgba(16,185,129,.07);border:1px solid rgba(16,185,129,.1)}
|
||
.s3-l::before{content:'';width:3px;height:3px;border-radius:50%;background:var(--gr);animation:pu 2s infinite}
|
||
.s3-st{font-family:'IBM Plex Mono';font-size:.38rem;color:var(--t3);margin-left:auto}
|
||
.s3-st em{font-style:normal;color:var(--ac);font-weight:600}
|
||
#cv{display:block;width:100%;flex:1;min-height:0}
|
||
.s4{background:var(--bg);justify-content:center;align-items:center;text-align:center;padding:20px;position:relative}
|
||
.s4::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 40% 30% at 50% 36%,rgba(34,211,238,.05),transparent)}
|
||
.s4-h{font-size:clamp(.9rem,2.5vw,1.4rem);font-weight:800;line-height:1.2;margin-bottom:5px;z-index:1}
|
||
.s4-h em{font-style:normal;color:var(--cy)}
|
||
.s4-p{font-size:.62rem;color:var(--t2);max-width:340px;margin:0 auto 12px;line-height:1.45;z-index:1}
|
||
.s4-gr{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;max-width:380px;width:100%;z-index:1;margin-bottom:10px}
|
||
.s4-c{padding:10px 7px;text-align:center;transition:.3s}.s4-c:hover{transform:translateY(-2px);border-color:rgba(255,255,255,.1)}
|
||
.s4-c .ic{font-size:18px;margin-bottom:4px}.s4-c h3{font-size:9px;font-weight:800;margin-bottom:2px}.s4-c p{font-size:7.5px;color:var(--t3);line-height:1.35}
|
||
.s4-q{max-width:370px;padding:8px 12px;z-index:1;margin-bottom:12px;border-left:2px solid var(--cy);text-align:left}
|
||
.s4-q p{font-size:.55rem;color:var(--t2);line-height:1.5;font-style:italic}.s4-q b{color:var(--cy);font-style:normal}
|
||
.s4-bt{display:inline-flex;align-items:center;gap:6px;background:linear-gradient(135deg,var(--ac),var(--cy));color:#fff;border:none;border-radius:100px;padding:9px 26px;font-family:'Outfit';font-size:12px;font-weight:700;cursor:pointer;transition:.3s;box-shadow:0 6px 22px rgba(79,125,249,.3);z-index:1;text-decoration:none;animation:glw 3s infinite}
|
||
.s4-bt:hover{transform:translateY(-2px)}.s4-ft{margin-top:8px;font-size:.42rem;color:var(--t3);z-index:1}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="dk">
|
||
<!-- S1 -->
|
||
<div class="sl s1 on" data-i="0">
|
||
<div class="s1-g"></div>
|
||
<div class="s1-hd">
|
||
<div class="s1-av" style="background:linear-gradient(135deg,var(--ac),var(--cy));display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:900;color:#fff;border-radius:10px">W</div>
|
||
<div class="s1-br"><b>WEVIA EM</b><small>ENTERPRISE MODEL</small></div>
|
||
<div class="s1-lv">LIVE</div>
|
||
</div>
|
||
<div class="s1-n" id="ctr">0</div>
|
||
<div class="s1-lb">Agents IA Autonomes</div>
|
||
<h1 class="s1-tt">La workforce IA la plus complète.<br><em>17 départements. Un seul cerveau.</em></h1>
|
||
<div class="s1-tg"><div class="s1-t gl2"><b>17</b> <span>Depts</span></div><div class="s1-t gl2"><b>93</b> <span>Crons</span></div><div class="s1-t gl2"><b>12</b> <span>LLMs</span></div><div class="s1-t gl2"><b>0€</b> <span>Lock-in</span></div></div>
|
||
</div>
|
||
<!-- S2 -->
|
||
<div class="sl s2" data-i="1">
|
||
<h2 class="s2-h">Architecture SOA - 6 Couches</h2>
|
||
<p class="s2-p">Chaque couche pilotee par des agents specialises</p>
|
||
<div class="s2-sk"><div class="s2-r gl" style="border-left:3px solid var(--cy)"><div class="s2-i">🖥</div><div><div class="s2-nm">Presentation</div><div class="s2-ds">Dashboards - Portails - Chat</div></div><div class="s2-k" style="color:var(--cy)">9 apps</div></div><div class="s2-r gl" style="border-left:3px solid var(--or)"><div class="s2-i">🎯</div><div><div class="s2-nm">Orchestration</div><div class="s2-ds">WEVIA Master - BPMN - 17 Orchestrators</div></div><div class="s2-k" style="color:var(--or)">17 flux</div></div><div class="s2-r gl" style="border-left:3px solid var(--gr)"><div class="s2-i">🤖</div><div><div class="s2-nm">Agents IA</div><div class="s2-ds">Finance - RH - Marketing - Commerce - Supply - Prod</div></div><div class="s2-k" style="color:var(--gr)">669</div></div><div class="s2-r gl" style="border-left:3px solid var(--ac)"><div class="s2-i">🧠</div><div><div class="s2-nm">Intelligence</div><div class="s2-ds">LLM Souverain 0EUR - RAG - KB 2490</div></div><div class="s2-k" style="color:var(--ac)">12 LLMs</div></div><div class="s2-r gl" style="border-left:3px solid var(--t2)"><div class="s2-i">🔌</div><div><div class="s2-nm">Data et Integration</div><div class="s2-ds">API Gateway - ETL - 6.6M contacts</div></div><div class="s2-k" style="color:var(--t2)">302 APIs</div></div><div class="s2-r gl" style="border-left:3px solid var(--pu)"><div class="s2-i">🛡</div><div><div class="s2-nm">Gouvernance</div><div class="s2-ds">Securite - Compliance - NonReg 152/152</div></div><div class="s2-k" style="color:var(--pu)">100%</div></div></div>
|
||
<div class="s2-gv">GOVERNANCE - SECURITY - COMPLIANCE</div>
|
||
</div>
|
||
<!-- S3 -->
|
||
<div class="sl s3" data-i="2">
|
||
<div class="s3-hu">
|
||
<span style="font-size:13px">🧠</span>
|
||
<div><b>WEVIA EM</b><small>VALUE STREAM MAPPING</small></div>
|
||
<div class="s3-l">LIVE</div>
|
||
<div class="s3-st"><em id="hA">0</em> agents · <em id="hD">0</em> depts</div>
|
||
</div>
|
||
<canvas id="cv"></canvas>
|
||
</div>
|
||
<!-- S4 -->
|
||
<div class="sl s4" data-i="3">
|
||
<h2 class="s4-h">Demarrez par un <em>POC gratuit</em></h2>
|
||
<p class="s4-p">Choisissez un process métier. Nous deployons nos agents. Vous mesurez impact.</p>
|
||
<div class="s4-gr"><div class="s4-c gl"><div class="ic">🎯</div><h3>POC Gratuit</h3><p>1 process, resultats en 2 semaines</p></div><div class="s4-c gl"><div class="ic">🚀</div><h3>MVP - 1 Mois</h3><p>3-5 process, ROI documenté</p></div><div class="s4-c gl"><div class="ic">🏢</div><h3>Full Enterprise</h3><p>17 depts, 669 agents, 3 mois</p></div></div>
|
||
<div class="s4-q gl"><p>Les autres offrent une plateforme pour <b>construire</b> des agents.<br>WEVIA livre une <b>workforce autonome complete</b> - 669 agents prets.</p></div>
|
||
<button class="s4-bt" onclick="window.open('https://weval-consulting.com','_blank')">Demander un POC gratuit</button>
|
||
<div class="s4-ft">WEVAL Consulting - Casablanca - weval-consulting.com</div>
|
||
</div>
|
||
<!-- NAV -->
|
||
<div class="nv">
|
||
<button class="abtn" onclick="go(-1)">‹</button>
|
||
<button class="dot on" onclick="show(0)"></button>
|
||
<button class="dot" onclick="show(1)"></button>
|
||
<button class="dot" onclick="show(2)"></button>
|
||
<button class="dot" onclick="show(3)"></button>
|
||
<button class="abtn" onclick="go(1)">›</button>
|
||
</div>
|
||
</div>
|
||
<script>
|
||
let c=0;const T=4;
|
||
function show(i){c=i;document.querySelectorAll('.sl').forEach((s,j)=>s.classList.toggle('on',j===i));document.querySelectorAll('.dot').forEach((d,j)=>d.classList.toggle('on',j===i));if(i===2&&!cvOn)startCV()}
|
||
function go(d){show((c+d+T)%T)}
|
||
document.addEventListener('keydown',e=>{if(e.key==='ArrowRight')go(1);if(e.key==='ArrowLeft')go(-1)});
|
||
let sx=0;document.addEventListener('touchstart',e=>{sx=e.touches[0].clientX});
|
||
document.addEventListener('touchend',e=>{const d=e.changedTouches[0].clientX-sx;if(Math.abs(d)>50)d<0?go(1):go(-1)});
|
||
(function(){const el=document.getElementById('ctr');let v=0;const tgt=669,dur=1400,st=Date.now();function t(){const p=Math.min((Date.now()-st)/dur,1),e=1-Math.pow(1-p,3);v=Math.round(tgt*e);el.textContent=v;if(p<1)requestAnimationFrame(t)};t()})();
|
||
let cvOn=false;
|
||
function startCV(){
|
||
cvOn=true;const cv=document.getElementById('cv'),cx=cv.getContext('2d');
|
||
function rs(){var w=cv.parentElement.offsetWidth||1080;var h=cv.parentElement.offsetHeight||1080;cv.width=w*2;cv.height=h*2;cv.style.width=w+'px';cv.style.height=h+'px';cx.scale(2,2)};setTimeout(rs,100);setTimeout(rs,500);window.addEventListener('resize',rs);
|
||
const W=()=>cv.width/2,H=()=>cv.height/2;
|
||
const D=[{n:'Finance',c:'#4f7df9',y:.06},{n:'RH',c:'#22d3ee',y:.18},{n:'Marketing',c:'#f59e0b',y:.30},{n:'Commerce',c:'#10b981',y:.42},{n:'Supply Chain',c:'#ef4444',y:.54},{n:'Production',c:'#a78bfa',y:.66},{n:'SI & Data',c:'#4f7df9',y:.78},{n:'QA & Cyber',c:'#f472b6',y:.90}];
|
||
const A=[];D.forEach((d,i)=>{for(let j=0;j<4+Math.floor(Math.random()*3);j++){A.push({x:.1+Math.random()*.78,tx:.1+Math.random()*.78,y:d.y+(Math.random()-.5)*.03,di:i,ph:Math.random()*6.28,sz:3+Math.random()*2})}});
|
||
function fr(t){cx.clearRect(0,0,W(),H());const g=cx.createRadialGradient(W()/2,H()/2,0,W()/2,H()/2,W()*.45);g.addColorStop(0,'rgba(79,125,249,.02)');g.addColorStop(1,'transparent');cx.fillStyle=g;cx.fillRect(0,0,W(),H());
|
||
D.forEach((d,i)=>{const y=28+d.y*(H()-36);cx.strokeStyle=d.c+'15';cx.lineWidth=.5;cx.setLineDash([2,3]);cx.beginPath();cx.moveTo(W()*.07,y);cx.lineTo(W()*.93,y);cx.stroke();cx.setLineDash([]);cx.fillStyle=d.c+'70';cx.font='600 7.5px Outfit';cx.textAlign='left';cx.fillText(d.n,W()*.015,y+3);for(let j=0;j<6;j++){const fx=(.16+j*.13)*W(),dot=Math.sin(t*.0018+j*.7+i*.5)*.5+.5;cx.fillStyle=d.c+(Math.floor(dot*50+15).toString(16).padStart(2,'0'));cx.beginPath();cx.arc(fx,y,1.2+dot*1.8,0,Math.PI*2);cx.fill();if(j<5){cx.strokeStyle=d.c+'08';cx.lineWidth=.4;cx.beginPath();cx.moveTo(fx+3,y);cx.lineTo((.16+(j+1)*.13)*W()-3,y);cx.stroke()}}const gx=.94*W();cx.fillStyle=d.c+'1a';cx.save();cx.translate(gx,y);cx.rotate(Math.PI/4);cx.fillRect(-3,-3,6,6);cx.restore()});
|
||
A.forEach(a=>{a.x+=(a.tx-a.x)*.015;if(Math.abs(a.tx-a.x)<.006)a.tx=.1+Math.random()*.78;const d=D[a.di],px=a.x*W(),py=28+a.y*(H()-36),b=Math.sin(t*.003+a.ph)*1.2,w=Math.sin(t*.006+a.ph);cx.fillStyle=d.c+'08';cx.beginPath();cx.arc(px,py+b,a.sz*2.2,0,Math.PI*2);cx.fill();cx.fillStyle=d.c+'b0';cx.beginPath();cx.arc(px,py+b,a.sz,0,Math.PI*2);cx.fill();cx.fillStyle=d.c+'d0';cx.beginPath();cx.arc(px,py-a.sz*.9+b,a.sz*.55,0,Math.PI*2);cx.fill();cx.strokeStyle=d.c+'70';cx.lineWidth=.8;cx.beginPath();cx.moveTo(px-1.2,py+a.sz+b);cx.lineTo(px-1.2+w*2,py+a.sz+3.5+b);cx.stroke();cx.beginPath();cx.moveTo(px+1.2,py+a.sz+b);cx.lineTo(px+1.2-w*2,py+a.sz+3.5+b);cx.stroke()});
|
||
document.getElementById('hA').textContent=A.length;document.getElementById('hD').textContent=D.length;requestAnimationFrame(fr)};fr(0)}
|
||
</script>
|
||
<!-- CARTO_REMOVED -->
|
||
|
||
<!-- === 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 === -->
|
||
|
||
<script src="/api/archi-meta-badge.js" defer></script>
|
||
</body>
|
||
</html>
|