@finatic/client 0.0.139 → 0.0.141

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 (39) hide show
  1. package/README.md +335 -446
  2. package/dist/index.d.ts +272 -515
  3. package/dist/index.js +531 -449
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +532 -449
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/types/core/client/ApiClient.d.ts +81 -27
  8. package/dist/types/core/client/FinaticConnect.d.ts +53 -103
  9. package/dist/types/index.d.ts +1 -2
  10. package/dist/types/mocks/MockApiClient.d.ts +2 -4
  11. package/dist/types/mocks/utils.d.ts +0 -5
  12. package/dist/types/types/api/auth.d.ts +12 -30
  13. package/dist/types/types/api/broker.d.ts +117 -1
  14. package/package.json +7 -3
  15. package/src/core/client/ApiClient.ts +1978 -0
  16. package/src/core/client/FinaticConnect.ts +1557 -0
  17. package/src/core/portal/PortalUI.ts +300 -0
  18. package/src/index.d.ts +23 -0
  19. package/src/index.ts +99 -0
  20. package/src/mocks/MockApiClient.ts +1032 -0
  21. package/src/mocks/MockDataProvider.ts +986 -0
  22. package/src/mocks/MockFactory.ts +97 -0
  23. package/src/mocks/utils.ts +133 -0
  24. package/src/themes/portalPresets.ts +1307 -0
  25. package/src/types/api/auth.ts +112 -0
  26. package/src/types/api/broker.ts +461 -0
  27. package/src/types/api/core.ts +53 -0
  28. package/src/types/api/errors.ts +35 -0
  29. package/src/types/api/orders.ts +45 -0
  30. package/src/types/api/portfolio.ts +59 -0
  31. package/src/types/common/pagination.ts +138 -0
  32. package/src/types/connect.ts +56 -0
  33. package/src/types/index.ts +25 -0
  34. package/src/types/portal.ts +214 -0
  35. package/src/types/ui/theme.ts +105 -0
  36. package/src/utils/brokerUtils.ts +85 -0
  37. package/src/utils/errors.ts +104 -0
  38. package/src/utils/events.ts +54 -0
  39. package/src/utils/themeUtils.ts +146 -0
