snow-flow 3.4.36 → 3.4.39

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 (49) hide show
  1. package/README.md +412 -287
  2. package/dist/cli/deploy-artifact.js +2 -2
  3. package/dist/mcp/servicenow-deployment-mcp.js +1 -1
  4. package/dist/mcp/servicenow-mcp-server.js +2 -2
  5. package/dist/queen/agent-factory.js +134 -52
  6. package/dist/queen/servicenow-queen.d.ts +127 -2
  7. package/dist/queen/servicenow-queen.js +978 -618
  8. package/dist/services/widget-deployment-service.d.ts +1 -1
  9. package/dist/services/widget-deployment-service.js +1 -1
  10. package/dist/templates/claude-md-template.d.ts +1 -1
  11. package/dist/templates/claude-md-template.js +2 -2
  12. package/dist/types/servicenow.types.d.ts +1 -1
  13. package/dist/utils/dependency-detector.d.ts +1 -1
  14. package/dist/utils/dependency-detector.js +1 -1
  15. package/dist/utils/servicenow-client.d.ts +1 -1
  16. package/dist/utils/servicenow-client.js +4 -8
  17. package/package.json +1 -1
  18. package/website/components/README.md +419 -0
  19. package/website/components/code-display/CodeDisplay.css +583 -0
  20. package/website/components/code-display/CodeDisplay.html +200 -0
  21. package/website/components/code-display/CodeDisplay.js +375 -0
  22. package/website/components/code-display/CodeDisplay.jsx +268 -0
  23. package/website/components/demo/ComponentLibraryDemo.html +845 -0
  24. package/website/components/feature-cards/FeatureCards.css +573 -0
  25. package/website/components/feature-cards/FeatureCards.html +247 -0
  26. package/website/components/feature-cards/FeatureCards.js +382 -0
  27. package/website/components/feature-cards/FeatureCards.jsx +235 -0
  28. package/website/components/hero/Hero.css +558 -0
  29. package/website/components/hero/Hero.html +98 -0
  30. package/website/components/hero/Hero.js +415 -0
  31. package/website/components/hero/Hero.jsx +214 -0
  32. package/website/components/interactive/InteractiveElements.css +776 -0
  33. package/website/components/interactive/InteractiveElements.html +283 -0
  34. package/website/components/interactive/InteractiveElements.js +489 -0
  35. package/website/components/interactive/InteractiveElements.jsx +444 -0
  36. package/website/components/layout/LayoutComponents.css +697 -0
  37. package/website/components/layout/LayoutComponents.html +374 -0
  38. package/website/components/layout/LayoutComponents.js +447 -0
  39. package/website/components/layout/LayoutComponents.jsx +379 -0
  40. package/website/components/navigation/Navigation.css +383 -0
  41. package/website/components/navigation/Navigation.html +89 -0
  42. package/website/components/navigation/Navigation.js +248 -0
  43. package/website/components/navigation/Navigation.jsx +124 -0
  44. package/website/css/animations.css +854 -0
  45. package/website/css/style.css +916 -948
  46. package/website/index.html +394 -424
  47. package/website/js/animations.js +707 -0
  48. package/website/js/main.js +310 -383
  49. package/website/mcp-servers.html +310 -0
