Files
html/routines-catalog.html

347 lines
30 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">
<title>103 Routines Catalogue — WEVIA EM Lean 6σ</title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,Segoe UI,sans-serif;background:#0a0e1a;color:#e2e8f0;padding:20px;line-height:1.5}
.hd{background:linear-gradient(135deg,#10b981 0%,#059669 100%);padding:24px;border-radius:12px;margin-bottom:24px}
.hd h1{font-size:26px;color:white;margin-bottom:6px}
.hd .sub{color:rgba(255,255,255,.85);font-size:13px}
.cats{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;margin-bottom:20px}
.cat{background:#111827;border:1px solid #1e293b;border-radius:10px;padding:16px;border-left:4px solid #10b981}
.cat h3{font-size:15px;margin-bottom:10px;color:#e2e8f0;display:flex;justify-content:space-between}
.cat .count{color:#10b981;font-family:JetBrains Mono,monospace;font-weight:700;font-size:16px}
.routine{background:#0a0e1a;padding:10px;border-radius:6px;margin:6px 0;font-size:12px;border-left:3px solid #334155}
.routine .name{font-weight:600;color:#60a5fa;margin-bottom:4px}
.routine .flow{font-size:10px;color:#94a3b8}
.routine .dept{display:inline-block;background:rgba(16,185,129,.15);color:#10b981;padding:2px 6px;border-radius:4px;font-size:9px;margin-right:4px}
.top-banner{background:#111827;border:2px solid #10b981;border-radius:12px;padding:24px;text-align:center;margin-bottom:24px}
.top-banner .n{font-size:72px;font-weight:800;color:#10b981;font-family:JetBrains Mono,monospace}
.top-banner .l{font-size:13px;color:#94a3b8;text-transform:uppercase;letter-spacing:3px}
.note{background:#1e293b;padding:14px;border-radius:8px;margin-top:24px;font-size:12px;color:#94a3b8;border-left:3px solid #10b981}
</style><!-- DOCTRINE-60-UX-ENRICH direct-inject-20260424-143848 -->
<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 class="hd"><h1>⚙️ 103 Routines Catalogue — WEVIA EM</h1><div class="sub">Séquences BPMN réutilisables · Packaged par département · Lean 6σ · Doctrine 79</div></div>
<div class="top-banner"><div class="n">103</div><div class="l">Routines BPMN réutilisables · 15 départements</div></div>
<div class="cats">
<div class="cat"><h3><span>💰 Finance (8)</span><span class="count">8</span></h3>
<div class="routine"><div class="name">R-F001 — Invoice-to-Cash</div><div class="flow">CRM deal won → invoice gen → Stripe → dunning → revenue</div><div class="dept">Finance</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-F002 — P&L mensuel auto</div><div class="flow">Close month → agrège → ventile → alertes écarts &gt; 10%</div><div class="dept">Finance</div></div>
<div class="routine"><div class="name">R-F003 — Forecast Q+1</div><div class="flow">Pipeline CRM × win-rate × valeur moyenne → forecast</div><div class="dept">Finance</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-F004 — Trésorerie J+30</div><div class="flow">Comptes bancaires + créances + dettes → solde projeté</div><div class="dept">Finance</div></div>
<div class="routine"><div class="name">R-F005 — Contrôle TVA/IS</div><div class="flow">Achats + ventes → déclaration auto fiscale</div><div class="dept">Finance</div><div class="dept">Legal</div></div>
<div class="routine"><div class="name">R-F006 — Budget vs actual</div><div class="flow">Plan annuel × clôture mensuelle → écarts variances</div><div class="dept">Finance</div></div>
<div class="routine"><div class="name">R-F007 — Consolidation multi-entités</div><div class="flow">Filiales × conso IFRS → groupe</div><div class="dept">Finance</div></div>
<div class="routine"><div class="name">R-F008 — Audit interne trigger</div><div class="flow">Anomaly detection → audit workflow → rapport</div><div class="dept">Finance</div><div class="dept">QA & Cyber</div></div>
</div>
<div class="cat"><h3><span>📣 Marketing (9)</span><span class="count">9</span></h3>
<div class="routine"><div class="name">R-M001 — Lead qualification</div><div class="flow">Form submit → scoring → SDR assign</div><div class="dept">Marketing</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-M002 — Email drip campaign</div><div class="flow">Segment HCP × 3 touches × 5 jours (WEVADS)</div><div class="dept">Marketing</div><div class="dept">Pharma</div></div>
<div class="routine"><div class="name">R-M003 — SEO content generator</div><div class="flow">Keyword → LLM article → Claude review → publish</div><div class="dept">Marketing</div></div>
<div class="routine"><div class="name">R-M004 — Social schedule</div><div class="flow">Content calendar × LinkedIn × Twitter × auto-post</div><div class="dept">Marketing</div></div>
<div class="routine"><div class="name">R-M005 — A/B test</div><div class="flow">2 variants × 50/50 split × stat sig 95%</div><div class="dept">Marketing</div></div>
<div class="routine"><div class="name">R-M006 — Lead nurturing</div><div class="flow">MQL → SQL progression tracking</div><div class="dept">Marketing</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-M007 — WEVADS arsenal deploy</div><div class="flow">Campagne définie → MTAs × PMTA × sending</div><div class="dept">Marketing</div></div>
<div class="routine"><div class="name">R-M008 — Deliverability monitor</div><div class="flow">Open/click/bounce → alertes < 95% inbox</div><div class="dept">Marketing</div></div>
<div class="routine"><div class="name">R-M009 — ROI campaign</div><div class="flow">Coût campagne × conversions × CAC/LTV</div><div class="dept">Marketing</div><div class="dept">Finance</div></div>
</div>
<div class="cat"><h3><span>🤝 Commerce (8)</span><span class="count">8</span></h3>
<div class="routine"><div class="name">R-C001 — Qualification BANT</div><div class="flow">Budget × Authority × Need × Timeline</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-C002 — Proposal auto-gen</div><div class="flow">Deal stage × template → docx personnalisé</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-C003 — Pipeline hygiene</div><div class="flow">Deals stale &gt; 30j → alerte / relance auto</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-C004 — Ethica client onboarding</div><div class="flow">Lead pharma → 14 specialites × consent → campagne</div><div class="dept">Pharma</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-C005 — Vistex partnership track</div><div class="flow">Addendum × lead protection × weekly sync</div><div class="dept">BizDev</div></div>
<div class="routine"><div class="name">R-C006 — Quota forecast</div><div class="flow">Historical × current × win-rate</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-C007 — Account planning Q</div><div class="flow">Top accounts × next quarter actions</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-C008 — Closed-won celebration</div><div class="flow">Won deal → team notif × internal comm</div><div class="dept">Commerce</div><div class="dept">Comms</div></div>
</div>
<div class="cat"><h3><span>👥 RH (6)</span><span class="count">6</span></h3>
<div class="routine"><div class="name">R-H001 — Onboarding candidat</div><div class="flow">Signed offer → accès × equipment × buddy</div><div class="dept">RH</div></div>
<div class="routine"><div class="name">R-H002 — Paie mensuelle</div><div class="flow">Collecte variables × calcul × bulletins</div><div class="dept">RH</div><div class="dept">Finance</div></div>
<div class="routine"><div class="name">R-H003 — Entretien annuel</div><div class="flow">Planning × objectifs × feedback × plan dev</div><div class="dept">RH</div></div>
<div class="routine"><div class="name">R-H004 — Sourcing candidats</div><div class="flow">Job description × LinkedIn search × pre-screen</div><div class="dept">RH</div></div>
<div class="routine"><div class="name">R-H005 — Offboarding</div><div class="flow">Exit interview × access revoke × solde</div><div class="dept">RH</div></div>
<div class="routine"><div class="name">R-H006 — Training matrix</div><div class="flow">Skill gap × cours × certification</div><div class="dept">RH</div></div>
</div>
<div class="cat"><h3><span>📦 Supply Chain (6)</span><span class="count">6</span></h3>
<div class="routine"><div class="name">R-S001 — Stock alerte réappro</div><div class="flow">Stock &lt; min → PO auto fournisseur</div><div class="dept">Supply Chain</div></div>
<div class="routine"><div class="name">R-S002 — Livraison tracking</div><div class="flow">Order × carrier × ETA × client notif</div><div class="dept">Supply Chain</div></div>
<div class="routine"><div class="name">R-S003 — Fournisseur evaluation</div><div class="flow">OTD × qualité × prix → score trimestriel</div><div class="dept">Supply Chain</div></div>
<div class="routine"><div class="name">R-S004 — Inventory count cyclique</div><div class="flow">ABC × fréquence × variance tolerance</div><div class="dept">Supply Chain</div></div>
<div class="routine"><div class="name">R-S005 — Forecast demand</div><div class="flow">Seasonal × trend × safety stock</div><div class="dept">Supply Chain</div><div class="dept">Commerce</div></div>
<div class="routine"><div class="name">R-S006 — Incident livraison</div><div class="flow">Retard/perte → litige × avoir × remplacement</div><div class="dept">Supply Chain</div></div>
</div>
<div class="cat"><h3><span>🏭 Production (6)</span><span class="count">6</span></h3>
<div class="routine"><div class="name">R-P001 — Planning production</div><div class="flow">Commandes × capacité × optimisation séquence</div><div class="dept">Production</div></div>
<div class="routine"><div class="name">R-P002 — Contrôle qualité ligne</div><div class="flow">SPC × écarts × arrêt/ajustement</div><div class="dept">Production</div><div class="dept">QA & Cyber</div></div>
<div class="routine"><div class="name">R-P003 — Maintenance préventive</div><div class="flow">Indicateurs machine × planif × exécution</div><div class="dept">Production</div></div>
<div class="routine"><div class="name">R-P004 — OEE monitoring</div><div class="flow">Disponibilité × performance × qualité</div><div class="dept">Production</div></div>
<div class="routine"><div class="name">R-P005 — Changement série</div><div class="flow">SMED × outillage × validation</div><div class="dept">Production</div></div>
<div class="routine"><div class="name">R-P006 — Traçabilité lot</div><div class="flow">Ingrédients × process × lot × expédition</div><div class="dept">Production</div><div class="dept">Pharma</div></div>
</div>
<div class="cat"><h3><span>💾 SI & Data (10)</span><span class="count">10</span></h3>
<div class="routine"><div class="name">R-D001 — Backup quotidien vault</div><div class="flow">GOLD backup × cron 3AM × 557 files</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-D002 — L99 test orchestrator</div><div class="flow">NonReg 153 × Playwright × pages check</div><div class="dept">SI & Data</div><div class="dept">QA & Cyber</div></div>
<div class="routine"><div class="name">R-D003 — Git sync 2 remotes</div><div class="flow">Github × Gitea × auto-sync every push</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-D004 — Qdrant ingestion docs</div><div class="flow">New doc × chunk × embed × upsert</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-D005 — Auto-heal services</div><div class="flow">Service down → systemctl restart × alert</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-D006 — Disk cleanup</div><div class="flow">&gt; 85% × /tmp × logs &gt; 30j × vacuum</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-D007 — Wiki sync</div><div class="flow">New markdown → Obsidian vault × commit</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-D008 — Snapshot Hetzner</div><div class="flow">Weekly × upload GitHub release</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-D009 — Training data collect</div><div class="flow">Chat logs × quality filter × HuggingFace push</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-D010 — Cascade providers heal</div><div class="flow">Provider 401/403 × rotate × sovereign-api fallback</div><div class="dept">SI & Data</div></div>
</div>
<div class="cat"><h3><span>🛡️ QA & Cyber (6)</span><span class="count">6</span></h3>
<div class="routine"><div class="name">R-Q001 — NonReg 153/153</div><div class="flow">All pages × SSO × APIs × daily</div><div class="dept">QA & Cyber</div></div>
<div class="routine"><div class="name">R-Q002 — Playwright E2E</div><div class="flow">User flows × screenshots × video</div><div class="dept">QA & Cyber</div></div>
<div class="routine"><div class="name">R-Q003 — SSL monitor</div><div class="flow">Cert expiry × 30d renew × Let's Encrypt</div><div class="dept">QA & Cyber</div></div>
<div class="routine"><div class="name">R-Q004 — Audit secrets</div><div class="flow">Scan code × secrets exposés × alert</div><div class="dept">QA & Cyber</div></div>
<div class="routine"><div class="name">R-Q005 — Authentik SSO health</div><div class="flow">Outpost × providers × sessions</div><div class="dept">QA & Cyber</div></div>
<div class="routine"><div class="name">R-Q006 — CrowdSec alerts</div><div class="flow">Bruteforce × IP ban × log</div><div class="dept">QA & Cyber</div></div>
</div>
<div class="cat"><h3><span>💊 Pharma (5)</span><span class="count">5</span></h3>
<div class="routine"><div class="name">R-X001 — HCP scraping</div><div class="flow">Sources × enrichment × dedup × DB</div><div class="dept">Pharma</div></div>
<div class="routine"><div class="name">R-X002 — Consent obtention</div><div class="flow">HCP × email consent × tracking × stockage</div><div class="dept">Pharma</div><div class="dept">Legal</div></div>
<div class="routine"><div class="name">R-X003 — Campagne ciblée spécialité</div><div class="flow">14 specialités × ciblage × envoi</div><div class="dept">Pharma</div><div class="dept">Marketing</div></div>
<div class="routine"><div class="name">R-X004 — Pharmacovigilance</div><div class="flow">Événement × déclaration × traçabilité</div><div class="dept">Pharma</div></div>
<div class="routine"><div class="name">R-X005 — RCP/IB distribution</div><div class="flow">Nouveau RCP × HCPs concernés × push</div><div class="dept">Pharma</div></div>
</div>
<div class="cat"><h3><span>🎯 BizDev (5)</span><span class="count">5</span></h3>
<div class="routine"><div class="name">R-B001 — Partnership tracking</div><div class="flow">Partenaires × KPIs × QBR</div><div class="dept">BizDev</div></div>
<div class="routine"><div class="name">R-B002 — Lead protection addendum</div><div class="flow">Deal flag × partenaire × IP lock</div><div class="dept">BizDev</div><div class="dept">Legal</div></div>
<div class="routine"><div class="name">R-B003 — Market intelligence</div><div class="flow">Competitors × price × feature × position</div><div class="dept">BizDev</div></div>
<div class="routine"><div class="name">R-B004 — RFP response</div><div class="flow">Trigger × qualification × équipe × réponse</div><div class="dept">BizDev</div></div>
<div class="routine"><div class="name">R-B005 — Revenue share calc</div><div class="flow">Partner × deal × % split × invoice</div><div class="dept">BizDev</div><div class="dept">Finance</div></div>
</div>
<div class="cat"><h3><span>⚖️ Legal (4)</span><span class="count">4</span></h3>
<div class="routine"><div class="name">R-L001 — Contrat review</div><div class="flow">Draft × clauses check × LLM review × sign</div><div class="dept">Legal</div></div>
<div class="routine"><div class="name">R-L002 — RGPD request</div><div class="flow">DSR × localisation × extract × répondre</div><div class="dept">Legal</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-L003 — Compliance audit</div><div class="flow">Check list × evidence × rapport</div><div class="dept">Legal</div><div class="dept">QA & Cyber</div></div>
<div class="routine"><div class="name">R-L004 — NDA lifecycle</div><div class="flow">Generate × sign × store × expire</div><div class="dept">Legal</div></div>
</div>
<div class="cat"><h3><span>📢 Comms (4)</span><span class="count">4</span></h3>
<div class="routine"><div class="name">R-Co001 — LinkedIn post auto</div><div class="flow">Event trigger × draft × review × publish</div><div class="dept">Comms</div></div>
<div class="routine"><div class="name">R-Co002 — Press release</div><div class="flow">Annonce × draft × médias × distribution</div><div class="dept">Comms</div></div>
<div class="routine"><div class="name">R-Co003 — Crisis comms</div><div class="flow">Incident × message × canaux × follow-up</div><div class="dept">Comms</div></div>
<div class="routine"><div class="name">R-Co004 — Newsletter mensuelle</div><div class="flow">Agrège news × template × envoi × métriques</div><div class="dept">Comms</div><div class="dept">Marketing</div></div>
</div>
<div class="cat"><h3><span>🔬 R&D (8)</span><span class="count">8</span></h3>
<div class="routine"><div class="name">R-RD001 — POC new model</div><div class="flow">Select × test × benchmark × decision</div><div class="dept">R&D</div></div>
<div class="routine"><div class="name">R-RD002 — Fine-tune LoRA</div><div class="flow">Dataset × Kaggle T4 × eval × deploy</div><div class="dept">R&D</div></div>
<div class="routine"><div class="name">R-RD003 — Provider integration</div><div class="flow">New API × wrapper × cascade × auto-heal</div><div class="dept">R&D</div></div>
<div class="routine"><div class="name">R-RD004 — Agent v2 experiment</div><div class="flow">New intent × sandbox × A/B × merge</div><div class="dept">R&D</div></div>
<div class="routine"><div class="name">R-RD005 — Dataset generation</div><div class="flow">Logs × quality × conversation pairs</div><div class="dept">R&D</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-RD006 — Benchmark évaluation</div><div class="flow">Model × task × score × leaderboard</div><div class="dept">R&D</div></div>
<div class="routine"><div class="name">R-RD007 — Paper review</div><div class="flow">ArXiv × summary × actionable items</div><div class="dept">R&D</div></div>
<div class="routine"><div class="name">R-RD008 — Patent search</div><div class="flow">Idea × prior art × drafting</div><div class="dept">R&D</div><div class="dept">Legal</div></div>
</div>
<div class="cat"><h3><span>📈 Sales Ethica (5)</span><span class="count">5</span></h3>
<div class="routine"><div class="name">R-SE001 — Lead Ethica qualification</div><div class="flow">Pharma lead × BANT × spécialité match</div><div class="dept">Sales (Ethica)</div></div>
<div class="routine"><div class="name">R-SE002 — Proposal grille tarifaire</div><div class="flow">Volume × paliers × engagement × quote</div><div class="dept">Sales (Ethica)</div></div>
<div class="routine"><div class="name">R-SE003 — Kaouther deal track</div><div class="flow">Groupe Ethica × consent × SPOT vs engagement</div><div class="dept">Sales (Ethica)</div></div>
<div class="routine"><div class="name">R-SE004 — Upsell HCP coverage</div><div class="flow">Client × new spécialité × extension deal</div><div class="dept">Sales (Ethica)</div></div>
<div class="routine"><div class="name">R-SE005 — Customer success</div><div class="flow">QBR × adoption × renewal</div><div class="dept">Sales (Ethica)</div></div>
</div>
<div class="cat"><h3><span>👔 Direction (6)</span><span class="count">6</span></h3>
<div class="routine"><div class="name">R-DIR001 — Brief quotidien</div><div class="flow">Agrège all depts × top 3 items × CEO</div><div class="dept">Direction</div></div>
<div class="routine"><div class="name">R-DIR002 — Weekly comité</div><div class="flow">Départements × KPIs × décisions</div><div class="dept">Direction</div></div>
<div class="routine"><div class="name">R-DIR003 — Board quarterly</div><div class="flow">Stratégie × KPIs × approvals</div><div class="dept">Direction</div></div>
<div class="routine"><div class="name">R-DIR004 — Investment decision</div><div class="flow">ROI × risk × go/no-go</div><div class="dept">Direction</div><div class="dept">Finance</div></div>
<div class="routine"><div class="name">R-DIR005 — OKR trimestriel</div><div class="flow">Set × track × review × adjust</div><div class="dept">Direction</div></div>
<div class="routine"><div class="name">R-DIR006 — Yacine alerts</div><div class="flow">Andon RED × escalade × action immédiate</div><div class="dept">Direction</div></div>
</div>
<div class="cat"><h3><span>🏢 Comms/Admin (7)</span><span class="count">7</span></h3>
<div class="routine"><div class="name">R-A001 — Office 365 mail routing</div><div class="flow">Inbox × triage × assign</div><div class="dept">Comms</div></div>
<div class="routine"><div class="name">R-A002 — Calendar optimization</div><div class="flow">Meetings × focus blocks × no-meeting days</div><div class="dept">Direction</div></div>
<div class="routine"><div class="name">R-A003 — Meeting notes auto</div><div class="flow">Audio → Whisper → summary → distribute</div><div class="dept">Comms</div></div>
<div class="routine"><div class="name">R-A004 — Doc versioning</div><div class="flow">Drive × check-in/out × review</div><div class="dept">SI & Data</div></div>
<div class="routine"><div class="name">R-A005 — Travel booking</div><div class="flow">Request × policy × book × expense</div><div class="dept">Finance</div></div>
<div class="routine"><div class="name">R-A006 — Expense reimbursement</div><div class="flow">Receipt × OCR × policy × payment</div><div class="dept">Finance</div><div class="dept">RH</div></div>
<div class="routine"><div class="name">R-A007 — Customer support triage</div><div class="flow">Ticket × priority × assign × SLA</div><div class="dept">Sales (Ethica)</div></div>
</div>
</div>
<div class="note">📌 <strong>103 Routines</strong> — séquences BPMN réutilisables, alignées sur les 15 départements de la VSM WEVAL. Chaque routine = input × process × output × dept(s) impliqué(s). Catalogue V34 architect doctrine 79.</div>
<!-- === 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 === -->
<!-- === OPUS HONEST NR/L99 OVERLAY v1 19avr - append-only doctrine #14 === -->
<script>
(function(){
if (window.__opusHonestOverlay) return; window.__opusHonestOverlay = true;
async function updateHonestValues(){
try {
const r = await fetch('/api/l99-honest.php', {cache:'no-store'});
const d = await r.json();
if (!d.ok) return;
const realNR = `${d.combined.pass}/${d.combined.total}`;
const realSigma = d.sigma;
// Find elements showing the myth values
const mythRegex = /(153\/153|304\/304|NR status 153\/153|L99 status 304\/304|NR 153\/153|L99 304\/304)/g;
// Walk text nodes
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
const toReplace = [];
let node;
while (node = walker.nextNode()) {
if (node.nodeValue && mythRegex.test(node.nodeValue)) toReplace.push(node);
}
toReplace.forEach(textNode => {
const parent = textNode.parentNode;
if (!parent || parent.hasAttribute('data-opus-honest-applied')) return;
const newText = textNode.nodeValue.replace(/153\/153/g, realNR).replace(/304\/304/g, realNR);
textNode.nodeValue = newText;
parent.setAttribute('data-opus-honest-applied', '1');
});
// Add a small badge bottom-right showing honest live status
if (!document.getElementById('opus-honest-badge')) {
const b = document.createElement('div');
b.id = 'opus-honest-badge';
b.style.cssText = 'position:fixed;bottom:12px;right:12px;background:linear-gradient(90deg,#14b8a6,#a855f7);color:#05060a;padding:6px 12px;font:10px/1.3 Inter,system-ui,sans-serif;font-weight:700;border-radius:8px;z-index:99993;box-shadow:0 4px 12px rgba(0,0,0,0.3);cursor:pointer;max-width:280px';
b.title = 'Cliquer pour détails';
b.innerHTML = `✓ NR ${realNR} · ${realSigma} live`;
b.onclick = () => {
alert(`HONEST NonReg (doctrine #4):\n\nmaster: ${d.master.pass}/${d.master.total}\nopus: ${d.opus.pass}/${d.opus.total}\ncombined: ${realNR}\nsigma: ${realSigma}\n\n${d.myth_153}\n${d.myth_304}`);
};
document.body.appendChild(b);
}
} catch(e){console.error('L99-honest fetch error:', e);}
}
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateHonestValues);
else updateHonestValues();
setInterval(updateHonestValues, 90000);
})();
</script>
<!-- === OPUS HONEST END === -->
<script src="/api/a11y-auto-enhancer.js" defer></script>
<!-- WTP_UDOCK_V1 (Opus 21-avr t33b5) --><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>