@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,1271 @@
1
+ /* CSS Art Components */
2
+ @layer css-art {
3
+ .art-moon {
4
+ --art-moon-size: 8rem;
5
+ --art-moon-color: oklch(92% 0.06 90);
6
+ --art-moon-shadow: oklch(85% 0.04 90);
7
+ --art-moon-glow: oklch(95% 0.03 90 / 0.4);
8
+
9
+ position: relative;
10
+ width: var(--art-moon-size);
11
+ height: var(--art-moon-size);
12
+ border-radius: 50%;
13
+ background: radial-gradient(
14
+ circle at 35% 35%,
15
+ var(--art-moon-color) 0%,
16
+ var(--art-moon-shadow) 100%
17
+ );
18
+ box-shadow:
19
+ 0 0 calc(var(--art-moon-size) * 0.25) var(--art-moon-glow),
20
+ 0 0 calc(var(--art-moon-size) * 0.5) var(--art-moon-glow);
21
+ }
22
+
23
+ /* Crescent variant — shadow circle creates the crescent shape */
24
+ .art-moon-crescent {
25
+ overflow: hidden;
26
+ }
27
+
28
+ .art-moon-crescent::after {
29
+ content: '';
30
+ position: absolute;
31
+ top: -10%;
32
+ right: -20%;
33
+ width: 85%;
34
+ height: 85%;
35
+ border-radius: 50%;
36
+ background: oklch(15% 0.02 260);
37
+ box-shadow: inset 0 0 1rem oklch(20% 0.02 260);
38
+ }
39
+
40
+ /* Craters */
41
+ .art-moon::before {
42
+ content: '';
43
+ position: absolute;
44
+ width: 20%;
45
+ height: 20%;
46
+ top: 25%;
47
+ left: 40%;
48
+ border-radius: 50%;
49
+ background: radial-gradient(
50
+ circle,
51
+ oklch(82% 0.03 90 / 0.6) 0%,
52
+ transparent 70%
53
+ );
54
+ box-shadow:
55
+ calc(var(--art-moon-size) * -0.15) calc(var(--art-moon-size) * 0.2) 0 -2px oklch(82% 0.03 90 / 0.4),
56
+ calc(var(--art-moon-size) * 0.1) calc(var(--art-moon-size) * -0.05) 0 -3px oklch(82% 0.03 90 / 0.3),
57
+ calc(var(--art-moon-size) * -0.08) calc(var(--art-moon-size) * -0.12) 0 -1px oklch(82% 0.03 90 / 0.35);
58
+ }
59
+
60
+ /* Size variants */
61
+ .art-moon-sm {
62
+ --art-moon-size: 4rem;
63
+ }
64
+
65
+ .art-moon-lg {
66
+ --art-moon-size: 12rem;
67
+ }
68
+
69
+ .art-moon-xl {
70
+ --art-moon-size: 16rem;
71
+ }
72
+
73
+ /* Animated glow */
74
+ .art-moon-glow {
75
+ animation: art-moon-pulse 4s ease-in-out infinite;
76
+ }
77
+
78
+ @keyframes art-moon-pulse {
79
+ 0%, 100% {
80
+ box-shadow:
81
+ 0 0 calc(var(--art-moon-size) * 0.25) var(--art-moon-glow),
82
+ 0 0 calc(var(--art-moon-size) * 0.5) var(--art-moon-glow);
83
+ }
84
+ 50% {
85
+ box-shadow:
86
+ 0 0 calc(var(--art-moon-size) * 0.35) var(--art-moon-glow),
87
+ 0 0 calc(var(--art-moon-size) * 0.7) var(--art-moon-glow);
88
+ }
89
+ }
90
+ }
91
+
92
+ @layer css-art {
93
+ .art-sun {
94
+ --art-sun-size: 8rem;
95
+ --art-sun-color: oklch(85% 0.18 85);
96
+ --art-sun-corona: oklch(90% 0.15 75);
97
+ --art-sun-glow: oklch(90% 0.12 80 / 0.4);
98
+
99
+ position: relative;
100
+ width: var(--art-sun-size);
101
+ height: var(--art-sun-size);
102
+ border-radius: 50%;
103
+ background: radial-gradient(
104
+ circle at 40% 40%,
105
+ oklch(95% 0.12 90) 0%,
106
+ var(--art-sun-color) 50%,
107
+ var(--art-sun-corona) 100%
108
+ );
109
+ box-shadow:
110
+ 0 0 calc(var(--art-sun-size) * 0.2) var(--art-sun-glow),
111
+ 0 0 calc(var(--art-sun-size) * 0.5) var(--art-sun-glow),
112
+ 0 0 calc(var(--art-sun-size) * 0.8) oklch(90% 0.1 80 / 0.15);
113
+ }
114
+
115
+ /* Rays using pseudo-elements */
116
+ .art-sun-rays::before,
117
+ .art-sun-rays::after {
118
+ content: '';
119
+ position: absolute;
120
+ top: 50%;
121
+ left: 50%;
122
+ width: 140%;
123
+ height: 140%;
124
+ transform: translate(-50%, -50%);
125
+ border-radius: 50%;
126
+ }
127
+
128
+ .art-sun-rays::before {
129
+ background: repeating-conic-gradient(
130
+ from 0deg,
131
+ oklch(90% 0.14 85 / 0.3) 0deg 5deg,
132
+ transparent 5deg 30deg
133
+ );
134
+ animation: art-sun-rotate 30s linear infinite;
135
+ }
136
+
137
+ .art-sun-rays::after {
138
+ background: repeating-conic-gradient(
139
+ from 15deg,
140
+ oklch(90% 0.14 85 / 0.15) 0deg 3deg,
141
+ transparent 3deg 30deg
142
+ );
143
+ animation: art-sun-rotate 45s linear infinite reverse;
144
+ }
145
+
146
+ @keyframes art-sun-rotate {
147
+ from { transform: translate(-50%, -50%) rotate(0deg); }
148
+ to { transform: translate(-50%, -50%) rotate(360deg); }
149
+ }
150
+
151
+ /* Sunset variant — warmer, redder tones */
152
+ .art-sun-sunset {
153
+ --art-sun-color: oklch(75% 0.2 40);
154
+ --art-sun-corona: oklch(70% 0.22 30);
155
+ --art-sun-glow: oklch(80% 0.18 40 / 0.4);
156
+ }
157
+
158
+ /* Size variants */
159
+ .art-sun-sm {
160
+ --art-sun-size: 4rem;
161
+ }
162
+
163
+ .art-sun-lg {
164
+ --art-sun-size: 12rem;
165
+ }
166
+
167
+ .art-sun-xl {
168
+ --art-sun-size: 16rem;
169
+ }
170
+
171
+ /* Animated pulse */
172
+ .art-sun-pulse {
173
+ animation: art-sun-breathe 3s ease-in-out infinite;
174
+ }
175
+
176
+ @keyframes art-sun-breathe {
177
+ 0%, 100% {
178
+ box-shadow:
179
+ 0 0 calc(var(--art-sun-size) * 0.2) var(--art-sun-glow),
180
+ 0 0 calc(var(--art-sun-size) * 0.5) var(--art-sun-glow),
181
+ 0 0 calc(var(--art-sun-size) * 0.8) oklch(90% 0.1 80 / 0.15);
182
+ }
183
+ 50% {
184
+ box-shadow:
185
+ 0 0 calc(var(--art-sun-size) * 0.3) var(--art-sun-glow),
186
+ 0 0 calc(var(--art-sun-size) * 0.6) var(--art-sun-glow),
187
+ 0 0 calc(var(--art-sun-size) * 1) oklch(90% 0.1 80 / 0.2);
188
+ }
189
+ }
190
+ }
191
+
192
+ @layer css-art {
193
+ .art-mountain {
194
+ --art-mountain-width: 16rem;
195
+ --art-mountain-height: 10rem;
196
+ --art-mountain-color: oklch(45% 0.05 150);
197
+ --art-mountain-shadow: oklch(35% 0.04 150);
198
+ --art-mountain-snow: oklch(97% 0.005 90);
199
+
200
+ position: relative;
201
+ width: var(--art-mountain-width);
202
+ height: var(--art-mountain-height);
203
+ }
204
+
205
+ /* Main peak */
206
+ .art-mountain::before {
207
+ content: '';
208
+ position: absolute;
209
+ bottom: 0;
210
+ left: 50%;
211
+ transform: translateX(-50%);
212
+ width: 0;
213
+ height: 0;
214
+ border-left: calc(var(--art-mountain-width) * 0.45) solid transparent;
215
+ border-right: calc(var(--art-mountain-width) * 0.45) solid transparent;
216
+ border-bottom: var(--art-mountain-height) solid var(--art-mountain-color);
217
+ }
218
+
219
+ /* Snow cap */
220
+ .art-mountain::after {
221
+ content: '';
222
+ position: absolute;
223
+ top: 0;
224
+ left: 50%;
225
+ transform: translateX(-50%);
226
+ width: 0;
227
+ height: 0;
228
+ border-left: calc(var(--art-mountain-width) * 0.1) solid transparent;
229
+ border-right: calc(var(--art-mountain-width) * 0.1) solid transparent;
230
+ border-bottom: calc(var(--art-mountain-height) * 0.25) solid var(--art-mountain-snow);
231
+ z-index: 1;
232
+ }
233
+
234
+ /* Range — multiple peaks */
235
+ .art-mountain-range {
236
+ --art-mountain-width: 24rem;
237
+ --art-mountain-height: 10rem;
238
+
239
+ display: flex;
240
+ align-items: flex-end;
241
+ position: relative;
242
+ width: var(--art-mountain-width);
243
+ height: var(--art-mountain-height);
244
+ }
245
+
246
+ .art-mountain-range::before,
247
+ .art-mountain-range::after {
248
+ content: none;
249
+ }
250
+
251
+ .art-mountain-range .art-peak {
252
+ position: absolute;
253
+ bottom: 0;
254
+ width: 0;
255
+ height: 0;
256
+ }
257
+
258
+ .art-mountain-range .art-peak:nth-child(1) {
259
+ left: 10%;
260
+ border-left: calc(var(--art-mountain-width) * 0.25) solid transparent;
261
+ border-right: calc(var(--art-mountain-width) * 0.25) solid transparent;
262
+ border-bottom: calc(var(--art-mountain-height) * 0.7) solid var(--art-mountain-shadow);
263
+ }
264
+
265
+ .art-mountain-range .art-peak:nth-child(2) {
266
+ left: 30%;
267
+ border-left: calc(var(--art-mountain-width) * 0.3) solid transparent;
268
+ border-right: calc(var(--art-mountain-width) * 0.3) solid transparent;
269
+ border-bottom: var(--art-mountain-height) solid var(--art-mountain-color);
270
+ z-index: 1;
271
+ }
272
+
273
+ .art-mountain-range .art-peak:nth-child(3) {
274
+ right: 5%;
275
+ border-left: calc(var(--art-mountain-width) * 0.22) solid transparent;
276
+ border-right: calc(var(--art-mountain-width) * 0.22) solid transparent;
277
+ border-bottom: calc(var(--art-mountain-height) * 0.6) solid oklch(40% 0.04 150);
278
+ }
279
+
280
+ /* Sunset color variant */
281
+ .art-mountain-sunset {
282
+ --art-mountain-color: oklch(30% 0.06 280);
283
+ --art-mountain-shadow: oklch(22% 0.05 280);
284
+ --art-mountain-snow: oklch(85% 0.08 50);
285
+ }
286
+
287
+ /* Forest color variant */
288
+ .art-mountain-forest {
289
+ --art-mountain-color: oklch(40% 0.08 145);
290
+ --art-mountain-shadow: oklch(30% 0.06 145);
291
+ }
292
+
293
+ /* Size variants */
294
+ .art-mountain-sm {
295
+ --art-mountain-width: 10rem;
296
+ --art-mountain-height: 6rem;
297
+ }
298
+
299
+ .art-mountain-lg {
300
+ --art-mountain-width: 24rem;
301
+ --art-mountain-height: 15rem;
302
+ }
303
+ }
304
+
305
+ @layer css-art {
306
+ .art-atom {
307
+ --art-atom-size: 360px;
308
+ --art-atom-color: #00d8ff;
309
+ --art-atom-nucleus-size: calc(var(--art-atom-size) / 5);
310
+ --art-atom-electron-color: #99f8ff;
311
+ --art-atom-electron-size: calc(var(--art-atom-size) / 25);
312
+ --art-atom-orbit-size: calc(var(--art-atom-size) / 2.5);
313
+ --art-atom-speed: 1.2s;
314
+ --art-atom-speed-alpha: 1s;
315
+ --art-atom-speed-omega: .8s;
316
+
317
+ position: relative;
318
+ width: var(--art-atom-size);
319
+ height: var(--art-atom-size);
320
+ animation: 8s art-atom-rotate infinite cubic-bezier(1, .25, 0, .75);
321
+ box-sizing: border-box;
322
+ overflow: hidden;
323
+
324
+ *, *:before, *::after {
325
+ box-sizing: border-box;
326
+ }
327
+
328
+ /* Nucleus */
329
+ &::before {
330
+ content: '';
331
+ display: block;
332
+ position: absolute;
333
+ top: 50%;
334
+ left: 50%;
335
+ width: var(--art-atom-nucleus-size);
336
+ height: var(--art-atom-nucleus-size);
337
+ margin-top: calc(var(--art-atom-nucleus-size) / -2);
338
+ margin-left: calc(var(--art-atom-nucleus-size) / -2);
339
+ background: color-mix(in srgb, var(--art-atom-color) 70%, transparent);
340
+ border-radius: 100%;
341
+ box-shadow: 0 0 3px 0 color-mix(in srgb, var(--art-atom-color) 70%, transparent);
342
+ animation: 2s art-atom-nucleus infinite cubic-bezier(.65, 0, .35, 1);
343
+ }
344
+
345
+ /* Electron orbits */
346
+ & > [class^="electron"] {
347
+ border-top: solid color-mix(in srgb, var(--art-atom-color) 50%, transparent) 1px;
348
+ border-right: solid color-mix(in srgb, var(--art-atom-color) 35%, transparent) 2px;
349
+ border-bottom: solid color-mix(in srgb, var(--art-atom-color) 20%, transparent) 4px;
350
+ border-left: solid color-mix(in srgb, var(--art-atom-color) 0%, transparent) 2px;
351
+ border-radius: 100%;
352
+ width: 100%;
353
+ height: var(--art-atom-orbit-size);
354
+ position: absolute;
355
+ top: 50%;
356
+ margin-top: calc(var(--art-atom-orbit-size) / -2);
357
+ animation: var(--art-atom-speed) art-atom-electron-orbit infinite linear;
358
+ }
359
+
360
+ & > .electron-alpha {
361
+ transform: rotate(60deg);
362
+ animation: var(--art-atom-speed-alpha) art-atom-electron-orbit infinite linear;
363
+ }
364
+ & > .electron-omega {
365
+ transform: rotate(-60deg);
366
+ animation: var(--art-atom-speed-omega) art-atom-electron-orbit infinite linear;
367
+ }
368
+
369
+ /* Electron particles */
370
+ [class^="electron"]::after {
371
+ content: '';
372
+ display: block;
373
+ width: var(--art-atom-electron-size);
374
+ height: var(--art-atom-electron-size);
375
+ background: var(--art-atom-electron-color);
376
+ border-radius: 50%;
377
+ margin-top: calc(var(--art-atom-electron-size) / -2);
378
+ position: absolute;
379
+ top: 50%;
380
+ left: calc(var(--art-atom-electron-size) / -1);
381
+ transform: scale(1);
382
+ animation: calc(var(--art-atom-speed) * 2) art-atom-electron infinite ease-in-out;
383
+ }
384
+ .electron-alpha::after { animation: calc(var(--art-atom-speed-alpha) * 2) art-atom-electron infinite ease-in-out; }
385
+ .electron-omega::after { animation: calc(var(--art-atom-speed-omega) * 2) art-atom-electron infinite ease-in-out; }
386
+ }
387
+
388
+ /* Size variants */
389
+ .art-atom-sm {
390
+ --art-atom-size: 180px;
391
+ }
392
+
393
+ .art-atom-lg {
394
+ --art-atom-size: 480px;
395
+ }
396
+
397
+ @keyframes art-atom-electron-orbit {
398
+ 0% {
399
+ border-top: solid color-mix(in srgb, var(--art-atom-color) 50%, transparent) 1px;
400
+ border-right: solid color-mix(in srgb, var(--art-atom-color) 35%, transparent) 2px;
401
+ border-bottom: solid color-mix(in srgb, var(--art-atom-color) 20%, transparent) 4px;
402
+ border-left: solid color-mix(in srgb, var(--art-atom-color) 0%, transparent) 2px;
403
+ }
404
+ 25% {
405
+ border-top: solid color-mix(in srgb, var(--art-atom-color) 35%, transparent) 1px;
406
+ border-right: solid color-mix(in srgb, var(--art-atom-color) 20%, transparent) 2px;
407
+ border-bottom: solid color-mix(in srgb, var(--art-atom-color) 0%, transparent) 4px;
408
+ border-left: solid color-mix(in srgb, var(--art-atom-color) 50%, transparent) 2px;
409
+ }
410
+ 50% {
411
+ border-top: solid color-mix(in srgb, var(--art-atom-color) 20%, transparent) 1px;
412
+ border-right: solid color-mix(in srgb, var(--art-atom-color) 0%, transparent) 2px;
413
+ border-bottom: solid color-mix(in srgb, var(--art-atom-color) 50%, transparent) 4px;
414
+ border-left: solid color-mix(in srgb, var(--art-atom-color) 35%, transparent) 2px;
415
+ }
416
+ 75% {
417
+ border-top: solid color-mix(in srgb, var(--art-atom-color) 0%, transparent) 1px;
418
+ border-right: solid color-mix(in srgb, var(--art-atom-color) 50%, transparent) 2px;
419
+ border-bottom: solid color-mix(in srgb, var(--art-atom-color) 35%, transparent) 4px;
420
+ border-left: solid color-mix(in srgb, var(--art-atom-color) 20%, transparent) 2px;
421
+ }
422
+ 100% {
423
+ border-top: solid color-mix(in srgb, var(--art-atom-color) 50%, transparent) 1px;
424
+ border-right: solid color-mix(in srgb, var(--art-atom-color) 35%, transparent) 2px;
425
+ border-bottom: solid color-mix(in srgb, var(--art-atom-color) 20%, transparent) 4px;
426
+ border-left: solid color-mix(in srgb, var(--art-atom-color) 0%, transparent) 2px;
427
+ }
428
+ }
429
+
430
+ @keyframes art-atom-rotate {
431
+ 0% { transform: rotate(0deg) scale(1); }
432
+ 12.5% { transform: rotate(-45deg) scale(.9); }
433
+ 25% { transform: rotate(-90deg) scale(1); }
434
+ 37.5% { transform: rotate(-135deg) scale(.9); }
435
+ 50% { transform: rotate(-180deg) scale(1); }
436
+ 62.5% { transform: rotate(-225deg) scale(.9); }
437
+ 75% { transform: rotate(-270deg) scale(1); }
438
+ 87.5% { transform: rotate(-315deg) scale(.9); }
439
+ 100% { transform: rotate(-360deg) scale(1); }
440
+ }
441
+
442
+ @keyframes art-atom-nucleus {
443
+ 0% { transform: scale(1); }
444
+ 25% { transform: scale(.9); }
445
+ 50% { transform: scale(1); }
446
+ 75% { transform: scale(.85); }
447
+ 100% { transform: scale(1); }
448
+ }
449
+
450
+ @keyframes art-atom-electron {
451
+ 0% {
452
+ left: calc(var(--art-atom-electron-size) / -1);
453
+ transform: scale(1);
454
+ }
455
+ 12.5% {
456
+ top: 100%;
457
+ transform: scale(1.5);
458
+ }
459
+ 25% {
460
+ left: 100%;
461
+ transform: scale(1);
462
+ }
463
+ 37.5% {
464
+ top: 0%;
465
+ transform: scale(.25);
466
+ }
467
+ 50% {
468
+ left: calc(var(--art-atom-electron-size) / -1);
469
+ transform: scale(1);
470
+ }
471
+ 62.5% {
472
+ top: 100%;
473
+ transform: scale(1.5);
474
+ }
475
+ 75% {
476
+ left: 100%;
477
+ transform: scale(1);
478
+ }
479
+ 87.5% {
480
+ top: 0%;
481
+ transform: scale(.25);
482
+ }
483
+ 100% {
484
+ left: calc(var(--art-atom-electron-size) / -1);
485
+ transform: scale(1);
486
+ }
487
+ }
488
+ }
489
+
490
+ @layer css-art {
491
+ .art-eclipse {
492
+ --art-eclipse-bg: #09090b;
493
+ --art-eclipse-size: 600px;
494
+
495
+ width: var(--art-eclipse-size);
496
+ height: var(--art-eclipse-size);
497
+ position: relative;
498
+ overflow: hidden;
499
+
500
+ .layer {
501
+ position: absolute;
502
+ inset: 0;
503
+ }
504
+
505
+ .layer-1 {
506
+ animation: 30s linear art-eclipse-rotate infinite;
507
+ transform-origin: 66% 40%;
508
+ background:
509
+ repeating-conic-gradient(from 0deg at 50% 50%, rgba(255,255,255,0) 0%, rgba(255,248,176,0.46) 3.96%, rgba(69,168,255,0) 8.33%, rgba(69,168,255,0) 8.33%) 69.5% 37.7% / 17.2% 17.2% no-repeat,
510
+ radial-gradient(ellipse at 50% 50%, rgba(255,248,176,1) 0%, rgba(69,168,255,0) 47.22%) 74.1% 35.6% / 33.6% 36.6% no-repeat;
511
+ }
512
+
513
+ .layer-2 {
514
+ animation: 20s linear art-eclipse-rotate infinite reverse;
515
+ transform-origin: 66% 40%;
516
+ background:
517
+ radial-gradient(ellipse at 50% 50%, rgba(69,168,255,0) 20%, var(--art-eclipse-bg) 29%) 77.4% 33.8% / 40% 40% no-repeat,
518
+ repeating-conic-gradient(from 15deg at 50% 50%, rgba(255,255,255,0) 0%, rgba(255,248,176,0.51) 2.64%, rgba(69,168,255,0) 5.56%, rgba(69,168,255,0) 5.56%) 69.5% 37.7% / 17.2% 17.2% no-repeat;
519
+ }
520
+
521
+ .layer-3 {
522
+ animation: 20s linear art-eclipse-rotate infinite;
523
+ background:
524
+ repeating-conic-gradient(from 355deg at 50% 50%, rgba(255,255,255,0) 0%, rgba(255,198,69,0.26) 8.1%, rgba(69,168,255,0) 16.67%, rgba(69,168,255,0) 16.67%) 0 0 / 100% 100% no-repeat;
525
+ }
526
+
527
+ .layer-4 {
528
+ animation: 40s linear art-eclipse-rotate infinite reverse;
529
+ background:
530
+ repeating-conic-gradient(from 355deg at 50% 50%, rgba(255,255,255,0) 0%, rgba(255,198,69,0.26) 2.86%, rgba(69,168,255,0) 5.88%, rgba(69,168,255,0) 5.88%) 0% 0% / 100% 100% no-repeat;
531
+ }
532
+
533
+ .layer-5 {
534
+ animation: 40s linear art-eclipse-rotate infinite;
535
+ background:
536
+ repeating-conic-gradient(from 0deg at 50% 50%, rgba(255,255,255,0) 0%, rgba(255,198,69,0.26) 6.62%, rgba(69,168,255,0) 7.69%, rgba(69,168,255,0) 7.69%) 0% 0% / 100% 100% no-repeat;
537
+ }
538
+
539
+ .layer-6 {
540
+ background:
541
+ radial-gradient(ellipse at 50% 50%, rgba(255,248,176,0.27) 0%, rgba(69,168,255,0) 63.54%) 67% 39.3% / 5.8% 5.8% no-repeat,
542
+ radial-gradient(ellipse at 50% 50%, rgba(69,168,255,0) 40.28%, rgba(255,183,163,0.05) 52.43%, rgba(69,168,255,0) 63.54%) 68% 38.6% / 13% 13% no-repeat,
543
+ radial-gradient(ellipse at 50% 50%, rgba(255,248,176,0.55) 0%, rgba(69,168,255,0) 63.54%) 66.9% 39.3% / 3.4% 3.4% no-repeat,
544
+ radial-gradient(ellipse at 50% 50%, rgba(255,248,176,0.2) 0%, rgba(69,168,255,0) 66.67%) 70.7% 36.5% / 25.6% 25.6% no-repeat,
545
+ radial-gradient(ellipse at 50% 50%, var(--art-eclipse-bg) 26%, rgba(69,168,255,0) 26.4%) 0% 0% / 100% 100% no-repeat,
546
+ radial-gradient(ellipse at 50% 50%, rgba(255,212,148,0.04) 0%, rgba(69,168,255,0) 69.79%) 0% 0% / 100% 100% no-repeat,
547
+ radial-gradient(ellipse at 50% 50%, rgba(255,240,148,0.11) 0%, rgba(69,168,255,0) 52.43%) 0% 0% / 100% 100% no-repeat,
548
+ radial-gradient(ellipse at 51% 49%, rgba(69,168,255,0) 23.96%, var(--art-eclipse-bg) 40.63%) 0% 0% / 100% 100% no-repeat,
549
+ repeating-conic-gradient(from 0deg at 50% 50%, rgba(255,255,255,0) 0%, rgba(255,239,69,0.14) 11.04%, rgba(69,168,255,0) 20%, rgba(69,168,255,0) 20%) 0% 0% / 100% 100% no-repeat,
550
+ radial-gradient(ellipse at 52% 48%, rgba(69,168,255,0) 23.96%, var(--art-eclipse-bg) 34.03%) 0% 0% / 100% 100% no-repeat,
551
+ radial-gradient(ellipse at 50% 50%, rgba(255,185,147,0.29) 28%, rgba(69,168,255,0) 30%) 0% 0% / 100% 100% no-repeat;
552
+ }
553
+ }
554
+
555
+ /* Size variants */
556
+ .art-eclipse-sm {
557
+ --art-eclipse-size: 300px;
558
+ }
559
+
560
+ .art-eclipse-lg {
561
+ --art-eclipse-size: 800px;
562
+ }
563
+
564
+ @keyframes art-eclipse-rotate {
565
+ from { transform: rotate(0deg); }
566
+ to { transform: rotate(360deg); }
567
+ }
568
+ }
569
+
570
+ @layer css-art {
571
+ .art-plasma-ball {
572
+ --art-plasma-ball-size: 350px;
573
+ --art-plasma-ball-base-color: #222222;
574
+ --art-plasma-ball-switch-size: calc(var(--art-plasma-ball-size) * 37 / 350);
575
+ position: relative;
576
+ margin: 0 auto;
577
+ width: var(--art-plasma-ball-size);
578
+ height: var(--art-plasma-ball-size);
579
+ box-sizing: border-box;
580
+
581
+ * {
582
+ box-sizing: border-box;
583
+ }
584
+
585
+ .base {
586
+ position: absolute;
587
+ background: var(--art-plasma-ball-base-color);
588
+ width: calc(var(--art-plasma-ball-size) * 6 / 7);
589
+ height: calc(var(--art-plasma-ball-size) * 4 / 7);
590
+ margin: calc(var(--art-plasma-ball-size) * 48 / 350) auto;
591
+ top: calc(var(--art-plasma-ball-size) * 286 / 350);
592
+ left: calc(var(--art-plasma-ball-size) * 25 / 350);
593
+ }
594
+ .base:before {
595
+ position: absolute;
596
+ top: calc(var(--art-plasma-ball-size) * -44 / 350);
597
+ width: calc(var(--art-plasma-ball-size) * 300 / 350);
598
+ height: calc(var(--art-plasma-ball-size) * 80 / 350);
599
+ border-radius: 100%;
600
+ content: "";
601
+ background: radial-gradient(#222 20%, #353535);
602
+ background: conic-gradient(from 167deg, #666666, #232323, #232323, #666666);
603
+ border: 2px solid #597481;
604
+ box-sizing: border-box;
605
+ left: 0;
606
+ z-index: 0;
607
+ }
608
+ .base:after {
609
+ position: absolute;
610
+ left: calc(var(--art-plasma-ball-size) * -35 / 350);
611
+ bottom: calc(var(--art-plasma-ball-size) * -65 / 350);
612
+ width: calc(var(--art-plasma-ball-size) * 370 / 350);
613
+ height: calc(var(--art-plasma-ball-size) * 110 / 350);
614
+ border-radius: 30% 30% 50% 50%;
615
+ content: "";
616
+ background: var(--art-plasma-ball-base-color);
617
+ z-index: -1;
618
+ }
619
+ .base div {
620
+ background: var(--art-plasma-ball-base-color);
621
+ height: calc(var(--art-plasma-ball-size) * 100 / 350);
622
+ margin-top: calc(var(--art-plasma-ball-size) * 48 / 350);
623
+ float: left;
624
+ margin-left: calc(var(--art-plasma-ball-size) * -53 / 350);
625
+ width: 63%;
626
+ transform: rotate(-85deg);
627
+ z-index: -1;
628
+ position: relative;
629
+ }
630
+ .base div + div {
631
+ margin-top: calc(var(--art-plasma-ball-size) * -99 / 350);
632
+ margin-left: calc(var(--art-plasma-ball-size) * 164 / 350);
633
+ transform: rotate(85deg);
634
+ }
635
+ .base span {
636
+ position: absolute;
637
+ left: calc(var(--art-plasma-ball-size) * -51 / 350);
638
+ bottom: calc(var(--art-plasma-ball-size) * -4 / 350);
639
+ width: calc(var(--art-plasma-ball-size) * 402 / 350);
640
+ height: calc(var(--art-plasma-ball-size) * 160 / 350);
641
+ border-radius: 0% 0% 80% 80%;
642
+ content: "";
643
+ background: #242f3400;
644
+ z-index: 0;
645
+ border: 2px solid transparent;
646
+ border-bottom-color: #435761;
647
+ }
648
+ input.switcher {
649
+ width: calc(var(--art-plasma-ball-size) * 48 / 350);
650
+ height: calc(var(--art-plasma-ball-size) * 48 / 350);
651
+ opacity: 0;
652
+ position: absolute;
653
+ z-index: 3333;
654
+ margin: 0;
655
+ cursor: pointer;
656
+ outline: none;
657
+ border-radius: calc(var(--art-plasma-ball-size) * 50 / 350) !important;
658
+ top: calc(var(--art-plasma-ball-size) * 425 / 350);
659
+ left: calc(var(--art-plasma-ball-size) * 151 / 350);
660
+ }
661
+ .glassball {
662
+ position: relative;
663
+ overflow: hidden;
664
+ margin: 0 auto;
665
+ width: 100%;
666
+ height: 100%;
667
+ border-radius: 100%;
668
+ background-color: rgb(255 255 255 / 0.15);
669
+ top: 0%;
670
+ box-shadow: 0 20px 30px rgba(0, 0, 0, 0.2),
671
+ inset 0px 10px 30px 5px rgba(255, 255, 255, 1);
672
+ position: absolute;
673
+ }
674
+ .glassball:after {
675
+ background: radial-gradient(
676
+ ellipse at center,
677
+ rgba(255, 255, 255, 0.5) 0%,
678
+ rgba(255, 255, 255, 0) 70%
679
+ );
680
+ border-radius: 50%;
681
+ box-shadow: inset 0 20px 30px rgb(255 255 255 / 30%);
682
+ content: "";
683
+ height: 96%;
684
+ left: 2%;
685
+ position: absolute;
686
+ width: 96%;
687
+ top: 2%;
688
+ z-index: 1;
689
+ }
690
+ .glassball:hover {
691
+ cursor: grab;
692
+ }
693
+ .glassball:before {
694
+ position: absolute;
695
+ left: 48%;
696
+ top: 50%;
697
+ width: 0px;
698
+ height: 0px;
699
+ background: radial-gradient(circle closest-side, #9c27b0, transparent);
700
+ transform: translate(-45%, -48%);
701
+ transition: width 0.2s ease, height 0.2s ease;
702
+ animation: art-plasma-ball-spark 5ms ease 0s infinite alternate;
703
+ border: 8px dotted #24e6ff;
704
+ filter: blur(15px);
705
+ border-radius: 100%;
706
+ z-index: 2;
707
+ font-size: 10em;
708
+ color: #d6faff;
709
+ text-align: center;
710
+ line-height: 1;
711
+ content: "s";
712
+ display: none;
713
+ opacity: 0.75;
714
+ }
715
+ .glassball:hover:before {
716
+ width: calc(var(--art-plasma-ball-size) * 120 / 350);
717
+ height: calc(var(--art-plasma-ball-size) * 150 / 350);
718
+ }
719
+ input.switcher:checked + .glassball:before,
720
+ input.switcher:checked + .glassball:after {
721
+ display: block;
722
+ }
723
+ input.switcher:checked + .glassball:after {
724
+ width: 97%;
725
+ height: 97%;
726
+ left: 1.5%;
727
+ top: 1.5%;
728
+ }
729
+ input.switcher:checked + .glassball:hover:after {
730
+ animation: art-plasma-ball-rotation 3s ease 0s infinite alternate;
731
+ background: radial-gradient(
732
+ ellipse at center,
733
+ #ffffff7d 0%,
734
+ #54ecff94 10%,
735
+ transparent 100%
736
+ );
737
+ filter: brightness(1.75);
738
+ opacity: 0.5;
739
+ }
740
+ input.switcher:checked + .glassball {
741
+ transform: translate3d(0, 0, 0);
742
+ backface-visibility: hidden;
743
+ perspective: calc(var(--art-plasma-ball-size) * 1000 / 350);
744
+ background: radial-gradient(
745
+ circle,
746
+ #ff5affb8 0%,
747
+ #ff5affb8 20%,
748
+ #5493d2a8 70%,
749
+ #5493d2a8 100%
750
+ );
751
+ animation: art-plasma-ball-innerlight 5s linear 0s infinite,
752
+ art-plasma-ball-shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
753
+ transition: background 0.4s ease 0s;
754
+ box-shadow: 0 0 15px 5px #5493d2a8;
755
+ border: 1px solid transparent;
756
+ }
757
+
758
+ .switch {
759
+ background: #1b1b1b;
760
+ width: var(--art-plasma-ball-switch-size);
761
+ height: var(--art-plasma-ball-switch-size);
762
+ position: absolute;
763
+ left: calc(50% - var(--art-plasma-ball-switch-size) / 2);
764
+ top: calc(var(--art-plasma-ball-size) * 430 / 350);
765
+ border: 3px solid #4e4e4e;
766
+ z-index: 5;
767
+ border-radius: 100%;
768
+ box-shadow: 0 0 10px 0px #000000, 0 0 5px 1px #2d2d2d, 0 0 3px 1px #000 inset;
769
+ }
770
+ .switch::before {
771
+ content: "";
772
+ position: absolute;
773
+ width: calc(var(--art-plasma-ball-switch-size) * 16 / 37);
774
+ height: calc(var(--art-plasma-ball-switch-size) * 16 / 37);
775
+ bottom: calc(var(--art-plasma-ball-switch-size) * 6 / 37);
776
+ border: calc(var(--art-plasma-ball-switch-size) * 3 / 37) solid #4e4e4e;
777
+ border-top-color: transparent;
778
+ border-radius: 100%;
779
+ left: calc(var(--art-plasma-ball-switch-size) * 5.5 / 37);
780
+ }
781
+ .switch::after {
782
+ content: "";
783
+ position: absolute;
784
+ width: calc(var(--art-plasma-ball-switch-size) * 3 / 37);
785
+ height: calc(var(--art-plasma-ball-switch-size) * 9 / 37);
786
+ bottom: calc(var(--art-plasma-ball-switch-size) * 14 / 37);
787
+ left: calc(var(--art-plasma-ball-switch-size) * 11.5 / 37);
788
+ background: #4e4e4e;
789
+ }
790
+ input:checked + div + div + .switch {
791
+ background: linear-gradient(to bottom, #171717, #404040);
792
+ color: #fff;
793
+ box-shadow: 0 0 10px 0px #03a9f4, 0 0 5px 1px #03a9f4;
794
+ border-color: #222222d1;
795
+ }
796
+ input:checked + div + div + .switch:before {
797
+ border-color: transparent #03a9f4 #03a9f4 #03a9f4;
798
+ }
799
+ input:checked + div + div + .switch:after {
800
+ background: #03a9f4;
801
+ }
802
+ .electrode {
803
+ width: calc(var(--art-plasma-ball-size) * 16 / 350);
804
+ height: calc(var(--art-plasma-ball-size) * 140 / 350);
805
+ bottom: calc(var(--art-plasma-ball-size) * 20 / 350);
806
+ left: calc(50% - 0.5em);
807
+ position: absolute;
808
+ overflow: visible;
809
+ }
810
+ .electrode:not(.hide-electrode) {
811
+ background: linear-gradient(75deg, #3a3a3a 20%, #2d2d2d);
812
+ border-bottom: 1px solid #657882;
813
+ border-radius: 0 0 6px 5px;
814
+ }
815
+ .electrode:before {
816
+ position: absolute;
817
+ left: calc(var(--art-plasma-ball-size) * -16 / 350);
818
+ top: calc(var(--art-plasma-ball-size) * -40 / 350);
819
+ width: calc(var(--art-plasma-ball-size) * 48 / 350);
820
+ height: calc(var(--art-plasma-ball-size) * 48 / 350);
821
+ border-radius: 100%;
822
+ content: "";
823
+ background: radial-gradient(at top left, #4a4949 20%, #2d2d2d);
824
+ border: 1px solid #758e99;
825
+ box-sizing: border-box;
826
+ }
827
+ .electrode:not(.hide-electrode):after {
828
+ position: absolute;
829
+ left: calc(var(--art-plasma-ball-size) * -3 / 350);
830
+ bottom: calc(var(--art-plasma-ball-size) * -11 / 350);
831
+ width: calc(var(--art-plasma-ball-size) * 22 / 350);
832
+ height: calc(var(--art-plasma-ball-size) * 16 / 350);
833
+ border-radius: calc(var(--art-plasma-ball-size) * 140 / 350) / calc(var(--art-plasma-ball-size) * 50 / 350);
834
+ content: "";
835
+ background: linear-gradient(-263deg, #191919 20%, #0a0a0a);
836
+ z-index: -1;
837
+ }
838
+ input.switcher:checked + .glassball .electrode:after {
839
+ background: linear-gradient(-263deg, #3a3a3a 20%, #2d2d2d);
840
+ }
841
+ input.switcher:checked + .glassball .electrode:before {
842
+ background: radial-gradient(
843
+ ellipse farthest-corner at calc(var(--art-plasma-ball-size) * 30 / 350) calc(var(--art-plasma-ball-size) * 30 / 350),
844
+ #999,
845
+ #e449ff,
846
+ #e449ff,
847
+ #9763ff,
848
+ #62edff,
849
+ #fff
850
+ );
851
+ box-shadow: 0 0 10px 2px #e449ffb3, 0 0 10px 2px #fff,
852
+ 0 0 50px -10px #fff inset;
853
+ border-color: #ffffff94;
854
+ }
855
+ input.switcher + .glassball .rays {
856
+ display: none;
857
+ }
858
+ input.switcher:checked + .glassball .rays {
859
+ display: block;
860
+ float: left;
861
+ width: 100%;
862
+ height: 100%;
863
+ position: absolute;
864
+ }
865
+ .ray {
866
+ width: calc(var(--art-plasma-ball-size) * 160 / 350);
867
+ height: calc(var(--art-plasma-ball-size) * 32 / 350);
868
+ position: absolute;
869
+ bottom: calc(var(--art-plasma-ball-size) * 144 / 350);
870
+ filter: drop-shadow(0px 0px 7px #9660f7) drop-shadow(0px 0px 2px #fff);
871
+ }
872
+ .ray:before {
873
+ content: "";
874
+ width: calc(var(--art-plasma-ball-size) * 8 / 350);
875
+ height: calc(var(--art-plasma-ball-size) * 7.2 / 350);
876
+ border: 2px dashed #03a9f4;
877
+ position: absolute;
878
+ border-width: 3px 3px 1px 1px;
879
+ transform: rotate(87deg);
880
+ top: calc(var(--art-plasma-ball-size) * 4.8 / 350);
881
+ left: calc(var(--art-plasma-ball-size) * 3 / 350);
882
+ border-radius: 10px 5px 8px 7px;
883
+ filter: blur(2px);
884
+ box-shadow: 0 0 10px -1px black;
885
+ }
886
+ .ray:after {
887
+ content: "s";
888
+ float: left;
889
+ width: calc(var(--art-plasma-ball-size) * 32 / 350);
890
+ height: calc(var(--art-plasma-ball-size) * 96 / 350);
891
+ margin-top: calc(var(--art-plasma-ball-size) * 20 / 350);
892
+ margin-left: 0px;
893
+ animation: art-plasma-ball-blink 1s linear 0s infinite alternate;
894
+ background: radial-gradient(circle closest-side, #9c27b0, transparent);
895
+ transform: translate(-45%, -48%);
896
+ transition: width 0.2s ease, height 0.2s ease;
897
+ border: calc(var(--art-plasma-ball-size) * 8 / 350) dotted #24e6ff;
898
+ filter: blur(5px);
899
+ border-radius: 100%;
900
+ z-index: 2;
901
+ font-size: calc(var(--art-plasma-ball-size) * 64 / 350);
902
+ color: #d6faff;
903
+ text-align: center;
904
+ line-height: 1;
905
+ }
906
+ .ray span {
907
+ width: calc(var(--art-plasma-ball-size) * 64 / 350);
908
+ height: calc(var(--art-plasma-ball-size) * 16 / 350);
909
+ border: solid calc(var(--art-plasma-ball-size) * 4 / 350) #000;
910
+ border-radius: 238%/50px 50px 0 0;
911
+ position: absolute;
912
+ top: calc(var(--art-plasma-ball-size) * 8 / 350);
913
+ left: 0;
914
+ border-color: #6bbdff transparent transparent transparent;
915
+ }
916
+
917
+ .ray span + span {
918
+ left: 30%;
919
+ transform: rotate(180deg);
920
+ top: calc(var(--art-plasma-ball-size) * 2.4 / 350);
921
+ }
922
+ .ray span + span + span {
923
+ left: 60%;
924
+ transform: rotate(0deg);
925
+ top: calc(var(--art-plasma-ball-size) * 8 / 350);
926
+ }
927
+
928
+ .ray span:last-of-type:before {
929
+ content: "";
930
+ float: right;
931
+ width: calc(var(--art-plasma-ball-size) * 8 / 350);
932
+ height: calc(var(--art-plasma-ball-size) * 8 / 350);
933
+ background: #d1eefb;
934
+ border-radius: 100%;
935
+ box-shadow: 0 0 4px 3px #fff;
936
+ filter: blur(1px);
937
+ margin-top: calc(var(--art-plasma-ball-size) * -2 / 350);
938
+ left: calc(var(--art-plasma-ball-size) * 3 / 350);
939
+ position: relative;
940
+ }
941
+ .ray.bigwave span:last-of-type:before {
942
+ content: "";
943
+ float: left;
944
+ width: calc(var(--art-plasma-ball-size) * 8 / 350);
945
+ height: calc(var(--art-plasma-ball-size) * 8 / 350);
946
+ background: #d1eefb;
947
+ border-radius: 100%;
948
+ box-shadow: 0 0 4px 3px #fff;
949
+ filter: blur(1px);
950
+ margin-top: calc(var(--art-plasma-ball-size) * -3 / 350);
951
+ left: calc(var(--art-plasma-ball-size) * -2 / 350);
952
+ position: relative;
953
+ }
954
+ .ray.bigwave span {
955
+ width: 55%;
956
+ border-width: calc(var(--art-plasma-ball-size) * 4 / 350);
957
+ }
958
+ .ray.bigwave span + span {
959
+ width: 60%;
960
+ left: 40%;
961
+ border-width: calc(var(--art-plasma-ball-size) * 5 / 350);
962
+ margin-left: calc(var(--art-plasma-ball-size) * 4 / 350);
963
+ margin-top: calc(var(--art-plasma-ball-size) * 2 / 350);
964
+ }
965
+
966
+ .rays + .rays {
967
+ transform: rotate(180deg);
968
+ }
969
+ .rays + .rays + .rays {
970
+ transform: rotate(90deg);
971
+ }
972
+ .rays + .rays + .rays + .rays {
973
+ transform: rotate(270deg);
974
+ }
975
+ .rays + .rays + .rays + .rays + .rays {
976
+ transform: skew(-187deg, 0deg) scale(0.675) rotate(0deg);
977
+ display: none;
978
+ animation: art-plasma-ball-touchray1 2.5s ease 0.1s infinite alternate;
979
+ }
980
+ .rays + .rays + .rays + .rays + .rays + .rays {
981
+ transform: skew(-140deg, -40deg) scale(0.675) rotate(180deg);
982
+ display: none;
983
+ animation: art-plasma-ball-touchray2 1s ease 0.25s infinite;
984
+ }
985
+ input.switcher:checked
986
+ + .glassball:hover
987
+ .rays
988
+ + .rays
989
+ + .rays
990
+ + .rays
991
+ + .rays {
992
+ display: block;
993
+ }
994
+
995
+ .rays + .rays + .rays + .rays + .rays .ray {
996
+ width: calc(var(--art-plasma-ball-size) * 136 / 350);
997
+ animation: art-plasma-ball-ray1 0.5s linear 0s infinite alternate;
998
+ }
999
+ .rays + .rays + .rays + .rays + .rays .ray span {
1000
+ border-top-width: calc(var(--art-plasma-ball-size) * 8 / 350);
1001
+ }
1002
+
1003
+ .ray:nth-of-type(1) {
1004
+ animation: art-plasma-ball-ray1 0.5s linear 0s infinite;
1005
+ }
1006
+ .ray:nth-of-type(2) {
1007
+ animation: art-plasma-ball-ray1 0.75s linear 0s infinite alternate;
1008
+ }
1009
+ .ray:nth-of-type(3) {
1010
+ animation: art-plasma-ball-ray1 0.65s linear 0s infinite reverse;
1011
+ }
1012
+ .ray:nth-of-type(4) {
1013
+ animation: art-plasma-ball-ray1 0.95s linear 0s infinite alternate;
1014
+ }
1015
+ .ray:nth-of-type(5) {
1016
+ animation: art-plasma-ball-ray1 0.85s linear 0s infinite reverse;
1017
+ }
1018
+
1019
+ .rays + .rays .ray:nth-of-type(1) {
1020
+ animation-duration: 1.55s;
1021
+ }
1022
+ .rays + .rays .ray:nth-of-type(2) {
1023
+ animation-duration: 1.75s;
1024
+ }
1025
+ .rays + .rays .ray:nth-of-type(3) {
1026
+ animation-duration: 0.65s;
1027
+ }
1028
+ .rays + .rays .ray:nth-of-type(4) {
1029
+ animation-duration: 1.85s;
1030
+ }
1031
+ .rays + .rays .ray:nth-of-type(5) {
1032
+ animation-duration: 1.6s;
1033
+ }
1034
+
1035
+ .rays + .rays + .rays .ray:nth-of-type(1) {
1036
+ animation-duration: 1.15s;
1037
+ }
1038
+ .rays + .rays + .rays .ray:nth-of-type(2) {
1039
+ animation-duration: 1.5s;
1040
+ }
1041
+ .rays + .rays + .rays .ray:nth-of-type(3) {
1042
+ animation-duration: 1.35s;
1043
+ }
1044
+ .rays + .rays + .rays .ray:nth-of-type(4) {
1045
+ animation-duration: 1s;
1046
+ }
1047
+ .rays + .rays + .rays .ray:nth-of-type(5) {
1048
+ animation-duration: 1.25s;
1049
+ }
1050
+
1051
+ .rays + .rays + .rays + .rays .ray:nth-of-type(1) {
1052
+ animation-duration: 1.05s;
1053
+ }
1054
+ .rays + .rays + .rays + .rays .ray:nth-of-type(2) {
1055
+ animation-duration: 1.35s;
1056
+ }
1057
+ .rays + .rays + .rays + .rays .ray:nth-of-type(3) {
1058
+ animation-duration: 1.25s;
1059
+ }
1060
+ .rays + .rays + .rays + .rays .ray:nth-of-type(4) {
1061
+ animation-duration: 1.15s;
1062
+ }
1063
+ .rays + .rays + .rays + .rays .ray:nth-of-type(5) {
1064
+ animation-duration: 1.45s;
1065
+ }
1066
+
1067
+ .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(1) {
1068
+ animation-duration: 0.85s;
1069
+ }
1070
+ .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(2) {
1071
+ animation-duration: 0.95s;
1072
+ }
1073
+ .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(3) {
1074
+ animation-duration: 0.75s;
1075
+ }
1076
+
1077
+ .rays + .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(1) {
1078
+ animation-duration: 1.1s;
1079
+ }
1080
+ .rays + .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(2) {
1081
+ animation-duration: 1.25s;
1082
+ }
1083
+ .rays + .rays + .rays + .rays + .rays + .rays .ray:nth-of-type(3) {
1084
+ animation-duration: 1.35s;
1085
+ }
1086
+ }
1087
+
1088
+ /* Size variants */
1089
+ .art-plasma-ball-sm {
1090
+ --art-plasma-ball-size: 200px;
1091
+ }
1092
+
1093
+ .art-plasma-ball-lg {
1094
+ --art-plasma-ball-size: 500px;
1095
+ }
1096
+
1097
+ @keyframes art-plasma-ball-rotation {
1098
+ 50% {
1099
+ transform: rotate(360deg);
1100
+ }
1101
+ }
1102
+ @keyframes art-plasma-ball-blink {
1103
+ 0% {
1104
+ background: radial-gradient(circle closest-side, #ff5affb8, #5493d2a8);
1105
+ transform: translate(-50%, -50%) scale(0.75) rotate(6deg);
1106
+ }
1107
+ 50% {
1108
+ background: radial-gradient(circle closest-side, #5493d2a8, #ff5affb8);
1109
+ transform: translate(-50%, -50%) scale(0.5) rotate(2deg);
1110
+ }
1111
+ 100% {
1112
+ background: radial-gradient(circle closest-side, #ffffffa8, #5493d2a8);
1113
+ transform: translate(-50%, -50%) scale(0.35) rotate(11deg);
1114
+ }
1115
+ }
1116
+ @keyframes art-plasma-ball-innerlight {
1117
+ 0% {
1118
+ background-size: 105% 105%;
1119
+ background-position: center center;
1120
+ box-shadow: 0 0 15px 5px #5493d2a8;
1121
+ }
1122
+ 25% {
1123
+ box-shadow: 0 0 15px 5px #ff5aff30;
1124
+ }
1125
+ 50% {
1126
+ background-size: 85% 85%;
1127
+ background-position: center center;
1128
+ box-shadow: 0 0 15px 5px #5493d2a8;
1129
+ }
1130
+ 75% {
1131
+ box-shadow: 0 0 15px 5px #ff5aff30;
1132
+ }
1133
+ 100% {
1134
+ background-size: 105% 105%;
1135
+ background-position: center center;
1136
+ box-shadow: 0 0 15px 5px #5493d2a8;
1137
+ }
1138
+ }
1139
+ @keyframes art-plasma-ball-touchray1 {
1140
+ 0% {
1141
+ transform: skew(-187deg, 0deg) scale(0.675) rotate(0deg);
1142
+ }
1143
+ 50% {
1144
+ transform: skew(-185deg, 2deg) scale(0.525) rotate(180deg);
1145
+ opacity: 1;
1146
+ }
1147
+ 51% {
1148
+ opacity: 0;
1149
+ }
1150
+ 52% {
1151
+ opacity: 1;
1152
+ }
1153
+ 100% {
1154
+ transform: skew(-188deg, -2deg) scale(0.625) rotate(360deg);
1155
+ }
1156
+ }
1157
+ @keyframes art-plasma-ball-touchray2 {
1158
+ 0% {
1159
+ transform: skew(-140deg, -40deg) scale(0.675) rotate(140deg);
1160
+ }
1161
+ 50% {
1162
+ transform: skew(-143deg, -42deg) scale(0.525) rotate(0deg);
1163
+ opacity: 1;
1164
+ }
1165
+ 51% {
1166
+ opacity: 0;
1167
+ }
1168
+ 52% {
1169
+ opacity: 1;
1170
+ }
1171
+ 100% {
1172
+ transform: skew(-145deg, -38deg) scale(0.625) rotate(210deg);
1173
+ }
1174
+ }
1175
+ @keyframes art-plasma-ball-spark {
1176
+ 0% {
1177
+ background: radial-gradient(circle closest-side, #ff5affb8, #5493d2a8);
1178
+ transform: translate(-50%, -50%) scale(0.75) rotate(0deg);
1179
+ }
1180
+ 50% {
1181
+ background: radial-gradient(circle closest-side, #5493d2a8, #ff5affb8);
1182
+ transform: translate(-50%, -50%) scale(0.5) rotate(180deg);
1183
+ }
1184
+ 100% {
1185
+ background: radial-gradient(circle closest-side, #ffffffa8, #5493d2a8);
1186
+ transform: translate(-50%, -50%) scale(1) rotate(360deg);
1187
+ }
1188
+ }
1189
+ @keyframes art-plasma-ball-ray1 {
1190
+ 0% {
1191
+ opacity: 0;
1192
+ transform: rotate(0deg) translate(0px, 0px);
1193
+ }
1194
+ 12% {
1195
+ opacity: 1;
1196
+ transform: rotate(22deg) translate(0px, calc(var(--art-plasma-ball-size) * -35 / 350));
1197
+ filter: brightness(1.75);
1198
+ }
1199
+ 25% {
1200
+ opacity: 0;
1201
+ transform: rotate(45deg) translate(calc(var(--art-plasma-ball-size) * -33 / 350), calc(var(--art-plasma-ball-size) * -69 / 350));
1202
+ }
1203
+ 37% {
1204
+ opacity: 1;
1205
+ transform: rotate(67deg) translate(calc(var(--art-plasma-ball-size) * -64 / 350), calc(var(--art-plasma-ball-size) * -86 / 350));
1206
+ filter: brightness(1.15);
1207
+ }
1208
+ 50% {
1209
+ opacity: 0;
1210
+ transform: rotate(90deg) translate(calc(var(--art-plasma-ball-size) * -108 / 350), calc(var(--art-plasma-ball-size) * -93 / 350));
1211
+ }
1212
+ 62% {
1213
+ opacity: 1;
1214
+ transform: rotate(112deg) translate(calc(var(--art-plasma-ball-size) * -140 / 350), calc(var(--art-plasma-ball-size) * -90 / 350));
1215
+ filter: brightness(1.25);
1216
+ }
1217
+ 75% {
1218
+ opacity: 0;
1219
+ transform: rotate(135deg) translate(calc(var(--art-plasma-ball-size) * -169 / 350), calc(var(--art-plasma-ball-size) * -69 / 350));
1220
+ }
1221
+ 87% {
1222
+ opacity: 1;
1223
+ transform: rotate(157deg) translate(calc(var(--art-plasma-ball-size) * -185 / 350), calc(var(--art-plasma-ball-size) * -36 / 350));
1224
+ filter: brightness(1.75);
1225
+ }
1226
+ 100% {
1227
+ opacity: 0;
1228
+ transform: rotate(180deg) translate(calc(var(--art-plasma-ball-size) * -192 / 350), calc(var(--art-plasma-ball-size) * 6 / 350));
1229
+ }
1230
+ }
1231
+ }
1232
+
1233
+ @layer css-art {
1234
+ .art-snowflake {
1235
+ position: absolute;
1236
+ width: var(--art-snowflake-size, 10px);
1237
+ height: var(--art-snowflake-size, 10px);
1238
+ border-radius: 50%;
1239
+ pointer-events: none;
1240
+
1241
+ &:not(.art-snowflake-unicode) {
1242
+ background: var(--art-snowflake-color, #FFFFFF);
1243
+ filter: drop-shadow(0 0 var(--art-snowflake-size, 10px) var(--art-snowflake-color, #FFFFFF));
1244
+ }
1245
+ }
1246
+
1247
+ /* Unicode snowflake character variant */
1248
+ .art-snowflake.art-snowflake-unicode::after {
1249
+ content: "\2746";
1250
+ color: var(--art-snowflake-color, #FFFFFF);
1251
+ font-size: var(--art-snowflake-size, 10px);
1252
+ filter: drop-shadow(0 0 var(--art-snowflake-size, 10px) var(--art-snowflake-color, #FFFFFF));
1253
+ }
1254
+
1255
+ /* Falling animation for composing snow scenes */
1256
+ .art-snowflake-fall {
1257
+ animation: art-snowflake-fall var(--art-snowflake-duration, 5s) linear infinite;
1258
+ }
1259
+
1260
+ @keyframes art-snowflake-fall {
1261
+ 0% {
1262
+ transform: translateY(-10%) rotate(0deg);
1263
+ opacity: 1;
1264
+ }
1265
+ 100% {
1266
+ transform: translateY(100vh) rotate(360deg);
1267
+ opacity: 0.3;
1268
+ }
1269
+ }
1270
+ }
1271
+