phase39 doctrine 177 direct injection 4 pages lourdes - 49 pages UX total
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
4 pages timeout fix: - architecture-live (47KB) enrichie via cascade Cerebras - agents-valuechain (29KB) enrichie via cascade Cerebras - growth-engine-v2 (162KB) injection directe Python (bypass 200KB limit) - enterprise-model (207KB) injection directe Python (bypass 200KB limit) Nouveau handler: - /var/www/html/api/inject-d60-direct.py - Bypass Cerebras pour pages lourdes - CSS+JS doctrine 60 minimal mais complet - GOLD backups + chattr handling auto Total session: - 49 pages UX doctrine 60 (45 + 4 pages lourdes) - 38 tags Opus push dual - 24 doctrines vault (146-177)
This commit is contained in:
@@ -131,6 +131,46 @@ h1 span{background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-bac
|
||||
}
|
||||
</style>
|
||||
<script src="/js/wevia-a11y-auto.js" defer></script>
|
||||
<!-- DOCTRINE-60-UX-ENRICH cerebras-qwen-235b 20260424-125843 --><style id="doctrine60-ux-agents-valuechain">
|
||||
body::before {
|
||||
content: '';
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: radial-gradient(circle, rgba(0,0,0,0.12), transparent 70%);
|
||||
z-index: -1;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.card, .btn, .kpi, .panel {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
.enter-stagger {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.6; }
|
||||
}
|
||||
.pulse, .active, .live-indicator, .online {
|
||||
animation: pulse 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
box-shadow: 0 8px 24px rgba(0,0,0,0.15);
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
.modal, .chat, .speech, .overlay {
|
||||
backdrop-filter: blur(12px);
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body style="padding-top:60px">
|
||||
<!-- BETON-DOCTRINE-101 dual-dummy block (pages pub) -->
|
||||
@@ -529,5 +569,19 @@ render();
|
||||
<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-agents-valuechain">
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach((entry, index) => {
|
||||
if (entry.isIntersecting) {
|
||||
setTimeout(() => {
|
||||
entry.target.classList.add('enter-stagger');
|
||||
}, index * 80);
|
||||
}
|
||||
});
|
||||
}, { threshold: 0.1 });
|
||||
|
||||
document.querySelectorAll('.card, .btn, .kpi, .panel').forEach(el => observer.observe(el));
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
103
api/inject-d60-direct.py
Executable file
103
api/inject-d60-direct.py
Executable file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Doctrine 177: Inject doctrine 60 UX directly bypass cascade (pour pages lourdes)"""
|
||||
import sys, os, hashlib, shutil, subprocess, time
|
||||
|
||||
# CSS+JS minimal but complete doctrine 60
|
||||
CSS_D60 = """
|
||||
/* 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); }
|
||||
}
|
||||
"""
|
||||
|
||||
JS_D60 = """
|
||||
// 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));
|
||||
})();
|
||||
"""
|
||||
|
||||
def inject(path):
|
||||
if not os.path.exists(path):
|
||||
return {'err': 'not_found', 'path': path}
|
||||
with open(path) as f:
|
||||
html = f.read()
|
||||
if 'DOCTRINE-60-UX-ENRICH' in html:
|
||||
return {'already': True, 'path': path}
|
||||
|
||||
ts = time.strftime('%Y%m%d-%H%M%S')
|
||||
name = os.path.basename(path)
|
||||
backup = f'/var/www/html/vault-gold/opus/{name}.doctrine177-direct-{ts}.bak'
|
||||
shutil.copyfile(path, backup)
|
||||
|
||||
css_block = f'<!-- DOCTRINE-60-UX-ENRICH direct-inject-{ts} -->\n<style id="doctrine60-ux-direct">\n{CSS_D60}\n</style>'
|
||||
js_block = f'<!-- DOCTRINE-60-UX-JS --><script id="doctrine60-ux-js-direct">\n{JS_D60}\n</script>'
|
||||
|
||||
if '</head>' in html:
|
||||
html = html.replace('</head>', css_block + '\n</head>', 1)
|
||||
else:
|
||||
html = css_block + '\n' + html
|
||||
|
||||
if '</body>' in html:
|
||||
html = html.replace('</body>', js_block + '\n</body>', 1)
|
||||
else:
|
||||
html = html + '\n' + js_block
|
||||
|
||||
# Unlock / write / relock
|
||||
try:
|
||||
subprocess.run(['sudo', 'chattr', '-i', path], capture_output=True)
|
||||
except: pass
|
||||
with open(path, 'w') as f:
|
||||
f.write(html)
|
||||
try:
|
||||
subprocess.run(['sudo', 'chattr', '+i', path], capture_output=True)
|
||||
except: pass
|
||||
|
||||
size = os.path.getsize(path)
|
||||
md5 = hashlib.md5(html.encode()).hexdigest()[:10]
|
||||
return {'ok': True, 'path': path, 'backup': backup, 'size': size, 'md5': md5}
|
||||
|
||||
if __name__ == '__main__':
|
||||
for page in sys.argv[1:]:
|
||||
path = f'/var/www/html/{page}.html'
|
||||
r = inject(path)
|
||||
print(f'{page}: {r}')
|
||||
@@ -71,6 +71,46 @@ body{font-family:var(--ff);background:var(--bg);color:var(--t);-webkit-font-smoo
|
||||
section{display:none}section.show{display:block}
|
||||
.footer{text-align:center;padding:24px;color:var(--dim2);font-size:11px}
|
||||
.footer a{color:var(--acc);text-decoration:none}
|
||||
</style>
|
||||
<!-- DOCTRINE-60-UX-ENRICH cerebras-qwen-235b 20260424-125842 --><style id="doctrine60-ux-architecture-live">
|
||||
body::before {
|
||||
content: '';
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: radial-gradient(ellipse at center, rgba(0,0,0,0.12) 0%, rgba(0,0,0,0) 70%);
|
||||
z-index: -1;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.card, .btn, .kpi, .panel {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
transition: opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1), transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
.enter-stagger {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.5; }
|
||||
}
|
||||
.pulse, .active, .live-indicator, .online {
|
||||
animation: pulse 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
box-shadow: 0 8px 24px rgba(0,0,0,0.15);
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
.modal, .chat, .speech, .overlay {
|
||||
backdrop-filter: blur(12px);
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -633,5 +673,19 @@ h1,.header-title,.main-title,.hub-title,.page-title{background-image:linear-grad
|
||||
</script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr t32b4) --><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-architecture-live">
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach((entry, index) => {
|
||||
if (entry.isIntersecting) {
|
||||
setTimeout(() => {
|
||||
entry.target.classList.add('enter-stagger');
|
||||
}, index * 80);
|
||||
}
|
||||
});
|
||||
}, { threshold: 0.1 });
|
||||
|
||||
document.querySelectorAll('.card, .btn, .kpi, .panel').forEach(el => observer.observe(el));
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -30,6 +30,45 @@ canvas{z-index:0!important}
|
||||
<script src="/widgets/audit-banner.js" defer></script>
|
||||
<!-- V109 Plausible Analytics -->
|
||||
<script defer data-domain="weval-consulting.com" src="https://analytics.weval-consulting.com/js/script.js"></script>
|
||||
<!-- DOCTRINE-60-UX-ENRICH direct-inject-20260424-130138 -->
|
||||
<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>
|
||||
<!-- BETON-DOCTRINE-101 dual-dummy block (pages pub) -->
|
||||
<div id="weval-global-logout" style="display:none!important;visibility:hidden!important" aria-hidden="true" data-beton-101="dummy-to-block-auto-injection"></div>
|
||||
@@ -1681,4 +1720,21 @@ if(typeof window._deptUpdate==='function') window._deptUpdate();
|
||||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||||
<!-- WTP_UDOCK_V1 (Opus 21-avr tour30) --><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>
|
||||
|
||||
@@ -68,6 +68,45 @@ html::-webkit-scrollbar-thumb:hover,body::-webkit-scrollbar-thumb:hover{backgrou
|
||||
.opus-x-btn{display:none!important;visibility:hidden!important;pointer-events:none!important}
|
||||
</style>
|
||||
<script src="/widgets/audit-banner.js" defer></script>
|
||||
<!-- DOCTRINE-60-UX-ENRICH direct-inject-20260424-130137 -->
|
||||
<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="amb"><div class="orb o1"></div><div class="orb o2"></div><div class="orb o3"></div></div>
|
||||
@@ -1897,5 +1936,22 @@ document.addEventListener('DOMContentLoaded',()=>{const s=document.createElement
|
||||
})();
|
||||
</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>
|
||||
|
||||
Reference in New Issue
Block a user