osi-cards-lib 1.5.32 → 1.5.34

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 (87) hide show
  1. package/fesm2022/osi-cards-lib.mjs +31889 -0
  2. package/fesm2022/osi-cards-lib.mjs.map +1 -0
  3. package/index.d.ts +11528 -0
  4. package/package.json +25 -13
  5. package/scripts/setup-angular-styles.js +169 -0
  6. package/styles/_components.scss +38 -0
  7. package/styles/_index.scss +25 -0
  8. package/styles/_osi-cards-mixins.scss +459 -0
  9. package/styles/_osi-cards-tokens.scss +333 -0
  10. package/styles/_styles-scoped.scss +81 -0
  11. package/styles/_styles.scss +26 -0
  12. package/styles/bundles/_ai-card.scss +245 -0
  13. package/styles/bundles/_all.scss +68 -0
  14. package/styles/bundles/_base.scss +60 -0
  15. package/styles/bundles/_card-skeleton.scss +290 -0
  16. package/styles/bundles/_index.scss +25 -0
  17. package/styles/bundles/_sections.scss +48 -0
  18. package/styles/bundles/_tokens-only.scss +139 -0
  19. package/styles/components/_ai-card-renderer.scss +104 -0
  20. package/styles/components/_badges.scss +317 -0
  21. package/styles/components/_card-actions.scss +169 -0
  22. package/styles/components/_card-footer.scss +47 -0
  23. package/styles/components/_component-styles.scss +205 -0
  24. package/styles/components/_empty-state.scss +630 -0
  25. package/styles/components/_hero-card.scss +422 -0
  26. package/styles/components/_image-fallback.scss +28 -0
  27. package/styles/components/_streaming-effects.scss +518 -0
  28. package/styles/components/cards/_ai-card.scss +718 -0
  29. package/styles/components/sections/_all-sections.generated.scss +41 -0
  30. package/styles/components/sections/_all-sections.scss +1086 -0
  31. package/styles/components/sections/_balanced-compact-system.scss +186 -0
  32. package/styles/components/sections/_compact-mixins.scss +180 -0
  33. package/styles/components/sections/_component-mixins.scss +454 -0
  34. package/styles/components/sections/_design-system.scss +477 -0
  35. package/styles/components/sections/_design-tokens.scss +308 -0
  36. package/styles/components/sections/_enhanced-design-variables.scss +147 -0
  37. package/styles/components/sections/_master-compact-system.scss +302 -0
  38. package/styles/components/sections/_master-dense-system.scss +239 -0
  39. package/styles/components/sections/_minimalistic-design.scss +268 -0
  40. package/styles/components/sections/_modern-effects.scss +392 -0
  41. package/styles/components/sections/_modern-sections.scss +351 -0
  42. package/styles/components/sections/_perfect-system.scss +204 -0
  43. package/styles/components/sections/_section-animations.scss +331 -0
  44. package/styles/components/sections/_section-shell.scss +337 -0
  45. package/styles/components/sections/_section-types.generated.scss +30 -0
  46. package/styles/components/sections/_sections-all.scss +26 -0
  47. package/styles/components/sections/_sections-base.scss +334 -0
  48. package/styles/components/sections/_typography-system.scss +327 -0
  49. package/styles/components/sections/_ultra-compact-tokens.scss +375 -0
  50. package/styles/components/sections/_unified-section-style.scss +157 -0
  51. package/styles/components/sections/_utility-classes.scss +567 -0
  52. package/styles/components/sections/_visual-effects-library.scss +374 -0
  53. package/styles/core/_animations.scss +1498 -0
  54. package/styles/core/_bootstrap-reset.scss +445 -0
  55. package/styles/core/_color-helpers.scss +46 -0
  56. package/styles/core/_global-unified.scss +118 -0
  57. package/styles/core/_global.scss +73 -0
  58. package/styles/core/_mixins.scss +491 -0
  59. package/styles/core/_surface-layers.scss +76 -0
  60. package/styles/core/_utilities.scss +326 -0
  61. package/styles/core/_variables-unified.scss +57 -0
  62. package/styles/core/_variables.scss +36 -0
  63. package/styles/core/variables/_colors-source.scss +34 -0
  64. package/styles/core/variables/_colors-unified.scss +26 -0
  65. package/styles/core/variables/_colors.scss +21 -0
  66. package/styles/critical.scss +353 -0
  67. package/styles/design-system/_compact-theme.scss +159 -0
  68. package/styles/design-system/_section-base.scss +426 -0
  69. package/styles/design-system/_tokens.scss +237 -0
  70. package/styles/design-system/_unified-sections.scss +215 -0
  71. package/styles/layout/_feature-grid.scss +322 -0
  72. package/styles/layout/_masonry.scss +734 -0
  73. package/styles/layout/_tilt.scss +244 -0
  74. package/styles/micro-interactions.scss +583 -0
  75. package/styles/mixins/_section-mixins.scss +280 -0
  76. package/styles/non-critical.scss +643 -0
  77. package/styles/reset/_framework-reset.scss +457 -0
  78. package/styles/reset/_index.scss +14 -0
  79. package/styles/reset/_shadow-reset.scss +383 -0
  80. package/styles/responsive.scss +326 -0
  81. package/styles/themes.scss +573 -0
  82. package/styles/tokens/_index.scss +92 -0
  83. package/styles/tokens/_master.scss +1404 -0
  84. package/styles/tokens/_section-tokens.generated.scss +140 -0
  85. package/postcss.config.js +0 -81
  86. package/section-registry.json +0 -3864
  87. package/section-registry.schema.json +0 -264
