Portfolio / test.html
api-ix's picture
Create test.html
06a7433 verified
Raw
History Blame Contribute Delete
9.5 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nebula Access</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;500;700&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
body {
overflow: hidden;
background: #0f0c29;
background: linear-gradient(to bottom, #000000, #0f0c29, #24243e);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
/* Ambient Background Orbs */
.orb-container {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 0;
pointer-events: none;
}
.orb {
position: absolute;
border-radius: 50%;
filter: blur(80px);
opacity: 0.6;
animation: float 10s infinite ease-in-out alternate;
}
.orb:nth-child(1) {
top: -10%;
left: -10%;
width: 50vw;
height: 50vw;
background: linear-gradient(to right, #ff00cc, #333399);
animation-duration: 12s;
}
.orb:nth-child(2) {
bottom: -10%;
right: -10%;
width: 40vw;
height: 40vw;
background: linear-gradient(to left, #00d2ff, #3a7bd5);
animation-duration: 15s;
}
.orb:nth-child(3) {
top: 40%;
left: 40%;
width: 20vw;
height: 20vw;
background: #7b4397;
animation: pulse 8s infinite ease-in-out;
}
/* 3D Tilt Card */
.container {
position: relative;
z-index: 1;
display: flex;
justify-content: center;
align-items: center;
transform-style: preserve-3d;
perspective: 1000px;
}
.login-box {
position: relative;
width: 400px;
height: 500px;
background: rgba(255, 255, 255, 0.05);
border-radius: 20px;
backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(15px);
border: 1px solid rgba(255, 255, 255, 0.1);
border-top: 1px solid rgba(255, 255, 255, 0.3);
border-left: 1px solid rgba(255, 255, 255, 0.3);
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
padding: 40px;
transform-style: preserve-3d;
transition: transform 0.1s ease-out; /* Smooth movement */
}
/* Form Elements */
h2 {
font-size: 2em;
color: #fff;
margin-bottom: 30px;
letter-spacing: 2px;
text-transform: uppercase;
text-shadow: 0 0 10px rgba(255,255,255,0.3);
transform: translateZ(40px); /* 3D depth */
}
.input-group {
position: relative;
width: 100%;
margin-bottom: 25px;
transform: translateZ(30px);
}
.input-group input {
width: 100%;
padding: 10px 0;
font-size: 16px;
color: #fff;
letter-spacing: 1px;
margin-bottom: 10px;
border: none;
border-bottom: 1px solid rgba(255,255,255,0.3);
outline: none;
background: transparent;
transition: 0.5s;
}
.input-group label {
position: absolute;
top: 0;
left: 0;
padding: 10px 0;
font-size: 16px;
color: rgba(255,255,255,0.6);
pointer-events: none;
transition: 0.5s;
}
.input-group input:focus ~ label,
.input-group input:valid ~ label {
top: -25px;
left: 0;
color: #03a9f4;
font-size: 12px;
font-weight: bold;
}
.input-group input:focus,
.input-group input:valid {
border-bottom: 1px solid #03a9f4;
box-shadow: 0 10px 10px -10px rgba(3, 169, 244, 0.5);
}
/* The Button */
button {
width: 100%;
padding: 15px;
background: linear-gradient(90deg, #03a9f4, #f441a5);
border: none;
border-radius: 30px;
color: #fff;
font-size: 18px;
font-weight: 700;
letter-spacing: 2px;
cursor: pointer;
transform: translateZ(50px);
transition: 0.3s;
position: relative;
overflow: hidden;
z-index: 10;
}
button::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
transition: 0.5s;
}
button:hover::before {
left: 100%;
}
button:hover {
box-shadow: 0 0 20px #03a9f4, 0 0 40px #f441a5;
transform: translateZ(60px) scale(1.05);
}
/* Keyframes */
@keyframes float {
0% { transform: translate(0, 0); }
100% { transform: translate(50px, 50px); }
}
@keyframes pulse {
0%, 100% { transform: scale(1); opacity: 0.5; }
50% { transform: scale(1.2); opacity: 0.8; }
}
/* Floating particles inside the card */
.particles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
border-radius: 20px;
pointer-events: none;
z-index: -1;
}
.particle {
position: absolute;
display: block;
pointer-events: none;
width: 5px;
height: 5px;
background-color: rgba(255, 255, 255, 0.5);
box-shadow: 0 0 10px rgba(255, 255, 255, 1);
border-radius: 50%;
animation: rise 15s infinite linear;
}
@keyframes rise {
0% { transform: translateY(500px) scale(0); opacity: 0;}
50% { opacity: 1; }
100% { transform: translateY(-100px) scale(1); opacity: 0;}
}
</style>
</head>
<body>
<div class="orb-container">
<div class="orb"></div>
<div class="orb"></div>
<div class="orb"></div>
</div>
<div class="container" id="container">
<form class="login-box" id="card">
<div class="particles">
</div>
<h2>Access</h2>
<div class="input-group">
<input type="text" required>
<label>Username</label>
</div>
<div class="input-group">
<input type="password" required>
<label>Password</label>
</div>
<button type="submit">LOGIN</button>
</form>
</div>
<script>
// PART 1: 3D TILT EFFECT
const container = document.getElementById('container');
const card = document.getElementById('card');
// Mouse Move Event
container.addEventListener('mousemove', (e) => {
const xAxis = (window.innerWidth / 2 - e.pageX) / 20; // Rotate X axis
const yAxis = (window.innerHeight / 2 - e.pageY) / 20; // Rotate Y axis
card.style.transform = `rotateY(${xAxis}deg) rotateX(${yAxis}deg)`;
});
// Animate In (Reset)
container.addEventListener('mouseenter', (e) => {
card.style.transition = 'none'; // Remove transition for instant response
});
// Animate Out (Reset to center)
container.addEventListener('mouseleave', (e) => {
card.style.transition = 'all 0.5s ease'; // Smooth return
card.style.transform = `rotateY(0deg) rotateX(0deg)`;
});
// PART 2: GENERATE PARTICLES
const particleContainer = document.querySelector('.particles');
function createParticles() {
for(let i = 0; i < 20; i++) {
let particle = document.createElement('span');
particle.classList.add('particle');
// Random position and delay
let size = Math.random() * 5 + 1;
particle.style.width = `${size}px`;
particle.style.height = `${size}px`;
particle.style.left = Math.random() * 100 + '%';
particle.style.animationDelay = Math.random() * 10 + 's';
particle.style.animationDuration = Math.random() * 10 + 10 + 's';
particleContainer.appendChild(particle);
}
}
createParticles();
</script>
</body>
</html>