| <!DOCTYPE html> |
| <html lang="en" class="scroll-smooth"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>DroidDrop | Next-Gen Android Emulation</title> |
| |
| |
| <link rel="preconnect" href="https://fonts.googleapis.com"> |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
| <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;900&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> |
| |
| |
| <script src="https://cdn.tailwindcss.com"></script> |
| |
| |
| <script src="https://unpkg.com/feather-icons"></script> |
|
|
| |
| <script> |
| tailwind.config = { |
| darkMode: 'class', |
| theme: { |
| extend: { |
| fontFamily: { |
| sans: ['Inter', 'sans-serif'], |
| mono: ['JetBrains Mono', 'monospace'], |
| }, |
| colors: { |
| brand: { |
| 50: '#f0f9ff', |
| 500: '#0ea5e9', |
| 600: '#0284c7', |
| 900: '#0c4a6e', |
| accent: '#6366f1', |
| glow: '#818cf8', |
| }, |
| dark: { |
| bg: '#0f172a', |
| card: '#1e293b', |
| border: '#334155' |
| } |
| }, |
| animation: { |
| 'float': 'float 6s ease-in-out infinite', |
| 'pulse-glow': 'pulse-glow 2s cubic-bezier(0.4, 0, 0.6, 1) infinite', |
| 'spin-slow': 'spin 3s linear infinite', |
| }, |
| keyframes: { |
| float: { |
| '0%, 100%': { transform: 'translateY(0)' }, |
| '50%': { transform: 'translateY(-20px)' }, |
| }, |
| 'pulse-glow': { |
| '0%, 100%': { opacity: 1, boxShadow: '0 0 20px #6366f1' }, |
| '50%': { opacity: .7, boxShadow: '0 0 10px #6366f1' }, |
| } |
| } |
| } |
| } |
| } |
| </script> |
|
|
| <style> |
| |
| body { |
| background-color: #0f172a; |
| color: #f8fafc; |
| overflow-x: hidden; |
| } |
| |
| |
| .glass { |
| background: rgba(30, 41, 59, 0.7); |
| backdrop-filter: blur(12px); |
| -webkit-backdrop-filter: blur(12px); |
| border: 1px solid rgba(255, 255, 255, 0.1); |
| } |
| |
| .glass-high { |
| background: rgba(255, 255, 255, 0.05); |
| backdrop-filter: blur(16px); |
| -webkit-backdrop-filter: blur(16px); |
| border: 1px solid rgba(255, 255, 255, 0.15); |
| box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); |
| } |
| |
| |
| .text-glow { |
| text-shadow: 0 0 20px rgba(99, 102, 241, 0.5); |
| } |
| |
| |
| ::-webkit-scrollbar { |
| width: 8px; |
| } |
| ::-webkit-scrollbar-track { |
| background: #0f172a; |
| } |
| ::-webkit-scrollbar-thumb { |
| background: #334155; |
| border-radius: 4px; |
| } |
| ::-webkit-scrollbar-thumb:hover { |
| background: #475569; |
| } |
| |
| |
| .reveal { |
| opacity: 0; |
| transform: translateY(30px); |
| transition: all 0.8s ease-out; |
| } |
| .reveal.active { |
| opacity: 1; |
| transform: translateY(0); |
| } |
| |
| |
| .phone-frame { |
| border: 12px solid #1e293b; |
| border-radius: 40px; |
| overflow: hidden; |
| position: relative; |
| background: #000; |
| box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); |
| } |
| .phone-notch { |
| position: absolute; |
| top: 0; |
| left: 50%; |
| transform: translateX(-50%); |
| width: 120px; |
| height: 25px; |
| background: #1e293b; |
| border-bottom-left-radius: 12px; |
| border-bottom-right-radius: 12px; |
| z-index: 20; |
| } |
| |
| |
| .boot-screen { |
| display: none; |
| width: 100%; |
| height: 100%; |
| align-items: center; |
| justify-content: center; |
| flex-direction: column; |
| background: #000; |
| } |
| .boot-active .boot-screen { display: flex; } |
| .boot-active .home-screen { display: none; } |
| |
| .android-logo { |
| width: 60px; |
| height: 60px; |
| border-radius: 50%; |
| border: 2px solid #3ddc84; |
| position: relative; |
| animation: pulse 1.5s infinite; |
| } |
| .android-logo::after { |
| content: ''; |
| position: absolute; |
| top: 50%; |
| left: 50%; |
| transform: translate(-50%, -50%); |
| width: 40px; |
| height: 40px; |
| background: #3ddc84; |
| border-radius: 50%; |
| opacity: 0.5; |
| } |
| @keyframes pulse { |
| 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(61, 220, 132, 0.7); } |
| 70% { transform: scale(1.1); box-shadow: 0 0 0 10px rgba(61, 220, 132, 0); } |
| 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(61, 220, 132, 0); } |
| } |
| |
| |
| #bg-canvas { |
| position: fixed; |
| top: 0; |
| left: 0; |
| width: 100%; |
| height: 100%; |
| z-index: -1; |
| opacity: 0.4; |
| } |
| </style> |
| </head> |
| <body class="antialiased"> |
|
|
| |
| <canvas id="bg-canvas"></canvas> |
|
|
| |
| <nav class="fixed w-full z-50 transition-all duration-300 glass" id="navbar"> |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
| <div class="flex justify-between items-center h-20"> |
| |
| <div class="flex items-center space-x-3 cursor-pointer group"> |
| <div class="bg-gradient-to-br from-brand-500 to-brand-accent p-2 rounded-lg group-hover:rotate-12 transition-transform"> |
| <i data-feather="cpu" class="text-white w-6 h-6"></i> |
| </div> |
| <span class="text-2xl font-bold tracking-tight text-white group-hover:text-brand-500 transition-colors"> |
| DroidDrop |
| </span> |
| </div> |
|
|
| |
| <div class="hidden md:flex items-center space-x-8"> |
| <a href="#features" class="text-gray-300 hover:text-white font-medium transition-colors">Features</a> |
| <a href="#demo" class="text-gray-300 hover:text-white font-medium transition-colors">Live Demo</a> |
| <a href="#pricing" class="text-gray-300 hover:text-white font-medium transition-colors">Pricing</a> |
| <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="text-xs text-gray-500 hover:text-brand-500 transition-colors border border-gray-700 px-2 py-1 rounded"> |
| Built with anycoder |
| </a> |
| <button class="bg-white text-dark-bg hover:bg-gray-200 px-6 py-2 rounded-full font-bold transition-all transform hover:scale-105 shadow-lg shadow-brand-500/20"> |
| Get Started |
| </button> |
| </div> |
|
|
| |
| <button class="md:hidden text-white p-2" id="mobile-menu-btn"> |
| <i data-feather="menu" class="w-8 h-8"></i> |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div class="md:hidden hidden bg-dark-card border-b border-gray-800" id="mobile-menu"> |
| <div class="px-4 py-6 space-y-4"> |
| <a href="#features" class="block text-gray-300 hover:text-brand-500">Features</a> |
| <a href="#demo" class="block text-gray-300 hover:text-brand-500">Live Demo</a> |
| <a href="#pricing" class="block text-gray-300 hover:text-brand-500">Pricing</a> |
| <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" class="block text-gray-500 text-sm">Built with anycoder</a> |
| <button class="w-full bg-brand-600 text-white py-3 rounded-lg font-bold mt-4">Get Started</button> |
| </div> |
| </div> |
| </nav> |
|
|
| |
| <section class="relative pt-32 pb-20 lg:pt-48 lg:pb-32 overflow-hidden"> |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10 text-center"> |
| |
| <div class="inline-block mb-6 px-4 py-1 rounded-full glass-high border border-brand-500/30 animate-float"> |
| <span class="text-brand-400 font-mono text-sm flex items-center gap-2"> |
| <span class="w-2 h-2 rounded-full bg-green-400 animate-pulse"></span> |
| v2.0 Now Available |
| </span> |
| </div> |
|
|
| <h1 class="text-5xl md:text-7xl lg:text-8xl font-black text-white mb-8 tracking-tight leading-none"> |
| Test Android.<br> |
| <span class="text-transparent bg-clip-text bg-gradient-to-r from-brand-400 via-purple-400 to-brand-accent text-glow"> |
| Anywhere. Instantly. |
| </span> |
| </h1> |
|
|
| <p class="mt-4 max-w-2xl mx-auto text-xl text-gray-400 mb-10 leading-relaxed"> |
| Disposable, secure, and lightning-fast Android emulators in the cloud. |
| No setup. No installation. Just pure development velocity. |
| </p> |
|
|
| <div class="flex flex-col sm:flex-row gap-4 justify-center items-center"> |
| <a href="#demo" class="w-full sm:w-auto px-8 py-4 bg-gradient-to-r from-brand-600 to-brand-accent rounded-xl font-bold text-white text-lg shadow-lg shadow-brand-500/30 hover:shadow-brand-500/50 hover:scale-105 transition-all duration-300 flex items-center justify-center gap-2"> |
| <i data-feather="play-circle" class="w-5 h-5"></i> |
| Launch Demo |
| </a> |
| <a href="https://github.com" class="w-full sm:w-auto px-8 py-4 glass-high rounded-xl font-bold text-white text-lg hover:bg-white/10 transition-all duration-300 flex items-center justify-center gap-2"> |
| <i data-feather="github" class="w-5 h-5"></i> |
| View Source |
| </a> |
| </div> |
|
|
| |
| <div class="mt-20 grid grid-cols-2 md:grid-cols-4 gap-8 border-t border-gray-800 pt-8"> |
| <div> |
| <div class="text-4xl font-bold text-white mb-1">30s</div> |
| <div class="text-sm text-gray-500 uppercase tracking-wider">Boot Time</div> |
| </div> |
| <div> |
| <div class="text-4xl font-bold text-white mb-1">99.9%</div> |
| <div class="text-sm text-gray-500 uppercase tracking-wider">Uptime</div> |
| </div> |
| <div> |
| <div class="text-4xl font-bold text-white mb-1">0</div> |
| <div class="text-sm text-gray-500 uppercase tracking-wider">Latency</div> |
| </div> |
| <div> |
| <div class="text-4xl font-bold text-white mb-1">∞</div> |
| <div class="text-sm text-gray-500 uppercase tracking-wider">Scalability</div> |
| </div> |
| </div> |
| </div> |
| </section> |
|
|
| |
| <section id="features" class="py-24 bg-dark-bg relative"> |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
| <div class="text-center mb-16 reveal"> |
| <h2 class="text-3xl md:text-5xl font-bold text-white mb-4">Why DroidDrop?</h2> |
| <p class="text-gray-400 max-w-2xl mx-auto">Engineered for modern mobile development workflows.</p> |
| </div> |
|
|
| <div class="grid md:grid-cols-3 gap-8"> |
| |
| <div class="glass-high p-8 rounded-2xl hover:bg-white/10 transition-all duration-300 group reveal border border-gray-800 hover:border-brand-500/50"> |
| <div class="w-14 h-14 bg-brand-900/50 rounded-xl flex items-center justify-center mb-6 group-hover:scale-110 transition-transform"> |
| <i data-feather="zap" class="text-brand-400 w-8 h-8"></i> |
| </div> |
| <h3 class="text-xl font-bold text-white mb-3">Instant Boot</h3> |
| <p class="text-gray-400 leading-relaxed">Our proprietary containerization technology spins up fresh Android instances in under 30 seconds.</p> |
| </div> |
|
|
| |
| <div class="glass-high p-8 rounded-2xl hover:bg-white/10 transition-all duration-300 group reveal border border-gray-800 hover:border-purple-500/50" style="transition-delay: 100ms;"> |
| <div class="w-14 h-14 bg-purple-900/50 rounded-xl flex items-center justify-center mb-6 group-hover:scale-110 transition-transform"> |
| <i data-feather="shield" class="text-purple-400 w-8 h-8"></i> |
| </div> |
| <h3 class="text-xl font-bold text-white mb-3">Ephemeral Security</h3> |
| <p class="text-gray-400 leading-relaxed">Every session is isolated. Data is wiped immediately upon termination. Zero residue, zero risk.</p> |
| </div> |
|
|
| |
| <div class="glass-high p-8 rounded-2xl hover:bg-white/10 transition-all duration-300 group reveal border border-gray-800 hover:border-pink-500/50" style="transition-delay: 200ms;"> |
| <div class="w-14 h-14 bg-pink-900/50 rounded-xl flex items-center justify-center mb-6 group-hover:scale-110 transition-transform"> |
| <i data-feather="layers" class="text-pink-400 w-8 h-8"></i> |
| </div> |
| <h3 class="text-xl font-bold text-white mb-3">Device Matrix</h3> |
| <p class="text-gray-400 leading-relaxed">Test across Pixel, Samsung, Xiaomi, and more with different API levels and screen sizes simultaneously.</p> |
| </div> |
| </div> |
| </div> |
| </section> |
|
|
| |
| <section id="demo" class="py-24 bg-gradient-to-b from-dark-bg to-dark-card relative overflow-hidden"> |
| |
| <div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[500px] h-[500px] bg-brand-600/20 rounded-full blur-[100px] pointer-events-none"></div> |
|
|
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
| <div class="grid lg:grid-cols-2 gap-16 items-center"> |
| |
| |
| <div class="reveal"> |
| <h2 class="text-3xl md:text-5xl font-bold text-white mb-6">Try it live.</h2> |
| <p class="text-gray-400 mb-8 text-lg">Select a device configuration and launch a simulated environment directly in your browser.</p> |
| |
| <div class="space-y-6"> |
| |
| <div> |
| <label class="block text-sm font-medium text-gray-400 mb-2">Select Device Model</label> |
| <div class="grid grid-cols-3 gap-3"> |
| <button class="device-btn active p-3 rounded-xl border border-brand-500 bg-brand-500/20 text-white text-center transition-all" data-device="pixel"> |
| <i data-feather="smartphone" class="mx-auto mb-1 h-5 w-5"></i> |
| <span class="text-xs font-bold block">Pixel 7</span> |
| </button> |
| <button class="device-btn p-3 rounded-xl border border-gray-700 bg-dark-card text-gray-400 hover:text-white hover:border-gray-500 text-center transition-all" data-device="samsung"> |
| <i data-feather="tablet" class="mx-auto mb-1 h-5 w-5"></i> |
| <span class="text-xs font-bold block">Galaxy S23</span> |
| </button> |
| <button class="device-btn p-3 rounded-xl border border-gray-700 bg-dark-card text-gray-400 hover:text-white hover:border-gray-500 text-center transition-all" data-device="fold"> |
| <i data-feather="layers" class="mx-auto mb-1 h-5 w-5"></i> |
| <span class="text-xs font-bold block">Fold 4</span> |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div> |
| <label class="block text-sm font-medium text-gray-400 mb-2">Android Version</label> |
| <div class="flex gap-4"> |
| <label class="flex items-center space-x-2 cursor-pointer"> |
| <input type="radio" name="os" checked class="text-brand-500 focus:ring-brand-500 bg-gray-800 border-gray-600"> |
| <span class="text-white">Android 13</span> |
| </label> |
| <label class="flex items-center space-x-2 cursor-pointer"> |
| <input type="radio" name="os" class="text-brand-500 focus:ring-brand-500 bg-gray-800 border-gray-600"> |
| <span class="text-white">Android 14</span> |
| </label> |
| </div> |
| </div> |
|
|
| |
| <button id="launch-btn" class="w-full py-4 bg-gradient-to-r from-brand-600 to-purple-600 rounded-xl font-bold text-white text-lg shadow-lg hover:shadow-brand-500/40 hover:scale-[1.02] transition-all duration-300 flex items-center justify-center gap-3"> |
| <i data-feather="power" class="w-5 h-5"></i> |
| Launch Instance |
| </button> |
| |
| <p class="text-xs text-gray-500 text-center mt-2">*Demo mode only. No persistent data.</p> |
| </div> |
| </div> |
|
|
| |
| <div class="flex justify-center reveal delay-200"> |
| <div class="phone-frame w-[300px] h-[600px] relative transform transition-transform duration-500 hover:rotate-y-12" style="perspective: 1000px;"> |
| <div class="phone-notch"></div> |
| |
| |
| <div class="w-full h-full bg-gray-900 relative overflow-hidden" id="phone-screen"> |
| |
| |
| <div id="screen-idle" class="w-full h-full flex flex-col items-center justify-center bg-gray-900 text-gray-700"> |
| <i data-feather="power" class="w-16 h-16 mb-4 opacity-50"></i> |
| <span class="font-mono text-sm">Ready to Launch</span> |
| </div> |
|
|
| |
| <div id="screen-boot" class="boot-screen hidden"> |
| <div class="android-logo mb-6"></div> |
| <div class="text-green-400 font-mono text-sm animate-pulse">Starting Android...</div> |
| <div class="w-48 h-1 bg-gray-800 rounded-full mt-4 overflow-hidden"> |
| <div class="h-full bg-green-400 animate-[width_2s_ease-in-out_infinite]" style="width: 50%"></div> |
| </div> |
| </div> |
|
|
| |
| <div id="screen-home" class="w-full h-full bg-[url('https://images.unsplash.com/photo-1550684848-fac1c5b4e853?q=80&w=1000&auto=format&fit=crop')] bg-cover bg-center hidden"> |
| <div class="absolute inset-0 bg-black/20"></div> |
| |
| <div class="absolute top-2 w-full px-6 flex justify-between text-white text-xs font-bold pt-2"> |
| <span>12:45</span> |
| <div class="flex gap-1"> |
| <i data-feather="wifi" class="w-3 h-3"></i> |
| <i data-feather="battery-charging" class="w-3 h-3"></i> |
| </div> |
| </div> |
| |
| <div class="absolute bottom-10 w-full flex justify-center gap-6"> |
| <div class="flex flex-col items-center gap-1"> |
| <div class="w-12 h-12 rounded-2xl bg-white/20 backdrop-blur-md flex items-center justify-center border border-white/30 shadow-lg"> |
| <i data-feather="message-square" class="text-white"></i> |
| </div> |
| </div> |
| <div class="flex flex-col items-center gap-1"> |
| <div class="w-14 h-14 rounded-2xl bg-gradient-to-br from-brand-500 to-brand-accent flex items-center justify-center shadow-lg border border-white/20"> |
| <i data-feather="chrome" class="text-white"></i> |
| </div> |
| </div> |
| <div class="flex flex-col items-center gap-1"> |
| <div class="w-12 h-12 rounded-2xl bg-white/20 backdrop-blur-md flex items-center justify-center border border-white/30 shadow-lg"> |
| <i data-feather="camera" class="text-white"></i> |
| </div> |
| </div> |
| </div> |
| |
| <div class="absolute bottom-2 w-full flex justify-center pb-4"> |
| <div class="w-32 h-1 bg-white/50 rounded-full"></div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </section> |
|
|
| |
| <section id="pricing" class="py-24 bg-dark-bg"> |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
| <div class="text-center mb-16"> |
| <h2 class="text-4xl font-bold text-white mb-4">Simple, Transparent Pricing</h2> |
| <p class="text-gray-400">Pay only for the minutes you use.</p> |
| </div> |
|
|
| <div class="grid md:grid-cols-3 gap-8 max-w-5xl mx-auto"> |
| |
| <div class="glass p-8 rounded-2xl border border-gray-800 hover:border-gray-600 transition-colors"> |
| <h3 class="text-xl font-bold text-white">Hobbyist</h3> |
| <div class="text-4xl font-bold text-white mt-4 mb-2">$0<span class="text-lg text-gray-500 font-normal">/mo</span></div> |
| <p class="text-gray-400 text-sm mb-6">Perfect for casual testing.</p> |
| <ul class="space-y-3 mb-8 text-gray-300 text-sm"> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-green-400"></i> 5 Hours / Month</li> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-green-400"></i> Standard Devices</li> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-green-400"></i> Community Support</li> |
| </ul> |
| <button class="w-full py-3 rounded-xl border border-gray-600 text-white hover:bg-white/5 transition-colors font-semibold">Start Free</button> |
| </div> |
|
|
| |
| <div class="glass p-8 rounded-2xl border-2 border-brand-500 relative transform scale-105 shadow-xl shadow-brand-500/10"> |
| <div class="absolute top-0 right-0 bg-brand-600 text-white text-xs font-bold px-3 py-1 rounded-bl-lg rounded-tr-lg">POPULAR</div> |
| <h3 class="text-xl font-bold text-white">Developer</h3> |
| <div class="text-4xl font-bold text-white mt-4 mb-2">$29<span class="text-lg text-gray-500 font-normal">/mo</span></div> |
| <p class="text-gray-400 text-sm mb-6">For serious mobile devs.</p> |
| <ul class="space-y-3 mb-8 text-gray-300 text-sm"> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-brand-400"></i> 50 Hours / Month</li> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-brand-400"></i> Premium Devices (Foldables)</li> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-brand-400"></i> ADB Access</li> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-brand-400"></i> Priority Support</li> |
| </ul> |
| <button class="w-full py-3 rounded-xl bg-brand-600 text-white hover:bg-brand-500 transition-colors font-semibold shadow-lg shadow-brand-500/20">Get Started</button> |
| </div> |
|
|
| |
| <div class="glass p-8 rounded-2xl border border-gray-800 hover:border-gray-600 transition-colors"> |
| <h3 class="text-xl font-bold text-white">Team</h3> |
| <div class="text-4xl font-bold text-white mt-4 mb-2">Custom</div> |
| <p class="text-gray-400 text-sm mb-6">For large organizations.</p> |
| <ul class="space-y-3 mb-8 text-gray-300 text-sm"> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-green-400"></i> Unlimited Hours</li> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-green-400"></i> Dedicated Hardware</li> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-green-400"></i> SSO & Audit Logs</li> |
| <li class="flex items-center gap-2"><i data-feather="check" class="w-4 h-4 text-green-400"></i> SLA Guarantee</li> |
| </ul> |
| <button class="w-full py-3 rounded-xl border border-gray-600 text-white hover:bg-white/5 transition-colors font-semibold">Contact Sales</button> |
| </div> |
| </div> |
| </div> |
| </section> |
|
|
| |
| <footer class="bg-dark-card border-t border-gray-800 pt-16 pb-8"> |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> |
| <div class="grid md:grid-cols-4 gap-12 mb-12"> |
| <div class="col-span-1 md:col-span-2"> |
| <div class="flex items-center space-x-2 mb-4"> |
| <i data-feather="cpu" class="text-brand-500 w-6 h-6"></i> |
| <span class="text-xl font-bold text-white">DroidDrop</span> |
| </div> |
| <p class="text-gray-400 max-w-sm"> |
| The next generation of mobile testing infrastructure. |
| Secure, fast, and accessible from anywhere in the world. |
| </p> |
| </div> |
| |
| <div> |
| <h4 class="text-white font-bold mb-4">Platform</h4> |
| <ul class="space-y-2 text-gray-400 text-sm"> |
| <li><a href="#" class="hover:text-brand-400 transition-colors">Features</a></li> |
| <li><a href="#" class="hover:text-brand-400 transition-colors">Device Grid</a></li> |
| <li><a href="#" class="hover:text-brand-400 transition-colors">Pricing</a></li> |
| <li><a href="#" class="hover:text-brand-400 transition-colors">API</a></li> |
| </ul> |
| </div> |
|
|
| <div> |
| <h4 class="text-white font-bold mb-4">Company</h4> |
| <ul class="space-y-2 text-gray-400 text-sm"> |
| <li><a href="#" class="hover:text-brand-400 transition-colors">About</a></li> |
| <li><a href="#" class="hover:text-brand-400 transition-colors">Blog</a></li> |
| <li><a href="#" class="hover:text-brand-400 transition-colors">Careers</a></li> |
| <li><a href="#" class="hover:text-brand-400 transition-colors">Legal</a></li> |
| </ul> |
| </div> |
| </div> |
| |
| <div class="border-t border-gray-800 pt-8 flex flex-col md:flex-row justify-between items-center gap-4"> |
| <p class="text-gray-500 text-sm">© 2024 DroidDrop Inc. All rights reserved.</p> |
| <div class="flex space-x-4"> |
| <a href="#" class="text-gray-500 hover:text-white transition-colors"><i data-feather="twitter" class="w-5 h-5"></i></a> |
| <a href="#" class="text-gray-500 hover:text-white transition-colors"><i data-feather="github" class="w-5 h-5"></i></a> |
| <a href="#" class="text-gray-500 hover:text-white transition-colors"><i data-feather="linkedin" class="w-5 h-5"></i></a> |
| </div> |
| </div> |
| </div> |
| </footer> |
|
|
| |
| <script> |
| |
| feather.replace(); |
| |
| |
| const canvas = document.getElementById('bg-canvas'); |
| const ctx = canvas.getContext('2d'); |
| let width, height; |
| let particles = []; |
| |
| function resize() { |
| width = canvas.width = window.innerWidth; |
| height = canvas.height = window.innerHeight; |
| } |
| |
| class Particle { |
| constructor() { |
| this.x = Math.random() * width; |
| this.y = Math.random() * height; |
| this.vx = (Math.random() - 0.5) * 0.5; |
| this.vy = (Math.random() - 0.5) * 0.5; |
| this.size = Math.random() * 2; |
| } |
| update() { |
| this.x += this.vx; |
| this.y += this.vy; |
| if (this.x < 0 || this.x > width) this.vx *= -1; |
| if (this.y < 0 || this.y > height) this.vy *= -1; |
| } |
| draw() { |
| ctx.fillStyle = 'rgba(99, 102, 241, 0.5)'; |
| ctx.beginPath(); |
| ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2); |
| ctx.fill(); |
| } |
| } |
| |
| function initParticles() { |
| particles = []; |
| for (let i = 0; i < 50; i++) particles.push(new Particle()); |
| } |
| |
| function animateParticles() { |
| ctx.clearRect(0, 0, width, height); |
| for (let i = 0; i < particles.length; i++) { |
| particles[i].update(); |
| particles[i].draw(); |
| for (let j = i; j < particles.length; j++) { |
| const dx = particles[i].x - particles[j].x; |
| const dy = particles[i].y - particles[j].y; |
| const dist = Math.sqrt(dx * dx + dy * dy); |
| if (dist < 150) { |
| ctx.strokeStyle = `rgba(99, 102, 241, ${0.1 - dist/1500})`; |
| ctx.lineWidth = 1; |
| ctx.beginPath(); |
| ctx.moveTo(particles[i].x, particles[i].y); |
| ctx.lineTo(particles[j].x, particles[j].y); |
| ctx.stroke(); |
| } |
| } |
| } |
| requestAnimationFrame(animateParticles); |
| } |
| |
| window.addEventListener('resize', () => { resize(); initParticles(); }); |
| resize(); |
| initParticles(); |
| animateParticles(); |
| |
| |
| const observerOptions = { threshold: 0.1 }; |
| const observer = new IntersectionObserver((entries) => { |
| entries.forEach(entry => { |
| if (entry.isIntersecting) { |
| entry.target.classList.add('active'); |
| } |
| }); |
| }, observerOptions); |
| |
| document.querySelectorAll('.reveal').forEach(el => observer.observe(el)); |
| |
| |
| const navbar = document.getElementById('navbar'); |
| window.addEventListener('scroll', () => { |
| if (window.scrollY > 20) { |
| navbar.classList.add('shadow-lg'); |
| navbar.style.background = 'rgba(15, 23, 42, 0.9)'; |
| } else { |
| navbar.classList.remove('shadow-lg'); |
| navbar.style.background = 'rgba(30, 41, 59, 0.7)'; |
| } |
| }); |
| |
| |
| const mobileBtn = document.getElementById('mobile-menu-btn'); |
| const mobileMenu = document.getElementById('mobile-menu'); |
| mobileBtn.addEventListener('click', () => { |
| mobileMenu.classList.toggle('hidden'); |
| }); |
| |
| |
| const launchBtn = document.getElementById('launch-btn'); |
| const screenIdle = document.getElementById('screen-idle'); |
| const screenBoot = document.getElementById('screen-boot'); |
| const screenHome = document.getElementById('screen-home'); |
| |
| let isRunning = false; |
| |
| launchBtn.addEventListener('click', () => { |
| if (isRunning) return; |
| isRunning = true; |
| |
| |
| const originalText = launchBtn.innerHTML; |
| launchBtn.innerHTML = `<i data-feather="loader" class="animate-spin w-5 h-5"></i> Booting...`; |
| feather.replace(); |
| launchBtn.classList.add('opacity-75', 'cursor-not-allowed'); |
| |
| |
| screenIdle.classList.add('hidden'); |
| screenBoot.classList.remove('hidden'); |
| screenHome.classList.add('hidden'); |
| |
| |
| setTimeout(() => { |
| |
| screenBoot.classList.add('hidden'); |
| screenHome.classList.remove('hidden'); |
| |
| |
| launchBtn.innerHTML = `<i data-feather="refresh-cw" class="w-5 h-5"></i> Restart`; |
| launchBtn.classList.remove('opacity-75', 'cursor-not-allowed'); |
| feather.replace(); |
| isRunning = false; |
| }, 3000); |
| }); |
| |
| |
| const deviceBtns = document.querySelectorAll('.device-btn'); |
| deviceBtns.forEach(btn => { |
| btn.addEventListener('click', () => { |
| deviceBtns.forEach(b => { |
| b.classList.remove('border-brand-500', 'bg-brand-500/20', 'text-white'); |
| b.classList.add('border-gray-700', 'bg-dark-card', 'text-gray-400'); |
| }); |
| btn.classList.remove('border-gray-700', 'bg-dark-card', 'text-gray-400'); |
| btn.classList.add('border-brand-500', 'bg-brand-500/20', 'text-white'); |
| }); |
| }); |
| |
| </script> |
| </body> |
| </html> |