<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Quantum Gateway (QG-1) - 3D WebGL</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.128/examples/js/controls/OrbitControls.js"></script>
    <style>
        body { margin: 0; background: black; }
        canvas { display: block; }
    </style>
</head>
<body>
    <script>
        // Initialize scene, camera, renderer
        const scene = new THREE.Scene();
        const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
        const renderer = new THREE.WebGLRenderer({ antialias: true });
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);

        // Add orbit controls for interaction
        const controls = new THREE.OrbitControls(camera, renderer.domElement);
        controls.enableDamping = true;

        // Add glowing cube (Quantum Gateway Core)
        const cubeGeometry = new THREE.BoxGeometry(3, 3, 3);
        const cubeMaterial = new THREE.MeshStandardMaterial({
            color: 0x00ffff,
            emissive: 0x00ffff,
            emissiveIntensity: 0.5,
            transparent: true,
            opacity: 0.7,
            wireframe: true
        });
        const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
        scene.add(cube);

        // Quantum Particle System (energy stream)
        const particleGeometry = new THREE.BufferGeometry();
        const particleCount = 500;
        const positions = new Float32Array(particleCount * 3);
        for (let i = 0; i < particleCount * 3; i++) {
            positions[i] = (Math.random() - 0.5) * 10;
        }
        particleGeometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));

        const particleMaterial = new THREE.PointsMaterial({
            color: 0xff00ff,
            size: 0.05,
            transparent: true
        });
        const particles = new THREE.Points(particleGeometry, particleMaterial);
        scene.add(particles);

        // Quantum Gateway Hologram
        const hologramGeometry = new THREE.TorusGeometry(2, 0.1, 16, 100);
        const hologramMaterial = new THREE.MeshStandardMaterial({
            color: 0x9900ff,
            emissive: 0x9900ff,
            emissiveIntensity: 1.5,
            transparent: true,
            opacity: 0.6
        });
        const hologram = new THREE.Mesh(hologramGeometry, hologramMaterial);
        hologram.rotation.x = Math.PI / 2;
        scene.add(hologram);

        // Lighting
        const ambientLight = new THREE.AmbientLight(0xffffff, 0.2);
        scene.add(ambientLight);

        const pointLight = new THREE.PointLight(0x00ffff, 1.5, 50);
        pointLight.position.set(5, 5, 5);
        scene.add(pointLight);

        // Camera Position
        camera.position.z = 8;

        // Animation loop
        function animate() {
            requestAnimationFrame(animate);

            // Rotate cube and hologram
            cube.rotation.y += 0.01;
            hologram.rotation.z += 0.005;

            // Animate energy particles
            const positions = particleGeometry.attributes.position.array;
            for (let i = 0; i < particleCount; i++) {
                positions[i * 3 + 1] += 0.02; // Move particles up
                if (positions[i * 3 + 1] > 5) positions[i * 3 + 1] = -5; // Reset position
            }
            particleGeometry.attributes.position.needsUpdate = true;

            controls.update();
            renderer.render(scene, camera);
        }

        animate();

        // Responsive resizing
        window.addEventListener('resize', () => {
            renderer.setSize(window.innerWidth, window.innerHeight);
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
        });

    </script>
</body>
</html>