VibeCoderzVibeCoderz
All Prompts
Futuristic Lab Landing and Dashboard Layout preview
herosectionuidashboardtailwindanimatedinteractivefullscreen

Futuristic Lab Landing and Dashboard Layout

Шаблон футуристичного лендинга и дашборда: полноэкранный sci-fi дизайн, сайдбар, карточки протоколов, таблицы данных. Tailwind, JS анимации.

Prompt

<html lang="en" vid="0"><head vid="1">
    <meta charset="UTF-8" vid="2">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" vid="3">
    <title vid="4">SGL — SYSTEMS</title>
    <script src="https://cdn.tailwindcss.com/3.4.17" vid="5"></script>
    <link rel="preconnect" href="https://fonts.googleapis.com" vid="6">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="" vid="7">
    <link href="https://fonts.googleapis.com/css2?family=Archivo:ital,wght@0,300;0,400;0,500;0,700;1,400&amp;family=JetBrains+Mono:wght@300;400;500&amp;display=swap" rel="stylesheet" vid="8">
    <style vid="9">
        :root {
            --bg-color: #f4f4f4;
            --text-color: #111111;
            --accent-color: #000000;
            --border-color: #cccccc;
        }

        body {
            background-color: var(--bg-color);
            color: var(--text-color);
            font-family: 'JetBrains Mono', monospace;
            overflow: hidden;
            width: 100vw;
            height: 100vh;
            -webkit-font-smoothing: antialiased;
        }

        .font-sans-display {
            font-family: 'Archivo', sans-serif;
        }

        
        ::-webkit-scrollbar {
            width: 4px;
        }
        ::-webkit-scrollbar-track {
            background: transparent;
        }
        ::-webkit-scrollbar-thumb {
            background: #000;
        }

        
        #landing-view {
            transition: transform 0.8s cubic-bezier(0.77, 0, 0.175, 1);
            z-index: 50;
        }

        #app-view {
            opacity: 0;
            pointer-events: none;
            transition: opacity 1s ease 0.4s;
            z-index: 40;
        }

        body.active-state #landing-view {
            transform: translateY(-100%);
        }

        body.active-state #app-view {
            opacity: 1;
            pointer-events: auto;
        }

        
        .canvas-container {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 0;
            pointer-events: none;
            opacity: 0.6;
        }

        
        .grid-bg {
            background-image: linear-gradient(to right, #e5e5e5 1px, transparent 1px),
                            linear-gradient(to bottom, #e5e5e5 1px, transparent 1px);
            background-size: 40px 40px;
        }

        .marquee-container {
            overflow: hidden;
            white-space: nowrap;
        }
        .marquee-content {
            display: inline-block;
            animation: marquee 20s linear infinite;
        }
        @keyframes marquee {
            0% { transform: translateX(0); }
            100% { transform: translateX(-50%); }
        }

        .hover-invert {
            transition: all 0.2s;
        }
        .hover-invert:hover {
            background-color: #000;
            color: #fff;
        }

        
        .text-huge { font-size: 14rem; line-height: 0.8; letter-spacing: -0.05em; }
        @media (max-width: 1024px) {
            .text-huge { font-size: 8rem; }
        }
    </style>
</head>
<body class="bg-[#f4f4f4] text-black" vid="10">

    
    <section id="landing-view" class="fixed inset-0 w-full h-full bg-[#f4f4f4] flex flex-col justify-between p-6 overflow-hidden" vid="11">
        
        <div class="absolute inset-0 grid-bg opacity-40 z-[-1]" vid="12"></div>
        
        
        <div class="canvas-container" vid="13">
            <canvas id="dna-canvas-landing" vid="14"></canvas>
        </div>

        
        <header class="flex justify-between items-start z-10 border-b border-black pb-4" vid="15">
            <div class="flex flex-col" vid="16">
                <h1 class="font-sans-display font-bold text-4xl tracking-tighter" vid="17">SGL</h1>
                <span class="text-xs mt-1 opacity-60" vid="18">SYNTHETIC GENOMICS LAB</span>
            </div>
            <div class="text-right font-mono text-xs leading-tight" vid="19">
                <div vid="20">SYS.STATUS: ONLINE</div>
                <div vid="21">SECURE CONNECTION</div>
                <div vid="22">ID: 884-XJ-9</div>
            </div>
        </header>

        
        <div class="flex-1 flex items-center relative z-10" vid="23">
            <div class="w-full" vid="24">
                <div class="font-sans-display text-huge font-black uppercase text-black mix-blend-multiply opacity-90 leading-none" vid="25">
                    Bio<br vid="26">Logic
                </div>
                <div class="mt-8 max-w-lg border-l-2 border-black pl-6 ml-2" vid="27">
                    <p class="font-mono text-sm uppercase leading-relaxed" vid="28">
                        We are rewriting the source code of humanity. 
                        Optimization of the somatic form through precise 
                        computational intervention.
                    </p>
                </div>
            </div>
        </div>

        
        <footer class="flex justify-between items-end z-10 pt-4 border-t border-black" vid="29">
            <div class="text-xs font-mono opacity-50" vid="30">
                © 2024 SGL INC.<br vid="31">
                ALL RIGHTS RESERVED.
            </div>
            
            <button onclick="enterSystem()" class="group flex items-center gap-4 cursor-pointer bg-transparent border-none outline-none" vid="32">
                <div class="text-right" vid="33">
                    <div class="text-xs uppercase tracking-widest mb-1 group-hover:translate-x-[-5px] transition-transform" vid="34">Initialize Protocol</div>
                    <div class="font-sans-display font-bold text-2xl uppercase" vid="35">Enter System</div>
                </div>
                <div class="w-12 h-12 bg-black text-white flex items-center justify-center group-hover:scale-110 transition-transform duration-300" vid="36">
                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="square" stroke-linejoin="round" vid="37"><path d="M5 12h14" vid="38"></path><path d="m12 5 7 7-7 7" vid="39"></path></svg>
                </div>
            </button>
        </footer>
    </section>


    
    <section id="app-view" class="fixed inset-0 w-full h-full bg-[#f4f4f4] flex flex-row" vid="40">
        
        <aside class="w-64 h-full border-r border-black flex flex-col justify-between bg-white z-50 relative shrink-0" vid="41">
            <div class="p-6" vid="42">
                <div class="font-sans-display font-bold text-3xl mb-12 tracking-tighter" vid="43">SGL</div>
                
                <nav class="flex flex-col gap-1" vid="44">
                    <a href="#" class="flex items-center justify-between p-3 hover:bg-black hover:text-white transition-colors group border-b border-gray-100" vid="45">
                        <span class="font-mono text-xs" vid="46">01</span>
                        <span class="font-sans-display font-medium uppercase tracking-wide" vid="47">Dashboard</span>
                    </a>
                    <a href="#" class="flex items-center justify-between p-3 hover:bg-black hover:text-white transition-colors group border-b border-gray-100" vid="48">
                        <span class="font-mono text-xs" vid="49">02</span>
                        <span class="font-sans-display font-medium uppercase tracking-wide" vid="50">Sequencing</span>
                    </a>
                    <a href="#" class="flex items-center justify-between p-3 hover:bg-black hover:text-white transition-colors group border-b border-gray-100" vid="51">
                        <span class="font-mono text-xs" vid="52">03</span>
                        <span class="font-sans-display font-medium uppercase tracking-wide" vid="53">Storage</span>
                    </a>
                    <a href="#" class="flex items-center justify-between p-3 hover:bg-black hover:text-white transition-colors group border-b border-gray-100" vid="54">
                        <span class="font-mono text-xs" vid="55">04</span>
                        <span class="font-sans-display font-medium uppercase tracking-wide" vid="56">Ethics</span>
                    </a>
                </nav>
            </div>

            <div class="p-6" vid="57">
                <div class="w-full h-32 border border-black p-2 mb-4 relative overflow-hidden" vid="58">
                    <div class="absolute top-2 left-2 text-[10px] uppercase" vid="59">Live Sample</div>
                    <canvas id="dna-canvas-sidebar" class="w-full h-full" vid="60"></canvas>
                </div>
                <div class="flex justify-between text-[10px] font-mono uppercase" vid="61">
                    <span vid="62">Sys: Normal</span>
                    <span vid="63">v.2.0.4</span>
                </div>
            </div>
        </aside>

        
        <main class="flex-1 h-full overflow-y-auto relative scroll-smooth" vid="64">
             
             <div class="w-full border-b border-black bg-black text-white py-2 overflow-hidden" vid="65">
                <div class="marquee-container" vid="66">
                    <div class="marquee-content font-mono text-xs uppercase tracking-widest" vid="67">
                        Initializing Sequence /// Subject: 8492-A /// Optimization Required /// Analysis Complete /// Warning: Genetic Drift Detected /// Initializing Sequence /// Subject: 8492-A /// Optimization Required /// Analysis Complete /// Warning: Genetic Drift Detected ///
                    </div>
                </div>
            </div>

            <div class="p-12 max-w-6xl mx-auto" vid="68">
                
                <header class="mb-24 relative" vid="69">
                    <div class="absolute -left-4 top-0 w-1 h-full bg-black" vid="70"></div>
                    <h2 class="font-sans-display text-7xl font-medium uppercase leading-tight mb-8" vid="71">
                        Architecting<br vid="72">
                        <span class="font-light italic text-gray-500" vid="73">The Future Human</span>
                    </h2>
                    <div class="grid grid-cols-1 md:grid-cols-2 gap-12" vid="74">
                        <p class="font-mono text-sm leading-relaxed uppercase" vid="75">
                            Our laboratory operates at the bleeding edge of synthetic genomics. We don't just read DNA; we write it. From aesthetic enhancements to metabolic overhauls, SGL provides the toolkit for the next stage of evolution.
                        </p>
                        <div class="flex gap-8 items-start" vid="76">
                            <div class="flex flex-col" vid="77">
                                <span class="text-4xl font-sans-display font-bold" vid="78">99.9%</span>
                                <span class="text-xs font-mono uppercase mt-2" vid="79">Accuracy Rate</span>
                            </div>
                            <div class="flex flex-col" vid="80">
                                <span class="text-4xl font-sans-display font-bold" vid="81">24h</span>
                                <span class="text-xs font-mono uppercase mt-2" vid="82">Turnaround</span>
                            </div>
                        </div>
                    </div>
                </header>

                
                <section class="mb-24" vid="83">
                    <div class="flex items-baseline justify-between border-b border-black pb-4 mb-8" vid="84">
                        <h3 class="font-sans-display text-3xl uppercase" vid="85">Active Protocols</h3>
                        <span class="font-mono text-xs" vid="86">[ SELECT MODULE ]</span>
                    </div>

                    <div class="grid grid-cols-1 md:grid-cols-2 gap-px bg-gray-200 border border-gray-200" vid="87">
                        
                        <div class="bg-white p-8 hover:bg-gray-50 transition-colors group cursor-pointer h-full flex flex-col justify-between" vid="88">
                            <div vid="89">
                                <div class="flex justify-between mb-8" vid="90">
                                    <span class="font-mono text-xs border border-black px-2 py-1 rounded-full" vid="91">SEQ-01</span>
                                    <svg class="w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity" fill="none" stroke="currentColor" viewBox="0 0 24 24" vid="92"><path stroke-linecap="square" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" vid="93"></path></svg>
                                </div>
                                <h4 class="font-sans-display text-2xl uppercase mb-4 font-bold" vid="94">Crispr/Cas9 Editing</h4>
                                <p class="font-mono text-sm text-gray-600 mb-6" vid="95">Precise base-pair modification for elimination of hereditary defects and enhancement of phenotypic traits.</p>
                            </div>
                            <ul class="font-mono text-xs space-y-2 border-t border-gray-100 pt-4" vid="96">
                                <li class="flex items-center" vid="97"><span class="w-1 h-1 bg-black mr-2" vid="98"></span>Pigmentation Adjustment</li>
                                <li class="flex items-center" vid="99"><span class="w-1 h-1 bg-black mr-2" vid="100"></span>Myostatin Inhibition</li>
                            </ul>
                        </div>

                        
                        <div class="bg-white p-8 hover:bg-gray-50 transition-colors group cursor-pointer h-full flex flex-col justify-between" vid="101">
                            <div vid="102">
                                <div class="flex justify-between mb-8" vid="103">
                                    <span class="font-mono text-xs border border-black px-2 py-1 rounded-full" vid="104">STR-04</span>
                                    <svg class="w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity" fill="none" stroke="currentColor" viewBox="0 0 24 24" vid="105"><path stroke-linecap="square" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" vid="106"></path></svg>
                                </div>
                                <h4 class="font-sans-display text-2xl uppercase mb-4 font-bold" vid="107">Cryogenic Archival</h4>
                                <p class="font-mono text-sm text-gray-600 mb-6" vid="108">Zero-degradation storage solutions for biological assets. Secure your genetic legacy for future generations.</p>
                            </div>
                            <ul class="font-mono text-xs space-y-2 border-t border-gray-100 pt-4" vid="109">
                                <li class="flex items-center" vid="110"><span class="w-1 h-1 bg-black mr-2" vid="111"></span>Liquid Nitrogen Core</li>
                                <li class="flex items-center" vid="112"><span class="w-1 h-1 bg-black mr-2" vid="113"></span>24/7 Biometric Security</li>
                            </ul>
                        </div>

                        
                        <div class="bg-white p-8 hover:bg-gray-50 transition-colors group cursor-pointer h-full flex flex-col justify-between" vid="114">
                             <div vid="115">
                                <div class="flex justify-between mb-8" vid="116">
                                    <span class="font-mono text-xs border border-black px-2 py-1 rounded-full" vid="117">OPT-09</span>
                                    <svg class="w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity" fill="none" stroke="currentColor" viewBox="0 0 24 24" vid="118"><path stroke-linecap="square" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" vid="119"></path></svg>
                                </div>
                                <h4 class="font-sans-display text-2xl uppercase mb-4 font-bold" vid="120">Neural Mapping</h4>
                                <p class="font-mono text-sm text-gray-600 mb-6" vid="121">High-fidelity scanning of synaptic pathways for cognitive backup and analysis.</p>
                            </div>
                            <ul class="font-mono text-xs space-y-2 border-t border-gray-100 pt-4" vid="122">
                                <li class="flex items-center" vid="123"><span class="w-1 h-1 bg-black mr-2" vid="124"></span>Connectome Visualization</li>
                                <li class="flex items-center" vid="125"><span class="w-1 h-1 bg-black mr-2" vid="126"></span>Memory Indexing</li>
                            </ul>
                        </div>

                         
                         <div class="bg-white p-8 hover:bg-gray-50 transition-colors group cursor-pointer h-full flex flex-col justify-between" vid="127">
                            <div vid="128">
                                <div class="flex justify-between mb-8" vid="129">
                                    <span class="font-mono text-xs border border-black px-2 py-1 rounded-full" vid="130">SYN-12</span>
                                    <svg class="w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity" fill="none" stroke="currentColor" viewBox="0 0 24 24" vid="131"><path stroke-linecap="square" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" vid="132"></path></svg>
                                </div>
                                <h4 class="font-sans-display text-2xl uppercase mb-4 font-bold" vid="133">Custom Synthesis</h4>
                                <p class="font-mono text-sm text-gray-600 mb-6" vid="134">Full-scale genome synthesis for de-novo organism creation. Licensed clients only.</p>
                            </div>
                            <ul class="font-mono text-xs space-y-2 border-t border-gray-100 pt-4" vid="135">
                                <li class="flex items-center" vid="136"><span class="w-1 h-1 bg-black mr-2" vid="137"></span>Bacterial Scaffolding</li>
                                <li class="flex items-center" vid="138"><span class="w-1 h-1 bg-black mr-2" vid="139"></span>Eukaryotic Assembly</li>
                            </ul>
                        </div>
                    </div>
                </section>

                
                <section class="mb-24" vid="140">
                    <div class="flex items-baseline justify-between border-b border-black pb-4 mb-6" vid="141">
                        <h3 class="font-sans-display text-3xl uppercase" vid="142">Recent Transmissions</h3>
                    </div>
                    <div class="overflow-x-auto" vid="143">
                        <table class="w-full font-mono text-sm text-left" vid="144">
                            <thead class="bg-black text-white uppercase text-xs" vid="145">
                                <tr vid="146">
                                    <th class="p-3 font-normal" vid="147">ID</th>
                                    <th class="p-3 font-normal" vid="148">Subject</th>
                                    <th class="p-3 font-normal" vid="149">Status</th>
                                    <th class="p-3 font-normal text-right" vid="150">Timestamp</th>
                                </tr>
                            </thead>
                            <tbody class="divide-y divide-gray-200" vid="151">
                                <tr class="hover:bg-gray-100" vid="152">
                                    <td class="p-3" vid="153">#8842</td>
                                    <td class="p-3" vid="154">Homo Sapiens (Variant B)</td>
                                    <td class="p-3 text-green-700" vid="155">● Stable</td>
                                    <td class="p-3 text-right" vid="156">09:42:11</td>
                                </tr>
                                <tr class="hover:bg-gray-100" vid="157">
                                    <td class="p-3" vid="158">#8843</td>
                                    <td class="p-3" vid="159">Drosophila Melanogaster</td>
                                    <td class="p-3 text-yellow-600" vid="160">● Mutating</td>
                                    <td class="p-3 text-right" vid="161">09:45:33</td>
                                </tr>
                                <tr class="hover:bg-gray-100" vid="162">
                                    <td class="p-3" vid="163">#8844</td>
                                    <td class="p-3" vid="164">Arabidopsis Thaliana</td>
                                    <td class="p-3 text-green-700" vid="165">● Stable</td>
                                    <td class="p-3 text-right" vid="166">09:48:02</td>
                                </tr>
                                <tr class="hover:bg-gray-100" vid="167">
                                    <td class="p-3" vid="168">#8845</td>
                                    <td class="p-3" vid="169">Mus Musculus</td>
                                    <td class="p-3 text-red-600" vid="170">● Failed</td>
                                    <td class="p-3 text-right" vid="171">10:01:55</td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </section>

                
                <footer class="border-t-2 border-black pt-12 pb-24 grid grid-cols-1 md:grid-cols-4 gap-8 font-mono text-xs uppercase" vid="172">
                    <div class="col-span-2" vid="173">
                        <h5 class="font-bold mb-4" vid="174">SGL Headquarters</h5>
                        <p class="max-w-xs text-gray-500" vid="175">
                            Sector 7, Bio-District<br vid="176">
                            New San Francisco, CA<br vid="177">
                            United Territories
                        </p>
                    </div>
                    <div vid="178">
                        <h5 class="font-bold mb-4" vid="179">Legal</h5>
                        <ul class="space-y-2 text-gray-500" vid="180">
                            <li vid="181"><a href="#" class="hover:text-black" vid="182">Terms of Use</a></li>
                            <li vid="183"><a href="#" class="hover:text-black" vid="184">Privacy Policy</a></li>
                            <li vid="185"><a href="#" class="hover:text-black" vid="186">Bio-Ethics Compliance</a></li>
                        </ul>
                    </div>
                    <div vid="187">
                        <h5 class="font-bold mb-4" vid="188">Connect</h5>
                        <ul class="space-y-2 text-gray-500" vid="189">
                            <li vid="190"><a href="#" class="hover:text-black" vid="191">Secure Mail</a></li>
                            <li vid="192"><a href="#" class="hover:text-black" vid="193">Encrypted Chat</a></li>
                            <li vid="194"><a href="#" class="hover:text-black" vid="195">Network Status</a></li>
                        </ul>
                    </div>
                </footer>
            </div>
        </main>
    </section>

    <script vid="196">
        
        function enterSystem() {
            document.body.classList.add('active-state');
            
            setTimeout(() => {
                initDna('dna-canvas-sidebar', 'vertical', 0.5); 
            }, 500);
        }

        
        class DnaEngine {
            constructor(canvasId, orientation = 'horizontal', density = 1) {
                this.canvas = document.getElementById(canvasId);
                this.ctx = this.canvas.getContext('2d');
                this.orientation = orientation;
                this.density = density;
                this.bases = ['A', 'T', 'C', 'G'];
                this.particles = [];
                this.t = 0;
                
                this.resize();
                window.addEventListener('resize', () => this.resize());
                this.init();
                this.animate();
            }

            resize() {
                
                const parent = this.canvas.parentElement;
                this.width = this.canvas.width = parent.clientWidth;
                this.height = this.canvas.height = parent.clientHeight;
                this.init(); 
            }

            init() {
                this.particles = [];
                const count = this.orientation === 'horizontal' ? Math.floor(this.width / 20) : Math.floor(this.height / 15);
                
                for (let i = 0; i < count; i++) {
                    let char = this.bases[i % 4];
                    let pair = char === 'A' ? 'T' : char === 'T' ? 'A' : char === 'C' ? 'G' : 'C';
                    
                    
                    this.particles.push({ 
                        index: i, 
                        char: char, 
                        offset: 0, 
                        isPair: false 
                    });
                    this.particles.push({ 
                        index: i, 
                        char: pair, 
                        offset: Math.PI, 
                        isPair: true 
                    });
                }
            }

            update() {
                this.t += 0.02;
                this.ctx.clearRect(0, 0, this.width, this.height);
                
                
                this.ctx.font = this.orientation === 'horizontal' ? 'bold 16px monospace' : 'bold 10px monospace';
                this.ctx.textAlign = 'center';
                this.ctx.textBaseline = 'middle';
                
                const waveHeight = this.orientation === 'horizontal' ? this.height * 0.25 : this.width * 0.3;
                const spacing = this.orientation === 'horizontal' ? 30 : 20;
                
                for (let i = 0; i < this.particles.length; i+=2) {
                    const p1 = this.particles[i];
                    const p2 = this.particles[i+1];
                    
                    
                    
                    const angle = (p1.index * 0.2) - this.t;
                    
                    
                    const z = Math.cos(angle); 
                    const yOffset = Math.sin(angle) * waveHeight;
                    
                    
                    const scale1 = (z + 2) / 3; 
                    const scale2 = (-z + 2) / 3; 
                    
                    let x1, y1, x2, y2, s1, s2, a1, a2;

                    if (this.orientation === 'horizontal') {
                        
                        const centerX = (p1.index * spacing) - (this.t * 50) % (spacing * 4); 
                        
                        const centerY = this.height / 2;
                        
                        x1 = x2 = (this.width/2) - ((this.particles.length/4) * spacing / 2) + (p1.index * spacing);
                        y1 = centerY + Math.sin(angle) * waveHeight;
                        y2 = centerY + Math.sin(angle + Math.PI) * waveHeight;
                        
                        
                        a1 = (Math.cos(angle) + 1) / 2 * 0.8 + 0.2;
                        a2 = (Math.cos(angle + Math.PI) + 1) / 2 * 0.8 + 0.2;
                    } else {
                        
                        const centerX = this.width / 2;
                        const startY = 10;
                        
                        y1 = y2 = startY + (p1.index * spacing);
                        x1 = centerX + Math.sin(angle) * waveHeight;
                        x2 = centerX + Math.sin(angle + Math.PI) * waveHeight;

                         
                         a1 = (Math.cos(angle) + 1) / 2 * 0.8 + 0.2;
                         a2 = (Math.cos(angle + Math.PI) + 1) / 2 * 0.8 + 0.2;
                    }

                    
                    this.ctx.beginPath();
                    this.ctx.strokeStyle = `rgba(0,0,0, ${Math.min(a1, a2) * 0.2})`;
                    this.ctx.moveTo(x1, y1);
                    this.ctx.lineTo(x2, y2);
                    this.ctx.stroke();

                    
                    this.ctx.fillStyle = `rgba(0,0,0, ${a1})`;
                    this.ctx.fillText(p1.char, x1, y1);
                    
                    this.ctx.fillStyle = `rgba(0,0,0, ${a2})`;
                    this.ctx.fillText(p2.char, x2, y2);
                }
            }

            animate() {
                this.update();
                requestAnimationFrame(() => this.animate());
            }
        }

        
        
        const landingDna = new DnaEngine('dna-canvas-landing', 'horizontal');

        
        function initDna(id, orient, dens) {
            new DnaEngine(id, orient, dens);
        }

    </script>

</body></html>
All Prompts