snow-flow 3.4.35 → 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 (50) 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/mcp/shared/mcp-logger.js +6 -12
  6. package/dist/queen/agent-factory.js +134 -52
  7. package/dist/queen/servicenow-queen.d.ts +127 -2
  8. package/dist/queen/servicenow-queen.js +978 -618
  9. package/dist/services/widget-deployment-service.d.ts +1 -1
  10. package/dist/services/widget-deployment-service.js +1 -1
  11. package/dist/templates/claude-md-template.d.ts +1 -1
  12. package/dist/templates/claude-md-template.js +2 -2
  13. package/dist/types/servicenow.types.d.ts +1 -1
  14. package/dist/utils/dependency-detector.d.ts +1 -1
  15. package/dist/utils/dependency-detector.js +1 -1
  16. package/dist/utils/servicenow-client.d.ts +1 -1
  17. package/dist/utils/servicenow-client.js +4 -8
  18. package/package.json +1 -1
  19. package/website/components/README.md +419 -0
  20. package/website/components/code-display/CodeDisplay.css +583 -0
  21. package/website/components/code-display/CodeDisplay.html +200 -0
  22. package/website/components/code-display/CodeDisplay.js +375 -0
  23. package/website/components/code-display/CodeDisplay.jsx +268 -0
  24. package/website/components/demo/ComponentLibraryDemo.html +845 -0
  25. package/website/components/feature-cards/FeatureCards.css +573 -0
  26. package/website/components/feature-cards/FeatureCards.html +247 -0
  27. package/website/components/feature-cards/FeatureCards.js +382 -0
  28. package/website/components/feature-cards/FeatureCards.jsx +235 -0
  29. package/website/components/hero/Hero.css +558 -0
  30. package/website/components/hero/Hero.html +98 -0
  31. package/website/components/hero/Hero.js +415 -0
  32. package/website/components/hero/Hero.jsx +214 -0
  33. package/website/components/interactive/InteractiveElements.css +776 -0
  34. package/website/components/interactive/InteractiveElements.html +283 -0
  35. package/website/components/interactive/InteractiveElements.js +489 -0
  36. package/website/components/interactive/InteractiveElements.jsx +444 -0
  37. package/website/components/layout/LayoutComponents.css +697 -0
  38. package/website/components/layout/LayoutComponents.html +374 -0
  39. package/website/components/layout/LayoutComponents.js +447 -0
  40. package/website/components/layout/LayoutComponents.jsx +379 -0
  41. package/website/components/navigation/Navigation.css +383 -0
  42. package/website/components/navigation/Navigation.html +89 -0
  43. package/website/components/navigation/Navigation.js +248 -0
  44. package/website/components/navigation/Navigation.jsx +124 -0
  45. package/website/css/animations.css +854 -0
  46. package/website/css/style.css +916 -948
  47. package/website/index.html +394 -424
  48. package/website/js/animations.js +707 -0
  49. package/website/js/main.js +310 -383
  50. package/website/mcp-servers.html +310 -0
