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 (