import React from 'react'; import { useLogin } from '@/hooks/useLogin'; /* ──────────────── 极光之境 · 登录组件 ──────────────── */ const KEYFRAMES = ` @keyframes aurora-drift-1 { 0% { transform: translate(-30%, -10%) rotate(-12deg) scaleX(1.2); opacity: 0.35; } 25% { transform: translate(-10%, 5%) rotate(-8deg) scaleX(1.5); opacity: 0.5; } 50% { transform: translate(10%, -5%) rotate(-14deg) scaleX(1.3); opacity: 0.4; } 75% { transform: translate(-5%, 10%) rotate(-10deg) scaleX(1.6); opacity: 0.55; } 100% { transform: translate(-30%, -10%) rotate(-12deg) scaleX(1.2); opacity: 0.35; } } @keyframes aurora-drift-2 { 0% { transform: translate(20%, 15%) rotate(8deg) scaleX(1.3); opacity: 0.25; } 30% { transform: translate(-10%, -5%) rotate(12deg) scaleX(1.6); opacity: 0.45; } 60% { transform: translate(5%, 10%) rotate(6deg) scaleX(1.4); opacity: 0.35; } 100% { transform: translate(20%, 15%) rotate(8deg) scaleX(1.3); opacity: 0.25; } } @keyframes aurora-drift-3 { 0% { transform: translate(-15%, 25%) rotate(-5deg) scaleX(1.5); opacity: 0.3; } 33% { transform: translate(15%, 5%) rotate(-9deg) scaleX(1.8); opacity: 0.5; } 66% { transform: translate(0%, 20%) rotate(-3deg) scaleX(1.4); opacity: 0.4; } 100% { transform: translate(-15%, 25%) rotate(-5deg) scaleX(1.5); opacity: 0.3; } } @keyframes aurora-drift-4 { 0% { transform: translate(10%, -15%) rotate(15deg) scaleX(1.4); opacity: 0.2; } 40% { transform: translate(-20%, 0%) rotate(10deg) scaleX(1.7); opacity: 0.4; } 80% { transform: translate(0%, 8%) rotate(18deg) scaleX(1.5); opacity: 0.3; } 100% { transform: translate(10%, -15%) rotate(15deg) scaleX(1.4); opacity: 0.2; } } @keyframes twinkle { 0%, 100% { opacity: 0.15; transform: scale(0.8); } 50% { opacity: 0.9; transform: scale(1.2); } } @keyframes float-card { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } } @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 20px rgba(124, 58, 237, 0.15), 0 0 60px rgba(5, 150, 105, 0.08); } 50% { box-shadow: 0 0 30px rgba(124, 58, 237, 0.25), 0 0 80px rgba(5, 150, 105, 0.15); } } `; /* ──────────────── 星星数据 ──────────────── */ const STARS = [ { left: '8%', top: '5%', size: 2, delay: 0, duration: 3 }, { left: '18%', top: '15%', size: 1.5, delay: 0.7, duration: 4 }, { left: '5%', top: '35%', size: 1, delay: 1.2, duration: 2.5 }, { left: '25%', top: '8%', size: 2.5, delay: 0.3, duration: 3.5 }, { left: '75%', top: '6%', size: 1.5, delay: 1.5, duration: 4.5 }, { left: '88%', top: '12%', size: 2, delay: 0.5, duration: 3 }, { left: '92%', top: '30%', size: 1, delay: 2, duration: 2.8 }, { left: '82%', top: '45%', size: 1.5, delay: 0.9, duration: 3.8 }, { left: '68%', top: '18%', size: 1, delay: 1.8, duration: 2.2 }, { left: '38%', top: '3%', size: 2, delay: 0.2, duration: 4 }, { left: '55%', top: '10%', size: 1.5, delay: 1.1, duration: 3.2 }, { left: '45%', top: '22%', size: 1, delay: 0.6, duration: 2.6 }, { left: '12%', top: '55%', size: 1, delay: 1.6, duration: 3.6 }, { left: '95%', top: '55%', size: 1.5, delay: 0.4, duration: 2.4 }, { left: '60%', top: '30%', size: 1, delay: 2.2, duration: 4.2 }, ]; export default function AuroraView(): JSX.Element { const { username, password, loading, error, setUsername, setPassword, handleLogin } = useLogin(); return ( <> {/* ═══════════════ 全屏背景容器 ═══════════════ */}
企业级数据库审核与合规管理