Files
luftglanz/js/star-background.js
Luftglanz ac7088c5ca Initial commit: Luftglanz drone website with integrated AI chat assistant
Features:
- Complete Luftglanz drone cleaning website
- AI chat assistant integrated with OpenAI API
- Expert product advice for AGO Quart and Mellerud cleaning products
- Formal German language support (Sie form)
- Secure PHP backend for API calls
- Responsive design with mobile support
- Product-specific knowledge base
- Safety statements from manufacturers
- Multi-page integration (index, products, services, contact)

Technical components:
- AI chat widget (js/ai-chat.js)
- Chat styling (css/components/ai-chat.css)
- Backend API (ai-chat-api.php)
- Product knowledge base with detailed specifications
- Demo and documentation files
2025-07-08 11:54:37 +02:00

95 lines
3.5 KiB
JavaScript

/**
* Dynamic Star Background Generator
* Creates an animated cosmic background with stars and nebulae
*/
(function() {
document.addEventListener('DOMContentLoaded', function() {
// Create canvas for star background if it doesn't exist
if (!document.getElementById('stars-canvas')) {
createStarCanvas();
}
});
function createStarCanvas() {
const canvas = document.createElement('canvas');
canvas.id = 'stars-canvas';
canvas.style.position = 'fixed';
canvas.style.top = '0';
canvas.style.left = '0';
canvas.style.width = '100%';
canvas.style.height = '100%';
canvas.style.zIndex = '-1';
canvas.style.pointerEvents = 'none';
document.body.prepend(canvas);
// Make the canvas responsive
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
// Redraw on window resize
window.addEventListener('resize', function() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
drawStarBackground(canvas);
});
// Draw initial star background
drawStarBackground(canvas);
}
function drawStarBackground(canvas) {
const ctx = canvas.getContext('2d');
const width = canvas.width;
const height = canvas.height;
// Clear canvas
ctx.clearRect(0, 0, width, height);
// Create gradient background
const bgGradient = ctx.createLinearGradient(0, 0, 0, height);
bgGradient.addColorStop(0, '#070b1a');
bgGradient.addColorStop(1, '#0c1426');
ctx.fillStyle = bgGradient;
ctx.fillRect(0, 0, width, height);
// Draw nebulae
drawNebula(ctx, width * 0.2, height * 0.3, width * 0.4, height * 0.4, '#5846f9', 0.05);
drawNebula(ctx, width * 0.7, height * 0.7, width * 0.5, height * 0.5, '#00c2ff', 0.05);
// Draw stars
const starCount = Math.floor((width * height) / 1000); // Adaptive star count
for (let i = 0; i < starCount; i++) {
const x = Math.random() * width;
const y = Math.random() * height;
const size = Math.random() * 2;
const opacity = Math.random() * 0.8 + 0.2;
ctx.beginPath();
ctx.arc(x, y, size, 0, Math.PI * 2);
ctx.fillStyle = `rgba(255, 255, 255, ${opacity})`;
ctx.fill();
// Add glow to some stars
if (Math.random() > 0.95) {
ctx.beginPath();
ctx.arc(x, y, size * 4, 0, Math.PI * 2);
const glowColor = Math.random() > 0.5 ? '0, 194, 255' : '88, 70, 249';
const glow = ctx.createRadialGradient(x, y, size, x, y, size * 4);
glow.addColorStop(0, `rgba(${glowColor}, 0.3)`);
glow.addColorStop(1, `rgba(${glowColor}, 0)`);
ctx.fillStyle = glow;
ctx.fill();
}
}
}
function drawNebula(ctx, x, y, width, height, color, opacity) {
const nebulaGradient = ctx.createRadialGradient(x, y, 10, x, y, Math.max(width, height));
nebulaGradient.addColorStop(0, `${color}${Math.floor(opacity * 255).toString(16).padStart(2, '0')}`);
nebulaGradient.addColorStop(1, 'transparent');
ctx.fillStyle = nebulaGradient;
ctx.fillRect(x - width / 2, y - height / 2, width, height);
}
})();