osi-cards-lib 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +763 -0
  2. package/esm2022/lib/components/ai-card-renderer/ai-card-renderer.component.mjs +911 -0
  3. package/esm2022/lib/components/card-preview/card-preview.component.mjs +74 -0
  4. package/esm2022/lib/components/card-skeleton/card-skeleton.component.mjs +24 -0
  5. package/esm2022/lib/components/masonry-grid/masonry-grid.component.mjs +330 -0
  6. package/esm2022/lib/components/section-renderer/section-renderer.component.mjs +166 -0
  7. package/esm2022/lib/components/sections/analytics-section/analytics-section.component.mjs +70 -0
  8. package/esm2022/lib/components/sections/base-section.component.mjs +335 -0
  9. package/esm2022/lib/components/sections/brand-colors-section/brand-colors-section.component.mjs +89 -0
  10. package/esm2022/lib/components/sections/chart-section/chart-section.component.mjs +92 -0
  11. package/esm2022/lib/components/sections/contact-card-section/contact-card-section.component.mjs +70 -0
  12. package/esm2022/lib/components/sections/event-section/event-section.component.mjs +32 -0
  13. package/esm2022/lib/components/sections/fallback-section/fallback-section.component.mjs +16 -0
  14. package/esm2022/lib/components/sections/financials-section/financials-section.component.mjs +53 -0
  15. package/esm2022/lib/components/sections/info-section.component.mjs +68 -0
  16. package/esm2022/lib/components/sections/list-section/list-section.component.mjs +36 -0
  17. package/esm2022/lib/components/sections/map-section/map-section.component.mjs +52 -0
  18. package/esm2022/lib/components/sections/network-card-section/network-card-section.component.mjs +41 -0
  19. package/esm2022/lib/components/sections/news-section/news-section.component.mjs +44 -0
  20. package/esm2022/lib/components/sections/overview-section/overview-section.component.mjs +47 -0
  21. package/esm2022/lib/components/sections/product-section/product-section.component.mjs +129 -0
  22. package/esm2022/lib/components/sections/quotation-section/quotation-section.component.mjs +39 -0
  23. package/esm2022/lib/components/sections/social-media-section/social-media-section.component.mjs +45 -0
  24. package/esm2022/lib/components/sections/solutions-section/solutions-section.component.mjs +29 -0
  25. package/esm2022/lib/components/sections/text-reference-section/text-reference-section.component.mjs +42 -0
  26. package/esm2022/lib/icons/index.mjs +2 -0
  27. package/esm2022/lib/icons/lucide-icons.module.mjs +91 -0
  28. package/esm2022/lib/models/card.model.mjs +111 -0
  29. package/esm2022/lib/models/index.mjs +2 -0
  30. package/esm2022/lib/services/icon.service.mjs +148 -0
  31. package/esm2022/lib/services/index.mjs +5 -0
  32. package/esm2022/lib/services/magnetic-tilt.service.mjs +224 -0
  33. package/esm2022/lib/services/section-normalization.service.mjs +243 -0
  34. package/esm2022/lib/services/section-utils.service.mjs +122 -0
  35. package/esm2022/lib/utils/card-diff.util.mjs +327 -0
  36. package/esm2022/lib/utils/index.mjs +3 -0
  37. package/esm2022/lib/utils/responsive.util.mjs +14 -0
  38. package/esm2022/osi-cards-lib.mjs +5 -0
  39. package/esm2022/public-api.mjs +57 -0
  40. package/fesm2022/osi-cards-lib.mjs +3960 -0
  41. package/index.d.ts +5 -0
  42. package/lib/components/ai-card-renderer/ai-card-renderer.component.d.ts +163 -0
  43. package/lib/components/card-preview/card-preview.component.d.ts +52 -0
  44. package/lib/components/card-skeleton/card-skeleton.component.d.ts +8 -0
  45. package/lib/components/masonry-grid/masonry-grid.component.d.ts +72 -0
  46. package/lib/components/section-renderer/section-renderer.component.d.ts +25 -0
  47. package/lib/components/sections/analytics-section/analytics-section.component.d.ts +32 -0
  48. package/lib/components/sections/base-section.component.d.ts +138 -0
  49. package/lib/components/sections/brand-colors-section/brand-colors-section.component.d.ts +28 -0
  50. package/lib/components/sections/chart-section/chart-section.component.d.ts +30 -0
  51. package/lib/components/sections/contact-card-section/contact-card-section.component.d.ts +35 -0
  52. package/lib/components/sections/event-section/event-section.component.d.ts +17 -0
  53. package/lib/components/sections/fallback-section/fallback-section.component.d.ts +7 -0
  54. package/lib/components/sections/financials-section/financials-section.component.d.ts +27 -0
  55. package/lib/components/sections/info-section.component.d.ts +33 -0
  56. package/lib/components/sections/list-section/list-section.component.d.ts +21 -0
  57. package/lib/components/sections/map-section/map-section.component.d.ts +22 -0
  58. package/lib/components/sections/network-card-section/network-card-section.component.d.ts +18 -0
  59. package/lib/components/sections/news-section/news-section.component.d.ts +16 -0
  60. package/lib/components/sections/overview-section/overview-section.component.d.ts +19 -0
  61. package/lib/components/sections/product-section/product-section.component.d.ts +57 -0
  62. package/lib/components/sections/quotation-section/quotation-section.component.d.ts +23 -0
  63. package/lib/components/sections/social-media-section/social-media-section.component.d.ts +11 -0
  64. package/lib/components/sections/solutions-section/solutions-section.component.d.ts +19 -0
  65. package/lib/components/sections/text-reference-section/text-reference-section.component.d.ts +25 -0
  66. package/lib/icons/index.d.ts +1 -0
  67. package/lib/icons/lucide-icons.module.d.ts +7 -0
  68. package/lib/models/card.model.d.ts +289 -0
  69. package/lib/models/index.d.ts +1 -0
  70. package/lib/services/icon.service.d.ts +9 -0
  71. package/lib/services/index.d.ts +4 -0
  72. package/lib/services/magnetic-tilt.service.d.ts +34 -0
  73. package/lib/services/section-normalization.service.d.ts +38 -0
  74. package/lib/services/section-utils.service.d.ts +46 -0
  75. package/lib/utils/card-diff.util.d.ts +52 -0
  76. package/lib/utils/index.d.ts +2 -0
  77. package/lib/utils/responsive.util.d.ts +2 -0
  78. package/package.json +63 -0
  79. package/public-api.d.ts +50 -0
  80. package/styles/_styles.scss +95 -0
  81. package/styles/components/cards/_ai-card.scss +743 -0
  82. package/styles/components/sections/_analytics.scss +280 -0
  83. package/styles/components/sections/_brand-colors.scss +280 -0
  84. package/styles/components/sections/_chart.scss +494 -0
  85. package/styles/components/sections/_contact.scss +250 -0
  86. package/styles/components/sections/_design-system.scss +540 -0
  87. package/styles/components/sections/_event.scss +246 -0
  88. package/styles/components/sections/_fallback.scss +172 -0
  89. package/styles/components/sections/_financials.scss +258 -0
  90. package/styles/components/sections/_global-enforcement.scss +648 -0
  91. package/styles/components/sections/_info.scss +224 -0
  92. package/styles/components/sections/_list.scss +216 -0
  93. package/styles/components/sections/_map.scss +186 -0
  94. package/styles/components/sections/_network.scss +115 -0
  95. package/styles/components/sections/_news.scss +81 -0
  96. package/styles/components/sections/_overview.scss +159 -0
  97. package/styles/components/sections/_product.scss +906 -0
  98. package/styles/components/sections/_quotation.scss +151 -0
  99. package/styles/components/sections/_section-shell.scss +385 -0
  100. package/styles/components/sections/_section-types.scss +290 -0
  101. package/styles/components/sections/_sections-base.scss +332 -0
  102. package/styles/components/sections/_social-media.scss +88 -0
  103. package/styles/components/sections/_solutions.scss +205 -0
  104. package/styles/components/sections/_text-reference.scss +158 -0
  105. package/styles/components/sections/_unified-cards.scss +124 -0
  106. package/styles/core/_animations.scss +766 -0
  107. package/styles/core/_global.scss +66 -0
  108. package/styles/core/_mixins.scss +140 -0
  109. package/styles/core/_surface-layers.scss +76 -0
  110. package/styles/core/_utilities.scss +193 -0
  111. package/styles/core/_variables.scss +462 -0
  112. package/styles/core/variables/_colors.scss +212 -0
  113. package/styles/layout/_masonry.scss +60 -0
  114. package/styles/layout/_tilt.scss +214 -0
