zenkit-css 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +182 -0
  2. package/dist/zenkit.css +33721 -0
  3. package/dist/zenkit.css.map +1 -0
  4. package/dist/zenkit.min.css +1 -0
  5. package/dist/zenkit.min.css.map +1 -0
  6. package/package.json +41 -0
  7. package/scss/abstracts/_functions.scss +174 -0
  8. package/scss/abstracts/_mixins.scss +272 -0
  9. package/scss/abstracts/_variables.scss +216 -0
  10. package/scss/base/_reset.scss +130 -0
  11. package/scss/base/_root.scss +194 -0
  12. package/scss/base/_typography.scss +271 -0
  13. package/scss/components/_accordion.scss +200 -0
  14. package/scss/components/_affix.scss +278 -0
  15. package/scss/components/_alerts.scss +175 -0
  16. package/scss/components/_anchor.scss +438 -0
  17. package/scss/components/_autocomplete.scss +530 -0
  18. package/scss/components/_avatar.scss +256 -0
  19. package/scss/components/_backtop.scss +329 -0
  20. package/scss/components/_badges.scss +266 -0
  21. package/scss/components/_breadcrumb.scss +102 -0
  22. package/scss/components/_buttons.scss +340 -0
  23. package/scss/components/_calendar.scss +787 -0
  24. package/scss/components/_cards.scss +265 -0
  25. package/scss/components/_carousel.scss +306 -0
  26. package/scss/components/_cascader.scss +510 -0
  27. package/scss/components/_close-button.scss +106 -0
  28. package/scss/components/_colorpicker.scss +593 -0
  29. package/scss/components/_datepicker.scss +625 -0
  30. package/scss/components/_descriptions.scss +453 -0
  31. package/scss/components/_divider.scss +253 -0
  32. package/scss/components/_drawer.scss +485 -0
  33. package/scss/components/_dropdown.scss +323 -0
  34. package/scss/components/_empty.scss +321 -0
  35. package/scss/components/_floatbutton.scss +400 -0
  36. package/scss/components/_forms.scss +753 -0
  37. package/scss/components/_image.scss +497 -0
  38. package/scss/components/_inputnumber.scss +475 -0
  39. package/scss/components/_layout.scss +538 -0
  40. package/scss/components/_list-group.scss +227 -0
  41. package/scss/components/_list.scss +528 -0
  42. package/scss/components/_mentions.scss +479 -0
  43. package/scss/components/_menu.scss +510 -0
  44. package/scss/components/_message.scss +412 -0
  45. package/scss/components/_modal.scss +304 -0
  46. package/scss/components/_navbar.scss +329 -0
  47. package/scss/components/_notification.scss +499 -0
  48. package/scss/components/_offcanvas.scss +274 -0
  49. package/scss/components/_pagination.scss +176 -0
  50. package/scss/components/_placeholder.scss +237 -0
  51. package/scss/components/_popconfirm.scss +393 -0
  52. package/scss/components/_popover.scss +298 -0
  53. package/scss/components/_progress.scss +225 -0
  54. package/scss/components/_rating.scss +314 -0
  55. package/scss/components/_result.scss +383 -0
  56. package/scss/components/_segmented.scss +441 -0
  57. package/scss/components/_select.scss +412 -0
  58. package/scss/components/_spinners.scss +229 -0
  59. package/scss/components/_statistic.scss +336 -0
  60. package/scss/components/_steps.scss +343 -0
  61. package/scss/components/_tabs.scss +239 -0
  62. package/scss/components/_tag.scss +317 -0
  63. package/scss/components/_timeline.scss +341 -0
  64. package/scss/components/_timepicker.scss +468 -0
  65. package/scss/components/_toast.scss +279 -0
  66. package/scss/components/_tooltip.scss +305 -0
  67. package/scss/components/_tour.scss +488 -0
  68. package/scss/components/_transfer.scss +556 -0
  69. package/scss/components/_tree.scss +518 -0
  70. package/scss/components/_treeselect.scss +531 -0
  71. package/scss/components/_upload.scss +510 -0
  72. package/scss/components/_watermark.scss +314 -0
  73. package/scss/content/_figures.scss +38 -0
  74. package/scss/content/_images.scss +138 -0
  75. package/scss/content/_tables.scss +232 -0
  76. package/scss/layout/_container.scss +71 -0
  77. package/scss/layout/_grid.scss +258 -0
  78. package/scss/utilities/_animations.scss +494 -0
  79. package/scss/utilities/_borders.scss +246 -0
  80. package/scss/utilities/_colors.scss +194 -0
  81. package/scss/utilities/_display.scss +263 -0
  82. package/scss/utilities/_filters.scss +328 -0
  83. package/scss/utilities/_flex.scss +178 -0
  84. package/scss/utilities/_float.scss +70 -0
  85. package/scss/utilities/_grid-utils.scss +151 -0
  86. package/scss/utilities/_helpers.scss +479 -0
  87. package/scss/utilities/_interactions.scss +249 -0
  88. package/scss/utilities/_overflow.scss +204 -0
  89. package/scss/utilities/_position.scss +245 -0
  90. package/scss/utilities/_shadows.scss +67 -0
  91. package/scss/utilities/_sizing.scss +217 -0
  92. package/scss/utilities/_spacing.scss +207 -0
  93. package/scss/utilities/_text.scss +237 -0
  94. package/scss/utilities/_transforms.scss +368 -0
  95. package/scss/utilities/_visibility.scss +251 -0
  96. package/scss/zenkit.scss +121 -0
