phase40 cockpit d60 + inject-direct tool
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled

This commit is contained in:
Opus
2026-04-24 13:44:09 +02:00
parent 5c0d6c4b68
commit 4938b718a2

View File

@@ -91,6 +91,51 @@ iframe.embed{width:100%;height:100%;border:0;background:transparent}
.dispatch-sidebar{max-height:200px;border-right:0;border-bottom:1px solid var(--border)}
.health-bar{display:none}
}
/* w314fix iframe Logout hide - parent cockpit shows its own */
iframe.embed{margin-top:0!important}
/* w314 Logout reposition BL doctrine */
.brand{position:relative}
</style>
<!-- DOCTRINE-60-UX-ENRICH direct-inject-20260424-134051 -->
<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>
@@ -381,6 +426,23 @@ fetch('/api/cdp-status.php').then(()=>{}); // warmup
document.getElementById('h-providers').textContent = '18';
document.getElementById('h-s95-dot').className = 'h-dot ok';
document.getElementById('h-s151-dot').className = 'h-dot ok';
</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>