prabhuzz00's picture
Manual changes saved
1003aed verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WallFlick - Login</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script src="https://unpkg.com/feather-icons"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
body {
font-family: 'Inter', sans-serif;
}
.bg-blur {
backdrop-filter: blur(8px);
background-color: rgba(255, 255, 255, 0.1);
}
</style>
</head>
<body class="h-screen overflow-hidden">
<div class="absolute inset-0 bg-gray-900">
<img src="http://static.photos/workspace/1200x630/42" alt="Background" class="w-full h-full object-cover">
</div>
<div class="relative h-full flex items-stretch flex-row-reverse">
<div class="w-[40%] h-full bg-white/20 bg-blur rounded-r-xl shadow-xl p-10 backdrop-blur-lg ml-auto border border-white/30">
<div class="flex justify-center mb-8 mt-10">
<div class="bg-indigo-600/80 p-3 rounded-full backdrop-blur-sm">
<i data-feather="lock" class="text-white w-8 h-8"></i>
</div>
</div>
<h2 class="text-3xl font-bold text-center text-white mb-2">Welcome Back</h2>
<p class="text-white/80 text-center mb-8">Login to access your account</p>
<form>
<div class="mb-5">
<label for="email" class="block text-sm font-medium text-white mb-2">Email Address</label>
<div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
<i data-feather="mail" class="text-gray-400"></i>
</div>
<input type="email" id="email" class="pl-10 w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 outline-none transition duration-200" placeholder="you@example.com">
</div>
</div>
<div class="mb-5">
<label for="password" class="block text-sm font-medium text-white mb-2">Password</label>
<div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
<i data-feather="lock" class="text-gray-400"></i>
</div>
<input type="password" id="password" class="pl-10 pr-10 w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 outline-none transition duration-200" placeholder="••••••••">
<div class="absolute inset-y-0 right-0 pr-3 flex items-center cursor-pointer" onclick="togglePasswordVisibility()">
<i data-feather="eye" id="togglePassword" class="text-gray-400 hover:text-gray-600"></i>
</div>
</div>
</div>
<div class="flex items-center justify-between mb-6">
<div class="flex items-center">
<input type="checkbox" id="remember" class="h-4 w-4 text-indigo-600 focus:ring-indigo-500 border-white/50 rounded bg-white/20">
<label for="remember" class="ml-2 block text-sm text-white">Remember me</label>
</div>
<a href="#" class="text-sm text-indigo-600 hover:text-indigo-500">Forgot password?</a>
</div>
<button type="submit" class="w-full bg-indigo-600/90 hover:bg-indigo-700/90 text-white font-semibold py-3 px-4 rounded-lg shadow-md transition duration-200 flex items-center justify-center transform hover:scale-105 transition-transform backdrop-blur-sm">
<span>Sign In</span>
<i data-feather="arrow-right" class="ml-2 w-5 h-5"></i>
</button>
<div class="mt-6 text-center">
<p class="text-sm text-white/80">Don't have an account? <a href="#" class="text-white font-medium hover:text-white/90">Sign up</a></p>
</div>
</form>
</div>
</div>
<script>
feather.replace();
function togglePasswordVisibility() {
const passwordInput = document.getElementById('password');
const toggleIcon = document.getElementById('togglePassword');
if (passwordInput.type === 'password') {
passwordInput.type = 'text';
toggleIcon.setAttribute('data-feather', 'eye-off');
} else {
passwordInput.type = 'password';
toggleIcon.setAttribute('data-feather', 'eye');
}
feather.replace();
}
// Form animations
document.addEventListener('DOMContentLoaded', () => {
anime({
targets: '.bg-blur',
opacity: [0, 1],
translateX: [100, 0],
duration: 800,
easing: 'easeOutExpo'
});
anime({
targets: 'input',
opacity: [0, 1],
translateY: [20, 0],
delay: anime.stagger(100, {start: 300}),
duration: 600,
easing: 'easeOutBack'
});
anime({
targets: 'button',
scale: [0.9, 1],
opacity: [0, 1],
delay: 800,
duration: 600,
easing: 'easeOutElastic'
});
});
// Randomize background image with fade transition every 30 seconds
setInterval(() => {
const categories = ['technology', 'minimal', 'abstract', 'gradient', 'monochrome'];
const randomCategory = categories[Math.floor(Math.random() * categories.length)];
const randomSeed = Math.floor(Math.random() * 1000);
const bgImage = document.querySelector('img');
anime({
targets: bgImage,
opacity: 0,
duration: 800,
easing: 'easeInOutQuad',
complete: function() {
bgImage.src = `http://static.photos/workspace/1200x630/${randomSeed}`;
bgImage.onload = function() {
anime({
targets: bgImage,
opacity: [0, 1],
duration: 1200,
easing: 'easeInOutQuad'
});
}
}
});
}, 30000);
</script>
</body>
</html>