@camp.dev/bones 0.4.0 → 0.5.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/src/css/auto.css DELETED
@@ -1,1105 +0,0 @@
1
- @import "./bones.css";
2
-
3
- /* ---------------------------------------------------------------------------
4
- auto.css — skeletonize unmarked markup under [aria-busy="true"].
5
-
6
- data-bone marks shape, aria-busy marks state; this layer keys on state so a
7
- page with zero data-bone attributes still gets skeletons. Escape hatches:
8
- [data-bones-auto="off"] exempts a subtree, and explicit [data-bone] markup
9
- is always left to bones.css. Every rule lives in @layer bones-auto so page
10
- CSS outranks it without !important.
11
- --------------------------------------------------------------------------- */
12
-
13
- @layer bones-auto {
14
- /* Text default: any element with no child elements, minus exemptions and
15
- the replaced/control elements that get block treatment below. Same bar
16
- geometry as [data-bone="text"] in bones.css — restated because CSS cannot
17
- alias an attribute selector; the test suite pins both copies. */
18
- [aria-busy="true"]
19
- :not(:has(*)):not(
20
- [data-bone],
21
- [data-bone] *,
22
- [data-bones-auto="off"],
23
- [data-bones-auto="off"] *
24
- ):not(
25
- img,
26
- svg,
27
- video,
28
- canvas,
29
- picture,
30
- iframe,
31
- embed,
32
- object,
33
- audio,
34
- button,
35
- input,
36
- select,
37
- textarea,
38
- progress,
39
- meter,
40
- hr,
41
- br,
42
- svg *,
43
- picture *,
44
- select *,
45
- object *
46
- ) {
47
- color: rgb(from currentcolor r g b / 0);
48
- position: relative;
49
- min-width: 4ch;
50
- min-height: 1lh;
51
- }
52
-
53
- [aria-busy="true"]
54
- :not(:has(*)):not(
55
- [data-bone],
56
- [data-bone] *,
57
- [data-bones-auto="off"],
58
- [data-bones-auto="off"] *
59
- ):not(
60
- img,
61
- svg,
62
- video,
63
- canvas,
64
- picture,
65
- iframe,
66
- embed,
67
- object,
68
- audio,
69
- button,
70
- input,
71
- select,
72
- textarea,
73
- progress,
74
- meter,
75
- hr,
76
- br,
77
- svg *,
78
- picture *,
79
- select *,
80
- object *
81
- )::before {
82
- content: "\200b";
83
- }
84
-
85
- [aria-busy="true"]
86
- :not(:has(*)):not(
87
- [data-bone],
88
- [data-bone] *,
89
- [data-bones-auto="off"],
90
- [data-bones-auto="off"] *
91
- ):not(
92
- img,
93
- svg,
94
- video,
95
- canvas,
96
- picture,
97
- iframe,
98
- embed,
99
- object,
100
- audio,
101
- button,
102
- input,
103
- select,
104
- textarea,
105
- progress,
106
- meter,
107
- hr,
108
- br,
109
- svg *,
110
- picture *,
111
- select *,
112
- object *
113
- )::after {
114
- content: "";
115
- position: absolute;
116
- inset-inline: 0;
117
- top: calc((1lh + 1cap) / 2 - 1ex);
118
- height: 1ex;
119
- background-color: var(--bone-base);
120
- border-radius: var(--bone-radius);
121
- pointer-events: none;
122
- }
123
- }
124
-
125
- @layer bones-auto {
126
- /* Block override: replaced elements and form controls fill their own box.
127
- A text bar across an avatar or a button looks wrong. Leafness is not
128
- required — svg and select routinely have element children. */
129
- [aria-busy="true"]
130
- :is(
131
- img,
132
- svg,
133
- video,
134
- canvas,
135
- picture,
136
- iframe,
137
- embed,
138
- object,
139
- audio,
140
- button,
141
- input,
142
- select,
143
- textarea,
144
- progress,
145
- meter
146
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
147
- color: rgb(from currentcolor r g b / 0);
148
- background-color: var(--bone-base);
149
- border-radius: var(--bone-radius);
150
- border-color: transparent;
151
- }
152
-
153
- /* Width variance: text leaves cycle 85 / 100 / 92 / 60 so runs of lines
154
- look organic. Takes effect on block-level leaves; inline leaves keep
155
- their content-derived width, which already varies. */
156
- [aria-busy="true"]
157
- :not(:has(*)):not(
158
- [data-bone],
159
- [data-bone] *,
160
- [data-bones-auto="off"],
161
- [data-bones-auto="off"] *
162
- ):not(
163
- img,
164
- svg,
165
- video,
166
- canvas,
167
- picture,
168
- iframe,
169
- embed,
170
- object,
171
- audio,
172
- button,
173
- input,
174
- select,
175
- textarea,
176
- progress,
177
- meter,
178
- hr,
179
- br,
180
- svg *,
181
- picture *,
182
- select *,
183
- object *
184
- ):nth-child(4n + 1) {
185
- width: 85%;
186
- }
187
-
188
- [aria-busy="true"]
189
- :not(:has(*)):not(
190
- [data-bone],
191
- [data-bone] *,
192
- [data-bones-auto="off"],
193
- [data-bones-auto="off"] *
194
- ):not(
195
- img,
196
- svg,
197
- video,
198
- canvas,
199
- picture,
200
- iframe,
201
- embed,
202
- object,
203
- audio,
204
- button,
205
- input,
206
- select,
207
- textarea,
208
- progress,
209
- meter,
210
- hr,
211
- br,
212
- svg *,
213
- picture *,
214
- select *,
215
- object *
216
- ):nth-child(4n + 2) {
217
- width: 100%;
218
- }
219
-
220
- [aria-busy="true"]
221
- :not(:has(*)):not(
222
- [data-bone],
223
- [data-bone] *,
224
- [data-bones-auto="off"],
225
- [data-bones-auto="off"] *
226
- ):not(
227
- img,
228
- svg,
229
- video,
230
- canvas,
231
- picture,
232
- iframe,
233
- embed,
234
- object,
235
- audio,
236
- button,
237
- input,
238
- select,
239
- textarea,
240
- progress,
241
- meter,
242
- hr,
243
- br,
244
- svg *,
245
- picture *,
246
- select *,
247
- object *
248
- ):nth-child(4n + 3) {
249
- width: 92%;
250
- }
251
-
252
- [aria-busy="true"]
253
- :not(:has(*)):not(
254
- [data-bone],
255
- [data-bone] *,
256
- [data-bones-auto="off"],
257
- [data-bones-auto="off"] *
258
- ):not(
259
- img,
260
- svg,
261
- video,
262
- canvas,
263
- picture,
264
- iframe,
265
- embed,
266
- object,
267
- audio,
268
- button,
269
- input,
270
- select,
271
- textarea,
272
- progress,
273
- meter,
274
- hr,
275
- br,
276
- svg *,
277
- picture *,
278
- select *,
279
- object *
280
- ):nth-child(4n) {
281
- width: 60%;
282
- }
283
- }
284
-
285
- @layer bones-auto {
286
- /* Auto bones default to shimmer. bones.css has its own default, but its
287
- rules match [data-bone] elements only and never the unmarked leaves
288
- targeted here, so the default is restated for them, and the scopes below
289
- mirror bones.css for pages that set the attribute (BON-16). In those
290
- scopes, :is(:scope, :scope *) lets the attribute
291
- sit on the aria-busy element itself: a scoped selector's implicit :scope
292
- prefix matches strict descendants only (BON-17). */
293
- [aria-busy="true"]
294
- :not(:has(*)):not(
295
- [data-bone],
296
- [data-bone] *,
297
- [data-bones-auto="off"],
298
- [data-bones-auto="off"] *
299
- ):not(
300
- img,
301
- svg,
302
- video,
303
- canvas,
304
- picture,
305
- iframe,
306
- embed,
307
- object,
308
- audio,
309
- button,
310
- input,
311
- select,
312
- textarea,
313
- progress,
314
- meter,
315
- hr,
316
- br,
317
- svg *,
318
- picture *,
319
- select *,
320
- object *
321
- )::before,
322
- [aria-busy="true"]
323
- :not(:has(*)):not(
324
- [data-bone],
325
- [data-bone] *,
326
- [data-bones-auto="off"],
327
- [data-bones-auto="off"] *
328
- ):not(
329
- img,
330
- svg,
331
- video,
332
- canvas,
333
- picture,
334
- iframe,
335
- embed,
336
- object,
337
- audio,
338
- button,
339
- input,
340
- select,
341
- textarea,
342
- progress,
343
- meter,
344
- hr,
345
- br,
346
- svg *,
347
- picture *,
348
- select *,
349
- object *
350
- )::after,
351
- [aria-busy="true"]
352
- :is(
353
- img,
354
- svg,
355
- video,
356
- canvas,
357
- picture,
358
- iframe,
359
- embed,
360
- object,
361
- audio,
362
- button,
363
- input,
364
- select,
365
- textarea,
366
- progress,
367
- meter
368
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
369
- animation: bone-shimmer var(--bone-duration) ease-in-out infinite;
370
- background: linear-gradient(
371
- 90deg,
372
- var(--bone-base) 25%,
373
- var(--bone-highlight) 50%,
374
- var(--bone-base) 75%
375
- );
376
- background-size: 200% 100%;
377
- }
378
-
379
- @scope ([data-bone-animate="shimmer"]) to ([data-bone-animate]:not([data-bone-animate="shimmer"])) {
380
- [aria-busy="true"]:is(:scope, :scope *)
381
- :not(:has(*)):not(
382
- [data-bone],
383
- [data-bone] *,
384
- [data-bones-auto="off"],
385
- [data-bones-auto="off"] *
386
- ):not(
387
- img,
388
- svg,
389
- video,
390
- canvas,
391
- picture,
392
- iframe,
393
- embed,
394
- object,
395
- audio,
396
- button,
397
- input,
398
- select,
399
- textarea,
400
- progress,
401
- meter,
402
- hr,
403
- br,
404
- svg *,
405
- picture *,
406
- select *,
407
- object *
408
- )::before,
409
- [aria-busy="true"]:is(:scope, :scope *)
410
- :not(:has(*)):not(
411
- [data-bone],
412
- [data-bone] *,
413
- [data-bones-auto="off"],
414
- [data-bones-auto="off"] *
415
- ):not(
416
- img,
417
- svg,
418
- video,
419
- canvas,
420
- picture,
421
- iframe,
422
- embed,
423
- object,
424
- audio,
425
- button,
426
- input,
427
- select,
428
- textarea,
429
- progress,
430
- meter,
431
- hr,
432
- br,
433
- svg *,
434
- picture *,
435
- select *,
436
- object *
437
- )::after,
438
- [aria-busy="true"]:is(:scope, :scope *)
439
- :is(
440
- img,
441
- svg,
442
- video,
443
- canvas,
444
- picture,
445
- iframe,
446
- embed,
447
- object,
448
- audio,
449
- button,
450
- input,
451
- select,
452
- textarea,
453
- progress,
454
- meter
455
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
456
- animation: bone-shimmer var(--bone-duration) ease-in-out infinite;
457
- background: linear-gradient(
458
- 90deg,
459
- var(--bone-base) 25%,
460
- var(--bone-highlight) 50%,
461
- var(--bone-base) 75%
462
- );
463
- background-size: 200% 100%;
464
- }
465
-
466
- @media (prefers-reduced-motion: reduce) {
467
- [aria-busy="true"]:is(:scope, :scope *)
468
- :not(:has(*)):not(
469
- [data-bone],
470
- [data-bone] *,
471
- [data-bones-auto="off"],
472
- [data-bones-auto="off"] *
473
- ):not(
474
- img,
475
- svg,
476
- video,
477
- canvas,
478
- picture,
479
- iframe,
480
- embed,
481
- object,
482
- audio,
483
- button,
484
- input,
485
- select,
486
- textarea,
487
- progress,
488
- meter,
489
- hr,
490
- br,
491
- svg *,
492
- picture *,
493
- select *,
494
- object *
495
- )::before,
496
- [aria-busy="true"]:is(:scope, :scope *)
497
- :not(:has(*)):not(
498
- [data-bone],
499
- [data-bone] *,
500
- [data-bones-auto="off"],
501
- [data-bones-auto="off"] *
502
- ):not(
503
- img,
504
- svg,
505
- video,
506
- canvas,
507
- picture,
508
- iframe,
509
- embed,
510
- object,
511
- audio,
512
- button,
513
- input,
514
- select,
515
- textarea,
516
- progress,
517
- meter,
518
- hr,
519
- br,
520
- svg *,
521
- picture *,
522
- select *,
523
- object *
524
- )::after,
525
- [aria-busy="true"]:is(:scope, :scope *)
526
- :is(
527
- img,
528
- svg,
529
- video,
530
- canvas,
531
- picture,
532
- iframe,
533
- embed,
534
- object,
535
- audio,
536
- button,
537
- input,
538
- select,
539
- textarea,
540
- progress,
541
- meter
542
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
543
- animation: bone-pulse 2s ease-in-out infinite;
544
- background: var(--bone-base);
545
- background-size: auto;
546
- }
547
- }
548
-
549
- @media (forced-colors: active) {
550
- [aria-busy="true"]:is(:scope, :scope *)
551
- :not(:has(*)):not(
552
- [data-bone],
553
- [data-bone] *,
554
- [data-bones-auto="off"],
555
- [data-bones-auto="off"] *
556
- ):not(
557
- img,
558
- svg,
559
- video,
560
- canvas,
561
- picture,
562
- iframe,
563
- embed,
564
- object,
565
- audio,
566
- button,
567
- input,
568
- select,
569
- textarea,
570
- progress,
571
- meter,
572
- hr,
573
- br,
574
- svg *,
575
- picture *,
576
- select *,
577
- object *
578
- )::after,
579
- [aria-busy="true"]:is(:scope, :scope *)
580
- :is(
581
- img,
582
- svg,
583
- video,
584
- canvas,
585
- picture,
586
- iframe,
587
- embed,
588
- object,
589
- audio,
590
- button,
591
- input,
592
- select,
593
- textarea,
594
- progress,
595
- meter
596
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
597
- background-color: GrayText;
598
- forced-color-adjust: none;
599
- }
600
- }
601
- }
602
-
603
- @scope ([data-bone-animate="pulse"]) to ([data-bone-animate]:not([data-bone-animate="pulse"])) {
604
- [aria-busy="true"]:is(:scope, :scope *)
605
- :not(:has(*)):not(
606
- [data-bone],
607
- [data-bone] *,
608
- [data-bones-auto="off"],
609
- [data-bones-auto="off"] *
610
- ):not(
611
- img,
612
- svg,
613
- video,
614
- canvas,
615
- picture,
616
- iframe,
617
- embed,
618
- object,
619
- audio,
620
- button,
621
- input,
622
- select,
623
- textarea,
624
- progress,
625
- meter,
626
- hr,
627
- br,
628
- svg *,
629
- picture *,
630
- select *,
631
- object *
632
- )::before,
633
- [aria-busy="true"]:is(:scope, :scope *)
634
- :not(:has(*)):not(
635
- [data-bone],
636
- [data-bone] *,
637
- [data-bones-auto="off"],
638
- [data-bones-auto="off"] *
639
- ):not(
640
- img,
641
- svg,
642
- video,
643
- canvas,
644
- picture,
645
- iframe,
646
- embed,
647
- object,
648
- audio,
649
- button,
650
- input,
651
- select,
652
- textarea,
653
- progress,
654
- meter,
655
- hr,
656
- br,
657
- svg *,
658
- picture *,
659
- select *,
660
- object *
661
- )::after,
662
- [aria-busy="true"]:is(:scope, :scope *)
663
- :is(
664
- img,
665
- svg,
666
- video,
667
- canvas,
668
- picture,
669
- iframe,
670
- embed,
671
- object,
672
- audio,
673
- button,
674
- input,
675
- select,
676
- textarea,
677
- progress,
678
- meter
679
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
680
- animation: bone-pulse var(--bone-duration) ease-in-out infinite;
681
- background: var(--bone-base);
682
- background-size: auto;
683
- }
684
-
685
- @media (prefers-reduced-motion: reduce) {
686
- [aria-busy="true"]:is(:scope, :scope *)
687
- :not(:has(*)):not(
688
- [data-bone],
689
- [data-bone] *,
690
- [data-bones-auto="off"],
691
- [data-bones-auto="off"] *
692
- ):not(
693
- img,
694
- svg,
695
- video,
696
- canvas,
697
- picture,
698
- iframe,
699
- embed,
700
- object,
701
- audio,
702
- button,
703
- input,
704
- select,
705
- textarea,
706
- progress,
707
- meter,
708
- hr,
709
- br,
710
- svg *,
711
- picture *,
712
- select *,
713
- object *
714
- )::before,
715
- [aria-busy="true"]:is(:scope, :scope *)
716
- :not(:has(*)):not(
717
- [data-bone],
718
- [data-bone] *,
719
- [data-bones-auto="off"],
720
- [data-bones-auto="off"] *
721
- ):not(
722
- img,
723
- svg,
724
- video,
725
- canvas,
726
- picture,
727
- iframe,
728
- embed,
729
- object,
730
- audio,
731
- button,
732
- input,
733
- select,
734
- textarea,
735
- progress,
736
- meter,
737
- hr,
738
- br,
739
- svg *,
740
- picture *,
741
- select *,
742
- object *
743
- )::after,
744
- [aria-busy="true"]:is(:scope, :scope *)
745
- :is(
746
- img,
747
- svg,
748
- video,
749
- canvas,
750
- picture,
751
- iframe,
752
- embed,
753
- object,
754
- audio,
755
- button,
756
- input,
757
- select,
758
- textarea,
759
- progress,
760
- meter
761
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
762
- animation: bone-pulse 2s ease-in-out infinite;
763
- background: var(--bone-base);
764
- background-size: auto;
765
- }
766
- }
767
-
768
- @media (forced-colors: active) {
769
- [aria-busy="true"]:is(:scope, :scope *)
770
- :not(:has(*)):not(
771
- [data-bone],
772
- [data-bone] *,
773
- [data-bones-auto="off"],
774
- [data-bones-auto="off"] *
775
- ):not(
776
- img,
777
- svg,
778
- video,
779
- canvas,
780
- picture,
781
- iframe,
782
- embed,
783
- object,
784
- audio,
785
- button,
786
- input,
787
- select,
788
- textarea,
789
- progress,
790
- meter,
791
- hr,
792
- br,
793
- svg *,
794
- picture *,
795
- select *,
796
- object *
797
- )::after,
798
- [aria-busy="true"]:is(:scope, :scope *)
799
- :is(
800
- img,
801
- svg,
802
- video,
803
- canvas,
804
- picture,
805
- iframe,
806
- embed,
807
- object,
808
- audio,
809
- button,
810
- input,
811
- select,
812
- textarea,
813
- progress,
814
- meter
815
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
816
- background-color: GrayText;
817
- forced-color-adjust: none;
818
- }
819
- }
820
- }
821
-
822
- @scope ([data-bone-animate="none"]) to ([data-bone-animate]:not([data-bone-animate="none"])) {
823
- [aria-busy="true"]:is(:scope, :scope *)
824
- :not(:has(*)):not(
825
- [data-bone],
826
- [data-bone] *,
827
- [data-bones-auto="off"],
828
- [data-bones-auto="off"] *
829
- ):not(
830
- img,
831
- svg,
832
- video,
833
- canvas,
834
- picture,
835
- iframe,
836
- embed,
837
- object,
838
- audio,
839
- button,
840
- input,
841
- select,
842
- textarea,
843
- progress,
844
- meter,
845
- hr,
846
- br,
847
- svg *,
848
- picture *,
849
- select *,
850
- object *
851
- )::before,
852
- [aria-busy="true"]:is(:scope, :scope *)
853
- :not(:has(*)):not(
854
- [data-bone],
855
- [data-bone] *,
856
- [data-bones-auto="off"],
857
- [data-bones-auto="off"] *
858
- ):not(
859
- img,
860
- svg,
861
- video,
862
- canvas,
863
- picture,
864
- iframe,
865
- embed,
866
- object,
867
- audio,
868
- button,
869
- input,
870
- select,
871
- textarea,
872
- progress,
873
- meter,
874
- hr,
875
- br,
876
- svg *,
877
- picture *,
878
- select *,
879
- object *
880
- )::after,
881
- [aria-busy="true"]:is(:scope, :scope *)
882
- :is(
883
- img,
884
- svg,
885
- video,
886
- canvas,
887
- picture,
888
- iframe,
889
- embed,
890
- object,
891
- audio,
892
- button,
893
- input,
894
- select,
895
- textarea,
896
- progress,
897
- meter
898
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
899
- animation: none;
900
- background: var(--bone-base);
901
- background-size: auto;
902
- }
903
-
904
- @media (forced-colors: active) {
905
- [aria-busy="true"]:is(:scope, :scope *)
906
- :not(:has(*)):not(
907
- [data-bone],
908
- [data-bone] *,
909
- [data-bones-auto="off"],
910
- [data-bones-auto="off"] *
911
- ):not(
912
- img,
913
- svg,
914
- video,
915
- canvas,
916
- picture,
917
- iframe,
918
- embed,
919
- object,
920
- audio,
921
- button,
922
- input,
923
- select,
924
- textarea,
925
- progress,
926
- meter,
927
- hr,
928
- br,
929
- svg *,
930
- picture *,
931
- select *,
932
- object *
933
- )::after,
934
- [aria-busy="true"]:is(:scope, :scope *)
935
- :is(
936
- img,
937
- svg,
938
- video,
939
- canvas,
940
- picture,
941
- iframe,
942
- embed,
943
- object,
944
- audio,
945
- button,
946
- input,
947
- select,
948
- textarea,
949
- progress,
950
- meter
951
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
952
- background-color: GrayText;
953
- forced-color-adjust: none;
954
- }
955
- }
956
- }
957
-
958
- @media (prefers-reduced-motion: reduce) {
959
- [aria-busy="true"]
960
- :not(:has(*)):not(
961
- [data-bone],
962
- [data-bone] *,
963
- [data-bones-auto="off"],
964
- [data-bones-auto="off"] *
965
- ):not(
966
- img,
967
- svg,
968
- video,
969
- canvas,
970
- picture,
971
- iframe,
972
- embed,
973
- object,
974
- audio,
975
- button,
976
- input,
977
- select,
978
- textarea,
979
- progress,
980
- meter,
981
- hr,
982
- br,
983
- svg *,
984
- picture *,
985
- select *,
986
- object *
987
- )::before,
988
- [aria-busy="true"]
989
- :not(:has(*)):not(
990
- [data-bone],
991
- [data-bone] *,
992
- [data-bones-auto="off"],
993
- [data-bones-auto="off"] *
994
- ):not(
995
- img,
996
- svg,
997
- video,
998
- canvas,
999
- picture,
1000
- iframe,
1001
- embed,
1002
- object,
1003
- audio,
1004
- button,
1005
- input,
1006
- select,
1007
- textarea,
1008
- progress,
1009
- meter,
1010
- hr,
1011
- br,
1012
- svg *,
1013
- picture *,
1014
- select *,
1015
- object *
1016
- )::after,
1017
- [aria-busy="true"]
1018
- :is(
1019
- img,
1020
- svg,
1021
- video,
1022
- canvas,
1023
- picture,
1024
- iframe,
1025
- embed,
1026
- object,
1027
- audio,
1028
- button,
1029
- input,
1030
- select,
1031
- textarea,
1032
- progress,
1033
- meter
1034
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
1035
- animation: bone-pulse 2s ease-in-out infinite;
1036
- background: var(--bone-base);
1037
- background-size: auto;
1038
- }
1039
- }
1040
-
1041
- /* High-contrast modes strip author backgrounds; keep bones visible with a
1042
- system color and opt the surfaces out of forced-color adjustment. */
1043
- @media (forced-colors: active) {
1044
- [aria-busy="true"]
1045
- :not(:has(*)):not(
1046
- [data-bone],
1047
- [data-bone] *,
1048
- [data-bones-auto="off"],
1049
- [data-bones-auto="off"] *
1050
- ):not(
1051
- img,
1052
- svg,
1053
- video,
1054
- canvas,
1055
- picture,
1056
- iframe,
1057
- embed,
1058
- object,
1059
- audio,
1060
- button,
1061
- input,
1062
- select,
1063
- textarea,
1064
- progress,
1065
- meter,
1066
- hr,
1067
- br,
1068
- svg *,
1069
- picture *,
1070
- select *,
1071
- object *
1072
- )::after,
1073
- [aria-busy="true"]
1074
- :is(
1075
- img,
1076
- svg,
1077
- video,
1078
- canvas,
1079
- picture,
1080
- iframe,
1081
- embed,
1082
- object,
1083
- audio,
1084
- button,
1085
- input,
1086
- select,
1087
- textarea,
1088
- progress,
1089
- meter
1090
- ):not([data-bone], [data-bone] *, [data-bones-auto="off"], [data-bones-auto="off"] *) {
1091
- background-color: GrayText;
1092
- forced-color-adjust: none;
1093
- }
1094
- }
1095
- }
1096
-
1097
- @layer bones-auto {
1098
- /* precision="measured" hides a boundary's content with inherited
1099
- visibility from the shadow side. Visibility, unlike display, can be
1100
- switched back on by a descendant, so the opt-out contract survives
1101
- measured mode: exempt subtrees stay visible under the overlay. */
1102
- bones-boundary[data-bones-measured] [data-bones-auto="off"] {
1103
- visibility: visible;
1104
- }
1105
- }