Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>AI Legal Assistant | Pro Level AI Guidance</title> | |
| <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700&display=swap" rel="stylesheet"> | |
| <style> | |
| /* Existing styles... */ | |
| body.direct-roles #landing { display: none ; } | |
| body.direct-roles #rolePage { opacity: 1 ; visibility: visible ; } | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| font-family: 'Poppins', sans-serif; | |
| } | |
| body, html { | |
| height: 100%; | |
| overflow: hidden; | |
| background-color: #030617; | |
| cursor: default; | |
| } | |
| #particles { | |
| position: absolute; | |
| width: 100%; | |
| height: 100%; | |
| top: 0; | |
| left: 0; | |
| z-index: 1; | |
| pointer-events: none; | |
| } | |
| .cursor-glow { | |
| position: fixed; | |
| width: 350px; | |
| height: 350px; | |
| background: radial-gradient(circle, rgba(99, 102, 241, 0.12), transparent 75%); | |
| pointer-events: none; | |
| transform: translate(-50%, -50%); | |
| z-index: 0; | |
| transition: transform 0.15s ease-out; | |
| } | |
| .hero { | |
| height: 100vh; | |
| background: radial-gradient(circle at 50% 50%, #0d122b, #030617); | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| position: relative; | |
| overflow: hidden; | |
| transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1); | |
| z-index: 10; | |
| perspective: 1000px; /* For the tilt effect */ | |
| } | |
| .hero::before { | |
| content: ""; | |
| position: absolute; | |
| width: 800px; | |
| height: 800px; | |
| background: radial-gradient(circle, rgba(59, 130, 246, 0.25), transparent 75%); | |
| top: -200px; | |
| left: -200px; | |
| filter: blur(120px); | |
| animation: moveLight 12s infinite alternate ease-in-out; | |
| pointer-events: none; | |
| } | |
| .hero::after { | |
| content: ""; | |
| position: absolute; | |
| width: 700px; | |
| height: 700px; | |
| background: radial-gradient(circle, rgba(147, 51, 234, 0.25), transparent 75%); | |
| bottom: -200px; | |
| right: -200px; | |
| filter: blur(120px); | |
| animation: moveLight2 15s infinite alternate ease-in-out; | |
| pointer-events: none; | |
| } | |
| @keyframes moveLight { | |
| from { transform: translate(0, 0); } | |
| to { transform: translate(250px, 150px); } | |
| } | |
| @keyframes moveLight2 { | |
| from { transform: translate(0, 0); } | |
| to { transform: translate(-250px, -150px); } | |
| } | |
| /* FLOATING CONTENT */ | |
| .content { | |
| text-align: center; | |
| color: white; | |
| z-index: 20; | |
| max-width: 850px; | |
| padding: 40px; | |
| transform-style: preserve-3d; | |
| animation: float 6s ease-in-out infinite; | |
| will-change: transform; | |
| } | |
| @keyframes float { | |
| 0% { transform: translateY(0px); } | |
| 50% { transform: translateY(-15px); } | |
| 100% { transform: translateY(0px); } | |
| } | |
| .tag { | |
| display: inline-block; | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| color: #6ee7ff; | |
| letter-spacing: 3px; | |
| text-transform: uppercase; | |
| margin-bottom: 25px; | |
| background: rgba(110, 231, 255, 0.1); | |
| padding: 6px 18px; | |
| border-radius: 20px; | |
| border: 1px solid rgba(110, 231, 255, 0.25); | |
| animation: fadeIn 1s ease forwards; | |
| } | |
| .content h1 { | |
| font-size: clamp(2.5rem, 8vw, 4.5rem); | |
| white-space: nowrap; | |
| font-weight: 700; | |
| margin-bottom: 20px; | |
| line-height: 1.1; | |
| letter-spacing: -2px; | |
| background: linear-gradient(to bottom, #fff 40%, #94a3b8); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| animation: fadeSlide 1.2s cubic-bezier(0.2, 0.8, 0.2, 1) forwards; | |
| } | |
| @media (max-width: 768px) { | |
| .content h1 { white-space: normal; font-size: 3rem; } | |
| } | |
| .content p#subtitle { | |
| font-size: clamp(1.1rem, 3.5vw, 1.45rem); | |
| opacity: 0.9; | |
| margin-bottom: 30px; | |
| line-height: 1.7; | |
| color: #cbd5e1; | |
| min-height: 3.5em; | |
| font-weight: 300; | |
| } | |
| .status { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 10px; | |
| font-size: 0.85rem; | |
| color: #6ee7ff; | |
| opacity: 0.8; | |
| letter-spacing: 1.5px; | |
| margin-bottom: 50px; | |
| text-transform: uppercase; | |
| font-weight: 500; | |
| animation: fadeIn 2s ease forwards; | |
| } | |
| .status::before { | |
| content: ""; | |
| display: block; | |
| width: 8px; | |
| height: 8px; | |
| background: #22c55e; | |
| border-radius: 50%; | |
| box-shadow: 0 0 10px #22c55e; | |
| animation: blink 1.5s infinite; | |
| } | |
| @keyframes blink { | |
| 0%, 100% { opacity: 1; transform: scale(1); } | |
| 50% { opacity: 0.3; transform: scale(0.8); } | |
| } | |
| .cta-btn { | |
| position: relative; | |
| overflow: hidden; | |
| padding: 22px 60px; | |
| font-size: 1.2rem; | |
| font-weight: 600; | |
| border: none; | |
| border-radius: 100px; | |
| background: linear-gradient(135deg, #3b82f6, #9333ea); | |
| color: white; | |
| cursor: pointer; | |
| transition: all 0.5s cubic-bezier(0.19, 1, 0.22, 1); | |
| text-transform: uppercase; | |
| letter-spacing: 2px; | |
| display: inline-block; | |
| animation: pulseGlow 2.5s infinite ease-in-out; | |
| box-shadow: 0 10px 30px rgba(99, 102, 241, 0.4); | |
| } | |
| @keyframes pulseGlow { | |
| 0% { box-shadow: 0 0 15px rgba(99, 102, 241, 0.4); } | |
| 50% { box-shadow: 0 0 35px rgba(99, 102, 241, 0.7); } | |
| 100% { box-shadow: 0 0 15px rgba(99, 102, 241, 0.4); } | |
| } | |
| .cta-btn::after { | |
| content: ""; | |
| position: absolute; | |
| width: 200%; | |
| height: 200%; | |
| background: radial-gradient(circle, rgba(255, 255, 255, 0.6), transparent 75%); | |
| top: -50%; | |
| left: -50%; | |
| opacity: 0; | |
| transition: 0.6s; | |
| transform: scale(0.3); | |
| pointer-events: none; | |
| } | |
| .cta-btn:hover { | |
| transform: translateY(-8px) scale(1.05); | |
| box-shadow: 0 30px 60px rgba(59, 130, 246, 0.6) ; | |
| letter-spacing: 3px; | |
| } | |
| .cta-btn:hover::after { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| .cta-btn:active { | |
| transform: scale(0.96); | |
| } | |
| #rolePage { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100vh; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| background: radial-gradient(circle at center, #0f172a, #030617); | |
| opacity: 0; | |
| visibility: hidden; | |
| transition: opacity 1s ease; | |
| z-index: 5; | |
| } | |
| #rolePage.visible { | |
| opacity: 1; | |
| visibility: visible; | |
| } | |
| .role-selection { | |
| background: rgba(15, 23, 42, 0.6); | |
| backdrop-filter: blur(35px); | |
| -webkit-backdrop-filter: blur(35px); | |
| padding: 65px; | |
| border-radius: 45px; | |
| border: 1px solid rgba(255, 255, 255, 0.08); | |
| text-align: center; | |
| width: 95%; | |
| max-width: 680px; | |
| box-shadow: 0 60px 120px -20px rgba(0, 0, 0, 0.8); | |
| animation: slideUp 1s cubic-bezier(0.16, 1, 0.3, 1) forwards; | |
| } | |
| .role-selection h2 { | |
| font-size: 3rem; | |
| color: white; | |
| margin-bottom: 20px; | |
| font-weight: 700; | |
| letter-spacing: -1.5px; | |
| } | |
| .role-selection p { | |
| color: #94a3b8; | |
| margin-bottom: 45px; | |
| font-size: 1.15rem; | |
| line-height: 1.6; | |
| } | |
| .roles { | |
| display: grid; | |
| grid-template-columns: repeat(2, 1fr); | |
| gap: 25px; | |
| } | |
| @media (max-width: 600px) { | |
| .roles { grid-template-columns: 1fr; gap: 15px; } | |
| .role-selection { padding: 40px 25px; } | |
| .content h1 { line-height: 1.1; } | |
| } | |
| .role { | |
| position: relative; | |
| overflow: hidden; | |
| background: rgba(255, 255, 255, 0.04); | |
| color: #f1f5f9; | |
| border: 1px solid rgba(255, 255, 255, 0.06); | |
| padding: 24px; | |
| border-radius: 24px; | |
| cursor: pointer; | |
| font-size: 1.15rem; | |
| font-weight: 500; | |
| transition: all 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); | |
| text-align: left; | |
| display: flex; | |
| align-items: center; | |
| gap: 18px; | |
| } | |
| .role::before { | |
| content: ""; | |
| position: absolute; | |
| inset: 0; | |
| border-radius: 24px; | |
| background: linear-gradient(120deg, transparent, rgba(99, 102, 241, 0.2), transparent); | |
| opacity: 0; | |
| transition: 0.4s; | |
| pointer-events: none; | |
| } | |
| .role:hover::before { | |
| opacity: 1; | |
| transform: translateX(100%) skewX(-15deg); | |
| animation: sweep 0.6s ease-out forwards; | |
| } | |
| @keyframes sweep { | |
| from { transform: translateX(-100%) skewX(-15deg); } | |
| to { transform: translateX(100%) skewX(-15deg); } | |
| } | |
| .role:hover { | |
| background: rgba(59, 130, 246, 0.15); | |
| border-color: rgba(59, 130, 246, 0.5); | |
| transform: translateY(-6px) scale(1.03); | |
| box-shadow: 0 25px 50px rgba(0, 0, 0, 0.4); | |
| color: #fff; | |
| } | |
| .professional-footer { | |
| margin-top: 60px; | |
| color: #475569; | |
| font-size: 0.95rem; | |
| letter-spacing: 0.5px; | |
| } | |
| .professional-footer a { | |
| color: #a5b4fc; | |
| text-decoration: none; | |
| font-weight: 600; | |
| transition: 0.4s; | |
| } | |
| .professional-footer a:hover { | |
| color: #818cf8; | |
| text-shadow: 0 0 20px rgba(99, 102, 241, 0.6); | |
| } | |
| @keyframes fadeSlide { | |
| from { opacity: 0; transform: translateY(35px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| @keyframes fadeIn { | |
| from { opacity: 0; } | |
| to { opacity: 1; } | |
| } | |
| @keyframes slideUp { | |
| from { opacity: 0; transform: translateY(60px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| .hidden { display: none ; } | |
| .fade-out { | |
| opacity: 0; | |
| transform: scale(1.05); | |
| pointer-events: none; | |
| filter: blur(10px); | |
| transition: 1s cubic-bezier(0.4, 0, 0.2, 1); | |
| } | |
| </style> | |
| </head> | |
| <body class="{% if show_roles %}direct-roles{% endif %}"> | |
| <canvas id="particles"></canvas> | |
| <div class="hero" id="landing"> | |
| <div class="content"> | |
| <span class="tag">AI POWERED SYSTEM</span> | |
| <h1>βοΈ AI Legal Assistant</h1> | |
| <p id="subtitle"></p> | |
| <div class="status">System Ready</div> | |
| <button id="startBtn" class="cta-btn"> | |
| Start Consultation β | |
| </button> | |
| </div> | |
| </div> | |
| <div id="rolePage"> | |
| <div class="role-selection"> | |
| <h2>Who are you?</h2> | |
| <p>Select your role to unlock precise legal intelligence and expert guidance tailored to your specific framework.</p> | |
| <div class="roles"> | |
| <button class="role" data-role="Judge">π¨βοΈ Judge</button> | |
| <button class="role" data-role="Advocate/Lawyer">π©βοΈ Advocate</button> | |
| <button class="role" data-role="Woman">π‘οΈ Woman</button> | |
| <button class="role" data-role="Citizen">π€ Citizen</button> | |
| <button class="role" data-role="Student">π Student</button> | |
| <button class="role" data-role="Minor">π¦ Minor</button> | |
| </div> | |
| <footer class="professional-footer"> | |
| © 2026 Law Bot AI β’ Forged for Justice β’ Managed by <a href="https://www.linkedin.com/in/vishwanath77" target="_blank">Vishwanath</a> | |
| </footer> | |
| </div> | |
| </div> | |
| <script> | |
| document.addEventListener("DOMContentLoaded", function () { | |
| const contentEl = document.querySelector(".content"); | |
| // --- CURSOR GLOW --- | |
| const glow = document.createElement("div"); | |
| glow.classList.add("cursor-glow"); | |
| document.body.appendChild(glow); | |
| document.addEventListener("mousemove", (e) => { | |
| glow.style.left = e.clientX + "px"; | |
| glow.style.top = e.clientY + "px"; | |
| // --- PARALLAX TILT EFFECT --- | |
| const x = (window.innerWidth / 2 - e.clientX) / 75; | |
| const y = (window.innerHeight / 2 - e.clientY) / 75; | |
| // Keep the floating animation active by adding these transforms | |
| contentEl.style.transform = `perspective(1000px) rotateY(${x}deg) rotateX(${y}deg)`; | |
| }); | |
| // --- PARTICLES ANIMATION --- | |
| const canvas = document.getElementById("particles"); | |
| const ctx = canvas.getContext("2d"); | |
| let w, h, particles = []; | |
| function initCanvas() { | |
| w = canvas.width = window.innerWidth; | |
| h = canvas.height = window.innerHeight; | |
| particles = []; | |
| for (let i = 0; i < 90; i++) { | |
| particles.push({ | |
| x: Math.random() * w, | |
| y: Math.random() * h, | |
| r: Math.random() * 1.5 + 0.5, | |
| dx: (Math.random() - 0.5) * 0.4, | |
| dy: (Math.random() - 0.5) * 0.4, | |
| alpha: Math.random() * 0.4 + 0.1 | |
| }); | |
| } | |
| } | |
| function animate() { | |
| ctx.clearRect(0, 0, w, h); | |
| particles.forEach(p => { | |
| p.x += p.dx; | |
| p.y += p.dy; | |
| if (p.x < 0 || p.x > w) p.dx *= -1; | |
| if (p.y < 0 || p.y > h) p.dy *= -1; | |
| ctx.beginPath(); | |
| ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2); | |
| ctx.fillStyle = `rgba(110, 231, 255, ${p.alpha})`; | |
| ctx.fill(); | |
| }); | |
| requestAnimationFrame(animate); | |
| } | |
| initCanvas(); | |
| animate(); | |
| window.addEventListener("resize", initCanvas); | |
| // --- TYPING EFFECT --- | |
| const subtitleText = "Precise legal guidance powered by state-of-the-art AI. Redefining how Indian citizens navigate justice with intelligence and speed."; | |
| const subtitleEl = document.getElementById("subtitle"); | |
| let i = 0; | |
| function typing() { | |
| if (i < subtitleText.length) { | |
| subtitleEl.innerHTML += subtitleText.charAt(i); | |
| i++; | |
| setTimeout(typing, 18); | |
| } | |
| } | |
| setTimeout(typing, 800); | |
| // --- NAVIGATION --- | |
| const startBtn = document.getElementById("startBtn"); | |
| const landing = document.getElementById("landing"); | |
| const rolePage = document.getElementById("rolePage"); | |
| startBtn.addEventListener("click", () => { | |
| landing.classList.add("fade-out"); | |
| setTimeout(() => { | |
| landing.classList.add("hidden"); | |
| rolePage.classList.add("visible"); | |
| }, 1200); | |
| }); | |
| document.querySelectorAll(".role").forEach(button => { | |
| button.addEventListener("click", function () { | |
| const role = this.getAttribute("data-role"); | |
| window.location.href = `/login?role=${encodeURIComponent(role)}`; | |
| }); | |
| }); | |
| // --- PATHWAY PROTECTION (Fallback) --- | |
| if (window.location.pathname.includes('/role')) { | |
| document.body.classList.add('direct-roles'); | |
| } | |
| }); | |
| </script> | |
| </body> | |
| </html> |