VibeCoderzVibeCoderz
Telegram
All Prompts
Futuristic Hero Section with 3D Particle Background preview
herosectionlandingthreejstailwindanimatedinteractiveresponsive

Futuristic Hero Section with 3D Particle Background

Футуристичный Hero Section с 3D-частицами. Интерактивный фон Three.js, навигация, CTA. Адаптивный дизайн для лендингов AI и high-tech продуктов.

Prompt

<div id="quantum-hero-root"
  class="relative bg-black text-white overflow-hidden font-sans w-full min-h-screen selection:bg-emerald-500 selection:text-black">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
  <script src="https://cdn.tailwindcss.com"></script>

  <!-- Interactive Background -->
  <div class="absolute inset-0 z-0 bg-radial-gradient from-zinc-900 to-black">
    <canvas id="hero-canvas" class="block w-full h-full"></canvas>
    <script>
      (function() {
        const canvas = document.querySelector('#hero-canvas');
        const scene = new THREE.Scene();
        const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
        const renderer = new THREE.WebGLRenderer({ canvas, alpha: true, antialias: true });
        
        renderer.setPixelRatio(window.devicePixelRatio);
        renderer.setSize(window.innerWidth, window.innerHeight);
        camera.position.z = 5;

        const count = 4000;
        const positions = new Float32Array(count * 3);
        const velocities = new Float32Array(count * 3);
        const home = new Float32Array(count * 3);
        const colors = new Float32Array(count * 3);

        const colorPalette = [new THREE.Color('#10b981'), new THREE.Color('#06b6d4'), new THREE.Color('#f4f4f5')];

        for(let i = 0; i < count; i++) {
          const i3 = i * 3;
          // Scatter particles in a sphere-like volume
          const theta = Math.random() * Math.PI * 2;
          const phi = Math.acos((Math.random() * 2) - 1);
          const r = 4 + Math.random() * 2;
          
          home[i3] = r * Math.sin(phi) * Math.cos(theta);
          home[i3+1] = r * Math.sin(phi) * Math.sin(theta);
          home[i3+2] = r * Math.cos(phi);

          positions[i3] = home[i3];
          positions[i3+1] = home[i3+1];
          positions[i3+2] = home[i3+2];

          const color = colorPalette[Math.floor(Math.random() * colorPalette.length)];
          colors[i3] = color.r;
          colors[i3+1] = color.g;
          colors[i3+2] = color.b;
        }

        const geometry = new THREE.BufferGeometry();
        geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
        geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));
        
        const material = new THREE.PointsMaterial({
          size: 0.025,
          vertexColors: true,
          transparent: true,
          opacity: 0.8,
          blending: THREE.AdditiveBlending
        });

        const points = new THREE.Points(geometry, material);
        scene.add(points);

        const mouse = { x: -999, y: -999, active: false };
        const raycaster = new THREE.Raycaster();
        const plane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);

        window.addEventListener('mousemove', (e) => {
          const rect = canvas.getBoundingClientRect();
          const x = ((e.clientX - rect.left) / rect.width) * 2 - 1;
          const y = -((e.clientY - rect.top) / rect.height) * 2 + 1;
          
          raycaster.setFromCamera({x, y}, camera);
          const intersectPoint = new THREE.Vector3();
          raycaster.ray.intersectPlane(plane, intersectPoint);
          mouse.x = intersectPoint.x;
          mouse.y = intersectPoint.y;
          mouse.active = true;
        });

        window.addEventListener('mousedown', () => {
          for(let i = 0; i < count; i++) {
            const i3 = i * 3;
            const dx = positions[i3] - mouse.x;
            const dy = positions[i3+1] - mouse.y;
            const dist = Math.sqrt(dx*dx + dy*dy);
            if(dist < 1.5) {
              const force = (1.5 - dist) * 0.8;
              velocities[i3] += (dx / dist) * force;
              velocities[i3+1] += (dy / dist) * force;
            }
          }
        });

        function animate() {
          requestAnimationFrame(animate);
          const pos = points.geometry.attributes.position.array;
          
          for(let i = 0; i < count; i++) {
            const i3 = i * 3;
            
            // Attract to mouse
            if(mouse.active) {
              const dx = mouse.x - pos[i3];
              const dy = mouse.y - pos[i3+1];
              const dist = Math.sqrt(dx*dx + dy*dy);
              if(dist < 2.5) {
                const pull = (2.5 - dist) * 0.0005;
                velocities[i3] += dx * pull;
                velocities[i3+1] += dy * pull;
              }
            }

            // Return to home
            velocities[i3] += (home[i3] - pos[i3]) * 0.01;
            velocities[i3+1] += (home[i3+1] - pos[i3+1]) * 0.01;
            velocities[i3+2] += (home[i3+2] - pos[i3+2]) * 0.01;

            // Apply physics
            pos[i3] += velocities[i3];
            pos[i3+1] += velocities[i3+1];
            pos[i3+2] += velocities[i3+2];

            // Friction
            velocities[i3] *= 0.92;
            velocities[i3+1] *= 0.92;
            velocities[i3+2] *= 0.92;
          }
          
          points.geometry.attributes.position.needsUpdate = true;
          renderer.render(scene, camera);
        }

        animate();

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

  <!-- UI Overlay -->
  <nav class="absolute top-0 w-full z-20 px-6 py-8">
    <div class="max-w-7xl mx-auto flex justify-between items-center">
      <div class="flex items-center gap-2 group cursor-pointer">
        <div
          class="w-8 h-8 bg-emerald-500 rounded-sm rotate-45 group-hover:rotate-90 transition-transform duration-500">
        </div>
        <span class="text-xl font-black tracking-widest">AETHER<span class="text-emerald-500">CORE</span></span>
      </div>
      <div class="hidden md:flex gap-10 text-[10px] font-bold uppercase tracking-[0.3em] text-zinc-400">
        <a href="#" class="hover:text-emerald-400 transition-colors">Neural_Net</a>
        <a href="#" class="hover:text-emerald-400 transition-colors">Architecture</a>
        <a href="#" class="hover:text-emerald-400 transition-colors">Uplink</a>
      </div>
      <button class="bg-white/5 border border-white/10 px-4 py-2 text-[10px] font-bold uppercase tracking-widest hover:bg-emerald-500 hover:text-black transition-all">
        Contact_Unit
      </button>
    </div>
  </nav>

  <main class="relative z-10 flex flex-col items-center justify-center min-h-screen px-6 text-center">
    <div class="max-w-4xl">
      <div
        class="inline-flex items-center gap-3 px-4 py-1.5 rounded-full bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 text-[10px] font-bold uppercase tracking-widest mb-8 animate-pulse">
        <span class="relative flex h-2 w-2">
          <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75"></span>
        <span class="relative inline-flex rounded-full h-2 w-2 bg-emerald-500"></span>
        </span>
        System Status: High Fidelity
      </div>

      <h1 class="text-5xl md:text-8xl font-black uppercase tracking-tighter leading-[0.85] mb-8">
        Defining the<br>
        <span class="text-transparent bg-clip-text bg-gradient-to-r from-emerald-400 to-cyan-500">Neural Frontier</span>
      </h1>

      <p class="text-zinc-400 text-lg md:text-xl max-w-2xl mx-auto mb-12 font-light leading-relaxed">
        Building hyper-responsive digital ecosystems through autonomous spatial computing and next-generation vertex
        manipulation.
      </p>

      <div class="flex flex-col sm:flex-row items-center justify-center gap-6">
        <a href="#"
          class="group relative px-10 py-5 bg-white text-black font-black uppercase text-xs tracking-[0.2em] overflow-hidden transition-transform active:scale-95">
          <span class="relative z-10">Initialize Protocol</span>
          <div
            class="absolute inset-0 bg-emerald-500 translate-y-full group-hover:translate-y-0 transition-transform duration-300">
          </div>
        </a>
        <a href="#"
          class="px-10 py-5 border border-white/20 hover:border-emerald-500/50 text-white font-black uppercase text-xs tracking-[0.2em] transition-all hover:bg-white/5">
          Review Archive
        </a>
      </div>
    </div>

    <!-- Data Ribbon -->
    <div
      class="absolute bottom-12 w-full max-w-7xl flex flex-wrap justify-between items-center gap-8 border-t border-white/5 pt-12 px-6">
      <div class="flex flex-col items-start">
        <span class="text-[10px] font-bold text-emerald-500 uppercase tracking-widest mb-1">Latency_Rating</span>
        <span class="text-2xl font-mono font-bold">14.002<span class="text-xs text-zinc-500 ml-1">MS</span></span>
      </div>
      <div class="flex flex-col items-start">
        <span class="text-[10px] font-bold text-emerald-500 uppercase tracking-widest mb-1">Active_Nodes</span>
        <span class="text-2xl font-mono font-bold">1,240<span class="text-xs text-zinc-500 ml-1">QTY</span></span>
      </div>
      <div class="flex flex-col items-start">
        <span class="text-[10px] font-bold text-emerald-500 uppercase tracking-widest mb-1">Uptime_Metric</span>
        <span class="text-2xl font-mono font-bold">99.99<span class="text-xs text-zinc-500 ml-1">%</span></span>
      </div>
      <div class="hidden lg:block">
        <div class="text-[10px] font-bold text-zinc-600 uppercase tracking-widest">Global Encryption Active // AES-256
        </div>
      </div>
    </div>
  </main>
</div>
All Prompts