/* 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; }
Page unifiée couvrant: master-dispatch, orchestrator-scan, run-tests, ia-safe, saas-chat, sync-exec. Doctrine 53.
| Endpoint | Description | Action |
|---|---|---|
/api/weval-ia | AI safe endpoint (health check) | |
/api/weval-ia-safe | Safe AI wrapper avec guards | |
/api/wevia-master-dispatch | Dispatch intents vers modules | |
/api/wevia-orchestrator-scan | Scan capabilities orchestrator | |
/api/wevia-run-tests | Lance tests NonReg + L99 | |
/api/saas-chat | Chat client SaaS | |
/api/sync-exec | Sync exec layer | |
/api/nonreg-api.php?cat=all | NonReg suite complete | |
/api/l99-api.php?action=stats | L99 stats all layers |
Clique un bouton pour tester un endpoint. Résultat affiché ici.