Add a dynamic threat meter that shows risk level in real-time:
<!-- Add to your message component -->
<div class="threat-indicator">
<div class="threat-meter">
<div class="threat-level" style="width: 75%; background: linear-gradient(90deg, #10b981, #f59e0b, #ef4444);">
<span>Risk: 75/100</span>
</div>
</div>
<span class="threat-label">HIGH THREAT</span>
</div>
Replace the simple loader with an AI brain animation:
.ai-thinking {
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.7; transform: scale(1.05); }
}
Add real-time statistics panel:
<div className="stats-panel">
<div className="stat-card">
<i className="fas fa-shield-alt"></i>
<div>
<h3>247</h3>
<p>Threats Blocked</p>
</div>
</div>
<div className="stat-card">
<i className="fas fa-clock"></i>
<div>
<h3>< 30s</h3>
<p>Avg Response Time</p>
</div>
</div>
<div className="stat-card">
<i className="fas fa-check-circle"></i>
<div>
<h3>99.8%</h3>
<p>Accuracy Rate</p>
</div>
</div>
</div>
Show AI confidence for each response:
{msg.confidence && (
<div className="confidence-badge">
<i className="fas fa-brain"></i>
<span>AI Confidence: {msg.confidence}%</span>
</div>
)}
For attack progression visualization:
<div className="attack-timeline">
{timeline.map((event, idx) => (
<div key={idx} className="timeline-event">
<div className="timeline-dot"></div>
<div className="timeline-content">
<span className="time">{event.time}</span>
<p>{event.description}</p>
</div>
</div>
))}
</div>
Add pulsing icons for active threats:
.threat-icon {
animation: threat-pulse 1.5s ease-in-out infinite;
}
@keyframes threat-pulse {
0%, 100% {
transform: scale(1);
color: #ef4444;
}
50% {
transform: scale(1.2);
color: #fca5a5;
filter: drop-shadow(0 0 10px #ef4444);
}
}
Enhance the cybersecurity aesthetic:
.message-bubble-astra {
background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
border: 1px solid rgba(59, 130, 246, 0.3);
box-shadow: 0 4px 20px rgba(59, 130, 246, 0.1);
}
.message-bubble-astra:hover {
border-color: rgba(59, 130, 246, 0.6);
box-shadow: 0 8px 30px rgba(59, 130, 246, 0.2);
}
Show ASTRA is “thinking”:
{isLoading && (
<div className="typing-indicator">
<div className="typing-dot"></div>
<div className="typing-dot"></div>
<div className="typing-dot"></div>
</div>
)}
Add subtle audio feedback:
const playNotificationSound = () => {
const audio = new Audio('data:audio/wav;base64,UklGRnoGAABXQVZFZm10...');
audio.volume = 0.3;
audio.play();
};
Add inline actions to responses:
<div className="quick-actions">
<button className="action-btn">
<i className="fas fa-download"></i> Export
</button>
<button className="action-btn">
<i className="fas fa-ban"></i> Block IP
</button>
<button className="action-btn">
<i className="fas fa-bell"></i> Create Alert
</button>
</div>
:root {
--critical: #ef4444;
--high: #f59e0b;
--medium: #eab308;
--low: #10b981;
--info: #3b82f6;
}
Add a subtle animated grid for cyber aesthetic:
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image:
linear-gradient(rgba(59, 130, 246, 0.05) 1px, transparent 1px),
linear-gradient(90deg, rgba(59, 130, 246, 0.05) 1px, transparent 1px);
background-size: 50px 50px;
pointer-events: none;
z-index: -1;
}