@decido/ui 0.0.0

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.
Files changed (95) hide show
  1. package/.eslintrc.cjs +10 -0
  2. package/.turbo/turbo-build.log +13 -0
  3. package/.turbo/turbo-lint.log +54 -0
  4. package/dist/components/DebugPanel.d.ts +3 -0
  5. package/dist/components/DebugPanel.js +195 -0
  6. package/dist/components/DebugPanelManager.d.ts +3 -0
  7. package/dist/components/DebugPanelManager.js +20 -0
  8. package/dist/components/DecidoButton.d.ts +11 -0
  9. package/dist/components/DecidoButton.js +15 -0
  10. package/dist/components/LoginView.d.ts +6 -0
  11. package/dist/components/LoginView.js +36 -0
  12. package/dist/components/WelcomeView.d.ts +6 -0
  13. package/dist/components/WelcomeView.js +16 -0
  14. package/dist/components/base/BaseComponent.d.ts +12 -0
  15. package/dist/components/base/BaseComponent.js +43 -0
  16. package/dist/components/base/BaseComponentBacjup.d.ts +12 -0
  17. package/dist/components/base/BaseComponentBacjup.js +43 -0
  18. package/dist/components/base/BaseComponentLit.d.ts +9 -0
  19. package/dist/components/base/BaseComponentLit.js +30 -0
  20. package/dist/components/base/shared-styles.d.ts +4 -0
  21. package/dist/components/base/shared-styles.js +18 -0
  22. package/dist/components/index.d.ts +6 -0
  23. package/dist/components/index.js +7 -0
  24. package/dist/components/landing/index.d.ts +11 -0
  25. package/dist/components/landing/index.js +11 -0
  26. package/dist/components/landing/landing-button.d.ts +9 -0
  27. package/dist/components/landing/landing-button.js +5 -0
  28. package/dist/components/landing/landing-card.d.ts +6 -0
  29. package/dist/components/landing/landing-card.js +5 -0
  30. package/dist/components/landing/landing-cta.d.ts +10 -0
  31. package/dist/components/landing/landing-cta.js +5 -0
  32. package/dist/components/landing/landing-feature-card.d.ts +35 -0
  33. package/dist/components/landing/landing-feature-card.js +35 -0
  34. package/dist/components/landing/landing-footer.d.ts +18 -0
  35. package/dist/components/landing/landing-footer.js +7 -0
  36. package/dist/components/landing/landing-header.d.ts +21 -0
  37. package/dist/components/landing/landing-header.js +7 -0
  38. package/dist/components/landing/landing-hero.d.ts +22 -0
  39. package/dist/components/landing/landing-hero.js +10 -0
  40. package/dist/components/landing/landing-page.d.ts +3 -0
  41. package/dist/components/landing/landing-page.js +34 -0
  42. package/dist/components/landing/landing-section.d.ts +14 -0
  43. package/dist/components/landing/landing-section.js +8 -0
  44. package/dist/components/landing/landing-testimonial-card.d.ts +11 -0
  45. package/dist/components/landing/landing-testimonial-card.js +9 -0
  46. package/dist/components/landing/landing-waitlist.d.ts +27 -0
  47. package/dist/components/landing/landing-waitlist.js +18 -0
  48. package/dist/components/theming/ColorPicker.d.ts +8 -0
  49. package/dist/components/theming/ColorPicker.js +19 -0
  50. package/dist/components/theming/ThemePanel.d.ts +5 -0
  51. package/dist/components/theming/ThemePanel.js +12 -0
  52. package/dist/index.d.ts +13 -0
  53. package/dist/index.js +19 -0
  54. package/dist/utils/counter.d.ts +1 -0
  55. package/dist/utils/counter.js +9 -0
  56. package/eslint.config.js +11 -0
  57. package/package.json +47 -0
  58. package/src/components/DebugPanel.tsx +347 -0
  59. package/src/components/DebugPanelManager.tsx +40 -0
  60. package/src/components/DecidoButton.tsx +43 -0
  61. package/src/components/LoginView.tsx +85 -0
  62. package/src/components/WelcomeView.tsx +47 -0
  63. package/src/components/base/landing.css +477 -0
  64. package/src/components/base/shared-styles.ts +21 -0
  65. package/src/components/index.ts +7 -0
  66. package/src/components/landing/index.tsx +11 -0
  67. package/src/components/landing/landing-button.tsx +26 -0
  68. package/src/components/landing/landing-card.tsx +15 -0
  69. package/src/components/landing/landing-cta.tsx +42 -0
  70. package/src/components/landing/landing-feature-card.tsx +149 -0
  71. package/src/components/landing/landing-footer.tsx +66 -0
  72. package/src/components/landing/landing-header.tsx +55 -0
  73. package/src/components/landing/landing-hero.tsx +94 -0
  74. package/src/components/landing/landing-page.tsx +143 -0
  75. package/src/components/landing/landing-section.tsx +42 -0
  76. package/src/components/landing/landing-testimonial-card.tsx +50 -0
  77. package/src/components/landing/landing-waitlist.tsx +115 -0
  78. package/src/components/theming/ColorPicker.tsx +40 -0
  79. package/src/components/theming/ThemePanel.tsx +43 -0
  80. package/src/css/base.css +483 -0
  81. package/src/css/components.css +309 -0
  82. package/src/css/debug-panel.css +1368 -0
  83. package/src/css/layout.css +289 -0
  84. package/src/css/login-view.css +45 -0
  85. package/src/css/style.css +20 -0
  86. package/src/css/welcome-view.css +56 -0
  87. package/src/css/workbench.css +383 -0
  88. package/src/globals.d.ts +8 -0
  89. package/src/index.ts +24 -0
  90. package/src/utils/counter.d.ts.map +1 -0
  91. package/src/utils/counter.js +9 -0
  92. package/src/utils/counter.ts +9 -0
  93. package/src/vite-env.d.ts +1 -0
  94. package/tailwind.config.js +7 -0
  95. package/tsconfig.json +35 -0
