@duskmoon-dev/css-art 1.12.4 → 1.14.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 CHANGED
@@ -17,6 +17,7 @@
17
17
  position: relative;
18
18
  width: var(--art-moon-size);
19
19
  height: var(--art-moon-size);
20
+ aspect-ratio: 1;
20
21
  border-radius: 50%;
21
22
  background: radial-gradient(
22
23
  circle at 35% 35%,
@@ -198,116 +199,277 @@
198
199
  }
199
200
 
200
201
  @layer css-art {
202
+ @keyframes art-mountain-slide {
203
+ 0% { transform: translateX(-2%); }
204
+ 50% { transform: translateX(2%); }
205
+ 100% { transform: translateX(-2%); }
206
+ }
207
+
208
+ @keyframes art-mountain-grow {
209
+ 50% {
210
+ width: 2%;
211
+ opacity: 0.4;
212
+ }
213
+ }
214
+
215
+ @keyframes art-mountain-slide-right {
216
+ 0% { transform: translateX(-200%); }
217
+ 100% { transform: translateX(2000%); }
218
+ }
219
+
220
+ @keyframes art-mountain-slide-left {
221
+ 0% { transform: translateX(200%); }
222
+ 100% { transform: translateX(-2000%); }
223
+ }
224
+
225
+ /* === Canvas === */
201
226
  .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);
227
+ --art-mountain-size: 600px;
207
228
 
208
229
  position: relative;
209
- width: var(--art-mountain-width);
210
- height: var(--art-mountain-height);
230
+ width: var(--art-mountain-size);
231
+ height: var(--art-mountain-size);
232
+ overflow: hidden;
233
+ background:
234
+ /* Aurora glow layer — bottom 60% of canvas */
235
+ linear-gradient(transparent, rgba(31, 164, 152, 0.6)) 0 100% / 100% 60%,
236
+ /* Stars */
237
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 3% 70% / 0.2% 0.25%,
238
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 7% 60% / 0.2% 0.25%,
239
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 3% 47% / 0.2% 0.25%,
240
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 26% 65% / 0.2% 0.25%,
241
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 20% 50% / 0.2% 0.25%,
242
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 12% 53% / 0.2% 0.25%,
243
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 10% 40% / 0.2% 0.25%,
244
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 24% 34% / 0.2% 0.25%,
245
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 38% 35% / 0.2% 0.25%,
246
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 24% 48% / 0.2% 0.25%,
247
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 7% 30% / 0.2% 0.25%,
248
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 2% 20% / 0.2% 0.25%,
249
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 5% 4% / 0.2% 0.25%,
250
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 10% 15% / 0.2% 0.25%,
251
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 15% 8% / 0.2% 0.25%,
252
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 20% 20% / 0.2% 0.25%,
253
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 80% 36% / 0.2% 0.25%,
254
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 84% 50% / 0.2% 0.25%,
255
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 97% 50% / 0.2% 0.25%,
256
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 85% 40% / 0.2% 0.25%,
257
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 90% 54% / 0.2% 0.25%,
258
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 50% 40% / 0.2% 0.25%,
259
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 55% 49% / 0.2% 0.25%,
260
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 48% 55% / 0.2% 0.25%,
261
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 33% 45% / 0.2% 0.25%,
262
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 80% 60% / 0.2% 0.25%,
263
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 88% 70% / 0.2% 0.25%,
264
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 30% 24% / 0.2% 0.25%,
265
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 30% 10% / 0.2% 0.25%,
266
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 15% 30% / 0.2% 0.25%,
267
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 38% 3% / 0.2% 0.25%,
268
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 68% 30% / 0.2% 0.2%,
269
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 90% 32% / 0.2% 0.25%,
270
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 85% 10% / 0.2% 0.25%,
271
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 60% 16% / 0.2% 0.25%,
272
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 88% 12% / 0.2% 0.25%,
273
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 96% 5% / 0.2% 0.25%,
274
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 75% 18% / 0.2% 0.25%,
275
+ radial-gradient(rgba(255, 250, 250, 0.9) 70%, transparent 70%) 47% 14% / 0.2% 0.25%,
276
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 54% 10% / 0.2% 0.25%,
277
+ radial-gradient(rgba(255, 250, 250, 0.5) 70%, transparent 70%) 53% 23% / 0.2% 0.25%,
278
+ /* Night sky gradient */
279
+ linear-gradient(rgb(20, 21, 33), #022e4e, #03518a);
280
+ background-repeat: no-repeat;
281
+ z-index: 1;
211
282
  }
212
283
 
213
- /* Main peak */
214
- .art-mountain::before {
215
- content: '';
284
+ /* === Mountains === */
285
+
286
+ /* Shared mountain base */
287
+ .art-mountain .mountain {
216
288
  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);
289
+ clip-path: polygon(49% 0, 51% 0, 100% 100%, 0% 100%);
290
+ border-radius: 50% 50% 0 0;
291
+ z-index: 2;
225
292
  }
226
293
 