@@ -0,0 +1,766 @@
1
+ /* ===================================================================
2
+ ANIMATION KEYFRAMES
3
+ Performance-optimized animations with hardware acceleration
4
+ =================================================================== */
5
+
6
+ /* Entry Animations - For components appearing on screen */
7
+ @keyframes fadeInUp {
8
+ from {
9
+ opacity: 0;
10
+ transform: translate3d(0, var(--motion-distance-lg), 0); /* Hardware acceleration */
11
+ }
12
+ to {
13
+ opacity: 1;
14
+ transform: translate3d(0, 0, 0);
15
+ }
16
+ }
17
+
18
+ @keyframes fadeIn {
19
+ from {
20
+ opacity: 0;
21
+ transform: translate3d(0, 0, 0); /* Hardware acceleration */
22
+ }
23
+ to {
24
+ opacity: 1;
25
+ transform: translate3d(0, 0, 0);
26
+ }
27
+ }
28
+
29
+ @keyframes fadeInSoft {
30
+ from {
31
+ opacity: 0;
32
+ transform: translate3d(0, var(--motion-distance-sm), 0) scale(var(--motion-scale-soft-start));
33
+ }
34
+ to {
35
+ opacity: 1;
36
+ transform: translate3d(0, 0, 0) scale(var(--motion-scale-soft-end));
37
+ }
38
+ }
39
+
40
+ @keyframes slideUp {
41
+ from {
42
+ transform: translate3d(0, var(--motion-distance-xl), 0);
43
+ opacity: 0;
44
+ }
45
+ to {
46
+ transform: translate3d(0, 0, 0);
47
+ opacity: 1;
48
+ }
49
+ }
50
+
51
+ @keyframes slideDown {
52
+ from {
53
+ transform: translate3d(0, calc(var(--motion-distance-xl) * -1), 0);
54
+ opacity: 0;
55
+ }
56
+ to {
57
+ transform: translate3d(0, 0, 0);
58
+ opacity: 1;
59
+ }
60
+ }
61
+
62
+ @keyframes slideInLeft {
63
+ from {
64
+ transform: translate3d(calc(var(--motion-distance-xl) * -1), 0, 0);
65
+ opacity: 0;
66
+ }
67
+ to {
68
+ transform: translate3d(0, 0, 0);
69
+ opacity: 1;
70
+ }
71
+ }
72
+
73
+ @keyframes slideInRight {
74
+ from {
75
+ transform: translate3d(var(--motion-distance-xl), 0, 0);
76
+ opacity: 0;
77
+ }
78
+ to {
79
+ transform: translate3d(0, 0, 0);
80
+ opacity: 1;
81
+ }
82
+ }
83
+
84
+ @keyframes fadeInUpSoft {
85
+ from {
86
+ opacity: 0;
87
+ transform: translate3d(0, var(--motion-distance-md), 0) scale(var(--motion-scale-soft-start));
88
+ }
89
+ to {
90
+ opacity: 1;
91
+ transform: translate3d(0, 0, 0) scale(var(--motion-scale-soft-end));
92
+ }
93
+ }
94
+
95
+ /* Scale Animations - For interactive feedback */
96
+ @keyframes scale {
97
+ 0% {
98
+ transform: scale(var(--motion-scale-pulse-min)) translate3d(0, 0, 0);
99
+ }
100
+ 70% {
101
+ transform: scale(var(--motion-scale-pop)) translate3d(0, 0, 0);
102
+ }
103
+ 100% {
104
+ transform: scale(var(--motion-scale-soft-end)) translate3d(0, 0, 0);
105
+ }
106
+ }
107
+
108
+ @keyframes scaleIn {
109
+ from {
110
+ transform: scale(var(--motion-scale-soft-start)) translate3d(0, 0, 0);
111
+ opacity: 0;
112
+ }
113
+ to {
114
+ transform: scale(var(--motion-scale-soft-end)) translate3d(0, 0, 0);
115
+ opacity: 1;
116
+ }
117
+ }
118
+
119
+ @keyframes fadeInScaleSoft {
120
+ from {
121
+ opacity: 0;
122
+ transform: scale(var(--motion-scale-soft-start)) translate3d(0, 0, 0);
123
+ }
124
+ to {
125
+ opacity: 1;
126
+ transform: scale(var(--motion-scale-soft-end)) translate3d(0, 0, 0);
127
+ }
128
+ }
129
+
130
+ @keyframes pulse {
131
+ 0%, 100% {
132
+ transform: scale(var(--motion-scale-soft-end)) translate3d(0, 0, 0);
133
+ opacity: 1;
134
+ }
135
+ 50% {
136
+ transform: scale(var(--motion-scale-pop)) translate3d(0, 0, 0);
137
+ opacity: 0.8;
138
+ }
139
+ }
140
+
141
+ /* Enhanced hover elevation for cards - subtle lift */
142
+ @keyframes hoverLift {
143
+ from {
144
+ transform: translateY(0px) translate3d(0, 0, 0);
145
+ }
146
+ to {
147
+ transform: translateY(-2px) translate3d(0, 0, 0);
148
+ }
149
+ }
150
+
151
+ /* Glow accent animation - brand color pulse */
152
+ @keyframes glowAccent {
153
+ 0%, 100% {
154
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
155
+ }
156
+ 50% {
157
+ text-shadow: 0 2px 6px rgba(255, 121, 0, 0.25);
158
+ }
159
+ }
160
+
161
+ /* Value emphasis - gentle highlight on important numbers */
162
+ @keyframes valueEmphasize {
163
+ 0%, 100% {
164
+ color: var(--card-text-primary);
165
+ }
166
+ 50% {
167
+ color: color-mix(in srgb, var(--card-text-primary) 85%, var(--color-brand) 15%);
168
+ }
169
+ }
170
+
171
+ /* Glow & Effect Animations - For visual enhancements */
172
+ @keyframes glowPulse {
173
+ 0%, 100% {
174
+ opacity: 0.6;
175
+ filter: blur(25px);
176
+ }
177
+ 50% {
178
+ opacity: 1;
179
+ filter: blur(30px);
180
+ }
181
+ }
182
+
183
+ @keyframes glowDrift {
184
+ 0%, 100% {
185
+ opacity: 0.7;
186
+ transform: translate3d(0, 0, 0);
187
+ }
188
+ 25% {
189
+ opacity: 0.8;
190
+ transform: translate3d(5px, -5px, 0);
191
+ }
192
+ 50% {
193
+ opacity: 0.9;
194
+ transform: translate3d(0, 5px, 0);
195
+ }
196
+ 75% {
197
+ opacity: 0.8;
198
+ transform: translate3d(-5px, 0, 0);
199
+ }
200
+ }
201
+
202
+ @keyframes shimmer {
203
+ 0%, 100% {
204
+ opacity: 0.5;
205
+ }
206
+ 50% {
207
+ opacity: 0.8;
208
+ }
209
+ }
210
+
211
+ /* Rotation Animations - For loaders and indicators */
212
+ @keyframes spin {
213
+ from {
214
+ transform: rotate(0deg) translateZ(0);
215
+ }
216
+ to {
217
+ transform: rotate(360deg) translateZ(0);
218
+ }
219
+ }
220
+
221
+ @keyframes spinSlow {
222
+ from {
223
+ transform: rotate(0deg) translateZ(0);
224
+ }
225
+ to {
226
+ transform: rotate(360deg) translateZ(0);
227
+ }
228
+ }
229
+
230
+ /* Shake & Attention Animations */
231
+ @keyframes shake {
232
+ 0%, 100% {
233
+ transform: translate3d(0, 0, 0);
234
+ }
235
+ 10%, 30%, 50%, 70%, 90% {
236
+ transform: translate3d(calc(var(--motion-distance-sm) * -1), 0, 0);
237
+ }
238
+ 20%, 40%, 60%, 80% {
239
+ transform: translate3d(var(--motion-distance-sm), 0, 0);
240
+ }
241
+ }
242
+
243
+ @keyframes bounce {
244
+ 0%, 100% {
245
+ transform: translate3d(0, 0, 0);
246
+ animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
247
+ }
248
+ 50% {
249
+ transform: translate3d(0, calc(var(--motion-distance-lg) * -1), 0);
250
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
251
+ }
252
+ }
253
+
254
+ /* ===================================================================
255
+ LLM SIMULATION & STREAMING ANIMATIONS
256
+ Section entrance animations for progressive loading
257
+ =================================================================== */
258
+
259
+ /* Section entrance animation - smooth fade-in with scale and upward motion */
260
+ @keyframes sectionEnter {
261
+ from {
262
+ opacity: 0;
263
+ transform: translate3d(0, 20px, 0) scale(0.95);
264
+ }
265
+ to {
266
+ opacity: 1;
267
+ transform: translate3d(0, 0, 0) scale(1);
268
+ }
269
+ }
270
+
271
+ /* Section streaming glow effect - subtle pulse during appearance */
272
+ @keyframes sectionStreamingGlow {
273
+ 0%, 100% {
274
+ box-shadow: 0 0 0 0 rgba(255, 121, 0, 0);
275
+ }
276
+ 50% {
277
+ box-shadow: 0 0 12px 2px rgba(255, 121, 0, 0.15);
278
+ }
279
+ }
280
+
281
+ /* Field entrance animation - smooth fade-in with upward motion */
282
+ @keyframes fieldEnter {
283
+ from {
284
+ opacity: 0;
285
+ transform: translate3d(0, 10px, 0);
286
+ }
287
+ to {
288
+ opacity: 1;
289
+ transform: translate3d(0, 0, 0);
290
+ }
291
+ }
292
+
293
+ /* Item entrance animation - slide-in from left with fade */
294
+ @keyframes itemEnter {
295
+ from {
296
+ opacity: 0;
297
+ transform: translate3d(-10px, 0, 0);
298
+ }
299
+ to {
300
+ opacity: 1;
301
+ transform: translate3d(0, 0, 0);
302
+ }
303
+ }
304
+
305
+ /* ===================================================================
306
+ STATE TRANSITION ANIMATIONS
307
+ Smooth transitions between LLM simulation states
308
+ =================================================================== */
309
+
310
+ /* State fade transition - smooth fade between states */
311
+ @keyframes stateFade {
312
+ from {
313
+ opacity: 0;
314
+ transform: translate3d(0, 8px, 0) scale(0.98);
315
+ }
316
+ to {
317
+ opacity: 1;
318
+ transform: translate3d(0, 0, 0) scale(1);
319
+ }
320
+ }
321
+
322
+ /* State slide transition - slide out old, slide in new */
323
+ @keyframes stateSlideOut {
324
+ from {
325
+ opacity: 1;
326
+ transform: translate3d(0, 0, 0);
327
+ }
328
+ to {
329
+ opacity: 0;
330
+ transform: translate3d(0, -10px, 0);
331
+ }
332
+ }
333
+
334
+ @keyframes stateSlideIn {
335
+ from {
336
+ opacity: 0;
337
+ transform: translate3d(0, 10px, 0);
338
+ }
339
+ to {
340
+ opacity: 1;
341
+ transform: translate3d(0, 0, 0);
342
+ }
343
+ }
344
+
345
+ /* Error shake animation - for error states */
346
+ @keyframes errorShake {
347
+ 0%, 100% {
348
+ transform: translate3d(0, 0, 0);
349
+ }
350
+ 10%, 30%, 50%, 70%, 90% {
351
+ transform: translate3d(-4px, 0, 0);
352
+ }
353
+ 20%, 40%, 60%, 80% {
354
+ transform: translate3d(4px, 0, 0);
355
+ }
356
+ }
357
+
358
+ /* Error pulse - subtle pulse for error indication */
359
+ @keyframes errorPulse {
360
+ 0%, 100% {
361
+ opacity: 1;
362
+ box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4);
363
+ }
364
+ 50% {
365
+ opacity: 0.9;
366
+ box-shadow: 0 0 0 8px rgba(239, 68, 68, 0);
367
+ }
368
+ }
369
+
370
+ /* Enhanced shimmer effect - for skeleton loaders */
371
+ @keyframes shimmerWave {
372
+ 0% {
373
+ background-position: -200% 0;
374
+ }
375
+ 100% {
376
+ background-position: 200% 0;
377
+ }
378
+ }
379
+
380
+ /* Skeleton pulse - breathing effect for loading */
381
+ @keyframes skeletonPulse {
382
+ 0%, 100% {
383
+ opacity: 0.6;
384
+ }
385
+ 50% {
386
+ opacity: 1;
387
+ }
388
+ }
389
+
390
+ /* ===================================================================
391
+ ANIMATION UTILITY CLASSES
392
+ Pre-configured animations using design system variables
393
+ =================================================================== */
394
+
395
+ /* Entry Animations */
396
+ .animate-fade-in {
397
+ animation: fadeIn var(--duration-moderate) var(--ease-out-smooth);
398
+ animation-fill-mode: var(--animation-fill-mode);
399
+ }
400
+
401
+ .animate-fade-in-up {
402
+ animation: fadeInUp var(--duration-moderate) var(--ease-out-smooth);
403
+ animation-fill-mode: var(--animation-fill-mode);
404
+ }
405
+
406
+ .animate-fade-in-soft {
407
+ animation: fadeInSoft var(--duration-slow) var(--ease-out-smooth);
408
+ animation-fill-mode: var(--animation-fill-mode);
409
+ }
410
+
411
+ .animate-fade-in-up-soft {
412
+ animation: fadeInUpSoft var(--duration-slow) var(--ease-out-smooth);
413
+ animation-fill-mode: var(--animation-fill-mode);
414
+ }
415
+
416
+ .animate-fade-in-scale-soft {
417
+ animation: fadeInScaleSoft var(--duration-moderate) var(--ease-out-smooth);
418
+ animation-fill-mode: var(--animation-fill-mode);
419
+ }
420
+
421
+ .animate-slide-up {
422
+ animation: slideUp var(--duration-moderate) var(--ease-out-smooth);
423
+ animation-fill-mode: var(--animation-fill-mode);
424
+ }
425
+
426
+ .animate-slide-down {
427
+ animation: slideDown var(--duration-moderate) var(--ease-out-smooth);
428
+ animation-fill-mode: var(--animation-fill-mode);
429
+ }
430
+
431
+ .animate-slide-in-left {
432
+ animation: slideInLeft var(--duration-moderate) var(--ease-out-smooth);
433
+ animation-fill-mode: var(--animation-fill-mode);
434
+ }
435
+
436
+ .animate-slide-in-right {
437
+ animation: slideInRight var(--duration-moderate) var(--ease-out-smooth);
438
+ animation-fill-mode: var(--animation-fill-mode);
439
+ }
440
+
441
+ /* Scale Animations */
442
+ .animate-scale {
443
+ animation: scale var(--duration-moderate) var(--ease-spring);
444
+ animation-fill-mode: var(--animation-fill-mode);
445
+ }
446
+
447
+ .animate-scale-in {
448
+ animation: scaleIn var(--duration-moderate) var(--ease-out-smooth);
449
+ animation-fill-mode: var(--animation-fill-mode);
450
+ }
451
+
452
+ .animate-pulse {
453
+ animation: pulse var(--duration-slow) var(--ease-in-out-smooth) infinite;
454
+ }
455
+
456
+ /* Rotation Animations */
457
+ .animate-spin {
458
+ animation: spin 1s linear infinite;
459
+ }
460
+
461
+ .animate-spin-slow {
462
+ animation: spinSlow 3s linear infinite;
463
+ }
464
+
465
+ /* Attention Animations */
466
+ .animate-shake {
467
+ animation: shake var(--duration-slow) var(--ease-in-out-smooth);
468
+ }
469
+
470
+ .animate-bounce {
471
+ animation: bounce 1s infinite;
472
+ }
473
+
474
+ /* ===================================================================
475
+ LLM SIMULATION ANIMATION CLASSES
476
+ Section streaming and entrance animations
477
+ =================================================================== */
478
+
479
+ /* Section entrance animation - for progressive section appearance */
480
+ .section-streaming {
481
+ animation: sectionEnter 400ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
482
+ opacity: 0;
483
+ transform: translate3d(0, 20px, 0) scale(0.95);
484
+ will-change: transform, opacity;
485
+ /* Performance optimization: GPU acceleration */
486
+ backface-visibility: hidden;
487
+ perspective: 1000px;
488
+ /* Additional performance optimizations */
489
+ contain: layout style paint;
490
+ transform-origin: center center;
491
+ }
492
+
493
+ /* Section entered state - animation complete */
494
+ .section-entered {
495
+ opacity: 1;
496
+ transform: translate3d(0, 0, 0) scale(1);
497
+ will-change: auto;
498
+ /* Remove GPU hints after animation */
499
+ backface-visibility: visible;
500
+ perspective: none;
501
+ }
502
+
503
+ /* Section with streaming glow effect */
504
+ .section-streaming-glow {
505
+ animation: sectionStreamingGlow 1.5s ease-in-out infinite;
506
+ }
507
+
508
+ /* Stagger delay utilities for section animations */
509
+ .section-stagger-0 { animation-delay: 0ms; }
510
+ .section-stagger-1 { animation-delay: 80ms; }
511
+ .section-stagger-2 { animation-delay: 160ms; }
512
+ .section-stagger-3 { animation-delay: 240ms; }
513
+ .section-stagger-4 { animation-delay: 320ms; }
514
+ .section-stagger-5 { animation-delay: 400ms; }
515
+ .section-stagger-6 { animation-delay: 480ms; }
516
+ .section-stagger-7 { animation-delay: 560ms; }
517
+ .section-stagger-8 { animation-delay: 640ms; }
518
+ .section-stagger-9 { animation-delay: 720ms; }
519
+ .section-stagger-10 { animation-delay: 800ms; }
520
+
521
+ /* ===================================================================
522
+ FIELD & ITEM ANIMATION CLASSES
523
+ Progressive reveal animations for fields and items within sections
524
+ =================================================================== */
525
+
526
+ /* Field entrance animation - for progressive field reveal */
527
+ .field-streaming {
528
+ animation: fieldEnter 300ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
529
+ opacity: 0;
530
+ transform: translate3d(0, 10px, 0);
531
+ will-change: transform, opacity;
532
+ /* Performance optimization: GPU acceleration */
533
+ backface-visibility: hidden;
534
+ perspective: 1000px;
535
+ /* Additional performance optimizations */
536
+ contain: layout style paint;
537
+ transform-origin: center center;
538
+ }
539
+
540
+ /* Field entered state - animation complete */
541
+ .field-entered {
542
+ opacity: 1;
543
+ transform: translate3d(0, 0, 0);
544
+ will-change: auto;
545
+ /* Remove GPU hints after animation */
546
+ backface-visibility: visible;
547
+ perspective: none;
548
+ }
549
+
550
+ /* Item entrance animation - for progressive item reveal */
551
+ .item-streaming {
552
+ animation: itemEnter 350ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
553
+ opacity: 0;
554
+ transform: translate3d(-10px, 0, 0);
555
+ will-change: transform, opacity;
556
+ /* Performance optimization: GPU acceleration */
557
+ backface-visibility: hidden;
558
+ perspective: 1000px;
559
+ /* Additional performance optimizations */
560
+ contain: layout style paint;
561
+ transform-origin: center center;
562
+ }
563
+
564
+ /* Item entered state - animation complete */
565
+ .item-entered {
566
+ opacity: 1;
567
+ transform: translate3d(0, 0, 0);
568
+ will-change: auto;
569
+ /* Remove GPU hints after animation */
570
+ backface-visibility: visible;
571
+ perspective: none;
572
+ }
573
+
574
+ /* Stagger delay utilities for field animations (30ms increments) */
575
+ .field-stagger-0 { animation-delay: 0ms; }
576
+ .field-stagger-1 { animation-delay: 30ms; }
577
+ .field-stagger-2 { animation-delay: 60ms; }
578
+ .field-stagger-3 { animation-delay: 90ms; }
579
+ .field-stagger-4 { animation-delay: 120ms; }
580
+ .field-stagger-5 { animation-delay: 150ms; }
581
+ .field-stagger-6 { animation-delay: 180ms; }
582
+ .field-stagger-7 { animation-delay: 210ms; }
583
+ .field-stagger-8 { animation-delay: 240ms; }
584
+ .field-stagger-9 { animation-delay: 270ms; }
585
+ .field-stagger-10 { animation-delay: 300ms; }
586
+ .field-stagger-11 { animation-delay: 330ms; }
587
+ .field-stagger-12 { animation-delay: 360ms; }
588
+ .field-stagger-13 { animation-delay: 390ms; }
589
+ .field-stagger-14 { animation-delay: 420ms; }
590
+ .field-stagger-15 { animation-delay: 450ms; }
591
+
592
+ /* Stagger delay utilities for item animations (40ms increments) */
593
+ .item-stagger-0 { animation-delay: 0ms; }
594
+ .item-stagger-1 { animation-delay: 40ms; }
595
+ .item-stagger-2 { animation-delay: 80ms; }
596
+ .item-stagger-3 { animation-delay: 120ms; }
597
+ .item-stagger-4 { animation-delay: 160ms; }
598
+ .item-stagger-5 { animation-delay: 200ms; }
599
+ .item-stagger-6 { animation-delay: 240ms; }
600
+ .item-stagger-7 { animation-delay: 280ms; }
601
+ .item-stagger-8 { animation-delay: 320ms; }
602
+ .item-stagger-9 { animation-delay: 360ms; }
603
+ .item-stagger-10 { animation-delay: 400ms; }
604
+ .item-stagger-11 { animation-delay: 440ms; }
605
+ .item-stagger-12 { animation-delay: 480ms; }
606
+ .item-stagger-13 { animation-delay: 520ms; }
607
+ .item-stagger-14 { animation-delay: 560ms; }
608
+ .item-stagger-15 { animation-delay: 600ms; }
609
+
610
+ /* ===================================================================
611
+ STATE TRANSITION ANIMATION CLASSES
612
+ Smooth transitions between thinking, streaming, and complete states
613
+ =================================================================== */
614
+
615
+ /* State transition - fade in new state */
616
+ .state-transition-enter {
617
+ animation: stateFade 400ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
618
+ opacity: 0;
619
+ transform: translate3d(0, 8px, 0) scale(0.98);
620
+ will-change: transform, opacity;
621
+ /* Performance optimization: GPU acceleration */
622
+ backface-visibility: hidden;
623
+ perspective: 1000px;
624
+ }
625
+
626
+ /* State transition - fade out old state */
627
+ .state-transition-exit {
628
+ animation: stateSlideOut 300ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
629
+ will-change: transform, opacity;
630
+ /* Performance optimization: GPU acceleration */
631
+ backface-visibility: hidden;
632
+ perspective: 1000px;
633
+ }
634
+
635
+ /* State entered - transition complete */
636
+ .state-entered {
637
+ opacity: 1;
638
+ transform: translate3d(0, 0, 0) scale(1);
639
+ will-change: auto;
640
+ /* Remove GPU hints after animation */
641
+ backface-visibility: visible;
642
+ perspective: none;
643
+ }
644
+
645
+ /* Error state animations */
646
+ .error-shake {
647
+ animation: errorShake 500ms cubic-bezier(0.4, 0, 0.2, 1);
648
+ }
649
+
650
+ .error-pulse {
651
+ animation: errorPulse 2s ease-in-out infinite;
652
+ }
653
+
654
+ /* Enhanced skeleton shimmer */
655
+ .skeleton-shimmer {
656
+ background: linear-gradient(
657
+ 90deg,
658
+ var(--muted, rgba(255, 255, 255, 0.1)) 0%,
659
+ var(--muted-foreground, rgba(255, 255, 255, 0.2)) 20%,
660
+ var(--muted, rgba(255, 255, 255, 0.1)) 40%,
661
+ var(--muted, rgba(255, 255, 255, 0.1)) 100%
662
+ );
663
+ background-size: 200% 100%;
664
+ animation: shimmerWave 1.5s ease-in-out infinite;
665
+ }
666
+
667
+ /* Skeleton pulse effect */
668
+ .skeleton-pulse {
669
+ animation: skeletonPulse 2s ease-in-out infinite;
670
+ }
671
+
672
+ /* Stagger Animation Delays - For sequential animations */
673
+ .animate-delay-1 {
674
+ animation-delay: calc(var(--stagger-delay-base) * 1);
675
+ }
676
+
677
+ .animate-delay-2 {
678
+ animation-delay: calc(var(--stagger-delay-base) * 2);
679
+ }
680
+
681
+ .animate-delay-3 {
682
+ animation-delay: calc(var(--stagger-delay-base) * 3);
683
+ }
684
+
685
+ .animate-delay-4 {
686
+ animation-delay: calc(var(--stagger-delay-base) * 4);
687
+ }
688
+
689
+ .animate-delay-5 {
690
+ animation-delay: calc(var(--stagger-delay-base) * 5);
691
+ }
692
+
693
+ /* ===================================================================
694
+ PERFORMANCE OPTIMIZATION
695
+ Hardware acceleration hints for smooth animations
696
+ =================================================================== */
697
+
698
+ /* Apply to animated elements for better performance */
699
+ .will-animate {
700
+ will-change: transform, opacity;
701
+ }
702
+
703
+ .will-animate-transform {
704
+ will-change: transform;
705
+ }
706
+
707
+ .will-animate-opacity {
708
+ will-change: opacity;
709
+ }
710
+
711
+ /* Remove will-change after animation to free resources */
712
+ .animation-complete {
713
+ will-change: auto;
714
+ }
715
+
716
+ /* Hardware acceleration hint */
717
+ .gpu-accelerated {
718
+ transform: translateZ(0);
719
+ backface-visibility: hidden;
720
+ perspective: 1000px;
721
+ }
722
+
723
+ /* ===================================================================
724
+ REDUCED MOTION SUPPORT
725
+ Respect user preferences for reduced motion
726
+ =================================================================== */
727
+
728
+ @media (prefers-reduced-motion: reduce) {
729
+ /* Disable all custom animations */
730
+ .animate-fade-in,
731
+ .animate-fade-in-up,
732
+ .animate-slide-up,
733
+ .animate-slide-down,
734
+ .animate-slide-in-left,
735
+ .animate-slide-in-right,
736
+ .animate-scale,
737
+ .animate-scale-in,
738
+ .animate-pulse,
739
+ .animate-spin,
740
+ .animate-spin-slow,
741
+ .animate-shake,
742
+ .animate-bounce,
743
+ .section-streaming,
744
+ .section-streaming-glow,
745
+ .field-streaming,
746
+ .item-streaming,
747
+ .state-transition-enter,
748
+ .state-transition-exit,
749
+ .error-shake,
750
+ .error-pulse,
751
+ .skeleton-shimmer,
752
+ .skeleton-pulse {
753
+ animation: none !important;
754
+ transition: none !important;
755
+ opacity: 1 !important;
756
+ transform: none !important;
757
+ }
758
+
759
+ /* Remove will-change hints */
760
+ .will-animate,
761
+ .will-animate-transform,
762
+ .will-animate-opacity,
763
+ .section-streaming {
764
+ will-change: auto !important;
765
+ }
766
+ }