-
Animated neon embossed login animation
HTML
CSS
JavaScript
WELCOME
Login to your account
Email Address
Password
👁
Remember me
Forgot?
LOGIN
Don't have an account?
Sign Up
SIGN UP
Create your account
Full Name
Email Address
Password
👁
CREATE ACCOUNT
Already have an account?
Login
* { margin: 0; padding: 0; box-sizing: border-box } body { min-height: 100vh; display: flex; justify-content: center; align-items: center; overflow: hidden; font-family: Arial, sans-serif; scale:0.7; background: radial-gradient(circle at center, #202a38 0, #111827 45%, #050912 100%) } body::before { content: ""; position: fixed; width: 600px; height: 600px; border-radius: 50%; background: radial-gradient(circle, rgba(0, 255, 255, .15), transparent 65%); filter: blur(30px); animation: backgroundPulse 4s ease-in-out infinite } @keyframes backgroundPulse { 0%, 100% { transform: scale(.9); opacity: .5 } 50% { transform: scale(1.2); opacity: 1 } } .particle { position: fixed; width: 5px; height: 5px; border-radius: 50%; background: #0ff; box-shadow: 0 0 8px #0ff, 0 0 20px #0ff; animation: particleMove linear infinite } .p1 { left: 10%; bottom: -20px; animation-duration: 8s } .p2 { left: 25%; bottom: -20px; animation-duration: 11s; animation-delay: 2s } .p3 { left: 70%; bottom: -20px; animation-duration: 9s; animation-delay: 1s } .p4 { left: 85%; bottom: -20px; animation-duration: 13s; animation-delay: 3s } .p5 { left: 50%; bottom: -20px; animation-duration: 10s; animation-delay: 4s } @keyframes particleMove { 0% { transform: translateY(0) scale(.5); opacity: 0 } 20% { opacity: 1 } 100% { transform: translateY(-110vh) translateX(80px) scale(1.5); opacity: 0 } } .scene { position: relative; width: 500px; height: 500px; perspective: 1600px; z-index: 10 } .neon-ring { position: absolute; inset: -8px; border-radius: 50%; background: conic-gradient(from 0deg, transparent 0deg, transparent 30deg, #0ff 60deg, #008cff 90deg, transparent 130deg, transparent 180deg, #f0f 220deg, #0ff 280deg, transparent 330deg, transparent 360deg); animation: ringRotate 3s linear infinite; filter: drop-shadow(0 0 5px #00ffff) drop-shadow(0 0 15px #00ffff) drop-shadow(0 0 30px #008cff); z-index: -2 } .neon-ring::after { content: ""; position: absolute; inset: 7px; border-radius: 50%; background: #101722 } @keyframes ringRotate { from { transform: rotate(0) } to { transform: rotate(360deg) } } .neon-ring-2 { position: absolute; inset: -20px; border-radius: 50%; border: 1px solid rgba(0, 255, 255, .25); box-shadow: 0 0 15px rgba(0, 255, 255, .3), inset 0 0 15px rgba(0, 255, 255, .15); animation: ringPulse 2s ease-in-out infinite } @keyframes ringPulse { 0%, 100% { transform: scale(1); opacity: .5 } 50% { transform: scale(1.04); opacity: 1 } } .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 1.2s cubic-bezier(.68, -.55, .27, 1.55) } .card.signup-mode { transform: rotateY(180deg) } .card-face { position: absolute; width: 100%; height: 100%; border-radius: 50%; display: flex; justify-content: center; align-items: center; backface-visibility: hidden; background: radial-gradient(circle at 35% 25%, #273344, #111a27 65%, #080e18); border: 1px solid rgba(255, 255, 255, .08); box-shadow: inset 10px 10px 30px rgba(255, 255, 255, .04), inset -15px -15px 35px rgba(0, 0, 0, .5), 0 25px 60px rgba(0, 0, 0, .7) } .back { transform: rotateY(180deg) } .form { width: 285px; position: relative; z-index: 20; animation: formFloat 4s ease-in-out infinite } @keyframes formFloat { 0%, 100% { transform: translateY(0) } 50% { transform: translateY(-8px) } } .form h1 { text-align: center; font-size: 30px; margin-bottom: 7px; color: #e8ffff; text-shadow: 0 0 5px #0ff, 0 0 15px #0ff, 0 0 30px rgba(0, 255, 255, .5); animation: titleGlow 2s ease-in-out infinite alternate } @keyframes titleGlow { from { text-shadow: 0 0 5px #0ff, 0 0 10px #0ff } to { text-shadow: 0 0 10px #0ff, 0 0 25px #0ff, 0 0 40px #008cff } } .form-subtitle { text-align: center; color: #8fa5b9; font-size: 12px; margin-bottom: 25px } .input-box { position: relative; margin-bottom: 18px } .input-box input { width: 100%; height: 48px; border: 1px solid rgba(0, 255, 255, .18); outline: 0; border-radius: 25px; padding: 0 20px; background: rgba(5, 15, 25, .8); color: #fff; box-shadow: inset 5px 5px 12px rgba(0, 0, 0, .6), inset -3px -3px 10px rgba(255, 255, 255, .03); transition: .4s } .input-box input:focus { border-color: #0ff; box-shadow: 0 0 5px #0ff, 0 0 15px rgba(0, 255, 255, .35), inset 4px 4px 10px rgba(0, 0, 0, .6) } .input-box label { position: absolute; left: 20px; top: 15px; color: #7890a5; font-size: 13px; pointer-events: none; transition: .3s } .input-box input:focus+label, .input-box input:not(:placeholder-shown)+label { top: -8px; left: 18px; padding: 0 8px; border-radius: 10px; background: #111a27; color: #0ff; font-size: 10px; text-shadow: 0 0 8px #0ff } .password-box { position: relative } .password-toggle { position: absolute; right: 18px; top: 14px; cursor: pointer; color: #6f8da3; transition: .3s } .password-toggle:hover { color: #0ff; text-shadow: 0 0 10px #0ff } .options { display: flex; justify-content: space-between; align-items: center; margin: 5px 5px 20px; color: #71879b; font-size: 11px } .options a { color: #0ff; text-decoration: none } .options a:hover { text-shadow: 0 0 10px #0ff } .btn { position: relative; width: 100%; height: 48px; border: 1px solid #0ff; border-radius: 25px; background: linear-gradient(90deg, rgba(0, 255, 255, .08), rgba(0, 140, 255, .15)); color: #dfffff; font-size: 14px; font-weight: 700; letter-spacing: 2px; cursor: pointer; overflow: hidden; box-shadow: 0 0 5px #0ff, 0 0 15px rgba(0, 255, 255, .4), inset 0 0 15px rgba(0, 255, 255, .08); transition: .3s } .btn:hover { transform: translateY(-3px); box-shadow: 0 0 10px #0ff, 0 0 25px #0ff, 0 0 45px rgba(0, 140, 255, .6) } .btn:active { transform: scale(.96) } .btn::before { content: ""; position: absolute; top: 0; left: -100%; width: 60%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .5), transparent); transform: skewX(-25deg); animation: buttonShine 2.5s infinite } @keyframes buttonShine { 0% { left: -100% } 100%, 50% { left: 140% } } .switch { text-align: center; margin-top: 18px; font-size: 12px; color: #71879b } .switch span { color: #0ff; font-weight: 700; cursor: pointer; text-shadow: 0 0 8px #0ff } .switch span:hover { text-decoration: underline } .message { min-height: 18px; text-align: center; margin-top: 10px; font-size: 12px; font-weight: 700; opacity: 0; transform: translateY(8px); transition: .4s } .message.show { opacity: 1; transform: translateY(0) } .message.success { color: #00ffae; text-shadow: 0 0 8px #00ffae, 0 0 18px #00ffae } .message.failed { color: #f57; text-shadow: 0 0 8px #f57, 0 0 18px #f57 } @media(max-width:520px) { .scene { width: 360px; height: 360px } .neon-ring { inset: -6px } .neon-ring-2 { inset: -12px } .form { width: 215px } .form h1 { font-size: 22px } .form-subtitle { font-size: 10px; margin-bottom: 15px } .input-box { margin-bottom: 11px } .input-box input { height: 38px } .input-box label { top: 12px } .password-toggle { top: 10px } .btn { height: 40px; font-size: 12px } } .loading { pointer-events: none; opacity: .6 } .loading::after { content: ""; display: inline-block; width: 12px; height: 12px; margin-left: 8px; border: 2px solid rgba(255, 255, 255, .3); border-top-color: #0ff; border-radius: 50%; vertical-align: middle; animation: spin .7s linear infinite } @keyframes spin { to { transform: rotate(360deg) } }
const card = document.getElementById("card"); function showSignup() { card.classList.add("signup-mode"); clearMessages(); } function showLogin() { card.classList.remove("signup-mode"); clearMessages(); } function togglePassword(id, element) { const input = document.getElementById(id); if (input.type === "password") { input.type = "text"; element.textContent = "🙈"; } else { input.type = "password"; element.textContent = "👁"; } } function showMessage( element, text, type) { element.textContent = text; element.className = "message show " + type; } function clearMessages() { document.querySelectorAll(".message").forEach(message => { message.textContent = ""; message.className = "message"; }); } document.getElementById("loginForm").addEventListener("submit",function (e) { e.preventDefault(); const email = document.getElementById("loginEmail").value; const password = document.getElementById("loginPassword").value; const message = document.getElementById("loginMessage"); const button =document.getElementById("loginBtn"); button.classList.add("loading"); setTimeout(() => { button.classList.remove("loading"); /* DEMO LOGIN Email: admin@example.com Password: 123456 */ if (email === "admin@example.com" && password === "123456") { showMessage(message, "✓ LOGIN SUCCESSFUL!", "success"); } else { showMessage(message, "✕ INVALID EMAIL OR PASSWORD!", "failed"); } }, 900); } ); document.getElementById("signupForm").addEventListener("submit", function (e) { e.preventDefault(); const name = document.getElementById("signupName").value.trim(); const email = document.getElementById("signupEmail").value.trim(); const password = document.getElementById("signupPassword").value; const message = document.getElementById("signupMessage"); const button = document.getElementById("signupBtn"); button.classList.add("loading"); setTimeout(() => { button.classList.remove("loading"); if (name.length >= 3 && email.includes("@") && email.includes(".") && password.length >= 6) { showMessage(message, "✓ ACCOUNT CREATED SUCCESSFULLY!", "success"); } else { showMessage(message, "✕ PLEASE ENTER VALID INFORMATION!", "failed"); } }, 900); });
Live Preview