@keenmate/pure-admin-core 2.3.0 → 2.3.2

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 (69) hide show
  1. package/README.md +7 -5
  2. package/dist/css/main.css +207 -181
  3. package/package.json +1 -1
  4. package/snippets/buttons.html +375 -365
  5. package/src/scss/_base-css-variables.scss +8 -0
  6. package/src/scss/_core.scss +121 -121
  7. package/src/scss/core-components/_alerts.scss +227 -227
  8. package/src/scss/core-components/_badges.scss +16 -16
  9. package/src/scss/core-components/_base.scss +125 -125
  10. package/src/scss/core-components/_buttons.scss +580 -548
  11. package/src/scss/core-components/_callouts.scss +152 -152
  12. package/src/scss/core-components/_cards.scss +488 -488
  13. package/src/scss/core-components/_checkbox-lists.scss +289 -289
  14. package/src/scss/core-components/_code.scss +141 -141
  15. package/src/scss/core-components/_command-palette.scss +509 -509
  16. package/src/scss/core-components/_comparison.scss +172 -172
  17. package/src/scss/core-components/_data-display.scss +9 -9
  18. package/src/scss/core-components/_data-viz.scss +9 -9
  19. package/src/scss/core-components/_detail-panel.scss +1 -1
  20. package/src/scss/core-components/_file-selector.scss +780 -780
  21. package/src/scss/core-components/_filter-card.scss +58 -58
  22. package/src/scss/core-components/_forms.scss +16 -16
  23. package/src/scss/core-components/_grid.scss +293 -293
  24. package/src/scss/core-components/_layout.scss +15 -15
  25. package/src/scss/core-components/_lists.scss +211 -211
  26. package/src/scss/core-components/_loaders.scss +277 -277
  27. package/src/scss/core-components/_logic-tree.scss +280 -280
  28. package/src/scss/core-components/_modals.scss +203 -203
  29. package/src/scss/core-components/_notifications.scss +320 -320
  30. package/src/scss/core-components/_pagers.scss +141 -141
  31. package/src/scss/core-components/_popconfirm.scss +170 -170
  32. package/src/scss/core-components/_profile.scss +405 -405
  33. package/src/scss/core-components/_scrollbars.scss +40 -40
  34. package/src/scss/core-components/_settings-panel.scss +141 -141
  35. package/src/scss/core-components/_statistics.scss +200 -201
  36. package/src/scss/core-components/_tables.scss +900 -900
  37. package/src/scss/core-components/_tabs.scss +504 -504
  38. package/src/scss/core-components/_timeline.scss +589 -589
  39. package/src/scss/core-components/_toasts.scss +425 -425
  40. package/src/scss/core-components/_tooltips.scss +605 -605
  41. package/src/scss/core-components/_utilities.scss +1 -1
  42. package/src/scss/core-components/_web-components-theme.scss +21 -21
  43. package/src/scss/core-components/badges/_badge-base.scss +121 -121
  44. package/src/scss/core-components/badges/_badge-group.scss +25 -25
  45. package/src/scss/core-components/badges/_composite-badge-variants.scss +396 -396
  46. package/src/scss/core-components/badges/_composite-badge.scss +70 -70
  47. package/src/scss/core-components/badges/_index.scss +10 -10
  48. package/src/scss/core-components/badges/_labels.scss +155 -155
  49. package/src/scss/core-components/forms/_checkboxes-radios.scss +205 -205
  50. package/src/scss/core-components/forms/_form-inputs.scss +136 -135
  51. package/src/scss/core-components/forms/_form-layout.scss +66 -66
  52. package/src/scss/core-components/forms/_form-states.scss +115 -115
  53. package/src/scss/core-components/forms/_index.scss +12 -12
  54. package/src/scss/core-components/forms/_input-groups.scss +154 -154
  55. package/src/scss/core-components/forms/_input-wrapper.scss +89 -89
  56. package/src/scss/core-components/forms/_query-editor.scss +313 -313
  57. package/src/scss/core-components/layout/_index.scss +11 -11
  58. package/src/scss/core-components/layout/_layout-container.scss +168 -168
  59. package/src/scss/core-components/layout/_layout-responsive.scss +99 -99
  60. package/src/scss/core-components/layout/_navbar-elements.scss +250 -250
  61. package/src/scss/core-components/layout/_navbar.scss +83 -83
  62. package/src/scss/core-components/layout/_sidebar-states.scss +237 -237
  63. package/src/scss/core-components/layout/_sidebar.scss +234 -234
  64. package/src/scss/main.scss +7 -7
  65. package/src/scss/utilities.scss +740 -740
  66. package/src/scss/variables/_base.scss +228 -228
  67. package/src/scss/variables/_components.scss +748 -748
  68. package/src/scss/variables/_layout.scss +65 -65
  69. package/src/scss/variables/_typography.scss +37 -37
