@duskmoon-dev/css-art 0.1.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.
@@ -0,0 +1,662 @@
1
+ @layer css-art {
2
+ .art-plasma-ball {
3
+ --art-plasma-ball-size: 350px;
4
+ --art-plasma-ball-base-color: #222222;
5
+ --art-plasma-ball-switch-size: calc(var(--art-plasma-ball-size) * 37 / 350);
6
+ position: relative;
7
+ margin: 0 auto;
8
+ width: var(--art-plasma-ball-size);
9
+ height: var(--art-plasma-ball-size);
10
+ box-sizing: border-box;
11
+
12
+ * {
13
+ box-sizing: border-box;
14
+ }
15
+
16
+ .base {
17
+ position: absolute;
18
+ background: var(--art-plasma-ball-base-color);
19
+ width: calc(var(--art-plasma-ball-size) * 6 / 7);
20
+ height: calc(var(--art-plasma-ball-size) * 4 / 7);
21
+ margin: calc(var(--art-plasma-ball-size) * 48 / 350) auto;
22
+ top: calc(var(--art-plasma-ball-size) * 286 / 350);
23
+ left: calc(var(--art-plasma-ball-size) * 25 / 350);
24
+ }
25
+ .base:before {
26
+ position: absolute;
27
+ top: calc(var(--art-plasma-ball-size) * -44 / 350);
28
+ width: calc(var(--art-plasma-ball-size) * 300 / 350);
29
+ height: calc(var(--art-plasma-ball-size) * 80 / 350);
30
+ border-radius: 100%;
31
+ content: "";
32
+ background: radial-gradient(#222 20%, #353535);
33
+ background: conic-gradient(from 167deg, #666666, #232323, #232323, #666666);
34
+ border: 2px solid #597481;
35
+ box-sizing: border-box;
36
+ left: 0;
37
+ z-index: 0;
38
+ }
39
+ .base:after {
40
+ position: absolute;
41
+ left: calc(var(--art-plasma-ball-size) * -35 / 350);
42
+ bottom: calc(var(--art-plasma-ball-size) * -65 / 350);
43
+ width: calc(var(--art-plasma-ball-size) * 370 / 350);
44
+ height: calc(var(--art-plasma-ball-size) * 110 / 350);
45
+ border-radius: 30% 30% 50% 50%;
46
+ content: "";
47
+ background: var(--art-plasma-ball-base-color);
48
+ z-index: -1;
49
+ }
50
+ .base div {
51
+ background: var(--art-plasma-ball-base-color);
52
+ height: calc(var(--art-plasma-ball-size) * 100 / 350);
53
+ margin-top: calc(var(--art-plasma-ball-size) * 48 / 350);
54
+ float: left;
55
+ margin-left: calc(var(--art-plasma-ball-size) * -53 / 350);
56
+ width: 63%;
57
+ transform: rotate(-85deg);
58
+ z-index: -1;
59
+ position: relative;
60
+ }
61
+ .base div + div {
62
+ margin-top: calc(var(--art-plasma-ball-size) * -99 / 350);
63
+ margin-left: calc(var(--art-plasma-ball-size) * 164 / 350);
64
+ transform: rotate(85deg);
65
+ }
66
+ .base span {
67
+ position: absolute;
68
+ left: calc(var(--art-plasma-ball-size) * -51 / 350);
69
+ bottom: calc(var(--art-plasma-ball-size) * -4 / 350);
70
+ width: calc(var(--art-plasma-ball-size) * 402 / 350);
71
+ height: calc(var(--art-plasma-ball-size) * 160 / 350);
72
+ border-radius: 0% 0% 80% 80%;
73
+ content: "";
74
+ background: #242f3400;
75
+ z-index: 0;
76
+ border: 2px solid transparent;
77
+ border-bottom-color: #435761;
78
+ }
79
+ input.switcher {
80
+ width: calc(var(--art-plasma-ball-size) * 48 / 350);
81
+ height: calc(var(--art-plasma-ball-size) * 48 / 350);
82
+ opacity: 0;
83
+ position: absolute;
84
+ z-index: 3333;
85
+ margin: 0;
86
+ cursor: pointer;
87
+ outline: none;
88
+ border-radius: calc(var(--art-plasma-ball-size) * 50 / 350) !important;
89
+ top: calc(var(--art-plasma-ball-size) * 425 / 350);
90
+ left: calc(var(--art-plasma-ball-size) * 151 / 350);
91
+ }
92
+ .glassball {
93
+ position: relative;
94
+ overflow: hidden;
95
+ margin: 0 auto;
96
+ width: 100%;
97
+ height: 100%;
98
+ border-radius: 100%;
99
+ background-color: rgb(255 255 255 / 0.15);
100
+ top: 0%;
101
+ box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2),
102
+ inset 0px 10px 30px 5px rgba(255, 255, 255, 1);
103
+ position: absolute;
104
+ }
105
+ .glassball:after {
106
+ background: radial-gradient(
107
+ ellipse at center,
108
+ rgba(255, 255, 255, 0.5) 0%,
109
+ rgba(255, 255, 255, 0) 70%
110
+ );
111
+ border-radius: 50%;
112
+ box-shadow: inset 0 20px 30px rgb(255 255 255 / 30%);
113
+ content: "";
114
+ height: 96%;
115
+ left: 2%;
116
+ position: absolute;
117
+ width: 96%;
118
+ top: 2%;
119
+ z-index: 1;
120
+ }
121
+ .glassball:hover {
122
+ cursor: grab;
123
+ }
124
+ .glassball:before {
125
+ position: absolute;
126
+ left: 48%;
127
+ top: 50%;
128
+ width: 0px;
129
+ height: 0px;
130
+ background: radial-gradient(circle closest-side, #9c27b0, transparent);
131
+ transform: translate(-45%, -48%);
132
+ transition: width 0.2s ease, height 0.2s ease;
133
+ animation: art-plasma-ball-spark 5ms ease 0s infinite alternate;
134
+ border: 8px dotted #24e6ff;
135
+ filter: blur(15px);
136
+ border-radius: 100%;
137
+ z-index: 2;
138
+ font-size: 10em;
139
+ color: #d6faff;
140
+ text-align: center;
141
+ line-height: 1;
142
+ content: "s";
143
+ display: none;
144
+ opacity: 0.75;
145
+ }
146
+ .glassball:hover:before {
147
+ width: calc(var(--art-plasma-ball-size) * 120 / 350);
148
+ height: calc(var(--art-plasma-ball-size) * 150 / 350);
149
+ }
150
+ input.switcher:checked + .glassball:before,
151
+ input.switcher:checked + .glassball:after {
152
+ display: block;
153
+ }
154
+ input.switcher:checked + .glassball:after {
155
+ width: 97%;
156
+ height: 97%;
157
+ left: 1.5%;
158
+ top: 1.5%;
159
+ }
160
+ input.switcher:checked + .glassball:hover:after {
161
+ animation: art-plasma-ball-rotation 3s ease 0s infinite alternate;
162
+ background: radial-gradient(
163
+ ellipse at center,
164
+ #ffffff7d 0%,
165
+ #54ecff94 10%,
166
+ transparent 100%
167
+ );
168
+ filter: brightness(1.75);
169
+ opacity: 0.5;
170
+ }
171
+ input.switcher:checked + .glassball {
172
+ transform: translate3d(0, 0, 0);
173
+ backface-visibility: hidden;
174
+ perspective: calc(var(--art-plasma-ball-size) * 1000 / 350);
175
+ background: radial-gradient(
176
+ circle,
177
+ #ff5affb8 0%,
178
+ #ff5affb8 20%,
179
+ #5493d2a8 70%,
180
+ #5493d2a8 100%
181
+ );
182
+ animation: art-plasma-ball-innerlight 5s linear 0s infinite,
183
+ art-plasma-ball-shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
184
+ transition: background 0.4s ease 0s;
185
+ box-shadow: 0 0 15px 5px #5493d2a8;
186
+ border: 1px solid transparent;
187
+ }
188
+
189
+ .switch {
190
+ background: #1b1b1b;
191
+ width: var(--art-plasma-ball-switch-size);
192
+ height: var(--art-plasma-ball-switch-size);
193
+ position: absolute;
194
+ left: calc(50% - var(--art-plasma-ball-switch-size) / 2);
195
+ top: calc(var(--art-plasma-ball-size) * 430 / 350);
196
+ border: 3px solid #4e4e4e;
197
+ z-index: 5;
198
+ border-radius: 100%;
199
+ box-shadow: 0 0 10px 0px #000000, 0 0 5px 1px #2d2d2d, 0 0 3px 1px #000 inset;
200
+ }
201
+ .switch::before {
202
+ content: "";
203
+ position: absolute;
204
+ width: calc(var(--art-plasma-ball-switch-size) * 16 / 37);
205
+ height: calc(var(--art-plasma-ball-switch-size) * 16 / 37);
206
+ bottom: calc(var(--art-plasma-ball-switch-size) * 6 / 37);
207
+ border: calc(var(--art-plasma-ball-switch-size) * 3 / 37) solid #4e4e4e;
208
+ border-top-color: transparent;
209
+ border-radius: 100%;
210
+ left: calc(var(--art-plasma-ball-switch-size) * 5.5 / 37);
211
+ }
212
+ .switch::after {
213
+ content: "";
214
+ position: absolute;
215
+ width: calc(var(--art-plasma-ball-switch-size) * 3 / 37);
216
+ height: calc(var(--art-plasma-ball-switch-size) * 9 / 37);
217
+ bottom: calc(var(--art-plasma-ball-switch-size) * 14 / 37);
218
+ left: calc(var(--art-plasma-ball-switch-size) * 11.5 / 37);
219
+ background: #4e4e4e;
220
+ }
221
+ input:checked + div + div + .switch {
222
+ background: linear-gradient(to bottom, #171717, #404040);
223
+ color: #fff;
224
+ box-shadow: 0 0 10px 0px #03a9f4, 0 0 5px 1px #03a9f4;
225
+ border-color: #222222d1;
226
+ }
227
+ input:checked + div + div + .switch:before {
228
+ border-color: transparent #03a9f4 #03a9f4 #03a9f4;
229
+ }
230
+ input:checked + div + div + .switch:after {
231
+ background: #03a9f4;
232
+ }
233
+ .electrode {
234
+ width: calc(var(--art-plasma-ball-size) * 16 / 350);
235
+ height: calc(var(--art-plasma-ball-size) * 140 / 350);
236
+ bottom: calc(var(--art-plasma-ball-size) * 20 / 350);
237
+ left: calc(50% - 0.5em);
238
+ position: absolute;
239
+ overflow: visible;
240
+ }
241
+ .electrode:not(.hide-electrode) {
242
+ background: linear-gradient(75deg, #3a3a3a 20%, #2d2d2d);
243
+ border-bottom: 1px solid #657882;
244
+ border-radius: 0 0 6px 5px;
245
+ }
246
+ .electrode:before {
247
+ position: absolute;
248
+ left: calc(var(--art-plasma-ball-size) * -16 / 350);
249
+ top: calc(var(--art-plasma-ball-size) * -40 / 350);
250
+ width: calc(var(--art-plasma-ball-size) * 48 / 350);
251
+ height: calc(var(--art-plasma-ball-size) * 48 / 350);
252
+ border-radius: 100%;
253
+ content: "";
254
+ background: radial-gradient(at top left, #4a4949 20%, #2d2d2d);
255
+ border: 1px solid #758e99;
256
+ box-sizing: border-box;
257
+ }
258
+ .electrode:not(.hide-electrode):after {
259
+ position: absolute;
260
+ left: calc(var(--art-plasma-ball-size) * -3 / 350);
261
+ bottom: calc(var(--art-plasma-ball-size) * -11 / 350);
262
+ width: calc(var(--art-plasma-ball-size) * 22 / 350);
263
+ height: calc(var(--art-plasma-ball-size) * 16 / 350);
264
+ border-radius: calc(var(--art-plasma-ball-size) * 140 / 350) / calc(var(--art-plasma-ball-size) * 50 / 350);
265
+ content: "";
266
+ background: linear-gradient(-263deg, #191919 20%, #0a0a0a);
267
+ z-index: -1;
268
+ }
269
+ input.switcher:checked + .glassball .electrode:after {
270
+ background: linear-gradient(-263deg, #3a3a3a 20%, #2d2d2d);
271
+ }
272
+ input.switcher:checked + .glassball .electrode:before {
273
+ background: radial-gradient(
274
+ ellipse farthest-corner at calc(var(--art-plasma-ball-size) * 30 / 350) calc(var(--art-plasma-ball-size) * 30 / 350),
275
+ #999,
276
+ #e449ff,
277
+ #e449ff,
278
+ #9763ff,
279
+ #62edff,
280
+ #fff
281
+ );
282
+ box-shadow: 0 0 10px 2px #e449ffb3, 0 0 10px 2px #fff,
283
+ 0 0 50px -10px #fff inset;
284
+ border-color: #ffffff94;
285
+ }
286
+ input.switcher + .glassball .rays {
287
+ display: none;
288
+ }
289
+ input.switcher:checked + .glassball .rays {
290
+ display: block;
291
+ float: left;
292
+ width: 100%;
293
+ height: 100%;
294
+ position: absolute;
295
+ }
296
+ .ray {
297
+ width: calc(var(--art-plasma-ball-size) * 160 / 350);
298
+ height: calc(var(--art-plasma-ball-size) * 32 / 350);
299
+ position: absolute;
300
+ bottom: calc(var(--art-plasma-ball-size) * 144 / 350);
301
+ filter: drop-shadow(0px 0px 7px #9660f7) drop-shadow(0px 0px 2px #fff);
302
+ }
303
+ .ray:before {
304
+ content: "";
305
+ width: calc(var(--art-plasma-ball-size) * 8 / 350);
306
+ height: calc(var(--art-plasma-ball-size) * 7.2 / 350);
307
+ border: 2px dashed #03a9f4;
308
+ position: absolute;
309
+ border-width: 3px 3px 1px 1px;
310
+ transform: rotate(87deg);
311
+ top: calc(var(--art-plasma-ball-size) * 4.8 / 350);
312
+ left: calc(var(--art-plasma-ball-size) * 3 / 350);
313
+ border-radius: 10px 5px 8px 7px;
314
+ filter: blur(2px);
315
+ box-shadow: 0 0 10px -1px black;
316
+ }
317
+ .ray:after {
318
+ content: "s";
319
+ float: left;
320
+ width: calc(var(--art-plasma-ball-size) * 32 / 350);
321
+ height: calc(var(--art-plasma-ball-size) * 96 / 350);
322
+ margin-top: calc(var(--art-plasma-ball-size) * 20 / 350);
323
+ margin-left: 0px;
324
+ animation: art-plasma-ball-blink 1s linear 0s infinite alternate;
325
+ background: radial-gradient(circle closest-side, #9c27b0, transparent);
326
+ transform: translate(-45%, -48%);
327
+ transition: width 0.2s ease, height 0.2s ease;
328
+ border: calc(var(--art-plasma-ball-size) * 8 / 350) dotted #24e6ff;
329
+ filter: blur(5px);
330
+ border-radius: 100%;
331
+ z-index: 2;
332
+ font-size: calc(var(--art-plasma-ball-size) * 64 / 350);
333
+ color: #d6faff;
334
+ text-align: center;
335
+ line-height: 1;
336
+ }
337
+ .ray span {
338
+ width: calc(var(--art-plasma-ball-size) * 64 / 350);
339
+ height: calc(var(--art-plasma-ball-size) * 16 / 350);
340
+ border: solid calc(var(--art-plasma-ball-size) * 4 / 350) #000;
341
+ border-radius: 238%/50px 50px 0 0;
342
+ position: absolute;
343
+ top: calc(var(--art-plasma-ball-size) * 8 / 350);
344
+ left: 0;
345
+ border-color: #6bbdff transparent transparent transparent;
346
+ }
347
+
348
+ .ray span + span {
349
+ left: 30%;
350
+ transform: rotate(180deg);
351
+ top: calc(var(--art-plasma-ball-size) * 2.4 / 350);
352
+ }
353
+ .ray span + span + span {
354
+ left: 60%;
355
+ transform: rotate(0deg);
356
+ top: calc(var(--art-plasma-ball-size) * 8 / 350);
357
+ }
358
+
359
+ .ray span:last-of-type:before {
360
+ content: "";
361
+ float: right;
362
+ width: calc(var(--art-plasma-ball-size) * 8 / 350);
363
+ height: calc(var(--art-plasma-ball-size) * 8 / 350);
364
+ background: #d1eefb;
365
+ border-radius: 100%;
366
+ box-shadow: 0 0 4px 3px #fff;
367
+ filter: blur(1px);
368
+ margin-top: calc(var(--art-plasma-ball-size) * -2 / 350);
369
+ left: calc(var(--art-plasma-ball-size) * 3 / 350);
370
+ position: relative;
371
+ }
372
+ .ray.bigwave span:last-of-type:before {
373
+ content: "";
374
+ float: left;
375
+ width: calc(var(--art-plasma-ball-size) * 8 / 350);
376
+ height: calc(var(--art-plasma-ball-size) * 8 / 350);
377
+ background: #d1eefb;
378
+ border-radius: 100%;
379
+ box-shadow: 0 0 4px 3px #fff;
380
+ filter: blur(1px);
381
+ margin-top: calc(var(--art-plasma-ball-size) * -3 / 350);
382
+ left: calc(var(--art-plasma-ball-size) * -2 / 350);
383
+ position: relative;
384
+ }
385
+ .ray.bigwave span {
386
+ width: 55%;
387
+ border-width: calc(var(--art-plasma-ball-size) * 4 / 350);
388
+ }
389
+ .ray.bigwave span + span {
390
+ width: 60%;
391
+ left: 40%;
392
+ border-width: calc(var(--art-plasma-ball-size) * 5 / 350);
393
+ margin-left: calc(var(--art-plasma-ball-size) * 4 / 350);
394
+ margin-top: calc(var(--art-plasma-ball-size) * 2 / 350);
395
+ }
396
+
397
+ .rays + .rays {
398
+ transform: rotate(180deg);
399
+ }
400
+ .rays + .rays + .rays {
401
+ transform: rotate(90deg);
402
+ }
403
+ .rays + .rays + .rays + .rays {
404
+ transform: rotate(270deg);
405
+ }
406
+ .rays + .rays + .rays + .rays + .rays {
407
+ transform: skew(-187deg, 0deg) scale(0.675) rotate(0deg);
408
+ display: none;
409
+ animation: art-plasma-ball-touchray1 2.5s ease 0.1s infinite alternate;
410
+ }
411
+ .rays + .rays + .rays + .rays + .rays + .rays {
412
+ transform: skew(-140deg, -40deg) scale(0.675) rotate(180deg);
413
+ display: none;
414
+ animation: art-plasma-ball-touchray2 1s ease 0.25s infinite;
415
+ }
416
+ input.switcher:checked
417
+ + .glassball:hover
418
+ .rays
419
+ + .rays
420
+ + .rays
421
+ + .rays
422
+ + .rays {
423
+ display: block;
424
+ }
425
+
426
+ .rays + .rays + .rays + .rays + .rays .ray {
427
+ width: calc(var(--art-plasma-ball-size) * 136 / 350);
428
+ animation: art-plasma-ball-ray1 0.5s linear 0s infinite alternate;
429
+ }
430
+ .rays + .rays + .rays + .rays + .rays .ray span {
431
+ border-top-width: calc(var(--art-plasma-ball-size) * 8 / 350);
432
+ }
433
+
434
+ .ray:nth-of-type(1) {
435
+ animation: art-plasma-ball-ray1 0.5s linear 0s infinite;
436
+ }
437
+ .ray:nth-of-type(2) {
438
+ animation: art-plasma-ball-ray1 0.75s linear 0s infinite alternate;
439
+ }
440
+ .ray:nth-of-type(3) {
441
+ animation: art-plasma-ball-ray1 0.65s linear 0s infinite reverse;
442
+ }
443
+ .ray:nth-of-type(4) {
444
+ animation: art-plasma-ball-ray1 0.95s linear 0s infinite alternate;
445
+ }
446
+ .ray:nth-of-type(5) {
447
+ animation: art-plasma-ball-ray1 0.85s linear 0s infinite reverse;
448
+ }
449
+
450
+ .rays + .rays .ray:nth-of-type(1) {
451
+ animation-duration: 1.55s;
452
+ }
453
+ .rays + .rays .ray:nth-of-type(2) {
454
+ animation-duration: 1.75s;
455
+ }
456
+ .rays + .rays .ray:nth-of-type(3) {
457
+ animation-duration: 0.65s;
458
+ }
459
+ .rays + .rays .ray:nth-of-type(4) {
460
+ animation-duration: 1.85s;
461
+ }
462
+ .rays + .rays .ray:nth-of-type(5) {
463
+ animation-duration: 1.6s;
464
+ }
465
+
466
+ .rays + .rays + .rays .ray:nth-of-type(1) {
467
+ animation-duration: 1.15s;
468
+ }
469
+ .rays + .rays + .rays .ray:nth-of-type(2) {
470
+ animation-duration: 1.5s;
471
+ }
472
+ .rays + .rays + .rays .ray:nth-of-type(3) {
473
+ animation-duration: 1.35s;
474
+ }
475
+ .rays + .rays + .rays .ray:nth-of-type(4) {
476
+ animation-duration: 1s;
477
+ }
478
+ .rays + .rays + .rays .ray:nth-of-type(5) {
479
+ animation-duration: 1.25s;
480
+ }
481
+
482
+ .rays + .rays + .rays + .rays .ray:nth-of-type(1) {
483
+ animation-duration: 1.05s;
484
+ }
485
+ .rays + .rays + .rays + .rays .ray:nth-of-type(2) {
486
+ animation-duration: 1.35s;
487
+ }
488
+ .rays + .rays + .rays + .rays .ray:nth-of-type(3) {
489
+ animation-duration: 1.25s;
490
+ }
491
+ .rays + .rays + .rays + .rays .ray:nth-of-type(4) {
492
+ animation-duration: 1.15s;
493
+ }
494
+ .rays + .rays + .rays + .rays .ray:nth-of-type(5) {
495
+ animation-duration: 1.45s;
496
+ }
497
+
498
+ .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(1) {
499
+ animation-duration: 0.85s;
500
+ }
501
+ .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(2) {
502
+ animation-duration: 0.95s;
503
+ }
504
+ .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(3) {
505
+ animation-duration: 0.75s;
506
+ }
507
+
508
+ .rays + .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(1) {
509
+ animation-duration: 1.1s;
510
+ }
511
+ .rays + .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(2) {
512
+ animation-duration: 1.25s;
513
+ }
514
+ .rays + .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(3) {
515
+ animation-duration: 1.35s;
516
+ }
517
+ }
518
+
519
+ /* Size variants */
520
+ .art-plasma-ball-sm {
521
+ --art-plasma-ball-size: 200px;
522
+ }
523
+
524
+ .art-plasma-ball-lg {
525
+ --art-plasma-ball-size: 500px;
526
+ }
527
+
528
+ @keyframes art-plasma-ball-rotation {
529
+ 50% {
530
+ transform: rotate(360deg);
531
+ }
532
+ }
533
+ @keyframes art-plasma-ball-blink {
534
+ 0% {
535
+ background: radial-gradient(circle closest-side, #ff5affb8, #5493d2a8);
536
+ transform: translate(-50%, -50%) scale(0.75) rotate(6deg);
537
+ }
538
+ 50% {
539
+ background: radial-gradient(circle closest-side, #5493d2a8, #ff5affb8);
540
+ transform: translate(-50%, -50%) scale(0.5) rotate(2deg);
541
+ }
542
+ 100% {
543
+ background: radial-gradient(circle closest-side, #ffffffa8, #5493d2a8);
544
+ transform: translate(-50%, -50%) scale(0.35) rotate(11deg);
545
+ }
546
+ }
547
+ @keyframes art-plasma-ball-innerlight {
548
+ 0% {
549
+ background-size: 105% 105%;
550
+ background-position: center center;
551
+ box-shadow: 0 0 15px 5px #5493d2a8;
552
+ }
553
+ 25% {
554
+ box-shadow: 0 0 15px 5px #ff5aff30;
555
+ }
556
+ 50% {
557
+ background-size: 85% 85%;
558
+ background-position: center center;
559
+ box-shadow: 0 0 15px 5px #5493d2a8;
560
+ }
561
+ 75% {
562
+ box-shadow: 0 0 15px 5px #ff5aff30;
563
+ }
564
+ 100% {
565
+ background-size: 105% 105%;
566
+ background-position: center center;
567
+ box-shadow: 0 0 15px 5px #5493d2a8;
568
+ }
569
+ }
570
+ @keyframes art-plasma-ball-touchray1 {
571
+ 0% {
572
+ transform: skew(-187deg, 0deg) scale(0.675) rotate(0deg);
573
+ }
574
+ 50% {
575
+ transform: skew(-185deg, 2deg) scale(0.525) rotate(180deg);
576
+ opacity: 1;
577
+ }
578
+ 51% {
579
+ opacity: 0;
580
+ }
581
+ 52% {
582
+ opacity: 1;
583
+ }
584
+ 100% {
585
+ transform: skew(-188deg, -2deg) scale(0.625) rotate(360deg);
586
+ }
587
+ }
588
+ @keyframes art-plasma-ball-touchray2 {
589
+ 0% {
590
+ transform: skew(-140deg, -40deg) scale(0.675) rotate(140deg);
591
+ }
592
+ 50% {
593
+ transform: skew(-143deg, -42deg) scale(0.525) rotate(0deg);
594
+ opacity: 1;
595
+ }
596
+ 51% {
597
+ opacity: 0;
598
+ }
599
+ 52% {
600
+ opacity: 1;
601
+ }
602
+ 100% {
603
+ transform: skew(-145deg, -38deg) scale(0.625) rotate(210deg);
604
+ }
605
+ }
606
+ @keyframes art-plasma-ball-spark {
607
+ 0% {
608
+ background: radial-gradient(circle closest-side, #ff5affb8, #5493d2a8);
609
+ transform: translate(-50%, -50%) scale(0.75) rotate(0deg);
610
+ }
611
+ 50% {
612
+ background: radial-gradient(circle closest-side, #5493d2a8, #ff5affb8);
613
+ transform: translate(-50%, -50%) scale(0.5) rotate(180deg);
614
+ }
615
+ 100% {
616
+ background: radial-gradient(circle closest-side, #ffffffa8, #5493d2a8);
617
+ transform: translate(-50%, -50%) scale(1) rotate(360deg);
618
+ }
619
+ }
620
+ @keyframes art-plasma-ball-ray1 {
621
+ 0% {
622
+ opacity: 0;
623
+ transform: rotate(0deg) translate(0px, 0px);
624
+ }
625
+ 12% {
626
+ opacity: 1;
627
+ transform: rotate(22deg) translate(0px, calc(var(--art-plasma-ball-size) * -35 / 350));
628
+ filter: brightness(1.75);
629
+ }
630
+ 25% {
631
+ opacity: 0;
632
+ transform: rotate(45deg) translate(calc(var(--art-plasma-ball-size) * -33 / 350), calc(var(--art-plasma-ball-size) * -69 / 350));
633
+ }
634
+ 37% {
635
+ opacity: 1;
636
+ transform: rotate(67deg) translate(calc(var(--art-plasma-ball-size) * -64 / 350), calc(var(--art-plasma-ball-size) * -86 / 350));
637
+ filter: brightness(1.15);
638
+ }
639
+ 50% {
640
+ opacity: 0;
641
+ transform: rotate(90deg) translate(calc(var(--art-plasma-ball-size) * -108 / 350), calc(var(--art-plasma-ball-size) * -93 / 350));
642
+ }
643
+ 62% {
644
+ opacity: 1;
645
+ transform: rotate(112deg) translate(calc(var(--art-plasma-ball-size) * -140 / 350), calc(var(--art-plasma-ball-size) * -90 / 350));
646
+ filter: brightness(1.25);
647
+ }
648
+ 75% {
649
+ opacity: 0;
650
+ transform: rotate(135deg) translate(calc(var(--art-plasma-ball-size) * -169 / 350), calc(var(--art-plasma-ball-size) * -69 / 350));
651
+ }
652
+ 87% {
653
+ opacity: 1;
654
+ transform: rotate(157deg) translate(calc(var(--art-plasma-ball-size) * -185 / 350), calc(var(--art-plasma-ball-size) * -36 / 350));
655
+ filter: brightness(1.75);
656
+ }
657
+ 100% {
658
+ opacity: 0;
659
+ transform: rotate(180deg) translate(calc(var(--art-plasma-ball-size) * -192 / 350), calc(var(--art-plasma-ball-size) * 6 / 350));
660
+ }
661
+ }
662
+ }
@@ -0,0 +1,38 @@
1
+ @layer css-art {
2
+ .art-snowflake {
3
+ position: absolute;
4
+ width: var(--art-snowflake-size, 10px);
5
+ height: var(--art-snowflake-size, 10px);
6
+ border-radius: 50%;
7
+ pointer-events: none;
8
+
9
+ &:not(.art-snowflake-unicode) {
10
+ background: var(--art-snowflake-color, #FFFFFF);
11
+ filter: drop-shadow(0 0 var(--art-snowflake-size, 10px) var(--art-snowflake-color, #FFFFFF));
12
+ }
13
+ }
14
+
15
+ /* Unicode snowflake character variant */
16
+ .art-snowflake.art-snowflake-unicode::after {
17
+ content: "\2746";
18
+ color: var(--art-snowflake-color, #FFFFFF);
19
+ font-size: var(--art-snowflake-size, 10px);
20
+ filter: drop-shadow(0 0 var(--art-snowflake-size, 10px) var(--art-snowflake-color, #FFFFFF));
21
+ }
22
+
23
+ /* Falling animation for composing snow scenes */
24
+ .art-snowflake-fall {
25
+ animation: art-snowflake-fall var(--art-snowflake-duration, 5s) linear infinite;
26
+ }
27
+
28
+ @keyframes art-snowflake-fall {
29
+ 0% {
30
+ transform: translateY(-10%) rotate(0deg);
31
+ opacity: 1;
32
+ }
33
+ 100% {
34
+ transform: translateY(100vh) rotate(360deg);
35
+ opacity: 0.3;
36
+ }
37
+ }
38
+ }