@digilogiclabs/create-saas-app 1.13.0 → 1.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -36
- package/dist/.tsbuildinfo +1 -1
- package/dist/templates/web/ui-auth/template/src/app/globals.css +53 -0
- package/dist/templates/web/ui-auth/template/src/app/page.tsx +14 -1
- package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +40 -0
- package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +14 -1
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +53 -0
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +13 -3
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +18 -11
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +53 -0
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +23 -13
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +18 -11
- package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +40 -0
- package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +14 -1
- package/package.json +1 -1
- package/src/templates/web/ui-auth/template/src/app/globals.css +53 -0
- package/src/templates/web/ui-auth/template/src/app/page.tsx +14 -1
- package/src/templates/web/ui-auth-payments/template/src/app/globals.css +40 -0
- package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +14 -1
- package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +53 -0
- package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +13 -3
- package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +18 -11
- package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +53 -0
- package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +23 -13
- package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +18 -11
- package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +40 -0
- package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +14 -1
|
@@ -66,7 +66,20 @@ export default function Home() {
|
|
|
66
66
|
showOfflineIndicator={true}
|
|
67
67
|
backgroundSync={true}
|
|
68
68
|
>
|
|
69
|
-
<main className="min-h-screen
|
|
69
|
+
<main className="min-h-screen relative overflow-hidden bg-background">
|
|
70
|
+
{/* Theme-aware gradient background for authentication-focused app */}
|
|
71
|
+
<div className="absolute inset-0 bg-gradient-to-br from-primary/8 via-background to-secondary/8 dark:from-primary/15 dark:via-background dark:to-secondary/15" />
|
|
72
|
+
<div className="absolute inset-0 bg-gradient-to-tl from-accent/4 via-transparent to-primary/4 dark:from-accent/8 dark:via-transparent dark:to-primary/8" />
|
|
73
|
+
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_right,_var(--tw-gradient-stops))] from-primary/12 via-transparent to-transparent dark:from-primary/20 dark:via-transparent dark:to-transparent" />
|
|
74
|
+
{/* Animated auth-themed particles */}
|
|
75
|
+
<div className="absolute inset-0 opacity-20 dark:opacity-12">
|
|
76
|
+
<div className="absolute top-1/6 left-1/6 w-56 h-56 bg-primary/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/60"></div>
|
|
77
|
+
<div className="absolute bottom-1/5 right-1/4 w-72 h-72 bg-secondary/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-secondary/60"></div>
|
|
78
|
+
<div className="absolute top-1/2 right-1/6 w-48 h-48 bg-accent/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-accent/60"></div>
|
|
79
|
+
</div>
|
|
80
|
+
{/* Minimal depth overlay */}
|
|
81
|
+
<div className="absolute inset-0 bg-gradient-to-t from-transparent via-background/1 to-background/3" />
|
|
82
|
+
<div className="relative z-10">
|
|
70
83
|
<MobileContainer className="py-16">
|
|
71
84
|
{/* Auth Status Bar with Network Info */}
|
|
72
85
|
<div className="flex flex-col sm:flex-row justify-between items-center mb-8 gap-4">
|
|
@@ -169,3 +169,43 @@
|
|
|
169
169
|
.progressive-image.loaded {
|
|
170
170
|
filter: blur(0);
|
|
171
171
|
}
|
|
172
|
+
|
|
173
|
+
/* Additional custom animations for enhanced visual effects */
|
|
174
|
+
@keyframes slide-down {
|
|
175
|
+
from {
|
|
176
|
+
opacity: 0;
|
|
177
|
+
transform: translateY(-10px);
|
|
178
|
+
}
|
|
179
|
+
to {
|
|
180
|
+
opacity: 1;
|
|
181
|
+
transform: translateY(0);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@keyframes fade-in-up {
|
|
186
|
+
from {
|
|
187
|
+
opacity: 0;
|
|
188
|
+
transform: translateY(10px);
|
|
189
|
+
}
|
|
190
|
+
to {
|
|
191
|
+
opacity: 1;
|
|
192
|
+
transform: translateY(0);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.animate-slide-down {
|
|
197
|
+
animation: slide-down 0.6s ease-out;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.animate-fade-in-up {
|
|
201
|
+
animation: fade-in-up 0.6s ease-out;
|
|
202
|
+
animation-fill-mode: both;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.animation-delay-2000 {
|
|
206
|
+
animation-delay: 2s;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.animation-delay-4000 {
|
|
210
|
+
animation-delay: 4s;
|
|
211
|
+
}
|
|
@@ -84,7 +84,20 @@ export default function Home() {
|
|
|
84
84
|
hapticOnTrigger={true}
|
|
85
85
|
networkAware={true}
|
|
86
86
|
>
|
|
87
|
-
<main className="min-h-screen
|
|
87
|
+
<main className="min-h-screen relative overflow-hidden bg-background">
|
|
88
|
+
{/* Theme-aware gradient background for SaaS platform */}
|
|
89
|
+
<div className="absolute inset-0 bg-gradient-to-br from-primary/10 via-background to-secondary/10 dark:from-primary/20 dark:via-background dark:to-secondary/20" />
|
|
90
|
+
<div className="absolute inset-0 bg-gradient-to-tr from-accent/5 via-transparent to-primary/5 dark:from-accent/10 dark:via-transparent dark:to-primary/10" />
|
|
91
|
+
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-secondary/15 via-transparent to-transparent dark:from-secondary/25 dark:via-transparent dark:to-transparent" />
|
|
92
|
+
{/* Animated business-themed particles */}
|
|
93
|
+
<div className="absolute inset-0 opacity-25 dark:opacity-15">
|
|
94
|
+
<div className="absolute top-1/5 right-1/5 w-64 h-64 bg-primary/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/70"></div>
|
|
95
|
+
<div className="absolute bottom-1/3 left-1/4 w-80 h-80 bg-secondary/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-secondary/70"></div>
|
|
96
|
+
<div className="absolute top-2/3 right-1/3 w-56 h-56 bg-accent/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-accent/70"></div>
|
|
97
|
+
</div>
|
|
98
|
+
{/* Subtle depth overlay */}
|
|
99
|
+
<div className="absolute inset-0 bg-gradient-to-b from-transparent via-background/2 to-background/5" />
|
|
100
|
+
<div className="relative z-10">
|
|
88
101
|
<MobileContainer className="py-16">
|
|
89
102
|
{/* Network & Auth Status Bar */}
|
|
90
103
|
<div className="flex flex-col sm:flex-row justify-between items-center mb-8 gap-4">
|
|
@@ -41,3 +41,56 @@
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/* Custom animations for enhanced visual effects */
|
|
45
|
+
@keyframes slide-down {
|
|
46
|
+
from {
|
|
47
|
+
opacity: 0;
|
|
48
|
+
transform: translateY(-10px);
|
|
49
|
+
}
|
|
50
|
+
to {
|
|
51
|
+
opacity: 1;
|
|
52
|
+
transform: translateY(0);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@keyframes fade-in-up {
|
|
57
|
+
from {
|
|
58
|
+
opacity: 0;
|
|
59
|
+
transform: translateY(10px);
|
|
60
|
+
}
|
|
61
|
+
to {
|
|
62
|
+
opacity: 1;
|
|
63
|
+
transform: translateY(0);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@keyframes marquee {
|
|
68
|
+
0% {
|
|
69
|
+
transform: translateX(100%);
|
|
70
|
+
}
|
|
71
|
+
100% {
|
|
72
|
+
transform: translateX(-100%);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.animate-slide-down {
|
|
77
|
+
animation: slide-down 0.6s ease-out;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.animate-fade-in-up {
|
|
81
|
+
animation: fade-in-up 0.6s ease-out;
|
|
82
|
+
animation-fill-mode: both;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.animate-marquee {
|
|
86
|
+
animation: marquee 20s linear infinite;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.animation-delay-2000 {
|
|
90
|
+
animation-delay: 2s;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.animation-delay-4000 {
|
|
94
|
+
animation-delay: 4s;
|
|
95
|
+
}
|
|
96
|
+
|
|
@@ -208,9 +208,19 @@ export default function Home() {
|
|
|
208
208
|
hapticOnTrigger={true}
|
|
209
209
|
networkAware={true}
|
|
210
210
|
>
|
|
211
|
-
<main className=
|
|
212
|
-
{/*
|
|
213
|
-
<div className=
|
|
211
|
+
<main className="min-h-screen relative overflow-hidden bg-background">
|
|
212
|
+
{/* Theme-aware gradient background */}
|
|
213
|
+
<div className="absolute inset-0 bg-gradient-to-br from-primary/10 via-background to-secondary/10 dark:from-primary/20 dark:via-background dark:to-secondary/20" />
|
|
214
|
+
<div className="absolute inset-0 bg-gradient-to-tr from-accent/5 via-transparent to-primary/5 dark:from-accent/10 dark:via-transparent dark:to-primary/10" />
|
|
215
|
+
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-primary/15 via-transparent to-transparent dark:from-primary/25 dark:via-transparent dark:to-transparent" />
|
|
216
|
+
{/* Animated background particles - theme aware */}
|
|
217
|
+
<div className="absolute inset-0 opacity-30 dark:opacity-20">
|
|
218
|
+
<div className="absolute top-1/4 left-1/4 w-72 h-72 bg-primary/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/60"></div>
|
|
219
|
+
<div className="absolute top-3/4 right-1/4 w-72 h-72 bg-secondary/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-secondary/60"></div>
|
|
220
|
+
<div className="absolute top-1/2 left-1/2 w-72 h-72 bg-accent/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-accent/60"></div>
|
|
221
|
+
</div>
|
|
222
|
+
{/* Subtle overlay for depth */}
|
|
223
|
+
<div className="absolute inset-0 bg-gradient-to-b from-transparent via-background/5 to-background/20" />
|
|
214
224
|
<div className="relative z-10">
|
|
215
225
|
<MobileContainer className="py-8">
|
|
216
226
|
{/* AI Configuration Status */}
|
|
@@ -124,26 +124,33 @@ export function Header() {
|
|
|
124
124
|
</div>
|
|
125
125
|
)}
|
|
126
126
|
|
|
127
|
-
{/* Responsive Header */}
|
|
128
|
-
<header className="bg-
|
|
129
|
-
<div className="
|
|
127
|
+
{/* Responsive Header with theme-aware gradient */}
|
|
128
|
+
<header className="bg-background/90 backdrop-blur-md shadow-lg border-b border-border/20 transition-all duration-300 animate-slide-down">
|
|
129
|
+
<div className="absolute inset-0 bg-gradient-to-r from-primary/10 via-transparent to-secondary/10"></div>
|
|
130
|
+
<div className="container mx-auto px-4 relative">
|
|
130
131
|
<div className="flex justify-between items-center h-16">
|
|
131
|
-
{/* Logo */}
|
|
132
|
-
<Link href="/" className="text-2xl font-bold text-
|
|
133
|
-
<Music className="w-6 h-6" />
|
|
134
|
-
|
|
132
|
+
{/* Logo with animation */}
|
|
133
|
+
<Link href="/" className="text-2xl font-bold text-foreground flex items-center gap-2 transition-all duration-300 hover:scale-105">
|
|
134
|
+
<Music className="w-6 h-6 transition-transform duration-300 hover:rotate-12 text-primary" />
|
|
135
|
+
<span className="bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent transition-all duration-300">
|
|
136
|
+
{projectName}
|
|
137
|
+
</span>
|
|
135
138
|
</Link>
|
|
136
139
|
|
|
137
140
|
{/* Desktop Navigation */}
|
|
138
141
|
<nav className="hidden md:flex items-center gap-6">
|
|
139
|
-
{visibleNavItems.map((item) => (
|
|
142
|
+
{visibleNavItems.map((item, index) => (
|
|
140
143
|
<Link
|
|
141
144
|
key={item.href}
|
|
142
145
|
href={item.href}
|
|
143
|
-
className="flex items-center gap-2 text-
|
|
146
|
+
className="group flex items-center gap-2 text-muted-foreground hover:text-primary transition-all duration-300 relative px-3 py-2 rounded-lg hover:bg-gradient-to-r hover:from-primary/10 hover:to-secondary/10 animate-fade-in-up"
|
|
147
|
+
style={{ animationDelay: (index * 100) + 'ms' }}
|
|
144
148
|
>
|
|
145
|
-
<item.icon className="w-4 h-4" />
|
|
146
|
-
|
|
149
|
+
<item.icon className="w-4 h-4 transition-transform duration-300 group-hover:scale-110 group-hover:rotate-3" />
|
|
150
|
+
<span className="relative">
|
|
151
|
+
{item.label}
|
|
152
|
+
<span className="absolute -bottom-1 left-0 h-0.5 w-0 bg-gradient-to-r from-primary to-secondary transition-all duration-300 group-hover:w-full"></span>
|
|
153
|
+
</span>
|
|
147
154
|
</Link>
|
|
148
155
|
))}
|
|
149
156
|
|
|
@@ -41,3 +41,56 @@
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/* Custom animations for enhanced visual effects */
|
|
45
|
+
@keyframes slide-down {
|
|
46
|
+
from {
|
|
47
|
+
opacity: 0;
|
|
48
|
+
transform: translateY(-10px);
|
|
49
|
+
}
|
|
50
|
+
to {
|
|
51
|
+
opacity: 1;
|
|
52
|
+
transform: translateY(0);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@keyframes fade-in-up {
|
|
57
|
+
from {
|
|
58
|
+
opacity: 0;
|
|
59
|
+
transform: translateY(10px);
|
|
60
|
+
}
|
|
61
|
+
to {
|
|
62
|
+
opacity: 1;
|
|
63
|
+
transform: translateY(0);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@keyframes marquee {
|
|
68
|
+
0% {
|
|
69
|
+
transform: translateX(100%);
|
|
70
|
+
}
|
|
71
|
+
100% {
|
|
72
|
+
transform: translateX(-100%);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.animate-slide-down {
|
|
77
|
+
animation: slide-down 0.6s ease-out;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.animate-fade-in-up {
|
|
81
|
+
animation: fade-in-up 0.6s ease-out;
|
|
82
|
+
animation-fill-mode: both;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.animate-marquee {
|
|
86
|
+
animation: marquee 20s linear infinite;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.animation-delay-2000 {
|
|
90
|
+
animation-delay: 2s;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.animation-delay-4000 {
|
|
94
|
+
animation-delay: 4s;
|
|
95
|
+
}
|
|
96
|
+
|
|
@@ -159,9 +159,19 @@ export default function Home() {
|
|
|
159
159
|
hapticOnTrigger={true}
|
|
160
160
|
networkAware={true}
|
|
161
161
|
>
|
|
162
|
-
<main className=
|
|
163
|
-
{/*
|
|
164
|
-
<div className=
|
|
162
|
+
<main className="min-h-screen relative overflow-hidden bg-background">
|
|
163
|
+
{/* Theme-aware gradient background for audio streaming */}
|
|
164
|
+
<div className="absolute inset-0 bg-gradient-to-br from-primary/15 via-background to-accent/15 dark:from-primary/25 dark:via-background dark:to-accent/25" />
|
|
165
|
+
<div className="absolute inset-0 bg-gradient-to-tr from-secondary/10 via-transparent to-primary/10 dark:from-secondary/15 dark:via-transparent dark:to-primary/15" />
|
|
166
|
+
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_left,_var(--tw-gradient-stops))] from-accent/20 via-transparent to-transparent dark:from-accent/30 dark:via-transparent dark:to-transparent" />
|
|
167
|
+
{/* Animated music-themed particles */}
|
|
168
|
+
<div className="absolute inset-0 opacity-25 dark:opacity-15">
|
|
169
|
+
<div className="absolute top-1/3 left-1/6 w-64 h-64 bg-primary/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/70"></div>
|
|
170
|
+
<div className="absolute top-2/3 right-1/5 w-80 h-80 bg-accent/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-accent/70"></div>
|
|
171
|
+
<div className="absolute top-1/5 right-1/3 w-56 h-56 bg-secondary/50 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-secondary/70"></div>
|
|
172
|
+
</div>
|
|
173
|
+
{/* Audio wave overlay */}
|
|
174
|
+
<div className="absolute inset-0 bg-gradient-to-t from-transparent via-primary/5 to-transparent opacity-60" />
|
|
165
175
|
<div className="relative z-10">
|
|
166
176
|
<MobileContainer className="py-8">
|
|
167
177
|
{/* Simple Auth Status */}
|
|
@@ -232,7 +242,7 @@ export default function Home() {
|
|
|
232
242
|
{/* Main Content */}
|
|
233
243
|
<div className="lg:col-span-3 space-y-8">
|
|
234
244
|
{/* Now Playing Card with Enhanced Glassmorphism */}
|
|
235
|
-
<div className={glass.card + " " + glass.border + " rounded-3xl p-6 mb-8 " + animations.hover.lift + " " + animations.transition.smooth}>
|
|
245
|
+
<div className={glass.card + " " + glass.border + " rounded-3xl p-6 mb-8 " + animations.hover.lift + " " + animations.transition.smooth}>
|
|
236
246
|
<NowPlayingCard
|
|
237
247
|
track={currentTrack || demoPlaylist[0]}
|
|
238
248
|
isPlaying={isPlaying}
|
|
@@ -244,7 +254,7 @@ export default function Home() {
|
|
|
244
254
|
|
|
245
255
|
{/* Featured Playlists with Staggered Animation */}
|
|
246
256
|
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 mb-8">
|
|
247
|
-
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.short}>
|
|
257
|
+
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.short}>
|
|
248
258
|
<PlaylistCard
|
|
249
259
|
title="Today's Top Hits"
|
|
250
260
|
description="The most played songs today"
|
|
@@ -254,7 +264,7 @@ export default function Home() {
|
|
|
254
264
|
className="bg-transparent border-none"
|
|
255
265
|
/>
|
|
256
266
|
</div>
|
|
257
|
-
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.medium}>
|
|
267
|
+
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.medium}>
|
|
258
268
|
<PlaylistCard
|
|
259
269
|
title="Chill Vibes"
|
|
260
270
|
description="Relaxing music for focus and creativity"
|
|
@@ -264,7 +274,7 @@ export default function Home() {
|
|
|
264
274
|
className="bg-transparent border-none"
|
|
265
275
|
/>
|
|
266
276
|
</div>
|
|
267
|
-
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.long}>
|
|
277
|
+
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.long}>
|
|
268
278
|
<PlaylistCard
|
|
269
279
|
title="Electronic Pulse"
|
|
270
280
|
description="High-energy electronic and dance music"
|
|
@@ -277,7 +287,7 @@ export default function Home() {
|
|
|
277
287
|
</div>
|
|
278
288
|
|
|
279
289
|
{/* Track List with Glassmorphism */}
|
|
280
|
-
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.transition.smooth}>
|
|
290
|
+
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.transition.smooth}>
|
|
281
291
|
<TrackList
|
|
282
292
|
tracks={demoPlaylist}
|
|
283
293
|
currentTrackId={currentTrack?.id}
|
|
@@ -296,7 +306,7 @@ export default function Home() {
|
|
|
296
306
|
|
|
297
307
|
{/* Sidebar with Glassmorphism */}
|
|
298
308
|
<div className="lg:col-span-1">
|
|
299
|
-
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.hover.lift + " " + animations.transition.smooth}>
|
|
309
|
+
<div className={glass.card + " " + glass.border + " rounded-2xl overflow-hidden " + animations.hover.lift + " " + animations.transition.smooth}>
|
|
300
310
|
<PlaylistSidebar
|
|
301
311
|
playlists={[
|
|
302
312
|
{ id: '1', name: 'Liked Songs', trackCount: 47 },
|
|
@@ -314,7 +324,7 @@ export default function Home() {
|
|
|
314
324
|
|
|
315
325
|
{/* Features Overview with Enhanced Glassmorphism */}
|
|
316
326
|
<ResponsiveGrid columns={gridConfig.columns_1_sm2_md4} gap="lg" className="mb-16">
|
|
317
|
-
<div className={glass.card + " " + glass.border + " text-center p-6 rounded-2xl " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.short}>
|
|
327
|
+
<div className={glass.card + " " + glass.border + " text-center p-6 rounded-2xl " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.short}>
|
|
318
328
|
<div className={"mx-auto w-12 h-12" + " " + glass.accent + " " + "rounded-xl flex items-center justify-center mb-4" + " " + animations.hover.glow}>
|
|
319
329
|
<Zap className="h-6 w-6 text-blue-400" />
|
|
320
330
|
</div>
|
|
@@ -324,7 +334,7 @@ export default function Home() {
|
|
|
324
334
|
</p>
|
|
325
335
|
</div>
|
|
326
336
|
|
|
327
|
-
<div className={glass.card + " " + glass.border + " text-center p-6 rounded-2xl " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.medium}>
|
|
337
|
+
<div className={glass.card + " " + glass.border + " text-center p-6 rounded-2xl " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.medium}>
|
|
328
338
|
<div className={"mx-auto w-12 h-12" + " " + glass.accent + " " + "rounded-xl flex items-center justify-center mb-4" + " " + animations.hover.glow}>
|
|
329
339
|
<Shield className="h-6 w-6 text-green-400" />
|
|
330
340
|
</div>
|
|
@@ -334,7 +344,7 @@ export default function Home() {
|
|
|
334
344
|
</p>
|
|
335
345
|
</div>
|
|
336
346
|
|
|
337
|
-
<div className={glass.card + " " + glass.border + " text-center p-6 rounded-2xl " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.long}>
|
|
347
|
+
<div className={glass.card + " " + glass.border + " text-center p-6 rounded-2xl " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.long}>
|
|
338
348
|
<div className={"mx-auto w-12 h-12" + " " + glass.accent + " " + "rounded-xl flex items-center justify-center mb-4" + " " + animations.hover.glow}>
|
|
339
349
|
<Rocket className="h-6 w-6 text-purple-400" />
|
|
340
350
|
</div>
|
|
@@ -344,7 +354,7 @@ export default function Home() {
|
|
|
344
354
|
</p>
|
|
345
355
|
</div>
|
|
346
356
|
|
|
347
|
-
<div className={glass.card + " " + glass.border + " text-center p-6 rounded-2xl " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.extra}>
|
|
357
|
+
<div className={glass.card + " " + glass.border + " text-center p-6 rounded-2xl " + animations.hover.scale + " " + animations.transition.smooth + " " + animations.delay.extra}>
|
|
348
358
|
<div className={"mx-auto w-12 h-12" + " " + glass.accent + " " + "rounded-xl flex items-center justify-center mb-4" + " " + animations.hover.glow}>
|
|
349
359
|
<svg className="h-6 w-6 text-orange-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
350
360
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />
|
|
@@ -124,26 +124,33 @@ export function Header() {
|
|
|
124
124
|
</div>
|
|
125
125
|
)}
|
|
126
126
|
|
|
127
|
-
{/* Responsive Header */}
|
|
128
|
-
<header className="bg-
|
|
129
|
-
<div className="
|
|
127
|
+
{/* Responsive Header with theme-aware gradient */}
|
|
128
|
+
<header className="bg-background/90 backdrop-blur-md shadow-lg border-b border-border/20 transition-all duration-300 animate-slide-down">
|
|
129
|
+
<div className="absolute inset-0 bg-gradient-to-r from-primary/10 via-transparent to-accent/10"></div>
|
|
130
|
+
<div className="container mx-auto px-4 relative">
|
|
130
131
|
<div className="flex justify-between items-center h-16">
|
|
131
|
-
{/* Logo */}
|
|
132
|
-
<Link href="/" className="text-2xl font-bold text-
|
|
133
|
-
<Music className="w-6 h-6" />
|
|
134
|
-
|
|
132
|
+
{/* Logo with animation */}
|
|
133
|
+
<Link href="/" className="text-2xl font-bold text-foreground flex items-center gap-2 transition-all duration-300 hover:scale-105">
|
|
134
|
+
<Music className="w-6 h-6 transition-transform duration-300 hover:rotate-12 text-primary" />
|
|
135
|
+
<span className="bg-gradient-to-r from-primary to-accent bg-clip-text text-transparent transition-all duration-300">
|
|
136
|
+
{projectName}
|
|
137
|
+
</span>
|
|
135
138
|
</Link>
|
|
136
139
|
|
|
137
140
|
{/* Desktop Navigation */}
|
|
138
141
|
<nav className="hidden md:flex items-center gap-6">
|
|
139
|
-
{visibleNavItems.map((item) => (
|
|
142
|
+
{visibleNavItems.map((item, index) => (
|
|
140
143
|
<Link
|
|
141
144
|
key={item.href}
|
|
142
145
|
href={item.href}
|
|
143
|
-
className="flex items-center gap-2 text-
|
|
146
|
+
className="group flex items-center gap-2 text-muted-foreground hover:text-primary transition-all duration-300 relative px-3 py-2 rounded-lg hover:bg-gradient-to-r hover:from-primary/10 hover:to-accent/10 animate-fade-in-up"
|
|
147
|
+
style={{ animationDelay: (index * 100) + 'ms' }}
|
|
144
148
|
>
|
|
145
|
-
<item.icon className="w-4 h-4" />
|
|
146
|
-
|
|
149
|
+
<item.icon className="w-4 h-4 transition-transform duration-300 group-hover:scale-110 group-hover:rotate-3" />
|
|
150
|
+
<span className="relative">
|
|
151
|
+
{item.label}
|
|
152
|
+
<span className="absolute -bottom-1 left-0 h-0.5 w-0 bg-gradient-to-r from-primary to-accent transition-all duration-300 group-hover:w-full"></span>
|
|
153
|
+
</span>
|
|
147
154
|
</Link>
|
|
148
155
|
))}
|
|
149
156
|
|
|
@@ -186,3 +186,43 @@
|
|
|
186
186
|
.progressive-image.loaded {
|
|
187
187
|
filter: blur(0);
|
|
188
188
|
}
|
|
189
|
+
|
|
190
|
+
/* Additional custom animations for enhanced visual effects */
|
|
191
|
+
@keyframes slide-down {
|
|
192
|
+
from {
|
|
193
|
+
opacity: 0;
|
|
194
|
+
transform: translateY(-10px);
|
|
195
|
+
}
|
|
196
|
+
to {
|
|
197
|
+
opacity: 1;
|
|
198
|
+
transform: translateY(0);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
@keyframes fade-in-up {
|
|
203
|
+
from {
|
|
204
|
+
opacity: 0;
|
|
205
|
+
transform: translateY(10px);
|
|
206
|
+
}
|
|
207
|
+
to {
|
|
208
|
+
opacity: 1;
|
|
209
|
+
transform: translateY(0);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.animate-slide-down {
|
|
214
|
+
animation: slide-down 0.6s ease-out;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.animate-fade-in-up {
|
|
218
|
+
animation: fade-in-up 0.6s ease-out;
|
|
219
|
+
animation-fill-mode: both;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.animation-delay-2000 {
|
|
223
|
+
animation-delay: 2s;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.animation-delay-4000 {
|
|
227
|
+
animation-delay: 4s;
|
|
228
|
+
}
|
|
@@ -85,7 +85,20 @@ export default function Home() {
|
|
|
85
85
|
hapticOnTrigger={true}
|
|
86
86
|
networkAware={true}
|
|
87
87
|
>
|
|
88
|
-
<main className="min-h-screen
|
|
88
|
+
<main className="min-h-screen relative overflow-hidden bg-background">
|
|
89
|
+
{/* Theme-aware gradient background for video streaming */}
|
|
90
|
+
<div className="absolute inset-0 bg-gradient-to-br from-primary/15 via-background to-secondary/15 dark:from-primary/25 dark:via-background dark:to-secondary/25" />
|
|
91
|
+
<div className="absolute inset-0 bg-gradient-to-tl from-accent/10 via-transparent to-secondary/10 dark:from-accent/15 dark:via-transparent dark:to-secondary/15" />
|
|
92
|
+
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_center_top,_var(--tw-gradient-stops))] from-primary/20 via-transparent to-transparent dark:from-primary/30 dark:via-transparent dark:to-transparent" />
|
|
93
|
+
{/* Animated video-themed particles */}
|
|
94
|
+
<div className="absolute inset-0 opacity-20 dark:opacity-10">
|
|
95
|
+
<div className="absolute top-1/4 right-1/4 w-72 h-72 bg-primary/60 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/80"></div>
|
|
96
|
+
<div className="absolute bottom-1/4 left-1/3 w-96 h-96 bg-secondary/60 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-secondary/80"></div>
|
|
97
|
+
<div className="absolute top-1/2 left-1/5 w-64 h-64 bg-accent/60 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-accent/80"></div>
|
|
98
|
+
</div>
|
|
99
|
+
{/* Video player overlay effect */}
|
|
100
|
+
<div className="absolute inset-0 bg-gradient-to-b from-transparent via-background/3 to-background/10" />
|
|
101
|
+
<div className="relative z-10">
|
|
89
102
|
<MobileContainer className="py-16">
|
|
90
103
|
{/* Auth Status Bar */}
|
|
91
104
|
<div className="flex justify-end mb-8">
|
package/package.json
CHANGED
|
@@ -40,3 +40,56 @@
|
|
|
40
40
|
@apply bg-background text-foreground;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
/* Custom animations for enhanced visual effects */
|
|
45
|
+
@keyframes slide-down {
|
|
46
|
+
from {
|
|
47
|
+
opacity: 0;
|
|
48
|
+
transform: translateY(-10px);
|
|
49
|
+
}
|
|
50
|
+
to {
|
|
51
|
+
opacity: 1;
|
|
52
|
+
transform: translateY(0);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@keyframes fade-in-up {
|
|
57
|
+
from {
|
|
58
|
+
opacity: 0;
|
|
59
|
+
transform: translateY(10px);
|
|
60
|
+
}
|
|
61
|
+
to {
|
|
62
|
+
opacity: 1;
|
|
63
|
+
transform: translateY(0);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@keyframes marquee {
|
|
68
|
+
0% {
|
|
69
|
+
transform: translateX(100%);
|
|
70
|
+
}
|
|
71
|
+
100% {
|
|
72
|
+
transform: translateX(-100%);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.animate-slide-down {
|
|
77
|
+
animation: slide-down 0.6s ease-out;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.animate-fade-in-up {
|
|
81
|
+
animation: fade-in-up 0.6s ease-out;
|
|
82
|
+
animation-fill-mode: both;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.animate-marquee {
|
|
86
|
+
animation: marquee 20s linear infinite;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.animation-delay-2000 {
|
|
90
|
+
animation-delay: 2s;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.animation-delay-4000 {
|
|
94
|
+
animation-delay: 4s;
|
|
95
|
+
}
|
|
@@ -66,7 +66,20 @@ export default function Home() {
|
|
|
66
66
|
showOfflineIndicator={true}
|
|
67
67
|
backgroundSync={true}
|
|
68
68
|
>
|
|
69
|
-
<main className="min-h-screen
|
|
69
|
+
<main className="min-h-screen relative overflow-hidden bg-background">
|
|
70
|
+
{/* Theme-aware gradient background for authentication-focused app */}
|
|
71
|
+
<div className="absolute inset-0 bg-gradient-to-br from-primary/8 via-background to-secondary/8 dark:from-primary/15 dark:via-background dark:to-secondary/15" />
|
|
72
|
+
<div className="absolute inset-0 bg-gradient-to-tl from-accent/4 via-transparent to-primary/4 dark:from-accent/8 dark:via-transparent dark:to-primary/8" />
|
|
73
|
+
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_bottom_right,_var(--tw-gradient-stops))] from-primary/12 via-transparent to-transparent dark:from-primary/20 dark:via-transparent dark:to-transparent" />
|
|
74
|
+
{/* Animated auth-themed particles */}
|
|
75
|
+
<div className="absolute inset-0 opacity-20 dark:opacity-12">
|
|
76
|
+
<div className="absolute top-1/6 left-1/6 w-56 h-56 bg-primary/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/60"></div>
|
|
77
|
+
<div className="absolute bottom-1/5 right-1/4 w-72 h-72 bg-secondary/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-secondary/60"></div>
|
|
78
|
+
<div className="absolute top-1/2 right-1/6 w-48 h-48 bg-accent/40 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-accent/60"></div>
|
|
79
|
+
</div>
|
|
80
|
+
{/* Minimal depth overlay */}
|
|
81
|
+
<div className="absolute inset-0 bg-gradient-to-t from-transparent via-background/1 to-background/3" />
|
|
82
|
+
<div className="relative z-10">
|
|
70
83
|
<MobileContainer className="py-16">
|
|
71
84
|
{/* Auth Status Bar with Network Info */}
|
|
72
85
|
<div className="flex flex-col sm:flex-row justify-between items-center mb-8 gap-4">
|
|
@@ -169,3 +169,43 @@
|
|
|
169
169
|
.progressive-image.loaded {
|
|
170
170
|
filter: blur(0);
|
|
171
171
|
}
|
|
172
|
+
|
|
173
|
+
/* Additional custom animations for enhanced visual effects */
|
|
174
|
+
@keyframes slide-down {
|
|
175
|
+
from {
|
|
176
|
+
opacity: 0;
|
|
177
|
+
transform: translateY(-10px);
|
|
178
|
+
}
|
|
179
|
+
to {
|
|
180
|
+
opacity: 1;
|
|
181
|
+
transform: translateY(0);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@keyframes fade-in-up {
|
|
186
|
+
from {
|
|
187
|
+
opacity: 0;
|
|
188
|
+
transform: translateY(10px);
|
|
189
|
+
}
|
|
190
|
+
to {
|
|
191
|
+
opacity: 1;
|
|
192
|
+
transform: translateY(0);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.animate-slide-down {
|
|
197
|
+
animation: slide-down 0.6s ease-out;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.animate-fade-in-up {
|
|
201
|
+
animation: fade-in-up 0.6s ease-out;
|
|
202
|
+
animation-fill-mode: both;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.animation-delay-2000 {
|
|
206
|
+
animation-delay: 2s;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.animation-delay-4000 {
|
|
210
|
+
animation-delay: 4s;
|
|
211
|
+
}
|