@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.1.6 → 0.1.7

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 (82) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.esm.js +18 -1
  4. package/dist/index.js +18 -1
  5. package/dist/setupTests.d.ts +124 -0
  6. package/dist/setupTests.esm.js +122 -0
  7. package/dist/setupTests.js +122 -0
  8. package/dist/styles.css +1 -1
  9. package/package.json +1 -1
  10. package/src/index.css +1046 -0
  11. package/src/index.ts +18 -0
  12. package/src/plugins/theme-css-generator.ts +354 -0
  13. package/src/setupTests.ts +124 -0
  14. package/src/stories/README.md +39 -0
  15. package/src/stories/components/ThemeDebugger.tsx +143 -0
  16. package/src/stories/index.ts +29 -0
  17. package/src/stories/storybook-theme-imports.css +51 -0
  18. package/src/styles/base/fonts.css +30 -0
  19. package/src/styles/base/generated-theme-variables.css +573 -0
  20. package/src/styles/base/index.css +7 -0
  21. package/src/styles/base/reset.css +48 -0
  22. package/src/styles/base/theme.css +1068 -0
  23. package/src/styles/base/typography.css +68 -0
  24. package/src/styles/base/variables.css +5 -0
  25. package/src/styles/components/CLAUDE.md +62 -0
  26. package/src/styles/components/base/badge.css +428 -0
  27. package/src/styles/components/base/button.css +774 -0
  28. package/src/styles/components/base/card.css +601 -0
  29. package/src/styles/components/base/checkbox.css +442 -0
  30. package/src/styles/components/base/index.css +9 -0
  31. package/src/styles/components/base/input.css +887 -0
  32. package/src/styles/components/base/label.css +296 -0
  33. package/src/styles/components/data-display/chart.css +353 -0
  34. package/src/styles/components/data-display/data-grid.css +619 -0
  35. package/src/styles/components/data-display/index.css +9 -0
  36. package/src/styles/components/data-display/list.css +560 -0
  37. package/src/styles/components/data-display/table.css +498 -0
  38. package/src/styles/components/data-display/timeline.css +764 -0
  39. package/src/styles/components/data-display/tree.css +881 -0
  40. package/src/styles/components/feedback/alert.css +358 -0
  41. package/src/styles/components/feedback/index.css +7 -0
  42. package/src/styles/components/feedback/progress.css +435 -0
  43. package/src/styles/components/feedback/skeleton.css +337 -0
  44. package/src/styles/components/feedback/toast.css +564 -0
  45. package/src/styles/components/index.css +17 -0
  46. package/src/styles/components/navigation/breadcrumb.css +465 -0
  47. package/src/styles/components/navigation/index.css +9 -0
  48. package/src/styles/components/navigation/menu.css +572 -0
  49. package/src/styles/components/navigation/pagination.css +635 -0
  50. package/src/styles/components/navigation/sidebar.css +807 -0
  51. package/src/styles/components/navigation/stepper.css +519 -0
  52. package/src/styles/components/navigation/tabs.css +404 -0
  53. package/src/styles/components/overlay/backdrop.css +243 -0
  54. package/src/styles/components/overlay/index.css +8 -0
  55. package/src/styles/components/overlay/modal.css +482 -0
  56. package/src/styles/components/overlay/popover.css +607 -0
  57. package/src/styles/components/overlay/portal.css +213 -0
  58. package/src/styles/components/overlay/tooltip.css +488 -0
  59. package/src/styles/generated-theme-variables.css +573 -0
  60. package/src/styles/index.css +5 -0
  61. package/src/styles/layers/index.css +54 -0
  62. package/src/styles/layers/overrides.css +108 -0
  63. package/src/styles/layers/validation.css +159 -0
  64. package/src/styles/layers/validation.js +310 -0
  65. package/src/styles/themes/default.css +450 -0
  66. package/src/styles/themes/enterprise.css +370 -0
  67. package/src/styles/themes/harvey.css +436 -0
  68. package/src/styles/themes/index.css +4 -0
  69. package/src/styles/themes/stan-design.css +572 -0
  70. package/src/styles/utilities/advanced-transition-system.css +467 -0
  71. package/src/styles/utilities/battery-conscious-animations.css +289 -0
  72. package/src/styles/utilities/enterprise-mobile-experience.css +817 -0
  73. package/src/styles/utilities/hardware-acceleration.css +121 -0
  74. package/src/styles/utilities/index.css +20 -0
  75. package/src/styles/utilities/mobile-skeleton-loading.css +596 -0
  76. package/src/styles/utilities/semantic-input-system.css +451 -0
  77. package/src/styles/utilities/touch-friendly-interface.css +247 -0
  78. package/src/styles/utilities/touch-optimization.css +165 -0
  79. package/src/test-utils/index.ts +7 -0
  80. package/src/test-utils/theme-testing.tsx +219 -0
  81. package/src/testing/test-automation.ts +627 -0
  82. package/src/testing/test-utils.tsx +367 -0
