jasmincss 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 (76) hide show
  1. package/README.md +524 -0
  2. package/bin/jasmin.js +45 -0
  3. package/dist/index.d.ts +62 -0
  4. package/dist/index.js +14568 -0
  5. package/dist/index.mjs +14524 -0
  6. package/dist/jasmin.css +63308 -0
  7. package/dist/jasmin.min.css +1 -0
  8. package/dist/plugins/nextjs.js +14777 -0
  9. package/dist/plugins/nextjs.mjs +14747 -0
  10. package/dist/plugins/vite.js +14889 -0
  11. package/dist/plugins/vite.mjs +14860 -0
  12. package/package.json +101 -0
  13. package/src/cli/add.js +83 -0
  14. package/src/cli/init.js +210 -0
  15. package/src/cli/run.js +142 -0
  16. package/src/components/accordion.js +309 -0
  17. package/src/components/alerts.js +357 -0
  18. package/src/components/avatars.js +331 -0
  19. package/src/components/badges.js +353 -0
  20. package/src/components/buttons.js +412 -0
  21. package/src/components/cards.js +342 -0
  22. package/src/components/carousel.js +495 -0
  23. package/src/components/chips.js +440 -0
  24. package/src/components/command-palette.js +434 -0
  25. package/src/components/datepicker.js +517 -0
  26. package/src/components/dropdown.js +411 -0
  27. package/src/components/forms.js +516 -0
  28. package/src/components/index.js +81 -0
  29. package/src/components/modals.js +349 -0
  30. package/src/components/navigation.js +463 -0
  31. package/src/components/offcanvas.js +390 -0
  32. package/src/components/popover.js +427 -0
  33. package/src/components/progress.js +396 -0
  34. package/src/components/rating.js +394 -0
  35. package/src/components/skeleton.js +408 -0
  36. package/src/components/spinner.js +453 -0
  37. package/src/components/stepper.js +389 -0
  38. package/src/components/tables.js +304 -0
  39. package/src/components/timeline.js +452 -0
  40. package/src/components/timepicker.js +529 -0
  41. package/src/components/tooltips.js +345 -0
  42. package/src/components/upload.js +490 -0
  43. package/src/config/defaults.js +263 -0
  44. package/src/config/loader.js +109 -0
  45. package/src/core/base.js +241 -0
  46. package/src/core/compiler.js +135 -0
  47. package/src/core/utilities/accessibility.js +290 -0
  48. package/src/core/utilities/animations.js +205 -0
  49. package/src/core/utilities/background.js +109 -0
  50. package/src/core/utilities/colors.js +234 -0
  51. package/src/core/utilities/columns.js +161 -0
  52. package/src/core/utilities/effects.js +261 -0
  53. package/src/core/utilities/filters.js +135 -0
  54. package/src/core/utilities/icons.js +806 -0
  55. package/src/core/utilities/index.js +239 -0
  56. package/src/core/utilities/layout.js +321 -0
  57. package/src/core/utilities/scroll.js +205 -0
  58. package/src/core/utilities/spacing.js +120 -0
  59. package/src/core/utilities/svg.js +191 -0
  60. package/src/core/utilities/transforms.js +116 -0
  61. package/src/core/utilities/typography.js +188 -0
  62. package/src/index.js +7 -0
  63. package/src/js/components/accordion.js +154 -0
  64. package/src/js/components/alert.js +198 -0
  65. package/src/js/components/carousel.js +226 -0
  66. package/src/js/components/dropdown.js +166 -0
  67. package/src/js/components/modal.js +169 -0
  68. package/src/js/components/offcanvas.js +175 -0
  69. package/src/js/components/popover.js +221 -0
  70. package/src/js/components/tabs.js +163 -0
  71. package/src/js/components/tooltip.js +200 -0
  72. package/src/js/index.js +79 -0
  73. package/src/js/types/config.d.ts +228 -0
  74. package/src/js/types/index.d.ts +439 -0
  75. package/src/plugins/nextjs.js +100 -0
  76. package/src/plugins/vite.js +133 -0