227
- /* Snow cap */
228
- .art-mountain::after {
229
- content: '';
294
+ /* Shadow sub-peak offset to the right */
295
+ .art-mountain .mountain::before {
296
+ content: "";
230
297
  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;
298
+ width: 100%;
299
+ height: 100%;
300
+ right: 5%;
301
+ background: inherit;
302
+ clip-path: inherit;
303
+ border-radius: inherit;
240
304
  }
241
305
 
242
- /* Range multiple peaks */
243
- .art-mountain-range {
244
- --art-mountain-width: 24rem;
245
- --art-mountain-height: 10rem;
306
+ /* Snow highlight at peak */
307
+ .art-mountain .mountain::after {
308
+ content: "";
309
+ position: absolute;
310
+ width: 100%;
311
+ height: 15%;
312
+ background: linear-gradient(rgba(255, 250, 250, 0.5), transparent);
313
+ }
246
314
 
247
- display: flex;
248
- align-items: flex-end;
249
- position: relative;
250
- width: var(--art-mountain-width);
251
- height: var(--art-mountain-height);
315
+ .art-mountain .mountain:nth-of-type(1) {
316
+ background: linear-gradient(#02284a, transparent);
317
+ width: 50%;
318
+ height: 40%;
319
+ left: -10%;
320
+ bottom: 0;
321
+ }
322
+
323
+ .art-mountain .mountain:nth-of-type(2) {
324
+ background: linear-gradient(#022e4e, rgba(20, 21, 33, 0.8));
325
+ width: 60%;
326
+ height: 50%;
327
+ left: 10%;
328
+ bottom: 0;
329
+ z-index: 3;
330
+ }
331
+
332
+ .art-mountain .mountain:nth-of-type(3) {
333
+ background: linear-gradient(#02284a, transparent);
334
+ width: 50%;
335
+ height: 65%;
336
+ left: 40%;
337
+ bottom: 0;
252
338
  }
253
339
 
254
- .art-mountain-range::before,
255
- .art-mountain-range::after {
256
- content: none;
340
+ .art-mountain .mountain:nth-of-type(4) {
341
+ background: linear-gradient(#022e4e, rgba(20, 21, 33, 0.8));
342
+ width: 30%;
343
+ height: 40%;
344
+ right: -10%;
345
+ bottom: 0;
257
346
  }
258
347
 
259
- .art-mountain-range .art-peak {
348
+ /* === Trees === */
349
+
350
+ .art-mountain .tree {
260
351
  position: absolute;
352
+ width: 0.5%;
261
353
  bottom: 0;
262
- width: 0;
263
- height: 0;
354
+ background: linear-gradient(rgb(4, 24, 22), rgb(20, 21, 33));
355
+ z-index: 4;
264
356
  }
265
357
 
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);
358
+ /* Layered triangles forming a pine silhouette */
359
+ .art-mountain .tree::before {
360
+ content: "";
361
+ position: absolute;
362
+ width: 800%;
363
+ height: 100%;
364
+ top: -5%;
365
+ left: -350%;
366
+ background: rgb(4, 24, 22);
367
+ clip-path: polygon(
368
+ 50% 0%,
369
+ 0% 30%,
370
+ 50% 30%,
371
+ 0% 60%,
372
+ 50% 60%,
373
+ 0% 90%,
374
+ 50% 90%,
375
+ 100% 90%,
376
+ 50% 60%,
377
+ 100% 60%,
378
+ 50% 30%,
379
+ 100% 30%
380
+ );
271
381
  }
272
382
 
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;
383
+ .art-mountain .tree:nth-of-type(1) {
384
+ height: 20%;
385
+ right: 25%;
279
386
  }
280
387
 
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);
388
+ .art-mountain .tree:nth-of-type(2) {
389
+ height: 15%;
390
+ right: 20%;
286
391
  }
287
392
 
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);
393
+ .art-mountain .tree:nth-of-type(3) {
394
+ height: 12%;
395
+ right: 28%;
293
396
  }
294
397
 
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);
398
+ /* === Aurora lights container === */
399
+
400
+ .art-mountain .lights {
401
+ height: 100%;
402
+ width: 100%;
403
+ animation: art-mountain-slide 15s ease-in-out infinite;
299
404
  }
300
405
 
301
- /* Size variants */
302
- .art-mountain-sm {
303
- --art-mountain-width: 10rem;
304
- --art-mountain-height: 6rem;
406
+ /* === Borealis beams === */
407
+
408
+ .art-mountain .borealis {
409
+ position: absolute;
410
+ width: 5%;
411
+ height: 100%;
412
+ bottom: 8%;
413
+ filter: blur(40px);
414
+ background: radial-gradient(rgb(31, 164, 152) 40%, transparent);
415
+ opacity: 0.6;
416
+ }
417
+
418
+ .art-mountain .borealis:nth-of-type(1) {
419
+ left: 0%;
420
+ animation: art-mountain-grow 30s ease-in-out infinite;
421
+ }
422
+
423
+ .art-mountain .borealis:nth-of-type(2) {
424
+ left: 20%;
425
+ animation: art-mountain-grow 25s 10s ease-in-out infinite;
305
426
  }
306
427
 
307
- .art-mountain-lg {
308
- --art-mountain-width: 24rem;
309
- --art-mountain-height: 15rem;
428
+ .art-mountain .borealis:nth-of-type(3) {
429
+ left: 40%;
430
+ animation: art-mountain-grow 30s ease-in-out infinite;
310
431
  }
432
+
433
+ .art-mountain .borealis:nth-of-type(4) {
434
+ left: 60%;
435
+ animation: art-mountain-grow 20s 3s ease-in-out infinite;
436
+ }
437
+
438
+ .art-mountain .borealis:nth-of-type(5) {
439
+ left: 80%;
440
+ animation: art-mountain-grow 25s ease-in-out infinite;
441
+ }
442
+
443
+ .art-mountain .borealis:nth-of-type(6) {
444
+ left: 97%;
445
+ animation: art-mountain-grow 20s 8s ease-in-out infinite;
446
+ }
447
+
448
+ /* Purple beam sweeping left → right */
449
+ .art-mountain .borealis:nth-of-type(7) {
450
+ background: radial-gradient(rgb(157, 78, 221) 40%, transparent);
451
+ transform: translateX(-200%);
452
+ animation: art-mountain-slide-right 25s infinite;
453
+ }
454
+
455
+ .art-mountain .borealis:nth-of-type(8) {
456
+ background: radial-gradient(rgb(157, 78, 221) 40%, transparent);
457
+ transform: translateX(-200%);
458
+ animation: art-mountain-slide-right 25s 8s infinite;
459
+ }
460
+
461
+ /* Blue beam sweeping right → left */
462
+ .art-mountain .borealis:nth-of-type(9) {
463
+ left: unset;
464
+ right: 0%;
465
+ transform: translateX(200%);
466
+ background: radial-gradient(#045fa0 40%, transparent);
467
+ animation: art-mountain-slide-left 18s 5s ease-in-out infinite;
468
+ }
469
+
470
+ /* === Size variants === */
471
+ .art-mountain-sm { --art-mountain-size: 300px; }
472
+ .art-mountain-lg { --art-mountain-size: 900px; }
311
473
  }
312
474
 
313
475
  @layer css-art {
@@ -582,9 +744,10 @@
582
744
  --art-plasma-ball-base-color: #222222;
583
745
  --art-plasma-ball-switch-size: calc(var(--art-plasma-ball-size) * 37 / 350);
584
746
  position: relative;
747
+ isolation: isolate;
585
748
  margin: 0 auto;
586
749
  width: var(--art-plasma-ball-size);
587
- height: var(--art-plasma-ball-size);
750
+ height: calc(var(--art-plasma-ball-size) * 1.6);
588
751
  box-sizing: border-box;
589
752
 
590
753
  * {
@@ -599,6 +762,7 @@
599
762
  margin: calc(var(--art-plasma-ball-size) * 48 / 350) auto;
600
763
  top: calc(var(--art-plasma-ball-size) * 286 / 350);
601
764
  left: calc(var(--art-plasma-ball-size) * 25 / 350);
765
+ z-index: -2;
602
766
  }
603
767
  .base:before {
604
768
  position: absolute;
@@ -671,8 +835,8 @@
671
835
  position: absolute;
672
836
  overflow: hidden;
673
837
  margin: 0 auto;
674
- width: 100%;
675
- height: 100%;
838
+ width: var(--art-plasma-ball-size);
839
+ height: var(--art-plasma-ball-size);
676
840
  border-radius: 100%;
677
841
  background-color: rgb(255 255 255 / 0.15);
678
842
  top: 0%;
@@ -1103,6 +1267,22 @@
1103
1267
  --art-plasma-ball-size: 500px;
1104
1268
  }
1105
1269
 
1270
+ /* No-base variant: hides the stand/switch, shrinks container to ball size only */
1271
+ .art-plasma-ball-no-base {
1272
+ height: var(--art-plasma-ball-size);
1273
+ }
1274
+ .art-plasma-ball-no-base .base,
1275
+ .art-plasma-ball-no-base .switch {
1276
+ display: none;
1277
+ }
1278
+ .art-plasma-ball-no-base input.switcher {
1279
+ top: 0;
1280
+ left: 0;
1281
+ width: 100%;
1282
+ height: 100%;
1283
+ border-radius: 100% !important;
1284
+ }
1285
+
1106
1286
  @keyframes art-plasma-ball-rotation {
1107
1287
  50% {
1108
1288
  transform: rotate(360deg);
@@ -3319,5 +3499,1110 @@
3319
3499
  .art-gemini-input-lg { --art-gemini-input-width: 640px; }
3320
3500
  }
3321
3501
 
3502
+ @layer css-art {
3503
+ @keyframes art-snowball-preloader-ball {
3504
+ from { transform: rotate(0) translateY(-6.5em); }
3505
+ 50% { transform: rotate(180deg) translateY(-6em); }
3506
+ to { transform: rotate(360deg) translateY(-6.5em); }
3507
+ }
3508
+
3509
+ @keyframes art-snowball-preloader-inner-shadow {
3510
+ from { transform: rotate(0); }
3511
+ to { transform: rotate(-360deg); }
3512
+ }
3513
+
3514
+ @keyframes art-snowball-preloader-outer-shadow {
3515
+ from { transform: rotate(20deg); }
3516
+ to { transform: rotate(-340deg); }
3517
+ }
3518
+
3519
+ @keyframes art-snowball-preloader-texture {
3520
+ from { transform: translateX(0); }
3521
+ to { transform: translateX(50%); }
3522
+ }
3523
+
3524
+ @keyframes art-snowball-preloader-track-cover {
3525
+ from { transform: rotate(0); }
3526
+ to { transform: rotate(360deg); }
3527
+ }
3528
+
3529
+ .art-snowball-preloader {
3530
+ --art-snowball-preloader-size: 256px;
3531
+ --art-snowball-preloader-bg: hsl(223, 90%, 95%);
3532
+
3533
+ font-size: calc(var(--art-snowball-preloader-size) / 16);
3534
+ position: relative;
3535
+ width: 16em;
3536
+ height: 16em;
3537
+
3538
+ *, *::before, *::after {
3539
+ box-sizing: border-box;
3540
+ border: 0;
3541
+ margin: 0;
3542
+ padding: 0;
3543
+ }
3544
+
3545
+ .art-snowball-preloader-outer-ring,
3546
+ .art-snowball-preloader-inner-ring,
3547
+ .art-snowball-preloader-track-cover,
3548
+ .art-snowball-preloader-ball,
3549
+ .art-snowball-preloader-ball-inner-shadow,
3550
+ .art-snowball-preloader-ball-side-shadows,
3551
+ .art-snowball-preloader-ball-texture {
3552
+ border-radius: 50%;
3553
+ }
3554
+
3555
+ .art-snowball-preloader-outer-ring,
3556
+ .art-snowball-preloader-inner-ring,
3557
+ .art-snowball-preloader-track-cover,
3558
+ .art-snowball-preloader-ball,
3559
+ .art-snowball-preloader-ball-inner-shadow,
3560
+ .art-snowball-preloader-ball-outer-shadow,
3561
+ .art-snowball-preloader-ball-side-shadows,
3562
+ .art-snowball-preloader-ball-texture,
3563
+ .art-snowball-preloader-ball-texture::before {
3564
+ position: absolute;
3565
+ }
3566
+
3567
+ .art-snowball-preloader-ball {
3568
+ animation: art-snowball-preloader-ball 3s linear infinite;
3569
+ top: calc(50% - 1.25em);
3570
+ left: calc(50% - 1.25em);
3571
+ transform: rotate(0) translateY(-6.5em);
3572
+ width: 2.5em;
3573
+ height: 2.5em;
3574
+ }
3575
+
3576
+ .art-snowball-preloader-ball-inner-shadow {
3577
+ animation: art-snowball-preloader-inner-shadow 3s linear infinite;
3578
+ box-shadow:
3579
+ 0 0.1em 0.2em hsla(0, 0%, 0%, 0.3),
3580
+ 0 0 0.2em hsla(0, 0%, 0%, 0.1) inset,
3581
+ 0 -1em 0.5em hsla(0, 0%, 0%, 0.15) inset;
3582
+ width: 100%;
3583
+ height: 100%;
3584
+ }
3585
+
3586
+ .art-snowball-preloader-ball-outer-shadow {
3587
+ animation: art-snowball-preloader-outer-shadow 3s linear infinite;
3588
+ background-image: linear-gradient(hsla(0, 0%, 0%, 0.15), hsla(0, 0%, 0%, 0));
3589
+ border-radius: 0 0 50% 50% / 0 0 100% 100%;
3590
+ filter: blur(2px);
3591
+ top: 50%;
3592
+ left: 0;
3593
+ width: 100%;
3594
+ height: 250%;
3595
+ transform: rotate(20deg);
3596
+ transform-origin: 50% 0;
3597
+ z-index: -2;
3598
+ }
3599
+
3600
+ .art-snowball-preloader-ball-side-shadows {
3601
+ background-color: hsla(0, 0%, 0%, 0.1);
3602
+ filter: blur(2px);
3603
+ width: 100%;
3604
+ height: 100%;
3605
+ transform: scale(0.75, 1.1);
3606
+ z-index: -1;
3607
+ }
3608
+
3609
+ .art-snowball-preloader-ball-texture {
3610
+ overflow: hidden;
3611
+ width: 100%;
3612
+ height: 100%;
3613
+ transform: translate3d(0, 0, 0);
3614
+
3615
+ &::before {
3616
+ animation: art-snowball-preloader-texture 0.25s linear infinite;
3617
+ background: url(https://assets.codepen.io/416221/snow.jpg) 0 0 / 50% 100%;
3618
+ content: "";
3619
+ display: block;
3620
+ filter: brightness(1.05);
3621
+ top: 0;
3622
+ right: 0;
3623
+ width: 200%;
3624
+ height: 100%;
3625
+ }
3626
+ }
3627
+
3628
+ .art-snowball-preloader-inner-ring {
3629
+ box-shadow:
3630
+ 0 -0.25em 0.5em hsla(0, 0%, 100%, 0.4),
3631
+ 0 0.5em 0.75em hsla(0, 0%, 100%, 0.4) inset,
3632
+ 0 0.5em 0.375em hsla(0, 0%, 0%, 0.15),
3633
+ 0 -0.5em 0.75em hsla(0, 0%, 0%, 0.15) inset;
3634
+ top: 2.375em;
3635
+ left: 2.375em;
3636
+ width: calc(100% - 4.75em);
3637
+ height: calc(100% - 4.75em);
3638
+ }
3639
+
3640
+ .art-snowball-preloader-outer-ring {
3641
+ box-shadow:
3642
+ 0 -0.45em 0.375em hsla(0, 0%, 0%, 0.15),
3643
+ 0 0.5em 0.75em hsla(0, 0%, 0%, 0.15) inset,
3644
+ 0 0.25em 0.5em hsla(0, 0%, 100%, 0.4),
3645
+ 0 -0.5em 0.75em hsla(0, 0%, 100%, 0.4) inset;
3646
+ top: 0.75em;
3647
+ left: 0.75em;
3648
+ width: calc(100% - 1.5em);
3649
+ height: calc(100% - 1.5em);
3650
+ }
3651
+
3652
+ .art-snowball-preloader-track-cover {
3653
+ animation: art-snowball-preloader-track-cover 3s linear infinite;
3654
+ background-image: conic-gradient(
3655
+ var(--art-snowball-preloader-bg) 210deg,
3656
+ oklch(from var(--art-snowball-preloader-bg) l c h / 0) 270deg
3657
+ );
3658
+ top: 0;
3659
+ left: 0;
3660
+ width: 100%;
3661
+ height: 100%;
3662
+ z-index: 1;
3663
+ }
3664
+ }
3665
+
3666
+ .art-snowball-preloader-sm { --art-snowball-preloader-size: 192px; }
3667
+ .art-snowball-preloader-lg { --art-snowball-preloader-size: 384px; }
3668
+ }
3669
+
3670
+ @layer css-art {
3671
+ .art-csswitch {
3672
+ --art-csswitch-size: 800px;
3673
+ --joycon-left: #00c5e2;
3674
+ --joycon-left-shadow: #0128;
3675
+ --joycon-right: #ff6658;
3676
+ --joycon-right-shadow: #c218;
3677
+
3678
+ position: relative;
3679
+ isolation: isolate;
3680
+ font-size: var(--art-csswitch-size);
3681
+ width: var(--art-csswitch-size);
3682
+ max-width: var(--art-csswitch-size);
3683
+ height: calc(var(--art-csswitch-size) * 0.4256);
3684
+ background: #f000;
3685
+ }
3686
+
3687
+ .art-csswitch *,
3688
+ .art-csswitch *::before,
3689
+ .art-csswitch *::after {
3690
+ position: absolute;
3691
+ box-sizing: border-box;
3692
+ }
3693
+
3694
+ .art-csswitch :focus {
3695
+ outline: 1px dashed;
3696
+ outline-offset: 2px;
3697
+ }
3698
+
3699
+ .art-csswitch .round {
3700
+ border-radius: 50%;
3701
+ }
3702
+
3703
+ .art-csswitch .comfort-grip,
3704
+ .art-csswitch .connector {
3705
+ display: none;
3706
+ }
3707
+
3708
+ /* body + 2×controller ≈ 0.721em + 2×0.1385em = 0.998em ≈ font-size → fills the root */
3709
+ .art-csswitch .body {
3710
+ bottom: 0;
3711
+ left: 50%;
3712
+ transform: translateX(-50%);
3713
+ width: 0.721em;
3714
+ height: 99%;
3715
+ }
3716
+
3717
+ .art-csswitch .frame {
3718
+ width: 100%;
3719
+ height: 100%;
3720
+ border-radius: 2px;
3721
+ background:
3722
+ radial-gradient(farthest-side, #2f3638 50%, #0000) -1% 3% / 2% 2%,
3723
+ radial-gradient(farthest-side, #2f3638, #0000) 1% -0.75% / 2% 2%,
3724
+ radial-gradient(95% 70% at 0% 0%, #2f3638 85%, #fff3, #f000) 0.5% 0.75% / 1.55% 5.25% no-repeat,
3725
+ radial-gradient(farthest-side, #2f3638 50%, #0000) 101% 3% / 2% 2%,
3726
+ radial-gradient(farthest-side, #2f3638, #0000) 99% -0.75% / 2% 2%,
3727
+ radial-gradient(95% 70% at 100% 0%, #2f3638 85%, #fff3, #f000) 99.5% 0.75% / 1.55% 5.25% no-repeat,
3728
+ linear-gradient(#0000 1%, #fff3 2%, #0000 4%),
3729
+ linear-gradient(#0000 95%, #0008),
3730
+ #2f3638;
3731
+ background-repeat: no-repeat;
3732
+ box-shadow:
3733
+ inset -1.5px 0 0.75px -0.75px #fff5,
3734
+ inset 1.5px 0 0.75px -0.75px #fff6;
3735
+ -webkit-mask:
3736
+ radial-gradient(farthest-side at 100% 100%, #f00 99.99%, #f000) 0 3.9% / 0.6% 1% no-repeat,
3737
+ radial-gradient(farthest-side at 100% 100%, #f00 99.99%, #f000) 1.7% 0% / 0.4% 1% no-repeat,
3738
+ radial-gradient(78.33% 60.33% at 0% 0%, #f000 99%, #f00) 0.5% 0.75% / 1.55% 5.25% no-repeat,
3739
+ radial-gradient(farthest-side at 0% 100%, #f00 99.99%, #f000) 100% 3.9% / 0.6% 1% no-repeat,
3740
+ radial-gradient(farthest-side at 0% 100%, #f00 99.99%, #f000) 98.3% 0% / 0.4% 1% no-repeat,
3741
+ radial-gradient(78.33% 60.33% at 100% 0%, #f000 99%, #f00) 99.5% 0.75% / 1.55% 5.25% no-repeat,
3742
+ linear-gradient(#0000 4.7%, #000 0),
3743
+ linear-gradient(90deg, #0000 1.9%, #000 0 98.1%, #0000 0);
3744
+ }
3745
+
3746
+ .art-csswitch .frame::before {
3747
+ content: "";
3748
+ top: 50%;
3749
+ left: 50%;
3750
+ transform: translate(-50%, -50%);
3751
+ width: 94%;
3752
+ height: 93%;
3753
+ border-radius: 11px;
3754
+ border: 0.3px solid #000;
3755
+ box-shadow:
3756
+ 0 0.45px 1px #fff8,
3757
+ inset 0 0.6px 1.5px -0.25px #000,
3758
+ inset 0 0.7px 1.5px -0.25px #fffc;
3759
+ background:
3760
+ radial-gradient(circle at 32.7% 98%, #0e0e0e 0.9%, #000 0 1%, #0e0e0e 0 1.2%, #0000 0),
3761
+ linear-gradient(#0e0e0e 0 0) 32.33% 100% / 2.1% 2% no-repeat,
3762
+ #000;
3763
+ }
3764
+
3765
+ .art-csswitch .screen {
3766
+ top: 50%;
3767
+ left: 50%;
3768
+ transform: translate(-50%, -50%);
3769
+ width: 80%;
3770
+ height: 77.5%;
3771
+ border-radius: 1.5px;
3772
+ background: #292d30;
3773
+ box-shadow: inset 0 1.5px 5px -1.5px #000c;
3774
+ }
3775
+
3776
+ .art-csswitch .controller {
3777
+ --color: var(--joycon-left);
3778
+ --color-shadow: var(--joycon-left-shadow);
3779
+ /* em units: 20/1000, 10.5/1000, -12.3/1000 */
3780
+ --connection: 0.02em 0.0105em 0 -0.0123em #020100;
3781
+ width: 0.1385em;
3782
+ height: 99%;
3783
+ bottom: 0;
3784
+ left: 0;
3785
+ border-radius: 90px 4px 2px 90px;
3786
+ background: var(--color);
3787
+ box-shadow:
3788
+ var(--connection),
3789
+ inset 1px -9px 10px -3px #0125,
3790
+ inset 35px 0 25px -25px #0002,
3791
+ inset -2px 0 4px var(--color),
3792
+ inset 6px 16px 5px -8px var(--color),
3793
+ inset 0 17px 5px -8px #fff,
3794
+ inset 5px -5px 10px -4px var(--color-shadow);
3795
+ }
3796
+
3797
+ .art-csswitch .controller::before {
3798
+ content: "";
3799
+ width: 0.00275em;
3800
+ aspect-ratio: 1;
3801
+ background: #393537;
3802
+ box-shadow: inset 0.1px 0.75px 0.4px #fff3;
3803
+ left: 100%;
3804
+ top: 97.75%;
3805
+ border-radius: 50%;
3806
+ }
3807
+
3808
+ .art-csswitch .controller.right {
3809
+ --color: var(--joycon-right);
3810
+ --color-shadow: var(--joycon-right-shadow);
3811
+ --connection: -0.02em 0.0105em 0 -0.0123em #020100;
3812
+ left: auto;
3813
+ right: 0;
3814
+ border-radius: 4px 90px 90px 2px;
3815
+ box-shadow:
3816
+ var(--connection),
3817
+ inset -0.001em -0.009em 0.01em -0.003em #2107,
3818
+ inset -0.035em 0 0.025em -0.025em #0002,
3819
+ inset 0.002em 0 0.004em var(--color),
3820
+ inset -0.006em 0.016em 0.005em -0.008em var(--color),
3821
+ inset 0 0.017em 0.005em -0.008em #fff,
3822
+ inset -0.01em 0 0.01em -0.004em var(--color-shadow);
3823
+ }
3824
+
3825
+ .art-csswitch .controller.right::before {
3826
+ left: auto;
3827
+ right: 100%;
3828
+ box-shadow: inset -0.0001em 0.00075em 0.0004em #fff3;
3829
+ }
3830
+
3831
+ .art-csswitch button {
3832
+ border: 0;
3833
+ font-size: 1em;
3834
+ padding: 0;
3835
+ }
3836
+
3837
+ .art-csswitch .bar {
3838
+ display: none;
3839
+ }
3840
+
3841
+ .art-csswitch .minus {
3842
+ --c: #404040;
3843
+ width: 17%;
3844
+ height: 1.8%;
3845
+ background: var(--c);
3846
+ top: 8.9%;
3847
+ right: 7.7%;
3848
+ border-radius: 0.0015em;
3849
+ border: 0.001em solid var(--color-shadow);
3850
+ box-shadow:
3851
+ inset 1px -1px 1px #0008,
3852
+ inset -1px 0 1px #0003,
3853
+ inset 0 1px 1px #fff6,
3854
+ 0 2px 2px -1px #0006;
3855
+ }
3856
+
3857
+ .art-csswitch .plus {
3858
+ left: 7.7%;
3859
+ right: auto;
3860
+ }
3861
+
3862
+ .art-csswitch .plus::before {
3863
+ content: "";
3864
+ width: 37.5%;
3865
+ height: 410%;
3866
+ background: var(--c);
3867
+ top: 50%;
3868
+ left: 50%;
3869
+ transform: translate(-50%, -50%);
3870
+ border-radius: 0.0015em;
3871
+ border: 0.001em solid var(--color-shadow);
3872
+ box-shadow:
3873
+ 0 0.004em 0.02em var(--color-shadow),
3874
+ inset -0.0006em 0 0.0004em #0007,
3875
+ inset 0.0006em 0 0.0004em #0007,
3876
+ inset 0 -0.001em 0.0005em -0.0002em #0008,
3877
+ inset 0 0.00075em 0.0005em -0.0002em #fff6;
3878
+ }
3879
+
3880
+ .art-csswitch .plus::after {
3881
+ content: "";
3882
+ width: 35%;
3883
+ aspect-ratio: 1;
3884
+ background:
3885
+ radial-gradient(circle at 0 0, #834 20%, #0000 20% 35%, var(--c) 0) 0 0 / 50% 50%,
3886
+ conic-gradient(at 0 0, #000, #fff) 1% 1% / 40% 40%,
3887
+ radial-gradient(circle at 100% 0, #834 20%, #0000 20% 35%, var(--c) 0) 100% 0 / 50% 50%,
3888
+ conic-gradient(at 100% 0, #fff 25%, #000) 99% 1% / 40% 40%,
3889
+ radial-gradient(circle at 0% 100%, #834 20%, #0000 20% 35%, var(--c) 0) 1% 99% / 50% 50%,
3890
+ radial-gradient(at 0% 100%, #0008, #0000) 1% 99% / 40% 40%,
3891
+ radial-gradient(circle at 100% 100%, #834 20%, #0000 20% 35%, var(--c) 0) 99% 99% / 50% 50%,
3892
+ radial-gradient(at 100% 100%, #0008, #0000) 100% 99% / 40% 40%,
3893
+ var(--c);
3894
+ background-repeat: no-repeat;
3895
+ top: 50%;
3896
+ left: 50%;
3897
+ transform: translate(-50%, -50%);
3898
+ }
3899
+
3900
+ .art-csswitch .mushroom {
3901
+ width: 47%;
3902
+ aspect-ratio: 1;
3903
+ border: 0.001em solid var(--color-shadow);
3904
+ top: 17.5%;
3905
+ left: 30%;
3906
+ background:
3907
+ radial-gradient(circle at 50% 0, #6669, #6660 60%),
3908
+ #2a2e31;
3909
+ box-shadow:
3910
+ inset 0 0.0001em 0.00125em -0.0005em var(--color),
3911
+ inset 0 0.003em 0.003em #0004,
3912
+ inset 0 -0.005em 0.003em #0006,
3913
+ 0 -0.0009em 0.001em 0.001em #0003,
3914
+ 0 0.00075em 0.001em 0.001em #0003,
3915
+ 0 0.01em 0.01em -0.0025em #0004,
3916
+ 0 0.025em 0.035em var(--color-shadow);
3917
+ }
3918
+
3919
+ .art-csswitch .right .mushroom {
3920
+ top: 45.25%;
3921
+ left: 23.25%;
3922
+ }
3923
+
3924
+ .art-csswitch .mushroom::before {
3925
+ content: "";
3926
+ width: 80%;
3927
+ aspect-ratio: 1;
3928
+ top: 50%;
3929
+ left: 50%;
3930
+ transform: translate(-50%, -50%);
3931
+ border-radius: 50%;
3932
+ background: radial-gradient(circle at 50% 0, #6669, #6660 60%);
3933
+ box-shadow:
3934
+ inset 0 0 0.001em #0008,
3935
+ inset 0 0.002em 0.002em #0008,
3936
+ inset 0 -0.001em 0.001em 0.001em #fff4,
3937
+ 0 0.001em 0.001em #fff2,
3938
+ 0 -0.0007em 0.001em 0.0006em #0008,
3939
+ 0 -0.0025em 0.0015em 0.0006em #fff2;
3940
+ }
3941
+
3942
+ .art-csswitch .mushroom::after {
3943
+ content: "";
3944
+ width: 95%;
3945
+ aspect-ratio: 1;
3946
+ top: 50%;
3947
+ left: 50%;
3948
+ transform: translate(-50%, -50%);
3949
+ border-radius: 50%;
3950
+ background:
3951
+ linear-gradient(90deg, #000, #0000 20% 80%, #000) 50% 0 / 3% 12%,
3952
+ linear-gradient(#000 5%, #444 15% 30%, #666 50%, #3c3c3c, #484848) 50% 0 / 3% 12%,
3953
+ linear-gradient(#0000 30% 90%, #fff) 0% 50% / 12% 3%,
3954
+ linear-gradient(#000, #0000 30% 70%, #000) 0% 50% / 12% 3%,
3955
+ linear-gradient(90deg, #fff4, #222 10% 50%, #444) 0% 50% / 12% 3%,
3956
+ linear-gradient(#0000 30% 90%, #fff) 100% 50% / 12% 3%,
3957
+ linear-gradient(#000, #0000 30% 70%, #000) 100% 50% / 12% 3%,
3958
+ linear-gradient(to left, #fff4, #222 10% 50%, #444) 100% 50% / 12% 3%,
3959
+ linear-gradient(90deg, #000, #0000 20% 80%, #000) 50% 100% / 3% 12%,
3960
+ linear-gradient(to top, #fff4, #111 15% 50%, #444) 50% 100% / 3% 12%,
3961
+ #f000;
3962
+ background-repeat: no-repeat;
3963
+ }
3964
+
3965
+ .art-csswitch .direction {
3966
+ display: grid;
3967
+ place-items: center;
3968
+ width: 23%;
3969
+ aspect-ratio: 1;
3970
+ border: 0.0007em solid var(--color-shadow);
3971
+ background:
3972
+ linear-gradient(#fff2, #fff0),
3973
+ #35393c;
3974
+ box-shadow:
3975
+ 0 0.002em 0.007em var(--color-shadow),
3976
+ inset 0 0.0001em 0.0015em -0.0005em var(--color),
3977
+ inset 0 0 0.0005em 0.001em #323439,
3978
+ inset 0 0.002em 0.001em 0.0002em #def5,
3979
+ inset 0 -0.001em 0.0005em 0.0002em #000,
3980
+ inset 0 -0.001em 0.001em 0.002em #000c;
3981
+ }
3982
+
3983
+ .art-csswitch .direction::before {
3984
+ font-size: 0.0175em;
3985
+ font-family: Helvetica, sans-serif;
3986
+ color: #fffa;
3987
+ }
3988
+
3989
+ .art-csswitch .arrow::before,
3990
+ .art-csswitch .arrow::after {
3991
+ content: "";
3992
+ width: 40%;
3993
+ top: 50%;
3994
+ left: 50%;
3995
+ transform: translate(-50%, -50%);
3996
+ aspect-ratio: 1;
3997
+ border-radius: 50%;
3998
+ background: #252525;
3999
+ clip-path: polygon(52% -2%, 100% 80%, 0 80%, 48% -2%);
4000
+ }
4001
+
4002
+ .art-csswitch .arrow::before {
4003
+ top: 51.5%;
4004
+ background: #fff3;
4005
+ filter: blur(0.01em);
4006
+ }
4007
+
4008
+ .art-csswitch .arrow.right::before,
4009
+ .art-csswitch .arrow.right::after {
4010
+ transform: translate(-50%, -50%) rotate(90deg);
4011
+ }
4012
+
4013
+ .art-csswitch .arrow.left::before,
4014
+ .art-csswitch .arrow.left::after {
4015
+ transform: translate(-50%, -50%) rotate(-90deg);
4016
+ }
4017
+
4018
+ .art-csswitch .arrow.down::before,
4019
+ .art-csswitch .arrow.down::after {
4020
+ transform: translate(-50%, -50%) rotate(180deg);
4021
+ }
4022
+
4023
+ .art-csswitch .direction.up {
4024
+ top: 41.75%;
4025
+ left: 41.9%;
4026
+ }
4027
+
4028
+ .art-csswitch .direction.down {
4029
+ top: 56.6%;
4030
+ left: 41.9%;
4031
+ }
4032
+
4033
+ .art-csswitch .direction.left {
4034
+ left: 18.25%;
4035
+ top: 49.25%;
4036
+ }
4037
+
4038
+ .art-csswitch .direction.right {
4039
+ left: 65.75%;
4040
+ top: 49.25%;
4041
+ }
4042
+
4043
+ .art-csswitch .direction.x {
4044
+ top: 14%;
4045
+ left: 35%;
4046
+ }
4047
+
4048
+ .art-csswitch .direction.x::before {
4049
+ content: "X";
4050
+ }
4051
+
4052
+ .art-csswitch .direction.y {
4053
+ top: 21.5%;
4054
+ left: 11.25%;
4055
+ }
4056
+
4057
+ .art-csswitch .direction.y::before {
4058
+ content: "Y";
4059
+ }
4060
+
4061
+ .art-csswitch .direction.a {
4062
+ top: 21.5%;
4063
+ left: 59%;
4064
+ }
4065
+
4066
+ .art-csswitch .direction.a::before {
4067
+ content: "A";
4068
+ }
4069
+
4070
+ .art-csswitch .direction.b {
4071
+ top: 29%;
4072
+ left: 35%;
4073
+ }
4074
+
4075
+ .art-csswitch .direction.b::before {
4076
+ content: "B";
4077
+ }
4078
+
4079
+ .art-csswitch .menu {
4080
+ width: 19.35%;
4081
+ aspect-ratio: 1;
4082
+ border: 0.0009em solid var(--color-shadow);
4083
+ top: 68.5%;
4084
+ left: 60.5%;
4085
+ border-radius: 0.003em;
4086
+ background: #464b50;
4087
+ box-shadow:
4088
+ inset 0 0.001em 0.001em -0.0005em #fff6,
4089
+ inset 0 -0.001em 0.001em -0.0005em #0006;
4090
+ }
4091
+
4092
+ .art-csswitch .menu::before {
4093
+ content: "";
4094
+ width: 67%;
4095
+ aspect-ratio: 1;
4096
+ background: #33393c;
4097
+ left: 50%;
4098
+ top: 50%;
4099
+ transform: translate(-50%, -50%);
4100
+ border-radius: 50%;
4101
+ box-shadow:
4102
+ inset 0 0.0009em 0.00075em #0008,
4103
+ 0 0.0008em 0.00075em #fff5;
4104
+ }
4105
+
4106
+ .art-csswitch .lr {
4107
+ background: linear-gradient(#4c5153 50%, #030405 60%);
4108
+ top: -1%;
4109
+ right: 18%;
4110
+ width: 83.5%;
4111
+ height: 21%;
4112
+ border-radius: 100em 2em 0 0;
4113
+ clip-path: ellipse(140% 87% at 100% 0%);
4114
+ box-shadow:
4115
+ inset -0.004em 0 0.003em -0.003em #333,
4116
+ inset -0.007em 0 0.003em -0.003em #4c5153,
4117
+ inset 0 0.0015em 0.001em #444,
4118
+ inset -0.001em 0.00175em 0.001em #fff;
4119
+ z-index: -1;
4120
+ }
4121
+
4122
+ .art-csswitch .lr.rr {
4123
+ left: 18%;
4124
+ right: auto;
4125
+ transform: scaleX(-1);
4126
+ }
4127
+
4128
+ .art-csswitch .volume {
4129
+ width: 8.5%;
4130
+ height: 0.7%;
4131
+ background: linear-gradient(#444, #222);
4132
+ left: 13.3%;
4133
+ top: -0.6%;
4134
+ border-radius: 0.0005em 0.0005em 0 0;
4135
+ clip-path: polygon(-20% -100%, 32% -100%, 32% 0, 33% 35%, 66% 35%, 67% 0%, 67% -100%, 110% -100%, 110% 120%, -20% 120%);
4136
+ z-index: -1;
4137
+ }
4138
+
4139
+ .art-csswitch .home {
4140
+ top: 67.6%;
4141
+ left: 17.5%;
4142
+ display: grid;
4143
+ place-items: center;
4144
+ width: 25%;
4145
+ aspect-ratio: 1;
4146
+ border: 0.0007em solid var(--color-shadow);
4147
+ background:
4148
+ linear-gradient(#0001, #0005),
4149
+ radial-gradient(#0000 52.5%, #9c9a9a 54%),
4150
+ #404547;
4151
+ }
4152
+
4153
+ .art-csswitch .home::before {
4154
+ content: "";
4155
+ top: 23%;
4156
+ left: 50%;
4157
+ transform: translate(-50%, 0);
4158
+ width: 50%;
4159
+ height: 24.5%;
4160
+ background: conic-gradient(at 50% 0, #0000 132deg, #010202 0 228deg, #0000 0);
4161
+ box-shadow: 0 0.5px 0.75px -0.25px #fff8;
4162
+ }
4163
+
4164
+ .art-csswitch .home::after {
4165
+ content: "";
4166
+ color: #010202;
4167
+ top: 46%;
4168
+ left: 50%;
4169
+ transform: translate(-50%, 0);
4170
+ width: 39%;
4171
+ height: 24.5%;
4172
+ box-shadow:
4173
+ inset -0.004em 0,
4174
+ inset 0.004em 0,
4175
+ inset 0 -0.004em 0,
4176
+ 0 0.5px 0.75px -0.25px #fff5;
4177
+ }
4178
+
4179
+ .art-csswitch button:active,
4180
+ .art-csswitch .plus:active::before,
4181
+ .art-csswitch .plus:active::after,
4182
+ .art-csswitch .active {
4183
+ background: yellow !important;
4184
+ }
4185
+
4186
+ /* ── Tablet: grip stand mode, body hidden ── */
4187
+ @media (max-width: 1010px) {
4188
+ .art-csswitch {
4189
+ width: calc(var(--art-csswitch-size) * 0.663);
4190
+ }
4191
+
4192
+ /* 102/1000 = 0.102em — controllers inset from edges */
4193
+ .art-csswitch .controller {
4194
+ left: 0.102em;
4195
+ }
4196
+
4197
+ .art-csswitch .controller.right {
4198
+ right: 0.102em;
4199
+ }
4200
+
4201
+ .art-csswitch .body {
4202
+ display: none;
4203
+ }
4204
+
4205
+ .art-csswitch .comfort-grip {
4206
+ display: block;
4207
+ width: 100%;
4208
+ height: 0.461em; /* 461/1000 */
4209
+ }
4210
+
4211
+ .art-csswitch .grip {
4212
+ width: 24%;
4213
+ height: 82.5%;
4214
+ bottom: 7.5%;
4215
+ left: 0%;
4216
+ transform: rotate(12deg);
4217
+ background:
4218
+ radial-gradient(50% 100% at 69% 50%, #fff1, #fff0 50%),
4219
+ radial-gradient(100% 100% at 60% 60%, #ffffff18, #fff0 30%),
4220
+ linear-gradient(#0000, #0003),
4221
+ #2f3638;
4222
+ border-radius: 120% 120% 170% 125% / 120% 120% 140% 110%;
4223
+ transform-origin: 50% 100%;
4224
+ box-shadow:
4225
+ inset 25px 20px 20px -10px #00050ccc,
4226
+ inset -20px -10px 30px -10px #0008,
4227
+ inset 32px 50px 15px -15px #fff5,
4228
+ inset 0 0 50px #0008;
4229
+ }
4230
+
4231
+ .art-csswitch .grip.right {
4232
+ left: auto;
4233
+ right: 0;
4234
+ transform: scaleX(-1) rotate(12deg);
4235
+ }
4236
+
4237
+ .art-csswitch .comfort-grip ~ .comfort-grip {
4238
+ height: 100%;
4239
+ }
4240
+
4241
+ .art-csswitch .holder {
4242
+ width: 70%;
4243
+ height: 0.365em; /* 365/1000 */
4244
+ background: #2f3638;
4245
+ top: 13%;
4246
+ left: 50%;
4247
+ transform: translateX(-50%);
4248
+ border-radius: 7% 7% 250px 250px / 10% 10% 26% 26%;
4249
+ box-shadow:
4250
+ inset 2px -10px 2px -1px #000,
4251
+ inset -2px -10px 2px 0px #000,
4252
+ -1px 1px 2px -1.5px #fffc,
4253
+ 0 40px 0 -20px #000c,
4254
+ -3px 10px 10px 3px #2f3638,
4255
+ 1px 1px 2px -1.5px #fffc,
4256
+ 2px 10px 10px 3px #2f3638;
4257
+ clip-path: polygon(-100% 0%, 200% 0%, 200% 100%, 66% 100%, 65.75% 100.75%, 34.25% 100.75%, 34% 100%, -100% 100%);
4258
+ }
4259
+
4260
+ .art-csswitch .main-frame {
4261
+ width: 0.181em; /* 181/1000 */
4262
+ height: 99%;
4263
+ bottom: 0%;
4264
+ left: 50%;
4265
+ transform: translate(-50%, 0);
4266
+ border-radius: 2px;
4267
+ -webkit-mask:
4268
+ radial-gradient(farthest-side at 100% 100%, #f00 99.99%, #f000) 0 3.9% / 2.4% 1% no-repeat,
4269
+ radial-gradient(farthest-side at 100% 100%, #f00 99.99%, #f000) 6.8% 0% / 1.6% 1% no-repeat,
4270
+ radial-gradient(78.33% 60.33% at 0% 0%, #f000 99%, #f00) 2% 0.75% / 6.2% 5.25% no-repeat,
4271
+ radial-gradient(farthest-side at 0% 100%, #f00 99.99%, #f000) 100% 3.9% / 2.4% 1% no-repeat,
4272
+ radial-gradient(farthest-side at 0% 100%, #f00 99.99%, #f000) 93.2% 0% / 1.6% 1% no-repeat,
4273
+ radial-gradient(78.33% 60.33% at 100% 0%, #f000 99%, #f00) 98% 0.75% / 6.2% 5.25% no-repeat,
4274
+ linear-gradient(#0000 4.7%, #000 0),
4275
+ linear-gradient(90deg, #0000 7.5%, #000 0 92.5%, #0000 0);
4276
+ background:
4277
+ radial-gradient(farthest-side, #2f3638 50%, #0000) -1% 3% / 2% 2%,
4278
+ radial-gradient(farthest-side, #2f3638, #0000) 1% -0.75% / 2% 2%,
4279
+ radial-gradient(95% 70% at 0% 0%, #2f3638 85%, #fff3, #f000) 0.5% 0.75% / 1.55% 5.25% no-repeat,
4280
+ radial-gradient(farthest-side, #2f3638 50%, #0000) 101% 3% / 2% 2%,
4281
+ radial-gradient(farthest-side, #2f3638, #0000) 99% -0.75% / 2% 2%,
4282
+ radial-gradient(95% 70% at 100% 0%, #2f3638 85%, #fff3, #f000) 99.5% 0.75% / 1.55% 5.25% no-repeat,
4283
+ linear-gradient(#0000 1%, #fff3 2%, #0000 4%),
4284
+ linear-gradient(#0000 97%, #0008),
4285
+ radial-gradient(at 0 100%, #2f3638 1%, #0000 10%),
4286
+ radial-gradient(at 100% 100%, #2f3638 1%, #0000 10%),
4287
+ linear-gradient(#fff0 96%, #ffffff08, #fff0 98.5%),
4288
+ linear-gradient(#0000, #0013 5%, #0000 50%),
4289
+ #2f3638;
4290
+ box-shadow:
4291
+ inset 4px 0 3px -3.5px #fff5,
4292
+ inset -4px 0 3px -3.5px #fff5,
4293
+ inset 3px 0 4px -3.5px,
4294
+ inset -3px 0 4px -3.5px;
4295
+ background-repeat: no-repeat;
4296
+ }
4297
+
4298
+ /* Logo: 32.5/1000, 65/1000, 57/1000, 138.5/1000, 5/1000, 20/1000 */
4299
+ .art-csswitch .logo {
4300
+ width: 0.0325em;
4301
+ height: 0.065em;
4302
+ background: radial-gradient(circle at 53.5% 26.5%, #1a1c21 6px, #1a1c2100 0);
4303
+ left: 0.057em;
4304
+ top: 0.1385em;
4305
+ border: 0.005em solid #1a1c21;
4306
+ border-radius: 0.02em 0 0 0.02em;
4307
+ box-shadow: 1px 0.5px 2px -1.5px #fff3;
4308
+ }
4309
+
4310
+ /* Logo right: 95.5/1000, 29/1000, 17.5/1000 */
4311
+ .art-csswitch .logo.right {
4312
+ left: 0.0955em;
4313
+ width: 0.029em;
4314
+ background: radial-gradient(circle at 48% 55%, #1a1c2100 6px, #1a1c21 0);
4315
+ border: 0;
4316
+ border-radius: 0 0.0175em 0.0175em 0;
4317
+ }
4318
+
4319
+ /* font-size: 12/1000 = 0.012em; letter-spacing: 5.5/1000 = 0.0055em */
4320
+ .art-csswitch .nintendo {
4321
+ font-size: 0.012em;
4322
+ left: 51.5%;
4323
+ top: 51.75%;
4324
+ transform: translate(-50%, -50%);
4325
+ font-family: Helvetica, sans-serif;
4326
+ font-weight: 700;
4327
+ letter-spacing: 0.0055em;
4328
+ color: #1a1c21;
4329
+ }
4330
+
4331
+ /* font-size: 21/1000 = 0.021em; letter-spacing: 4/1000 = 0.004em */
4332
+ .art-csswitch .switch {
4333
+ font-size: 0.021em;
4334
+ left: 51%;
4335
+ top: 55.75%;
4336
+ transform: translate(-50%, -50%);
4337
+ font-family: Helvetica, sans-serif;
4338
+ font-weight: 700;
4339
+ letter-spacing: 0.004em;
4340
+ color: #1a1c21;
4341
+ }
4342
+
4343
+ /* Light: 6.5/1000 = 0.0065em; border: 0.75/1000 = 0.00075em */
4344
+ .art-csswitch .light {
4345
+ top: 37.5%;
4346
+ left: 10.25%;
4347
+ border: 0.00075em solid #000c;
4348
+ width: 0.0065em;
4349
+ height: 0.0065em;
4350
+ border-radius: 0.0015em;
4351
+ background:
4352
+ radial-gradient(at 0 0, #0004, #0000),
4353
+ #53565b;
4354
+ box-shadow:
4355
+ inset -1px -1px 2px -1.5px #ffd3,
4356
+ 1px 1.5px 1px -1.25px #fff3;
4357
+ }
4358
+
4359
+ .art-csswitch .light:nth-child(3n),
4360
+ .art-csswitch .light:nth-child(7n) {
4361
+ top: 45.5%;
4362
+ }
4363
+
4364
+ .art-csswitch .light:nth-child(2n),
4365
+ .art-csswitch .light:nth-child(6n) {
4366
+ top: 41.5%;
4367
+ }
4368
+
4369
+ .art-csswitch .light:nth-child(4n),
4370
+ .art-csswitch .light:nth-child(8n) {
4371
+ top: 49.5%;
4372
+ }
4373
+
4374
+ .art-csswitch .light:nth-child(n + 5) {
4375
+ left: auto;
4376
+ right: 10.25%;
4377
+ }
4378
+ }
4379
+
4380
+ /* ── Mobile: Joy-Con bar connector visible ── */
4381
+ @media (max-width: 670px) {
4382
+ .art-csswitch {
4383
+ width: calc(var(--art-csswitch-size) * 0.45);
4384
+ }
4385
+
4386
+ .art-csswitch .comfort-grip {
4387
+ display: none;
4388
+ }
4389
+
4390
+ .art-csswitch .controller {
4391
+ --connection: 0 0 0 #0000;
4392
+ left: 0;
4393
+ }
4394
+
4395
+ .art-csswitch .controller.right {
4396
+ --connection: 0 0 0 #0000;
4397
+ right: 0;
4398
+ }
4399
+
4400
+ .art-csswitch .controller::before {
4401
+ content: none;
4402
+ }
4403
+
4404
+ /* bar: 50/1000 = 0.05em */
4405
+ .art-csswitch .bar {
4406
+ display: block;
4407
+ top: 0.25%;
4408
+ left: 100%;
4409
+ width: 0.05em;
4410
+ height: 98%;
4411
+ }
4412
+
4413
+ .art-csswitch .controller.right .bar {
4414
+ left: auto;
4415
+ right: 100%;
4416
+ transform: scalex(-1);
4417
+ }
4418
+
4419
+ /* bar button: left: 10/1000 = 0.01em */
4420
+ .art-csswitch .bar button {
4421
+ width: 100%;
4422
+ height: 14.25%;
4423
+ left: 0.01em;
4424
+ border-radius: 4px;
4425
+ background:
4426
+ radial-gradient(20% 100% at 100% 50%, #0008 30%, #31333800 40%),
4427
+ radial-gradient(20% 100% at 100% 50%, #232629 40%, #23262900 60%),
4428
+ linear-gradient(#232629 5%, #fff7, #414649 25% 75%, #232629);
4429
+ }
4430
+
4431
+ .art-csswitch .sub-lr {
4432
+ top: 19.75%;
4433
+ }
4434
+
4435
+ .art-csswitch .sub-rr {
4436
+ top: 60.25%;
4437
+ }
4438
+
4439
+ /* minus-sign: 21/1000, 5.5/1000, 38/1000, 7.25/1000 */
4440
+ .art-csswitch .minus-sign {
4441
+ width: 0.021em;
4442
+ height: 0.0055em;
4443
+ background: #343a3b;
4444
+ top: 0.038em;
4445
+ left: 0.00725em;
4446
+ border-radius: 0.00075em;
4447
+ box-shadow:
4448
+ inset 0 0 2px #2f3638,
4449
+ 0 1px 3px -1.5px #fff4;
4450
+ }
4451
+
4452
+ /* plus sign arm: 5.5/1000, 21/1000 */
4453
+ .art-csswitch .controller.right .minus-sign::before {
4454
+ content: "";
4455
+ width: 0.0055em;
4456
+ height: 0.021em;
4457
+ top: 50%;
4458
+ left: 50%;
4459
+ transform: translate(-50%, -50%);
4460
+ background: inherit;
4461
+ box-shadow:
4462
+ inset 0 0 2px #2f3638,
4463
+ 0 3px 3px -2px #fff4;
4464
+ }
4465
+
4466
+ .art-csswitch .peripheral {
4467
+ top: 0;
4468
+ left: 0;
4469
+ width: 100%;
4470
+ height: 100%;
4471
+ border-radius: 3px 120px 110px 0 / 6px 120px 110px 0;
4472
+ background: #3f4648;
4473
+ box-shadow:
4474
+ inset 2px 0 3px -1px #000c,
4475
+ inset -5px 5px 5px #303538,
4476
+ inset -10px -5px 5px #303538,
4477
+ inset -5px 9px 5px #fff4;
4478
+ -webkit-mask:
4479
+ radial-gradient(95% 250% at 100% 64%, #0000 7%, #f00 7.5%) 100% 0 / 100% 42% no-repeat,
4480
+ radial-gradient(95% 250% at 100% 67.5%, #0000 7%, #f00 7.5%) 100% 67.25% / 100% 42% no-repeat,
4481
+ radial-gradient(160% 20% at 0 100%, #0000 38%, #f00 38.5%) 0 100% / 40% 50% no-repeat,
4482
+ radial-gradient(160% 30% at 110% 101%, #0000 65%, #f00 0) 100% 100% / 62% 25% no-repeat;
4483
+ clip-path: polygon(0 0, 100% 0, 100% 100%, 29% 100%, 0% 96%);
4484
+ }
4485
+
4486
+ .art-csswitch .cord {
4487
+ width: 12px;
4488
+ height: 100vh;
4489
+ left: 47%;
4490
+ top: 30%;
4491
+ background:
4492
+ linear-gradient(#000 33%, #0000 34%) 50% 50% / 11px 100%,
4493
+ linear-gradient(#0009 32%, #0000 38%) 50% 50% / 11px 100%,
4494
+ linear-gradient(90deg, #0000, #6666, #0000),
4495
+ linear-gradient(45deg, #253a3e, #21212c, #656a6e, #253a3e) 0.5px 0 / 6px 6px,
4496
+ linear-gradient(-45deg, #253a3e, #31313c, #707070, #253a3e) 5.5px 3px / 6px 6px,
4497
+ radial-gradient(farthest-side, #353a3ecc 99.99%, #f000) 50% 50% / 12px 8px;
4498
+ background-repeat: repeat-y;
4499
+ }
4500
+ }
4501
+
4502
+ /* ── Small mobile: connector segments ── */
4503
+ @media (max-width: 460px) {
4504
+ .art-csswitch {
4505
+ width: 90%;
4506
+ min-width: 320px;
4507
+ }
4508
+
4509
+ /* connector: 22/1000, 13.5/1000, 358/1000 */
4510
+ .art-csswitch .connector {
4511
+ display: block;
4512
+ top: 0.022em;
4513
+ left: calc(100% - 1px);
4514
+ width: 0.0135em;
4515
+ height: 0.358em;
4516
+ z-index: -1;
4517
+ }
4518
+
4519
+ .art-csswitch .controller.right .connector {
4520
+ transform: scaleX(-1);
4521
+ left: auto;
4522
+ right: calc(100% - 1px);
4523
+ }
4524
+
4525
+ .art-csswitch .con-lr,
4526
+ .art-csswitch .con-rr {
4527
+ width: 90%;
4528
+ height: 9.75%;
4529
+ background: var(--color);
4530
+ top: 25.25%;
4531
+ right: 0;
4532
+ transform: translateY(-50%);
4533
+ border-radius: 2px;
4534
+ box-shadow:
4535
+ inset -1.5px -2px 4px -1px #0005,
4536
+ inset -1px 1px 2px -1.5px #0006;
4537
+ }
4538
+
4539
+ .art-csswitch .con-rr {
4540
+ top: 73%;
4541
+ }
4542
+
4543
+ .art-csswitch .con-part {
4544
+ width: 100%;
4545
+ height: 100%;
4546
+ top: 0;
4547
+ left: 0px;
4548
+ }
4549
+
4550
+ .art-csswitch .con-part::after {
4551
+ content: "";
4552
+ width: 60%;
4553
+ right: 0;
4554
+ height: 100%;
4555
+ top: 0;
4556
+ box-shadow:
4557
+ inset -3px 2px 2px -1px #0008,
4558
+ inset 0 4px 1px -2px #0007,
4559
+ inset 0 3px 1px #fff7;
4560
+ background:
4561
+ linear-gradient(#0002, #0000, #0002),
4562
+ #42484d;
4563
+ border-radius: 2px 4px 3px 3px / 2px 4px 3px 10px;
4564
+ clip-path: polygon(0 0, 100% 0, 100% 18%, 70% 20%, 70% 31%, 100% 33%, 100% 65.5%, 70% 67.5%, 70% 78.5%, 100% 80.5%, 100% 100%, 0 100%);
4565
+ }
4566
+
4567
+ .art-csswitch .con-part::before {
4568
+ content: "";
4569
+ width: 60%;
4570
+ left: 0;
4571
+ height: 95%;
4572
+ top: 0;
4573
+ background:
4574
+ linear-gradient(90deg, #000, #0000 20% 40%, #000 60%),
4575
+ linear-gradient(#6e7474 0.66%, #0008 0, #6e7474cc 1.5%, #000c 2.5%, #0000 0),
4576
+ #1b2827;
4577
+ }
4578
+
4579
+ .art-csswitch .bar {
4580
+ display: none;
4581
+ }
4582
+ }
4583
+
4584
+ /* ── Tiny: single Joy-Con only ── */
4585
+ @media (max-width: 360px) {
4586
+ /* 151/1000 = 0.151em */
4587
+ .art-csswitch {
4588
+ width: 0.151em;
4589
+ min-width: 0.151em;
4590
+ }
4591
+
4592
+ .art-csswitch .controller.right {
4593
+ display: none;
4594
+ }
4595
+ }
4596
+
4597
+ /* Size variants */
4598
+ .art-csswitch-sm {
4599
+ --art-csswitch-size: 500px;
4600
+ }
4601
+
4602
+ .art-csswitch-lg {
4603
+ --art-csswitch-size: 1000px;
4604
+ }
4605
+ }
4606
+
3322
4607
 
3323
4608