@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.
@@ -0,0 +1,936 @@
1
+ @layer css-art {
2
+ .art-csswitch {
3
+ --art-csswitch-size: 800px;
4
+ --joycon-left: #00c5e2;
5
+ --joycon-left-shadow: #0128;
6
+ --joycon-right: #ff6658;
7
+ --joycon-right-shadow: #c218;
8
+
9
+ position: relative;
10
+ isolation: isolate;
11
+ font-size: var(--art-csswitch-size);
12
+ width: var(--art-csswitch-size);
13
+ max-width: var(--art-csswitch-size);
14
+ height: calc(var(--art-csswitch-size) * 0.4256);
15
+ background: #f000;
16
+ }
17
+
18
+ .art-csswitch *,
19
+ .art-csswitch *::before,
20
+ .art-csswitch *::after {
21
+ position: absolute;
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ .art-csswitch :focus {
26
+ outline: 1px dashed;
27
+ outline-offset: 2px;
28
+ }
29
+
30
+ .art-csswitch .round {
31
+ border-radius: 50%;
32
+ }
33
+
34
+ .art-csswitch .comfort-grip,
35
+ .art-csswitch .connector {
36
+ display: none;
37
+ }
38
+
39
+ /* body + 2×controller ≈ 0.721em + 2×0.1385em = 0.998em ≈ font-size → fills the root */
40
+ .art-csswitch .body {
41
+ bottom: 0;
42
+ left: 50%;
43
+ transform: translateX(-50%);
44
+ width: 0.721em;
45
+ height: 99%;
46
+ }
47
+
48
+ .art-csswitch .frame {
49
+ width: 100%;
50
+ height: 100%;
51
+ border-radius: 2px;
52
+ background:
53
+ radial-gradient(farthest-side, #2f3638 50%, #0000) -1% 3% / 2% 2%,
54
+ radial-gradient(farthest-side, #2f3638, #0000) 1% -0.75% / 2% 2%,
55
+ radial-gradient(95% 70% at 0% 0%, #2f3638 85%, #fff3, #f000) 0.5% 0.75% / 1.55% 5.25% no-repeat,
56
+ radial-gradient(farthest-side, #2f3638 50%, #0000) 101% 3% / 2% 2%,
57
+ radial-gradient(farthest-side, #2f3638, #0000) 99% -0.75% / 2% 2%,
58
+ radial-gradient(95% 70% at 100% 0%, #2f3638 85%, #fff3, #f000) 99.5% 0.75% / 1.55% 5.25% no-repeat,
59
+ linear-gradient(#0000 1%, #fff3 2%, #0000 4%),
60
+ linear-gradient(#0000 95%, #0008),
61
+ #2f3638;
62
+ background-repeat: no-repeat;
63
+ box-shadow:
64
+ inset -1.5px 0 0.75px -0.75px #fff5,
65
+ inset 1.5px 0 0.75px -0.75px #fff6;
66
+ -webkit-mask:
67
+ radial-gradient(farthest-side at 100% 100%, #f00 99.99%, #f000) 0 3.9% / 0.6% 1% no-repeat,
68
+ radial-gradient(farthest-side at 100% 100%, #f00 99.99%, #f000) 1.7% 0% / 0.4% 1% no-repeat,
69
+ radial-gradient(78.33% 60.33% at 0% 0%, #f000 99%, #f00) 0.5% 0.75% / 1.55% 5.25% no-repeat,
70
+ radial-gradient(farthest-side at 0% 100%, #f00 99.99%, #f000) 100% 3.9% / 0.6% 1% no-repeat,
71
+ radial-gradient(farthest-side at 0% 100%, #f00 99.99%, #f000) 98.3% 0% / 0.4% 1% no-repeat,
72
+ radial-gradient(78.33% 60.33% at 100% 0%, #f000 99%, #f00) 99.5% 0.75% / 1.55% 5.25% no-repeat,
73
+ linear-gradient(#0000 4.7%, #000 0),
74
+ linear-gradient(90deg, #0000 1.9%, #000 0 98.1%, #0000 0);
75
+ }
76
+
77
+ .art-csswitch .frame::before {
78
+ content: "";
79
+ top: 50%;
80
+ left: 50%;
81
+ transform: translate(-50%, -50%);
82
+ width: 94%;
83
+ height: 93%;
84
+ border-radius: 11px;
85
+ border: 0.3px solid #000;
86
+ box-shadow:
87
+ 0 0.45px 1px #fff8,
88
+ inset 0 0.6px 1.5px -0.25px #000,
89
+ inset 0 0.7px 1.5px -0.25px #fffc;
90
+ background:
91
+ radial-gradient(circle at 32.7% 98%, #0e0e0e 0.9%, #000 0 1%, #0e0e0e 0 1.2%, #0000 0),
92
+ linear-gradient(#0e0e0e 0 0) 32.33% 100% / 2.1% 2% no-repeat,
93
+ #000;
94
+ }
95
+
96
+ .art-csswitch .screen {
97
+ top: 50%;
98
+ left: 50%;
99
+ transform: translate(-50%, -50%);
100
+ width: 80%;
101
+ height: 77.5%;
102
+ border-radius: 1.5px;
103
+ background: #292d30;
104
+ box-shadow: inset 0 1.5px 5px -1.5px #000c;
105
+ }
106
+
107
+ .art-csswitch .controller {
108
+ --color: var(--joycon-left);
109
+ --color-shadow: var(--joycon-left-shadow);
110
+ /* em units: 20/1000, 10.5/1000, -12.3/1000 */
111
+ --connection: 0.02em 0.0105em 0 -0.0123em #020100;
112
+ width: 0.1385em;
113
+ height: 99%;
114
+ bottom: 0;
115
+ left: 0;
116
+ border-radius: 90px 4px 2px 90px;
117
+ background: var(--color);
118
+ box-shadow:
119
+ var(--connection),
120
+ inset 1px -9px 10px -3px #0125,
121
+ inset 35px 0 25px -25px #0002,
122
+ inset -2px 0 4px var(--color),
123
+ inset 6px 16px 5px -8px var(--color),
124
+ inset 0 17px 5px -8px #fff,
125
+ inset 5px -5px 10px -4px var(--color-shadow);
126
+ }
127
+
128
+ .art-csswitch .controller::before {
129
+ content: "";
130
+ width: 0.00275em;
131
+ aspect-ratio: 1;
132
+ background: #393537;
133
+ box-shadow: inset 0.1px 0.75px 0.4px #fff3;
134
+ left: 100%;
135
+ top: 97.75%;
136
+ border-radius: 50%;
137
+ }
138
+
139
+ .art-csswitch .controller.right {
140
+ --color: var(--joycon-right);
141
+ --color-shadow: var(--joycon-right-shadow);
142
+ --connection: -0.02em 0.0105em 0 -0.0123em #020100;
143
+ left: auto;
144
+ right: 0;
145
+ border-radius: 4px 90px 90px 2px;
146
+ box-shadow:
147
+ var(--connection),
148
+ inset -0.001em -0.009em 0.01em -0.003em #2107,
149
+ inset -0.035em 0 0.025em -0.025em #0002,
150
+ inset 0.002em 0 0.004em var(--color),
151
+ inset -0.006em 0.016em 0.005em -0.008em var(--color),
152
+ inset 0 0.017em 0.005em -0.008em #fff,
153
+ inset -0.01em 0 0.01em -0.004em var(--color-shadow);
154
+ }
155
+
156
+ .art-csswitch .controller.right::before {
157
+ left: auto;
158
+ right: 100%;
159
+ box-shadow: inset -0.0001em 0.00075em 0.0004em #fff3;
160
+ }
161
+
162
+ .art-csswitch button {
163
+ border: 0;
164
+ font-size: 1em;
165
+ padding: 0;
166
+ }
167
+
168
+ .art-csswitch .bar {
169
+ display: none;
170
+ }
171
+
172
+ .art-csswitch .minus {
173
+ --c: #404040;
174
+ width: 17%;
175
+ height: 1.8%;
176
+ background: var(--c);
177
+ top: 8.9%;
178
+ right: 7.7%;
179
+ border-radius: 0.0015em;
180
+ border: 0.001em solid var(--color-shadow);
181
+ box-shadow:
182
+ inset 1px -1px 1px #0008,
183
+ inset -1px 0 1px #0003,
184
+ inset 0 1px 1px #fff6,
185
+ 0 2px 2px -1px #0006;
186
+ }
187
+
188
+ .art-csswitch .plus {
189
+ left: 7.7%;
190
+ right: auto;
191
+ }
192
+
193
+ .art-csswitch .plus::before {
194
+ content: "";
195
+ width: 37.5%;
196
+ height: 410%;
197
+ background: var(--c);
198
+ top: 50%;
199
+ left: 50%;
200
+ transform: translate(-50%, -50%);
201
+ border-radius: 0.0015em;
202
+ border: 0.001em solid var(--color-shadow);
203
+ box-shadow:
204
+ 0 0.004em 0.02em var(--color-shadow),
205
+ inset -0.0006em 0 0.0004em #0007,
206
+ inset 0.0006em 0 0.0004em #0007,
207
+ inset 0 -0.001em 0.0005em -0.0002em #0008,
208
+ inset 0 0.00075em 0.0005em -0.0002em #fff6;
209
+ }
210
+
211
+ .art-csswitch .plus::after {
212
+ content: "";
213
+ width: 35%;
214
+ aspect-ratio: 1;
215
+ background:
216
+ radial-gradient(circle at 0 0, #834 20%, #0000 20% 35%, var(--c) 0) 0 0 / 50% 50%,
217
+ conic-gradient(at 0 0, #000, #fff) 1% 1% / 40% 40%,
218
+ radial-gradient(circle at 100% 0, #834 20%, #0000 20% 35%, var(--c) 0) 100% 0 / 50% 50%,
219
+ conic-gradient(at 100% 0, #fff 25%, #000) 99% 1% / 40% 40%,
220
+ radial-gradient(circle at 0% 100%, #834 20%, #0000 20% 35%, var(--c) 0) 1% 99% / 50% 50%,
221
+ radial-gradient(at 0% 100%, #0008, #0000) 1% 99% / 40% 40%,
222
+ radial-gradient(circle at 100% 100%, #834 20%, #0000 20% 35%, var(--c) 0) 99% 99% / 50% 50%,
223
+ radial-gradient(at 100% 100%, #0008, #0000) 100% 99% / 40% 40%,
224
+ var(--c);
225
+ background-repeat: no-repeat;
226
+ top: 50%;
227
+ left: 50%;
228
+ transform: translate(-50%, -50%);
229
+ }
230
+
231
+ .art-csswitch .mushroom {
232
+ width: 47%;
233
+ aspect-ratio: 1;
234
+ border: 0.001em solid var(--color-shadow);
235
+ top: 17.5%;
236
+ left: 30%;
237
+ background:
238
+ radial-gradient(circle at 50% 0, #6669, #6660 60%),
239
+ #2a2e31;
240
+ box-shadow:
241
+ inset 0 0.0001em 0.00125em -0.0005em var(--color),
242
+ inset 0 0.003em 0.003em #0004,
243
+ inset 0 -0.005em 0.003em #0006,
244
+ 0 -0.0009em 0.001em 0.001em #0003,
245
+ 0 0.00075em 0.001em 0.001em #0003,
246
+ 0 0.01em 0.01em -0.0025em #0004,
247
+ 0 0.025em 0.035em var(--color-shadow);
248
+ }
249
+
250
+ .art-csswitch .right .mushroom {
251
+ top: 45.25%;
252
+ left: 23.25%;
253
+ }
254
+
255
+ .art-csswitch .mushroom::before {
256
+ content: "";
257
+ width: 80%;
258
+ aspect-ratio: 1;
259
+ top: 50%;
260
+ left: 50%;
261
+ transform: translate(-50%, -50%);
262
+ border-radius: 50%;
263
+ background: radial-gradient(circle at 50% 0, #6669, #6660 60%);
264
+ box-shadow:
265
+ inset 0 0 0.001em #0008,
266
+ inset 0 0.002em 0.002em #0008,
267
+ inset 0 -0.001em 0.001em 0.001em #fff4,
268
+ 0 0.001em 0.001em #fff2,
269
+ 0 -0.0007em 0.001em 0.0006em #0008,
270
+ 0 -0.0025em 0.0015em 0.0006em #fff2;
271
+ }
272
+
273
+ .art-csswitch .mushroom::after {
274
+ content: "";
275
+ width: 95%;
276
+ aspect-ratio: 1;
277
+ top: 50%;
278
+ left: 50%;
279
+ transform: translate(-50%, -50%);
280
+ border-radius: 50%;
281
+ background:
282
+ linear-gradient(90deg, #000, #0000 20% 80%, #000) 50% 0 / 3% 12%,
283
+ linear-gradient(#000 5%, #444 15% 30%, #666 50%, #3c3c3c, #484848) 50% 0 / 3% 12%,
284
+ linear-gradient(#0000 30% 90%, #fff) 0% 50% / 12% 3%,
285
+ linear-gradient(#000, #0000 30% 70%, #000) 0% 50% / 12% 3%,
286
+ linear-gradient(90deg, #fff4, #222 10% 50%, #444) 0% 50% / 12% 3%,
287
+ linear-gradient(#0000 30% 90%, #fff) 100% 50% / 12% 3%,
288
+ linear-gradient(#000, #0000 30% 70%, #000) 100% 50% / 12% 3%,
289
+ linear-gradient(to left, #fff4, #222 10% 50%, #444) 100% 50% / 12% 3%,
290
+ linear-gradient(90deg, #000, #0000 20% 80%, #000) 50% 100% / 3% 12%,
291
+ linear-gradient(to top, #fff4, #111 15% 50%, #444) 50% 100% / 3% 12%,
292
+ #f000;
293
+ background-repeat: no-repeat;
294
+ }
295
+
296
+ .art-csswitch .direction {
297
+ display: grid;
298
+ place-items: center;
299
+ width: 23%;
300
+ aspect-ratio: 1;
301
+ border: 0.0007em solid var(--color-shadow);
302
+ background:
303
+ linear-gradient(#fff2, #fff0),
304
+ #35393c;
305
+ box-shadow:
306
+ 0 0.002em 0.007em var(--color-shadow),
307
+ inset 0 0.0001em 0.0015em -0.0005em var(--color),
308
+ inset 0 0 0.0005em 0.001em #323439,
309
+ inset 0 0.002em 0.001em 0.0002em #def5,
310
+ inset 0 -0.001em 0.0005em 0.0002em #000,
311
+ inset 0 -0.001em 0.001em 0.002em #000c;
312
+ }
313
+
314
+ .art-csswitch .direction::before {
315
+ font-size: 0.0175em;
316
+ font-family: Helvetica, sans-serif;
317
+ color: #fffa;
318
+ }
319
+
320
+ .art-csswitch .arrow::before,
321
+ .art-csswitch .arrow::after {
322
+ content: "";
323
+ width: 40%;
324
+ top: 50%;
325
+ left: 50%;
326
+ transform: translate(-50%, -50%);
327
+ aspect-ratio: 1;
328
+ border-radius: 50%;
329
+ background: #252525;
330
+ clip-path: polygon(52% -2%, 100% 80%, 0 80%, 48% -2%);
331
+ }
332
+
333
+ .art-csswitch .arrow::before {
334
+ top: 51.5%;
335
+ background: #fff3;
336
+ filter: blur(0.01em);
337
+ }
338
+
339
+ .art-csswitch .arrow.right::before,
340
+ .art-csswitch .arrow.right::after {
341
+ transform: translate(-50%, -50%) rotate(90deg);
342
+ }
343
+
344
+ .art-csswitch .arrow.left::before,
345
+ .art-csswitch .arrow.left::after {
346
+ transform: translate(-50%, -50%) rotate(-90deg);
347
+ }
348
+
349
+ .art-csswitch .arrow.down::before,
350
+ .art-csswitch .arrow.down::after {
351
+ transform: translate(-50%, -50%) rotate(180deg);
352
+ }
353
+
354
+ .art-csswitch .direction.up {
355
+ top: 41.75%;
356
+ left: 41.9%;
357
+ }
358
+
359
+ .art-csswitch .direction.down {
360
+ top: 56.6%;
361
+ left: 41.9%;
362
+ }
363
+
364
+ .art-csswitch .direction.left {
365
+ left: 18.25%;
366
+ top: 49.25%;
367
+ }
368
+
369
+ .art-csswitch .direction.right {
370
+ left: 65.75%;
371
+ top: 49.25%;
372
+ }
373
+
374
+ .art-csswitch .direction.x {
375
+ top: 14%;
376
+ left: 35%;
377
+ }
378
+
379
+ .art-csswitch .direction.x::before {
380
+ content: "X";
381
+ }
382
+
383
+ .art-csswitch .direction.y {
384
+ top: 21.5%;
385
+ left: 11.25%;
386
+ }
387
+
388
+ .art-csswitch .direction.y::before {
389
+ content: "Y";
390
+ }
391
+
392
+ .art-csswitch .direction.a {
393
+ top: 21.5%;
394
+ left: 59%;
395
+ }
396
+
397
+ .art-csswitch .direction.a::before {
398
+ content: "A";
399
+ }
400
+
401
+ .art-csswitch .direction.b {
402
+ top: 29%;
403
+ left: 35%;
404
+ }
405
+
406
+ .art-csswitch .direction.b::before {
407
+ content: "B";
408
+ }
409
+
410
+ .art-csswitch .menu {
411
+ width: 19.35%;
412
+ aspect-ratio: 1;
413
+ border: 0.0009em solid var(--color-shadow);
414
+ top: 68.5%;
415
+ left: 60.5%;
416
+ border-radius: 0.003em;
417
+ background: #464b50;
418
+ box-shadow:
419
+ inset 0 0.001em 0.001em -0.0005em #fff6,
420
+ inset 0 -0.001em 0.001em -0.0005em #0006;
421
+ }
422
+
423
+ .art-csswitch .menu::before {
424
+ content: "";
425
+ width: 67%;
426
+ aspect-ratio: 1;
427
+ background: #33393c;
428
+ left: 50%;
429
+ top: 50%;
430
+ transform: translate(-50%, -50%);
431
+ border-radius: 50%;
432
+ box-shadow:
433
+ inset 0 0.0009em 0.00075em #0008,
434
+ 0 0.0008em 0.00075em #fff5;
435
+ }
436
+
437
+ .art-csswitch .lr {
438
+ background: linear-gradient(#4c5153 50%, #030405 60%);
439
+ top: -1%;
440
+ right: 18%;
441
+ width: 83.5%;
442
+ height: 21%;
443
+ border-radius: 100em 2em 0 0;
444
+ clip-path: ellipse(140% 87% at 100% 0%);
445
+ box-shadow:
446
+ inset -0.004em 0 0.003em -0.003em #333,
447
+ inset -0.007em 0 0.003em -0.003em #4c5153,
448
+ inset 0 0.0015em 0.001em #444,
449
+ inset -0.001em 0.00175em 0.001em #fff;
450
+ z-index: -1;
451
+ }
452
+
453
+ .art-csswitch .lr.rr {
454
+ left: 18%;
455
+ right: auto;
456
+ transform: scaleX(-1);
457
+ }
458
+
459
+ .art-csswitch .volume {
460
+ width: 8.5%;
461
+ height: 0.7%;
462
+ background: linear-gradient(#444, #222);
463
+ left: 13.3%;
464
+ top: -0.6%;
465
+ border-radius: 0.0005em 0.0005em 0 0;
466
+ clip-path: polygon(-20% -100%, 32% -100%, 32% 0, 33% 35%, 66% 35%, 67% 0%, 67% -100%, 110% -100%, 110% 120%, -20% 120%);
467
+ z-index: -1;
468
+ }
469
+
470
+ .art-csswitch .home {
471
+ top: 67.6%;
472
+ left: 17.5%;
473
+ display: grid;
474
+ place-items: center;
475
+ width: 25%;
476
+ aspect-ratio: 1;
477
+ border: 0.0007em solid var(--color-shadow);
478
+ background:
479
+ linear-gradient(#0001, #0005),
480
+ radial-gradient(#0000 52.5%, #9c9a9a 54%),
481
+ #404547;
482
+ }
483
+
484
+ .art-csswitch .home::before {
485
+ content: "";
486
+ top: 23%;
487
+ left: 50%;
488
+ transform: translate(-50%, 0);
489
+ width: 50%;
490
+ height: 24.5%;
491
+ background: conic-gradient(at 50% 0, #0000 132deg, #010202 0 228deg, #0000 0);
492
+ box-shadow: 0 0.5px 0.75px -0.25px #fff8;
493
+ }
494
+
495
+ .art-csswitch .home::after {
496
+ content: "";
497
+ color: #010202;
498
+ top: 46%;
499
+ left: 50%;
500
+ transform: translate(-50%, 0);
501
+ width: 39%;
502
+ height: 24.5%;
503
+ box-shadow:
504
+ inset -0.004em 0,
505
+ inset 0.004em 0,
506
+ inset 0 -0.004em 0,
507
+ 0 0.5px 0.75px -0.25px #fff5;
508
+ }
509
+
510
+ .art-csswitch button:active,
511
+ .art-csswitch .plus:active::before,
512
+ .art-csswitch .plus:active::after,
513
+ .art-csswitch .active {
514
+ background: yellow !important;
515
+ }
516
+
517
+ /* ── Tablet: grip stand mode, body hidden ── */
518
+ @media (max-width: 1010px) {
519
+ .art-csswitch {
520
+ width: calc(var(--art-csswitch-size) * 0.663);
521
+ }
522
+
523
+ /* 102/1000 = 0.102em — controllers inset from edges */
524
+ .art-csswitch .controller {
525
+ left: 0.102em;
526
+ }
527
+
528
+ .art-csswitch .controller.right {
529
+ right: 0.102em;
530
+ }
531
+
532
+ .art-csswitch .body {
533
+ display: none;
534
+ }
535
+
536
+ .art-csswitch .comfort-grip {
537
+ display: block;
538
+ width: 100%;
539
+ height: 0.461em; /* 461/1000 */
540
+ }
541
+
542
+ .art-csswitch .grip {
543
+ width: 24%;
544
+ height: 82.5%;
545
+ bottom: 7.5%;
546
+ left: 0%;
547
+ transform: rotate(12deg);
548
+ background:
549
+ radial-gradient(50% 100% at 69% 50%, #fff1, #fff0 50%),
550
+ radial-gradient(100% 100% at 60% 60%, #ffffff18, #fff0 30%),
551
+ linear-gradient(#0000, #0003),
552
+ #2f3638;
553
+ border-radius: 120% 120% 170% 125% / 120% 120% 140% 110%;
554
+ transform-origin: 50% 100%;
555
+ box-shadow:
556
+ inset 25px 20px 20px -10px #00050ccc,
557
+ inset -20px -10px 30px -10px #0008,
558
+ inset 32px 50px 15px -15px #fff5,
559
+ inset 0 0 50px #0008;
560
+ }
561
+
562
+ .art-csswitch .grip.right {
563
+ left: auto;
564
+ right: 0;
565
+ transform: scaleX(-1) rotate(12deg);
566
+ }
567
+
568
+ .art-csswitch .comfort-grip ~ .comfort-grip {
569
+ height: 100%;
570
+ }
571
+
572
+ .art-csswitch .holder {
573
+ width: 70%;
574
+ height: 0.365em; /* 365/1000 */
575
+ background: #2f3638;
576
+ top: 13%;
577
+ left: 50%;
578
+ transform: translateX(-50%);
579
+ border-radius: 7% 7% 250px 250px / 10% 10% 26% 26%;
580
+ box-shadow:
581
+ inset 2px -10px 2px -1px #000,
582
+ inset -2px -10px 2px 0px #000,
583
+ -1px 1px 2px -1.5px #fffc,
584
+ 0 40px 0 -20px #000c,
585
+ -3px 10px 10px 3px #2f3638,
586
+ 1px 1px 2px -1.5px #fffc,
587
+ 2px 10px 10px 3px #2f3638;
588
+ clip-path: polygon(-100% 0%, 200% 0%, 200% 100%, 66% 100%, 65.75% 100.75%, 34.25% 100.75%, 34% 100%, -100% 100%);
589
+ }
590
+
591
+ .art-csswitch .main-frame {
592
+ width: 0.181em; /* 181/1000 */
593
+ height: 99%;
594
+ bottom: 0%;
595
+ left: 50%;
596
+ transform: translate(-50%, 0);
597
+ border-radius: 2px;
598
+ -webkit-mask:
599
+ radial-gradient(farthest-side at 100% 100%, #f00 99.99%, #f000) 0 3.9% / 2.4% 1% no-repeat,
600
+ radial-gradient(farthest-side at 100% 100%, #f00 99.99%, #f000) 6.8% 0% / 1.6% 1% no-repeat,
601
+ radial-gradient(78.33% 60.33% at 0% 0%, #f000 99%, #f00) 2% 0.75% / 6.2% 5.25% no-repeat,
602
+ radial-gradient(farthest-side at 0% 100%, #f00 99.99%, #f000) 100% 3.9% / 2.4% 1% no-repeat,
603
+ radial-gradient(farthest-side at 0% 100%, #f00 99.99%, #f000) 93.2% 0% / 1.6% 1% no-repeat,
604
+ radial-gradient(78.33% 60.33% at 100% 0%, #f000 99%, #f00) 98% 0.75% / 6.2% 5.25% no-repeat,
605
+ linear-gradient(#0000 4.7%, #000 0),
606
+ linear-gradient(90deg, #0000 7.5%, #000 0 92.5%, #0000 0);
607
+ background:
608
+ radial-gradient(farthest-side, #2f3638 50%, #0000) -1% 3% / 2% 2%,
609
+ radial-gradient(farthest-side, #2f3638, #0000) 1% -0.75% / 2% 2%,
610
+ radial-gradient(95% 70% at 0% 0%, #2f3638 85%, #fff3, #f000) 0.5% 0.75% / 1.55% 5.25% no-repeat,
611
+ radial-gradient(farthest-side, #2f3638 50%, #0000) 101% 3% / 2% 2%,
612
+ radial-gradient(farthest-side, #2f3638, #0000) 99% -0.75% / 2% 2%,
613
+ radial-gradient(95% 70% at 100% 0%, #2f3638 85%, #fff3, #f000) 99.5% 0.75% / 1.55% 5.25% no-repeat,
614
+ linear-gradient(#0000 1%, #fff3 2%, #0000 4%),
615
+ linear-gradient(#0000 97%, #0008),
616
+ radial-gradient(at 0 100%, #2f3638 1%, #0000 10%),
617
+ radial-gradient(at 100% 100%, #2f3638 1%, #0000 10%),
618
+ linear-gradient(#fff0 96%, #ffffff08, #fff0 98.5%),
619
+ linear-gradient(#0000, #0013 5%, #0000 50%),
620
+ #2f3638;
621
+ box-shadow:
622
+ inset 4px 0 3px -3.5px #fff5,
623
+ inset -4px 0 3px -3.5px #fff5,
624
+ inset 3px 0 4px -3.5px,
625
+ inset -3px 0 4px -3.5px;
626
+ background-repeat: no-repeat;
627
+ }
628
+
629
+ /* Logo: 32.5/1000, 65/1000, 57/1000, 138.5/1000, 5/1000, 20/1000 */
630
+ .art-csswitch .logo {
631
+ width: 0.0325em;
632
+ height: 0.065em;
633
+ background: radial-gradient(circle at 53.5% 26.5%, #1a1c21 6px, #1a1c2100 0);
634
+ left: 0.057em;
635
+ top: 0.1385em;
636
+ border: 0.005em solid #1a1c21;
637
+ border-radius: 0.02em 0 0 0.02em;
638
+ box-shadow: 1px 0.5px 2px -1.5px #fff3;
639
+ }
640
+
641
+ /* Logo right: 95.5/1000, 29/1000, 17.5/1000 */
642
+ .art-csswitch .logo.right {
643
+ left: 0.0955em;
644
+ width: 0.029em;
645
+ background: radial-gradient(circle at 48% 55%, #1a1c2100 6px, #1a1c21 0);
646
+ border: 0;
647
+ border-radius: 0 0.0175em 0.0175em 0;
648
+ }
649
+
650
+ /* font-size: 12/1000 = 0.012em; letter-spacing: 5.5/1000 = 0.0055em */
651
+ .art-csswitch .nintendo {
652
+ font-size: 0.012em;
653
+ left: 51.5%;
654
+ top: 51.75%;
655
+ transform: translate(-50%, -50%);
656
+ font-family: Helvetica, sans-serif;
657
+ font-weight: 700;
658
+ letter-spacing: 0.0055em;
659
+ color: #1a1c21;
660
+ }
661
+
662
+ /* font-size: 21/1000 = 0.021em; letter-spacing: 4/1000 = 0.004em */
663
+ .art-csswitch .switch {
664
+ font-size: 0.021em;
665
+ left: 51%;
666
+ top: 55.75%;
667
+ transform: translate(-50%, -50%);
668
+ font-family: Helvetica, sans-serif;
669
+ font-weight: 700;
670
+ letter-spacing: 0.004em;
671
+ color: #1a1c21;
672
+ }
673
+
674
+ /* Light: 6.5/1000 = 0.0065em; border: 0.75/1000 = 0.00075em */
675
+ .art-csswitch .light {
676
+ top: 37.5%;
677
+ left: 10.25%;
678
+ border: 0.00075em solid #000c;
679
+ width: 0.0065em;
680
+ height: 0.0065em;
681
+ border-radius: 0.0015em;
682
+ background:
683
+ radial-gradient(at 0 0, #0004, #0000),
684
+ #53565b;
685
+ box-shadow:
686
+ inset -1px -1px 2px -1.5px #ffd3,
687
+ 1px 1.5px 1px -1.25px #fff3;
688
+ }
689
+
690
+ .art-csswitch .light:nth-child(3n),
691
+ .art-csswitch .light:nth-child(7n) {
692
+ top: 45.5%;
693
+ }
694
+
695
+ .art-csswitch .light:nth-child(2n),
696
+ .art-csswitch .light:nth-child(6n) {
697
+ top: 41.5%;
698
+ }
699
+
700
+ .art-csswitch .light:nth-child(4n),
701
+ .art-csswitch .light:nth-child(8n) {
702
+ top: 49.5%;
703
+ }
704
+
705
+ .art-csswitch .light:nth-child(n + 5) {
706
+ left: auto;
707
+ right: 10.25%;
708
+ }
709
+ }
710
+
711
+ /* ── Mobile: Joy-Con bar connector visible ── */
712
+ @media (max-width: 670px) {
713
+ .art-csswitch {
714
+ width: calc(var(--art-csswitch-size) * 0.45);
715
+ }
716
+
717
+ .art-csswitch .comfort-grip {
718
+ display: none;
719
+ }
720
+
721
+ .art-csswitch .controller {
722
+ --connection: 0 0 0 #0000;
723
+ left: 0;
724
+ }
725
+
726
+ .art-csswitch .controller.right {
727
+ --connection: 0 0 0 #0000;
728
+ right: 0;
729
+ }
730
+
731
+ .art-csswitch .controller::before {
732
+ content: none;
733
+ }
734
+
735
+ /* bar: 50/1000 = 0.05em */
736
+ .art-csswitch .bar {
737
+ display: block;
738
+ top: 0.25%;
739
+ left: 100%;
740
+ width: 0.05em;
741
+ height: 98%;
742
+ }
743
+
744
+ .art-csswitch .controller.right .bar {
745
+ left: auto;
746
+ right: 100%;
747
+ transform: scalex(-1);
748
+ }
749
+
750
+ /* bar button: left: 10/1000 = 0.01em */
751
+ .art-csswitch .bar button {
752
+ width: 100%;
753
+ height: 14.25%;
754
+ left: 0.01em;
755
+ border-radius: 4px;
756
+ background:
757
+ radial-gradient(20% 100% at 100% 50%, #0008 30%, #31333800 40%),
758
+ radial-gradient(20% 100% at 100% 50%, #232629 40%, #23262900 60%),
759
+ linear-gradient(#232629 5%, #fff7, #414649 25% 75%, #232629);
760
+ }
761
+
762
+ .art-csswitch .sub-lr {
763
+ top: 19.75%;
764
+ }
765
+
766
+ .art-csswitch .sub-rr {
767
+ top: 60.25%;
768
+ }
769
+
770
+ /* minus-sign: 21/1000, 5.5/1000, 38/1000, 7.25/1000 */
771
+ .art-csswitch .minus-sign {
772
+ width: 0.021em;
773
+ height: 0.0055em;
774
+ background: #343a3b;
775
+ top: 0.038em;
776
+ left: 0.00725em;
777
+ border-radius: 0.00075em;
778
+ box-shadow:
779
+ inset 0 0 2px #2f3638,
780
+ 0 1px 3px -1.5px #fff4;
781
+ }
782
+
783
+ /* plus sign arm: 5.5/1000, 21/1000 */
784
+ .art-csswitch .controller.right .minus-sign::before {
785
+ content: "";
786
+ width: 0.0055em;
787
+ height: 0.021em;
788
+ top: 50%;
789
+ left: 50%;
790
+ transform: translate(-50%, -50%);
791
+ background: inherit;
792
+ box-shadow:
793
+ inset 0 0 2px #2f3638,
794
+ 0 3px 3px -2px #fff4;
795
+ }
796
+
797
+ .art-csswitch .peripheral {
798
+ top: 0;
799
+ left: 0;
800
+ width: 100%;
801
+ height: 100%;
802
+ border-radius: 3px 120px 110px 0 / 6px 120px 110px 0;
803
+ background: #3f4648;
804
+ box-shadow:
805
+ inset 2px 0 3px -1px #000c,
806
+ inset -5px 5px 5px #303538,
807
+ inset -10px -5px 5px #303538,
808
+ inset -5px 9px 5px #fff4;
809
+ -webkit-mask:
810
+ radial-gradient(95% 250% at 100% 64%, #0000 7%, #f00 7.5%) 100% 0 / 100% 42% no-repeat,
811
+ radial-gradient(95% 250% at 100% 67.5%, #0000 7%, #f00 7.5%) 100% 67.25% / 100% 42% no-repeat,
812
+ radial-gradient(160% 20% at 0 100%, #0000 38%, #f00 38.5%) 0 100% / 40% 50% no-repeat,
813
+ radial-gradient(160% 30% at 110% 101%, #0000 65%, #f00 0) 100% 100% / 62% 25% no-repeat;
814
+ clip-path: polygon(0 0, 100% 0, 100% 100%, 29% 100%, 0% 96%);
815
+ }
816
+
817
+ .art-csswitch .cord {
818
+ width: 12px;
819
+ height: 100vh;
820
+ left: 47%;
821
+ top: 30%;
822
+ background:
823
+ linear-gradient(#000 33%, #0000 34%) 50% 50% / 11px 100%,
824
+ linear-gradient(#0009 32%, #0000 38%) 50% 50% / 11px 100%,
825
+ linear-gradient(90deg, #0000, #6666, #0000),
826
+ linear-gradient(45deg, #253a3e, #21212c, #656a6e, #253a3e) 0.5px 0 / 6px 6px,
827
+ linear-gradient(-45deg, #253a3e, #31313c, #707070, #253a3e) 5.5px 3px / 6px 6px,
828
+ radial-gradient(farthest-side, #353a3ecc 99.99%, #f000) 50% 50% / 12px 8px;
829
+ background-repeat: repeat-y;
830
+ }
831
+ }
832
+
833
+ /* ── Small mobile: connector segments ── */
834
+ @media (max-width: 460px) {
835
+ .art-csswitch {
836
+ width: 90%;
837
+ min-width: 320px;
838
+ }
839
+
840
+ /* connector: 22/1000, 13.5/1000, 358/1000 */
841
+ .art-csswitch .connector {
842
+ display: block;
843
+ top: 0.022em;
844
+ left: calc(100% - 1px);
845
+ width: 0.0135em;
846
+ height: 0.358em;
847
+ z-index: -1;
848
+ }
849
+
850
+ .art-csswitch .controller.right .connector {
851
+ transform: scaleX(-1);
852
+ left: auto;
853
+ right: calc(100% - 1px);
854
+ }
855
+
856
+ .art-csswitch .con-lr,
857
+ .art-csswitch .con-rr {
858
+ width: 90%;
859
+ height: 9.75%;
860
+ background: var(--color);
861
+ top: 25.25%;
862
+ right: 0;
863
+ transform: translateY(-50%);
864
+ border-radius: 2px;
865
+ box-shadow:
866
+ inset -1.5px -2px 4px -1px #0005,
867
+ inset -1px 1px 2px -1.5px #0006;
868
+ }
869
+
870
+ .art-csswitch .con-rr {
871
+ top: 73%;
872
+ }
873
+
874
+ .art-csswitch .con-part {
875
+ width: 100%;
876
+ height: 100%;
877
+ top: 0;
878
+ left: 0px;
879
+ }
880
+
881
+ .art-csswitch .con-part::after {
882
+ content: "";
883
+ width: 60%;
884
+ right: 0;
885
+ height: 100%;
886
+ top: 0;
887
+ box-shadow:
888
+ inset -3px 2px 2px -1px #0008,
889
+ inset 0 4px 1px -2px #0007,
890
+ inset 0 3px 1px #fff7;
891
+ background:
892
+ linear-gradient(#0002, #0000, #0002),
893
+ #42484d;
894
+ border-radius: 2px 4px 3px 3px / 2px 4px 3px 10px;
895
+ 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%);
896
+ }
897
+
898
+ .art-csswitch .con-part::before {
899
+ content: "";
900
+ width: 60%;
901
+ left: 0;
902
+ height: 95%;
903
+ top: 0;
904
+ background:
905
+ linear-gradient(90deg, #000, #0000 20% 40%, #000 60%),
906
+ linear-gradient(#6e7474 0.66%, #0008 0, #6e7474cc 1.5%, #000c 2.5%, #0000 0),
907
+ #1b2827;
908
+ }
909
+
910
+ .art-csswitch .bar {
911
+ display: none;
912
+ }
913
+ }
914
+
915
+ /* ── Tiny: single Joy-Con only ── */
916
+ @media (max-width: 360px) {
917
+ /* 151/1000 = 0.151em */
918
+ .art-csswitch {
919
+ width: 0.151em;
920
+ min-width: 0.151em;
921
+ }
922
+
923
+ .art-csswitch .controller.right {
924
+ display: none;
925
+ }
926
+ }
927
+
928
+ /* Size variants */
929
+ .art-csswitch-sm {
930
+ --art-csswitch-size: 500px;
931
+ }
932
+
933
+ .art-csswitch-lg {
934
+ --art-csswitch-size: 1000px;
935
+ }
936
+ }