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