@@ -0,0 +1,764 @@
1
+ /* Timeline Component Styles */
2
+ /* Semantic CSS architecture following BEM methodology */
3
+
4
+ /* ============================================================================ */
5
+ /* TIMELINE CONTAINER */
6
+ /* ============================================================================ */
7
+
8
+ .timeline {
9
+ --timeline-bg: var(--cs-colors-surface-background);
10
+ --timeline-border: var(--cs-colors-surface-border);
11
+ --timeline-radius: var(--cs-border-radius-md);
12
+ --timeline-shadow: var(--cs-shadows-sm);
13
+ --timeline-spacing: var(--cs-spacing-scale-4);
14
+ --timeline-connector: var(--cs-colors-surface-divider);
15
+ --timeline-connector-width: var(--cs-border-width-thick);
16
+ }
17
+
18
+ .timeline__container {
19
+ position: relative;
20
+ background-color: var(--timeline-bg);
21
+ border: var(--cs-border-width-normal) solid var(--timeline-border);
22
+ border-radius: var(--timeline-radius);
23
+ box-shadow: var(--timeline-shadow);
24
+ overflow: hidden;
25
+ }
26
+
27
+ /* Timeline container sizes */
28
+ .timeline__container--sm {
29
+ font-size: var(--cs-fonts-primary-sizes-sm);
30
+ }
31
+
32
+ .timeline__container--md {
33
+ font-size: var(--cs-fonts-primary-sizes-base);
34
+ }
35
+
36
+ .timeline__container--lg {
37
+ font-size: var(--cs-fonts-primary-sizes-lg);
38
+ }
39
+
40
+ /* Timeline variants */
41
+ .timeline__container--bordered {
42
+ border-width: var(--cs-border-width-thick);
43
+ border-color: var(--cs-colors-primary-500);
44
+ }
45
+
46
+ .timeline__container--striped .timeline__item:nth-child(even) {
47
+ background-color: var(--cs-colors-surface-surface);
48
+ }
49
+
50
+ /* ============================================================================ */
51
+ /* TIMELINE HEADER */
52
+ /* ============================================================================ */
53
+
54
+ .timeline__header {
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: space-between;
58
+ padding: var(--timeline-spacing);
59
+ border-bottom: var(--cs-border-width-normal) solid var(--cs-colors-surface-divider);
60
+ background-color: var(--cs-colors-surface-surface);
61
+ }
62
+
63
+ .timeline__title {
64
+ font-size: var(--cs-fonts-primary-sizes-lg);
65
+ font-weight: var(--cs-fonts-primary-weights-semibold);
66
+ color: var(--cs-colors-text-primary);
67
+ margin: 0;
68
+ }
69
+
70
+ .timeline__actions {
71
+ display: flex;
72
+ align-items: center;
73
+ gap: var(--cs-spacing-scale-2);
74
+ }
75
+
76
+ .timeline__search {
77
+ position: relative;
78
+ max-width: var(--cs-spacing-scale-64);
79
+ }
80
+
81
+ .timeline__search-input {
82
+ width: 100%;
83
+ padding: var(--cs-spacing-scale-2) var(--cs-spacing-scale-10) var(--cs-spacing-scale-2) var(--cs-spacing-scale-3);
84
+ border: var(--cs-border-width-normal) solid var(--timeline-border);
85
+ border-radius: var(--cs-border-radius-md);
86
+ font-size: var(--cs-fonts-primary-sizes-sm);
87
+ background-color: var(--timeline-bg);
88
+ transition: var(--cs-transitions-colors);
89
+ }
90
+
91
+ .timeline__search-input:focus {
92
+ outline: none;
93
+ border-color: var(--cs-colors-primary-500);
94
+ box-shadow: var(--cs-shadows-focus);
95
+ }
96
+
97
+ .timeline__search-icon {
98
+ position: absolute;
99
+ right: var(--cs-spacing-scale-3);
100
+ top: var(--cs-percentage-50);
101
+ transform: translateY(calc(-1 * var(--cs-percentage-50)));
102
+ width: var(--cs-spacing-scale-4);
103
+ height: var(--cs-spacing-scale-4);
104
+ color: var(--cs-colors-text-muted);
105
+ pointer-events: none;
106
+ }
107
+
108
+ .timeline__filters {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: var(--cs-spacing-scale-2);
112
+ margin-top: var(--cs-spacing-scale-3);
113
+ padding-top: var(--cs-spacing-scale-3);
114
+ border-top: var(--cs-border-width-normal) solid var(--cs-colors-surface-divider);
115
+ }
116
+
117
+ /* ============================================================================ */
118
+ /* TIMELINE WRAPPER */
119
+ /* ============================================================================ */
120
+
121
+ .timeline__wrapper {
122
+ position: relative;
123
+ padding: var(--timeline-spacing);
124
+ max-height: var(--cs-spacing-scale-96);
125
+ overflow-y: auto;
126
+ }
127
+
128
+ .timeline__list {
129
+ position: relative;
130
+ list-style: none;
131
+ margin: 0;
132
+ padding: 0;
133
+ }
134
+
135
+ /* Timeline modes */
136
+ .timeline__list--left {
137
+ padding-left: var(--cs-spacing-scale-8);
138
+ }
139
+
140
+ .timeline__list--right {
141
+ padding-right: var(--cs-spacing-scale-8);
142
+ }
143
+
144
+ .timeline__list--alternate {
145
+ padding-left: var(--cs-spacing-scale-8);
146
+ padding-right: var(--cs-spacing-scale-8);
147
+ }
148
+
149
+ /* ============================================================================ */
150
+ /* TIMELINE CONNECTOR LINE */
151
+ /* ============================================================================ */
152
+
153
+ .timeline__connector {
154
+ position: absolute;
155
+ width: var(--timeline-connector-width);
156
+ background-color: var(--timeline-connector);
157
+ z-index: 1;
158
+ }
159
+
160
+ .timeline__connector--left {
161
+ left: var(--cs-spacing-scale-4);
162
+ top: var(--cs-spacing-scale-2);
163
+ bottom: var(--cs-spacing-scale-2);
164
+ }
165
+
166
+ .timeline__connector--right {
167
+ right: var(--cs-spacing-scale-4);
168
+ top: var(--cs-spacing-scale-2);
169
+ bottom: var(--cs-spacing-scale-2);
170
+ }
171
+
172
+ .timeline__connector--alternate {
173
+ left: var(--cs-percentage-50);
174
+ top: var(--cs-spacing-scale-2);
175
+ bottom: var(--cs-spacing-scale-2);
176
+ transform: translateX(calc(-1 * var(--cs-percentage-50)));
177
+ }
178
+
179
+ /* ============================================================================ */
180
+ /* TIMELINE ITEMS */
181
+ /* ============================================================================ */
182
+
183
+ .timeline__item {
184
+ position: relative;
185
+ margin-bottom: var(--cs-spacing-scale-6);
186
+ display: flex;
187
+ align-items: flex-start;
188
+ }
189
+
190
+ .timeline__item:last-child {
191
+ margin-bottom: var(--cs-spacing-scale-0);
192
+ }
193
+
194
+ /* Timeline item positioning */
195
+ .timeline__item--left {
196
+ justify-content: flex-start;
197
+ padding-left: var(--cs-spacing-scale-12);
198
+ }
199
+
200
+ .timeline__item--right {
201
+ justify-content: flex-end;
202
+ padding-right: var(--cs-spacing-scale-12);
203
+ }
204
+
205
+ .timeline__item--alternate-left {
206
+ justify-content: flex-end;
207
+ padding-right: calc(50% + var(--cs-spacing-scale-8));
208
+ }
209
+
210
+ .timeline__item--alternate-right {
211
+ justify-content: flex-start;
212
+ padding-left: calc(50% + var(--cs-spacing-scale-8));
213
+ }
214
+
215
+ /* Size variants for timeline items */
216
+ .timeline__container--sm .timeline__item {
217
+ margin-bottom: var(--cs-spacing-scale-4);
218
+ }
219
+
220
+ .timeline__container--lg .timeline__item {
221
+ margin-bottom: var(--cs-spacing-scale-8);
222
+ }
223
+
224
+ /* ============================================================================ */
225
+ /* TIMELINE ITEM INDICATOR */
226
+ /* ============================================================================ */
227
+
228
+ .timeline__indicator {
229
+ position: absolute;
230
+ z-index: 10;
231
+ display: flex;
232
+ align-items: center;
233
+ justify-content: center;
234
+ width: var(--cs-spacing-scale-8);
235
+ height: var(--cs-spacing-scale-8);
236
+ border-radius: var(--cs-border-radius-full);
237
+ background-color: var(--timeline-bg);
238
+ border: var(--timeline-connector-width) solid var(--timeline-connector);
239
+ }
240
+
241
+ .timeline__indicator--left {
242
+ left: 0;
243
+ top: var(--cs-spacing-scale-2);
244
+ }
245
+
246
+ .timeline__indicator--right {
247
+ right: 0;
248
+ top: var(--cs-spacing-scale-2);
249
+ }
250
+
251
+ .timeline__indicator--alternate {
252
+ left: var(--cs-percentage-50);
253
+ top: var(--cs-spacing-scale-2);
254
+ transform: translateX(calc(-1 * var(--cs-percentage-50)));
255
+ }
256
+
257
+ /* Timeline indicator status variants */
258
+ .timeline__indicator--success {
259
+ background-color: var(--cs-colors-semantic-success);
260
+ border-color: var(--cs-colors-semantic-success);
261
+ color: var(--cs-colors-text-onPrimary);
262
+ }
263
+
264
+ .timeline__indicator--warning {
265
+ background-color: var(--cs-colors-semantic-warning);
266
+ border-color: var(--cs-colors-semantic-warning);
267
+ color: var(--cs-colors-text-onPrimary);
268
+ }
269
+
270
+ .timeline__indicator--error {
271
+ background-color: var(--cs-colors-semantic-error);
272
+ border-color: var(--cs-colors-semantic-error);
273
+ color: var(--cs-colors-text-onPrimary);
274
+ }
275
+
276
+ .timeline__indicator--info {
277
+ background-color: var(--cs-colors-primary-500);
278
+ border-color: var(--cs-colors-primary-500);
279
+ color: var(--cs-colors-text-onPrimary);
280
+ }
281
+
282
+ .timeline__indicator--pending {
283
+ background-color: var(--cs-colors-gray-300);
284
+ border-color: var(--cs-colors-gray-300);
285
+ color: var(--cs-colors-text-secondary);
286
+ }
287
+
288
+ .timeline__indicator--processing {
289
+ background-color: var(--cs-colors-primary-100);
290
+ border-color: var(--cs-colors-primary-500);
291
+ color: var(--cs-colors-primary-600);
292
+ animation: timeline-pulse var(--cs-transitions-durations-slow) infinite;
293
+ }
294
+
295
+ @keyframes timeline-pulse {
296
+ 0%, 100% { opacity: 1; }
297
+ 50% { opacity: var(--cs-opacity-50); }
298
+ }
299
+
300
+ .timeline__indicator--completed {
301
+ background-color: var(--cs-colors-semantic-success);
302
+ border-color: var(--cs-colors-semantic-success);
303
+ color: var(--cs-colors-text-onPrimary);
304
+ }
305
+
306
+ .timeline__indicator-icon {
307
+ width: var(--cs-spacing-scale-4);
308
+ height: var(--cs-spacing-scale-4);
309
+ }
310
+
311
+ /* Size variants for timeline indicators */
312
+ .timeline__container--sm .timeline__indicator {
313
+ width: var(--cs-spacing-scale-6);
314
+ height: var(--cs-spacing-scale-6);
315
+ }
316
+
317
+ .timeline__container--sm .timeline__indicator-icon {
318
+ width: var(--cs-spacing-scale-3);
319
+ height: var(--cs-spacing-scale-3);
320
+ }
321
+
322
+ .timeline__container--lg .timeline__indicator {
323
+ width: var(--cs-spacing-scale-10);
324
+ height: var(--cs-spacing-scale-10);
325
+ }
326
+
327
+ .timeline__container--lg .timeline__indicator-icon {
328
+ width: var(--cs-spacing-scale-5);
329
+ height: var(--cs-spacing-scale-5);
330
+ }
331
+
332
+ /* ============================================================================ */
333
+ /* TIMELINE ITEM CONTENT */
334
+ /* ============================================================================ */
335
+
336
+ .timeline__content {
337
+ flex: 1;
338
+ max-width: calc(100% - var(--cs-spacing-scale-16));
339
+ background-color: var(--timeline-bg);
340
+ border: var(--cs-border-width-normal) solid var(--timeline-border);
341
+ border-radius: var(--timeline-radius);
342
+ padding: var(--timeline-spacing);
343
+ box-shadow: var(--cs-shadows-sm);
344
+ transition: var(--cs-transitions-all);
345
+ }
346
+
347
+ .timeline__content:hover {
348
+ box-shadow: var(--cs-shadows-md);
349
+ transform: translateY(calc(-1 * var(--cs-spacing-scale-0-25)));
350
+ }
351
+
352
+ .timeline__content--clickable {
353
+ cursor: pointer;
354
+ }
355
+
356
+ .timeline__content--clickable:hover {
357
+ border-color: var(--cs-colors-primary-300);
358
+ }
359
+
360
+ /* Timeline content positioning */
361
+ .timeline__content--left::before,
362
+ .timeline__content--alternate-left::before {
363
+ content: '';
364
+ position: absolute;
365
+ right: calc(-1 * var(--cs-spacing-scale-2));
366
+ top: var(--cs-spacing-scale-4);
367
+ width: 0;
368
+ height: 0;
369
+ border-left: var(--cs-spacing-scale-2) solid var(--timeline-border);
370
+ border-top: var(--cs-spacing-scale-2) solid transparent;
371
+ border-bottom: var(--cs-spacing-scale-2) solid transparent;
372
+ }
373
+
374
+ .timeline__content--right::before,
375
+ .timeline__content--alternate-right::before {
376
+ content: '';
377
+ position: absolute;
378
+ left: calc(-1 * var(--cs-spacing-scale-2));
379
+ top: var(--cs-spacing-scale-4);
380
+ width: 0;
381
+ height: 0;
382
+ border-right: var(--cs-spacing-scale-2) solid var(--timeline-border);
383
+ border-top: var(--cs-spacing-scale-2) solid transparent;
384
+ border-bottom: var(--cs-spacing-scale-2) solid transparent;
385
+ }
386
+
387
+ .timeline__content--left::after,
388
+ .timeline__content--alternate-left::after {
389
+ content: '';
390
+ position: absolute;
391
+ right: calc(-1 * var(--cs-spacing-scale-1-75));
392
+ top: var(--cs-spacing-scale-4);
393
+ width: 0;
394
+ height: 0;
395
+ border-left: var(--cs-spacing-scale-2) solid var(--timeline-bg);
396
+ border-top: var(--cs-spacing-scale-2) solid transparent;
397
+ border-bottom: var(--cs-spacing-scale-2) solid transparent;
398
+ }
399
+
400
+ .timeline__content--right::after,
401
+ .timeline__content--alternate-right::after {
402
+ content: '';
403
+ position: absolute;
404
+ left: calc(-1 * var(--cs-spacing-scale-1-75));
405
+ top: var(--cs-spacing-scale-4);
406
+ width: 0;
407
+ height: 0;
408
+ border-right: var(--cs-spacing-scale-2) solid var(--timeline-bg);
409
+ border-top: var(--cs-spacing-scale-2) solid transparent;
410
+ border-bottom: var(--cs-spacing-scale-2) solid transparent;
411
+ }
412
+
413
+ /* ============================================================================ */
414
+ /* TIMELINE ITEM HEADER */
415
+ /* ============================================================================ */
416
+
417
+ .timeline__item-header {
418
+ display: flex;
419
+ align-items: flex-start;
420
+ justify-content: space-between;
421
+ margin-bottom: var(--cs-spacing-scale-2);
422
+ }
423
+
424
+ .timeline__item-title {
425
+ font-weight: var(--cs-fonts-primary-weights-semibold);
426
+ color: var(--cs-colors-text-primary);
427
+ margin: 0;
428
+ line-height: var(--cs-fonts-primary-line-heights-tight);
429
+ }
430
+
431
+ .timeline__item-timestamp {
432
+ font-size: var(--cs-fonts-primary-sizes-sm);
433
+ color: var(--cs-colors-text-muted);
434
+ white-space: nowrap;
435
+ margin-left: var(--cs-spacing-scale-3);
436
+ }
437
+
438
+ /* ============================================================================ */
439
+ /* TIMELINE ITEM BODY */
440
+ /* ============================================================================ */
441
+
442
+ .timeline__item-description {
443
+ color: var(--cs-colors-text-secondary);
444
+ line-height: var(--cs-fonts-primary-line-heights-normal);
445
+ margin-bottom: var(--cs-spacing-scale-3);
446
+ }
447
+
448
+ .timeline__item-description:last-child {
449
+ margin-bottom: var(--cs-spacing-scale-0);
450
+ }
451
+
452
+ .timeline__item-custom-content {
453
+ margin-bottom: var(--cs-spacing-scale-3);
454
+ }
455
+
456
+ .timeline__item-custom-content:last-child {
457
+ margin-bottom: var(--cs-spacing-scale-0);
458
+ }
459
+
460
+ /* ============================================================================ */
461
+ /* TIMELINE ITEM METADATA */
462
+ /* ============================================================================ */
463
+
464
+ .timeline__item-metadata {
465
+ display: flex;
466
+ align-items: center;
467
+ gap: var(--cs-spacing-scale-3);
468
+ margin-bottom: var(--cs-spacing-scale-3);
469
+ font-size: var(--cs-fonts-primary-sizes-sm);
470
+ }
471
+
472
+ .timeline__item-metadata:last-child {
473
+ margin-bottom: var(--cs-spacing-scale-0);
474
+ }
475
+
476
+ .timeline__item-author {
477
+ color: var(--cs-colors-text-secondary);
478
+ }
479
+
480
+ .timeline__item-category {
481
+ display: inline-flex;
482
+ align-items: center;
483
+ padding: var(--cs-spacing-scale-1) var(--cs-spacing-scale-2);
484
+ background-color: var(--cs-colors-gray-100);
485
+ color: var(--cs-colors-gray-800);
486
+ border-radius: var(--cs-border-radius-md);
487
+ font-size: var(--cs-fonts-primary-sizes-xs);
488
+ font-weight: var(--cs-fonts-primary-weights-medium);
489
+ }
490
+
491
+ .timeline__item-tags {
492
+ display: flex;
493
+ flex-wrap: wrap;
494
+ gap: var(--cs-spacing-scale-1);
495
+ }
496
+
497
+ .timeline__item-tag {
498
+ display: inline-flex;
499
+ align-items: center;
500
+ padding: var(--cs-spacing-scale-1) var(--cs-spacing-scale-2);
501
+ background-color: var(--cs-colors-primary-100);
502
+ color: var(--cs-colors-primary-800);
503
+ border-radius: var(--cs-border-radius-md);
504
+ font-size: var(--cs-fonts-primary-sizes-xs);
505
+ font-weight: var(--cs-fonts-primary-weights-medium);
506
+ }
507
+
508
+ /* ============================================================================ */
509
+ /* TIMELINE ITEM ACTIONS */
510
+ /* ============================================================================ */
511
+
512
+ .timeline__item-actions {
513
+ display: flex;
514
+ align-items: center;
515
+ gap: var(--cs-spacing-scale-2);
516
+ margin-top: var(--cs-spacing-scale-3);
517
+ padding-top: var(--cs-spacing-scale-3);
518
+ border-top: var(--cs-border-width-normal) solid var(--cs-colors-surface-divider);
519
+ }
520
+
521
+ .timeline__item-action {
522
+ display: inline-flex;
523
+ align-items: center;
524
+ gap: var(--cs-spacing-scale-1);
525
+ padding: var(--cs-spacing-scale-1) var(--cs-spacing-scale-2);
526
+ border: var(--cs-border-width-normal) solid var(--timeline-border);
527
+ background-color: var(--timeline-bg);
528
+ border-radius: var(--cs-border-radius-sm);
529
+ font-size: var(--cs-fonts-primary-sizes-sm);
530
+ cursor: pointer;
531
+ transition: var(--cs-transitions-colors);
532
+ text-decoration: none;
533
+ color: var(--cs-colors-text-secondary);
534
+ }
535
+
536
+ .timeline__item-action:hover {
537
+ background-color: var(--cs-colors-surface-surface);
538
+ color: var(--cs-colors-text-primary);
539
+ }
540
+
541
+ .timeline__item-action--primary {
542
+ background-color: var(--cs-colors-primary-500);
543
+ color: var(--cs-colors-text-onPrimary);
544
+ border-color: var(--cs-colors-primary-500);
545
+ }
546
+
547
+ .timeline__item-action--primary:hover {
548
+ background-color: var(--cs-colors-primary-600);
549
+ }
550
+
551
+ .timeline__item-action--danger {
552
+ color: var(--cs-colors-semantic-error);
553
+ border-color: var(--cs-colors-semantic-error);
554
+ }
555
+
556
+ .timeline__item-action--danger:hover {
557
+ background-color: var(--cs-colors-semantic-error-50);
558
+ }
559
+
560
+ .timeline__item-action-icon {
561
+ width: var(--cs-spacing-scale-4);
562
+ height: var(--cs-spacing-scale-4);
563
+ }
564
+
565
+ /* ============================================================================ */
566
+ /* TIMELINE STATES */
567
+ /* ============================================================================ */
568
+
569
+ .timeline__loading {
570
+ display: flex;
571
+ align-items: center;
572
+ justify-content: center;
573
+ padding: var(--cs-spacing-scale-16) var(--timeline-spacing);
574
+ color: var(--cs-colors-text-secondary);
575
+ }
576
+
577
+ .timeline__loading-spinner {
578
+ width: var(--cs-spacing-scale-8);
579
+ height: var(--cs-spacing-scale-8);
580
+ border: var(--cs-border-width-thick) solid var(--cs-colors-surface-divider);
581
+ border-top: var(--cs-border-width-thick) solid var(--cs-colors-primary-500);
582
+ border-radius: var(--cs-border-radius-full);
583
+ animation: timeline-loading-spin var(--cs-transitions-durations-normal) linear infinite;
584
+ margin-right: var(--cs-spacing-scale-3);
585
+ }
586
+
587
+ @keyframes timeline-loading-spin {
588
+ 0% { transform: rotate(var(--cs-rotation-none)); }
589
+ 100% { transform: rotate(var(--cs-rotation-full)); }
590
+ }
591
+
592
+ .timeline__error {
593
+ display: flex;
594
+ align-items: center;
595
+ justify-content: center;
596
+ padding: var(--cs-spacing-scale-16) var(--timeline-spacing);
597
+ color: var(--cs-colors-semantic-error);
598
+ text-align: center;
599
+ }
600
+
601
+ .timeline__empty {
602
+ display: flex;
603
+ flex-direction: column;
604
+ align-items: center;
605
+ justify-content: center;
606
+ padding: var(--cs-spacing-scale-16) var(--timeline-spacing);
607
+ color: var(--cs-colors-text-muted);
608
+ text-align: center;
609
+ }
610
+
611
+ .timeline__empty-icon {
612
+ width: var(--cs-spacing-scale-16);
613
+ height: var(--cs-spacing-scale-16);
614
+ margin-bottom: var(--cs-spacing-scale-4);
615
+ opacity: var(--cs-opacity-50);
616
+ }
617
+
618
+ /* ============================================================================ */
619
+ /* RESPONSIVE DESIGN */
620
+ /* ============================================================================ */
621
+
622
+ @media (max-width: 768px) {
623
+ .timeline__header {
624
+ flex-direction: column;
625
+ align-items: stretch;
626
+ gap: var(--cs-spacing-scale-3);
627
+ }
628
+
629
+ .timeline__search {
630
+ max-width: none;
631
+ }
632
+
633
+ .timeline__list--alternate {
634
+ padding-left: var(--cs-spacing-scale-8);
635
+ padding-right: 0;
636
+ }
637
+
638
+ .timeline__item--alternate-left,
639
+ .timeline__item--alternate-right {
640
+ justify-content: flex-start;
641
+ padding-left: var(--cs-spacing-scale-12);
642
+ padding-right: 0;
643
+ }
644
+
645
+ .timeline__connector--alternate {
646
+ left: var(--cs-spacing-scale-4);
647
+ transform: none;
648
+ }
649
+
650
+ .timeline__indicator--alternate {
651
+ left: 0;
652
+ transform: none;
653
+ }
654
+
655
+ .timeline__content {
656
+ max-width: calc(100% - var(--cs-spacing-scale-12));
657
+ }
658
+
659
+ .timeline__content--alternate-left::before,
660
+ .timeline__content--alternate-right::before {
661
+ left: calc(-1 * var(--cs-spacing-scale-2));
662
+ border-left: none;
663
+ border-right: var(--cs-spacing-scale-2) solid var(--timeline-border);
664
+ }
665
+
666
+ .timeline__content--alternate-left::after,
667
+ .timeline__content--alternate-right::after {
668
+ left: calc(-1 * var(--cs-spacing-scale-1-75));
669
+ border-left: none;
670
+ border-right: var(--cs-spacing-scale-2) solid var(--timeline-bg);
671
+ }
672
+ }
673
+
674
+ @media (max-width: 640px) {
675
+ .timeline__item {
676
+ margin-bottom: var(--cs-spacing-scale-4);
677
+ }
678
+
679
+ .timeline__item-header {
680
+ flex-direction: column;
681
+ align-items: flex-start;
682
+ gap: var(--cs-spacing-scale-1);
683
+ }
684
+
685
+ .timeline__item-timestamp {
686
+ margin-left: 0;
687
+ }
688
+
689
+ .timeline__item-actions {
690
+ flex-wrap: wrap;
691
+ }
692
+ }
693
+
694
+ /* ============================================================================ */
695
+ /* ACCESSIBILITY */
696
+ /* ============================================================================ */
697
+
698
+ .timeline__container:focus-within {
699
+ outline: var(--cs-border-width-thick) solid var(--cs-colors-interactive-focus);
700
+ outline-offset: var(--cs-spacing-scale-0-5);
701
+ }
702
+
703
+ .timeline__content:focus {
704
+ outline: var(--cs-border-width-thick) solid var(--cs-colors-interactive-focus);
705
+ outline-offset: var(--cs-spacing-scale-0-5);
706
+ }
707
+
708
+ .timeline__item-action:focus {
709
+ outline: var(--cs-border-width-thick) solid var(--cs-colors-interactive-focus);
710
+ outline-offset: var(--cs-spacing-scale-0-5);
711
+ }
712
+
713
+ /* High contrast mode support */
714
+ @media (prefers-contrast: high) {
715
+ .timeline__container {
716
+ border-width: var(--cs-border-width-thick);
717
+ }
718
+
719
+ .timeline__content {
720
+ border-width: var(--cs-border-width-thick);
721
+ }
722
+ }
723
+
724
+ /* Reduced motion support */
725
+ @media (prefers-reduced-motion: reduce) {
726
+ .timeline__content,
727
+ .timeline__item-action {
728
+ transition: none;
729
+ }
730
+
731
+ .timeline__indicator--processing {
732
+ animation: none;
733
+ }
734
+
735
+ .timeline__loading-spinner {
736
+ animation: none;
737
+ }
738
+ }
739
+
740
+ /* ============================================================================ */
741
+ /* PRINT STYLES */
742
+ /* ============================================================================ */
743
+
744
+ @media print {
745
+ .timeline__container {
746
+ box-shadow: none;
747
+ border: var(--cs-border-width-normal) solid var(--cs-colors-black);
748
+ }
749
+
750
+ .timeline__actions,
751
+ .timeline__item-actions {
752
+ display: none;
753
+ }
754
+
755
+ .timeline__loading,
756
+ .timeline__error {
757
+ display: none;
758
+ }
759
+
760
+ .timeline__content:hover {
761
+ transform: none;
762
+ box-shadow: none;
763
+ }
764
+ }