@@ -1,589 +1,589 @@
1
- /* ========================================
2
- Timeline Component
3
- ======================================== */
4
- @use '../variables' as *;
5
-
6
- .pa-timeline {
7
- position: relative;
8
- padding: 0;
9
- list-style: none;
10
- margin: 0;
11
-
12
- &__item {
13
- position: relative;
14
- }
15
-
16
- // Variant 1: Simple start-aligned timeline (like Timeline #1)
17
- &--simple {
18
- border-inline-start: $timeline-simple-line-width solid var(--pa-border-color); // RTL: flips to right
19
- margin-inline-start: $timeline-simple-margin-left; // RTL: flips to right
20
- padding-inline-start: $timeline-simple-padding-left; // RTL: flips to right
21
-
22
- .pa-timeline__item {
23
- padding-bottom: $spacing-lg;
24
- position: relative;
25
-
26
- &:last-child {
27
- border: 0;
28
- padding-bottom: 0;
29
- }
30
-
31
- // Dot marker
32
- &::before {
33
- content: '';
34
- position: absolute;
35
- inset-inline-start: $timeline-simple-dot-offset; // RTL: flips to right
36
- top: 0;
37
- width: $timeline-simple-dot-size;
38
- height: $timeline-simple-dot-size;
39
- background: var(--pa-main-bg);
40
- border: $timeline-simple-dot-border solid $accent-color;
41
- border-radius: 50%;
42
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($accent-color, $timeline-simple-dot-shadow-opacity);
43
- }
44
-
45
- // Marker color modifiers
46
- &--primary::before {
47
- border-color: $btn-primary-bg;
48
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($btn-primary-bg, $timeline-simple-dot-shadow-opacity);
49
- }
50
-
51
- &--success::before {
52
- border-color: $success-bg;
53
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($success-bg, $timeline-simple-dot-shadow-opacity);
54
- }
55
-
56
- &--warning::before {
57
- border-color: $warning-bg;
58
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($warning-bg, $timeline-simple-dot-shadow-opacity);
59
- }
60
-
61
- &--danger::before {
62
- border-color: $danger-bg;
63
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($danger-bg, $timeline-simple-dot-shadow-opacity);
64
- }
65
-
66
- &--info::before {
67
- border-color: $info-bg;
68
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($info-bg, $timeline-simple-dot-shadow-opacity);
69
- }
70
-
71
- &--secondary::before {
72
- border-color: var(--pa-text-color-2);
73
- box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba(var(--pa-text-color-2), $timeline-simple-dot-shadow-opacity);
74
- }
75
-
76
- // Filled/solid bullet modifier
77
- &--filled::before {
78
- background: $accent-color;
79
- }
80
-
81
- &--filled.pa-timeline__item--primary::before {
82
- background: $btn-primary-bg;
83
- }
84
-
85
- &--filled.pa-timeline__item--success::before {
86
- background: $success-bg;
87
- }
88
-
89
- &--filled.pa-timeline__item--warning::before {
90
- background: $warning-bg;
91
- }
92
-
93
- &--filled.pa-timeline__item--danger::before {
94
- background: $danger-bg;
95
- }
96
-
97
- &--filled.pa-timeline__item--info::before {
98
- background: $info-bg;
99
- }
100
-
101
- &--filled.pa-timeline__item--secondary::before {
102
- background: var(--pa-text-color-2);
103
- }
104
- }
105
-
106
- .pa-timeline__time {
107
- display: block;
108
- font-size: $font-size-sm;
109
- font-weight: $font-weight-semibold;
110
- color: var(--pa-text-color-1);
111
- margin-bottom: $spacing-xs;
112
- }
113
-
114
- .pa-timeline__content {
115
- font-size: $font-size-sm;
116
- color: var(--pa-text-color-2);
117
- line-height: $line-height-relaxed;
118
- margin-top: $timeline-simple-content-margin-top;
119
- }
120
- }
121
-
122
- // Variant 2: Timeline Block (Centered alternating)
123
- &--alternating {
124
- position: relative;
125
- max-width: $timeline-block-max-width;
126
- margin: 0 auto;
127
- padding: $timeline-block-padding;
128
-
129
- // Center line
130
- &::after {
131
- content: '';
132
- position: absolute;
133
- width: $timeline-block-line-width;
134
- background: $accent-color;
135
- top: 0;
136
- bottom: 0;
137
- left: 50%;
138
- margin-left: -1px;
139
- }
140
-
141
- .pa-timeline__item {
142
- padding: $timeline-block-item-padding;
143
- position: relative;
144
- background: inherit;
145
- width: $timeline-block-item-width;
146
-
147
- // Left side items
148
- &:nth-child(odd) {
149
- left: 0;
150
- padding-left: $timeline-block-item-padding-left-odd;
151
-
152
- .pa-timeline__date {
153
- right: $timeline-block-date-offset;
154
- }
155
-
156
- .pa-timeline__icon {
157
- right: $timeline-block-icon-offset-odd;
158
- }
159
-
160
- .pa-timeline__content {
161
- padding: $timeline-block-content-padding-v $timeline-block-content-padding-extended $timeline-block-content-padding-v $timeline-block-content-padding-h;
162
- border-radius: 0 $timeline-block-content-border-radius $timeline-block-content-border-radius 0;
163
- }
164
-
165
- // Dot
166
- &::after {
167
- content: '';
168
- position: absolute;
169
- width: $timeline-block-dot-size;
170
- height: $timeline-block-dot-size;
171
- top: $timeline-block-dot-top-offset;
172
- right: $timeline-block-dot-horizontal-offset;
173
- background: var(--pa-main-bg);
174
- border: $timeline-block-dot-border solid $accent-color;
175
- border-radius: 50%;
176
- z-index: 1;
177
- }
178
-
179
- // Connector line
180
- &::before {
181
- content: '';
182
- position: absolute;
183
- width: $timeline-block-connector-width;
184
- height: $timeline-block-connector-height;
185
- top: $timeline-block-connector-top-offset;
186
- right: $timeline-block-connector-horizontal-offset;
187
- background: $accent-color;
188
- z-index: 1;
189
- }
190
- }
191
-
192
- // Right side items
193
- &:nth-child(even) {
194
- left: 50%;
195
- padding-right: $timeline-block-item-padding-right-even;
196
-
197
- .pa-timeline__date {
198
- left: $timeline-block-date-offset;
199
- }
200
-
201
- .pa-timeline__icon {
202
- left: $timeline-block-icon-offset-even;
203
- }
204
-
205
- .pa-timeline__content {
206
- padding: $timeline-block-content-padding-v $timeline-block-content-padding-h $timeline-block-content-padding-v $timeline-block-content-padding-extended;
207
- border-radius: $timeline-block-content-border-radius 0 0 $timeline-block-content-border-radius;
208
- }
209
-
210
- // Dot
211
- &::after {
212
- content: '';
213
- position: absolute;
214
- width: $timeline-block-dot-size;
215
- height: $timeline-block-dot-size;
216
- top: $timeline-block-dot-top-offset;
217
- left: $timeline-block-dot-horizontal-offset;
218
- background: var(--pa-main-bg);
219
- border: $timeline-block-dot-border solid $accent-color;
220
- border-radius: 50%;
221
- z-index: 1;
222
- }
223
-
224
- // Connector line
225
- &::before {
226
- content: '';
227
- position: absolute;
228
- width: $timeline-block-connector-width;
229
- height: $timeline-block-connector-height;
230
- top: $timeline-block-connector-top-offset;
231
- left: $timeline-block-connector-horizontal-offset;
232
- background: $accent-color;
233
- z-index: 1;
234
- }
235
- }
236
- }
237
-
238
- .pa-timeline__date {
239
- position: absolute;
240
- display: inline-block;
241
- top: $timeline-block-date-top-offset;
242
- text-align: center;
243
- font-size: $font-size-sm;
244
- font-weight: $font-weight-bold;
245
- color: $accent-color;
246
- text-transform: uppercase;
247
- letter-spacing: $timeline-block-date-letter-spacing;
248
- z-index: 1;
249
- }
250
-
251
- .pa-timeline__icon {
252
- position: absolute;
253
- display: inline-flex;
254
- align-items: center;
255
- justify-content: center;
256
- width: $timeline-block-icon-size;
257
- height: $timeline-block-icon-size;
258
- top: $timeline-block-icon-top-offset;
259
- background: $warning-bg;
260
- border: $timeline-block-icon-border solid $accent-color;
261
- border-radius: 50%;
262
- font-size: $font-size-lg;
263
- color: $accent-color;
264
- z-index: 1;
265
- }
266
-
267
- .pa-timeline__content {
268
- background: $warning-bg;
269
- position: relative;
270
-
271
- h3 {
272
- margin: 0 0 $spacing-sm 0;
273
- font-size: $font-size-lg;
274
- font-weight: $font-weight-normal;
275
- color: var(--pa-text-color-1);
276
- }
277
-
278
- p {
279
- margin: 0;
280
- font-size: $font-size-base;
281
- line-height: $line-height-relaxed;
282
- color: $warning-text;
283
- }
284
- }
285
-
286
- // Responsive: stack on mobile (unless --keep-layout is used)
287
- @media (max-width: $timeline-block-responsive-breakpoint) {
288
- &:not(.pa-timeline--keep-layout) {
289
- &::after {
290
- left: $timeline-block-responsive-line-left;
291
- }
292
-
293
- .pa-timeline__item {
294
- width: 100%;
295
- padding-left: $timeline-block-responsive-padding-left;
296
- padding-right: $timeline-block-responsive-padding-right;
297
-
298
- &:nth-child(even) {
299
- left: 0;
300
- }
301
-
302
- &:nth-child(odd)::after,
303
- &:nth-child(even)::after {
304
- left: $timeline-block-responsive-dot-left;
305
- }
306
-
307
- &:nth-child(odd)::before,
308
- &:nth-child(even)::before {
309
- left: $timeline-block-responsive-connector-left;
310
- }
311
-
312
- &:nth-child(odd) .pa-timeline__date,
313
- &:nth-child(even) .pa-timeline__date {
314
- right: auto;
315
- left: $timeline-block-responsive-date-left;
316
- }
317
-
318
- &:nth-child(odd) .pa-timeline__icon,
319
- &:nth-child(even) .pa-timeline__icon {
320
- right: auto;
321
- left: $timeline-block-responsive-icon-left;
322
- }
323
-
324
- &:nth-child(odd) .pa-timeline__content,
325
- &:nth-child(even) .pa-timeline__content {
326
- padding: $spacing-xl $spacing-xl $spacing-xl calc($spacing-xl * 2 + 40px);
327
- border-radius: $timeline-block-content-border-radius 0 0 $timeline-block-content-border-radius;
328
- }
329
- }
330
- }
331
- }
332
-
333
- // Modifier: Force single column at any screen width
334
- &.pa-timeline--single-column {
335
- &::after {
336
- left: $timeline-block-responsive-line-left;
337
- }
338
-
339
- .pa-timeline__item {
340
- width: 100%;
341
- padding-left: $timeline-block-responsive-padding-left;
342
- padding-right: $timeline-block-responsive-padding-right;
343
-
344
- &:nth-child(even) {
345
- left: 0;
346
- }
347
-
348
- &:nth-child(odd)::after,
349
- &:nth-child(even)::after {
350
- left: $timeline-block-responsive-dot-left;
351
- }
352
-
353
- &:nth-child(odd)::before,
354
- &:nth-child(even)::before {
355
- left: $timeline-block-responsive-connector-left;
356
- }
357
-
358
- &:nth-child(odd) .pa-timeline__date,
359
- &:nth-child(even) .pa-timeline__date {
360
- right: auto;
361
- left: $timeline-block-responsive-date-left;
362
- }
363
-
364
- &:nth-child(odd) .pa-timeline__icon,
365
- &:nth-child(even) .pa-timeline__icon {
366
- right: auto;
367
- left: $timeline-block-responsive-icon-left;
368
- }
369
-
370
- &:nth-child(odd) .pa-timeline__content,
371
- &:nth-child(even) .pa-timeline__content {
372
- padding: $spacing-xl $spacing-xl $spacing-xl calc($spacing-xl * 2 + 40px);
373
- border-radius: $timeline-block-content-border-radius 0 0 $timeline-block-content-border-radius;
374
- }
375
- }
376
- }
377
-
378
- // Modifier: All items on start side
379
- &.pa-timeline--start {
380
- &::after {
381
- left: $timeline-block-responsive-line-left;
382
- }
383
-
384
- .pa-timeline__item {
385
- width: 100%;
386
- padding-left: $timeline-block-responsive-padding-left;
387
- padding-right: 0;
388
- left: 0 !important; // Override even/odd positioning
389
-
390
- &::after {
391
- left: $timeline-block-responsive-dot-left;
392
- }
393
-
394
- &::before {
395
- left: $timeline-block-responsive-connector-left;
396
- }
397
-
398
- .pa-timeline__date {
399
- right: auto;
400
- left: $timeline-block-responsive-date-left;
401
- }
402
-
403
- .pa-timeline__icon {
404
- right: auto;
405
- left: $timeline-block-responsive-icon-left;
406
- }
407
-
408
- .pa-timeline__content {
409
- padding: $spacing-xl $spacing-xl $spacing-xl calc($spacing-xl * 2 + 40px);
410
- border-radius: $timeline-block-content-border-radius 0 0 $timeline-block-content-border-radius;
411
- }
412
- }
413
- }
414
-
415
- // Modifier: All items on end side
416
- &.pa-timeline--end {
417
- &::after {
418
- right: $timeline-block-responsive-line-left;
419
- left: auto;
420
- }
421
-
422
- .pa-timeline__item {
423
- width: 100%;
424
- padding-left: 0;
425
- padding-right: $timeline-block-responsive-padding-left;
426
- left: 0 !important; // Override even/odd positioning
427
-
428
- &::after {
429
- right: $timeline-block-responsive-dot-left;
430
- left: auto;
431
- }
432
-
433
- &::before {
434
- right: $timeline-block-responsive-connector-left;
435
- left: auto;
436
- }
437
-
438
- .pa-timeline__date {
439
- left: auto;
440
- right: $timeline-block-responsive-date-left;
441
- }
442
-
443
- .pa-timeline__icon {
444
- left: auto;
445
- right: $timeline-block-responsive-icon-left;
446
- }
447
-
448
- .pa-timeline__content {
449
- padding: $spacing-xl calc($spacing-xl * 2 + 40px) $spacing-xl $spacing-xl;
450
- border-radius: 0 $timeline-block-content-border-radius $timeline-block-content-border-radius 0;
451
- }
452
- }
453
- }
454
- }
455
-
456
- // Variant 3: Activity feed / comment thread style (like CodePen Challenge)
457
- &--feed {
458
- padding: 0;
459
-
460
- .pa-timeline__item {
461
- display: flex;
462
- align-items: flex-start;
463
- gap: $timeline-feed-gap;
464
- padding-bottom: $timeline-feed-item-padding-bottom;
465
-
466
- &:last-child {
467
- padding-bottom: 0;
468
- }
469
- }
470
-
471
- .pa-timeline__content {
472
- flex: 1;
473
- font-size: $font-size-sm;
474
- color: var(--pa-text-color-2);
475
- line-height: $line-height-relaxed;
476
-
477
- a {
478
- color: $accent-color;
479
- text-decoration: none;
480
- font-weight: $font-weight-medium;
481
-
482
- &:hover {
483
- text-decoration: underline;
484
- }
485
- }
486
-
487
- time {
488
- color: var(--pa-text-color-2);
489
- font-size: $font-size-xs;
490
- }
491
- }
492
-
493
- .pa-timeline__avatar {
494
- width: $timeline-feed-avatar-size;
495
- height: $timeline-feed-avatar-size;
496
- border-radius: 50%;
497
- display: inline-block;
498
- vertical-align: middle;
499
- margin-right: $timeline-feed-avatar-margin-right;
500
-
501
- img {
502
- width: 100%;
503
- height: 100%;
504
- border-radius: 50%;
505
- object-fit: cover;
506
- }
507
- }
508
-
509
- .pa-timeline__comment {
510
- margin-top: $timeline-feed-comment-margin-top;
511
- padding: $timeline-feed-comment-padding;
512
- background: var(--pa-card-bg);
513
- border: $border-width-base solid var(--pa-border-color);
514
- border-radius: $border-radius;
515
-
516
- p {
517
- margin: 0 0 $spacing-sm 0;
518
- color: var(--pa-text-color-1);
519
- line-height: $line-height-relaxed;
520
-
521
- &:last-child {
522
- margin-bottom: 0;
523
- }
524
- }
525
- }
526
-
527
- // Date header styling
528
- .pa-timeline__item--date-header {
529
- display: flex;
530
- align-items: center;
531
- gap: $spacing-sm;
532
- padding-bottom: $timeline-feed-date-margin-bottom;
533
- margin-top: $spacing-base;
534
-
535
- &:first-child {
536
- margin-top: 0;
537
- }
538
- }
539
-
540
- .pa-timeline__date-icon {
541
- font-size: $timeline-feed-date-icon-size;
542
- line-height: 1;
543
- }
544
-
545
- .pa-timeline__date-label {
546
- font-size: $timeline-feed-date-label-font-size;
547
- font-weight: $font-weight-semibold;
548
- color: var(--pa-text-color-1);
549
- text-transform: uppercase;
550
- letter-spacing: $timeline-feed-date-label-letter-spacing;
551
- }
552
-
553
- // Time prefix styling
554
- .pa-timeline__time {
555
- flex-shrink: 0;
556
- width: $timeline-feed-time-width;
557
- font-size: $timeline-feed-time-font-size;
558
- color: var(--pa-text-color-2);
559
- font-weight: $font-weight-medium;
560
- text-align: end;
561
- padding-inline-end: $spacing-sm;
562
- padding-top: $timeline-feed-time-padding-top;
563
- }
564
- }
565
-
566
- // Utility classes for interactive timelines (Simple variant)
567
- &__scroll-container {
568
- max-height: $timeline-simple-scroll-container-max-height;
569
- overflow-y: auto;
570
- position: relative;
571
- }
572
-
573
- &__loader {
574
- text-align: center;
575
- padding: $spacing-base;
576
- min-height: $timeline-simple-scroll-loader-min-height;
577
- }
578
-
579
- &__loader-text {
580
- margin-top: $spacing-sm;
581
- font-size: $font-size-sm;
582
- color: var(--pa-text-color-2);
583
- }
584
-
585
- &__load-more-wrapper {
586
- text-align: center;
587
- margin-top: $timeline-simple-load-more-margin-top;
588
- }
589
- }
1
+ /* ========================================
2
+ Timeline Component
3
+ ======================================== */
4
+ @use '../variables' as *;
5
+
6
+ .pa-timeline {
7
+ position: relative;
8
+ padding: 0;
9
+ list-style: none;
10
+ margin: 0;
11
+
12
+ &__item {
13
+ position: relative;
14
+ }
15
+
16
+ // Variant 1: Simple start-aligned timeline (like Timeline #1)
17
+ &--simple {
18
+ border-inline-start: $timeline-simple-line-width solid var(--pa-border-color); // RTL: flips to right
19
+ margin-inline-start: $timeline-simple-margin-left; // RTL: flips to right
20
+ padding-inline-start: $timeline-simple-padding-left; // RTL: flips to right
21
+
22
+ .pa-timeline__item {
23
+ padding-bottom: $spacing-lg;
24
+ position: relative;
25
+
26
+ &:last-child {
27
+ border: 0;
28
+ padding-bottom: 0;
29
+ }
30
+
31
+ // Dot marker
32
+ &::before {
33
+ content: '';
34
+ position: absolute;
35
+ inset-inline-start: $timeline-simple-dot-offset; // RTL: flips to right
36
+ top: 0;
37
+ width: $timeline-simple-dot-size;
38
+ height: $timeline-simple-dot-size;
39
+ background: var(--pa-main-bg);
40
+ border: $timeline-simple-dot-border solid $accent-color;
41
+ border-radius: 50%;
42
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($accent-color, $timeline-simple-dot-shadow-opacity);
43
+ }
44
+
45
+ // Marker color modifiers
46
+ &--primary::before {
47
+ border-color: $btn-primary-bg;
48
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($btn-primary-bg, $timeline-simple-dot-shadow-opacity);
49
+ }
50
+
51
+ &--success::before {
52
+ border-color: $success-bg;
53
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($success-bg, $timeline-simple-dot-shadow-opacity);
54
+ }
55
+
56
+ &--warning::before {
57
+ border-color: $warning-bg;
58
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($warning-bg, $timeline-simple-dot-shadow-opacity);
59
+ }
60
+
61
+ &--danger::before {
62
+ border-color: $danger-bg;
63
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($danger-bg, $timeline-simple-dot-shadow-opacity);
64
+ }
65
+
66
+ &--info::before {
67
+ border-color: $info-bg;
68
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba($info-bg, $timeline-simple-dot-shadow-opacity);
69
+ }
70
+
71
+ &--secondary::before {
72
+ border-color: var(--pa-text-color-2);
73
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba(var(--pa-text-color-2), $timeline-simple-dot-shadow-opacity);
74
+ }
75
+
76
+ // Filled/solid bullet modifier
77
+ &--filled::before {
78
+ background: $accent-color;
79
+ }
80
+
81
+ &--filled.pa-timeline__item--primary::before {
82
+ background: $btn-primary-bg;
83
+ }
84
+
85
+ &--filled.pa-timeline__item--success::before {
86
+ background: $success-bg;
87
+ }
88
+
89
+ &--filled.pa-timeline__item--warning::before {
90
+ background: $warning-bg;
91
+ }
92
+
93
+ &--filled.pa-timeline__item--danger::before {
94
+ background: $danger-bg;
95
+ }
96
+
97
+ &--filled.pa-timeline__item--info::before {
98
+ background: $info-bg;
99
+ }
100
+
101
+ &--filled.pa-timeline__item--secondary::before {
102
+ background: var(--pa-text-color-2);
103
+ }
104
+ }
105
+
106
+ .pa-timeline__time {
107
+ display: block;
108
+ font-size: $font-size-sm;
109
+ font-weight: $font-weight-semibold;
110
+ color: var(--pa-text-color-1);
111
+ margin-bottom: $spacing-xs;
112
+ }
113
+
114
+ .pa-timeline__content {
115
+ font-size: $font-size-sm;
116
+ color: var(--pa-text-color-2);
117
+ line-height: $line-height-relaxed;
118
+ margin-top: $timeline-simple-content-margin-top;
119
+ }
120
+ }
121
+
122
+ // Variant 2: Timeline Block (Centered alternating)
123
+ &--alternating {
124
+ position: relative;
125
+ max-width: $timeline-block-max-width;
126
+ margin: 0 auto;
127
+ padding: $timeline-block-padding;
128
+
129
+ // Center line
130
+ &::after {
131
+ content: '';
132
+ position: absolute;
133
+ width: $timeline-block-line-width;
134
+ background: $accent-color;
135
+ top: 0;
136
+ bottom: 0;
137
+ left: 50%;
138
+ margin-left: -1px;
139
+ }
140
+
141
+ .pa-timeline__item {
142
+ padding: $timeline-block-item-padding;
143
+ position: relative;
144
+ background: inherit;
145
+ width: $timeline-block-item-width;
146
+
147
+ // Left side items
148
+ &:nth-child(odd) {
149
+ left: 0;
150
+ padding-left: $timeline-block-item-padding-left-odd;
151
+
152
+ .pa-timeline__date {
153
+ right: $timeline-block-date-offset;
154
+ }
155
+
156
+ .pa-timeline__icon {
157
+ right: $timeline-block-icon-offset-odd;
158
+ }
159
+
160
+ .pa-timeline__content {
161
+ padding: $timeline-block-content-padding-v $timeline-block-content-padding-extended $timeline-block-content-padding-v $timeline-block-content-padding-h;
162
+ border-radius: 0 var(--pa-border-radius) var(--pa-border-radius) 0;
163
+ }
164
+
165
+ // Dot
166
+ &::after {
167
+ content: '';
168
+ position: absolute;
169
+ width: $timeline-block-dot-size;
170
+ height: $timeline-block-dot-size;
171
+ top: $timeline-block-dot-top-offset;
172
+ right: $timeline-block-dot-horizontal-offset;
173
+ background: var(--pa-main-bg);
174
+ border: $timeline-block-dot-border solid $accent-color;
175
+ border-radius: 50%;
176
+ z-index: 1;
177
+ }
178
+
179
+ // Connector line
180
+ &::before {
181
+ content: '';
182
+ position: absolute;
183
+ width: $timeline-block-connector-width;
184
+ height: $timeline-block-connector-height;
185
+ top: $timeline-block-connector-top-offset;
186
+ right: $timeline-block-connector-horizontal-offset;
187
+ background: $accent-color;
188
+ z-index: 1;
189
+ }
190
+ }
191
+
192
+ // Right side items
193
+ &:nth-child(even) {
194
+ left: 50%;
195
+ padding-right: $timeline-block-item-padding-right-even;
196
+
197
+ .pa-timeline__date {
198
+ left: $timeline-block-date-offset;
199
+ }
200
+
201
+ .pa-timeline__icon {
202
+ left: $timeline-block-icon-offset-even;
203
+ }
204
+
205
+ .pa-timeline__content {
206
+ padding: $timeline-block-content-padding-v $timeline-block-content-padding-h $timeline-block-content-padding-v $timeline-block-content-padding-extended;
207
+ border-radius: var(--pa-border-radius) 0 0 var(--pa-border-radius);
208
+ }
209
+
210
+ // Dot
211
+ &::after {
212
+ content: '';
213
+ position: absolute;
214
+ width: $timeline-block-dot-size;
215
+ height: $timeline-block-dot-size;
216
+ top: $timeline-block-dot-top-offset;
217
+ left: $timeline-block-dot-horizontal-offset;
218
+ background: var(--pa-main-bg);
219
+ border: $timeline-block-dot-border solid $accent-color;
220
+ border-radius: 50%;
221
+ z-index: 1;
222
+ }
223
+
224
+ // Connector line
225
+ &::before {
226
+ content: '';
227
+ position: absolute;
228
+ width: $timeline-block-connector-width;
229
+ height: $timeline-block-connector-height;
230
+ top: $timeline-block-connector-top-offset;
231
+ left: $timeline-block-connector-horizontal-offset;
232
+ background: $accent-color;
233
+ z-index: 1;
234
+ }
235
+ }
236
+ }
237
+
238
+ .pa-timeline__date {
239
+ position: absolute;
240
+ display: inline-block;
241
+ top: $timeline-block-date-top-offset;
242
+ text-align: center;
243
+ font-size: $font-size-sm;
244
+ font-weight: $font-weight-bold;
245
+ color: $accent-color;
246
+ text-transform: uppercase;
247
+ letter-spacing: $timeline-block-date-letter-spacing;
248
+ z-index: 1;
249
+ }
250
+
251
+ .pa-timeline__icon {
252
+ position: absolute;
253
+ display: inline-flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ width: $timeline-block-icon-size;
257
+ height: $timeline-block-icon-size;
258
+ top: $timeline-block-icon-top-offset;
259
+ background: $warning-bg;
260
+ border: $timeline-block-icon-border solid $accent-color;
261
+ border-radius: 50%;
262
+ font-size: $font-size-lg;
263
+ color: $accent-color;
264
+ z-index: 1;
265
+ }
266
+
267
+ .pa-timeline__content {
268
+ background: $warning-bg;
269
+ position: relative;
270
+
271
+ h3 {
272
+ margin: 0 0 $spacing-sm 0;
273
+ font-size: $font-size-lg;
274
+ font-weight: $font-weight-normal;
275
+ color: var(--pa-text-color-1);
276
+ }
277
+
278
+ p {
279
+ margin: 0;
280
+ font-size: $font-size-base;
281
+ line-height: $line-height-relaxed;
282
+ color: $warning-text;
283
+ }
284
+ }
285
+
286
+ // Responsive: stack on mobile (unless --keep-layout is used)
287
+ @media (max-width: $timeline-block-responsive-breakpoint) {
288
+ &:not(.pa-timeline--keep-layout) {
289
+ &::after {
290
+ left: $timeline-block-responsive-line-left;
291
+ }
292
+
293
+ .pa-timeline__item {
294
+ width: 100%;
295
+ padding-left: $timeline-block-responsive-padding-left;
296
+ padding-right: $timeline-block-responsive-padding-right;
297
+
298
+ &:nth-child(even) {
299
+ left: 0;
300
+ }
301
+
302
+ &:nth-child(odd)::after,
303
+ &:nth-child(even)::after {
304
+ left: $timeline-block-responsive-dot-left;
305
+ }
306
+
307
+ &:nth-child(odd)::before,
308
+ &:nth-child(even)::before {
309
+ left: $timeline-block-responsive-connector-left;
310
+ }
311
+
312
+ &:nth-child(odd) .pa-timeline__date,
313
+ &:nth-child(even) .pa-timeline__date {
314
+ right: auto;
315
+ left: $timeline-block-responsive-date-left;
316
+ }
317
+
318
+ &:nth-child(odd) .pa-timeline__icon,
319
+ &:nth-child(even) .pa-timeline__icon {
320
+ right: auto;
321
+ left: $timeline-block-responsive-icon-left;
322
+ }
323
+
324
+ &:nth-child(odd) .pa-timeline__content,
325
+ &:nth-child(even) .pa-timeline__content {
326
+ padding: $spacing-xl $spacing-xl $spacing-xl calc($spacing-xl * 2 + 40px);
327
+ border-radius: var(--pa-border-radius) 0 0 var(--pa-border-radius);
328
+ }
329
+ }
330
+ }
331
+ }
332
+
333
+ // Modifier: Force single column at any screen width
334
+ &.pa-timeline--single-column {
335
+ &::after {
336
+ left: $timeline-block-responsive-line-left;
337
+ }
338
+
339
+ .pa-timeline__item {
340
+ width: 100%;
341
+ padding-left: $timeline-block-responsive-padding-left;
342
+ padding-right: $timeline-block-responsive-padding-right;
343
+
344
+ &:nth-child(even) {
345
+ left: 0;
346
+ }
347
+
348
+ &:nth-child(odd)::after,
349
+ &:nth-child(even)::after {
350
+ left: $timeline-block-responsive-dot-left;
351
+ }
352
+
353
+ &:nth-child(odd)::before,
354
+ &:nth-child(even)::before {
355
+ left: $timeline-block-responsive-connector-left;
356
+ }
357
+
358
+ &:nth-child(odd) .pa-timeline__date,
359
+ &:nth-child(even) .pa-timeline__date {
360
+ right: auto;
361
+ left: $timeline-block-responsive-date-left;
362
+ }
363
+
364
+ &:nth-child(odd) .pa-timeline__icon,
365
+ &:nth-child(even) .pa-timeline__icon {
366
+ right: auto;
367
+ left: $timeline-block-responsive-icon-left;
368
+ }
369
+
370
+ &:nth-child(odd) .pa-timeline__content,
371
+ &:nth-child(even) .pa-timeline__content {
372
+ padding: $spacing-xl $spacing-xl $spacing-xl calc($spacing-xl * 2 + 40px);
373
+ border-radius: var(--pa-border-radius) 0 0 var(--pa-border-radius);
374
+ }
375
+ }
376
+ }
377
+
378
+ // Modifier: All items on start side
379
+ &.pa-timeline--start {
380
+ &::after {
381
+ left: $timeline-block-responsive-line-left;
382
+ }
383
+
384
+ .pa-timeline__item {
385
+ width: 100%;
386
+ padding-left: $timeline-block-responsive-padding-left;
387
+ padding-right: 0;
388
+ left: 0 !important; // Override even/odd positioning
389
+
390
+ &::after {
391
+ left: $timeline-block-responsive-dot-left;
392
+ }
393
+
394
+ &::before {
395
+ left: $timeline-block-responsive-connector-left;
396
+ }
397
+
398
+ .pa-timeline__date {
399
+ right: auto;
400
+ left: $timeline-block-responsive-date-left;
401
+ }
402
+
403
+ .pa-timeline__icon {
404
+ right: auto;
405
+ left: $timeline-block-responsive-icon-left;
406
+ }
407
+
408
+ .pa-timeline__content {
409
+ padding: $spacing-xl $spacing-xl $spacing-xl calc($spacing-xl * 2 + 40px);
410
+ border-radius: var(--pa-border-radius) 0 0 var(--pa-border-radius);
411
+ }
412
+ }
413
+ }
414
+
415
+ // Modifier: All items on end side
416
+ &.pa-timeline--end {
417
+ &::after {
418
+ right: $timeline-block-responsive-line-left;
419
+ left: auto;
420
+ }
421
+
422
+ .pa-timeline__item {
423
+ width: 100%;
424
+ padding-left: 0;
425
+ padding-right: $timeline-block-responsive-padding-left;
426
+ left: 0 !important; // Override even/odd positioning
427
+
428
+ &::after {
429
+ right: $timeline-block-responsive-dot-left;
430
+ left: auto;
431
+ }
432
+
433
+ &::before {
434
+ right: $timeline-block-responsive-connector-left;
435
+ left: auto;
436
+ }
437
+
438
+ .pa-timeline__date {
439
+ left: auto;
440
+ right: $timeline-block-responsive-date-left;
441
+ }
442
+
443
+ .pa-timeline__icon {
444
+ left: auto;
445
+ right: $timeline-block-responsive-icon-left;
446
+ }
447
+
448
+ .pa-timeline__content {
449
+ padding: $spacing-xl calc($spacing-xl * 2 + 40px) $spacing-xl $spacing-xl;
450
+ border-radius: 0 var(--pa-border-radius) var(--pa-border-radius) 0;
451
+ }
452
+ }
453
+ }
454
+ }
455
+
456
+ // Variant 3: Activity feed / comment thread style (like CodePen Challenge)
457
+ &--feed {
458
+ padding: 0;
459
+
460
+ .pa-timeline__item {
461
+ display: flex;
462
+ align-items: flex-start;
463
+ gap: $timeline-feed-gap;
464
+ padding-bottom: $timeline-feed-item-padding-bottom;
465
+
466
+ &:last-child {
467
+ padding-bottom: 0;
468
+ }
469
+ }
470
+
471
+ .pa-timeline__content {
472
+ flex: 1;
473
+ font-size: $font-size-sm;
474
+ color: var(--pa-text-color-2);
475
+ line-height: $line-height-relaxed;
476
+
477
+ a {
478
+ color: $accent-color;
479
+ text-decoration: none;
480
+ font-weight: $font-weight-medium;
481
+
482
+ &:hover {
483
+ text-decoration: underline;
484
+ }
485
+ }
486
+
487
+ time {
488
+ color: var(--pa-text-color-2);
489
+ font-size: $font-size-xs;
490
+ }
491
+ }
492
+
493
+ .pa-timeline__avatar {
494
+ width: $timeline-feed-avatar-size;
495
+ height: $timeline-feed-avatar-size;
496
+ border-radius: 50%;
497
+ display: inline-block;
498
+ vertical-align: middle;
499
+ margin-right: $timeline-feed-avatar-margin-right;
500
+
501
+ img {
502
+ width: 100%;
503
+ height: 100%;
504
+ border-radius: 50%;
505
+ object-fit: cover;
506
+ }
507
+ }
508
+
509
+ .pa-timeline__comment {
510
+ margin-top: $timeline-feed-comment-margin-top;
511
+ padding: $timeline-feed-comment-padding;
512
+ background: var(--pa-card-bg);
513
+ border: $border-width-base solid var(--pa-border-color);
514
+ border-radius: var(--pa-border-radius);
515
+
516
+ p {
517
+ margin: 0 0 $spacing-sm 0;
518
+ color: var(--pa-text-color-1);
519
+ line-height: $line-height-relaxed;
520
+
521
+ &:last-child {
522
+ margin-bottom: 0;
523
+ }
524
+ }
525
+ }
526
+
527
+ // Date header styling
528
+ .pa-timeline__item--date-header {
529
+ display: flex;
530
+ align-items: center;
531
+ gap: $spacing-sm;
532
+ padding-bottom: $timeline-feed-date-margin-bottom;
533
+ margin-top: $spacing-base;
534
+
535
+ &:first-child {
536
+ margin-top: 0;
537
+ }
538
+ }
539
+
540
+ .pa-timeline__date-icon {
541
+ font-size: $timeline-feed-date-icon-size;
542
+ line-height: 1;
543
+ }
544
+
545
+ .pa-timeline__date-label {
546
+ font-size: $timeline-feed-date-label-font-size;
547
+ font-weight: $font-weight-semibold;
548
+ color: var(--pa-text-color-1);
549
+ text-transform: uppercase;
550
+ letter-spacing: $timeline-feed-date-label-letter-spacing;
551
+ }
552
+
553
+ // Time prefix styling
554
+ .pa-timeline__time {
555
+ flex-shrink: 0;
556
+ width: $timeline-feed-time-width;
557
+ font-size: $timeline-feed-time-font-size;
558
+ color: var(--pa-text-color-2);
559
+ font-weight: $font-weight-medium;
560
+ text-align: end;
561
+ padding-inline-end: $spacing-sm;
562
+ padding-top: $timeline-feed-time-padding-top;
563
+ }
564
+ }
565
+
566
+ // Utility classes for interactive timelines (Simple variant)
567
+ &__scroll-container {
568
+ max-height: $timeline-simple-scroll-container-max-height;
569
+ overflow-y: auto;
570
+ position: relative;
571
+ }
572
+
573
+ &__loader {
574
+ text-align: center;
575
+ padding: $spacing-base;
576
+ min-height: $timeline-simple-scroll-loader-min-height;
577
+ }
578
+
579
+ &__loader-text {
580
+ margin-top: $spacing-sm;
581
+ font-size: $font-size-sm;
582
+ color: var(--pa-text-color-2);
583
+ }
584
+
585
+ &__load-more-wrapper {
586
+ text-align: center;
587
+ margin-top: $timeline-simple-load-more-margin-top;
588
+ }
589
+ }