@actabldesign/bellhop-styles 0.0.3 → 0.0.4

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 (73) hide show
  1. package/README.md +3 -3
  2. package/dist/index.css +1505 -0
  3. package/llms.txt +206 -0
  4. package/package.json +27 -23
  5. package/project.json +29 -0
  6. package/rollup.config.js +29 -0
  7. package/{base → src/base}/normalize.css +4 -0
  8. package/src/index.css +22 -0
  9. package/src/tokens/bellhop-animations.css +392 -0
  10. package/src/tokens/bellhop-global.css +175 -0
  11. package/src/tokens/bellhop-icons.css +77 -0
  12. package/src/tokens/bellhop-layout.css +216 -0
  13. package/src/tokens/bellhop-primary-colors.css +96 -0
  14. package/src/tokens/bellhop-radius.css +14 -0
  15. package/src/tokens/bellhop-secondary-colors.css +154 -0
  16. package/src/tokens/bellhop-shadows.css +55 -0
  17. package/src/tokens/bellhop-spacing.css +66 -0
  18. package/src/tokens/bellhop-styles.css +174 -0
  19. package/src/tokens/bellhop-typography.css +112 -0
  20. package/src/tokens/colors.json +737 -0
  21. package/src/tokens/colors.mdx +59 -0
  22. package/src/tokens/index.css +17 -0
  23. package/components/appbar.css +0 -167
  24. package/components/autocomplete-menu.css +0 -142
  25. package/components/avatar-add.css +0 -112
  26. package/components/avatar.css +0 -253
  27. package/components/badge-dot.css +0 -78
  28. package/components/badge.css +0 -337
  29. package/components/bar-chart-card.css +0 -261
  30. package/components/bar-chart.css +0 -149
  31. package/components/breadcrumbs.css +0 -136
  32. package/components/button.css +0 -266
  33. package/components/chart-tooltip.css +0 -96
  34. package/components/checkbox-label.css +0 -53
  35. package/components/checkbox.css +0 -127
  36. package/components/container-footer.css +0 -22
  37. package/components/container.css +0 -17
  38. package/components/date-picker-content.css +0 -337
  39. package/components/date-picker.css +0 -103
  40. package/components/date-range-picker-content.css +0 -85
  41. package/components/date-range-picker.css +0 -72
  42. package/components/dropdown-menu.css +0 -204
  43. package/components/dropdown.css +0 -126
  44. package/components/empty-state.css +0 -83
  45. package/components/featured-icon.css +0 -194
  46. package/components/illustrations.css +0 -120
  47. package/components/input-autocomplete.css +0 -158
  48. package/components/input-number.css +0 -2
  49. package/components/input-verification.css +0 -137
  50. package/components/input.css +0 -374
  51. package/components/loader-spinner.css +0 -421
  52. package/components/logo-box.css +0 -85
  53. package/components/month-picker-content.css +0 -190
  54. package/components/month-picker.css +0 -83
  55. package/components/nav-item.css +0 -110
  56. package/components/notification.css +0 -262
  57. package/components/page-navigation.css +0 -294
  58. package/components/picker-menu.css +0 -43
  59. package/components/pie-chart-card.css +0 -213
  60. package/components/pie-chart.css +0 -80
  61. package/components/product-switcher.css +0 -127
  62. package/components/property-switcher.css +0 -95
  63. package/components/radio-button-label.css +0 -53
  64. package/components/radio-button.css +0 -134
  65. package/components/sidebar.css +0 -178
  66. package/components/skeleton-loader.css +0 -47
  67. package/components/tag.css +0 -214
  68. package/components/textarea.css +0 -211
  69. package/components/toggle.css +0 -298
  70. package/components/tooltip.css +0 -85
  71. package/components/trend-chart-card.css +0 -189
  72. package/components/trend-chart.css +0 -94
  73. package/index.css +0 -8115
