Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Snapchat Login Clone</title> | |
<script src="https://cdn.tailwindcss.com"></script> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
<style> | |
.snap-yellow { | |
background-color: #FFFC00; | |
} | |
.snap-yellow-text { | |
color: #FFFC00; | |
} | |
.snap-yellow-border { | |
border-color: #FFFC00; | |
} | |
.snap-yellow-hover:hover { | |
background-color: #FFFC00; | |
} | |
.input-focus:focus { | |
border-color: #FFFC00; | |
box-shadow: 0 0 0 2px rgba(255, 252, 0, 0.2); | |
} | |
.wave { | |
animation: wave 2s infinite; | |
} | |
@keyframes wave { | |
0%, 100% { | |
transform: rotate(0deg); | |
} | |
25% { | |
transform: rotate(5deg); | |
} | |
75% { | |
transform: rotate(-5deg); | |
} | |
} | |
</style> | |
</head> | |
<body class="bg-black text-white min-h-screen flex flex-col"> | |
<!-- Header --> | |
<header class="py-4 px-6 flex justify-between items-center"> | |
<div class="text-2xl font-bold snap-yellow-text">snapchat</div> | |
<div class="flex space-x-4"> | |
<button class="text-white hover:text-gray-300 transition"> | |
<i class="fas fa-globe"></i> | |
</button> | |
<button class="text-white hover:text-gray-300 transition"> | |
<i class="fas fa-question-circle"></i> | |
</button> | |
</div> | |
</header> | |
<!-- Main Content --> | |
<main class="flex-grow flex flex-col items-center justify-center px-6"> | |
<div class="max-w-md w-full"> | |
<div class="text-center mb-8"> | |
<div class="wave inline-block mb-4"> | |
<i class="fas fa-ghost text-5xl snap-yellow-text"></i> | |
</div> | |
<h1 class="text-3xl font-bold mb-2">Welcome back!</h1> | |
<p class="text-gray-400">Log in with your Snapchat account</p> | |
</div> | |
<form id="loginForm" class="space-y-4"> | |
<div> | |
<input | |
type="text" | |
id="username" | |
placeholder="Username or Email" | |
class="w-full px-4 py-3 bg-gray-900 rounded-lg border border-gray-700 focus:outline-none input-focus transition" | |
required | |
> | |
</div> | |
<div class="relative"> | |
<input | |
type="password" | |
id="password" | |
placeholder="Password" | |
class="w-full px-4 py-3 bg-gray-900 rounded-lg border border-gray-700 focus:outline-none input-focus transition pr-10" | |
required | |
> | |
<button type="button" id="togglePassword" class="absolute right-3 top-3 text-gray-400 hover:text-white"> | |
<i class="fas fa-eye"></i> | |
</button> | |
</div> | |
<div class="flex justify-between items-center"> | |
<div class="flex items-center"> | |
<input type="checkbox" id="remember" class="mr-2"> | |
<label for="remember" class="text-sm text-gray-400">Remember me</label> | |
</div> | |
<a href="#" class="text-sm text-blue-400 hover:underline">Forgot password?</a> | |
</div> | |
<button | |
type="submit" | |
class="w-full py-3 rounded-lg font-bold snap-yellow text-black hover:bg-yellow-300 transition flex items-center justify-center" | |
> | |
Log In | |
<i class="fas fa-arrow-right ml-2"></i> | |
</button> | |
</form> | |
<div class="text-center mt-6"> | |
<p class="text-gray-400">Don't have an account? <a href="#" class="text-blue-400 hover:underline">Sign Up</a></p> | |
</div> | |
<div class="flex items-center my-6"> | |
<div class="flex-grow border-t border-gray-700"></div> | |
<span class="px-4 text-gray-400 text-sm">OR</span> | |
<div class="flex-grow border-t border-gray-700"></div> | |
</div> | |
<div class="space-y-3"> | |
<button class="w-full py-3 rounded-lg font-bold bg-gray-900 hover:bg-gray-800 transition flex items-center justify-center"> | |
<i class="fab fa-google text-red-500 mr-2"></i> | |
Continue with Google | |
</button> | |
<button class="w-full py-3 rounded-lg font-bold bg-gray-900 hover:bg-gray-800 transition flex items-center justify-center"> | |
<i class="fab fa-apple text-gray-300 mr-2"></i> | |
Continue with Apple | |
</button> | |
</div> | |
</div> | |
</main> | |
<!-- Footer --> | |
<footer class="py-6 px-6 text-center text-gray-500 text-sm"> | |
<div class="flex justify-center space-x-4 mb-4"> | |
<a href="#" class="hover:text-gray-300">Privacy Policy</a> | |
<a href="#" class="hover:text-gray-300">Terms of Service</a> | |
<a href="#" class="hover:text-gray-300">Support</a> | |
</div> | |
<p>© 2023 Snap Inc.</p> | |
</footer> | |
<script> | |
document.addEventListener('DOMContentLoaded', function() { | |
// Toggle password visibility | |
const togglePassword = document.getElementById('togglePassword'); | |
const passwordInput = document.getElementById('password'); | |
togglePassword.addEventListener('click', function() { | |
const type = passwordInput.getAttribute('type') === 'password' ? 'text' : 'password'; | |
passwordInput.setAttribute('type', type); | |
this.innerHTML = type === 'password' ? '<i class="fas fa-eye"></i>' : '<i class="fas fa-eye-slash"></i>'; | |
}); | |
// Form submission | |
const loginForm = document.getElementById('loginForm'); | |
loginForm.addEventListener('submit', function(e) { | |
e.preventDefault(); | |
const username = document.getElementById('username').value; | |
const password = document.getElementById('password').value; | |
// Simple validation | |
if(username.trim() === '' || password.trim() === '') { | |
alert('Please fill in all fields'); | |
return; | |
} | |
// Here you would typically send the data to a server | |
console.log('Login attempt with:', { username, password }); | |
// Show loading state | |
const submitBtn = loginForm.querySelector('button[type="submit"]'); | |
submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Logging in...'; | |
submitBtn.disabled = true; | |
// Simulate API call | |
setTimeout(() => { | |
submitBtn.innerHTML = 'Log In <i class="fas fa-arrow-right ml-2"></i>'; | |
submitBtn.disabled = false; | |
// For demo purposes, show success | |
alert('Login successful! (This is a demo)'); | |
}, 1500); | |
}); | |
// Add some fun hover effects | |
const ghostIcon = document.querySelector('.fa-ghost'); | |
ghostIcon.addEventListener('mouseover', () => { | |
ghostIcon.classList.add('wave'); | |
}); | |
ghostIcon.addEventListener('mouseout', () => { | |
setTimeout(() => { | |
ghostIcon.classList.remove('wave'); | |
}, 2000); | |
}); | |
}); | |
</script> | |
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=tattedbootyab/darkvault" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
</html> |