Download test.html from api-ix/Portfolio: direct link, hf CLI and curl.
- Browser
- Download file 9.5 kB
-
https://huggingface.co/spaces/api-ix/Portfolio/resolve/main/test.html
- Command line
-
hf download hf://spaces/api-ix/Portfolio/test.html
-
curl -L -o test.html https://huggingface.co/spaces/api-ix/Portfolio/resolve/main/test.html
9.5 kB
| <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> | |