@@ -0,0 +1,477 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ :root {
6
+ --primary: #8B5CF6;
7
+ --secondary: #06B6D4;
8
+ --accent: #F59E0B;
9
+ --success: #10B981;
10
+ --danger: #EF4444;
11
+ --dark: #0F0F23;
12
+ --darker: #070720;
13
+ --glass: rgba(255, 255, 255, 0.05);
14
+ --glass-border: rgba(255, 255, 255, 0.1);
15
+ }
16
+
17
+ * {
18
+ font-family: 'Inter', sans-serif;
19
+ scroll-behavior: smooth;
20
+ }
21
+
22
+ body {
23
+ background: var(--darker);
24
+ overflow-x: hidden;
25
+ -webkit-font-smoothing: antialiased;
26
+ -moz-osx-font-smoothing: grayscale;
27
+ }
28
+
29
+ /* Premium Glass Effects */
30
+ .glass {
31
+ background: rgba(255, 255, 255, 0.03);
32
+ backdrop-filter: blur(20px);
33
+ border: 1px solid rgba(255, 255, 255, 0.05);
34
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
35
+ }
36
+
37
+ .glass-strong {
38
+ background: rgba(255, 255, 255, 0.08);
39
+ backdrop-filter: blur(30px);
40
+ border: 1px solid rgba(255, 255, 255, 0.15);
41
+ box-shadow: 0 16px 64px rgba(0, 0, 0, 0.4);
42
+ }
43
+
44
+ .glass-premium {
45
+ background: linear-gradient(135deg,
46
+ rgba(255, 255, 255, 0.1) 0%,
47
+ rgba(255, 255, 255, 0.05) 100%);
48
+ backdrop-filter: blur(40px);
49
+ border: 1px solid rgba(255, 255, 255, 0.2);
50
+ box-shadow:
51
+ 0 24px 80px rgba(0, 0, 0, 0.5),
52
+ inset 0 1px 0 rgba(255, 255, 255, 0.1);
53
+ }
54
+
55
+ /* Advanced Gradients */
56
+ .gradient-text {
57
+ background: linear-gradient(135deg,
58
+ #8B5CF6 0%,
59
+ #06B6D4 25%,
60
+ #F59E0B 50%,
61
+ #EF4444 75%,
62
+ #8B5CF6 100%);
63
+ background-size: 400% 400%;
64
+ -webkit-background-clip: text;
65
+ -webkit-text-fill-color: transparent;
66
+ background-clip: text;
67
+ animation: gradient 8s ease infinite;
68
+ }
69
+
70
+ .hero-bg {
71
+ background:
72
+ radial-gradient(circle at 20% 80%, rgba(139, 92, 246, 0.4) 0%, transparent 60%),
73
+ radial-gradient(circle at 80% 20%, rgba(6, 182, 212, 0.4) 0%, transparent 60%),
74
+ radial-gradient(circle at 40% 40%, rgba(245, 158, 11, 0.3) 0%, transparent 60%),
75
+ radial-gradient(circle at 90% 80%, rgba(239, 68, 68, 0.3) 0%, transparent 60%),
76
+ linear-gradient(135deg, #070720 0%, #0F0F23 50%, #070720 100%);
77
+ background-size: 200% 200%;
78
+ animation: gradient 20s ease infinite;
79
+ }
80
+
81
+ /* Keyframe Animations */
82
+ @keyframes gradient {
83
+
84
+ 0%,
85
+ 100% {
86
+ background-position: 0% 50%;
87
+ }
88
+
89
+ 50% {
90
+ background-position: 100% 50%;
91
+ }
92
+ }
93
+
94
+ @keyframes float {
95
+
96
+ 0%,
97
+ 100% {
98
+ transform: translateY(0px) rotate(0deg);
99
+ }
100
+
101
+ 33% {
102
+ transform: translateY(-20px) rotate(2deg);
103
+ }
104
+
105
+ 66% {
106
+ transform: translateY(-10px) rotate(-1deg);
107
+ }
108
+ }
109
+
110
+ @keyframes pulse-glow {
111
+
112
+ 0%,
113
+ 100% {
114
+ box-shadow: 0 0 20px rgba(139, 92, 246, 0.4),
115
+ 0 0 40px rgba(139, 92, 246, 0.2),
116
+ 0 0 60px rgba(139, 92, 246, 0.1);
117
+ }
118
+
119
+ 50% {
120
+ box-shadow: 0 0 40px rgba(139, 92, 246, 0.6),
121
+ 0 0 60px rgba(139, 92, 246, 0.4),
122
+ 0 0 80px rgba(139, 92, 246, 0.2);
123
+ }
124
+ }
125
+
126
+ @keyframes slide-up {
127
+ from {
128
+ opacity: 0;
129
+ transform: translateY(40px);
130
+ }
131
+
132
+ to {
133
+ opacity: 1;
134
+ transform: translateY(0);
135
+ }
136
+ }
137
+
138
+ @keyframes fade-in {
139
+ from {
140
+ opacity: 0;
141
+ }
142
+
143
+ to {
144
+ opacity: 1;
145
+ }
146
+ }
147
+
148
+ @keyframes scale-in {
149
+ from {
150
+ opacity: 0;
151
+ transform: scale(0.9);
152
+ }
153
+
154
+ to {
155
+ opacity: 1;
156
+ transform: scale(1);
157
+ }
158
+ }
159
+
160
+ @keyframes typing {
161
+ from {
162
+ width: 0;
163
+ }
164
+
165
+ to {
166
+ width: 100%;
167
+ }
168
+ }
169
+
170
+ @keyframes blink-caret {
171
+
172
+ from,
173
+ to {
174
+ border-color: transparent;
175
+ }
176
+
177
+ 50% {
178
+ border-color: #8B5CF6;
179
+ }
180
+ }
181
+
182
+ /* Premium Buttons */
183
+ .btn-premium {
184
+ position: relative;
185
+ background: linear-gradient(135deg, #8B5CF6 0%, #06B6D4 100%);
186
+ border: none;
187
+ overflow: hidden;
188
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
189
+ transform-style: preserve-3d;
190
+ }
191
+
192
+ .btn-premium::before {
193
+ content: '';
194
+ position: absolute;
195
+ top: 0;
196
+ left: -100%;
197
+ width: 100%;
198
+ height: 100%;
199
+ background: linear-gradient(90deg,
200
+ transparent,
201
+ rgba(255, 255, 255, 0.3),
202
+ transparent);
203
+ transition: left 0.6s cubic-bezier(0.4, 0, 0.2, 1);
204
+ }
205
+
206
+ .btn-premium::after {
207
+ content: '';
208
+ position: absolute;
209
+ inset: 0;
210
+ background: linear-gradient(135deg,
211
+ rgba(255, 255, 255, 0.1) 0%,
212
+ transparent 50%,
213
+ rgba(255, 255, 255, 0.1) 100%);
214
+ opacity: 0;
215
+ transition: opacity 0.3s ease;
216
+ }
217
+
218
+ .btn-premium:hover::before {
219
+ left: 100%;
220
+ }
221
+
222
+ .btn-premium:hover::after {
223
+ opacity: 1;
224
+ }
225
+
226
+ .btn-premium:hover {
227
+ transform: translateY(-4px) scale(1.02);
228
+ box-shadow:
229
+ 0 20px 60px rgba(139, 92, 246, 0.4),
230
+ 0 8px 16px rgba(0, 0, 0, 0.3);
231
+ }
232
+
233
+ .btn-premium:active {
234
+ transform: translateY(-2px) scale(1.01);
235
+ }
236
+
237
+ /* Advanced Feature Cards */
238
+ .feature-card {
239
+ position: relative;
240
+ transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
241
+ transform-style: preserve-3d;
242
+ }
243
+
244
+ .feature-card::before {
245
+ content: '';
246
+ position: absolute;
247
+ inset: 0;
248
+ background: linear-gradient(135deg,
249
+ rgba(139, 92, 246, 0.1) 0%,
250
+ rgba(6, 182, 212, 0.1) 100%);
251
+ opacity: 0;
252
+ transition: all 0.4s ease;
253
+ border-radius: inherit;
254
+ }
255
+
256
+ .feature-card::after {
257
+ content: '';
258
+ position: absolute;
259
+ inset: 0;
260
+ background: radial-gradient(circle at var(--mouse-x, 50%) var(--mouse-y, 50%),
261
+ rgba(255, 255, 255, 0.1) 0%,
262
+ transparent 70%);
263
+ opacity: 0;
264
+ transition: opacity 0.3s ease;
265
+ border-radius: inherit;
266
+ pointer-events: none;
267
+ }
268
+
269
+ .feature-card:hover::before {
270
+ opacity: 1;
271
+ }
272
+
273
+ .feature-card:hover::after {
274
+ opacity: 1;
275
+ }
276
+
277
+ .feature-card:hover {
278
+ transform: translateY(-12px) rotateX(5deg) rotateY(5deg);
279
+ box-shadow:
280
+ 0 24px 80px rgba(0, 0, 0, 0.3),
281
+ 0 12px 32px rgba(139, 92, 246, 0.2);
282
+ }
283
+
284
+ /* Particle System */
285
+ .particle {
286
+ position: absolute;
287
+ border-radius: 50%;
288
+ pointer-events: none;
289
+ opacity: 0.6;
290
+ }
291
+
292
+ .particle-1 {
293
+ width: 4px;
294
+ height: 4px;
295
+ background: linear-gradient(45deg, #8B5CF6, #06B6D4);
296
+ animation: float 8s ease-in-out infinite, fade-in 2s ease-in;
297
+ }
298
+
299
+ .particle-2 {
300
+ width: 6px;
301
+ height: 6px;
302
+ background: linear-gradient(45deg, #06B6D4, #F59E0B);
303
+ animation: float 10s ease-in-out infinite reverse, fade-in 3s ease-in;
304
+ }
305
+
306
+ .particle-3 {
307
+ width: 3px;
308
+ height: 3px;
309
+ background: linear-gradient(45deg, #F59E0B, #EF4444);
310
+ animation: float 6s ease-in-out infinite, fade-in 1.5s ease-in;
311
+ }
312
+
313
+ /* Typing Effect */
314
+ .typing-text {
315
+ border-right: 2px solid #8B5CF6;
316
+ white-space: nowrap;
317
+ overflow: hidden;
318
+ animation: typing 3.5s steps(40, end), blink-caret 0.75s step-end infinite;
319
+ }
320
+
321
+ /* Advanced Scroll Animations */
322
+ .scroll-reveal {
323
+ opacity: 0;
324
+ transform: translateY(60px);
325
+ transition: all 1s cubic-bezier(0.4, 0, 0.2, 1);
326
+ }
327
+
328
+ .scroll-reveal.revealed {
329
+ opacity: 1;
330
+ transform: translateY(0);
331
+ }
332
+
333
+ .scroll-reveal-scale {
334
+ opacity: 0;
335
+ transform: scale(0.8);
336
+ transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
337
+ }
338
+
339
+ .scroll-reveal-scale.revealed {
340
+ opacity: 1;
341
+ transform: scale(1);
342
+ }
343
+
344
+ .scroll-reveal-left {
345
+ opacity: 0;
346
+ transform: translateX(-60px);
347
+ transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
348
+ }
349
+
350
+ .scroll-reveal-left.revealed {
351
+ opacity: 1;
352
+ transform: translateX(0);
353
+ }
354
+
355
+ .scroll-reveal-right {
356
+ opacity: 0;
357
+ transform: translateX(60px);
358
+ transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
359
+ }
360
+
361
+ .scroll-reveal-right.revealed {
362
+ opacity: 1;
363
+ transform: translateX(0);
364
+ }
365
+
366
+ /* Premium Form Styling */
367
+ .form-premium {
368
+ position: relative;
369
+ }
370
+
371
+ .form-premium input {
372
+ background: rgba(255, 255, 255, 0.05);
373
+ border: 2px solid rgba(255, 255, 255, 0.1);
374
+ backdrop-filter: blur(20px);
375
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
376
+ }
377
+
378
+ .form-premium input:focus {
379
+ background: rgba(255, 255, 255, 0.08);
380
+ border-color: #8B5CF6;
381
+ box-shadow:
382
+ 0 0 0 4px rgba(139, 92, 246, 0.1),
383
+ 0 8px 32px rgba(139, 92, 246, 0.2);
384
+ transform: scale(1.02);
385
+ }
386
+
387
+ .form-premium input::placeholder {
388
+ color: rgba(255, 255, 255, 0.5);
389
+ }
390
+
391
+ /* Loading Animation */
392
+ .loading-dots {
393
+ display: inline-flex;
394
+ gap: 4px;
395
+ }
396
+
397
+ .loading-dots div {
398
+ width: 8px;
399
+ height: 8px;
400
+ border-radius: 50%;
401
+ background: currentColor;
402
+ animation: loading-bounce 1.4s ease-in-out infinite both;
403
+ }
404
+
405
+ .loading-dots div:nth-child(1) {
406
+ animation-delay: -0.32s;
407
+ }
408
+
409
+ .loading-dots div:nth-child(2) {
410
+ animation-delay: -0.16s;
411
+ }
412
+
413
+ .loading-dots div:nth-child(3) {
414
+ animation-delay: 0s;
415
+ }
416
+
417
+ @keyframes loading-bounce {
418
+
419
+ 0%,
420
+ 80%,
421
+ 100% {
422
+ transform: scale(0);
423
+ }
424
+
425
+ 40% {
426
+ transform: scale(1);
427
+ }
428
+ }
429
+
430
+ /* Custom Scrollbar */
431
+ ::-webkit-scrollbar {
432
+ width: 8px;
433
+ }
434
+
435
+ ::-webkit-scrollbar-track {
436
+ background: var(--darker);
437
+ }
438
+
439
+ ::-webkit-scrollbar-thumb {
440
+ background: linear-gradient(to bottom, #8B5CF6, #06B6D4);
441
+ border-radius: 4px;
442
+ }
443
+
444
+ ::-webkit-scrollbar-thumb:hover {
445
+ background: linear-gradient(to bottom, #7C3AED, #0891B2);
446
+ }
447
+
448
+ /* Mobile Optimizations */
449
+ @media (max-width: 768px) {
450
+ .particle {
451
+ display: none;
452
+ }
453
+
454
+ .hero-bg {
455
+ background-size: 300% 300%;
456
+ }
457
+
458
+ .feature-card:hover {
459
+ transform: translateY(-8px);
460
+ }
461
+ }
462
+
463
+ /* High DPI Displays */
464
+ @media (-webkit-min-device-pixel-ratio: 2) {
465
+ .glass {
466
+ backdrop-filter: blur(25px);
467
+ }
468
+ }
469
+
470
+ /* Reduced Motion */
471
+ @media (prefers-reduced-motion: reduce) {
472
+ * {
473
+ animation-duration: 0.01ms !important;
474
+ animation-iteration-count: 1 !important;
475
+ transition-duration: 0.01ms !important;
476
+ }
477
+ }
@@ -0,0 +1,21 @@
1
+ // /src/styles/shared-styles.js
2
+
3
+ // Importamos el CSS de Font Awesome como un string de texto.
4
+ import fontAwesomeCss from '@fortawesome/fontawesome-free/css/all.min.css';
5
+ // import globalCss from '../../css/style.css';
6
+ import globalCss from '../../css/style.css';
7
+ import landingCss from './landing.css';
8
+ // Creamos una hoja de estilos "adoptable"
9
+ const faSheet = new CSSStyleSheet();
10
+ faSheet.replaceSync(fontAwesomeCss); // Cargamos el CSS en el objeto
11
+
12
+ // Creamos una hoja de estilos "adoptable"
13
+ const landingSheet = new CSSStyleSheet();
14
+ landingSheet.replaceSync(landingCss); // Cargamos el CSS en el objeto
15
+
16
+ // Creamos la hoja de estilos para los estilos globales
17
+ const globalSheet = new CSSStyleSheet();
18
+ globalSheet.replaceSync(globalCss);
19
+ console.log(faSheet, globalSheet)
20
+ // Exportamos AMBAS hojas para que puedan ser usadas
21
+ export { faSheet, globalSheet, landingSheet };
@@ -0,0 +1,7 @@
1
+ // export * from './base/BaseComponent';
2
+ export * from './theming/ColorPicker';
3
+ export * from './theming/ThemePanel';
4
+ export * from './DecidoButton';
5
+ export * from './LoginView';
6
+ export * from './WelcomeView';
7
+ export * from './landing/index';
@@ -0,0 +1,11 @@
1
+ export * from './landing-page.js';
2
+ export * from './landing-button.js';
3
+ export * from './landing-card.js';
4
+ export * from './landing-feature-card.js';
5
+ export * from './landing-testimonial-card.js';
6
+ export * from './landing-section.js';
7
+ export * from './landing-header.js';
8
+ export * from './landing-footer.js';
9
+ export * from './landing-hero.js';
10
+ export * from './landing-waitlist.js';
11
+ export * from './landing-cta.js';
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+
3
+ interface LandingButtonProps {
4
+ text: string;
5
+ icon?: string;
6
+ href?: string;
7
+ onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;
8
+ }
9
+
10
+ const LandingButton: React.FC<LandingButtonProps> = ({
11
+ text,
12
+ icon,
13
+ href = '#',
14
+ onClick,
15
+ }) => {
16
+ return (
17
+ <a href={href} onClick={onClick} className="btn-premium px-6 py-3 rounded-xl font-semibold text-sm inline-block">
18
+ <span className="relative z-10 flex items-center justify-center">
19
+ {icon && <i className={`${icon} mr-2`}></i>}
20
+ {text}
21
+ </span>
22
+ </a>
23
+ );
24
+ };
25
+
26
+ export default LandingButton;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+
3
+ interface LandingCardProps {
4
+ children: React.ReactNode;
5
+ }
6
+
7
+ const LandingCard: React.FC<LandingCardProps> = ({ children }) => {
8
+ return (
9
+ <div className="glass-premium rounded-3xl p-10 relative overflow-hidden">
10
+ {children}
11
+ </div>
12
+ );
13
+ };
14
+
15
+ export default LandingCard;
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+
3
+ interface LandingCtaProps {
4
+ title: string;
5
+ subtitle: string;
6
+ buttonText: string;
7
+ trustText: string;
8
+ onButtonClick: () => void;
9
+ }
10
+
11
+ const LandingCta: React.FC<LandingCtaProps> = ({
12
+ title,
13
+ subtitle,
14
+ buttonText,
15
+ trustText,
16
+ onButtonClick,
17
+ }) => {
18
+ return (
19
+ <section className="py-40 bg-linear-to-br from-purple-900/30 via-blue-900/30 to-cyan-900/30 relative overflow-hidden">
20
+ <div className="container mx-auto px-6 text-center relative z-10">
21
+ <div className="max-w-5xl mx-auto scroll-reveal">
22
+ <h2 className="text-6xl md:text-8xl font-black mb-12 leading-tight" dangerouslySetInnerHTML={{ __html: title }}>
23
+ </h2>
24
+ <p className="text-xl md:text-2xl text-gray-300 mb-16 leading-relaxed" dangerouslySetInnerHTML={{ __html: subtitle }}>
25
+ </p>
26
+
27
+ <button onClick={onButtonClick} className="btn-premium text-white font-black py-8 px-16 rounded-3xl text-2xl mb-8 inline-flex items-center group hover:scale-105 transition-all duration-300">
28
+ <span className="relative z-10 flex items-center">
29
+ <i className="fas fa-rocket mr-4 text-3xl"></i>
30
+ {buttonText}
31
+ <i className="fas fa-arrow-right ml-4 text-3xl group-hover:translate-x-2 transition-transform"></i>
32
+ </span>
33
+ </button>
34
+
35
+ <p className="text-sm text-gray-400 mt-8">{trustText}</p>
36
+ </div>
37
+ </div>
38
+ </section>
39
+ );
40
+ };
41
+
42
+ export default LandingCta;