@vanduo-oss/framework 1.2.6 → 1.2.7

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 (52) hide show
  1. package/README.md +31 -5
  2. package/css/components/affix.css +53 -0
  3. package/css/components/bubble.css +165 -0
  4. package/css/components/datepicker.css +216 -0
  5. package/css/components/fab.css +225 -0
  6. package/css/components/flow.css +265 -0
  7. package/css/components/rating.css +112 -0
  8. package/css/components/ripple.css +63 -0
  9. package/css/components/sidenav.css +70 -0
  10. package/css/components/spotlight.css +119 -0
  11. package/css/components/stepper.css +176 -0
  12. package/css/components/suggest.css +119 -0
  13. package/css/components/timeline.css +201 -0
  14. package/css/components/timepicker.css +80 -0
  15. package/css/components/transfer.css +165 -0
  16. package/css/components/tree.css +173 -0
  17. package/css/components/waypoint.css +59 -0
  18. package/css/vanduo.css +17 -0
  19. package/dist/build-info.json +3 -3
  20. package/dist/vanduo.cjs.js +2152 -4
  21. package/dist/vanduo.cjs.js.map +4 -4
  22. package/dist/vanduo.cjs.min.js +5 -5
  23. package/dist/vanduo.cjs.min.js.map +4 -4
  24. package/dist/vanduo.css +1943 -1
  25. package/dist/vanduo.css.map +1 -1
  26. package/dist/vanduo.esm.js +2152 -4
  27. package/dist/vanduo.esm.js.map +4 -4
  28. package/dist/vanduo.esm.min.js +5 -5
  29. package/dist/vanduo.esm.min.js.map +4 -4
  30. package/dist/vanduo.js +2152 -4
  31. package/dist/vanduo.js.map +4 -4
  32. package/dist/vanduo.min.css +2 -2
  33. package/dist/vanduo.min.css.map +1 -1
  34. package/dist/vanduo.min.js +5 -5
  35. package/dist/vanduo.min.js.map +4 -4
  36. package/js/components/affix.js +129 -0
  37. package/js/components/bubble.js +203 -0
  38. package/js/components/datepicker.js +287 -0
  39. package/js/components/flow.js +264 -0
  40. package/js/components/rating.js +160 -0
  41. package/js/components/ripple.js +74 -0
  42. package/js/components/sidenav.js +9 -2
  43. package/js/components/spotlight.js +295 -0
  44. package/js/components/stepper.js +97 -0
  45. package/js/components/suggest.js +219 -0
  46. package/js/components/timepicker.js +142 -0
  47. package/js/components/transfer.js +206 -0
  48. package/js/components/tree.js +191 -0
  49. package/js/components/validate.js +185 -0
  50. package/js/components/waypoint.js +120 -0
  51. package/js/index.js +16 -0
  52. package/package.json +1 -1
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Vanduo Framework - Flow (Carousel/Slider)
3
+ * Content carousel with slide/fade transitions, touch support
4
+ * Primary: .vd-flow | Alias: .vd-carousel
5
+ */
6
+
7
+ :root {
8
+ /* Flow Dimensions */
9
+ --flow-height: auto;
10
+ --flow-min-height: 13rem; /* 208px - fib */
11
+
12
+ /* Flow Spacing (Fibonacci) */
13
+ --flow-padding: 0;
14
+ --flow-gap: 0;
15
+ --flow-indicator-size: 0.5rem; /* 8px - fib */
16
+ --flow-indicator-gap: 0.5rem; /* 8px - fib */
17
+ --flow-control-size: 2.5rem; /* 40px */
18
+ --flow-control-offset: 0.8125rem; /* 13px - fib */
19
+
20
+ /* Flow Colors */
21
+ --flow-bg: var(--bg-primary, #fff);
22
+ --flow-indicator-bg: rgba(255, 255, 255, 0.5);
23
+ --flow-indicator-active-bg: #fff;
24
+ --flow-control-bg: rgba(0, 0, 0, 0.3);
25
+ --flow-control-hover-bg: rgba(0, 0, 0, 0.5);
26
+ --flow-control-color: #fff;
27
+
28
+ /* Flow Transitions */
29
+ --flow-transition-duration: 0.5s;
30
+ --flow-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
31
+
32
+ /* Flow Border */
33
+ --flow-border-radius: var(--border-radius, 0.5rem);
34
+
35
+ /* Flow Z-index */
36
+ --flow-z-controls: 10;
37
+ --flow-z-indicators: 10;
38
+ }
39
+
40
+ /* Dark Theme */
41
+ [data-theme="dark"] {
42
+ --flow-bg: var(--bg-primary, #1a1a2e);
43
+ --flow-control-bg: rgba(255, 255, 255, 0.2);
44
+ --flow-control-hover-bg: rgba(255, 255, 255, 0.35);
45
+ }
46
+
47
+ @media (prefers-color-scheme: dark) {
48
+ :root:not([data-theme]) {
49
+ --flow-bg: var(--bg-primary, #1a1a2e);
50
+ --flow-control-bg: rgba(255, 255, 255, 0.2);
51
+ --flow-control-hover-bg: rgba(255, 255, 255, 0.35);
52
+ }
53
+ }
54
+
55
+ /* ========== Base ========== */
56
+
57
+ .vd-flow,
58
+ .vd-carousel {
59
+ position: relative;
60
+ overflow: hidden;
61
+ width: 100%;
62
+ min-height: var(--flow-min-height);
63
+ height: var(--flow-height);
64
+ background-color: var(--flow-bg);
65
+ border-radius: var(--flow-border-radius);
66
+ }
67
+
68
+ /* ========== Track ========== */
69
+
70
+ .vd-flow-track {
71
+ display: flex;
72
+ width: 100%;
73
+ height: 100%;
74
+ transition: transform var(--flow-transition-duration) var(--flow-transition-timing);
75
+ will-change: transform;
76
+ }
77
+
78
+ .vd-flow.is-dragging .vd-flow-track {
79
+ transition: none;
80
+ cursor: grabbing;
81
+ }
82
+
83
+ /* ========== Slides ========== */
84
+
85
+ .vd-flow-slide {
86
+ position: relative;
87
+ flex: 0 0 100%;
88
+ width: 100%;
89
+ min-height: var(--flow-min-height);
90
+ overflow: hidden;
91
+ }
92
+
93
+ .vd-flow-slide img {
94
+ width: 100%;
95
+ height: 100%;
96
+ object-fit: cover;
97
+ }
98
+
99
+ /* Fade transition variant */
100
+ .vd-flow-fade .vd-flow-track {
101
+ transition: none;
102
+ }
103
+
104
+ .vd-flow-fade .vd-flow-slide {
105
+ position: absolute;
106
+ top: 0;
107
+ left: 0;
108
+ opacity: 0;
109
+ transition: opacity var(--flow-transition-duration) var(--flow-transition-timing);
110
+ pointer-events: none;
111
+ }
112
+
113
+ .vd-flow-fade .vd-flow-slide.is-active {
114
+ opacity: 1;
115
+ pointer-events: auto;
116
+ position: relative;
117
+ }
118
+
119
+ /* ========== Controls ========== */
120
+
121
+ .vd-flow-prev,
122
+ .vd-flow-next {
123
+ position: absolute;
124
+ top: 50%;
125
+ transform: translateY(-50%);
126
+ z-index: var(--flow-z-controls);
127
+ display: flex;
128
+ align-items: center;
129
+ justify-content: center;
130
+ width: var(--flow-control-size);
131
+ height: var(--flow-control-size);
132
+ padding: 0;
133
+ border: none;
134
+ border-radius: 50%;
135
+ background: var(--flow-control-bg);
136
+ color: var(--flow-control-color);
137
+ font-size: 1.125rem;
138
+ cursor: pointer;
139
+ transition: background 0.2s ease, opacity 0.2s ease;
140
+ opacity: 0;
141
+ }
142
+
143
+ .vd-flow:hover .vd-flow-prev,
144
+ .vd-flow:hover .vd-flow-next,
145
+ .vd-flow:focus-within .vd-flow-prev,
146
+ .vd-flow:focus-within .vd-flow-next {
147
+ opacity: 1;
148
+ }
149
+
150
+ .vd-flow-prev:hover,
151
+ .vd-flow-next:hover {
152
+ background: var(--flow-control-hover-bg);
153
+ }
154
+
155
+ .vd-flow-prev:focus-visible,
156
+ .vd-flow-next:focus-visible {
157
+ outline: 2px solid var(--flow-control-color);
158
+ outline-offset: 2px;
159
+ }
160
+
161
+ .vd-flow-prev {
162
+ left: var(--flow-control-offset);
163
+ }
164
+
165
+ .vd-flow-next {
166
+ right: var(--flow-control-offset);
167
+ }
168
+
169
+ /* ========== Indicators ========== */
170
+
171
+ .vd-flow-indicators {
172
+ position: absolute;
173
+ bottom: 0.8125rem; /* 13px - fib */
174
+ left: 50%;
175
+ transform: translateX(-50%);
176
+ z-index: var(--flow-z-indicators);
177
+ display: flex;
178
+ gap: var(--flow-indicator-gap);
179
+ padding: 0.3125rem 0.5rem; /* 5px 8px - fib */
180
+ margin: 0;
181
+ list-style: none;
182
+ border-radius: 1rem;
183
+ }
184
+
185
+ .vd-flow-indicator {
186
+ width: var(--flow-indicator-size);
187
+ height: var(--flow-indicator-size);
188
+ padding: 0;
189
+ border: none;
190
+ border-radius: 50%;
191
+ background: var(--flow-indicator-bg);
192
+ cursor: pointer;
193
+ transition: background 0.2s ease, transform 0.2s ease;
194
+ }
195
+
196
+ .vd-flow-indicator:hover {
197
+ background: rgba(255, 255, 255, 0.75);
198
+ }
199
+
200
+ .vd-flow-indicator.is-active {
201
+ background: var(--flow-indicator-active-bg);
202
+ transform: scale(1.3);
203
+ }
204
+
205
+ .vd-flow-indicator:focus-visible {
206
+ outline: 2px solid var(--flow-indicator-active-bg);
207
+ outline-offset: 2px;
208
+ }
209
+
210
+ /* ========== Slide Content Overlay ========== */
211
+
212
+ .vd-flow-caption {
213
+ position: absolute;
214
+ bottom: 0;
215
+ left: 0;
216
+ right: 0;
217
+ padding: 1.3125rem 1.3125rem 2.625rem; /* 21px 21px 42px - fib */
218
+ background: linear-gradient(transparent, rgba(0, 0, 0, 0.6));
219
+ color: #fff;
220
+ }
221
+
222
+ .vd-flow-caption h3,
223
+ .vd-flow-caption .vd-flow-title {
224
+ margin: 0 0 0.3125rem; /* 5px - fib */
225
+ font-size: 1.25rem;
226
+ font-weight: 600;
227
+ }
228
+
229
+ .vd-flow-caption p,
230
+ .vd-flow-caption .vd-flow-description {
231
+ margin: 0;
232
+ font-size: 0.875rem;
233
+ opacity: 0.9;
234
+ }
235
+
236
+ /* ========== Size Variants ========== */
237
+
238
+ .vd-flow-compact {
239
+ --flow-min-height: 8rem;
240
+ --flow-control-size: 2rem;
241
+ }
242
+
243
+ .vd-flow-lg {
244
+ --flow-min-height: 21rem; /* 336px - fib×16 */
245
+ --flow-control-size: 3rem;
246
+ }
247
+
248
+ .vd-flow-fullscreen {
249
+ --flow-min-height: 100vh;
250
+ --flow-border-radius: 0;
251
+ }
252
+
253
+ /* ========== Responsive ========== */
254
+
255
+ @media (max-width: 768px) {
256
+ .vd-flow-prev,
257
+ .vd-flow-next {
258
+ opacity: 1;
259
+ --flow-control-size: 2rem;
260
+ }
261
+
262
+ .vd-flow-caption {
263
+ padding: 0.8125rem 0.8125rem 2rem;
264
+ }
265
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Vanduo Framework - Rating
3
+ * Star/icon-based rating input with read-only mode
4
+ */
5
+
6
+ :root {
7
+ /* Rating Colors */
8
+ --rating-active-color: #f59e0b;
9
+ --rating-inactive-color: var(--color-gray-300, #dee2e6);
10
+ --rating-hover-color: #fbbf24;
11
+
12
+ /* Rating Dimensions (Fibonacci) */
13
+ --rating-size: 1.3125rem; /* 21px - fib */
14
+ --rating-size-sm: 1rem;
15
+ --rating-size-lg: 2.125rem; /* 34px ~ fib */
16
+ --rating-gap: 0.125rem; /* 2px */
17
+ }
18
+
19
+ [data-theme="dark"] {
20
+ --rating-inactive-color: var(--color-gray-600, #6c757d);
21
+ }
22
+
23
+ @media (prefers-color-scheme: dark) {
24
+ :root:not([data-theme]) {
25
+ --rating-inactive-color: var(--color-gray-600, #6c757d);
26
+ }
27
+ }
28
+
29
+ /* ========== Base ========== */
30
+
31
+ .vd-rating {
32
+ display: inline-flex;
33
+ align-items: center;
34
+ gap: var(--rating-gap);
35
+ }
36
+
37
+ .vd-rating-star {
38
+ display: inline-flex;
39
+ align-items: center;
40
+ justify-content: center;
41
+ font-size: var(--rating-size);
42
+ color: var(--rating-inactive-color);
43
+ cursor: pointer;
44
+ transition: color 0.15s ease, transform 0.15s ease;
45
+ user-select: none;
46
+ border: none;
47
+ background: none;
48
+ padding: 0;
49
+ line-height: 1;
50
+ }
51
+
52
+ .vd-rating-star::before {
53
+ content: '\2605'; /* filled star */
54
+ }
55
+
56
+ .vd-rating-star:hover {
57
+ transform: scale(1.2);
58
+ }
59
+
60
+ .vd-rating-star.is-active {
61
+ color: var(--rating-active-color);
62
+ }
63
+
64
+ .vd-rating-star.is-hovered {
65
+ color: var(--rating-hover-color);
66
+ }
67
+
68
+ /* Half-star support */
69
+ .vd-rating-star.is-half {
70
+ position: relative;
71
+ color: var(--rating-inactive-color);
72
+ }
73
+
74
+ .vd-rating-star.is-half::after {
75
+ content: '\2605';
76
+ position: absolute;
77
+ left: 0;
78
+ top: 0;
79
+ width: 50%;
80
+ overflow: hidden;
81
+ color: var(--rating-active-color);
82
+ }
83
+
84
+ /* ========== Read-only ========== */
85
+
86
+ .vd-rating-readonly .vd-rating-star {
87
+ cursor: default;
88
+ pointer-events: none;
89
+ }
90
+
91
+ .vd-rating-readonly .vd-rating-star:hover {
92
+ transform: none;
93
+ }
94
+
95
+ /* ========== Sizes ========== */
96
+
97
+ .vd-rating-sm .vd-rating-star {
98
+ font-size: var(--rating-size-sm);
99
+ }
100
+
101
+ .vd-rating-lg .vd-rating-star {
102
+ font-size: var(--rating-size-lg);
103
+ }
104
+
105
+ /* ========== Value Display ========== */
106
+
107
+ .vd-rating-value {
108
+ margin-left: 0.5rem;
109
+ font-size: 0.875rem;
110
+ font-weight: 600;
111
+ color: var(--text-primary, #212529);
112
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Vanduo Framework - Ripple (Waves Effect)
3
+ * Click-position-based expanding circle animation
4
+ */
5
+
6
+ :root {
7
+ --ripple-color: rgba(255, 255, 255, 0.35);
8
+ --ripple-duration: 0.6s;
9
+ --ripple-timing: cubic-bezier(0, 0, 0.2, 1);
10
+ }
11
+
12
+ [data-theme="dark"] {
13
+ --ripple-color: rgba(255, 255, 255, 0.2);
14
+ }
15
+
16
+ @media (prefers-color-scheme: dark) {
17
+ :root:not([data-theme]) {
18
+ --ripple-color: rgba(255, 255, 255, 0.2);
19
+ }
20
+ }
21
+
22
+ /* ========== Base ========== */
23
+
24
+ .vd-ripple,
25
+ [data-vd-ripple] {
26
+ position: relative;
27
+ overflow: hidden;
28
+ -webkit-tap-highlight-color: transparent;
29
+ }
30
+
31
+ /* The animated circle */
32
+ .vd-ripple-wave {
33
+ position: absolute;
34
+ border-radius: 50%;
35
+ background: var(--ripple-color);
36
+ transform: scale(0);
37
+ animation: vd-ripple-expand var(--ripple-duration) var(--ripple-timing) forwards;
38
+ pointer-events: none;
39
+ }
40
+
41
+ @keyframes vd-ripple-expand {
42
+ to {
43
+ transform: scale(4);
44
+ opacity: 0;
45
+ }
46
+ }
47
+
48
+ /* ========== Color Variants ========== */
49
+
50
+ .vd-ripple-dark,
51
+ [data-vd-ripple="dark"] {
52
+ --ripple-color: rgba(0, 0, 0, 0.15);
53
+ }
54
+
55
+ .vd-ripple-primary,
56
+ [data-vd-ripple="primary"] {
57
+ --ripple-color: rgba(13, 110, 253, 0.3);
58
+ }
59
+
60
+ .vd-ripple-light,
61
+ [data-vd-ripple="light"] {
62
+ --ripple-color: rgba(255, 255, 255, 0.5);
63
+ }
@@ -267,6 +267,76 @@
267
267
  margin-right: var(--sidenav-width-lg);
268
268
  }
269
269
 
270
+ /* ========== Offcanvas Alias ========== */
271
+
272
+ .vd-offcanvas {
273
+ position: fixed;
274
+ top: 0;
275
+ left: 0;
276
+ z-index: var(--sidenav-z-index);
277
+ width: var(--sidenav-width);
278
+ height: 100vh;
279
+ display: flex;
280
+ flex-direction: column;
281
+ background-color: var(--sidenav-bg);
282
+ box-shadow: var(--shadow-lg);
283
+ transform: translateX(-100%);
284
+ transition: var(--sidenav-transition);
285
+ overflow-y: auto;
286
+ overflow-x: hidden;
287
+ }
288
+
289
+ .vd-offcanvas.is-open {
290
+ transform: translateX(0) translateY(0);
291
+ }
292
+
293
+ /* Top direction */
294
+ .vd-sidenav-top,
295
+ .vd-offcanvas-top {
296
+ top: 0;
297
+ left: 0;
298
+ right: 0;
299
+ bottom: auto;
300
+ width: 100%;
301
+ height: auto;
302
+ max-height: 80vh;
303
+ transform: translateY(-100%);
304
+ }
305
+
306
+ .vd-sidenav-top.is-open,
307
+ .vd-offcanvas-top.is-open {
308
+ transform: translateY(0);
309
+ }
310
+
311
+ /* Bottom direction */
312
+ .vd-sidenav-bottom,
313
+ .vd-offcanvas-bottom {
314
+ top: auto;
315
+ left: 0;
316
+ right: 0;
317
+ bottom: 0;
318
+ width: 100%;
319
+ height: auto;
320
+ max-height: 80vh;
321
+ transform: translateY(100%);
322
+ }
323
+
324
+ .vd-sidenav-bottom.is-open,
325
+ .vd-offcanvas-bottom.is-open {
326
+ transform: translateY(0);
327
+ }
328
+
329
+ /* Right alias for offcanvas */
330
+ .vd-offcanvas-right {
331
+ left: auto;
332
+ right: 0;
333
+ transform: translateX(100%);
334
+ }
335
+
336
+ .vd-offcanvas-right.is-open {
337
+ transform: translateX(0);
338
+ }
339
+
270
340
  /* Body Scroll Lock */
271
341
  .body-sidenav-open {
272
342
  overflow: hidden;
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Vanduo Framework - Spotlight (Feature Discovery)
3
+ * Overlay highlight + tooltip tour system
4
+ */
5
+
6
+ :root {
7
+ --spotlight-overlay-bg: rgba(0, 0, 0, 0.5);
8
+ --spotlight-tooltip-bg: var(--card-bg, #fff);
9
+ --spotlight-tooltip-color: var(--text-primary, #212529);
10
+ --spotlight-tooltip-shadow: 0 0.5rem 1.3125rem rgba(0, 0, 0, 0.15);
11
+ --spotlight-tooltip-padding: 1.3125rem; /* 21px - fib */
12
+ --spotlight-tooltip-radius: var(--border-radius, 0.5rem);
13
+ --spotlight-tooltip-max-width: 21rem; /* 336px - fib×16 */
14
+ --spotlight-highlight-padding: 0.5rem; /* 8px - fib */
15
+ --spotlight-z-index: 1080;
16
+ }
17
+
18
+ [data-theme="dark"] {
19
+ --spotlight-tooltip-bg: var(--card-bg, #2d2d44);
20
+ --spotlight-tooltip-shadow: 0 0.5rem 1.3125rem rgba(0, 0, 0, 0.35);
21
+ }
22
+
23
+ @media (prefers-color-scheme: dark) {
24
+ :root:not([data-theme]) {
25
+ --spotlight-tooltip-bg: var(--card-bg, #2d2d44);
26
+ --spotlight-tooltip-shadow: 0 0.5rem 1.3125rem rgba(0, 0, 0, 0.35);
27
+ }
28
+ }
29
+
30
+ /* ========== Overlay ========== */
31
+
32
+ .vd-spotlight-overlay {
33
+ position: fixed;
34
+ top: 0;
35
+ left: 0;
36
+ width: 100vw;
37
+ height: 100vh;
38
+ z-index: var(--spotlight-z-index);
39
+ pointer-events: auto;
40
+ transition: opacity 0.3s ease;
41
+ }
42
+
43
+ /* ========== Tooltip ========== */
44
+
45
+ .vd-spotlight-tooltip {
46
+ position: absolute;
47
+ z-index: calc(var(--spotlight-z-index) + 2);
48
+ background: var(--spotlight-tooltip-bg);
49
+ color: var(--spotlight-tooltip-color);
50
+ padding: var(--spotlight-tooltip-padding);
51
+ border-radius: var(--spotlight-tooltip-radius);
52
+ box-shadow: var(--spotlight-tooltip-shadow);
53
+ max-width: var(--spotlight-tooltip-max-width);
54
+ }
55
+
56
+ .vd-spotlight-title {
57
+ margin: 0 0 0.5rem;
58
+ font-weight: 600;
59
+ font-size: 1.125rem;
60
+ }
61
+
62
+ .vd-spotlight-description {
63
+ margin: 0 0 0.8125rem; /* 13px - fib */
64
+ font-size: 0.875rem;
65
+ line-height: 1.5;
66
+ }
67
+
68
+ /* ========== Footer (nav buttons) ========== */
69
+
70
+ .vd-spotlight-footer {
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: space-between;
74
+ gap: 0.5rem;
75
+ }
76
+
77
+ .vd-spotlight-counter {
78
+ font-size: 0.75rem;
79
+ color: var(--text-muted, #6c757d);
80
+ }
81
+
82
+ .vd-spotlight-actions {
83
+ display: flex;
84
+ gap: 0.3125rem; /* 5px - fib */
85
+ }
86
+
87
+ .vd-spotlight-btn {
88
+ padding: 0.3125rem 0.8125rem; /* 5px 13px - fib */
89
+ border: 1px solid var(--border-color, #dee2e6);
90
+ border-radius: 0.25rem;
91
+ background: transparent;
92
+ cursor: pointer;
93
+ font-size: 0.8125rem;
94
+ transition: background 0.15s ease;
95
+ }
96
+
97
+ .vd-spotlight-btn:hover {
98
+ background: var(--bg-secondary, #f8f9fa);
99
+ }
100
+
101
+ .vd-spotlight-btn-primary {
102
+ background: var(--color-primary, #0d6efd);
103
+ color: #fff;
104
+ border-color: var(--color-primary, #0d6efd);
105
+ }
106
+
107
+ .vd-spotlight-btn-primary:hover {
108
+ background: var(--color-primary-dark, #0b5ed7);
109
+ }
110
+
111
+ /* ========== Highlighted Target ========== */
112
+
113
+ .vd-spotlight-target {
114
+ position: relative;
115
+ z-index: calc(var(--spotlight-z-index) + 1);
116
+ box-shadow: 0 0 0 var(--spotlight-highlight-padding) rgba(13, 110, 253, 0.25),
117
+ 0 0 0 9999px var(--spotlight-overlay-bg);
118
+ border-radius: 0.25rem;
119
+ }