@keenmate/pure-admin-core 1.0.0-rc01

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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -0
  3. package/dist/css/main.css +11542 -0
  4. package/dist/fonts/Delivery/Delivery_W_Bd.woff2 +0 -0
  5. package/dist/fonts/Delivery/Delivery_W_BdIt.woff2 +0 -0
  6. package/dist/fonts/Delivery/Delivery_W_CdBlk.woff2 +0 -0
  7. package/dist/fonts/Delivery/Delivery_W_CdLt.woff2 +0 -0
  8. package/dist/fonts/Delivery/Delivery_W_It.woff2 +0 -0
  9. package/dist/fonts/Delivery/Delivery_W_Lt.woff2 +0 -0
  10. package/dist/fonts/Delivery/Delivery_W_LtIt.woff2 +0 -0
  11. package/dist/fonts/Delivery/Delivery_W_Rg.woff2 +0 -0
  12. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2 +0 -0
  13. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.1 +0 -0
  14. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.2 +0 -0
  15. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2 +0 -0
  16. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.1 +0 -0
  17. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.2 +0 -0
  18. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2 +0 -0
  19. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2.1 +0 -0
  20. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2 +0 -0
  21. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.1 +0 -0
  22. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.2 +0 -0
  23. package/dist/fonts/google/6aez4K2oVqwIvtE2H68T.woff2 +0 -0
  24. package/dist/fonts/google/6aez4K2oVqwIvtU2Hw.woff2 +0 -0
  25. package/dist/fonts/google/6aez4K2oVqwIvtY2H68T.woff2 +0 -0
  26. package/dist/fonts/google/6aez4K2oVqwIvtg2H68T.woff2 +0 -0
  27. package/dist/fonts/google/6aez4K2oVqwIvto2H68T.woff2 +0 -0
  28. package/dist/fonts/google/6aez4K2oVqwIvts2H68T.woff2 +0 -0
  29. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nejog.woff2 +0 -0
  30. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nijogp5.woff2 +0 -0
  31. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nmjogp5.woff2 +0 -0
  32. package/dist/fonts/google/PN_xRfK9oXHga0XdZ8g_vT0.woff2 +0 -0
  33. package/dist/fonts/google/PN_xRfK9oXHga0XdZsg_.woff2 +0 -0
  34. package/dist/fonts/google/PN_xRfK9oXHga0XdaMg_vT0.woff2 +0 -0
  35. package/dist/fonts/google/TK3tWkYFABsmjsphPho.woff2 +0 -0
  36. package/dist/fonts/google/TK3tWkYFABsmjspuPho7vA.woff2 +0 -0
  37. package/dist/fonts/google/TK3tWkYFABsmjspvPho7vA.woff2 +0 -0
  38. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjTYJwQj.woff2 +0 -0
  39. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjXYJwQj.woff2 +0 -0
  40. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6Vj_YJwQj.woff2 +0 -0
  41. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjbYJwQj.woff2 +0 -0
  42. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjvYJw.woff2 +0 -0
  43. package/dist/fonts/google/fonts-tracklist.txt +48 -0
  44. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbBjM4.woff2 +0 -0
  45. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbOjM7sfA.woff2 +0 -0
  46. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbPjM7sfA.woff2 +0 -0
  47. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfLtrftV.woff2 +0 -0
  48. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfXtrftV.woff2 +0 -0
  49. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfbtrQ.woff2 +0 -0
  50. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfjtrftV.woff2 +0 -0
  51. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfntrftV.woff2 +0 -0
  52. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfrtrftV.woff2 +0 -0
  53. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfvtrftV.woff2 +0 -0
  54. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_B-bnBeA.woff2 +0 -0
  55. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_C-bk.woff2 +0 -0
  56. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_G-bnBeA.woff2 +0 -0
  57. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_M-bnBeA.woff2 +0 -0
  58. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_N-bnBeA.woff2 +0 -0
  59. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_P-bnBeA.woff2 +0 -0
  60. package/package.json +60 -0
  61. package/snippets/alerts.html +281 -0
  62. package/snippets/badges.html +212 -0
  63. package/snippets/buttons.html +287 -0
  64. package/snippets/cards.html +393 -0
  65. package/snippets/checkbox-lists.html +490 -0
  66. package/snippets/code.html +225 -0
  67. package/snippets/command-palette.html +210 -0
  68. package/snippets/comparison.html +428 -0
  69. package/snippets/customization.html +142 -0
  70. package/snippets/forms.html +477 -0
  71. package/snippets/grid.html +338 -0
  72. package/snippets/layout.html +598 -0
  73. package/snippets/lists.html +232 -0
  74. package/snippets/loaders.html +183 -0
  75. package/snippets/manifest.json +388 -0
  76. package/snippets/modal-dialogs.html +411 -0
  77. package/snippets/modals.html +310 -0
  78. package/snippets/popconfirm.html +253 -0
  79. package/snippets/profile.html +264 -0
  80. package/snippets/tables.html +317 -0
  81. package/snippets/tabs.html +930 -0
  82. package/snippets/timeline.html +364 -0
  83. package/snippets/toasts.html +154 -0
  84. package/snippets/tooltips.html +411 -0
  85. package/snippets/typography.html +101 -0
  86. package/snippets/utilities.html +595 -0
  87. package/snippets/virtual-scroll.html +322 -0
  88. package/snippets/web-daterangepicker.html +634 -0
  89. package/snippets/web-multiselect.html +362 -0
  90. package/src/scss/.claude/settings.local.json +11 -0
  91. package/src/scss/_base-css-variables.scss +348 -0
  92. package/src/scss/_core.scss +99 -0
  93. package/src/scss/_fonts.scss +67 -0
  94. package/src/scss/_purecss-grid-responsive.scss +138 -0
  95. package/src/scss/_purecss-grid.scss +58 -0
  96. package/src/scss/_variables.scss +14 -0
  97. package/src/scss/core-components/_alerts.scss +212 -0
  98. package/src/scss/core-components/_badges.scss +16 -0
  99. package/src/scss/core-components/_base.scss +124 -0
  100. package/src/scss/core-components/_buttons.scss +473 -0
  101. package/src/scss/core-components/_cards.scss +285 -0
  102. package/src/scss/core-components/_checkbox-lists.scss +289 -0
  103. package/src/scss/core-components/_code.scss +141 -0
  104. package/src/scss/core-components/_command-palette.scss +518 -0
  105. package/src/scss/core-components/_comparison.scss +172 -0
  106. package/src/scss/core-components/_file-selector.scss +780 -0
  107. package/src/scss/core-components/_forms.scss +16 -0
  108. package/src/scss/core-components/_grid.scss +264 -0
  109. package/src/scss/core-components/_layout.scss +15 -0
  110. package/src/scss/core-components/_lists.scss +211 -0
  111. package/src/scss/core-components/_loaders.scss +277 -0
  112. package/src/scss/core-components/_logic-tree.scss +280 -0
  113. package/src/scss/core-components/_modals.scss +209 -0
  114. package/src/scss/core-components/_notifications.scss +253 -0
  115. package/src/scss/core-components/_pagers.scss +141 -0
  116. package/src/scss/core-components/_popconfirm.scss +170 -0
  117. package/src/scss/core-components/_profile.scss +281 -0
  118. package/src/scss/core-components/_settings-panel.scss +128 -0
  119. package/src/scss/core-components/_statistics.scss +200 -0
  120. package/src/scss/core-components/_tables.scss +555 -0
  121. package/src/scss/core-components/_tabs.scss +438 -0
  122. package/src/scss/core-components/_timeline.scss +589 -0
  123. package/src/scss/core-components/_toasts.scss +281 -0
  124. package/src/scss/core-components/_tooltips.scss +503 -0
  125. package/src/scss/core-components/_utilities.scss +241 -0
  126. package/src/scss/core-components/_web-components-theme.scss +294 -0
  127. package/src/scss/core-components/badges/_badge-base.scss +131 -0
  128. package/src/scss/core-components/badges/_badge-group.scss +25 -0
  129. package/src/scss/core-components/badges/_composite-badge-variants.scss +396 -0
  130. package/src/scss/core-components/badges/_composite-badge.scss +70 -0
  131. package/src/scss/core-components/badges/_index.scss +10 -0
  132. package/src/scss/core-components/badges/_labels.scss +155 -0
  133. package/src/scss/core-components/forms/_checkboxes-radios.scss +205 -0
  134. package/src/scss/core-components/forms/_form-inputs.scss +100 -0
  135. package/src/scss/core-components/forms/_form-layout.scss +66 -0
  136. package/src/scss/core-components/forms/_form-states.scss +89 -0
  137. package/src/scss/core-components/forms/_index.scss +12 -0
  138. package/src/scss/core-components/forms/_input-groups.scss +149 -0
  139. package/src/scss/core-components/forms/_input-wrapper.scss +89 -0
  140. package/src/scss/core-components/forms/_query-editor.scss +313 -0
  141. package/src/scss/core-components/layout/_index.scss +11 -0
  142. package/src/scss/core-components/layout/_layout-container.scss +105 -0
  143. package/src/scss/core-components/layout/_layout-responsive.scss +100 -0
  144. package/src/scss/core-components/layout/_navbar-elements.scss +238 -0
  145. package/src/scss/core-components/layout/_navbar.scss +71 -0
  146. package/src/scss/core-components/layout/_sidebar-states.scss +228 -0
  147. package/src/scss/core-components/layout/_sidebar.scss +177 -0
  148. package/src/scss/main.scss +7 -0
  149. package/src/scss/themes/_dark-base.scss +207 -0
  150. package/src/scss/themes/audi-light.scss +311 -0
  151. package/src/scss/themes/audi.scss +288 -0
  152. package/src/scss/themes/corporate.scss +203 -0
  153. package/src/scss/themes/dark-blue.scss +152 -0
  154. package/src/scss/themes/dark-green.scss +156 -0
  155. package/src/scss/themes/dark-red.scss +160 -0
  156. package/src/scss/themes/dark.scss +145 -0
  157. package/src/scss/themes/express.scss +281 -0
  158. package/src/scss/themes/minimal.scss +121 -0
  159. package/src/scss/utilities.scss +481 -0
  160. package/src/scss/variables/_base.scss +81 -0
  161. package/src/scss/variables/_colors.scss +148 -0
  162. package/src/scss/variables/_components.scss +509 -0
  163. package/src/scss/variables/_index.scss +13 -0
  164. package/src/scss/variables/_layout.scss +65 -0
  165. package/src/scss/variables/_spacing.scss +66 -0
  166. package/src/scss/variables/_system.scss +80 -0
  167. package/src/scss/variables/_typography.scss +37 -0