@@ -0,0 +1,1307 @@
1
+ import { PortalThemeConfig } from '../types/portal';
2
+
3
+ // Dark theme (default Finatic theme)
4
+ export const darkTheme: PortalThemeConfig = {
5
+ mode: 'dark',
6
+ colors: {
7
+ background: {
8
+ primary: '#000000',
9
+ secondary: '#1a1a1a',
10
+ tertiary: '#2a2a2a',
11
+ accent: 'rgba(0, 255, 255, 0.1)',
12
+ glass: 'rgba(255, 255, 255, 0.05)',
13
+ },
14
+ status: {
15
+ connected: '#00FFFF',
16
+ disconnected: '#EF4444',
17
+ warning: '#F59E0B',
18
+ pending: '#8B5CF6',
19
+ error: '#EF4444',
20
+ success: '#00FFFF',
21
+ },
22
+ text: {
23
+ primary: '#FFFFFF',
24
+ secondary: '#CBD5E1',
25
+ muted: '#94A3B8',
26
+ inverse: '#000000',
27
+ },
28
+ border: {
29
+ primary: 'rgba(0, 255, 255, 0.2)',
30
+ secondary: 'rgba(255, 255, 255, 0.1)',
31
+ hover: 'rgba(0, 255, 255, 0.4)',
32
+ focus: 'rgba(0, 255, 255, 0.6)',
33
+ accent: '#00FFFF',
34
+ },
35
+ input: {
36
+ background: '#1a1a1a',
37
+ border: 'rgba(0, 255, 255, 0.2)',
38
+ borderFocus: '#00FFFF',
39
+ text: '#FFFFFF',
40
+ placeholder: '#94A3B8',
41
+ },
42
+ button: {
43
+ primary: {
44
+ background: '#00FFFF',
45
+ text: '#000000',
46
+ hover: '#00E6E6',
47
+ active: '#00CCCC',
48
+ },
49
+ secondary: {
50
+ background: 'transparent',
51
+ text: '#00FFFF',
52
+ border: '#00FFFF',
53
+ hover: 'rgba(0, 255, 255, 0.1)',
54
+ active: 'rgba(0, 255, 255, 0.2)',
55
+ },
56
+ },
57
+ },
58
+ typography: {
59
+ fontFamily: {
60
+ primary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
61
+ secondary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
62
+ },
63
+ fontSize: {
64
+ xs: '0.75rem',
65
+ sm: '0.875rem',
66
+ base: '1rem',
67
+ lg: '1.125rem',
68
+ xl: '1.25rem',
69
+ '2xl': '1.5rem',
70
+ '3xl': '1.875rem',
71
+ '4xl': '2.25rem',
72
+ },
73
+ fontWeight: {
74
+ normal: 400,
75
+ medium: 500,
76
+ semibold: 600,
77
+ bold: 700,
78
+ extrabold: 800,
79
+ },
80
+ lineHeight: {
81
+ tight: '1.25',
82
+ normal: '1.5',
83
+ relaxed: '1.75',
84
+ },
85
+ },
86
+ spacing: {
87
+ xs: '0.25rem',
88
+ sm: '0.5rem',
89
+ md: '1rem',
90
+ lg: '1.5rem',
91
+ xl: '2rem',
92
+ '2xl': '3rem',
93
+ '3xl': '4rem',
94
+ },
95
+ layout: {
96
+ containerMaxWidth: '1440px',
97
+ gridGap: '1rem',
98
+ cardPadding: '1.5rem',
99
+ borderRadius: {
100
+ sm: '0.25rem',
101
+ md: '0.5rem',
102
+ lg: '0.75rem',
103
+ xl: '1rem',
104
+ '2xl': '1.5rem',
105
+ full: '9999px',
106
+ },
107
+ },
108
+ components: {
109
+ brokerCard: {
110
+ width: '100%',
111
+ height: '180px',
112
+ logoSize: '64px',
113
+ padding: '1.5rem',
114
+ },
115
+ statusIndicator: {
116
+ size: '22px',
117
+ glowIntensity: 0.9,
118
+ },
119
+ modal: {
120
+ background: 'rgba(0, 0, 0, 0.95)',
121
+ backdrop: 'rgba(0, 0, 0, 0.8)',
122
+ },
123
+ brokerCardModern: {
124
+ width: '150px',
125
+ height: '150px',
126
+ padding: '16px',
127
+ logoSize: '48px',
128
+ statusSize: '22px',
129
+ },
130
+ connectButton: {
131
+ width: '120px',
132
+ height: '120px',
133
+ },
134
+ themeSwitcher: {
135
+ indicatorSize: '24px',
136
+ },
137
+ },
138
+ effects: {
139
+ glassmorphism: {
140
+ enabled: true,
141
+ blur: '12px',
142
+ opacity: 0.15,
143
+ border: 'rgba(0, 255, 255, 0.3)',
144
+ },
145
+ animations: {
146
+ enabled: true,
147
+ duration: {
148
+ fast: '150ms',
149
+ normal: '300ms',
150
+ slow: '500ms',
151
+ },
152
+ easing: {
153
+ default: 'cubic-bezier(0.4, 0, 0.2, 1)',
154
+ smooth: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
155
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
156
+ },
157
+ },
158
+ shadows: {
159
+ sm: '0 1px 2px rgba(0, 0, 0, 0.5)',
160
+ md: '0 4px 6px rgba(0, 0, 0, 0.6)',
161
+ lg: '0 10px 15px rgba(0, 0, 0, 0.7)',
162
+ xl: '0 20px 25px rgba(0, 0, 0, 0.8)',
163
+ card: '0px 4px 12px rgba(0, 0, 0, 0.6), 0 0 20px rgba(0, 255, 255, 0.2)',
164
+ cardHover: '0px 4px 24px rgba(0, 255, 255, 0.3), 0 0 30px rgba(0, 255, 255, 0.25)',
165
+ glow: '0 0 20px rgba(0, 255, 255, 0.8)',
166
+ focus: '0 0 0 2px #00FFFF, 0 0 8px 2px rgba(0, 255, 255, 0.8)',
167
+ },
168
+ },
169
+ branding: {
170
+ primaryColor: '#00FFFF',
171
+ },
172
+ glow: {
173
+ primary: 'rgba(0, 255, 255, 0.4)',
174
+ secondary: 'rgba(0, 255, 255, 0.6)',
175
+ card: 'rgba(0, 255, 255, 0.2)',
176
+ cardHover: 'rgba(0, 255, 255, 0.3)',
177
+ button: 'rgba(0, 255, 255, 0.6)',
178
+ focus: 'rgba(0, 255, 255, 0.8)',
179
+ scrollbar: 'rgba(0, 255, 255, 0.4)',
180
+ },
181
+ gradients: {
182
+ start: 'rgba(0, 255, 255, 0.08)',
183
+ end: 'rgba(0, 255, 255, 0.03)',
184
+ hoverStart: 'rgba(0, 255, 255, 0.15)',
185
+ hoverEnd: 'rgba(0, 255, 255, 0.08)',
186
+ },
187
+ };
188
+
189
+ // Light theme with cyan accents
190
+ export const lightTheme: PortalThemeConfig = {
191
+ mode: 'light',
192
+ colors: {
193
+ background: {
194
+ primary: '#FFFFFF',
195
+ secondary: '#F8FAFC',
196
+ tertiary: '#F1F5F9',
197
+ accent: 'rgba(0, 255, 255, 0.1)',
198
+ glass: 'rgba(0, 0, 0, 0.05)',
199
+ },
200
+ status: {
201
+ connected: '#00FFFF',
202
+ disconnected: '#EF4444',
203
+ warning: '#F59E0B',
204
+ pending: '#8B5CF6',
205
+ error: '#EF4444',
206
+ success: '#00FFFF',
207
+ },
208
+ text: {
209
+ primary: '#1E293B',
210
+ secondary: '#64748B',
211
+ muted: '#94A3B8',
212
+ inverse: '#FFFFFF',
213
+ },
214
+ border: {
215
+ primary: 'rgba(0, 255, 255, 0.2)',
216
+ secondary: 'rgba(0, 0, 0, 0.1)',
217
+ hover: 'rgba(0, 255, 255, 0.4)',
218
+ focus: 'rgba(0, 255, 255, 0.6)',
219
+ accent: '#00FFFF',
220
+ },
221
+ input: {
222
+ background: '#FFFFFF',
223
+ border: 'rgba(0, 255, 255, 0.2)',
224
+ borderFocus: '#00FFFF',
225
+ text: '#1E293B',
226
+ placeholder: '#94A3B8',
227
+ },
228
+ button: {
229
+ primary: {
230
+ background: '#00FFFF',
231
+ text: '#000000',
232
+ hover: '#00E6E6',
233
+ active: '#00CCCC',
234
+ },
235
+ secondary: {
236
+ background: 'transparent',
237
+ text: '#00FFFF',
238
+ border: '#00FFFF',
239
+ hover: 'rgba(0, 255, 255, 0.1)',
240
+ active: 'rgba(0, 255, 255, 0.2)',
241
+ },
242
+ },
243
+ },
244
+ typography: {
245
+ fontFamily: {
246
+ primary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
247
+ secondary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
248
+ },
249
+ fontSize: {
250
+ xs: '0.75rem',
251
+ sm: '0.875rem',
252
+ base: '1rem',
253
+ lg: '1.125rem',
254
+ xl: '1.25rem',
255
+ '2xl': '1.5rem',
256
+ '3xl': '1.875rem',
257
+ '4xl': '2.25rem',
258
+ },
259
+ fontWeight: {
260
+ normal: 400,
261
+ medium: 500,
262
+ semibold: 600,
263
+ bold: 700,
264
+ extrabold: 800,
265
+ },
266
+ lineHeight: {
267
+ tight: '1.25',
268
+ normal: '1.5',
269
+ relaxed: '1.75',
270
+ },
271
+ },
272
+ spacing: {
273
+ xs: '0.25rem',
274
+ sm: '0.5rem',
275
+ md: '1rem',
276
+ lg: '1.5rem',
277
+ xl: '2rem',
278
+ '2xl': '3rem',
279
+ '3xl': '4rem',
280
+ },
281
+ layout: {
282
+ containerMaxWidth: '1440px',
283
+ gridGap: '1rem',
284
+ cardPadding: '1.5rem',
285
+ borderRadius: {
286
+ sm: '0.25rem',
287
+ md: '0.5rem',
288
+ lg: '0.75rem',
289
+ xl: '1rem',
290
+ '2xl': '1.5rem',
291
+ full: '9999px',
292
+ },
293
+ },
294
+ components: {
295
+ brokerCard: {
296
+ width: '100%',
297
+ height: '180px',
298
+ logoSize: '64px',
299
+ padding: '1.5rem',
300
+ },
301
+ statusIndicator: {
302
+ size: '22px',
303
+ glowIntensity: 0.9,
304
+ },
305
+ modal: {
306
+ background: 'rgba(255, 255, 255, 0.95)',
307
+ backdrop: 'rgba(0, 0, 0, 0.5)',
308
+ },
309
+ },
310
+ effects: {
311
+ glassmorphism: {
312
+ enabled: true,
313
+ blur: '12px',
314
+ opacity: 0.15,
315
+ border: 'rgba(0, 255, 255, 0.3)',
316
+ },
317
+ animations: {
318
+ enabled: true,
319
+ duration: {
320
+ fast: '150ms',
321
+ normal: '300ms',
322
+ slow: '500ms',
323
+ },
324
+ easing: {
325
+ default: 'cubic-bezier(0.4, 0, 0.2, 1)',
326
+ smooth: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
327
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
328
+ },
329
+ },
330
+ shadows: {
331
+ sm: '0 1px 2px rgba(0, 0, 0, 0.1)',
332
+ md: '0 4px 6px rgba(0, 0, 0, 0.1)',
333
+ lg: '0 10px 15px rgba(0, 0, 0, 0.1)',
334
+ xl: '0 20px 25px rgba(0, 0, 0, 0.1)',
335
+ card: '0px 4px 12px rgba(0, 0, 0, 0.1), 0 0 20px rgba(0, 255, 255, 0.2)',
336
+ cardHover: '0px 4px 24px rgba(0, 255, 255, 0.3), 0 0 30px rgba(0, 255, 255, 0.25)',
337
+ glow: '0 0 20px rgba(0, 255, 255, 0.8)',
338
+ focus: '0 0 0 2px #00FFFF, 0 0 8px 2px rgba(0, 255, 255, 0.8)',
339
+ },
340
+ },
341
+ branding: {
342
+ primaryColor: '#00FFFF',
343
+ },
344
+ glow: {
345
+ primary: 'rgba(0, 255, 255, 0.4)',
346
+ secondary: 'rgba(0, 255, 255, 0.6)',
347
+ card: 'rgba(0, 255, 255, 0.2)',
348
+ cardHover: 'rgba(0, 255, 255, 0.3)',
349
+ button: 'rgba(0, 255, 255, 0.6)',
350
+ focus: 'rgba(0, 255, 255, 0.8)',
351
+ scrollbar: 'rgba(0, 255, 255, 0.4)',
352
+ },
353
+ gradients: {
354
+ start: 'rgba(0, 255, 255, 0.08)',
355
+ end: 'rgba(0, 255, 255, 0.03)',
356
+ hoverStart: 'rgba(0, 255, 255, 0.15)',
357
+ hoverEnd: 'rgba(0, 255, 255, 0.08)',
358
+ },
359
+ };
360
+
361
+ // Corporate blue theme
362
+ export const corporateBlueTheme: PortalThemeConfig = {
363
+ mode: 'dark',
364
+ colors: {
365
+ background: {
366
+ primary: '#1E293B',
367
+ secondary: '#334155',
368
+ tertiary: '#475569',
369
+ accent: 'rgba(59, 130, 246, 0.1)',
370
+ glass: 'rgba(255, 255, 255, 0.05)',
371
+ },
372
+ status: {
373
+ connected: '#3B82F6',
374
+ disconnected: '#EF4444',
375
+ warning: '#F59E0B',
376
+ pending: '#8B5CF6',
377
+ error: '#EF4444',
378
+ success: '#10B981',
379
+ },
380
+ text: {
381
+ primary: '#F8FAFC',
382
+ secondary: '#CBD5E1',
383
+ muted: '#94A3B8',
384
+ inverse: '#1E293B',
385
+ },
386
+ border: {
387
+ primary: 'rgba(59, 130, 246, 0.2)',
388
+ secondary: 'rgba(255, 255, 255, 0.1)',
389
+ hover: 'rgba(59, 130, 246, 0.4)',
390
+ focus: 'rgba(59, 130, 246, 0.6)',
391
+ accent: '#3B82F6',
392
+ },
393
+ input: {
394
+ background: '#334155',
395
+ border: 'rgba(59, 130, 246, 0.2)',
396
+ borderFocus: '#3B82F6',
397
+ text: '#F8FAFC',
398
+ placeholder: '#94A3B8',
399
+ },
400
+ button: {
401
+ primary: {
402
+ background: '#3B82F6',
403
+ text: '#FFFFFF',
404
+ hover: '#2563EB',
405
+ active: '#1D4ED8',
406
+ },
407
+ secondary: {
408
+ background: 'transparent',
409
+ text: '#3B82F6',
410
+ border: '#3B82F6',
411
+ hover: 'rgba(59, 130, 246, 0.1)',
412
+ active: 'rgba(59, 130, 246, 0.2)',
413
+ },
414
+ },
415
+ },
416
+ typography: {
417
+ fontFamily: {
418
+ primary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
419
+ secondary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
420
+ },
421
+ fontSize: {
422
+ xs: '0.75rem',
423
+ sm: '0.875rem',
424
+ base: '1rem',
425
+ lg: '1.125rem',
426
+ xl: '1.25rem',
427
+ '2xl': '1.5rem',
428
+ '3xl': '1.875rem',
429
+ '4xl': '2.25rem',
430
+ },
431
+ fontWeight: {
432
+ normal: 400,
433
+ medium: 500,
434
+ semibold: 600,
435
+ bold: 700,
436
+ extrabold: 800,
437
+ },
438
+ lineHeight: {
439
+ tight: '1.25',
440
+ normal: '1.5',
441
+ relaxed: '1.75',
442
+ },
443
+ },
444
+ spacing: {
445
+ xs: '0.25rem',
446
+ sm: '0.5rem',
447
+ md: '1rem',
448
+ lg: '1.5rem',
449
+ xl: '2rem',
450
+ '2xl': '3rem',
451
+ '3xl': '4rem',
452
+ },
453
+ layout: {
454
+ containerMaxWidth: '1440px',
455
+ gridGap: '1rem',
456
+ cardPadding: '1.5rem',
457
+ borderRadius: {
458
+ sm: '0.25rem',
459
+ md: '0.5rem',
460
+ lg: '0.75rem',
461
+ xl: '1rem',
462
+ '2xl': '1.5rem',
463
+ full: '9999px',
464
+ },
465
+ },
466
+ components: {
467
+ brokerCard: {
468
+ width: '100%',
469
+ height: '180px',
470
+ logoSize: '64px',
471
+ padding: '1.5rem',
472
+ },
473
+ statusIndicator: {
474
+ size: '22px',
475
+ glowIntensity: 0.9,
476
+ },
477
+ modal: {
478
+ background: 'rgba(0, 0, 0, 0.95)',
479
+ backdrop: 'rgba(0, 0, 0, 0.8)',
480
+ },
481
+ brokerCardModern: {
482
+ width: '150px',
483
+ height: '150px',
484
+ padding: '16px',
485
+ logoSize: '48px',
486
+ statusSize: '22px',
487
+ },
488
+ connectButton: {
489
+ width: '120px',
490
+ height: '120px',
491
+ },
492
+ themeSwitcher: {
493
+ indicatorSize: '24px',
494
+ },
495
+ },
496
+ effects: {
497
+ glassmorphism: {
498
+ enabled: true,
499
+ blur: '12px',
500
+ opacity: 0.15,
501
+ border: 'rgba(59, 130, 246, 0.3)',
502
+ },
503
+ animations: {
504
+ enabled: true,
505
+ duration: {
506
+ fast: '150ms',
507
+ normal: '300ms',
508
+ slow: '500ms',
509
+ },
510
+ easing: {
511
+ default: 'cubic-bezier(0.4, 0, 0.2, 1)',
512
+ smooth: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
513
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
514
+ },
515
+ },
516
+ shadows: {
517
+ sm: '0 1px 2px rgba(0, 0, 0, 0.5)',
518
+ md: '0 4px 6px rgba(0, 0, 0, 0.6)',
519
+ lg: '0 10px 15px rgba(0, 0, 0, 0.7)',
520
+ xl: '0 20px 25px rgba(0, 0, 0, 0.8)',
521
+ card: '0px 4px 12px rgba(0, 0, 0, 0.6), 0 0 20px rgba(59, 130, 246, 0.2)',
522
+ cardHover: '0px 4px 24px rgba(59, 130, 246, 0.3), 0 0 30px rgba(59, 130, 246, 0.25)',
523
+ glow: '0 0 20px rgba(59, 130, 246, 0.8)',
524
+ focus: '0 0 0 2px #3B82F6, 0 0 8px 2px rgba(59, 130, 246, 0.8)',
525
+ },
526
+ },
527
+ branding: {
528
+ primaryColor: '#3B82F6',
529
+ },
530
+ glow: {
531
+ primary: 'rgba(59, 130, 246, 0.4)',
532
+ secondary: 'rgba(59, 130, 246, 0.6)',
533
+ card: 'rgba(59, 130, 246, 0.2)',
534
+ cardHover: 'rgba(59, 130, 246, 0.3)',
535
+ button: 'rgba(59, 130, 246, 0.6)',
536
+ focus: 'rgba(59, 130, 246, 0.8)',
537
+ scrollbar: 'rgba(59, 130, 246, 0.4)',
538
+ },
539
+ gradients: {
540
+ start: 'rgba(59, 130, 246, 0.08)',
541
+ end: 'rgba(59, 130, 246, 0.03)',
542
+ hoverStart: 'rgba(59, 130, 246, 0.15)',
543
+ hoverEnd: 'rgba(59, 130, 246, 0.08)',
544
+ },
545
+ };
546
+
547
+ // Purple theme
548
+ export const purpleTheme: PortalThemeConfig = {
549
+ mode: 'dark',
550
+ colors: {
551
+ background: {
552
+ primary: '#1a1a1a',
553
+ secondary: '#2a2a2a',
554
+ tertiary: '#3a3a3a',
555
+ accent: 'rgba(168, 85, 247, 0.1)',
556
+ glass: 'rgba(255, 255, 255, 0.05)',
557
+ },
558
+ status: {
559
+ connected: '#A855F7',
560
+ disconnected: '#EF4444',
561
+ warning: '#F59E0B',
562
+ pending: '#8B5CF6',
563
+ error: '#EF4444',
564
+ success: '#10B981',
565
+ },
566
+ text: {
567
+ primary: '#F8FAFC',
568
+ secondary: '#CBD5E1',
569
+ muted: '#94A3B8',
570
+ inverse: '#1a1a1a',
571
+ },
572
+ border: {
573
+ primary: 'rgba(168, 85, 247, 0.2)',
574
+ secondary: 'rgba(255, 255, 255, 0.1)',
575
+ hover: 'rgba(168, 85, 247, 0.4)',
576
+ focus: 'rgba(168, 85, 247, 0.6)',
577
+ accent: '#A855F7',
578
+ },
579
+ input: {
580
+ background: '#334155',
581
+ border: 'rgba(168, 85, 247, 0.2)',
582
+ borderFocus: '#A855F7',
583
+ text: '#F8FAFC',
584
+ placeholder: '#94A3B8',
585
+ },
586
+ button: {
587
+ primary: {
588
+ background: '#A855F7',
589
+ text: '#FFFFFF',
590
+ hover: '#9333EA',
591
+ active: '#7C3AED',
592
+ },
593
+ secondary: {
594
+ background: 'transparent',
595
+ text: '#A855F7',
596
+ border: '#A855F7',
597
+ hover: 'rgba(168, 85, 247, 0.1)',
598
+ active: 'rgba(168, 85, 247, 0.2)',
599
+ },
600
+ },
601
+ },
602
+ typography: {
603
+ fontFamily: {
604
+ primary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
605
+ secondary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
606
+ },
607
+ fontSize: {
608
+ xs: '0.75rem',
609
+ sm: '0.875rem',
610
+ base: '1rem',
611
+ lg: '1.125rem',
612
+ xl: '1.25rem',
613
+ '2xl': '1.5rem',
614
+ '3xl': '1.875rem',
615
+ '4xl': '2.25rem',
616
+ },
617
+ fontWeight: {
618
+ normal: 400,
619
+ medium: 500,
620
+ semibold: 600,
621
+ bold: 700,
622
+ extrabold: 800,
623
+ },
624
+ lineHeight: {
625
+ tight: '1.25',
626
+ normal: '1.5',
627
+ relaxed: '1.75',
628
+ },
629
+ },
630
+ spacing: {
631
+ xs: '0.25rem',
632
+ sm: '0.5rem',
633
+ md: '1rem',
634
+ lg: '1.5rem',
635
+ xl: '2rem',
636
+ '2xl': '3rem',
637
+ '3xl': '4rem',
638
+ },
639
+ layout: {
640
+ containerMaxWidth: '1440px',
641
+ gridGap: '1rem',
642
+ cardPadding: '1.5rem',
643
+ borderRadius: {
644
+ sm: '0.25rem',
645
+ md: '0.5rem',
646
+ lg: '0.75rem',
647
+ xl: '1rem',
648
+ '2xl': '1.5rem',
649
+ full: '9999px',
650
+ },
651
+ },
652
+ components: {
653
+ brokerCard: {
654
+ width: '100%',
655
+ height: '180px',
656
+ logoSize: '64px',
657
+ padding: '1.5rem',
658
+ },
659
+ statusIndicator: {
660
+ size: '22px',
661
+ glowIntensity: 0.9,
662
+ },
663
+ modal: {
664
+ background: 'rgba(0, 0, 0, 0.95)',
665
+ backdrop: 'rgba(0, 0, 0, 0.8)',
666
+ },
667
+ brokerCardModern: {
668
+ width: '150px',
669
+ height: '150px',
670
+ padding: '16px',
671
+ logoSize: '48px',
672
+ statusSize: '22px',
673
+ },
674
+ connectButton: {
675
+ width: '120px',
676
+ height: '120px',
677
+ },
678
+ themeSwitcher: {
679
+ indicatorSize: '24px',
680
+ },
681
+ },
682
+ effects: {
683
+ glassmorphism: {
684
+ enabled: true,
685
+ blur: '12px',
686
+ opacity: 0.15,
687
+ border: 'rgba(168, 85, 247, 0.3)',
688
+ },
689
+ animations: {
690
+ enabled: true,
691
+ duration: {
692
+ fast: '150ms',
693
+ normal: '300ms',
694
+ slow: '500ms',
695
+ },
696
+ easing: {
697
+ default: 'cubic-bezier(0.4, 0, 0.2, 1)',
698
+ smooth: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
699
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
700
+ },
701
+ },
702
+ shadows: {
703
+ sm: '0 1px 2px rgba(0, 0, 0, 0.5)',
704
+ md: '0 4px 6px rgba(0, 0, 0, 0.6)',
705
+ lg: '0 10px 15px rgba(0, 0, 0, 0.7)',
706
+ xl: '0 20px 25px rgba(0, 0, 0, 0.8)',
707
+ card: '0px 4px 12px rgba(0, 0, 0, 0.6), 0 0 20px rgba(168, 85, 247, 0.2)',
708
+ cardHover: '0px 4px 24px rgba(168, 85, 247, 0.3), 0 0 30px rgba(168, 85, 247, 0.25)',
709
+ glow: '0 0 20px rgba(168, 85, 247, 0.8)',
710
+ focus: '0 0 0 2px #A855F7, 0 0 8px 2px rgba(168, 85, 247, 0.8)',
711
+ },
712
+ },
713
+ branding: {
714
+ primaryColor: '#A855F7',
715
+ },
716
+ glow: {
717
+ primary: 'rgba(168, 85, 247, 0.4)',
718
+ secondary: 'rgba(168, 85, 247, 0.6)',
719
+ card: 'rgba(168, 85, 247, 0.2)',
720
+ cardHover: 'rgba(168, 85, 247, 0.3)',
721
+ button: 'rgba(168, 85, 247, 0.6)',
722
+ focus: 'rgba(168, 85, 247, 0.8)',
723
+ scrollbar: 'rgba(168, 85, 247, 0.4)',
724
+ },
725
+ gradients: {
726
+ start: 'rgba(168, 85, 247, 0.08)',
727
+ end: 'rgba(168, 85, 247, 0.03)',
728
+ hoverStart: 'rgba(168, 85, 247, 0.15)',
729
+ hoverEnd: 'rgba(168, 85, 247, 0.08)',
730
+ },
731
+ };
732
+
733
+ // Green theme
734
+ export const greenTheme: PortalThemeConfig = {
735
+ mode: 'dark',
736
+ colors: {
737
+ background: {
738
+ primary: '#1a1a1a',
739
+ secondary: '#2a2a2a',
740
+ tertiary: '#3a3a3a',
741
+ accent: 'rgba(34, 197, 94, 0.1)',
742
+ glass: 'rgba(255, 255, 255, 0.05)',
743
+ },
744
+ status: {
745
+ connected: '#22C55E',
746
+ disconnected: '#EF4444',
747
+ warning: '#F59E0B',
748
+ pending: '#8B5CF6',
749
+ error: '#EF4444',
750
+ success: '#22C55E',
751
+ },
752
+ text: {
753
+ primary: '#F8FAFC',
754
+ secondary: '#CBD5E1',
755
+ muted: '#94A3B8',
756
+ inverse: '#1a1a1a',
757
+ },
758
+ border: {
759
+ primary: 'rgba(34, 197, 94, 0.2)',
760
+ secondary: 'rgba(255, 255, 255, 0.1)',
761
+ hover: 'rgba(34, 197, 94, 0.4)',
762
+ focus: 'rgba(34, 197, 94, 0.6)',
763
+ accent: '#22C55E',
764
+ },
765
+ input: {
766
+ background: '#334155',
767
+ border: 'rgba(34, 197, 94, 0.2)',
768
+ borderFocus: '#22C55E',
769
+ text: '#F8FAFC',
770
+ placeholder: '#94A3B8',
771
+ },
772
+ button: {
773
+ primary: {
774
+ background: '#22C55E',
775
+ text: '#FFFFFF',
776
+ hover: '#16A34A',
777
+ active: '#15803D',
778
+ },
779
+ secondary: {
780
+ background: 'transparent',
781
+ text: '#22C55E',
782
+ border: '#22C55E',
783
+ hover: 'rgba(34, 197, 94, 0.1)',
784
+ active: 'rgba(34, 197, 94, 0.2)',
785
+ },
786
+ },
787
+ },
788
+ typography: {
789
+ fontFamily: {
790
+ primary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
791
+ secondary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
792
+ },
793
+ fontSize: {
794
+ xs: '0.75rem',
795
+ sm: '0.875rem',
796
+ base: '1rem',
797
+ lg: '1.125rem',
798
+ xl: '1.25rem',
799
+ '2xl': '1.5rem',
800
+ '3xl': '1.875rem',
801
+ '4xl': '2.25rem',
802
+ },
803
+ fontWeight: {
804
+ normal: 400,
805
+ medium: 500,
806
+ semibold: 600,
807
+ bold: 700,
808
+ extrabold: 800,
809
+ },
810
+ lineHeight: {
811
+ tight: '1.25',
812
+ normal: '1.5',
813
+ relaxed: '1.75',
814
+ },
815
+ },
816
+ spacing: {
817
+ xs: '0.25rem',
818
+ sm: '0.5rem',
819
+ md: '1rem',
820
+ lg: '1.5rem',
821
+ xl: '2rem',
822
+ '2xl': '3rem',
823
+ '3xl': '4rem',
824
+ },
825
+ layout: {
826
+ containerMaxWidth: '1440px',
827
+ gridGap: '1rem',
828
+ cardPadding: '1.5rem',
829
+ borderRadius: {
830
+ sm: '0.25rem',
831
+ md: '0.5rem',
832
+ lg: '0.75rem',
833
+ xl: '1rem',
834
+ '2xl': '1.5rem',
835
+ full: '9999px',
836
+ },
837
+ },
838
+ components: {
839
+ brokerCard: {
840
+ width: '100%',
841
+ height: '180px',
842
+ logoSize: '64px',
843
+ padding: '1.5rem',
844
+ },
845
+ statusIndicator: {
846
+ size: '22px',
847
+ glowIntensity: 0.9,
848
+ },
849
+ modal: {
850
+ background: 'rgba(0, 0, 0, 0.95)',
851
+ backdrop: 'rgba(0, 0, 0, 0.8)',
852
+ },
853
+ brokerCardModern: {
854
+ width: '150px',
855
+ height: '150px',
856
+ padding: '16px',
857
+ logoSize: '48px',
858
+ statusSize: '22px',
859
+ },
860
+ connectButton: {
861
+ width: '120px',
862
+ height: '120px',
863
+ },
864
+ themeSwitcher: {
865
+ indicatorSize: '24px',
866
+ },
867
+ },
868
+ effects: {
869
+ glassmorphism: {
870
+ enabled: true,
871
+ blur: '12px',
872
+ opacity: 0.15,
873
+ border: 'rgba(34, 197, 94, 0.3)',
874
+ },
875
+ animations: {
876
+ enabled: true,
877
+ duration: {
878
+ fast: '150ms',
879
+ normal: '300ms',
880
+ slow: '500ms',
881
+ },
882
+ easing: {
883
+ default: 'cubic-bezier(0.4, 0, 0.2, 1)',
884
+ smooth: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
885
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
886
+ },
887
+ },
888
+ shadows: {
889
+ sm: '0 1px 2px rgba(0, 0, 0, 0.5)',
890
+ md: '0 4px 6px rgba(0, 0, 0, 0.6)',
891
+ lg: '0 10px 15px rgba(0, 0, 0, 0.7)',
892
+ xl: '0 20px 25px rgba(0, 0, 0, 0.8)',
893
+ card: '0px 4px 12px rgba(0, 0, 0, 0.6), 0 0 20px rgba(34, 197, 94, 0.2)',
894
+ cardHover: '0px 4px 24px rgba(34, 197, 94, 0.3), 0 0 30px rgba(34, 197, 94, 0.25)',
895
+ glow: '0 0 20px rgba(34, 197, 94, 0.8)',
896
+ focus: '0 0 0 2px #22C55E, 0 0 8px 2px rgba(34, 197, 94, 0.8)',
897
+ },
898
+ },
899
+ branding: {
900
+ primaryColor: '#22C55E',
901
+ },
902
+ glow: {
903
+ primary: 'rgba(34, 197, 94, 0.4)',
904
+ secondary: 'rgba(34, 197, 94, 0.6)',
905
+ card: 'rgba(34, 197, 94, 0.2)',
906
+ cardHover: 'rgba(34, 197, 94, 0.3)',
907
+ button: 'rgba(34, 197, 94, 0.6)',
908
+ focus: 'rgba(34, 197, 94, 0.8)',
909
+ scrollbar: 'rgba(34, 197, 94, 0.4)',
910
+ },
911
+ gradients: {
912
+ start: 'rgba(34, 197, 94, 0.08)',
913
+ end: 'rgba(34, 197, 94, 0.03)',
914
+ hoverStart: 'rgba(34, 197, 94, 0.15)',
915
+ hoverEnd: 'rgba(34, 197, 94, 0.08)',
916
+ },
917
+ };
918
+
919
+ // Orange theme
920
+ export const orangeTheme: PortalThemeConfig = {
921
+ mode: 'dark',
922
+ colors: {
923
+ background: {
924
+ primary: '#1a1a1a',
925
+ secondary: '#2a2a2a',
926
+ tertiary: '#3a3a3a',
927
+ accent: 'rgba(249, 115, 22, 0.1)',
928
+ glass: 'rgba(255, 255, 255, 0.05)',
929
+ },
930
+ status: {
931
+ connected: '#F97316',
932
+ disconnected: '#EF4444',
933
+ warning: '#F59E0B',
934
+ pending: '#8B5CF6',
935
+ error: '#EF4444',
936
+ success: '#10B981',
937
+ },
938
+ text: {
939
+ primary: '#F8FAFC',
940
+ secondary: '#CBD5E1',
941
+ muted: '#94A3B8',
942
+ inverse: '#1a1a1a',
943
+ },
944
+ border: {
945
+ primary: 'rgba(249, 115, 22, 0.2)',
946
+ secondary: 'rgba(255, 255, 255, 0.1)',
947
+ hover: 'rgba(249, 115, 22, 0.4)',
948
+ focus: 'rgba(249, 115, 22, 0.6)',
949
+ accent: '#F97316',
950
+ },
951
+ input: {
952
+ background: '#334155',
953
+ border: 'rgba(249, 115, 22, 0.2)',
954
+ borderFocus: '#F97316',
955
+ text: '#F8FAFC',
956
+ placeholder: '#94A3B8',
957
+ },
958
+ button: {
959
+ primary: {
960
+ background: '#F97316',
961
+ text: '#FFFFFF',
962
+ hover: '#EA580C',
963
+ active: '#DC2626',
964
+ },
965
+ secondary: {
966
+ background: 'transparent',
967
+ text: '#F97316',
968
+ border: '#F97316',
969
+ hover: 'rgba(249, 115, 22, 0.1)',
970
+ active: 'rgba(249, 115, 22, 0.2)',
971
+ },
972
+ },
973
+ },
974
+ typography: {
975
+ fontFamily: {
976
+ primary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
977
+ secondary: 'Orbitron, Futura, Inter, system-ui, sans-serif',
978
+ },
979
+ fontSize: {
980
+ xs: '0.75rem',
981
+ sm: '0.875rem',
982
+ base: '1rem',
983
+ lg: '1.125rem',
984
+ xl: '1.25rem',
985
+ '2xl': '1.5rem',
986
+ '3xl': '1.875rem',
987
+ '4xl': '2.25rem',
988
+ },
989
+ fontWeight: {
990
+ normal: 400,
991
+ medium: 500,
992
+ semibold: 600,
993
+ bold: 700,
994
+ extrabold: 800,
995
+ },
996
+ lineHeight: {
997
+ tight: '1.25',
998
+ normal: '1.5',
999
+ relaxed: '1.75',
1000
+ },
1001
+ },
1002
+ spacing: {
1003
+ xs: '0.25rem',
1004
+ sm: '0.5rem',
1005
+ md: '1rem',
1006
+ lg: '1.5rem',
1007
+ xl: '2rem',
1008
+ '2xl': '3rem',
1009
+ '3xl': '4rem',
1010
+ },
1011
+ layout: {
1012
+ containerMaxWidth: '1440px',
1013
+ gridGap: '1rem',
1014
+ cardPadding: '1.5rem',
1015
+ borderRadius: {
1016
+ sm: '0.25rem',
1017
+ md: '0.5rem',
1018
+ lg: '0.75rem',
1019
+ xl: '1rem',
1020
+ '2xl': '1.5rem',
1021
+ full: '9999px',
1022
+ },
1023
+ },
1024
+ components: {
1025
+ brokerCard: {
1026
+ width: '100%',
1027
+ height: '180px',
1028
+ logoSize: '64px',
1029
+ padding: '1.5rem',
1030
+ },
1031
+ statusIndicator: {
1032
+ size: '22px',
1033
+ glowIntensity: 0.9,
1034
+ },
1035
+ modal: {
1036
+ background: 'rgba(0, 0, 0, 0.95)',
1037
+ backdrop: 'rgba(0, 0, 0, 0.8)',
1038
+ },
1039
+ brokerCardModern: {
1040
+ width: '150px',
1041
+ height: '150px',
1042
+ padding: '16px',
1043
+ logoSize: '48px',
1044
+ statusSize: '22px',
1045
+ },
1046
+ connectButton: {
1047
+ width: '120px',
1048
+ height: '120px',
1049
+ },
1050
+ themeSwitcher: {
1051
+ indicatorSize: '24px',
1052
+ },
1053
+ },
1054
+ effects: {
1055
+ glassmorphism: {
1056
+ enabled: true,
1057
+ blur: '12px',
1058
+ opacity: 0.15,
1059
+ border: 'rgba(249, 115, 22, 0.3)',
1060
+ },
1061
+ animations: {
1062
+ enabled: true,
1063
+ duration: {
1064
+ fast: '150ms',
1065
+ normal: '300ms',
1066
+ slow: '500ms',
1067
+ },
1068
+ easing: {
1069
+ default: 'cubic-bezier(0.4, 0, 0.2, 1)',
1070
+ smooth: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
1071
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
1072
+ },
1073
+ },
1074
+ shadows: {
1075
+ sm: '0 1px 2px rgba(0, 0, 0, 0.5)',
1076
+ md: '0 4px 6px rgba(0, 0, 0, 0.6)',
1077
+ lg: '0 10px 15px rgba(0, 0, 0, 0.7)',
1078
+ xl: '0 20px 25px rgba(0, 0, 0, 0.8)',
1079
+ card: '0px 4px 12px rgba(0, 0, 0, 0.6), 0 0 20px rgba(249, 115, 22, 0.2)',
1080
+ cardHover: '0px 4px 24px rgba(249, 115, 22, 0.3), 0 0 30px rgba(249, 115, 22, 0.25)',
1081
+ glow: '0 0 20px rgba(249, 115, 22, 0.8)',
1082
+ focus: '0 0 0 2px #F97316, 0 0 8px 2px rgba(249, 115, 22, 0.8)',
1083
+ },
1084
+ },
1085
+ branding: {
1086
+ primaryColor: '#F97316',
1087
+ },
1088
+ glow: {
1089
+ primary: 'rgba(249, 115, 22, 0.4)',
1090
+ secondary: 'rgba(249, 115, 22, 0.6)',
1091
+ card: 'rgba(249, 115, 22, 0.2)',
1092
+ cardHover: 'rgba(249, 115, 22, 0.3)',
1093
+ button: 'rgba(249, 115, 22, 0.6)',
1094
+ focus: 'rgba(249, 115, 22, 0.8)',
1095
+ scrollbar: 'rgba(249, 115, 22, 0.4)',
1096
+ },
1097
+ gradients: {
1098
+ start: 'rgba(249, 115, 22, 0.08)',
1099
+ end: 'rgba(249, 115, 22, 0.03)',
1100
+ hoverStart: 'rgba(249, 115, 22, 0.15)',
1101
+ hoverEnd: 'rgba(249, 115, 22, 0.08)',
1102
+ },
1103
+ };
1104
+
1105
+ // StockAlgos theme - Clean professional theme matching StockAlgos website
1106
+ export const stockAlgosTheme: PortalThemeConfig = {
1107
+ mode: 'light', // Light mode like StockAlgos website
1108
+ colors: {
1109
+ background: {
1110
+ primary: '#FFFFFF', // Clean white background
1111
+ secondary: '#FFFFFF', // Also white for consistency
1112
+ tertiary: '#F8FAFC', // Very light gray for subtle elevation
1113
+ accent: 'rgba(79, 70, 229, 0.05)', // Very subtle blue accent
1114
+ glass: '#FFFFFF', // Pure white, no transparency
1115
+ },
1116
+ status: {
1117
+ connected: '#10B981', // Green for positive/connected
1118
+ disconnected: '#EF4444', // Red for negative/disconnected
1119
+ warning: '#F59E0B', // Amber for warnings
1120
+ pending: '#6366F1', // Indigo for pending states
1121
+ error: '#EF4444', // Red for errors
1122
+ success: '#10B981', // Green for success
1123
+ },
1124
+ text: {
1125
+ primary: '#111827', // Very dark text for maximum contrast
1126
+ secondary: '#374151', // Dark gray for secondary text
1127
+ muted: '#6B7280', // Medium gray for muted text
1128
+ inverse: '#FFFFFF', // White for text on dark backgrounds
1129
+ },
1130
+ border: {
1131
+ primary: '#E5E7EB', // Light gray border
1132
+ secondary: '#F3F4F6', // Very light gray border
1133
+ hover: '#D1D5DB', // Slightly darker on hover
1134
+ focus: '#4F46E5', // Blue focus border
1135
+ accent: '#4F46E5', // Blue accent border
1136
+ },
1137
+ input: {
1138
+ background: '#FFFFFF', // White input background
1139
+ border: '#D1D5DB', // Slightly more visible light gray border
1140
+ borderFocus: '#4F46E5', // Blue focus border
1141
+ text: '#111827', // Darker text for better contrast
1142
+ placeholder: '#6B7280', // Darker placeholder for visibility
1143
+ },
1144
+ button: {
1145
+ primary: {
1146
+ background: '#4F46E5', // Blue primary button
1147
+ text: '#FFFFFF', // White text
1148
+ hover: '#4338CA', // Darker blue on hover
1149
+ active: '#3730A3', // Even darker on active
1150
+ },
1151
+ secondary: {
1152
+ background: '#FFFFFF', // White background
1153
+ text: '#4F46E5', // Blue text
1154
+ border: '#E5E7EB', // Light gray border
1155
+ hover: '#F8FAFC', // Very light gray on hover
1156
+ active: '#F1F5F9', // Light gray on active
1157
+ },
1158
+ },
1159
+ },
1160
+ typography: {
1161
+ fontFamily: {
1162
+ primary: 'Inter, system-ui, -apple-system, sans-serif', // Clean, modern font like StockAlgos
1163
+ secondary: 'Inter, system-ui, -apple-system, sans-serif',
1164
+ },
1165
+ fontSize: {
1166
+ xs: '0.75rem', // 12px
1167
+ sm: '0.875rem', // 14px
1168
+ base: '1rem', // 16px
1169
+ lg: '1.125rem', // 18px
1170
+ xl: '1.25rem', // 20px
1171
+ '2xl': '1.5rem', // 24px
1172
+ '3xl': '1.875rem', // 30px
1173
+ '4xl': '2.25rem', // 36px
1174
+ },
1175
+ fontWeight: {
1176
+ normal: 400,
1177
+ medium: 500,
1178
+ semibold: 600,
1179
+ bold: 700,
1180
+ extrabold: 800,
1181
+ },
1182
+ lineHeight: {
1183
+ tight: '1.25',
1184
+ normal: '1.5',
1185
+ relaxed: '1.75',
1186
+ },
1187
+ },
1188
+ spacing: {
1189
+ xs: '0.25rem', // 4px
1190
+ sm: '0.5rem', // 8px
1191
+ md: '1rem', // 16px
1192
+ lg: '1.5rem', // 24px
1193
+ xl: '2rem', // 32px
1194
+ '2xl': '3rem', // 48px
1195
+ '3xl': '4rem', // 64px
1196
+ },
1197
+ layout: {
1198
+ containerMaxWidth: '1440px',
1199
+ gridGap: '1rem',
1200
+ cardPadding: '1.5rem',
1201
+ borderRadius: {
1202
+ sm: '0.25rem', // 4px
1203
+ md: '0.5rem', // 8px
1204
+ lg: '0.75rem', // 12px
1205
+ xl: '1rem', // 16px
1206
+ '2xl': '1.5rem', // 24px
1207
+ full: '9999px',
1208
+ },
1209
+ },
1210
+ components: {
1211
+ brokerCard: {
1212
+ width: '100%',
1213
+ height: '180px',
1214
+ logoSize: '64px',
1215
+ padding: '1.5rem',
1216
+ },
1217
+ statusIndicator: {
1218
+ size: '22px',
1219
+ glowIntensity: 0.1, // Minimal glow for clean look
1220
+ },
1221
+ modal: {
1222
+ background: '#FFFFFF', // Pure white modal background
1223
+ backdrop: 'rgba(0, 0, 0, 0.4)', // Lighter backdrop
1224
+ },
1225
+ brokerCardModern: {
1226
+ width: '150px',
1227
+ height: '150px',
1228
+ padding: '16px',
1229
+ logoSize: '48px',
1230
+ statusSize: '22px',
1231
+ },
1232
+ connectButton: {
1233
+ width: '120px',
1234
+ height: '120px',
1235
+ },
1236
+ themeSwitcher: {
1237
+ indicatorSize: '24px',
1238
+ },
1239
+ },
1240
+ effects: {
1241
+ glassmorphism: {
1242
+ enabled: false, // Disable glass effects for clean look
1243
+ blur: '0px',
1244
+ opacity: 0,
1245
+ border: 'rgba(0, 0, 0, 0.1)',
1246
+ },
1247
+ animations: {
1248
+ enabled: true,
1249
+ duration: {
1250
+ fast: '150ms',
1251
+ normal: '200ms', // Faster, more subtle animations
1252
+ slow: '300ms',
1253
+ },
1254
+ easing: {
1255
+ default: 'cubic-bezier(0.4, 0, 0.2, 1)',
1256
+ smooth: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
1257
+ bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
1258
+ },
1259
+ },
1260
+ shadows: {
1261
+ sm: '0 1px 2px rgba(0, 0, 0, 0.05)', // Very subtle shadows
1262
+ md: '0 4px 6px rgba(0, 0, 0, 0.07)',
1263
+ lg: '0 10px 15px rgba(0, 0, 0, 0.1)',
1264
+ xl: '0 20px 25px rgba(0, 0, 0, 0.1)',
1265
+ card: '0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06)', // Clean card shadow
1266
+ cardHover: '0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06)', // Subtle hover shadow
1267
+ glow: '0 0 0px transparent', // No glow effects
1268
+ focus: '0 0 0 3px rgba(79, 70, 229, 0.1)', // Subtle focus ring
1269
+ },
1270
+ },
1271
+ branding: {
1272
+ logo: '/stockalgos-logo.png', // Custom logo path
1273
+ companyName: 'StockAlgos', // Company name
1274
+ favicon: '/stockalgos-favicon.ico', // Custom favicon
1275
+ primaryColor: '#4F46E5', // Indigo brand color
1276
+ },
1277
+
1278
+ // Minimal glow effects
1279
+ glow: {
1280
+ primary: 'transparent',
1281
+ secondary: 'transparent',
1282
+ card: 'transparent',
1283
+ cardHover: 'rgba(79, 70, 229, 0.05)', // Very subtle
1284
+ button: 'transparent',
1285
+ focus: 'rgba(79, 70, 229, 0.1)',
1286
+ scrollbar: 'transparent',
1287
+ },
1288
+
1289
+ // Minimal gradients
1290
+ gradients: {
1291
+ start: 'rgba(79, 70, 229, 0.02)',
1292
+ end: 'rgba(79, 70, 229, 0.01)',
1293
+ hoverStart: 'rgba(79, 70, 229, 0.05)',
1294
+ hoverEnd: 'rgba(79, 70, 229, 0.02)',
1295
+ },
1296
+ };
1297
+
1298
+ // Theme preset mapping
1299
+ export const portalThemePresets: Record<string, PortalThemeConfig> = {
1300
+ dark: darkTheme,
1301
+ light: lightTheme,
1302
+ corporateBlue: corporateBlueTheme,
1303
+ purple: purpleTheme,
1304
+ green: greenTheme,
1305
+ orange: orangeTheme,
1306
+ stockAlgos: stockAlgosTheme,
1307
+ };