@@ -0,0 +1,643 @@
1
+ /**
2
+ * OSI Cards - Non-Critical CSS
3
+ *
4
+ * This stylesheet contains styles that can be loaded asynchronously after
5
+ * the critical CSS. Includes animations, effects, and enhanced styling.
6
+ *
7
+ * Load this stylesheet with a lower priority:
8
+ *
9
+ * @example
10
+ * ```html
11
+ * <link rel="preload" href="non-critical.css" as="style" onload="this.rel='stylesheet'">
12
+ * <noscript><link rel="stylesheet" href="non-critical.css"></noscript>
13
+ * ```
14
+ */
15
+
16
+ // =============================================================================
17
+ // EXTENDED CSS CUSTOM PROPERTIES
18
+ // =============================================================================
19
+
20
+ :root {
21
+ // Extended spacing
22
+ --osi-spacing-xl: 32px;
23
+ --osi-spacing-2xl: 48px;
24
+ --osi-spacing-3xl: 64px;
25
+
26
+ // Extended shadows
27
+ --osi-shadow-lg: 0 10px 25px rgba(0, 0, 0, 0.15);
28
+ --osi-shadow-xl: 0 20px 50px rgba(0, 0, 0, 0.2);
29
+ --osi-shadow-glow: 0 0 40px rgba(var(--osi-color-brand-rgb), 0.3);
30
+
31
+ // Animation timing
32
+ --osi-transition-fast: 150ms ease;
33
+ --osi-transition-normal: 200ms ease;
34
+ --osi-transition-slow: 300ms ease;
35
+
36
+ // Extended colors
37
+ --osi-color-success: #28a745;
38
+ --osi-color-warning: #ffc107;
39
+ --osi-color-error: #dc3545;
40
+ --osi-color-info: #17a2b8;
41
+
42
+ // Trend colors
43
+ --osi-color-trend-up: #28a745;
44
+ --osi-color-trend-down: #dc3545;
45
+ --osi-color-trend-stable: #6c757d;
46
+ }
47
+
48
+ // =============================================================================
49
+ // ANIMATION KEYFRAMES
50
+ // =============================================================================
51
+
52
+ @keyframes osi-fade-in {
53
+ from {
54
+ opacity: 0;
55
+ }
56
+ to {
57
+ opacity: 1;
58
+ }
59
+ }
60
+
61
+ @keyframes osi-fade-in-up {
62
+ from {
63
+ opacity: 0;
64
+ transform: translate3d(0, 10px, 0);
65
+ }
66
+ to {
67
+ opacity: 1;
68
+ transform: translate3d(0, 0, 0);
69
+ }
70
+ }
71
+
72
+ @keyframes osi-fade-in-scale {
73
+ from {
74
+ opacity: 0;
75
+ transform: translate3d(0, 0, 0) scale(0.95);
76
+ }
77
+ to {
78
+ opacity: 1;
79
+ transform: translate3d(0, 0, 0) scale(1);
80
+ }
81
+ }
82
+
83
+ @keyframes osi-skeleton-shimmer {
84
+ 0% {
85
+ background-position: -200% 0;
86
+ }
87
+ 100% {
88
+ background-position: 200% 0;
89
+ }
90
+ }
91
+
92
+ @keyframes osi-pulse {
93
+ 0%,
94
+ 100% {
95
+ opacity: 1;
96
+ }
97
+ 50% {
98
+ opacity: 0.5;
99
+ }
100
+ }
101
+
102
+ @keyframes osi-spin {
103
+ from {
104
+ transform: rotate(0deg);
105
+ }
106
+ to {
107
+ transform: rotate(360deg);
108
+ }
109
+ }
110
+
111
+ @keyframes osi-bounce {
112
+ 0%,
113
+ 20%,
114
+ 53%,
115
+ 100% {
116
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
117
+ transform: translate3d(0, 0, 0);
118
+ }
119
+ 40%,
120
+ 43% {
121
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
122
+ transform: translate3d(0, -15px, 0);
123
+ }
124
+ 70% {
125
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
126
+ transform: translate3d(0, -7px, 0);
127
+ }
128
+ 90% {
129
+ transform: translate3d(0, -3px, 0);
130
+ }
131
+ }
132
+
133
+ @keyframes osi-float {
134
+ 0%,
135
+ 100% {
136
+ transform: translate3d(0, 0, 0);
137
+ }
138
+ 50% {
139
+ transform: translate3d(0, -5px, 0);
140
+ }
141
+ }
142
+
143
+ // =============================================================================
144
+ // CARD ENHANCED STYLES
145
+ // =============================================================================
146
+
147
+ .osi-card {
148
+ // Add transitions for non-critical interactions
149
+ transition:
150
+ box-shadow var(--osi-transition-normal),
151
+ transform var(--osi-transition-normal);
152
+
153
+ &:hover {
154
+ box-shadow: var(--osi-shadow-lg);
155
+ }
156
+
157
+ &--elevated {
158
+ box-shadow: var(--osi-shadow-lg);
159
+
160
+ &:hover {
161
+ box-shadow: var(--osi-shadow-xl);
162
+ }
163
+ }
164
+
165
+ &--with-glow {
166
+ &:hover {
167
+ box-shadow: var(--osi-shadow-glow);
168
+ }
169
+ }
170
+ }
171
+
172
+ .osi-card-surface {
173
+ transition: transform var(--osi-transition-normal);
174
+ }
175
+
176
+ // =============================================================================
177
+ // CARD ANIMATIONS
178
+ // =============================================================================
179
+
180
+ .osi-card-enter {
181
+ animation: osi-fade-in-scale 0.3s ease-out forwards;
182
+ }
183
+
184
+ .osi-card-exit {
185
+ animation: osi-fade-in-scale 0.2s ease-in reverse forwards;
186
+ }
187
+
188
+ // Staggered entrance for multiple cards
189
+ @for $i from 1 through 10 {
190
+ .osi-card:nth-child(#{$i}) {
191
+ animation-delay: #{($i - 1) * 0.05}s;
192
+ }
193
+ }
194
+
195
+ // =============================================================================
196
+ // TILT EFFECT STYLES
197
+ // =============================================================================
198
+
199
+ .osi-card--tilt-enabled {
200
+ perspective: 1000px;
201
+
202
+ .osi-card-surface {
203
+ transform-style: preserve-3d;
204
+ transition: transform 0.1s ease-out;
205
+ }
206
+
207
+ &:hover .osi-card-surface {
208
+ // Tilt handled via JS, but add smooth transition
209
+ }
210
+ }
211
+
212
+ .osi-tilt-glow {
213
+ position: absolute;
214
+ inset: 0;
215
+ border-radius: inherit;
216
+ pointer-events: none;
217
+ opacity: 0;
218
+ transition: opacity var(--osi-transition-normal);
219
+ background: radial-gradient(
220
+ circle at var(--mouse-x, 50%) var(--mouse-y, 50%),
221
+ rgba(var(--osi-color-brand-rgb), 0.15) 0%,
222
+ transparent 60%
223
+ );
224
+ }
225
+
226
+ .osi-card--tilt-enabled:hover .osi-tilt-glow {
227
+ opacity: 1;
228
+ }
229
+
230
+ .osi-tilt-reflection {
231
+ position: absolute;
232
+ inset: 0;
233
+ border-radius: inherit;
234
+ pointer-events: none;
235
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, transparent 50%);
236
+ opacity: 0;
237
+ transition: opacity var(--osi-transition-normal);
238
+ }
239
+
240
+ .osi-card--tilt-enabled:hover .osi-tilt-reflection {
241
+ opacity: 0.5;
242
+ }
243
+
244
+ // =============================================================================
245
+ // SECTION ANIMATIONS
246
+ // =============================================================================
247
+
248
+ .osi-section {
249
+ opacity: 0;
250
+ animation: osi-fade-in-up 0.3s ease-out forwards;
251
+
252
+ @for $i from 1 through 15 {
253
+ &:nth-child(#{$i}) {
254
+ animation-delay: #{($i - 1) * 0.08}s;
255
+ }
256
+ }
257
+ }
258
+
259
+ .osi-section--streaming {
260
+ .osi-section-title::after {
261
+ content: "";
262
+ display: inline-block;
263
+ width: 3px;
264
+ height: 1em;
265
+ background: var(--osi-color-brand);
266
+ margin-left: 4px;
267
+ animation: osi-pulse 0.8s infinite;
268
+ }
269
+ }
270
+
271
+ // =============================================================================
272
+ // FIELD ANIMATIONS
273
+ // =============================================================================
274
+
275
+ .osi-field {
276
+ opacity: 0;
277
+ animation: osi-fade-in 0.2s ease-out forwards;
278
+
279
+ @for $i from 1 through 20 {
280
+ &:nth-child(#{$i}) {
281
+ animation-delay: #{($i - 1) * 0.04}s;
282
+ }
283
+ }
284
+ }
285
+
286
+ .osi-field--streaming {
287
+ .osi-field-value {
288
+ background: linear-gradient(
289
+ 90deg,
290
+ var(--osi-color-background-soft) 0%,
291
+ var(--osi-color-border) 50%,
292
+ var(--osi-color-background-soft) 100%
293
+ );
294
+ background-size: 200% 100%;
295
+ animation: osi-skeleton-shimmer 1.5s infinite;
296
+ border-radius: var(--osi-border-radius-sm);
297
+ }
298
+ }
299
+
300
+ // =============================================================================
301
+ // ITEM ANIMATIONS
302
+ // =============================================================================
303
+
304
+ .osi-item {
305
+ opacity: 0;
306
+ animation: osi-fade-in-up 0.25s ease-out forwards;
307
+
308
+ @for $i from 1 through 20 {
309
+ &:nth-child(#{$i}) {
310
+ animation-delay: #{($i - 1) * 0.04}s;
311
+ }
312
+ }
313
+
314
+ &:hover {
315
+ background: var(--osi-color-background-soft);
316
+ border-radius: var(--osi-border-radius-md);
317
+ }
318
+ }
319
+
320
+ .osi-item--clickable {
321
+ cursor: pointer;
322
+ transition: background var(--osi-transition-fast);
323
+
324
+ &:hover {
325
+ background: var(--osi-color-background-soft);
326
+ }
327
+ }
328
+
329
+ // =============================================================================
330
+ // BUTTON ENHANCED STYLES
331
+ // =============================================================================
332
+
333
+ .osi-action-button {
334
+ transition:
335
+ background var(--osi-transition-fast),
336
+ color var(--osi-transition-fast),
337
+ border-color var(--osi-transition-fast),
338
+ transform var(--osi-transition-fast),
339
+ box-shadow var(--osi-transition-fast);
340
+
341
+ &:hover {
342
+ transform: translateY(-1px);
343
+ }
344
+
345
+ &:active {
346
+ transform: translateY(0);
347
+ }
348
+
349
+ &--primary {
350
+ &:hover {
351
+ background: var(--osi-color-brand-dark);
352
+ box-shadow: 0 4px 12px rgba(var(--osi-color-brand-rgb), 0.3);
353
+ }
354
+ }
355
+
356
+ &--secondary {
357
+ &:hover {
358
+ background: var(--osi-color-border);
359
+ }
360
+ }
361
+
362
+ &--outline {
363
+ &:hover {
364
+ background: rgba(var(--osi-color-brand-rgb), 0.1);
365
+ }
366
+ }
367
+
368
+ &--ghost {
369
+ &:hover {
370
+ background: var(--osi-color-background-soft);
371
+ color: var(--osi-color-text);
372
+ }
373
+ }
374
+
375
+ // Loading state
376
+ &--loading {
377
+ position: relative;
378
+ color: transparent;
379
+
380
+ &::after {
381
+ content: "";
382
+ position: absolute;
383
+ width: 16px;
384
+ height: 16px;
385
+ border: 2px solid currentColor;
386
+ border-top-color: transparent;
387
+ border-radius: 50%;
388
+ animation: osi-spin 0.6s linear infinite;
389
+ }
390
+ }
391
+ }
392
+
393
+ // =============================================================================
394
+ // SKELETON ANIMATIONS
395
+ // =============================================================================
396
+
397
+ .osi-skeleton {
398
+ background: linear-gradient(
399
+ 90deg,
400
+ var(--osi-color-background-soft) 0%,
401
+ var(--osi-color-border) 50%,
402
+ var(--osi-color-background-soft) 100%
403
+ );
404
+ background-size: 200% 100%;
405
+ animation: osi-skeleton-shimmer 1.5s ease-in-out infinite;
406
+ }
407
+
408
+ // =============================================================================
409
+ // EMPTY STATE STYLES
410
+ // =============================================================================
411
+
412
+ .osi-empty-state {
413
+ display: flex;
414
+ flex-direction: column;
415
+ align-items: center;
416
+ justify-content: center;
417
+ padding: var(--osi-spacing-2xl);
418
+ text-align: center;
419
+ min-height: 300px;
420
+ }
421
+
422
+ .osi-empty-state-title {
423
+ font-size: var(--osi-font-size-xl);
424
+ font-weight: 600;
425
+ margin-bottom: var(--osi-spacing-md);
426
+ animation: osi-fade-in 0.3s ease-out;
427
+ }
428
+
429
+ .osi-empty-state-message {
430
+ font-size: var(--osi-font-size-base);
431
+ color: var(--osi-color-text-secondary);
432
+ animation: osi-fade-in 0.3s ease-out 0.1s both;
433
+ }
434
+
435
+ // =============================================================================
436
+ // PARTICLE ANIMATION STYLES
437
+ // =============================================================================
438
+
439
+ .osi-particles-container {
440
+ position: absolute;
441
+ inset: 0;
442
+ pointer-events: none;
443
+ overflow: hidden;
444
+ }
445
+
446
+ .osi-particle {
447
+ position: absolute;
448
+ width: 8px;
449
+ height: 8px;
450
+ border-radius: 50%;
451
+ background: var(--osi-color-brand);
452
+ opacity: 0.3;
453
+ animation: osi-float 3s ease-in-out infinite;
454
+
455
+ @for $i from 1 through 20 {
456
+ &:nth-child(#{$i}) {
457
+ animation-delay: #{$i * 0.15}s;
458
+ left: #{random(100)}%;
459
+ top: #{random(100)}%;
460
+ }
461
+ }
462
+ }
463
+
464
+ // =============================================================================
465
+ // TREND INDICATORS
466
+ // =============================================================================
467
+
468
+ .osi-trend {
469
+ display: inline-flex;
470
+ align-items: center;
471
+ gap: var(--osi-spacing-xs);
472
+ font-size: var(--osi-font-size-sm);
473
+ font-weight: 500;
474
+
475
+ &--up {
476
+ color: var(--osi-color-trend-up);
477
+ }
478
+
479
+ &--down {
480
+ color: var(--osi-color-trend-down);
481
+ }
482
+
483
+ &--stable {
484
+ color: var(--osi-color-trend-stable);
485
+ }
486
+ }
487
+
488
+ .osi-trend-icon {
489
+ transition: transform var(--osi-transition-fast);
490
+ }
491
+
492
+ .osi-trend:hover .osi-trend-icon {
493
+ transform: scale(1.1);
494
+ }
495
+
496
+ // =============================================================================
497
+ // PROGRESS BAR
498
+ // =============================================================================
499
+
500
+ .osi-progress {
501
+ height: 6px;
502
+ background: var(--osi-color-background-soft);
503
+ border-radius: 3px;
504
+ overflow: hidden;
505
+ }
506
+
507
+ .osi-progress-bar {
508
+ height: 100%;
509
+ background: var(--osi-color-brand);
510
+ border-radius: inherit;
511
+ transition: width var(--osi-transition-slow);
512
+ }
513
+
514
+ // =============================================================================
515
+ // TOOLTIP STYLES
516
+ // =============================================================================
517
+
518
+ .osi-tooltip {
519
+ position: absolute;
520
+ z-index: var(--osi-z-index-dropdown);
521
+ padding: var(--osi-spacing-sm) var(--osi-spacing-md);
522
+ background: var(--osi-color-text);
523
+ color: var(--osi-color-background);
524
+ font-size: var(--osi-font-size-sm);
525
+ border-radius: var(--osi-border-radius-sm);
526
+ box-shadow: var(--osi-shadow-md);
527
+ opacity: 0;
528
+ transform: translateY(4px);
529
+ transition:
530
+ opacity var(--osi-transition-fast),
531
+ transform var(--osi-transition-fast);
532
+ pointer-events: none;
533
+
534
+ &--visible {
535
+ opacity: 1;
536
+ transform: translateY(0);
537
+ }
538
+ }
539
+
540
+ // =============================================================================
541
+ // STATUS BADGES
542
+ // =============================================================================
543
+
544
+ .osi-status-badge {
545
+ display: inline-flex;
546
+ align-items: center;
547
+ gap: var(--osi-spacing-xs);
548
+ padding: 2px var(--osi-spacing-sm);
549
+ font-size: 0.75rem;
550
+ font-weight: 500;
551
+ border-radius: 9999px;
552
+ text-transform: uppercase;
553
+ letter-spacing: 0.05em;
554
+
555
+ &--completed {
556
+ background: rgba(40, 167, 69, 0.1);
557
+ color: var(--osi-color-success);
558
+ }
559
+
560
+ &--in-progress {
561
+ background: rgba(255, 193, 7, 0.1);
562
+ color: var(--osi-color-warning);
563
+ }
564
+
565
+ &--pending {
566
+ background: var(--osi-color-background-soft);
567
+ color: var(--osi-color-text-secondary);
568
+ }
569
+
570
+ &--error {
571
+ background: rgba(220, 53, 69, 0.1);
572
+ color: var(--osi-color-error);
573
+ }
574
+ }
575
+
576
+ // =============================================================================
577
+ // FULLSCREEN MODE
578
+ // =============================================================================
579
+
580
+ .osi-card--fullscreen {
581
+ position: fixed;
582
+ inset: 0;
583
+ z-index: var(--osi-z-index-modal);
584
+ border-radius: 0;
585
+ animation: osi-fade-in-scale 0.2s ease-out;
586
+
587
+ .osi-card-surface {
588
+ border-radius: 0;
589
+ }
590
+ }
591
+
592
+ .osi-fullscreen-backdrop {
593
+ position: fixed;
594
+ inset: 0;
595
+ background: rgba(0, 0, 0, 0.5);
596
+ z-index: calc(var(--osi-z-index-modal) - 1);
597
+ animation: osi-fade-in 0.2s ease-out;
598
+ }
599
+
600
+ // =============================================================================
601
+ // PRINT STYLES
602
+ // =============================================================================
603
+
604
+ @media print {
605
+ .osi-card {
606
+ box-shadow: none;
607
+ border: 1px solid var(--osi-color-border);
608
+ break-inside: avoid;
609
+ }
610
+
611
+ .osi-card-actions,
612
+ .osi-tilt-glow,
613
+ .osi-tilt-reflection,
614
+ .osi-particles-container {
615
+ display: none !important;
616
+ }
617
+
618
+ .osi-section,
619
+ .osi-field,
620
+ .osi-item {
621
+ animation: none !important;
622
+ opacity: 1 !important;
623
+ }
624
+ }
625
+
626
+ // =============================================================================
627
+ // HIGH CONTRAST MODE
628
+ // =============================================================================
629
+
630
+ @media (forced-colors: active) {
631
+ .osi-card {
632
+ border: 2px solid CanvasText;
633
+ }
634
+
635
+ .osi-action-button {
636
+ border: 2px solid ButtonText;
637
+ }
638
+
639
+ .osi-skeleton {
640
+ background: Canvas;
641
+ border: 1px solid CanvasText;
642
+ }
643
+ }