@@ -0,0 +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 left-aligned timeline (like Timeline #1)
17
+ &--simple {
18
+ border-left: $timeline-simple-line-width solid var(--pa-border-color);
19
+ margin-left: $timeline-simple-margin-left;
20
+ padding-left: $timeline-simple-padding-left;
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
+ left: $timeline-simple-dot-offset;
36
+ top: 0;
37
+ width: $timeline-simple-dot-size;
38
+ height: $timeline-simple-dot-size;
39
+ background: var(--pa-primary-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-secondary);
73
+ box-shadow: $timeline-simple-dot-shadow-offset-x $timeline-simple-dot-shadow-offset-y $timeline-simple-dot-shadow-blur rgba(var(--pa-text-secondary), $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-secondary);
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-primary);
111
+ margin-bottom: $spacing-xs;
112
+ }
113
+
114
+ .pa-timeline__content {
115
+ font-size: $font-size-sm;
116
+ color: var(--pa-text-secondary);
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-primary-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-primary-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-primary);
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 left side
379
+ &.pa-timeline--left {
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 right side
416
+ &.pa-timeline--right {
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-secondary);
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-secondary);
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-primary);
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-primary);
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-secondary);
559
+ font-weight: $font-weight-medium;
560
+ text-align: right;
561
+ padding-right: $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-secondary);
583
+ }
584
+
585
+ &__load-more-wrapper {
586
+ text-align: center;
587
+ margin-top: $timeline-simple-load-more-margin-top;
588
+ }
589
+ }