@@ -0,0 +1,309 @@
1
+ // Accordion component for JasminCSS
2
+
3
+ export function generateAccordionStyles(config) {
4
+ return `/* Accordion Base */
5
+ .accordion {
6
+ display: flex;
7
+ flex-direction: column;
8
+ border: 1px solid var(--j-border);
9
+ border-radius: var(--j-radius-lg, 0.5rem);
10
+ overflow: hidden;
11
+ }
12
+
13
+ .accordion-item {
14
+ border-bottom: 1px solid var(--j-border);
15
+ }
16
+
17
+ .accordion-item:last-child {
18
+ border-bottom: none;
19
+ }
20
+
21
+ /* Accordion Header/Trigger */
22
+ .accordion-header {
23
+ margin: 0;
24
+ }
25
+
26
+ .accordion-trigger {
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: space-between;
30
+ width: 100%;
31
+ padding: 1rem 1.25rem;
32
+ font-size: 1rem;
33
+ font-weight: 500;
34
+ text-align: left;
35
+ color: var(--j-text);
36
+ background-color: var(--j-bg);
37
+ border: none;
38
+ cursor: pointer;
39
+ transition: background-color 150ms ease-in-out;
40
+ }
41
+
42
+ .accordion-trigger:hover {
43
+ background-color: var(--j-bg-subtle);
44
+ }
45
+
46
+ .accordion-trigger:focus {
47
+ outline: none;
48
+ background-color: var(--j-bg-subtle);
49
+ }
50
+
51
+ .accordion-trigger:focus-visible {
52
+ outline: 2px solid var(--j-primary);
53
+ outline-offset: -2px;
54
+ }
55
+
56
+ /* Accordion Icon */
57
+ .accordion-icon {
58
+ width: 1.25rem;
59
+ height: 1.25rem;
60
+ flex-shrink: 0;
61
+ transition: transform 200ms ease-in-out;
62
+ }
63
+
64
+ .accordion-trigger[aria-expanded="true"] .accordion-icon,
65
+ .accordion-item.open .accordion-icon {
66
+ transform: rotate(180deg);
67
+ }
68
+
69
+ /* Default chevron icon using CSS */
70
+ .accordion-trigger::after {
71
+ content: "";
72
+ width: 0.625rem;
73
+ height: 0.625rem;
74
+ border-right: 2px solid currentColor;
75
+ border-bottom: 2px solid currentColor;
76
+ transform: rotate(45deg);
77
+ transition: transform 200ms ease-in-out;
78
+ flex-shrink: 0;
79
+ }
80
+
81
+ .accordion-trigger[aria-expanded="true"]::after,
82
+ .accordion-item.open .accordion-trigger::after {
83
+ transform: rotate(-135deg);
84
+ }
85
+
86
+ .accordion-trigger-no-icon::after {
87
+ display: none;
88
+ }
89
+
90
+ /* Plus/Minus Icon Variant */
91
+ .accordion-icon-plus .accordion-trigger::after {
92
+ width: 1rem;
93
+ height: 1rem;
94
+ border: none;
95
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 4v16m8-8H4'/%3E%3C/svg%3E");
96
+ background-repeat: no-repeat;
97
+ background-position: center;
98
+ transform: none;
99
+ }
100
+
101
+ .accordion-icon-plus .accordion-trigger[aria-expanded="true"]::after,
102
+ .accordion-icon-plus .accordion-item.open .accordion-trigger::after {
103
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M20 12H4'/%3E%3C/svg%3E");
104
+ transform: none;
105
+ }
106
+
107
+ /* Accordion Content/Panel */
108
+ .accordion-content {
109
+ display: grid;
110
+ grid-template-rows: 0fr;
111
+ transition: grid-template-rows 200ms ease-in-out;
112
+ }
113
+
114
+ .accordion-trigger[aria-expanded="true"] + .accordion-content,
115
+ .accordion-item.open .accordion-content {
116
+ grid-template-rows: 1fr;
117
+ }
118
+
119
+ .accordion-body {
120
+ overflow: hidden;
121
+ }
122
+
123
+ .accordion-body-inner {
124
+ padding: 1rem 1.25rem;
125
+ color: var(--j-text-muted);
126
+ }
127
+
128
+ /* Accordion Variants */
129
+
130
+ /* Flush - No outer borders */
131
+ .accordion-flush {
132
+ border: none;
133
+ border-radius: 0;
134
+ }
135
+
136
+ .accordion-flush .accordion-item {
137
+ border-left: none;
138
+ border-right: none;
139
+ }
140
+
141
+ .accordion-flush .accordion-item:first-child {
142
+ border-top: none;
143
+ }
144
+
145
+ .accordion-flush .accordion-item:last-child {
146
+ border-bottom: 1px solid var(--j-border);
147
+ }
148
+
149
+ /* Bordered - Each item has full border */
150
+ .accordion-bordered .accordion-item {
151
+ border: 1px solid var(--j-border);
152
+ border-radius: var(--j-radius-lg, 0.5rem);
153
+ margin-bottom: 0.5rem;
154
+ }
155
+
156
+ .accordion-bordered .accordion-item:last-child {
157
+ margin-bottom: 0;
158
+ border-bottom: 1px solid var(--j-border);
159
+ }
160
+
161
+ /* Separated - Items have gap between them */
162
+ .accordion-separated {
163
+ border: none;
164
+ gap: 0.5rem;
165
+ }
166
+
167
+ .accordion-separated .accordion-item {
168
+ border: 1px solid var(--j-border);
169
+ border-radius: var(--j-radius-lg, 0.5rem);
170
+ }
171
+
172
+ /* Filled Header */
173
+ .accordion-filled .accordion-trigger {
174
+ background-color: var(--j-bg-subtle);
175
+ }
176
+
177
+ .accordion-filled .accordion-trigger:hover {
178
+ background-color: var(--j-bg-muted);
179
+ }
180
+
181
+ /* Highlighted Active */
182
+ .accordion-highlight .accordion-trigger[aria-expanded="true"],
183
+ .accordion-highlight .accordion-item.open .accordion-trigger {
184
+ background-color: color-mix(in srgb, var(--j-primary) 10%, transparent);
185
+ color: var(--j-primary);
186
+ }
187
+
188
+ /* Left Icon Position */
189
+ .accordion-icon-left .accordion-trigger {
190
+ flex-direction: row-reverse;
191
+ justify-content: flex-end;
192
+ gap: 0.75rem;
193
+ }
194
+
195
+ .accordion-icon-left .accordion-trigger::after {
196
+ margin-right: 0;
197
+ }
198
+
199
+ /* Sizes */
200
+ .accordion-sm .accordion-trigger {
201
+ padding: 0.75rem 1rem;
202
+ font-size: 0.875rem;
203
+ }
204
+
205
+ .accordion-sm .accordion-body-inner {
206
+ padding: 0.75rem 1rem;
207
+ font-size: 0.875rem;
208
+ }
209
+
210
+ .accordion-lg .accordion-trigger {
211
+ padding: 1.25rem 1.5rem;
212
+ font-size: 1.125rem;
213
+ }
214
+
215
+ .accordion-lg .accordion-body-inner {
216
+ padding: 1.25rem 1.5rem;
217
+ }
218
+
219
+ /* With Left Border Accent */
220
+ .accordion-accent .accordion-item.open,
221
+ .accordion-accent .accordion-trigger[aria-expanded="true"] {
222
+ border-left: 3px solid var(--j-primary);
223
+ }
224
+
225
+ .accordion-accent-primary .accordion-item.open {
226
+ border-left-color: var(--j-primary);
227
+ }
228
+
229
+ .accordion-accent-success .accordion-item.open {
230
+ border-left-color: var(--j-success);
231
+ }
232
+
233
+ .accordion-accent-warning .accordion-item.open {
234
+ border-left-color: var(--j-warning);
235
+ }
236
+
237
+ .accordion-accent-error .accordion-item.open {
238
+ border-left-color: var(--j-error);
239
+ }
240
+
241
+ /* Dark Variant */
242
+ .accordion-dark {
243
+ background-color: var(--j-bg-dark, #1f2937);
244
+ border-color: var(--j-border-dark, #374151);
245
+ }
246
+
247
+ .accordion-dark .accordion-trigger {
248
+ background-color: var(--j-bg-dark, #1f2937);
249
+ color: white;
250
+ }
251
+
252
+ .accordion-dark .accordion-trigger:hover {
253
+ background-color: rgba(255, 255, 255, 0.05);
254
+ }
255
+
256
+ .accordion-dark .accordion-item {
257
+ border-color: var(--j-border-dark, #374151);
258
+ }
259
+
260
+ .accordion-dark .accordion-body-inner {
261
+ color: rgba(255, 255, 255, 0.7);
262
+ }
263
+
264
+ /* Glass Effect */
265
+ .accordion-glass {
266
+ background: rgba(255, 255, 255, 0.1);
267
+ backdrop-filter: blur(12px);
268
+ -webkit-backdrop-filter: blur(12px);
269
+ border-color: rgba(255, 255, 255, 0.2);
270
+ }
271
+
272
+ .accordion-glass .accordion-trigger {
273
+ background-color: transparent;
274
+ }
275
+
276
+ .accordion-glass .accordion-trigger:hover {
277
+ background-color: rgba(255, 255, 255, 0.1);
278
+ }
279
+
280
+ .accordion-glass .accordion-item {
281
+ border-color: rgba(255, 255, 255, 0.2);
282
+ }
283
+
284
+ /* Nested Accordion */
285
+ .accordion-nested {
286
+ margin: 0.5rem 0 0 1rem;
287
+ border: 1px solid var(--j-border);
288
+ }
289
+
290
+ /* FAQ Style */
291
+ .accordion-faq .accordion-trigger {
292
+ font-weight: 600;
293
+ }
294
+
295
+ .accordion-faq .accordion-trigger::before {
296
+ content: "Q:";
297
+ margin-right: 0.5rem;
298
+ color: var(--j-primary);
299
+ font-weight: 700;
300
+ }
301
+
302
+ .accordion-faq .accordion-body-inner::before {
303
+ content: "A:";
304
+ font-weight: 700;
305
+ color: var(--j-primary);
306
+ margin-right: 0.5rem;
307
+ }
308
+ `;
309
+ }
@@ -0,0 +1,357 @@
1
+ export function generateAlertStyles(config) {
2
+ return `/* Alert Base */
3
+ .alert {
4
+ position: relative;
5
+ padding: 1rem 1.25rem;
6
+ border-radius: var(--j-radius-default, 0.5rem);
7
+ border: 1px solid transparent;
8
+ font-size: 0.875rem;
9
+ line-height: 1.5;
10
+ }
11
+
12
+ .alert-title {
13
+ font-weight: 600;
14
+ margin-bottom: 0.25rem;
15
+ }
16
+
17
+ .alert-description {
18
+ opacity: 0.9;
19
+ }
20
+
21
+ .alert-icon {
22
+ flex-shrink: 0;
23
+ width: 1.25rem;
24
+ height: 1.25rem;
25
+ }
26
+
27
+ /* Alert with Icon */
28
+ .alert-with-icon {
29
+ display: flex;
30
+ gap: 0.75rem;
31
+ }
32
+
33
+ .alert-with-icon .alert-content {
34
+ flex: 1;
35
+ }
36
+
37
+ /* Alert Variants */
38
+ .alert-info {
39
+ background-color: color-mix(in srgb, var(--j-info) 10%, var(--j-bg));
40
+ border-color: color-mix(in srgb, var(--j-info) 30%, transparent);
41
+ color: var(--j-info);
42
+ }
43
+
44
+ .alert-success {
45
+ background-color: color-mix(in srgb, var(--j-success) 10%, var(--j-bg));
46
+ border-color: color-mix(in srgb, var(--j-success) 30%, transparent);
47
+ color: var(--j-success);
48
+ }
49
+
50
+ .alert-warning {
51
+ background-color: color-mix(in srgb, var(--j-warning) 10%, var(--j-bg));
52
+ border-color: color-mix(in srgb, var(--j-warning) 30%, transparent);
53
+ color: var(--j-warning);
54
+ }
55
+
56
+ .alert-error,
57
+ .alert-danger {
58
+ background-color: color-mix(in srgb, var(--j-error) 10%, var(--j-bg));
59
+ border-color: color-mix(in srgb, var(--j-error) 30%, transparent);
60
+ color: var(--j-error);
61
+ }
62
+
63
+ .alert-primary {
64
+ background-color: color-mix(in srgb, var(--j-primary) 10%, var(--j-bg));
65
+ border-color: color-mix(in srgb, var(--j-primary) 30%, transparent);
66
+ color: var(--j-primary);
67
+ }
68
+
69
+ .alert-secondary {
70
+ background-color: color-mix(in srgb, var(--j-secondary) 10%, var(--j-bg));
71
+ border-color: color-mix(in srgb, var(--j-secondary) 30%, transparent);
72
+ color: var(--j-secondary);
73
+ }
74
+
75
+ /* Solid Alerts */
76
+ .alert-solid-info {
77
+ background-color: var(--j-info);
78
+ color: white;
79
+ }
80
+
81
+ .alert-solid-success {
82
+ background-color: var(--j-success);
83
+ color: white;
84
+ }
85
+
86
+ .alert-solid-warning {
87
+ background-color: var(--j-warning);
88
+ color: white;
89
+ }
90
+
91
+ .alert-solid-error,
92
+ .alert-solid-danger {
93
+ background-color: var(--j-error);
94
+ color: white;
95
+ }
96
+
97
+ .alert-solid-primary {
98
+ background-color: var(--j-primary);
99
+ color: white;
100
+ }
101
+
102
+ /* Outline Alerts */
103
+ .alert-outline-info {
104
+ background-color: transparent;
105
+ border-color: var(--j-info);
106
+ color: var(--j-info);
107
+ }
108
+
109
+ .alert-outline-success {
110
+ background-color: transparent;
111
+ border-color: var(--j-success);
112
+ color: var(--j-success);
113
+ }
114
+
115
+ .alert-outline-warning {
116
+ background-color: transparent;
117
+ border-color: var(--j-warning);
118
+ color: var(--j-warning);
119
+ }
120
+
121
+ .alert-outline-error {
122
+ background-color: transparent;
123
+ border-color: var(--j-error);
124
+ color: var(--j-error);
125
+ }
126
+
127
+ /* Left Border Alerts */
128
+ .alert-border-info {
129
+ background-color: var(--j-bg-subtle);
130
+ border-left: 4px solid var(--j-info);
131
+ border-radius: 0;
132
+ color: var(--j-text);
133
+ }
134
+
135
+ .alert-border-success {
136
+ background-color: var(--j-bg-subtle);
137
+ border-left: 4px solid var(--j-success);
138
+ border-radius: 0;
139
+ color: var(--j-text);
140
+ }
141
+
142
+ .alert-border-warning {
143
+ background-color: var(--j-bg-subtle);
144
+ border-left: 4px solid var(--j-warning);
145
+ border-radius: 0;
146
+ color: var(--j-text);
147
+ }
148
+
149
+ .alert-border-error {
150
+ background-color: var(--j-bg-subtle);
151
+ border-left: 4px solid var(--j-error);
152
+ border-radius: 0;
153
+ color: var(--j-text);
154
+ }
155
+
156
+ /* Dismissible Alert */
157
+ .alert-dismissible {
158
+ padding-right: 3rem;
159
+ }
160
+
161
+ .alert-close {
162
+ position: absolute;
163
+ top: 0.75rem;
164
+ right: 0.75rem;
165
+ padding: 0.25rem;
166
+ background: transparent;
167
+ border: none;
168
+ cursor: pointer;
169
+ opacity: 0.7;
170
+ transition: opacity 150ms ease-in-out;
171
+ color: currentColor;
172
+ }
173
+
174
+ .alert-close:hover {
175
+ opacity: 1;
176
+ }
177
+
178
+ .alert-close svg {
179
+ width: 1rem;
180
+ height: 1rem;
181
+ }
182
+
183
+ /* Alert Actions */
184
+ .alert-actions {
185
+ display: flex;
186
+ gap: 0.75rem;
187
+ margin-top: 0.75rem;
188
+ }
189
+
190
+ /* Toast Alert */
191
+ .toast {
192
+ position: fixed;
193
+ display: flex;
194
+ align-items: flex-start;
195
+ gap: 0.75rem;
196
+ min-width: 300px;
197
+ max-width: 420px;
198
+ padding: 1rem;
199
+ background-color: var(--j-bg);
200
+ border: 1px solid var(--j-border);
201
+ border-radius: var(--j-radius-default, 0.5rem);
202
+ box-shadow: var(--j-shadow-lg);
203
+ z-index: var(--j-z-toast, 1080);
204
+ animation: j-slide-in-right 300ms ease-out;
205
+ }
206
+
207
+ .toast-top-right {
208
+ top: 1rem;
209
+ right: 1rem;
210
+ }
211
+
212
+ .toast-top-left {
213
+ top: 1rem;
214
+ left: 1rem;
215
+ }
216
+
217
+ .toast-bottom-right {
218
+ bottom: 1rem;
219
+ right: 1rem;
220
+ }
221
+
222
+ .toast-bottom-left {
223
+ bottom: 1rem;
224
+ left: 1rem;
225
+ }
226
+
227
+ .toast-top-center {
228
+ top: 1rem;
229
+ left: 50%;
230
+ transform: translateX(-50%);
231
+ }
232
+
233
+ .toast-bottom-center {
234
+ bottom: 1rem;
235
+ left: 50%;
236
+ transform: translateX(-50%);
237
+ }
238
+
239
+ .toast-content {
240
+ flex: 1;
241
+ }
242
+
243
+ .toast-title {
244
+ font-weight: 600;
245
+ color: var(--j-text);
246
+ margin-bottom: 0.25rem;
247
+ }
248
+
249
+ .toast-message {
250
+ font-size: 0.875rem;
251
+ color: var(--j-text-subtle);
252
+ }
253
+
254
+ .toast-close {
255
+ padding: 0.25rem;
256
+ background: transparent;
257
+ border: none;
258
+ cursor: pointer;
259
+ color: var(--j-text-muted);
260
+ transition: color 150ms ease-in-out;
261
+ }
262
+
263
+ .toast-close:hover {
264
+ color: var(--j-text);
265
+ }
266
+
267
+ /* Toast Variants */
268
+ .toast-success {
269
+ border-left: 4px solid var(--j-success);
270
+ }
271
+
272
+ .toast-error {
273
+ border-left: 4px solid var(--j-error);
274
+ }
275
+
276
+ .toast-warning {
277
+ border-left: 4px solid var(--j-warning);
278
+ }
279
+
280
+ .toast-info {
281
+ border-left: 4px solid var(--j-info);
282
+ }
283
+
284
+ /* Toast Container */
285
+ .toast-container {
286
+ position: fixed;
287
+ display: flex;
288
+ flex-direction: column;
289
+ gap: 0.75rem;
290
+ z-index: var(--j-z-toast, 1080);
291
+ pointer-events: none;
292
+ }
293
+
294
+ .toast-container > .toast {
295
+ position: relative;
296
+ pointer-events: auto;
297
+ }
298
+
299
+ .toast-container.top-right {
300
+ top: 1rem;
301
+ right: 1rem;
302
+ }
303
+
304
+ .toast-container.bottom-right {
305
+ bottom: 1rem;
306
+ right: 1rem;
307
+ flex-direction: column-reverse;
308
+ }
309
+
310
+ /* Banner Alert */
311
+ .banner {
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: center;
315
+ gap: 1rem;
316
+ padding: 0.75rem 1.5rem;
317
+ background-color: var(--j-primary);
318
+ color: white;
319
+ font-size: 0.875rem;
320
+ }
321
+
322
+ .banner-info {
323
+ background-color: var(--j-info);
324
+ }
325
+
326
+ .banner-success {
327
+ background-color: var(--j-success);
328
+ }
329
+
330
+ .banner-warning {
331
+ background-color: var(--j-warning);
332
+ }
333
+
334
+ .banner-error {
335
+ background-color: var(--j-error);
336
+ }
337
+
338
+ .banner a {
339
+ color: inherit;
340
+ font-weight: 600;
341
+ text-decoration: underline;
342
+ }
343
+
344
+ .banner-close {
345
+ padding: 0.25rem;
346
+ background: transparent;
347
+ border: none;
348
+ cursor: pointer;
349
+ color: inherit;
350
+ opacity: 0.8;
351
+ }
352
+
353
+ .banner-close:hover {
354
+ opacity: 1;
355
+ }
356
+ `;
357
+ }