<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="utf-8" />

  <meta name="viewport" content="width=device-width, initial-scale=1" />

  <title>Debris Optics</title>

  <style>

    * { margin: 0; padding: 0; }

    html, body { height: 100%; background: #000; overflow: hidden; }

    canvas { position: fixed; inset: 0; display: block; }

    .logo {

      position: fixed;

      top: 32px;

      right: 40px;

      color: rgba(255,255,255,0.55);

      font-size: 13px;

      letter-spacing: 0.2em;

      z-index: 10;

      font-family: system-ui, sans-serif;

      pointer-events: none;

    }

  </style>

</head>

<body>

  <div class="logo">DEBRIS OPTICS</div>


  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r169/three.min.js"></script>

  <script>

    const scene = new THREE.Scene();

    const camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 100);

    camera.position.z = 7;


    const renderer = new THREE.WebGLRenderer({ antialias: true });

    renderer.setSize(window.innerWidth, window.innerHeight);

    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));

    renderer.setClearColor(0x000000);

    document.body.appendChild(renderer.domElement);


    const portal = new THREE.Group();

    scene.add(portal);


    // Outer rings

    for (let i = 0; i < 6; i++) {

      const geo = new THREE.RingGeometry(1.6 + i * 0.38, 1.64 + i * 0.38, 128);

      const mat = new THREE.MeshBasicMaterial({

        color: 0x4da6ff,

        transparent: true,

        opacity: 0.25 + i * 0.05,

        side: THREE.DoubleSide

      });

      const ring = new THREE.Mesh(geo, mat);

      ring.rotation.x = Math.PI / 2.15;

      portal.add(ring);

    }


    // Core

    const core = new THREE.Mesh(

      new THREE.CircleGeometry(1.45, 64),

      new THREE.MeshBasicMaterial({ color: 0x001122 })

    );

    core.position.z = 0.05;

    portal.add(core);


    function animate() {

      requestAnimationFrame(animate);

      portal.rotation.z += 0.006;

      portal.rotation.x = Math.sin(Date.now() * 0.0004) * 0.1;

      renderer.render(scene, camera);

    }

    animate();


    window.addEventListener('resize', () => {

      camera.aspect = window.innerWidth / window.innerHeight;

      camera.updateProjectionMatrix();

      renderer.setSize(window.innerWidth, window.innerHeight);

    });

  </script>

</body>

</html>