diff --git a/apps/web-client/src/app/globals.css b/apps/web-client/src/app/globals.css index 7fb3fcd4..07b766c3 100644 --- a/apps/web-client/src/app/globals.css +++ b/apps/web-client/src/app/globals.css @@ -158,25 +158,43 @@ } } +/** + * EN: Floating Animation - Creates a weightless hovering effect + * VI: Animation lơ lửng - Tạo hiệu ứng nhấp nhô không trọng lực + */ +@keyframes float { + 0% { + transform: translateY(0px); + } + + 50% { + transform: translateY(-15px); + } + + 100% { + transform: translateY(0px); + } +} + /** * EN: Mesh Gradient Animation - Creates dynamic moving color spots * VI: Animation Mesh Gradient - Tạo các đốm màu di chuyển động */ @keyframes mesh-move { 0% { - transform: translate(0, 0) scale(1); + transform: translate(0, 0) scale(1) rotate(0deg); } 33% { - transform: translate(5%, 10%) scale(1.1); + transform: translate(10%, 15%) scale(1.2) rotate(120deg); } 66% { - transform: translate(-5%, 5%) scale(0.9); + transform: translate(-10%, 10%) scale(0.8) rotate(240deg); } 100% { - transform: translate(0, 0) scale(1); + transform: translate(0, 0) scale(1) rotate(360deg); } } @@ -200,7 +218,11 @@ */ @layer utilities { .animate-fadeIn { - animation: fadeIn 0.8s var(--ease-spring) forwards; + animation: fadeIn 1s var(--ease-spring) forwards; + } + + .animate-float { + animation: float 6s var(--ease-in-out) infinite; } .mesh-gradient { @@ -212,14 +234,17 @@ z-index: -20; background: var(--bg-primary); overflow: hidden; + transition: background-color var(--duration-slow) var(--ease-in-out); } .mesh-spot { position: absolute; border-radius: 50%; - filter: blur(80px); + filter: blur(100px); opacity: 0.15; - animation: mesh-move 20s infinite alternate var(--ease-in-out); + mix-blend-mode: soft-light; + animation: mesh-move 30s infinite linear; + will-change: transform; } .text-glow { @@ -227,20 +252,21 @@ } .text-brand-glow { - text-shadow: 0 0 30px rgba(59, 130, 246, 0.5); + text-shadow: 0 0 40px rgba(59, 130, 246, 0.6); } .glass-card { background: var(--glass-bg); - backdrop-filter: blur(var(--glass-blur)); + backdrop-filter: blur(20px); border: 1px solid var(--glass-border); transition: all var(--duration-normal) var(--ease-in-out); + box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37); } .glass-card:hover { background: var(--glass-bg-hover); - border-color: rgba(59, 130, 246, 0.4); - transform: translateY(-4px); + border-color: rgba(255, 255, 255, 0.2); + transform: translateY(-8px) scale(1.02); box-shadow: var(--shadow-brand-lg); } diff --git a/apps/web-client/src/app/page.tsx b/apps/web-client/src/app/page.tsx index 94aee9ce..a165ca41 100644 --- a/apps/web-client/src/app/page.tsx +++ b/apps/web-client/src/app/page.tsx @@ -62,49 +62,54 @@ export default function Home() { <> - {/* EN: Dynamic Background - Mesh Gradient / VI: Nền động - Mesh Gradient */} + {/* EN: Dynamic Background - Pastel Mesh Gradient / VI: Nền động - Mesh Gradient Pastel */}
-
-
-
+ {/* EN: Primary Pastel Blue / VI: Xanh Pastel chính */} +
+ {/* EN: Soft Purple / VI: Tím mềm */} +
+ {/* EN: Bright Cyan / VI: Xanh lơ sáng */} +
-
- {/* EN: Decorative brand elements / VI: Các yếu tố trang trí thương hiệu */} -
-
+
+ {/* EN: Floating particles for depth / VI: Các hạt lơ lửng tạo chiều sâu */} +
+
-
+
{/* EN: Hero Section / VI: Phần Hero */} -
- +
+
+ +
-

+

{t('home.title')}

-

+

{t('home.description')}

-
+
{!isAuthenticated ? ( <> ) : ( @@ -112,47 +117,17 @@ export default function Home() { variant="brand" size="xl" onClick={() => (window.location.href = '/chat')} - className="px-12 py-7 text-lg rounded-full shadow-brand" + className="px-14 py-8 text-xl rounded-full shadow-brand hover:scale-110" > - Go to Dashboard + Dashboard )}
- {/* EN: Status / Context Area / VI: Khu vực trạng thái / ngữ cảnh */} -
- {isAuthenticated && user ? ( -
-
-
-
- {user.email?.[0].toUpperCase()} -
-
-
-

- {t('home.welcome', { email: user.email })} -

-
- - {user.role} -
-
-
- ) : ( -
-
-

- {t('home.pleaseLogin')} -

-
- )} -
- {/* EN: Feature Highlights / VI: Điểm nổi bật tính năng */} {!isAuthenticated && ( -
+
{[ { title: 'Fast Development', icon: Zap, desc: 'Build and deploy in minutes' }, { title: 'Enterprise Ready', icon: Building, desc: 'Production-grade platform' }, @@ -160,22 +135,48 @@ export default function Home() { ].map((feature, index) => (
-
- +
+
-

+

{feature.title}

-

+

{feature.desc}

))}
)} + + {/* EN: Status Section / VI: Khu vực trạng thái */} +
+ {isAuthenticated && user && ( +
+
+
+
+ {user.email?.[0].toUpperCase()} +
+
+
+

+ {t('home.welcome', { email: user.email })} +

+
+ + {user.role} +
+
+
+ )} +
diff --git a/apps/web-client/src/components/layout/navigation-header.tsx b/apps/web-client/src/components/layout/navigation-header.tsx index 2845e972..917634ec 100644 --- a/apps/web-client/src/components/layout/navigation-header.tsx +++ b/apps/web-client/src/components/layout/navigation-header.tsx @@ -55,8 +55,8 @@ export function NavigationHeader({ return (