@@ -0,0 +1,274 @@
1
+ // ========================================
2
+ // ZenKit - Offcanvas
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Offcanvas Variables
9
+ // ----------------------------------------
10
+ .offcanvas,
11
+ .offcanvas-xxl,
12
+ .offcanvas-xl,
13
+ .offcanvas-lg,
14
+ .offcanvas-md,
15
+ .offcanvas-sm {
16
+ --offcanvas-zindex: #{$z-modal};
17
+ --offcanvas-width: 400px;
18
+ --offcanvas-height: 30vh;
19
+ --offcanvas-padding-x: 1rem;
20
+ --offcanvas-padding-y: 1rem;
21
+ --offcanvas-color: var(--text);
22
+ --offcanvas-bg: var(--bg-card);
23
+ --offcanvas-border-width: #{$border-width};
24
+ --offcanvas-border-color: var(--border);
25
+ --offcanvas-box-shadow: #{$shadow-xl};
26
+ --offcanvas-transition: transform 0.3s ease-in-out;
27
+ --offcanvas-title-line-height: 1.5;
28
+ }
29
+
30
+ // ----------------------------------------
31
+ // Offcanvas Base
32
+ // ----------------------------------------
33
+ .offcanvas {
34
+ position: fixed;
35
+ bottom: 0;
36
+ z-index: var(--offcanvas-zindex);
37
+ display: flex;
38
+ flex-direction: column;
39
+ max-width: 100%;
40
+ color: var(--offcanvas-color);
41
+ visibility: hidden;
42
+ background-color: var(--offcanvas-bg);
43
+ background-clip: padding-box;
44
+ outline: 0;
45
+ box-shadow: var(--offcanvas-box-shadow);
46
+ transition: var(--offcanvas-transition);
47
+
48
+ &.showing,
49
+ &.show:not(.hiding) {
50
+ transform: none;
51
+ }
52
+
53
+ &.showing,
54
+ &.hiding,
55
+ &.show {
56
+ visibility: visible;
57
+ }
58
+ }
59
+
60
+ // ----------------------------------------
61
+ // Offcanvas Backdrop
62
+ // ----------------------------------------
63
+ .offcanvas-backdrop {
64
+ position: fixed;
65
+ top: 0;
66
+ left: 0;
67
+ z-index: calc(var(--offcanvas-zindex) - 1);
68
+ width: 100vw;
69
+ height: 100vh;
70
+ background-color: rgba(0, 0, 0, 0.5);
71
+
72
+ &.fade {
73
+ opacity: 0;
74
+ }
75
+
76
+ &.show {
77
+ opacity: 1;
78
+ }
79
+ }
80
+
81
+ // ----------------------------------------
82
+ // Offcanvas Positions
83
+ // ----------------------------------------
84
+ .offcanvas-start {
85
+ top: 0;
86
+ left: 0;
87
+ width: var(--offcanvas-width);
88
+ border-right: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
89
+ transform: translateX(-100%);
90
+ }
91
+
92
+ .offcanvas-end {
93
+ top: 0;
94
+ right: 0;
95
+ width: var(--offcanvas-width);
96
+ border-left: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
97
+ transform: translateX(100%);
98
+ }
99
+
100
+ .offcanvas-top {
101
+ top: 0;
102
+ right: 0;
103
+ left: 0;
104
+ height: var(--offcanvas-height);
105
+ max-height: 100%;
106
+ border-bottom: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
107
+ transform: translateY(-100%);
108
+ }
109
+
110
+ .offcanvas-bottom {
111
+ right: 0;
112
+ left: 0;
113
+ height: var(--offcanvas-height);
114
+ max-height: 100%;
115
+ border-top: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
116
+ transform: translateY(100%);
117
+ }
118
+
119
+ // ----------------------------------------
120
+ // Offcanvas Header
121
+ // ----------------------------------------
122
+ .offcanvas-header {
123
+ display: flex;
124
+ align-items: center;
125
+ padding: var(--offcanvas-padding-y) var(--offcanvas-padding-x);
126
+ border-bottom: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
127
+
128
+ .btn-close {
129
+ padding: calc(var(--offcanvas-padding-y) * 0.5) calc(var(--offcanvas-padding-x) * 0.5);
130
+ margin: calc(-0.5 * var(--offcanvas-padding-y)) calc(-0.5 * var(--offcanvas-padding-x)) calc(-0.5 * var(--offcanvas-padding-y)) auto;
131
+ }
132
+ }
133
+
134
+ // ----------------------------------------
135
+ // Offcanvas Title
136
+ // ----------------------------------------
137
+ .offcanvas-title {
138
+ margin-bottom: 0;
139
+ line-height: var(--offcanvas-title-line-height);
140
+ font-weight: $font-weight-semibold;
141
+ font-size: var(--text-lg);
142
+ }
143
+
144
+ // ----------------------------------------
145
+ // Offcanvas Body
146
+ // ----------------------------------------
147
+ .offcanvas-body {
148
+ flex-grow: 1;
149
+ padding: var(--offcanvas-padding-y) var(--offcanvas-padding-x);
150
+ overflow-y: auto;
151
+ }
152
+
153
+ // ----------------------------------------
154
+ // Offcanvas Footer
155
+ // ----------------------------------------
156
+ .offcanvas-footer {
157
+ display: flex;
158
+ flex-shrink: 0;
159
+ flex-wrap: wrap;
160
+ align-items: center;
161
+ justify-content: flex-end;
162
+ padding: var(--offcanvas-padding-y) var(--offcanvas-padding-x);
163
+ border-top: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
164
+ gap: 0.5rem;
165
+ }
166
+
167
+ // ----------------------------------------
168
+ // Responsive Offcanvas
169
+ // ----------------------------------------
170
+ @each $breakpoint, $value in $breakpoints {
171
+ @media (max-width: #{$value - 0.02px}) {
172
+ .offcanvas-#{$breakpoint} {
173
+ position: fixed;
174
+ bottom: 0;
175
+ z-index: var(--offcanvas-zindex);
176
+ display: flex;
177
+ flex-direction: column;
178
+ max-width: 100%;
179
+ color: var(--offcanvas-color);
180
+ visibility: hidden;
181
+ background-color: var(--offcanvas-bg);
182
+ background-clip: padding-box;
183
+ outline: 0;
184
+ box-shadow: var(--offcanvas-box-shadow);
185
+ transition: var(--offcanvas-transition);
186
+
187
+ &.showing,
188
+ &.show:not(.hiding) {
189
+ transform: none;
190
+ }
191
+
192
+ &.showing,
193
+ &.hiding,
194
+ &.show {
195
+ visibility: visible;
196
+ }
197
+ }
198
+
199
+ .offcanvas-#{$breakpoint}.offcanvas-start {
200
+ top: 0;
201
+ left: 0;
202
+ width: var(--offcanvas-width);
203
+ border-right: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
204
+ transform: translateX(-100%);
205
+ }
206
+
207
+ .offcanvas-#{$breakpoint}.offcanvas-end {
208
+ top: 0;
209
+ right: 0;
210
+ width: var(--offcanvas-width);
211
+ border-left: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
212
+ transform: translateX(100%);
213
+ }
214
+
215
+ .offcanvas-#{$breakpoint}.offcanvas-top {
216
+ top: 0;
217
+ right: 0;
218
+ left: 0;
219
+ height: var(--offcanvas-height);
220
+ max-height: 100%;
221
+ border-bottom: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
222
+ transform: translateY(-100%);
223
+ }
224
+
225
+ .offcanvas-#{$breakpoint}.offcanvas-bottom {
226
+ right: 0;
227
+ left: 0;
228
+ height: var(--offcanvas-height);
229
+ max-height: 100%;
230
+ border-top: var(--offcanvas-border-width) solid var(--offcanvas-border-color);
231
+ transform: translateY(100%);
232
+ }
233
+ }
234
+
235
+ @media (min-width: $value) {
236
+ .offcanvas-#{$breakpoint} {
237
+ --offcanvas-height: auto;
238
+ --offcanvas-border-width: 0;
239
+ background-color: transparent !important;
240
+ box-shadow: none;
241
+
242
+ .offcanvas-header {
243
+ display: none;
244
+ }
245
+
246
+ .offcanvas-body {
247
+ display: flex;
248
+ flex-grow: 0;
249
+ padding: 0;
250
+ overflow-y: visible;
251
+ background-color: transparent !important;
252
+ }
253
+ }
254
+ }
255
+ }
256
+
257
+ // ----------------------------------------
258
+ // Offcanvas Sizes
259
+ // ----------------------------------------
260
+ .offcanvas-sm {
261
+ --offcanvas-width: 300px;
262
+ }
263
+
264
+ .offcanvas-lg {
265
+ --offcanvas-width: 500px;
266
+ }
267
+
268
+ .offcanvas-xl {
269
+ --offcanvas-width: 600px;
270
+ }
271
+
272
+ .offcanvas-fullwidth {
273
+ --offcanvas-width: 100%;
274
+ }
@@ -0,0 +1,176 @@
1
+ // ========================================
2
+ // ZenKit - Pagination
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+ @use '../abstracts/mixins' as *;
7
+
8
+ // ----------------------------------------
9
+ // Pagination Container
10
+ // ----------------------------------------
11
+ .pagination {
12
+ --pagination-padding-x: 0.75rem;
13
+ --pagination-padding-y: 0.375rem;
14
+ --pagination-font-size: var(--text-base);
15
+ --pagination-color: var(--link);
16
+ --pagination-bg: var(--bg-card);
17
+ --pagination-border-width: #{$border-width};
18
+ --pagination-border-color: var(--border);
19
+ --pagination-border-radius: var(--radius);
20
+ --pagination-hover-color: var(--link-hover);
21
+ --pagination-hover-bg: var(--bg-muted);
22
+ --pagination-hover-border-color: var(--border);
23
+ --pagination-focus-color: var(--link-hover);
24
+ --pagination-focus-bg: var(--bg-muted);
25
+ --pagination-focus-box-shadow: 0 0 0 0.25rem #{rgba($primary, 0.25)};
26
+ --pagination-active-color: var(--white);
27
+ --pagination-active-bg: var(--primary);
28
+ --pagination-active-border-color: var(--primary);
29
+ --pagination-disabled-color: var(--text-muted);
30
+ --pagination-disabled-bg: var(--bg-card);
31
+ --pagination-disabled-border-color: var(--border);
32
+
33
+ display: flex;
34
+ padding-left: 0;
35
+ list-style: none;
36
+ }
37
+
38
+ // ----------------------------------------
39
+ // Page Link
40
+ // ----------------------------------------
41
+ .page-link {
42
+ position: relative;
43
+ display: block;
44
+ padding: var(--pagination-padding-y) var(--pagination-padding-x);
45
+ font-size: var(--pagination-font-size);
46
+ color: var(--pagination-color);
47
+ text-decoration: none;
48
+ background-color: var(--pagination-bg);
49
+ border: var(--pagination-border-width) solid var(--pagination-border-color);
50
+ transition: color $transition-fast ease-in-out,
51
+ background-color $transition-fast ease-in-out,
52
+ border-color $transition-fast ease-in-out,
53
+ box-shadow $transition-fast ease-in-out;
54
+
55
+ &:hover {
56
+ z-index: 2;
57
+ color: var(--pagination-hover-color);
58
+ background-color: var(--pagination-hover-bg);
59
+ border-color: var(--pagination-hover-border-color);
60
+ }
61
+
62
+ &:focus {
63
+ z-index: 3;
64
+ color: var(--pagination-focus-color);
65
+ background-color: var(--pagination-focus-bg);
66
+ outline: 0;
67
+ box-shadow: var(--pagination-focus-box-shadow);
68
+ }
69
+ }
70
+
71
+ // ----------------------------------------
72
+ // Page Item
73
+ // ----------------------------------------
74
+ .page-item {
75
+ &:not(:first-child) .page-link {
76
+ margin-left: calc(-1 * var(--pagination-border-width));
77
+ }
78
+
79
+ &:first-child .page-link {
80
+ border-top-left-radius: var(--pagination-border-radius);
81
+ border-bottom-left-radius: var(--pagination-border-radius);
82
+ }
83
+
84
+ &:last-child .page-link {
85
+ border-top-right-radius: var(--pagination-border-radius);
86
+ border-bottom-right-radius: var(--pagination-border-radius);
87
+ }
88
+
89
+ &.active .page-link {
90
+ z-index: 3;
91
+ color: var(--pagination-active-color);
92
+ background-color: var(--pagination-active-bg);
93
+ border-color: var(--pagination-active-border-color);
94
+ }
95
+
96
+ &.disabled .page-link {
97
+ color: var(--pagination-disabled-color);
98
+ pointer-events: none;
99
+ background-color: var(--pagination-disabled-bg);
100
+ border-color: var(--pagination-disabled-border-color);
101
+ }
102
+ }
103
+
104
+ // ----------------------------------------
105
+ // Pagination Sizes
106
+ // ----------------------------------------
107
+ .pagination-lg {
108
+ --pagination-padding-x: 1rem;
109
+ --pagination-padding-y: 0.5rem;
110
+ --pagination-font-size: var(--text-lg);
111
+ --pagination-border-radius: var(--radius-lg);
112
+ }
113
+
114
+ .pagination-sm {
115
+ --pagination-padding-x: 0.5rem;
116
+ --pagination-padding-y: 0.25rem;
117
+ --pagination-font-size: var(--text-sm);
118
+ --pagination-border-radius: var(--radius-sm);
119
+ }
120
+
121
+ // ----------------------------------------
122
+ // Pagination Alignment
123
+ // ----------------------------------------
124
+ .pagination-center {
125
+ justify-content: center;
126
+ }
127
+
128
+ .pagination-end {
129
+ justify-content: flex-end;
130
+ }
131
+
132
+ // ----------------------------------------
133
+ // Pagination with Gap
134
+ // ----------------------------------------
135
+ .pagination-gap {
136
+ gap: 0.25rem;
137
+
138
+ .page-item:not(:first-child) .page-link {
139
+ margin-left: 0;
140
+ }
141
+
142
+ .page-link {
143
+ border-radius: var(--pagination-border-radius);
144
+ }
145
+ }
146
+
147
+ // ----------------------------------------
148
+ // Pagination Circle
149
+ // ----------------------------------------
150
+ .pagination-circle {
151
+ gap: 0.25rem;
152
+
153
+ .page-link {
154
+ width: 2.5rem;
155
+ height: 2.5rem;
156
+ padding: 0;
157
+ display: flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ border-radius: 50%;
161
+ }
162
+
163
+ .page-item:not(:first-child) .page-link {
164
+ margin-left: 0;
165
+ }
166
+ }
167
+
168
+ .pagination-circle.pagination-sm .page-link {
169
+ width: 2rem;
170
+ height: 2rem;
171
+ }
172
+
173
+ .pagination-circle.pagination-lg .page-link {
174
+ width: 3rem;
175
+ height: 3rem;
176
+ }
@@ -0,0 +1,237 @@
1
+ // ========================================
2
+ // ZenKit - Placeholders (Skeleton Loaders)
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Base Placeholder
9
+ // ----------------------------------------
10
+ .placeholder {
11
+ display: inline-block;
12
+ min-height: 1em;
13
+ vertical-align: middle;
14
+ cursor: wait;
15
+ background-color: currentColor;
16
+ opacity: 0.5;
17
+
18
+ &.btn::before {
19
+ display: inline-block;
20
+ content: "";
21
+ }
22
+ }
23
+
24
+ // ----------------------------------------
25
+ // Placeholder with Text
26
+ // ----------------------------------------
27
+ a.placeholder {
28
+ pointer-events: none;
29
+ }
30
+
31
+ // ----------------------------------------
32
+ // Placeholder Sizing
33
+ // ----------------------------------------
34
+ .placeholder-xs {
35
+ min-height: 0.6em;
36
+ }
37
+
38
+ .placeholder-sm {
39
+ min-height: 0.8em;
40
+ }
41
+
42
+ .placeholder-lg {
43
+ min-height: 1.2em;
44
+ }
45
+
46
+ // ----------------------------------------
47
+ // Placeholder Widths
48
+ // ----------------------------------------
49
+ .placeholder-w-25 { width: 25%; }
50
+ .placeholder-w-50 { width: 50%; }
51
+ .placeholder-w-75 { width: 75%; }
52
+ .placeholder-w-100 { width: 100%; }
53
+
54
+ // ----------------------------------------
55
+ // Placeholder Glow Animation
56
+ // ----------------------------------------
57
+ .placeholder-glow .placeholder {
58
+ animation: placeholder-glow 2s ease-in-out infinite;
59
+ }
60
+
61
+ @keyframes placeholder-glow {
62
+ 50% {
63
+ opacity: 0.2;
64
+ }
65
+ }
66
+
67
+ // ----------------------------------------
68
+ // Placeholder Wave Animation
69
+ // ----------------------------------------
70
+ .placeholder-wave {
71
+ mask-image: linear-gradient(
72
+ 130deg,
73
+ #000 55%,
74
+ rgba(0, 0, 0, 0.8) 75%,
75
+ #000 95%
76
+ );
77
+ mask-size: 200% 100%;
78
+ animation: placeholder-wave 2s linear infinite;
79
+ }
80
+
81
+ @keyframes placeholder-wave {
82
+ 100% {
83
+ mask-position: -200% 0%;
84
+ }
85
+ }
86
+
87
+ // ----------------------------------------
88
+ // Skeleton Card
89
+ // ----------------------------------------
90
+ .skeleton-card {
91
+ .skeleton-img {
92
+ width: 100%;
93
+ height: 200px;
94
+ background-color: var(--gray-200);
95
+ border-radius: var(--radius) var(--radius) 0 0;
96
+ }
97
+
98
+ .skeleton-body {
99
+ padding: 1rem;
100
+ }
101
+
102
+ .skeleton-title {
103
+ height: 1.5rem;
104
+ width: 60%;
105
+ background-color: var(--gray-200);
106
+ border-radius: var(--radius-sm);
107
+ margin-bottom: 0.75rem;
108
+ }
109
+
110
+ .skeleton-text {
111
+ height: 1rem;
112
+ background-color: var(--gray-200);
113
+ border-radius: var(--radius-sm);
114
+ margin-bottom: 0.5rem;
115
+
116
+ &:last-child {
117
+ width: 80%;
118
+ }
119
+ }
120
+ }
121
+
122
+ // ----------------------------------------
123
+ // Skeleton Avatar
124
+ // ----------------------------------------
125
+ .skeleton-avatar {
126
+ width: 3rem;
127
+ height: 3rem;
128
+ border-radius: 50%;
129
+ background-color: var(--gray-200);
130
+ }
131
+
132
+ .skeleton-avatar-sm {
133
+ width: 2rem;
134
+ height: 2rem;
135
+ }
136
+
137
+ .skeleton-avatar-lg {
138
+ width: 4rem;
139
+ height: 4rem;
140
+ }
141
+
142
+ // ----------------------------------------
143
+ // Skeleton Button
144
+ // ----------------------------------------
145
+ .skeleton-btn {
146
+ display: inline-block;
147
+ height: 2.5rem;
148
+ width: 6rem;
149
+ background-color: var(--gray-200);
150
+ border-radius: var(--radius);
151
+ }
152
+
153
+ .skeleton-btn-sm {
154
+ height: 2rem;
155
+ width: 4rem;
156
+ }
157
+
158
+ .skeleton-btn-lg {
159
+ height: 3rem;
160
+ width: 8rem;
161
+ }
162
+
163
+ // ----------------------------------------
164
+ // Skeleton List
165
+ // ----------------------------------------
166
+ .skeleton-list {
167
+ .skeleton-list-item {
168
+ display: flex;
169
+ align-items: center;
170
+ gap: 1rem;
171
+ padding: 0.75rem 0;
172
+ border-bottom: 1px solid var(--border);
173
+
174
+ &:last-child {
175
+ border-bottom: none;
176
+ }
177
+ }
178
+
179
+ .skeleton-list-avatar {
180
+ flex-shrink: 0;
181
+ width: 2.5rem;
182
+ height: 2.5rem;
183
+ border-radius: 50%;
184
+ background-color: var(--gray-200);
185
+ }
186
+
187
+ .skeleton-list-content {
188
+ flex: 1;
189
+ }
190
+
191
+ .skeleton-list-title {
192
+ height: 0.875rem;
193
+ width: 40%;
194
+ background-color: var(--gray-200);
195
+ border-radius: var(--radius-sm);
196
+ margin-bottom: 0.5rem;
197
+ }
198
+
199
+ .skeleton-list-subtitle {
200
+ height: 0.75rem;
201
+ width: 60%;
202
+ background-color: var(--gray-200);
203
+ border-radius: var(--radius-sm);
204
+ }
205
+ }
206
+
207
+ // ----------------------------------------
208
+ // Animated Skeleton (Shimmer Effect)
209
+ // ----------------------------------------
210
+ .skeleton-shimmer {
211
+ position: relative;
212
+ overflow: hidden;
213
+ background-color: var(--gray-200);
214
+
215
+ &::after {
216
+ position: absolute;
217
+ top: 0;
218
+ right: 0;
219
+ bottom: 0;
220
+ left: 0;
221
+ transform: translateX(-100%);
222
+ background: linear-gradient(
223
+ 90deg,
224
+ transparent,
225
+ rgba(255, 255, 255, 0.4),
226
+ transparent
227
+ );
228
+ animation: skeleton-shimmer 1.5s infinite;
229
+ content: "";
230
+ }
231
+ }
232
+
233
+ @keyframes skeleton-shimmer {
234
+ 100% {
235
+ transform: translateX(100%);
236
+ }
237
+ }