@@ -0,0 +1,392 @@
1
+ /* Bellhop Animation System */
2
+
3
+ /* Animation Variables */
4
+ :root {
5
+ /* Timing */
6
+ --animation-duration-fast: 150ms;
7
+ --animation-duration-normal: 200ms;
8
+ --animation-duration-slow: 300ms;
9
+
10
+ /* Easing Functions */
11
+ --animation-ease-enter: cubic-bezier(0.16, 1, 0.3, 1);
12
+ --animation-ease-exit: cubic-bezier(0.4, 0, 1, 1);
13
+ --animation-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
14
+ --animation-ease-smooth: cubic-bezier(0.25, 0.46, 0.45, 0.94);
15
+
16
+ /* Transform Values */
17
+ --animation-slide-distance: 8px;
18
+ --animation-scale-start: 0.96;
19
+ --animation-scale-end: 1;
20
+ }
21
+
22
+ /* Dropdown Animations */
23
+ .animate-dropdown-enter {
24
+ animation: dropdownEnter var(--animation-duration-normal)
25
+ var(--animation-ease-enter) forwards;
26
+ }
27
+
28
+ .animate-dropdown-exit {
29
+ animation: dropdownExit var(--animation-duration-fast)
30
+ var(--animation-ease-exit) forwards;
31
+ }
32
+
33
+ @keyframes dropdownEnter {
34
+ 0% {
35
+ opacity: 0;
36
+ transform: scale(var(--animation-scale-start));
37
+ }
38
+ 100% {
39
+ opacity: 1;
40
+ transform: scale(var(--animation-scale-end));
41
+ }
42
+ }
43
+
44
+ @keyframes dropdownExit {
45
+ 0% {
46
+ opacity: 1;
47
+ transform: translateY(0) scale(var(--animation-scale-end));
48
+ }
49
+ 100% {
50
+ opacity: 0;
51
+ transform: translateY(calc(-1 * var(--animation-slide-distance)))
52
+ scale(var(--animation-scale-start));
53
+ }
54
+ }
55
+
56
+ /* Modal Animations */
57
+ .animate-modal-enter {
58
+ animation: modalEnter var(--animation-duration-normal)
59
+ var(--animation-ease-enter) forwards;
60
+ }
61
+
62
+ .animate-modal-exit {
63
+ animation: modalExit var(--animation-duration-fast) var(--animation-ease-exit)
64
+ forwards;
65
+ }
66
+
67
+ @keyframes modalEnter {
68
+ 0% {
69
+ opacity: 0;
70
+ transform: translateY(16px) scale(var(--animation-scale-start));
71
+ }
72
+ 100% {
73
+ opacity: 1;
74
+ transform: translateY(0) scale(var(--animation-scale-end));
75
+ }
76
+ }
77
+
78
+ @keyframes modalExit {
79
+ 0% {
80
+ opacity: 1;
81
+ transform: translateY(0) scale(var(--animation-scale-end));
82
+ }
83
+ 100% {
84
+ opacity: 0;
85
+ transform: translateY(16px) scale(var(--animation-scale-start));
86
+ }
87
+ }
88
+
89
+ /* Chevron Icon Animations */
90
+ .chevron-icon-rotate {
91
+ transition: transform var(--animation-duration-fast)
92
+ var(--animation-ease-smooth);
93
+ }
94
+
95
+ .chevron-icon-rotate.expanded {
96
+ transform: rotate(180deg);
97
+ }
98
+
99
+ /* Alternative with direct elements */
100
+ .chevron-expand {
101
+ display: inline-flex;
102
+ transition: transform var(--animation-duration-fast)
103
+ var(--animation-ease-smooth);
104
+ }
105
+
106
+ .chevron-expand.open {
107
+ transform: rotate(180deg);
108
+ }
109
+
110
+ /* Toast Animations */
111
+ .animate-toast-enter {
112
+ animation: toastEnter var(--animation-duration-normal)
113
+ var(--animation-ease-enter) forwards;
114
+ }
115
+
116
+ .animate-toast-exit {
117
+ animation: toastExit var(--animation-duration-fast) var(--animation-ease-exit)
118
+ forwards;
119
+ }
120
+
121
+ @keyframes toastEnter {
122
+ 0% {
123
+ opacity: 0;
124
+ transform: translateX(100%) scale(var(--animation-scale-start));
125
+ }
126
+ 100% {
127
+ opacity: 1;
128
+ transform: translateX(0) scale(var(--animation-scale-end));
129
+ }
130
+ }
131
+
132
+ @keyframes toastExit {
133
+ 0% {
134
+ opacity: 1;
135
+ transform: translateX(0) scale(var(--animation-scale-end));
136
+ }
137
+ 100% {
138
+ opacity: 0;
139
+ transform: translateX(100%) scale(var(--animation-scale-start));
140
+ }
141
+ }
142
+
143
+ /* Fade Animations */
144
+ .animate-fade-enter {
145
+ animation: fadeEnter var(--animation-duration-normal)
146
+ var(--animation-ease-enter) forwards;
147
+ }
148
+
149
+ .animate-fade-exit {
150
+ animation: fadeExit var(--animation-duration-fast) var(--animation-ease-exit)
151
+ forwards;
152
+ }
153
+
154
+ @keyframes fadeEnter {
155
+ 0% {
156
+ opacity: 0;
157
+ }
158
+ 100% {
159
+ opacity: 1;
160
+ }
161
+ }
162
+
163
+ @keyframes fadeExit {
164
+ 0% {
165
+ opacity: 1;
166
+ }
167
+ 100% {
168
+ opacity: 0;
169
+ }
170
+ }
171
+
172
+ /* Scale Animations */
173
+ .animate-scale-enter {
174
+ animation: scaleEnter var(--animation-duration-normal)
175
+ var(--animation-ease-enter) forwards;
176
+ }
177
+
178
+ .animate-scale-exit {
179
+ animation: scaleExit var(--animation-duration-fast) var(--animation-ease-exit)
180
+ forwards;
181
+ }
182
+
183
+ @keyframes scaleEnter {
184
+ 0% {
185
+ opacity: 0;
186
+ transform: scale(var(--animation-scale-start));
187
+ }
188
+ 100% {
189
+ opacity: 1;
190
+ transform: scale(var(--animation-scale-end));
191
+ }
192
+ }
193
+
194
+ @keyframes scaleExit {
195
+ 0% {
196
+ opacity: 1;
197
+ transform: scale(var(--animation-scale-end));
198
+ }
199
+ 100% {
200
+ opacity: 0;
201
+ transform: scale(var(--animation-scale-start));
202
+ }
203
+ }
204
+
205
+ /* Slide Animations */
206
+ .animate-slide-up-enter {
207
+ animation: slideUpEnter var(--animation-duration-normal)
208
+ var(--animation-ease-enter) forwards;
209
+ }
210
+
211
+ .animate-slide-up-exit {
212
+ animation: slideUpExit var(--animation-duration-fast)
213
+ var(--animation-ease-exit) forwards;
214
+ }
215
+
216
+ .animate-slide-down-enter {
217
+ animation: slideDownEnter var(--animation-duration-normal)
218
+ var(--animation-ease-enter) forwards;
219
+ }
220
+
221
+ .animate-slide-down-exit {
222
+ animation: slideDownExit var(--animation-duration-fast)
223
+ var(--animation-ease-exit) forwards;
224
+ }
225
+
226
+ @keyframes slideUpEnter {
227
+ 0% {
228
+ opacity: 0;
229
+ transform: translateY(var(--animation-slide-distance));
230
+ }
231
+ 100% {
232
+ opacity: 1;
233
+ transform: translateY(0);
234
+ }
235
+ }
236
+
237
+ @keyframes slideUpExit {
238
+ 0% {
239
+ opacity: 1;
240
+ transform: translateY(0);
241
+ }
242
+ 100% {
243
+ opacity: 0;
244
+ transform: translateY(var(--animation-slide-distance));
245
+ }
246
+ }
247
+
248
+ @keyframes slideDownEnter {
249
+ 0% {
250
+ opacity: 0;
251
+ transform: translateY(calc(-1 * var(--animation-slide-distance)));
252
+ }
253
+ 100% {
254
+ opacity: 1;
255
+ transform: translateY(0);
256
+ }
257
+ }
258
+
259
+ @keyframes slideDownExit {
260
+ 0% {
261
+ opacity: 1;
262
+ transform: translateY(0);
263
+ }
264
+ 100% {
265
+ opacity: 0;
266
+ transform: translateY(calc(-1 * var(--animation-slide-distance)));
267
+ }
268
+ }
269
+
270
+ /* Base Animation Classes */
271
+ .animate-base {
272
+ transform-origin: top center;
273
+ transition: all var(--animation-duration-normal) var(--animation-ease-smooth);
274
+ }
275
+
276
+ .animate-base-modal {
277
+ transform-origin: center center;
278
+ transition: all var(--animation-duration-normal) var(--animation-ease-smooth);
279
+ }
280
+
281
+ .animate-base-toast {
282
+ transform-origin: right center;
283
+ transition: all var(--animation-duration-normal) var(--animation-ease-smooth);
284
+ }
285
+
286
+ /* Dismiss Animations */
287
+ .animate-dismiss {
288
+ animation: dismiss var(--animation-duration-normal) var(--animation-ease-exit)
289
+ forwards;
290
+ }
291
+
292
+ @keyframes dismiss {
293
+ 0% {
294
+ opacity: 1;
295
+ transform: scale(1);
296
+ }
297
+ 60% {
298
+ opacity: 0.3;
299
+ transform: scale(0.94);
300
+ }
301
+ 100% {
302
+ opacity: 0;
303
+ transform: scale(0.88);
304
+ }
305
+ }
306
+
307
+ /* Chart Animations */
308
+ .animate-chart-segment-enter {
309
+ animation: chartSegmentEnter 600ms var(--animation-ease-enter) forwards;
310
+ }
311
+
312
+ .animate-chart-segment-hover {
313
+ transition: all var(--animation-duration-fast) var(--animation-ease-smooth);
314
+ }
315
+
316
+ .animate-chart-segment-hover:hover {
317
+ opacity: 0.85;
318
+ transform: scale(1.02);
319
+ filter: brightness(1.1);
320
+ }
321
+
322
+ @keyframes chartSegmentEnter {
323
+ 0% {
324
+ opacity: 0;
325
+ transform: scale(0.2) rotate(-45deg);
326
+ }
327
+ 25% {
328
+ opacity: 0.3;
329
+ transform: scale(0.5) rotate(-22deg);
330
+ }
331
+ 50% {
332
+ opacity: 0.6;
333
+ transform: scale(0.8) rotate(-8deg);
334
+ }
335
+ 75% {
336
+ opacity: 0.9;
337
+ transform: scale(1.05) rotate(2deg);
338
+ }
339
+ 100% {
340
+ opacity: 1;
341
+ transform: scale(1) rotate(0deg);
342
+ }
343
+ }
344
+
345
+ /* Pie Chart Segment Animation */
346
+ .animate-pie-segment-enter {
347
+ animation: pieSegmentEnter 700ms var(--animation-ease-enter) forwards;
348
+ }
349
+
350
+ @keyframes pieSegmentEnter {
351
+ 0% {
352
+ opacity: 0;
353
+ transform: scale(0.3) rotate(-90deg);
354
+ }
355
+ 15% {
356
+ opacity: 0.2;
357
+ transform: scale(0.4) rotate(-60deg);
358
+ }
359
+ 30% {
360
+ opacity: 0.5;
361
+ transform: scale(0.6) rotate(-30deg);
362
+ }
363
+ 60% {
364
+ opacity: 0.8;
365
+ transform: scale(0.95) rotate(-5deg);
366
+ }
367
+ 80% {
368
+ opacity: 0.95;
369
+ transform: scale(1.02) rotate(2deg);
370
+ }
371
+ 100% {
372
+ opacity: 1;
373
+ transform: scale(1) rotate(0deg);
374
+ }
375
+ }
376
+
377
+ /* Utility Classes */
378
+ .animate-duration-fast {
379
+ animation-duration: var(--animation-duration-fast) !important;
380
+ }
381
+
382
+ .animate-duration-normal {
383
+ animation-duration: var(--animation-duration-normal) !important;
384
+ }
385
+
386
+ .animate-duration-slow {
387
+ animation-duration: var(--animation-duration-slow) !important;
388
+ }
389
+
390
+ .animate-ease-bounce {
391
+ animation-timing-function: var(--animation-ease-bounce) !important;
392
+ }
@@ -0,0 +1,175 @@
1
+ /* ==========================================================================
2
+ BELLHOP GLOBAL STYLES
3
+ ========================================================================== */
4
+
5
+ /* Import all Bellhop design system styles */
6
+ @import url('./bellhop-primary-colors.css');
7
+ @import url('./bellhop-secondary-colors.css');
8
+ @import url('./bellhop-spacing.css');
9
+ @import url('./bellhop-radius.css');
10
+ @import url('./bellhop-shadows.css');
11
+ @import url('./bellhop-typography.css');
12
+ @import url('./bellhop-icons.css');
13
+
14
+ /* ==========================================================================
15
+ FOCUS MANAGEMENT
16
+ ========================================================================== */
17
+
18
+ /* 1. Reset the outline for all focusable elements when a mouse is used. */
19
+ *:focus:not(:focus-visible) {
20
+ outline: none;
21
+ }
22
+
23
+ /* 2. Apply a custom outline that will only appear during keyboard navigation. */
24
+ *:focus-visible {
25
+ outline: 2px solid var(--color-brand-500); /* Using bellhop brand color */
26
+ outline-offset: 2px;
27
+ }
28
+
29
+ /* ==========================================================================
30
+ ACCESSIBILITY IMPROVEMENTS
31
+ ========================================================================== */
32
+
33
+ /* Ensure focus is visible on interactive elements */
34
+ button:focus-visible,
35
+ input:focus-visible,
36
+ select:focus-visible,
37
+ textarea:focus-visible,
38
+ a:focus-visible,
39
+ [tabindex]:focus-visible {
40
+ outline: 2px solid var(--color-brand-500);
41
+ outline-offset: 2px;
42
+ }
43
+
44
+ /* ==========================================================================
45
+ UTILITY CLASSES
46
+ ========================================================================== */
47
+
48
+ /* Prevent text selection */
49
+ .no-select {
50
+ user-select: none;
51
+ -webkit-user-select: none;
52
+ -moz-user-select: none;
53
+ -ms-user-select: none;
54
+ }
55
+
56
+ /* Screen reader only content */
57
+ .sr-only {
58
+ position: absolute;
59
+ width: 1px;
60
+ height: 1px;
61
+ padding: 0;
62
+ margin: -1px;
63
+ overflow: hidden;
64
+ clip: rect(0, 0, 0, 0);
65
+ white-space: nowrap;
66
+ border: 0;
67
+ }
68
+
69
+ /* ==========================================================================
70
+ CONTENT LAYOUT UTILITIES
71
+ ========================================================================== */
72
+
73
+ /* Content Container - Main flex container for page navigation and content area */
74
+ .bellhop-content-container {
75
+ display: flex;
76
+ flex: 1;
77
+ overflow: hidden;
78
+ background-color: var(--color-white);
79
+ }
80
+
81
+ /* Content Area - Scrollable main content region */
82
+ .bellhop-content-area {
83
+ flex: 1;
84
+ overflow-y: auto;
85
+ overflow-x: hidden;
86
+ background-color: var(--color-white);
87
+ }
88
+
89
+ /* Content Wrapper - Inner content container with padding and max-width */
90
+ .bellhop-content-wrapper {
91
+ padding: var(--spacing-4xl);
92
+ /*max-width: 1200px;*/
93
+ margin: 0 auto;
94
+ font-family: var(--font-inter);
95
+ }
96
+
97
+ /* Content Wrapper Variants */
98
+ .bellhop-content-wrapper-sm {
99
+ padding: var(--spacing-2xl);
100
+ /*max-width: 800px;*/
101
+ margin: 0 auto;
102
+ font-family: var(--font-inter);
103
+ }
104
+
105
+ .bellhop-content-wrapper-lg {
106
+ padding: var(--spacing-5xl);
107
+ /*max-width: 1400px;*/
108
+ margin: 0 auto;
109
+ font-family: var(--font-inter);
110
+ }
111
+
112
+ .bellhop-content-wrapper-full {
113
+ padding: var(--spacing-4xl);
114
+ max-width: none;
115
+ margin: 0;
116
+ font-family: var(--font-inter);
117
+ }
118
+
119
+ /* Content Typography - Standard content headings and text */
120
+ .bellhop-content-wrapper h1,
121
+ .bellhop-content-wrapper-sm h1,
122
+ .bellhop-content-wrapper-lg h1,
123
+ .bellhop-content-wrapper-full h1 {
124
+ font-size: var(--text-3xl-size);
125
+ font-weight: var(--weight-bold);
126
+ line-height: var(--text-3xl-line);
127
+ color: var(--color-neutral-800);
128
+ margin-bottom: var(--spacing-md);
129
+ }
130
+
131
+ .bellhop-content-wrapper p,
132
+ .bellhop-content-wrapper-sm p,
133
+ .bellhop-content-wrapper-lg p,
134
+ .bellhop-content-wrapper-full p {
135
+ font-size: var(--text-md-size);
136
+ font-weight: var(--weight-regular);
137
+ line-height: var(--text-md-line);
138
+ color: var(--color-neutral-600);
139
+ margin-bottom: var(--spacing-2xl);
140
+ }
141
+
142
+ /* Responsive adjustments for content wrappers */
143
+ @media (max-width: 768px) {
144
+ .bellhop-content-wrapper,
145
+ .bellhop-content-wrapper-sm,
146
+ .bellhop-content-wrapper-lg,
147
+ .bellhop-content-wrapper-full {
148
+ padding: var(--spacing-xl);
149
+ }
150
+
151
+ .bellhop-content-wrapper h1,
152
+ .bellhop-content-wrapper-sm h1,
153
+ .bellhop-content-wrapper-lg h1,
154
+ .bellhop-content-wrapper-full h1 {
155
+ font-size: var(--text-2xl-size);
156
+ line-height: var(--text-2xl-line);
157
+ }
158
+ }
159
+
160
+ @media (max-width: 480px) {
161
+ .bellhop-content-wrapper,
162
+ .bellhop-content-wrapper-sm,
163
+ .bellhop-content-wrapper-lg,
164
+ .bellhop-content-wrapper-full {
165
+ padding: var(--spacing-md);
166
+ }
167
+
168
+ .bellhop-content-wrapper h1,
169
+ .bellhop-content-wrapper-sm h1,
170
+ .bellhop-content-wrapper-lg h1,
171
+ .bellhop-content-wrapper-full h1 {
172
+ font-size: var(--text-xl-size);
173
+ line-height: var(--text-xl-line);
174
+ }
175
+ }
@@ -0,0 +1,77 @@
1
+ /* ============================================
2
+ Bellhop Icon System
3
+ ============================================ */
4
+
5
+ :root {
6
+ /* Icon Sizes */
7
+ --icon-size-xs: 16px;
8
+ --icon-size-sm: 18px;
9
+ --icon-size-md: 20px;
10
+ --icon-size-lg: 24px;
11
+ --icon-size-xl: 28px;
12
+ --icon-size-2xl: 32px;
13
+ }
14
+
15
+ /* Base Material Symbols Configuration */
16
+ .material-symbols-outlined,
17
+ .material-icons,
18
+ .material-icons-outlined {
19
+ font-family: 'Material Symbols Outlined';
20
+ font-weight: normal;
21
+ font-style: normal;
22
+ font-size: var(--icon-size-md);
23
+ line-height: 1;
24
+ display: inline-block;
25
+ vertical-align: middle;
26
+ color: var(--color-neutral-500);
27
+ -webkit-font-smoothing: antialiased;
28
+ font-feature-settings: 'liga';
29
+ }
30
+
31
+ /* Icon Size Classes */
32
+ .icon-xs {
33
+ font-size: var(--icon-size-xs);
34
+ }
35
+ .icon-sm {
36
+ font-size: var(--icon-size-sm);
37
+ }
38
+ .icon-md {
39
+ font-size: var(--icon-size-md);
40
+ }
41
+ .icon-lg {
42
+ font-size: var(--icon-size-lg);
43
+ }
44
+ .icon-xl {
45
+ font-size: var(--icon-size-xl);
46
+ }
47
+ .icon-2xl {
48
+ font-size: var(--icon-size-2xl);
49
+ }
50
+
51
+ /* Icon Color Classes */
52
+ .icon-primary {
53
+ color: var(--color-brand-500);
54
+ }
55
+ .icon-secondary {
56
+ color: var(--color-neutral-500);
57
+ }
58
+ .icon-success {
59
+ color: var(--color-success-500);
60
+ }
61
+ .icon-error {
62
+ color: var(--color-error-500);
63
+ }
64
+ .icon-warning {
65
+ color: var(--color-warning-500);
66
+ }
67
+
68
+ /* Rotating Icons */
69
+ @keyframes icon-spin {
70
+ to {
71
+ transform: rotate(360deg);
72
+ }
73
+ }
74
+
75
+ .icon-spin {
76
+ animation: icon-spin 1s linear infinite;
77
+ }