diff --git a/pain-points-atlas.html b/pain-points-atlas.html index cf80990fb..a847db706 100644 --- a/pain-points-atlas.html +++ b/pain-points-atlas.html @@ -308,7 +308,7 @@ let currentFilter = 'all'; async function load(){ try { const r = await fetch(API + '?t=' + Date.now()); - DATA = await r.json(); + DATA = await r.json(); window.DATA = DATA; render(); } catch(e) { console.error(e); } } @@ -425,6 +425,81 @@ function renderPP(){ } load(); + +// === OPUS DRILL-DOWN PILOT v1 19avr — append-only, doctrine #14 === +(function(){ + if (window.__opusDrillInit) return; window.__opusDrillInit = true; + var modal = document.createElement('div'); + modal.id = 'opus-drill-modal'; + modal.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.85);backdrop-filter:blur(8px);display:none;align-items:center;justify-content:center;z-index:9999;padding:24px;cursor:pointer'; + var inner = document.createElement('div'); + inner.id = 'opus-drill-inner'; + inner.style.cssText = 'max-width:820px;width:100%;max-height:90vh;overflow:auto;background:var(--bg-1,#0b0d15);border:1px solid var(--border-h,rgba(99,102,241,0.35));border-radius:16px;padding:32px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6)'; + inner.addEventListener('click', function(e){ e.stopPropagation(); }); + modal.appendChild(inner); + modal.addEventListener('click', function(){ modal.style.display='none'; }); + document.addEventListener('keydown', function(e){ if(e.key==='Escape') modal.style.display='none'; }); + if (document.body) document.body.appendChild(modal); + else document.addEventListener('DOMContentLoaded', function(){ document.body.appendChild(modal); }); + + function fmtEur(n){ if(!n) return '0€'; if(n>=1e6) return (n/1e6).toFixed(2)+'M€'; if(n>=1e3) return Math.round(n/1000)+'k€'; return n+'€'; } + + function renderPP(pp, DATA) { + var vendors = (DATA && DATA.erp_vendors) || {}; + var erps = (pp.erps_affected || []).map(function(e){ + var v = vendors[e] || {}; + return ''+(v.label || e)+''; + }).join(''); + return [ + '
', + ''+pp.id+'', + ''+pp.dept+'', + '', + '
', + '

'+pp.pain+'

', + '

'+pp.business_cost+'

', + '
Pourquoi l\'ERP échoue

'+pp.why_erp_fails+'

', + '
', + '
🤖 Agent WEVAL
', + '

'+pp.agent+'

', + '

'+pp.agent_how+'

', + '
', + '
', + '
Savings estimés
'+(pp.savings_note || '')+'
', + '
'+fmtEur(pp.savings_eur_year)+'/an
', + '
', + '
ERPs affectés ('+(pp.erps_affected||[]).length+')
'+erps+'
' + ].join(''); + } + + document.addEventListener('click', function(e) { + var card = e.target.closest && e.target.closest('.pp-card'); + if (!card || !card.dataset || !card.dataset.ppId) return; + var DATA = window.DATA || null; + if (!DATA) return; + var pp = (DATA.pain_points || []).find(function(p){ return p.id === card.dataset.ppId; }); + if (!pp) return; + document.getElementById('opus-drill-inner').innerHTML = renderPP(pp, DATA); + modal.style.display = 'flex'; + }); + + var observer = new MutationObserver(function(){ + var cards = document.querySelectorAll('.pp-card:not([data-pp-id])'); + cards.forEach(function(card){ + var idEl = card.querySelector('.pp-id'); + if (idEl) { + card.dataset.ppId = idEl.textContent.trim(); + card.style.cursor = 'pointer'; + card.setAttribute('role', 'button'); + card.setAttribute('tabindex', '0'); + card.setAttribute('aria-label', 'Cliquer pour voir détails pain point'); + } + }); + }); + observer.observe(document.body || document.documentElement, {childList:true, subtree:true}); +})(); +// === OPUS DRILL-DOWN PILOT END === +