/* D524 SYSTEMIC Yacine 30avr - applies on ALL HTML pages */ /* Rule 1: dark theme inheritance */ html.dark, body.dark, [class*="dark-mode"], [class*="dark-theme"] { background: #0a0a0f !important; color: #e8e6e3 !important; } /* Rule 2: never gray-800 on dark bg */ [style*="background:#0a0e1a"] [style*="color:#1f2937"], [style*="background:#0f172a"] [style*="color:#1f2937"], [style*="background:#111827"] [style*="color:#1f2937"], [style*="background-color:#0a0e1a"] [style*="color:#1f2937"], [style*="background-color:#0f172a"] [style*="color:#1f2937"], [style*="background-color:#111827"] [style*="color:#1f2937"] { color: #e2e8f0 !important; } /* Rule 3: never white on white */ [style*="background:#fff"] [style*="color:#fff"], [style*="background:white"] [style*="color:white"], [style*="background:#ffffff"] [style*="color:#ffffff"] { color: #1f2937 !important; } /* Rule 4: gray-400/500 on light bg → darker */ [style*="background:#fff"] [style*="color:#94a3b8"], [style*="background:#fff"] [style*="color:#9ca3af"], [style*="background:white"] [style*="color:#94a3b8"] { color: #475569 !important; } /* Rule 5: cockpit/admin sections force dark */ .cockpit, .admin-panel, [class*="dispatch"], [class*="dashboard"] { background-color: #0a0a0f; color: #e8e6e3; } .cockpit *:not(button):not(input):not(svg), [class*="dispatch"] *:not(button):not(input):not(svg) { color: inherit; } /* Rule 6: Plan/Commands/Step (wevia-agent pattern) */ .plan, .plan_revised { background: rgba(246,213,114,0.15) !important; padding: 14px 18px; } .plan-list li, .plan-list li * { color: #ffffff !important; } .cmd, .commands-preview { color: #4ecdc4 !important; background: rgba(0,0,0,0.6) !important; } .output { color: #e8e6e3 !important; background: rgba(0,0,0,0.7) !important; } .event-header { color: #f6d572 !important; font-weight: 700 !important; } /* Rule 7: FAQ pattern */ .wr-faq-q span:not(.wr-faq-arrow) { color: #ffffff !important; } .wr-faq-a p { color: #f1f5f9 !important; } /* Rule 8: contact labels visible */ .contact-label, [class*="contact-label"] { color: #ffffff !important; font-weight: 700 !important; } /* Rule 9: cards on dark bg with white-on-white text */ .card * { color: inherit; } /* Rule 10: headers always white in dark contexts */ [class*="bg-gray-9"] h1, [class*="bg-gray-9"] h2, [class*="bg-gray-9"] h3, [class*="bg-slate-9"] h1, [class*="bg-slate-9"] h2, [class*="bg-slate-9"] h3, [class*="bg-zinc-9"] h1, [class*="bg-zinc-9"] h2 { color: #ffffff !important; } /* D551 - Smart contrast fix systémique 1. CSS patterns: containers avec bg dark connu → text light forcé 2. Couvre header/topbar/sections dark sur pages mode JOUR */ /* === MODE JOUR : containers dark inline → text light === */ html:not(.dark) [style*="background:#0a0e1a"], html:not(.dark) [style*="background:#0f172a"], html:not(.dark) [style*="background:#111827"], html:not(.dark) [style*="background:#1e293b"], html:not(.dark) [style*="background:#0c1018"], html:not(.dark) [style*="background:#080a10"], html:not(.dark) [style*="background:#14193"], html:not(.dark) [style*="background:#020617"], html:not(.dark) [style*="background-color:#0a0e1a"], html:not(.dark) [style*="background-color:#0f172a"], html:not(.dark) [style*="background-color:#111827"], html:not(.dark) [style*="background-color:#1e293b"], html:not(.dark) [style*="background-color:#0c1018"], html:not(.dark) [style*="background-color:rgb(15"], html:not(.dark) [style*="background-color:rgb(8,"], html:not(.dark) [style*="background-color:rgb(10,"], html:not(.dark) [style*="background-color:rgb(20,"], html:not(.dark) [style*="background-color:rgba(8,"], html:not(.dark) [style*="background-color:rgba(10,"], html:not(.dark) [style*="background-color:rgba(15,"], html:not(.dark) [style*="background:rgba(8,"], html:not(.dark) [style*="background:rgba(15,"] { color: #f1f5f9 !important; } /* Cascade : children inherit light text */ html:not(.dark) [style*="background:#0a0e1a"] *, html:not(.dark) [style*="background:#0f172a"] *, html:not(.dark) [style*="background:#111827"] *, html:not(.dark) [style*="background:#1e293b"] *, html:not(.dark) [style*="background-color:#0a0e1a"] *, html:not(.dark) [style*="background-color:#0f172a"] *, html:not(.dark) [style*="background-color:#111827"] *, html:not(.dark) [style*="background-color:#1e293b"] *, html:not(.dark) [style*="background:rgba(8,"] *, html:not(.dark) [style*="background:rgba(15,"] *, html:not(.dark) [style*="background-color:rgba(8,"] *, html:not(.dark) [style*="background-color:rgba(15,"] * { color: #f1f5f9 !important; } /* Tailwind dark bg classes */ html:not(.dark) .bg-slate-900, html:not(.dark) .bg-slate-800, html:not(.dark) .bg-gray-900, html:not(.dark) .bg-gray-800, html:not(.dark) .bg-zinc-900, html:not(.dark) .bg-neutral-900, html:not(.dark) .bg-stone-900, html:not(.dark) .bg-black { color: #f1f5f9 !important; } html:not(.dark) .bg-slate-900 *, html:not(.dark) .bg-slate-800 *, html:not(.dark) .bg-gray-900 *, html:not(.dark) .bg-gray-800 * { color: #f1f5f9 !important; } /* Text-white classes preserved */ html:not(.dark) .text-white { color: #ffffff !important; } html:not(.dark) .text-white\/80 { color: rgba(255,255,255,0.8) !important; } html:not(.dark) .text-white\/60 { color: rgba(255,255,255,0.6) !important; } /* Inverse: containers blanc/cream avec texte qui était hardcoded blanc */ html:not(.dark) [style*="background:#fff"] [style*="color:#fff"], html:not(.dark) [style*="background:#ffffff"] [style*="color:#ffffff"], html:not(.dark) [style*="background:white"] [style*="color:white"] { color: #1f2937 !important; } /* D552 - Enhanced contrast fix - patterns supplémentaires + runtime amélioré */ /* === LIGHT TEXT classes hardcoded sur bg cream/blanc === */ html:not(.dark) .text-zinc-50, html:not(.dark) .text-zinc-100, html:not(.dark) .text-zinc-200, html:not(.dark) .text-slate-50, html:not(.dark) .text-slate-100, html:not(.dark) .text-slate-200, html:not(.dark) .text-gray-50, html:not(.dark) .text-gray-100, html:not(.dark) .text-gray-200 { color: #1f2937 !important; } /* === Dark BG variants supplémentaires === */ html:not(.dark) [style*="background:#0c1018"] *, html:not(.dark) [style*="background:#0e111c"] *, html:not(.dark) [style*="background:#141933"] *, html:not(.dark) [style*="background:#0d1117"] *, html:not(.dark) [style*="background-color:#141933"] *, html:not(.dark) [style*="background-color:#0d1117"] *, html:not(.dark) [style*="background:rgb(20,"] *, html:not(.dark) [style*="background:rgb(30,"] *, html:not(.dark) [style*="background-color:rgb(20,"] *, html:not(.dark) [style*="background-color:rgb(30,"] *, html:not(.dark) [style*="background:rgba(14,"] *, html:not(.dark) [style*="background:rgba(20,"] *, html:not(.dark) [style*="background:rgba(30,"] *, html:not(.dark) [style*="background:rgba(10,10,15"] *, html:not(.dark) [style*="background-color:rgba(14,"] *, html:not(.dark) [style*="background-color:rgba(20,"] *, html:not(.dark) [style*="background-color:rgba(30,"] * { color: #f1f5f9 !important; } /* === .stat / .phase / .input-group .composer-row classes communes === */ html:not(.dark) .stat, html:not(.dark) .phase, html:not(.dark) .phase-header, html:not(.dark) .input-group:not(.dark), html:not(.dark) .composer-row, html:not(.dark) .topbar, html:not(.dark) .nav-links, html:not(.dark) .links { /* If bg is dark via inline style, force text light */ } /* === Conteneurs avec .dark suffix === */ html:not(.dark) [class*="-dark"] *, html:not(.dark) [class*="dark-"]:not(.dark) * { color: inherit !important; } /* D553 - Surgical patterns for known dashboard structures */ /* === Common dashboard stat/phase/composer classes with dark bg === */ html:not(.dark) .stat, html:not(.dark) .stat *, html:not(.dark) .phase, html:not(.dark) .phase *, html:not(.dark) .phase-header, html:not(.dark) .phase-header *, html:not(.dark) .composer-row, html:not(.dark) .composer-row *, html:not(.dark) .input-group, html:not(.dark) .input-group *, html:not(.dark) .nav-links, html:not(.dark) .nav-links *, html:not(.dark) .links, html:not(.dark) .links *, html:not(.dark) .topbar:not(.bg-white), html:not(.dark) .topbar:not(.bg-white) *, html:not(.dark) .d490-stat-item, html:not(.dark) .d490-stat-item *, html:not(.dark) .d491-plan-cta, html:not(.dark) .d491-plan-cta * { color: #f1f5f9 !important; } /* Override if these have light bg explicitly */ html:not(.dark) .stat[style*="background:#fff"], html:not(.dark) .stat[style*="background:white"], html:not(.dark) .stat[style*="background-color:#fff"] { color: #1f2937 !important; } /* Light text classes hardcoded sur bg light → force dark */ html:not(.dark) .text-zinc-50, html:not(.dark) .text-zinc-100, html:not(.dark) .text-zinc-200, html:not(.dark) .text-slate-50, html:not(.dark) .text-slate-100, html:not(.dark) .text-slate-200, html:not(.dark) .text-gray-50, html:not(.dark) .text-gray-100, html:not(.dark) .text-gray-200 { color: #1f2937 !important; } /* But preserve inside actual dark containers */ html:not(.dark) .stat .text-zinc-100, html:not(.dark) .stat .text-slate-100, html:not(.dark) [class*="dark"] .text-zinc-100, html:not(.dark) [style*="background:#0a"] .text-zinc-100, html:not(.dark) [style*="background:#0f"] .text-zinc-100, html:not(.dark) [style*="background:#11"] .text-zinc-100 { color: #f1f5f9 !important; } /* === Variants of dark backgrounds === */ html:not(.dark) [style*="background:rgb(15,"] *, html:not(.dark) [style*="background:rgb(20,"] *, html:not(.dark) [style*="background:rgb(30,"] *, html:not(.dark) [style*="background-color:rgb(15,"] *, html:not(.dark) [style*="background-color:rgb(20,"] *, html:not(.dark) [style*="background-color:rgb(30,"] *, html:not(.dark) [style*="background:rgba(8,"] *, html:not(.dark) [style*="background:rgba(10,"] *, html:not(.dark) [style*="background:rgba(14,"] *, html:not(.dark) [style*="background:rgba(15,"] *, html:not(.dark) [style*="background:rgba(20,"] *, html:not(.dark) [style*="background:rgba(30,"] *, html:not(.dark) [style*="background-color:rgba(8,"] *, html:not(.dark) [style*="background-color:rgba(10,"] *, html:not(.dark) [style*="background-color:rgba(14,"] *, html:not(.dark) [style*="background-color:rgba(15,"] *, html:not(.dark) [style*="background-color:rgba(20,"] *, html:not(.dark) [style*="background-color:rgba(30,"] * { color: #f1f5f9 !important; } /* D555 - Désactive TOUTES animations infinite platform-wide Préserve uniquement les status dots intentionnels (3-4 classes connues) */ /* === Force toutes animations one-shot === */ * { animation-iteration-count: 1 !important; animation-fill-mode: forwards !important; } /* === Whitelist : status dots qui DOIVENT pulser intentionnellement === */ .live-dot, .pulse-dot, .status-pulse, .pulse-only, [class="pulse-dot"], [class="live-dot"], .pulse-indicator, .dot-pulse { animation-iteration-count: infinite !important; } /* === Kill spécifique des animations longues qui font respirer la page === */ * { animation-duration: 0s !important; } .live-dot, .pulse-dot, .status-pulse, .pulse-only, .pulse-indicator, .dot-pulse { animation-duration: 2s !important; } /* === Override fade-in/slide-up: instant (no animation needed) === */ [class*="fade-in"], [class*="fadeIn"], [class*="fade-up"], [class*="fadeUp"], [class*="slide-up"], [class*="slideUp"], [class*="enter-"], [class*="reveal"], [class*="card-fade"], [class*="organic"] { animation: none !important; opacity: 1 !important; transform: none !important; } /* === Disable hover transforms qui peuvent paraître pulser === */ [style*="transform: scale"]:not(:hover) { transform: none !important; } :root { --wtp-bg-light: #F5F0EB; --wtp-text-light: #1A1A2E; --wtp-accent-light: #2563EB; --wtp-surface-light: #FFFFFF; --wtp-muted-light: #6B6B7B; --wtp-bg-dark: #1A1A2E; --wtp-text-dark: #E0E0E0; --wtp-accent-dark: #60A5FA; --wtp-surface-dark: #252540; --wtp-muted-dark: #A0A0B0; } html[data-theme='light'], body[data-theme='light'] { --bg-primary: var(--wtp-bg-light); --text-primary: var(--wtp-text-light); --accent-primary: var(--wtp-accent-light); --surface-primary: var(--wtp-surface-light); --text-muted: var(--wtp-muted-light); background-color: var(--wtp-bg-light) !important; color: var(--wtp-text-light) !important; } html[data-theme='dark'], body[data-theme='dark'] { --bg-primary: var(--wtp-bg-dark); --text-primary: var(--wtp-text-dark); --accent-primary: var(--wtp-accent-dark); --surface-primary: var(--wtp-surface-dark); --text-muted: var(--wtp-muted-dark); background-color: var(--wtp-bg-dark) !important; color: var(--wtp-text-dark) !important; } html[data-theme='light'] body, html[data-theme='dark'] body { background-color: var(--bg-primary) !important; color: var(--text-primary) !important; } html[data-theme='light'] div, html[data-theme='light'] section, html[data-theme='light'] article, html[data-theme='dark'] div, html[data-theme='dark'] section, html[data-theme='dark'] article { background-color: transparent; }
ÉTUDES DE CAS

Des résultats mesurables

22 clients accompagnés dans leur transformation digitale. IA souveraine, Cloud, Marketing Digital, SAP — des cas concrets avec impact quantifié.

22
Clients actifs
8
Pays
200+
Projets livrés
AbbottPharma

Déploiement d'une plateforme de marketing digital multi-canal pour les professionnels de santé. Ciblage HCP, consentement RGPD, analytics temps réel.

+45%
Engagement HCP
97%
Délivrabilité
14j
Mise en production
Marketing DigitalPharmaRGPD
SafranAéronautique

Migration Cloud et intégration SAP S/4HANA pour la division propulsion. Optimisation des processus achats et supply chain.

-30%
Coûts infra
99.9%
Disponibilité
x3
Rapidité reporting
SAP S/4HANACloudSupply Chain
RATPTransport

Audit cybersécurité et mise en conformité RGPD des systèmes d'information voyageurs. Tests de pénétration et recommandations.

0
Incidents post-audit
100%
Conformité RGPD
CybersécuritéRGPDAudit
OCP GroupIndustrie

Transformation digitale et déploiement d'une plateforme IA pour l'optimisation des processus industriels et la maintenance prédictive.

-25%
Temps d'arrêt
+18%
Productivité
IA IndustrielleMaintenance prédictive
Société GénéraleBanque

Intégration Cloud souverain et migration des systèmes de reporting réglementaire. Conformité Bâle III et automatisation.

-40%
Temps reporting
100%
Conformité
Cloud SouverainBanqueConformité
L'OréalCosmétique

Stratégie marketing digital omnicanal et déploiement de campagnes automatisées pour les marchés Maghreb et Afrique.

+62%
Taux d'ouverture
x2.5
ROI campagnes
Marketing DigitalAutomationOmnicanal
MichelinIndustrie

Déploiement ERP SAP et intégration des flux logistiques pour les opérations Afrique du Nord. Formation équipes locales.

-35%
Délais logistiques
150
Utilisateurs formés
SAPLogistiqueFormation
Ministère des ArméesDéfense

Audit de sécurité des infrastructures IT et recommandations d'architecture Cloud souverain. Classification et chiffrement.

A+
Score sécurité
0
Vulnérabilités critiques
CybersécuritéCloud SouverainDéfense
Client ConfidentielPharma

Plateforme B2B multi-canal pour la communication avec 50 000+ professionnels de santé. Email, SMS, consentement.

50K+
HCP contactés
98%
Conformité consentement
Marketing DigitalPharma B2BMulti-canal

Un projet similaire ?

Discutons de vos enjeux. Audit gratuit et proposition sous 48h.

Réserver un audit →