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