@@ -0,0 +1,854 @@
1
+ /* =========================================
2
+ SNOW-FLOW ADVANCED ANIMATION SYSTEM
3
+ Sophisticated animations for modern web experience
4
+ ========================================= */
5
+
6
+ /* ============ KEYFRAME DEFINITIONS ============ */
7
+
8
+ @keyframes fadeInUp {
9
+ from {
10
+ opacity: 0;
11
+ transform: translateY(60px);
12
+ }
13
+ to {
14
+ opacity: 1;
15
+ transform: translateY(0);
16
+ }
17
+ }
18
+
19
+ @keyframes fadeInDown {
20
+ from {
21
+ opacity: 0;
22
+ transform: translateY(-60px);
23
+ }
24
+ to {
25
+ opacity: 1;
26
+ transform: translateY(0);
27
+ }
28
+ }
29
+
30
+ @keyframes fadeInLeft {
31
+ from {
32
+ opacity: 0;
33
+ transform: translateX(-60px);
34
+ }
35
+ to {
36
+ opacity: 1;
37
+ transform: translateX(0);
38
+ }
39
+ }
40
+
41
+ @keyframes fadeInRight {
42
+ from {
43
+ opacity: 0;
44
+ transform: translateX(60px);
45
+ }
46
+ to {
47
+ opacity: 1;
48
+ transform: translateX(0);
49
+ }
50
+ }
51
+
52
+ @keyframes scaleIn {
53
+ from {
54
+ opacity: 0;
55
+ transform: scale(0.8);
56
+ }
57
+ to {
58
+ opacity: 1;
59
+ transform: scale(1);
60
+ }
61
+ }
62
+
63
+ @keyframes slideInFromBottom {
64
+ from {
65
+ opacity: 0;
66
+ transform: translateY(100px) scale(0.95);
67
+ }
68
+ to {
69
+ opacity: 1;
70
+ transform: translateY(0) scale(1);
71
+ }
72
+ }
73
+
74
+ @keyframes slideInFromTop {
75
+ from {
76
+ opacity: 0;
77
+ transform: translateY(-100px) scale(0.95);
78
+ }
79
+ to {
80
+ opacity: 1;
81
+ transform: translateY(0) scale(1);
82
+ }
83
+ }
84
+
85
+ /* Parallax and background animations */
86
+ @keyframes parallaxFloat {
87
+ 0%, 100% {
88
+ transform: translateY(0px) translateX(0px) rotate(0deg);
89
+ }
90
+ 25% {
91
+ transform: translateY(-20px) translateX(10px) rotate(1deg);
92
+ }
93
+ 50% {
94
+ transform: translateY(-10px) translateX(-5px) rotate(0deg);
95
+ }
96
+ 75% {
97
+ transform: translateY(-30px) translateX(-10px) rotate(-1deg);
98
+ }
99
+ }
100
+
101
+ @keyframes gradientShift {
102
+ 0% {
103
+ background-position: 0% 50%;
104
+ }
105
+ 50% {
106
+ background-position: 100% 50%;
107
+ }
108
+ 100% {
109
+ background-position: 0% 50%;
110
+ }
111
+ }
112
+
113
+ @keyframes textGlow {
114
+ 0%, 100% {
115
+ text-shadow: 0 0 20px rgba(0, 102, 204, 0.3);
116
+ }
117
+ 50% {
118
+ text-shadow: 0 0 40px rgba(0, 212, 255, 0.5), 0 0 60px rgba(0, 102, 204, 0.3);
119
+ }
120
+ }
121
+
122
+ /* Loading animations */
123
+ @keyframes shimmer {
124
+ 0% {
125
+ background-position: -468px 0;
126
+ }
127
+ 100% {
128
+ background-position: 468px 0;
129
+ }
130
+ }
131
+
132
+ @keyframes pulse {
133
+ 0%, 100% {
134
+ transform: scale(1);
135
+ opacity: 1;
136
+ }
137
+ 50% {
138
+ transform: scale(1.05);
139
+ opacity: 0.8;
140
+ }
141
+ }
142
+
143
+ @keyframes bounce {
144
+ 0%, 20%, 53%, 80%, 100% {
145
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
146
+ transform: translate3d(0, 0, 0);
147
+ }
148
+ 40%, 43% {
149
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
150
+ transform: translate3d(0, -30px, 0);
151
+ }
152
+ 70% {
153
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
154
+ transform: translate3d(0, -15px, 0);
155
+ }
156
+ 90% {
157
+ transform: translate3d(0, -4px, 0);
158
+ }
159
+ }
160
+
161
+ @keyframes ripple {
162
+ 0% {
163
+ transform: scale(0);
164
+ opacity: 1;
165
+ }
166
+ 100% {
167
+ transform: scale(4);
168
+ opacity: 0;
169
+ }
170
+ }
171
+
172
+ @keyframes rotate {
173
+ from {
174
+ transform: rotate(0deg);
175
+ }
176
+ to {
177
+ transform: rotate(360deg);
178
+ }
179
+ }
180
+
181
+ @keyframes morphing {
182
+ 0%, 100% {
183
+ border-radius: 50% 50% 50% 50% / 50% 50% 50% 50%;
184
+ }
185
+ 25% {
186
+ border-radius: 50% 50% 50% 50% / 30% 70% 70% 30%;
187
+ }
188
+ 50% {
189
+ border-radius: 50% 50% 50% 50% / 70% 30% 30% 70%;
190
+ }
191
+ 75% {
192
+ border-radius: 30% 70% 70% 30% / 50% 50% 50% 50%;
193
+ }
194
+ }
195
+
196
+ /* Progress and loading bars */
197
+ @keyframes progressFill {
198
+ from {
199
+ width: 0%;
200
+ }
201
+ to {
202
+ width: 100%;
203
+ }
204
+ }
205
+
206
+ @keyframes wave {
207
+ 0% {
208
+ transform: translateX(-100%);
209
+ }
210
+ 100% {
211
+ transform: translateX(100%);
212
+ }
213
+ }
214
+
215
+ /* Particle effects */
216
+ @keyframes float1 {
217
+ 0%, 100% {
218
+ transform: translateY(0px) rotate(0deg);
219
+ }
220
+ 50% {
221
+ transform: translateY(-20px) rotate(180deg);
222
+ }
223
+ }
224
+
225
+ @keyframes float2 {
226
+ 0%, 100% {
227
+ transform: translateY(0px) rotate(0deg);
228
+ }
229
+ 50% {
230
+ transform: translateY(-40px) rotate(360deg);
231
+ }
232
+ }
233
+
234
+ @keyframes float3 {
235
+ 0%, 100% {
236
+ transform: translateY(0px) rotate(0deg);
237
+ }
238
+ 50% {
239
+ transform: translateY(-60px) rotate(270deg);
240
+ }
241
+ }
242
+
243
+ /* ============ ENTRANCE ANIMATIONS ============ */
244
+
245
+ .animate-fade-in-up {
246
+ animation: fadeInUp 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
247
+ }
248
+
249
+ .animate-fade-in-down {
250
+ animation: fadeInDown 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
251
+ }
252
+
253
+ .animate-fade-in-left {
254
+ animation: fadeInLeft 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
255
+ }
256
+
257
+ .animate-fade-in-right {
258
+ animation: fadeInRight 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
259
+ }
260
+
261
+ .animate-scale-in {
262
+ animation: scaleIn 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
263
+ }
264
+
265
+ .animate-slide-in-bottom {
266
+ animation: slideInFromBottom 0.9s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
267
+ }
268
+
269
+ .animate-slide-in-top {
270
+ animation: slideInFromTop 0.9s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
271
+ }
272
+
273
+ /* Stagger animations for lists */
274
+ .stagger-animation > * {
275
+ opacity: 0;
276
+ transform: translateY(30px);
277
+ animation: fadeInUp 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
278
+ }
279
+
280
+ .stagger-animation > *:nth-child(1) { animation-delay: 0.1s; }
281
+ .stagger-animation > *:nth-child(2) { animation-delay: 0.2s; }
282
+ .stagger-animation > *:nth-child(3) { animation-delay: 0.3s; }
283
+ .stagger-animation > *:nth-child(4) { animation-delay: 0.4s; }
284
+ .stagger-animation > *:nth-child(5) { animation-delay: 0.5s; }
285
+ .stagger-animation > *:nth-child(6) { animation-delay: 0.6s; }
286
+ .stagger-animation > *:nth-child(7) { animation-delay: 0.7s; }
287
+ .stagger-animation > *:nth-child(8) { animation-delay: 0.8s; }
288
+
289
+ /* ============ SCROLL ANIMATIONS ============ */
290
+
291
+ /* Parallax hero section */
292
+ .hero-parallax {
293
+ position: relative;
294
+ overflow: hidden;
295
+ }
296
+
297
+ .hero-parallax::before {
298
+ content: '';
299
+ position: absolute;
300
+ top: -50%;
301
+ left: -50%;
302
+ width: 200%;
303
+ height: 200%;
304
+ background: radial-gradient(circle, rgba(102, 126, 234, 0.1) 0%, transparent 70%);
305
+ animation: parallaxFloat 20s ease-in-out infinite;
306
+ pointer-events: none;
307
+ }
308
+
309
+ .hero-parallax::after {
310
+ content: '';
311
+ position: absolute;
312
+ top: 0;
313
+ left: 0;
314
+ right: 0;
315
+ bottom: 0;
316
+ background: linear-gradient(135deg, rgba(0, 102, 204, 0.05) 0%, rgba(0, 212, 255, 0.05) 100%);
317
+ animation: gradientShift 10s ease infinite;
318
+ background-size: 400% 400%;
319
+ pointer-events: none;
320
+ }
321
+
322
+ /* Scroll reveal animations */
323
+ .scroll-reveal {
324
+ opacity: 0;
325
+ transform: translateY(60px);
326
+ transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
327
+ }
328
+
329
+ .scroll-reveal.revealed {
330
+ opacity: 1;
331
+ transform: translateY(0);
332
+ }
333
+
334
+ .scroll-reveal-left {
335
+ opacity: 0;
336
+ transform: translateX(-60px);
337
+ transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
338
+ }
339
+
340
+ .scroll-reveal-left.revealed {
341
+ opacity: 1;
342
+ transform: translateX(0);
343
+ }
344
+
345
+ .scroll-reveal-right {
346
+ opacity: 0;
347
+ transform: translateX(60px);
348
+ transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
349
+ }
350
+
351
+ .scroll-reveal-right.revealed {
352
+ opacity: 1;
353
+ transform: translateX(0);
354
+ }
355
+
356
+ /* Progress indicators */
357
+ .scroll-progress {
358
+ position: fixed;
359
+ top: 0;
360
+ left: 0;
361
+ width: 100%;
362
+ height: 4px;
363
+ background: rgba(0, 102, 204, 0.1);
364
+ z-index: 9999;
365
+ }
366
+
367
+ .scroll-progress::before {
368
+ content: '';
369
+ position: absolute;
370
+ top: 0;
371
+ left: 0;
372
+ height: 100%;
373
+ background: linear-gradient(90deg, #0066cc, #00d4ff);
374
+ transition: width 0.1s ease;
375
+ box-shadow: 0 0 10px rgba(0, 102, 204, 0.3);
376
+ }
377
+
378
+ /* Sticky elements with smooth transitions */
379
+ .sticky-fade {
380
+ transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
381
+ }
382
+
383
+ .sticky-fade.stuck {
384
+ backdrop-filter: blur(20px);
385
+ background: rgba(255, 255, 255, 0.95);
386
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
387
+ }
388
+
389
+ /* ============ HOVER EFFECTS ============ */
390
+
391
+ /* Button gradient shifts */
392
+ .btn-animated {
393
+ position: relative;
394
+ overflow: hidden;
395
+ background: linear-gradient(45deg, #0066cc, #00d4ff, #0066cc);
396
+ background-size: 300% 300%;
397
+ transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
398
+ }
399
+
400
+ .btn-animated:hover {
401
+ animation: gradientShift 2s ease infinite;
402
+ transform: translateY(-2px);
403
+ box-shadow: 0 10px 30px rgba(0, 102, 204, 0.3);
404
+ }
405
+
406
+ .btn-animated::before {
407
+ content: '';
408
+ position: absolute;
409
+ top: 0;
410
+ left: -100%;
411
+ width: 100%;
412
+ height: 100%;
413
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
414
+ transition: left 0.5s;
415
+ }
416
+
417
+ .btn-animated:hover::before {
418
+ left: 100%;
419
+ }
420
+
421
+ /* Card lift and shadow effects */
422
+ .card-hover {
423
+ transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
424
+ }
425
+
426
+ .card-hover:hover {
427
+ transform: translateY(-15px) rotateX(5deg);
428
+ box-shadow:
429
+ 0 20px 40px rgba(0, 0, 0, 0.1),
430
+ 0 0 0 1px rgba(0, 102, 204, 0.1);
431
+ }
432
+
433
+ .card-hover:hover::before {
434
+ content: '';
435
+ position: absolute;
436
+ top: 0;
437
+ left: 0;
438
+ right: 0;
439
+ bottom: 0;
440
+ background: linear-gradient(135deg, rgba(0, 102, 204, 0.02) 0%, rgba(0, 212, 255, 0.02) 100%);
441
+ border-radius: inherit;
442
+ pointer-events: none;
443
+ }
444
+
445
+ /* Text gradient animations */
446
+ .text-gradient-animated {
447
+ background: linear-gradient(45deg, #0066cc, #00d4ff, #667eea, #764ba2);
448
+ background-size: 400% 400%;
449
+ -webkit-background-clip: text;
450
+ -webkit-text-fill-color: transparent;
451
+ background-clip: text;
452
+ animation: gradientShift 4s ease infinite;
453
+ }
454
+
455
+ .text-glow:hover {
456
+ animation: textGlow 2s ease infinite;
457
+ }
458
+
459
+ /* Icon rotations and scaling */
460
+ .icon-rotate:hover {
461
+ animation: rotate 0.6s ease;
462
+ }
463
+
464
+ .icon-scale:hover {
465
+ transform: scale(1.2);
466
+ transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
467
+ }
468
+
469
+ .icon-morph {
470
+ transition: all 0.3s ease;
471
+ }
472
+
473
+ .icon-morph:hover {
474
+ animation: morphing 2s ease infinite;
475
+ }
476
+
477
+ /* ============ LOADING STATES ============ */
478
+
479
+ /* Skeleton screens with shimmer */
480
+ .skeleton {
481
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
482
+ background-size: 200% 100%;
483
+ animation: shimmer 2s infinite;
484
+ }
485
+
486
+ .skeleton-text {
487
+ height: 1em;
488
+ border-radius: 4px;
489
+ margin-bottom: 0.5em;
490
+ }
491
+
492
+ .skeleton-text:last-child {
493
+ width: 75%;
494
+ }
495
+
496
+ .skeleton-avatar {
497
+ width: 60px;
498
+ height: 60px;
499
+ border-radius: 50%;
500
+ }
501
+
502
+ .skeleton-card {
503
+ width: 100%;
504
+ height: 200px;
505
+ border-radius: 8px;
506
+ }
507
+
508
+ /* Pulse effects */
509
+ .loading-pulse {
510
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
511
+ }
512
+
513
+ /* Progress bars with gradient fill */
514
+ .progress-bar {
515
+ width: 100%;
516
+ height: 8px;
517
+ background: rgba(0, 0, 0, 0.1);
518
+ border-radius: 4px;
519
+ overflow: hidden;
520
+ }
521
+
522
+ .progress-fill {
523
+ height: 100%;
524
+ background: linear-gradient(90deg, #0066cc, #00d4ff);
525
+ border-radius: 4px;
526
+ animation: progressFill 2s ease forwards;
527
+ position: relative;
528
+ }
529
+
530
+ .progress-fill::after {
531
+ content: '';
532
+ position: absolute;
533
+ top: 0;
534
+ left: 0;
535
+ bottom: 0;
536
+ right: 0;
537
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5), transparent);
538
+ animation: wave 2s ease-in-out infinite;
539
+ }
540
+
541
+ /* Spinner variations */
542
+ .spinner-dots {
543
+ display: inline-block;
544
+ position: relative;
545
+ width: 40px;
546
+ height: 40px;
547
+ }
548
+
549
+ .spinner-dots div {
550
+ position: absolute;
551
+ width: 6px;
552
+ height: 6px;
553
+ border-radius: 50%;
554
+ background: #0066cc;
555
+ animation: pulse 1.2s linear infinite;
556
+ }
557
+
558
+ .spinner-dots div:nth-child(1) { top: 17px; left: 17px; animation-delay: 0s; }
559
+ .spinner-dots div:nth-child(2) { top: 17px; left: 17px; animation-delay: -0.1s; }
560
+ .spinner-dots div:nth-child(3) { top: 17px; left: 17px; animation-delay: -0.2s; }
561
+
562
+ .spinner-rotate {
563
+ width: 40px;
564
+ height: 40px;
565
+ border: 4px solid rgba(0, 102, 204, 0.1);
566
+ border-top: 4px solid #0066cc;
567
+ border-radius: 50%;
568
+ animation: rotate 1s linear infinite;
569
+ }
570
+
571
+ /* ============ MICRO-INTERACTIONS ============ */
572
+
573
+ /* Click ripple effects */
574
+ .ripple-effect {
575
+ position: relative;
576
+ overflow: hidden;
577
+ }
578
+
579
+ .ripple-effect::before {
580
+ content: '';
581
+ position: absolute;
582
+ top: 50%;
583
+ left: 50%;
584
+ width: 0;
585
+ height: 0;
586
+ border-radius: 50%;
587
+ background: rgba(255, 255, 255, 0.5);
588
+ transform: translate(-50%, -50%);
589
+ transition: width 0.3s, height 0.3s;
590
+ }
591
+
592
+ .ripple-effect:active::before {
593
+ width: 200px;
594
+ height: 200px;
595
+ animation: ripple 0.3s linear;
596
+ }
597
+
598
+ /* Form field focus animations */
599
+ .input-animated {
600
+ position: relative;
601
+ transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
602
+ }
603
+
604
+ .input-animated:focus {
605
+ transform: scale(1.02);
606
+ box-shadow:
607
+ 0 0 0 3px rgba(0, 102, 204, 0.1),
608
+ 0 10px 30px rgba(0, 102, 204, 0.1);
609
+ }
610
+
611
+ .input-animated::before {
612
+ content: '';
613
+ position: absolute;
614
+ bottom: 0;
615
+ left: 50%;
616
+ width: 0;
617
+ height: 2px;
618
+ background: linear-gradient(90deg, #0066cc, #00d4ff);
619
+ transition: all 0.3s ease;
620
+ transform: translateX(-50%);
621
+ }
622
+
623
+ .input-animated:focus::before {
624
+ width: 100%;
625
+ }
626
+
627
+ /* Toggle transitions */
628
+ .toggle-switch {
629
+ position: relative;
630
+ width: 60px;
631
+ height: 30px;
632
+ background: rgba(0, 0, 0, 0.1);
633
+ border-radius: 15px;
634
+ transition: all 0.3s ease;
635
+ cursor: pointer;
636
+ }
637
+
638
+ .toggle-switch::before {
639
+ content: '';
640
+ position: absolute;
641
+ top: 3px;
642
+ left: 3px;
643
+ width: 24px;
644
+ height: 24px;
645
+ background: white;
646
+ border-radius: 50%;
647
+ transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
648
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
649
+ }
650
+
651
+ .toggle-switch.active {
652
+ background: linear-gradient(45deg, #0066cc, #00d4ff);
653
+ }
654
+
655
+ .toggle-switch.active::before {
656
+ left: 33px;
657
+ transform: scale(1.1);
658
+ }
659
+
660
+ /* Tooltip appearances */
661
+ .tooltip {
662
+ position: relative;
663
+ cursor: help;
664
+ }
665
+
666
+ .tooltip::before {
667
+ content: attr(data-tooltip);
668
+ position: absolute;
669
+ bottom: 100%;
670
+ left: 50%;
671
+ transform: translateX(-50%) translateY(-10px);
672
+ background: rgba(0, 0, 0, 0.9);
673
+ color: white;
674
+ padding: 8px 12px;
675
+ border-radius: 6px;
676
+ font-size: 0.9em;
677
+ white-space: nowrap;
678
+ opacity: 0;
679
+ pointer-events: none;
680
+ transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
681
+ z-index: 1000;
682
+ }
683
+
684
+ .tooltip::after {
685
+ content: '';
686
+ position: absolute;
687
+ bottom: 100%;
688
+ left: 50%;
689
+ transform: translateX(-50%) translateY(-2px);
690
+ border: 6px solid transparent;
691
+ border-top-color: rgba(0, 0, 0, 0.9);
692
+ opacity: 0;
693
+ transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
694
+ }
695
+
696
+ .tooltip:hover::before,
697
+ .tooltip:hover::after {
698
+ opacity: 1;
699
+ transform: translateX(-50%) translateY(0);
700
+ }
701
+
702
+ /* ============ BACKGROUND ANIMATIONS ============ */
703
+
704
+ /* Gradient mesh movements */
705
+ .gradient-mesh {
706
+ position: absolute;
707
+ top: 0;
708
+ left: 0;
709
+ width: 100%;
710
+ height: 100%;
711
+ background:
712
+ radial-gradient(circle at 20% 30%, rgba(102, 126, 234, 0.3) 0%, transparent 50%),
713
+ radial-gradient(circle at 80% 70%, rgba(0, 212, 255, 0.3) 0%, transparent 50%),
714
+ radial-gradient(circle at 60% 20%, rgba(118, 75, 162, 0.2) 0%, transparent 50%);
715
+ animation: parallaxFloat 30s ease-in-out infinite;
716
+ pointer-events: none;
717
+ }
718
+
719
+ /* Particle effects */
720
+ .particles {
721
+ position: absolute;
722
+ top: 0;
723
+ left: 0;
724
+ width: 100%;
725
+ height: 100%;
726
+ overflow: hidden;
727
+ pointer-events: none;
728
+ }
729
+
730
+ .particle {
731
+ position: absolute;
732
+ background: rgba(0, 102, 204, 0.1);
733
+ border-radius: 50%;
734
+ }
735
+
736
+ .particle-1 {
737
+ width: 4px;
738
+ height: 4px;
739
+ top: 20%;
740
+ left: 10%;
741
+ animation: float1 15s ease-in-out infinite;
742
+ }
743
+
744
+ .particle-2 {
745
+ width: 6px;
746
+ height: 6px;
747
+ top: 60%;
748
+ left: 80%;
749
+ animation: float2 20s ease-in-out infinite;
750
+ }
751
+
752
+ .particle-3 {
753
+ width: 8px;
754
+ height: 8px;
755
+ top: 40%;
756
+ left: 60%;
757
+ animation: float3 25s ease-in-out infinite;
758
+ }
759
+
760
+ /* Wave patterns */
761
+ .wave-bg {
762
+ position: absolute;
763
+ bottom: 0;
764
+ left: 0;
765
+ width: 100%;
766
+ height: 60px;
767
+ background: url("data:image/svg+xml,%3Csvg viewBox='0 0 1200 120' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0,60 C300,100 600,20 900,60 C1050,80 1150,40 1200,60 L1200,120 L0,120 Z' fill='rgba(0,102,204,0.1)'/%3E%3C/svg%3E") repeat-x;
768
+ animation: wave 10s linear infinite;
769
+ }
770
+
771
+ /* Noise textures */
772
+ .noise-overlay {
773
+ position: absolute;
774
+ top: 0;
775
+ left: 0;
776
+ width: 100%;
777
+ height: 100%;
778
+ background: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E");
779
+ pointer-events: none;
780
+ animation: parallaxFloat 40s linear infinite reverse;
781
+ }
782
+
783
+ /* ============ PERFORMANCE OPTIMIZATIONS ============ */
784
+
785
+ /* GPU acceleration for smooth animations */
786
+ .gpu-accelerated {
787
+ transform: translateZ(0);
788
+ backface-visibility: hidden;
789
+ perspective: 1000px;
790
+ }
791
+
792
+ /* Reduce motion for accessibility */
793
+ @media (prefers-reduced-motion: reduce) {
794
+ *,
795
+ *::before,
796
+ *::after {
797
+ animation-duration: 0.01ms !important;
798
+ animation-iteration-count: 1 !important;
799
+ transition-duration: 0.01ms !important;
800
+ scroll-behavior: auto !important;
801
+ }
802
+ }
803
+
804
+ /* ============ UTILITY CLASSES ============ */
805
+
806
+ .animation-delay-1 { animation-delay: 0.1s; }
807
+ .animation-delay-2 { animation-delay: 0.2s; }
808
+ .animation-delay-3 { animation-delay: 0.3s; }
809
+ .animation-delay-4 { animation-delay: 0.4s; }
810
+ .animation-delay-5 { animation-delay: 0.5s; }
811
+
812
+ .animation-duration-fast { animation-duration: 0.3s; }
813
+ .animation-duration-normal { animation-duration: 0.6s; }
814
+ .animation-duration-slow { animation-duration: 1.2s; }
815
+
816
+ .ease-in { animation-timing-function: cubic-bezier(0.4, 0, 1, 1); }
817
+ .ease-out { animation-timing-function: cubic-bezier(0, 0, 0.2, 1); }
818
+ .ease-in-out { animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
819
+ .ease-bounce { animation-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1); }
820
+
821
+ .hover-grow:hover { transform: scale(1.05); }
822
+ .hover-shrink:hover { transform: scale(0.95); }
823
+ .hover-rotate:hover { transform: rotate(5deg); }
824
+ .hover-float:hover { transform: translateY(-5px); }
825
+
826
+ /* ============ RESPONSIVE CONSIDERATIONS ============ */
827
+
828
+ @media (max-width: 768px) {
829
+ .stagger-animation > * {
830
+ animation-duration: 0.4s;
831
+ }
832
+
833
+ .card-hover:hover {
834
+ transform: translateY(-5px);
835
+ }
836
+
837
+ .hero-parallax::before,
838
+ .hero-parallax::after {
839
+ animation-duration: 15s;
840
+ }
841
+ }
842
+
843
+ @media (max-width: 480px) {
844
+ .scroll-reveal {
845
+ transform: translateY(30px);
846
+ }
847
+
848
+ .animate-fade-in-up,
849
+ .animate-fade-in-down,
850
+ .animate-fade-in-left,
851
+ .animate-fade-in-right {
852
+ animation-duration: 0.5s;
853
+ }
854
+ }