@@ -0,0 +1,776 @@
1
+ /* Interactive Elements Component - Black/White Minimalist Design */
2
+
3
+ /* =============================================================================
4
+ Base Variables and Utilities
5
+ ============================================================================= */
6
+
7
+ :root {
8
+ --sf-primary-gradient: linear-gradient(135deg, #000000 0%, #333333 100%);
9
+ --sf-secondary-gradient: linear-gradient(135deg, #666666 0%, #999999 100%);
10
+ --sf-ghost-gradient: linear-gradient(135deg, transparent 0%, rgba(0,0,0,0.05) 100%);
11
+ --sf-danger-gradient: linear-gradient(135deg, #dc3545 0%, #c82333 100%);
12
+
13
+ --sf-border-radius: 8px;
14
+ --sf-border-radius-small: 6px;
15
+ --sf-border-radius-large: 12px;
16
+
17
+ --sf-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
18
+ --sf-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1);
19
+ --sf-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.15);
20
+ --sf-shadow-lg: 0 8px 25px rgba(0, 0, 0, 0.2);
21
+ }
22
+
23
+ /* =============================================================================
24
+ Button Component
25
+ ============================================================================= */
26
+
27
+ .sf-button {
28
+ position: relative;
29
+ display: inline-flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+ border: none;
33
+ border-radius: var(--sf-border-radius);
34
+ font-family: inherit;
35
+ font-weight: 600;
36
+ text-decoration: none;
37
+ cursor: pointer;
38
+ transition: var(--sf-transition);
39
+ overflow: hidden;
40
+ user-select: none;
41
+ outline: none;
42
+ vertical-align: middle;
43
+ }
44
+
45
+ /* Button Variants */
46
+ .sf-button--primary {
47
+ background: var(--sf-primary-gradient);
48
+ color: white;
49
+ box-shadow: var(--sf-shadow-sm);
50
+ }
51
+
52
+ .sf-button--primary:hover:not(.sf-button--disabled) {
53
+ transform: translateY(-2px);
54
+ box-shadow: var(--sf-shadow-lg);
55
+ }
56
+
57
+ .sf-button--primary:active:not(.sf-button--disabled) {
58
+ transform: translateY(0);
59
+ box-shadow: var(--sf-shadow-md);
60
+ }
61
+
62
+ .sf-button--secondary {
63
+ background: var(--sf-secondary-gradient);
64
+ color: white;
65
+ box-shadow: var(--sf-shadow-sm);
66
+ }
67
+
68
+ .sf-button--secondary:hover:not(.sf-button--disabled) {
69
+ transform: translateY(-2px);
70
+ box-shadow: var(--sf-shadow-lg);
71
+ }
72
+
73
+ .sf-button--ghost {
74
+ background: transparent;
75
+ color: #333333;
76
+ border: 2px solid #333333;
77
+ }
78
+
79
+ .sf-button--ghost:hover:not(.sf-button--disabled) {
80
+ background: #000000;
81
+ color: white;
82
+ transform: translateY(-2px);
83
+ box-shadow: var(--sf-shadow-md);
84
+ }
85
+
86
+ .sf-button--danger {
87
+ background: var(--sf-danger-gradient);
88
+ color: white;
89
+ box-shadow: var(--sf-shadow-sm);
90
+ }
91
+
92
+ .sf-button--danger:hover:not(.sf-button--disabled) {
93
+ transform: translateY(-2px);
94
+ box-shadow: var(--sf-shadow-lg);
95
+ }
96
+
97
+ /* Button Sizes */
98
+ .sf-button--small {
99
+ padding: 0.5rem 1rem;
100
+ font-size: 0.875rem;
101
+ min-height: 32px;
102
+ }
103
+
104
+ .sf-button--medium {
105
+ padding: 0.75rem 1.5rem;
106
+ font-size: 1rem;
107
+ min-height: 40px;
108
+ }
109
+
110
+ .sf-button--large {
111
+ padding: 1rem 2rem;
112
+ font-size: 1.125rem;
113
+ min-height: 48px;
114
+ }
115
+
116
+ /* Button States */
117
+ .sf-button--disabled {
118
+ opacity: 0.5;
119
+ cursor: not-allowed;
120
+ transform: none !important;
121
+ box-shadow: none !important;
122
+ }
123
+
124
+ .sf-button--loading {
125
+ cursor: wait;
126
+ }
127
+
128
+ .sf-button__content {
129
+ display: flex;
130
+ align-items: center;
131
+ gap: 0.5rem;
132
+ position: relative;
133
+ z-index: 2;
134
+ }
135
+
136
+ /* Button Spinner */
137
+ .sf-button__spinner {
138
+ width: 16px;
139
+ height: 16px;
140
+ border: 2px solid transparent;
141
+ border-top: 2px solid currentColor;
142
+ border-radius: 50%;
143
+ animation: sf-spin 1s linear infinite;
144
+ }
145
+
146
+ @keyframes sf-spin {
147
+ to {
148
+ transform: rotate(360deg);
149
+ }
150
+ }
151
+
152
+ /* Button Ripple Effect */
153
+ .sf-button__ripple {
154
+ position: absolute;
155
+ border-radius: 50%;
156
+ background: rgba(255, 255, 255, 0.3);
157
+ transform: scale(0);
158
+ animation: sf-ripple 0.6s linear;
159
+ pointer-events: none;
160
+ }
161
+
162
+ @keyframes sf-ripple {
163
+ to {
164
+ transform: scale(4);
165
+ opacity: 0;
166
+ }
167
+ }
168
+
169
+ /* =============================================================================
170
+ Input Component
171
+ ============================================================================= */
172
+
173
+ .sf-input {
174
+ position: relative;
175
+ margin-bottom: 1rem;
176
+ }
177
+
178
+ .sf-input__label {
179
+ display: block;
180
+ margin-bottom: 0.5rem;
181
+ font-weight: 500;
182
+ color: #333333;
183
+ font-size: 0.875rem;
184
+ }
185
+
186
+ .sf-input__required {
187
+ color: #dc3545;
188
+ margin-left: 0.25rem;
189
+ }
190
+
191
+ .sf-input__wrapper {
192
+ position: relative;
193
+ }
194
+
195
+ .sf-input__field {
196
+ width: 100%;
197
+ padding: 0.75rem 1rem;
198
+ border: 2px solid #e1e5e9;
199
+ border-radius: var(--sf-border-radius);
200
+ font-size: 1rem;
201
+ font-family: inherit;
202
+ background: white;
203
+ transition: var(--sf-transition);
204
+ outline: none;
205
+ }
206
+
207
+ .sf-input__field:focus {
208
+ border-color: #000000;
209
+ }
210
+
211
+ .sf-input__field::placeholder {
212
+ color: #999999;
213
+ }
214
+
215
+ .sf-input__border {
216
+ position: absolute;
217
+ top: 0;
218
+ left: 0;
219
+ right: 0;
220
+ bottom: 0;
221
+ border: 2px solid transparent;
222
+ border-radius: var(--sf-border-radius);
223
+ background: var(--sf-primary-gradient);
224
+ opacity: 0;
225
+ transition: var(--sf-transition);
226
+ pointer-events: none;
227
+ z-index: -1;
228
+ }
229
+
230
+ .sf-input--focused .sf-input__border {
231
+ opacity: 1;
232
+ }
233
+
234
+ .sf-input--focused .sf-input__field {
235
+ border-color: transparent;
236
+ background: white;
237
+ transform: translateY(-1px);
238
+ box-shadow: var(--sf-shadow-md);
239
+ }
240
+
241
+ .sf-input--error .sf-input__field {
242
+ border-color: #dc3545;
243
+ }
244
+
245
+ .sf-input--error .sf-input__border {
246
+ background: var(--sf-danger-gradient);
247
+ }
248
+
249
+ .sf-input--disabled .sf-input__field {
250
+ background: #f8f9fa;
251
+ color: #6c757d;
252
+ cursor: not-allowed;
253
+ }
254
+
255
+ .sf-input__error {
256
+ display: block;
257
+ margin-top: 0.25rem;
258
+ color: #dc3545;
259
+ font-size: 0.8rem;
260
+ }
261
+
262
+ /* =============================================================================
263
+ Toggle Switch Component
264
+ ============================================================================= */
265
+
266
+ .sf-toggle {
267
+ display: inline-flex;
268
+ align-items: center;
269
+ cursor: pointer;
270
+ user-select: none;
271
+ }
272
+
273
+ .sf-toggle--disabled {
274
+ opacity: 0.5;
275
+ cursor: not-allowed;
276
+ }
277
+
278
+ .sf-toggle__input {
279
+ position: absolute;
280
+ opacity: 0;
281
+ width: 0;
282
+ height: 0;
283
+ }
284
+
285
+ .sf-toggle__slider {
286
+ position: relative;
287
+ background: #ccc;
288
+ border-radius: 20px;
289
+ transition: var(--sf-transition);
290
+ margin-right: 0.75rem;
291
+ }
292
+
293
+ .sf-toggle--small .sf-toggle__slider {
294
+ width: 36px;
295
+ height: 20px;
296
+ }
297
+
298
+ .sf-toggle--medium .sf-toggle__slider {
299
+ width: 48px;
300
+ height: 26px;
301
+ }
302
+
303
+ .sf-toggle--large .sf-toggle__slider {
304
+ width: 60px;
305
+ height: 32px;
306
+ }
307
+
308
+ .sf-toggle__thumb {
309
+ position: absolute;
310
+ top: 2px;
311
+ left: 2px;
312
+ background: white;
313
+ border-radius: 50%;
314
+ transition: var(--sf-transition);
315
+ box-shadow: var(--sf-shadow-sm);
316
+ }
317
+
318
+ .sf-toggle--small .sf-toggle__thumb {
319
+ width: 16px;
320
+ height: 16px;
321
+ }
322
+
323
+ .sf-toggle--medium .sf-toggle__thumb {
324
+ width: 22px;
325
+ height: 22px;
326
+ }
327
+
328
+ .sf-toggle--large .sf-toggle__thumb {
329
+ width: 28px;
330
+ height: 28px;
331
+ }
332
+
333
+ .sf-toggle__input:checked + .sf-toggle__slider {
334
+ background: var(--sf-primary-gradient);
335
+ }
336
+
337
+ .sf-toggle--small .sf-toggle__input:checked + .sf-toggle__slider .sf-toggle__thumb {
338
+ transform: translateX(16px);
339
+ }
340
+
341
+ .sf-toggle--medium .sf-toggle__input:checked + .sf-toggle__slider .sf-toggle__thumb {
342
+ transform: translateX(22px);
343
+ }
344
+
345
+ .sf-toggle--large .sf-toggle__input:checked + .sf-toggle__slider .sf-toggle__thumb {
346
+ transform: translateX(28px);
347
+ }
348
+
349
+ .sf-toggle__input:focus + .sf-toggle__slider {
350
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);
351
+ }
352
+
353
+ .sf-toggle__label {
354
+ font-size: 0.875rem;
355
+ color: #333333;
356
+ font-weight: 500;
357
+ }
358
+
359
+ /* =============================================================================
360
+ Progress Bar Component
361
+ ============================================================================= */
362
+
363
+ .sf-progress {
364
+ margin-bottom: 1rem;
365
+ }
366
+
367
+ .sf-progress__header {
368
+ display: flex;
369
+ justify-content: space-between;
370
+ align-items: center;
371
+ margin-bottom: 0.5rem;
372
+ }
373
+
374
+ .sf-progress__label {
375
+ font-size: 0.875rem;
376
+ font-weight: 500;
377
+ color: #333333;
378
+ }
379
+
380
+ .sf-progress__percent {
381
+ font-size: 0.875rem;
382
+ color: #666666;
383
+ font-weight: 600;
384
+ }
385
+
386
+ .sf-progress__track {
387
+ background: #e9ecef;
388
+ border-radius: 10px;
389
+ overflow: hidden;
390
+ position: relative;
391
+ }
392
+
393
+ .sf-progress--small .sf-progress__track {
394
+ height: 4px;
395
+ }
396
+
397
+ .sf-progress--medium .sf-progress__track {
398
+ height: 8px;
399
+ }
400
+
401
+ .sf-progress--large .sf-progress__track {
402
+ height: 12px;
403
+ }
404
+
405
+ .sf-progress__fill {
406
+ background: var(--sf-primary-gradient);
407
+ height: 100%;
408
+ border-radius: inherit;
409
+ transition: width 0.3s ease;
410
+ position: relative;
411
+ overflow: hidden;
412
+ }
413
+
414
+ .sf-progress__shimmer {
415
+ position: absolute;
416
+ top: 0;
417
+ left: -100%;
418
+ width: 100%;
419
+ height: 100%;
420
+ background: linear-gradient(
421
+ 90deg,
422
+ transparent,
423
+ rgba(255, 255, 255, 0.3),
424
+ transparent
425
+ );
426
+ animation: sf-shimmer 2s infinite;
427
+ }
428
+
429
+ .sf-progress--animated .sf-progress__shimmer {
430
+ animation: sf-shimmer 2s infinite;
431
+ }
432
+
433
+ @keyframes sf-shimmer {
434
+ 0% {
435
+ left: -100%;
436
+ }
437
+ 100% {
438
+ left: 100%;
439
+ }
440
+ }
441
+
442
+ /* =============================================================================
443
+ Tooltip Component
444
+ ============================================================================= */
445
+
446
+ .sf-tooltip-trigger {
447
+ position: relative;
448
+ display: inline-block;
449
+ }
450
+
451
+ .sf-tooltip {
452
+ position: fixed;
453
+ z-index: 1000;
454
+ max-width: 200px;
455
+ opacity: 0;
456
+ transform: translateX(-50%) translateY(-8px);
457
+ transition: var(--sf-transition);
458
+ pointer-events: none;
459
+ }
460
+
461
+ .sf-tooltip--visible {
462
+ opacity: 1;
463
+ transform: translateX(-50%) translateY(0);
464
+ }
465
+
466
+ .sf-tooltip--bottom {
467
+ transform: translateX(-50%) translateY(8px);
468
+ }
469
+
470
+ .sf-tooltip--bottom.sf-tooltip--visible {
471
+ transform: translateX(-50%) translateY(0);
472
+ }
473
+
474
+ .sf-tooltip__content {
475
+ background: rgba(0, 0, 0, 0.9);
476
+ color: white;
477
+ padding: 0.5rem 0.75rem;
478
+ border-radius: var(--sf-border-radius-small);
479
+ font-size: 0.8rem;
480
+ font-weight: 500;
481
+ text-align: center;
482
+ backdrop-filter: blur(10px);
483
+ box-shadow: var(--sf-shadow-lg);
484
+ }
485
+
486
+ .sf-tooltip__arrow {
487
+ position: absolute;
488
+ width: 8px;
489
+ height: 8px;
490
+ background: rgba(0, 0, 0, 0.9);
491
+ transform: rotate(45deg);
492
+ }
493
+
494
+ .sf-tooltip--top .sf-tooltip__arrow {
495
+ bottom: -4px;
496
+ left: 50%;
497
+ transform: translateX(-50%) rotate(45deg);
498
+ }
499
+
500
+ .sf-tooltip--bottom .sf-tooltip__arrow {
501
+ top: -4px;
502
+ left: 50%;
503
+ transform: translateX(-50%) rotate(45deg);
504
+ }
505
+
506
+ /* =============================================================================
507
+ Spinner Component
508
+ ============================================================================= */
509
+
510
+ .sf-spinner {
511
+ display: inline-block;
512
+ }
513
+
514
+ .sf-spinner__circle {
515
+ border-radius: 50%;
516
+ border-style: solid;
517
+ border-color: currentColor transparent transparent transparent;
518
+ animation: sf-spin 1s linear infinite;
519
+ }
520
+
521
+ .sf-spinner--small .sf-spinner__circle {
522
+ width: 16px;
523
+ height: 16px;
524
+ border-width: 2px;
525
+ }
526
+
527
+ .sf-spinner--medium .sf-spinner__circle {
528
+ width: 24px;
529
+ height: 24px;
530
+ border-width: 3px;
531
+ }
532
+
533
+ .sf-spinner--large .sf-spinner__circle {
534
+ width: 32px;
535
+ height: 32px;
536
+ border-width: 4px;
537
+ }
538
+
539
+ .sf-spinner--primary .sf-spinner__circle {
540
+ color: #000000;
541
+ }
542
+
543
+ .sf-spinner--secondary .sf-spinner__circle {
544
+ color: #666666;
545
+ }
546
+
547
+ /* =============================================================================
548
+ Demo Layout
549
+ ============================================================================= */
550
+
551
+ .sf-interactive-demo {
552
+ padding: 4rem 0;
553
+ background: linear-gradient(135deg, #fafafa 0%, #f0f0f0 100%);
554
+ }
555
+
556
+ .sf-interactive-demo__container {
557
+ max-width: 1200px;
558
+ margin: 0 auto;
559
+ padding: 0 2rem;
560
+ }
561
+
562
+ .sf-interactive-demo__title {
563
+ font-size: clamp(2.5rem, 5vw, 3.5rem);
564
+ font-weight: 800;
565
+ text-align: center;
566
+ margin-bottom: 1rem;
567
+ background: var(--sf-primary-gradient);
568
+ -webkit-background-clip: text;
569
+ -webkit-text-fill-color: transparent;
570
+ background-clip: text;
571
+ }
572
+
573
+ .sf-interactive-demo__subtitle {
574
+ text-align: center;
575
+ color: #666666;
576
+ font-size: 1.125rem;
577
+ margin-bottom: 4rem;
578
+ max-width: 600px;
579
+ margin-left: auto;
580
+ margin-right: auto;
581
+ }
582
+
583
+ .sf-demo-section {
584
+ margin-bottom: 3rem;
585
+ background: white;
586
+ border-radius: var(--sf-border-radius-large);
587
+ padding: 2rem;
588
+ box-shadow: var(--sf-shadow-sm);
589
+ border: 1px solid rgba(0, 0, 0, 0.1);
590
+ }
591
+
592
+ .sf-demo-section__title {
593
+ font-size: 1.5rem;
594
+ font-weight: 700;
595
+ margin-bottom: 1.5rem;
596
+ color: #333333;
597
+ position: relative;
598
+ padding-bottom: 0.5rem;
599
+ }
600
+
601
+ .sf-demo-section__title::after {
602
+ content: '';
603
+ position: absolute;
604
+ bottom: 0;
605
+ left: 0;
606
+ width: 50px;
607
+ height: 3px;
608
+ background: var(--sf-primary-gradient);
609
+ border-radius: 2px;
610
+ }
611
+
612
+ .sf-demo-grid {
613
+ display: grid;
614
+ gap: 1rem;
615
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
616
+ align-items: center;
617
+ }
618
+
619
+ .sf-demo-grid--vertical {
620
+ grid-template-columns: 1fr;
621
+ max-width: 400px;
622
+ }
623
+
624
+ .sf-demo-controls {
625
+ display: flex;
626
+ gap: 0.5rem;
627
+ justify-content: center;
628
+ grid-column: 1 / -1;
629
+ margin-top: 1rem;
630
+ }
631
+
632
+ /* =============================================================================
633
+ Responsive Design
634
+ ============================================================================= */
635
+
636
+ @media (max-width: 768px) {
637
+ .sf-interactive-demo__container {
638
+ padding: 0 1rem;
639
+ }
640
+
641
+ .sf-demo-section {
642
+ padding: 1.5rem;
643
+ }
644
+
645
+ .sf-demo-grid {
646
+ grid-template-columns: 1fr;
647
+ gap: 0.75rem;
648
+ }
649
+
650
+ .sf-button--small {
651
+ min-width: 120px;
652
+ }
653
+
654
+ .sf-button--medium {
655
+ min-width: 140px;
656
+ }
657
+
658
+ .sf-button--large {
659
+ min-width: 160px;
660
+ }
661
+
662
+ .sf-tooltip {
663
+ max-width: 150px;
664
+ }
665
+ }
666
+
667
+ @media (max-width: 480px) {
668
+ .sf-demo-section {
669
+ padding: 1rem;
670
+ }
671
+
672
+ .sf-demo-grid {
673
+ gap: 0.5rem;
674
+ }
675
+
676
+ .sf-toggle {
677
+ flex-direction: column;
678
+ align-items: flex-start;
679
+ gap: 0.5rem;
680
+ }
681
+
682
+ .sf-toggle__slider {
683
+ margin-right: 0;
684
+ }
685
+ }
686
+
687
+ /* =============================================================================
688
+ Accessibility & Special States
689
+ ============================================================================= */
690
+
691
+ /* High Contrast Mode */
692
+ @media (prefers-contrast: high) {
693
+ .sf-button--primary,
694
+ .sf-button--secondary,
695
+ .sf-button--danger {
696
+ border: 2px solid currentColor;
697
+ }
698
+
699
+ .sf-input__field {
700
+ border: 3px solid #333333;
701
+ }
702
+
703
+ .sf-toggle__slider {
704
+ border: 2px solid #333333;
705
+ }
706
+
707
+ .sf-progress__fill {
708
+ background: #000000;
709
+ }
710
+
711
+ .sf-tooltip__content {
712
+ background: #000000;
713
+ border: 1px solid white;
714
+ }
715
+ }
716
+
717
+ /* Reduced Motion */
718
+ @media (prefers-reduced-motion: reduce) {
719
+ .sf-button,
720
+ .sf-input__field,
721
+ .sf-toggle__slider,
722
+ .sf-toggle__thumb,
723
+ .sf-progress__fill,
724
+ .sf-tooltip,
725
+ .sf-spinner__circle,
726
+ .sf-button__ripple,
727
+ .sf-progress__shimmer {
728
+ animation: none;
729
+ transition: none;
730
+ }
731
+
732
+ .sf-button:hover {
733
+ transform: none;
734
+ }
735
+ }
736
+
737
+ /* Focus Visible */
738
+ .sf-button:focus-visible {
739
+ outline: 2px solid #000000;
740
+ outline-offset: 2px;
741
+ }
742
+
743
+ .sf-input__field:focus-visible {
744
+ outline: 2px solid #000000;
745
+ outline-offset: 2px;
746
+ }
747
+
748
+ .sf-toggle__input:focus-visible + .sf-toggle__slider {
749
+ outline: 2px solid #000000;
750
+ outline-offset: 2px;
751
+ }
752
+
753
+ /* Print Styles */
754
+ @media print {
755
+ .sf-interactive-demo {
756
+ background: white;
757
+ }
758
+
759
+ .sf-demo-section {
760
+ box-shadow: none;
761
+ border: 1px solid #ccc;
762
+ break-inside: avoid;
763
+ }
764
+
765
+ .sf-button,
766
+ .sf-toggle__slider,
767
+ .sf-progress__fill {
768
+ background: #f0f0f0 !important;
769
+ color: black !important;
770
+ }
771
+
772
+ .sf-spinner,
773
+ .sf-tooltip {
774
+ display: none;
775
+ }
776
+ }