package tm-grammars

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file tm_grammar_css.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
let lang_id = "css"
let json = {json|{
  "displayName": "CSS",
  "name": "css",
  "patterns": [
    {
      "include": "#comment-block"
    },
    {
      "include": "#escapes"
    },
    {
      "include": "#combinators"
    },
    {
      "include": "#selector"
    },
    {
      "include": "#at-rules"
    },
    {
      "include": "#rule-list"
    }
  ],
  "repository": {
    "at-rules": {
      "patterns": [
        {
          "begin": "\\A\\uFEFF?(?i:(?=\\s*@charset\\b))",
          "end": ";|(?=$)",
          "endCaptures": {
            "0": {
              "name": "punctuation.terminator.rule.css"
            }
          },
          "name": "meta.at-rule.charset.css",
          "patterns": [
            {
              "captures": {
                "1": {
                  "name": "invalid.illegal.not-lowercase.charset.css"
                },
                "2": {
                  "name": "invalid.illegal.leading-whitespace.charset.css"
                },
                "3": {
                  "name": "invalid.illegal.no-whitespace.charset.css"
                },
                "4": {
                  "name": "invalid.illegal.whitespace.charset.css"
                },
                "5": {
                  "name": "invalid.illegal.not-double-quoted.charset.css"
                },
                "6": {
                  "name": "invalid.illegal.unclosed-string.charset.css"
                },
                "7": {
                  "name": "invalid.illegal.unexpected-characters.charset.css"
                }
              },
              "match": "\\G((?!@charset)@\\w+)|\\G(\\s+)|(@charset\\S[^;]*)|(?<=@charset)( {2,}|\\t+)|(?<=@charset )([^\";]+)|(\"[^\"]+)$|(?<=\")([^;]+)"
            },
            {
              "captures": {
                "1": {
                  "name": "keyword.control.at-rule.charset.css"
                },
                "2": {
                  "name": "punctuation.definition.keyword.css"
                }
              },
              "match": "((@)charset)(?=\\s)"
            },
            {
              "begin": "\"",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.definition.string.begin.css"
                }
              },
              "end": "\"|$",
              "endCaptures": {
                "0": {
                  "name": "punctuation.definition.string.end.css"
                }
              },
              "name": "string.quoted.double.css",
              "patterns": [
                {
                  "begin": "(?:\\G|^)(?=[^\"]+$)",
                  "end": "$",
                  "name": "invalid.illegal.unclosed.string.css"
                }
              ]
            }
          ]
        },
        {
          "begin": "(?i)((@)import)(?:\\s+|$|(?=[\"']|/\\*))",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.at-rule.import.css"
            },
            "2": {
              "name": "punctuation.definition.keyword.css"
            }
          },
          "end": ";",
          "endCaptures": {
            "0": {
              "name": "punctuation.terminator.rule.css"
            }
          },
          "name": "meta.at-rule.import.css",
          "patterns": [
            {
              "begin": "\\G\\s*(?=/\\*)",
              "end": "(?<=\\*/)\\s*",
              "patterns": [
                {
                  "include": "#comment-block"
                }
              ]
            },
            {
              "include": "#string"
            },
            {
              "include": "#url"
            },
            {
              "include": "#media-query-list"
            }
          ]
        },
        {
          "begin": "(?i)((@)font-face)(?=\\s*|\\{|/\\*|$)",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.at-rule.font-face.css"
            },
            "2": {
              "name": "punctuation.definition.keyword.css"
            }
          },
          "end": "(?!\\G)",
          "name": "meta.at-rule.font-face.css",
          "patterns": [
            {
              "include": "#comment-block"
            },
            {
              "include": "#escapes"
            },
            {
              "include": "#rule-list"
            }
          ]
        },
        {
          "begin": "(?i)(@)page(?=[:{\\s]|/\\*|$)",
          "captures": {
            "0": {
              "name": "keyword.control.at-rule.page.css"
            },
            "1": {
              "name": "punctuation.definition.keyword.css"
            }
          },
          "end": "(?=\\s*($|[:;{]))",
          "name": "meta.at-rule.page.css",
          "patterns": [
            {
              "include": "#rule-list"
            }
          ]
        },
        {
          "begin": "(?i)(?=@media([(\\s]|/\\*|$))",
          "end": "(?<=})(?!\\G)",
          "patterns": [
            {
              "begin": "(?i)\\G(@)media",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.at-rule.media.css"
                },
                "1": {
                  "name": "punctuation.definition.keyword.css"
                }
              },
              "end": "(?=\\s*[;{])",
              "name": "meta.at-rule.media.header.css",
              "patterns": [
                {
                  "include": "#media-query-list"
                }
              ]
            },
            {
              "begin": "\\{",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.section.media.begin.bracket.curly.css"
                }
              },
              "end": "}",
              "endCaptures": {
                "0": {
                  "name": "punctuation.section.media.end.bracket.curly.css"
                }
              },
              "name": "meta.at-rule.media.body.css",
              "patterns": [
                {
                  "include": "$self"
                }
              ]
            }
          ]
        },
        {
          "begin": "(?i)(?=@counter-style([\"';{\\s]|/\\*|$))",
          "end": "(?<=})(?!\\G)",
          "patterns": [
            {
              "begin": "(?i)\\G(@)counter-style",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.at-rule.counter-style.css"
                },
                "1": {
                  "name": "punctuation.definition.keyword.css"
                }
              },
              "end": "(?=\\s*\\{)",
              "name": "meta.at-rule.counter-style.header.css",
              "patterns": [
                {
                  "include": "#comment-block"
                },
                {
                  "include": "#escapes"
                },
                {
                  "captures": {
                    "0": {
                      "patterns": [
                        {
                          "include": "#escapes"
                        }
                      ]
                    }
                  },
                  "match": "[-A-Z_a-z[^\\x00-\\x7F]](?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*",
                  "name": "variable.parameter.style-name.css"
                }
              ]
            },
            {
              "begin": "\\{",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.section.property-list.begin.bracket.curly.css"
                }
              },
              "end": "}",
              "endCaptures": {
                "0": {
                  "name": "punctuation.section.property-list.end.bracket.curly.css"
                }
              },
              "name": "meta.at-rule.counter-style.body.css",
              "patterns": [
                {
                  "include": "#comment-block"
                },
                {
                  "include": "#escapes"
                },
                {
                  "include": "#rule-list-innards"
                }
              ]
            }
          ]
        },
        {
          "begin": "(?i)(?=@document([\"';{\\s]|/\\*|$))",
          "end": "(?<=})(?!\\G)",
          "patterns": [
            {
              "begin": "(?i)\\G(@)document",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.at-rule.document.css"
                },
                "1": {
                  "name": "punctuation.definition.keyword.css"
                }
              },
              "end": "(?=\\s*[;{])",
              "name": "meta.at-rule.document.header.css",
              "patterns": [
                {
                  "begin": "(?i)(?<![-\\w])(url-prefix|domain|regexp)(\\()",
                  "beginCaptures": {
                    "1": {
                      "name": "support.function.document-rule.css"
                    },
                    "2": {
                      "name": "punctuation.section.function.begin.bracket.round.css"
                    }
                  },
                  "end": "\\)",
                  "endCaptures": {
                    "0": {
                      "name": "punctuation.section.function.end.bracket.round.css"
                    }
                  },
                  "name": "meta.function.document-rule.css",
                  "patterns": [
                    {
                      "include": "#string"
                    },
                    {
                      "include": "#comment-block"
                    },
                    {
                      "include": "#escapes"
                    },
                    {
                      "match": "[^\"')\\s]+",
                      "name": "variable.parameter.document-rule.css"
                    }
                  ]
                },
                {
                  "include": "#url"
                },
                {
                  "include": "#commas"
                },
                {
                  "include": "#comment-block"
                },
                {
                  "include": "#escapes"
                }
              ]
            },
            {
              "begin": "\\{",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.section.document.begin.bracket.curly.css"
                }
              },
              "end": "}",
              "endCaptures": {
                "0": {
                  "name": "punctuation.section.document.end.bracket.curly.css"
                }
              },
              "name": "meta.at-rule.document.body.css",
              "patterns": [
                {
                  "include": "$self"
                }
              ]
            }
          ]
        },
        {
          "begin": "(?i)(?=@(?:-(?:webkit|moz|o|ms)-)?keyframes([\"';{\\s]|/\\*|$))",
          "end": "(?<=})(?!\\G)",
          "patterns": [
            {
              "begin": "(?i)\\G(@)(?:-(?:webkit|moz|o|ms)-)?keyframes",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.at-rule.keyframes.css"
                },
                "1": {
                  "name": "punctuation.definition.keyword.css"
                }
              },
              "end": "(?=\\s*\\{)",
              "name": "meta.at-rule.keyframes.header.css",
              "patterns": [
                {
                  "include": "#comment-block"
                },
                {
                  "include": "#escapes"
                },
                {
                  "captures": {
                    "0": {
                      "patterns": [
                        {
                          "include": "#escapes"
                        }
                      ]
                    }
                  },
                  "match": "[-A-Z_a-z[^\\x00-\\x7F]](?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*",
                  "name": "variable.parameter.keyframe-list.css"
                }
              ]
            },
            {
              "begin": "\\{",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.section.keyframes.begin.bracket.curly.css"
                }
              },
              "end": "}",
              "endCaptures": {
                "0": {
                  "name": "punctuation.section.keyframes.end.bracket.curly.css"
                }
              },
              "name": "meta.at-rule.keyframes.body.css",
              "patterns": [
                {
                  "include": "#comment-block"
                },
                {
                  "include": "#escapes"
                },
                {
                  "captures": {
                    "1": {
                      "name": "entity.other.keyframe-offset.css"
                    },
                    "2": {
                      "name": "entity.other.keyframe-offset.percentage.css"
                    }
                  },
                  "match": "(?i)(?<![-\\w])(from|to)(?![-\\w])|([-+]?(?:\\d+(?:\\.\\d+)?|\\.\\d+)%)"
                },
                {
                  "include": "#rule-list"
                }
              ]
            }
          ]
        },
        {
          "begin": "(?i)(?=@supports([(\\s]|/\\*|$))",
          "end": "(?<=})(?!\\G)|(?=;)",
          "patterns": [
            {
              "begin": "(?i)\\G(@)supports",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.at-rule.supports.css"
                },
                "1": {
                  "name": "punctuation.definition.keyword.css"
                }
              },
              "end": "(?=\\s*[;{])",
              "name": "meta.at-rule.supports.header.css",
              "patterns": [
                {
                  "include": "#feature-query-operators"
                },
                {
                  "include": "#feature-query"
                },
                {
                  "include": "#comment-block"
                },
                {
                  "include": "#escapes"
                }
              ]
            },
            {
              "begin": "\\{",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.section.supports.begin.bracket.curly.css"
                }
              },
              "end": "}",
              "endCaptures": {
                "0": {
                  "name": "punctuation.section.supports.end.bracket.curly.css"
                }
              },
              "name": "meta.at-rule.supports.body.css",
              "patterns": [
                {
                  "include": "$self"
                }
              ]
            }
          ]
        },
        {
          "begin": "(?i)((@)(-(ms|o)-)?viewport)(?=[\"';{\\s]|/\\*|$)",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.at-rule.viewport.css"
            },
            "2": {
              "name": "punctuation.definition.keyword.css"
            }
          },
          "end": "(?=\\s*[;@{])",
          "name": "meta.at-rule.viewport.css",
          "patterns": [
            {
              "include": "#comment-block"
            },
            {
              "include": "#escapes"
            }
          ]
        },
        {
          "begin": "(?i)((@)font-feature-values)(?=[\"';{\\s]|/\\*|$)\\s*",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.at-rule.font-feature-values.css"
            },
            "2": {
              "name": "punctuation.definition.keyword.css"
            }
          },
          "contentName": "variable.parameter.font-name.css",
          "end": "(?=\\s*[;@{])",
          "name": "meta.at-rule.font-features.css",
          "patterns": [
            {
              "include": "#comment-block"
            },
            {
              "include": "#escapes"
            }
          ]
        },
        {
          "include": "#font-features"
        },
        {
          "begin": "(?i)((@)namespace)(?=[\"';\\s]|/\\*|$)",
          "beginCaptures": {
            "1": {
              "name": "keyword.control.at-rule.namespace.css"
            },
            "2": {
              "name": "punctuation.definition.keyword.css"
            }
          },
          "end": ";|(?=[@{])",
          "endCaptures": {
            "0": {
              "name": "punctuation.terminator.rule.css"
            }
          },
          "name": "meta.at-rule.namespace.css",
          "patterns": [
            {
              "include": "#url"
            },
            {
              "captures": {
                "1": {
                  "patterns": [
                    {
                      "include": "#comment-block"
                    }
                  ]
                },
                "2": {
                  "name": "entity.name.function.namespace-prefix.css",
                  "patterns": [
                    {
                      "include": "#escapes"
                    }
                  ]
                }
              },
              "match": "(?i)(?:\\G|^|(?<=\\s))(?=(?<=\\s|^)[-A-Z_a-z[^\\x00-\\x7F]]|\\s*/\\*(?:[^*]|\\*[^/])*\\*/)(.*?)([-A-Z_a-z[^\\x00-\\x7F]](?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*)"
            },
            {
              "include": "#comment-block"
            },
            {
              "include": "#escapes"
            },
            {
              "include": "#string"
            }
          ]
        },
        {
          "begin": "(?i)(?=@[-\\w]+[^;]+;s*$)",
          "end": "(?<=;)(?!\\G)",
          "patterns": [
            {
              "begin": "(?i)\\G(@)[-\\w]+",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.at-rule.css"
                },
                "1": {
                  "name": "punctuation.definition.keyword.css"
                }
              },
              "end": ";",
              "endCaptures": {
                "0": {
                  "name": "punctuation.terminator.rule.css"
                }
              },
              "name": "meta.at-rule.header.css"
            }
          ]
        },
        {
          "begin": "(?i)(?=@[-\\w]+([({\\s]|/\\*|$))",
          "end": "(?<=})(?!\\G)",
          "patterns": [
            {
              "begin": "(?i)\\G(@)[-\\w]+",
              "beginCaptures": {
                "0": {
                  "name": "keyword.control.at-rule.css"
                },
                "1": {
                  "name": "punctuation.definition.keyword.css"
                }
              },
              "end": "(?=\\s*[;{])",
              "name": "meta.at-rule.header.css"
            },
            {
              "begin": "\\{",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.section.begin.bracket.curly.css"
                }
              },
              "end": "}",
              "endCaptures": {
                "0": {
                  "name": "punctuation.section.end.bracket.curly.css"
                }
              },
              "name": "meta.at-rule.body.css",
              "patterns": [
                {
                  "include": "$self"
                }
              ]
            }
          ]
        }
      ]
    },
    "color-keywords": {
      "patterns": [
        {
          "match": "(?i)(?<![-\\w])(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)(?![-\\w])",
          "name": "support.constant.color.w3c-standard-color-name.css"
        },
        {
          "match": "(?i)(?<![-\\w])(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rebeccapurple|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|transparent|turquoise|violet|wheat|whitesmoke|yellowgreen)(?![-\\w])",
          "name": "support.constant.color.w3c-extended-color-name.css"
        },
        {
          "match": "(?i)(?<![-\\w])currentColor(?![-\\w])",
          "name": "support.constant.color.current.css"
        },
        {
          "match": "(?i)(?<![-\\w])(ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText)(?![-\\w])",
          "name": "invalid.deprecated.color.system.css"
        }
      ]
    },
    "combinators": {
      "patterns": [
        {
          "match": "/deep/|>>>",
          "name": "invalid.deprecated.combinator.css"
        },
        {
          "match": ">>|[+>~]",
          "name": "keyword.operator.combinator.css"
        }
      ]
    },
    "commas": {
      "match": ",",
      "name": "punctuation.separator.list.comma.css"
    },
    "comment-block": {
      "begin": "/\\*",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.comment.begin.css"
        }
      },
      "end": "\\*/",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.comment.end.css"
        }
      },
      "name": "comment.block.css"
    },
    "escapes": {
      "patterns": [
        {
          "match": "\\\\\\h{1,6}",
          "name": "constant.character.escape.codepoint.css"
        },
        {
          "begin": "\\\\$\\s*",
          "end": "^(?<!\\G)",
          "name": "constant.character.escape.newline.css"
        },
        {
          "match": "\\\\.",
          "name": "constant.character.escape.css"
        }
      ]
    },
    "feature-query": {
      "begin": "\\(",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.condition.begin.bracket.round.css"
        }
      },
      "end": "\\)",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.condition.end.bracket.round.css"
        }
      },
      "name": "meta.feature-query.css",
      "patterns": [
        {
          "include": "#feature-query-operators"
        },
        {
          "include": "#feature-query"
        }
      ]
    },
    "feature-query-operators": {
      "patterns": [
        {
          "match": "(?i)(?<=[()\\s]|^|\\*/)(and|not|or)(?=[()\\s]|/\\*|$)",
          "name": "keyword.operator.logical.feature.$1.css"
        },
        {
          "include": "#rule-list-innards"
        }
      ]
    },
    "font-features": {
      "begin": "(?i)((@)(annotation|character-variant|ornaments|styleset|stylistic|swash))(?=[\"';@{\\s]|/\\*|$)",
      "beginCaptures": {
        "1": {
          "name": "keyword.control.at-rule.${3:/downcase}.css"
        },
        "2": {
          "name": "punctuation.definition.keyword.css"
        }
      },
      "end": "(?<=})",
      "name": "meta.at-rule.${3:/downcase}.css",
      "patterns": [
        {
          "begin": "\\{",
          "beginCaptures": {
            "0": {
              "name": "punctuation.section.property-list.begin.bracket.curly.css"
            }
          },
          "end": "}",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.property-list.end.bracket.curly.css"
            }
          },
          "name": "meta.property-list.font-feature.css",
          "patterns": [
            {
              "captures": {
                "0": {
                  "patterns": [
                    {
                      "include": "#escapes"
                    }
                  ]
                }
              },
              "match": "[-A-Z_a-z[^\\x00-\\x7F]](?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*",
              "name": "variable.font-feature.css"
            },
            {
              "include": "#rule-list-innards"
            }
          ]
        }
      ]
    },
    "functional-pseudo-classes": {
      "patterns": [
        {
          "begin": "(?i)((:)dir)(\\()",
          "beginCaptures": {
            "1": {
              "name": "entity.other.attribute-name.pseudo-class.css"
            },
            "2": {
              "name": "punctuation.definition.entity.css"
            },
            "3": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "patterns": [
            {
              "include": "#comment-block"
            },
            {
              "include": "#escapes"
            },
            {
              "match": "(?i)(?<![-\\w])(ltr|rtl)(?![-\\w])",
              "name": "support.constant.text-direction.css"
            },
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "begin": "(?i)((:)lang)(\\()",
          "beginCaptures": {
            "1": {
              "name": "entity.other.attribute-name.pseudo-class.css"
            },
            "2": {
              "name": "punctuation.definition.entity.css"
            },
            "3": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "patterns": [
            {
              "match": "(?<=[(,\\s])[A-Za-z]+(-[0-9A-Za-z]*|\\\\(?:\\h{1,6}|.))*(?=[),\\s])",
              "name": "support.constant.language-range.css"
            },
            {
              "begin": "\"",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.definition.string.begin.css"
                }
              },
              "end": "\"",
              "endCaptures": {
                "0": {
                  "name": "punctuation.definition.string.end.css"
                }
              },
              "name": "string.quoted.double.css",
              "patterns": [
                {
                  "include": "#escapes"
                },
                {
                  "match": "(?<=[\"\\s])[*A-Za-z]+(-[*0-9A-Za-z]*)*(?=[\"\\s])",
                  "name": "support.constant.language-range.css"
                }
              ]
            },
            {
              "begin": "'",
              "beginCaptures": {
                "0": {
                  "name": "punctuation.definition.string.begin.css"
                }
              },
              "end": "'",
              "endCaptures": {
                "0": {
                  "name": "punctuation.definition.string.end.css"
                }
              },
              "name": "string.quoted.single.css",
              "patterns": [
                {
                  "include": "#escapes"
                },
                {
                  "match": "(?<=['\\s])[*A-Za-z]+(-[*0-9A-Za-z]*)*(?=['\\s])",
                  "name": "support.constant.language-range.css"
                }
              ]
            },
            {
              "include": "#commas"
            }
          ]
        },
        {
          "begin": "(?i)((:)(?:not|has|matches|where|is))(\\()",
          "beginCaptures": {
            "1": {
              "name": "entity.other.attribute-name.pseudo-class.css"
            },
            "2": {
              "name": "punctuation.definition.entity.css"
            },
            "3": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "patterns": [
            {
              "include": "#selector-innards"
            }
          ]
        },
        {
          "begin": "(?i)((:)nth-(?:last-)?(?:child|of-type))(\\()",
          "beginCaptures": {
            "1": {
              "name": "entity.other.attribute-name.pseudo-class.css"
            },
            "2": {
              "name": "punctuation.definition.entity.css"
            },
            "3": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "patterns": [
            {
              "match": "(?i)[-+]?(\\d+n?|n)(\\s*[-+]\\s*\\d+)?",
              "name": "constant.numeric.css"
            },
            {
              "match": "(?i)even|odd",
              "name": "support.constant.parity.css"
            }
          ]
        }
      ]
    },
    "functions": {
      "patterns": [
        {
          "begin": "(?i)(?<![-\\w])(calc)(\\()",
          "beginCaptures": {
            "1": {
              "name": "support.function.calc.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "name": "meta.function.calc.css",
          "patterns": [
            {
              "match": "[*/]|(?<=\\s|^)[-+](?=\\s|$)",
              "name": "keyword.operator.arithmetic.css"
            },
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "begin": "(?i)(?<![-\\w])(rgba?|hsla?|hwb|lab|oklab|lch|oklch|color)(\\()",
          "beginCaptures": {
            "1": {
              "name": "support.function.misc.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "name": "meta.function.color.css",
          "patterns": [
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "begin": "(?i)(?<![-\\w])((?:-(?:webkit-|moz-|o-))?(?:repeating-)?(?:linear|radial|conic)-gradient)(\\()",
          "beginCaptures": {
            "1": {
              "name": "support.function.gradient.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "name": "meta.function.gradient.css",
          "patterns": [
            {
              "match": "(?i)(?<![-\\w])(from|to|at|in|hue)(?![-\\w])",
              "name": "keyword.operator.gradient.css"
            },
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "begin": "(?i)(?<![-\\w])(-webkit-gradient)(\\()",
          "beginCaptures": {
            "1": {
              "name": "invalid.deprecated.gradient.function.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "name": "meta.function.gradient.invalid.deprecated.gradient.css",
          "patterns": [
            {
              "begin": "(?i)(?<![-\\w])(from|to|color-stop)(\\()",
              "beginCaptures": {
                "1": {
                  "name": "invalid.deprecated.function.css"
                },
                "2": {
                  "name": "punctuation.section.function.begin.bracket.round.css"
                }
              },
              "end": "\\)",
              "endCaptures": {
                "0": {
                  "name": "punctuation.section.function.end.bracket.round.css"
                }
              },
              "patterns": [
                {
                  "include": "#property-values"
                }
              ]
            },
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "begin": "(?i)(?<![-\\w])(annotation|attr|blur|brightness|character-variant|clamp|contrast|counters?|cross-fade|drop-shadow|element|fit-content|format|grayscale|hue-rotate|color-mix|image-set|invert|local|max|min|minmax|opacity|ornaments|repeat|saturate|sepia|styleset|stylistic|swash|symbols|cos|sin|tan|acos|asin|atan2??|hypot|sqrt|pow|log|exp|abs|sign)(\\()",
          "beginCaptures": {
            "1": {
              "name": "support.function.misc.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "name": "meta.function.misc.css",
          "patterns": [
            {
              "match": "(?i)(?<=[\",\\s]|\\*/|^)\\d+x(?=[\"'),\\s]|/\\*|$)",
              "name": "constant.numeric.other.density.css"
            },
            {
              "include": "#property-values"
            },
            {
              "match": "[^\"'),\\s]+",
              "name": "variable.parameter.misc.css"
            }
          ]
        },
        {
          "begin": "(?i)(?<![-\\w])(circle|ellipse|inset|polygon|rect)(\\()",
          "beginCaptures": {
            "1": {
              "name": "support.function.shape.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "name": "meta.function.shape.css",
          "patterns": [
            {
              "match": "(?i)(?<=\\s|^|\\*/)(at|round)(?=\\s|/\\*|$)",
              "name": "keyword.operator.shape.css"
            },
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "begin": "(?i)(?<![-\\w])(cubic-bezier|steps)(\\()",
          "beginCaptures": {
            "1": {
              "name": "support.function.timing-function.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "name": "meta.function.timing-function.css",
          "patterns": [
            {
              "match": "(?i)(?<![-\\w])(start|end)(?=\\s*\\)|$)",
              "name": "support.constant.step-direction.css"
            },
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "begin": "(?i)(?<![-\\w])((?:translate|scale|rotate)(?:[XYZ]|3D)?|matrix(?:3D)?|skew[XY]?|perspective)(\\()",
          "beginCaptures": {
            "1": {
              "name": "support.function.transform.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "patterns": [
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "include": "#url"
        },
        {
          "begin": "(?i)(?<![-\\w])(var)(\\()",
          "beginCaptures": {
            "1": {
              "name": "support.function.misc.css"
            },
            "2": {
              "name": "punctuation.section.function.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.function.end.bracket.round.css"
            }
          },
          "name": "meta.function.variable.css",
          "patterns": [
            {
              "match": "--[-A-Z_a-z[^\\x00-\\x7F]](?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*",
              "name": "variable.argument.css"
            },
            {
              "include": "#property-values"
            }
          ]
        }
      ]
    },
    "media-feature-keywords": {
      "match": "(?i)(?<=^|[:\\s]|\\*/)(?:portrait|landscape|progressive|interlace|fullscreen|standalone|minimal-ui|browser|hover)(?=[)\\s]|$)",
      "name": "support.constant.property-value.css"
    },
    "media-features": {
      "captures": {
        "1": {
          "name": "support.type.property-name.media.css"
        },
        "2": {
          "name": "support.type.property-name.media.css"
        },
        "3": {
          "name": "support.type.vendored.property-name.media.css"
        }
      },
      "match": "(?i)(?<=^|[(\\s]|\\*/)(?:((?:m(?:in-|ax-))?(?:height|width|aspect-ratio|color|color-index|monochrome|resolution)|grid|scan|orientation|display-mode|hover)|((?:m(?:in-|ax-))?device-(?:height|width|aspect-ratio))|((?:[-_](?:webkit|apple|khtml|epub|moz|ms|o|xv|ah|rim|atsc|hp|tc|wap|ro)|(?:mso|prince))-[-\\w]+(?=\\s*(?:/\\*(?:[^*]|\\*[^/])*\\*/)?\\s*[):])))(?=\\s|$|[):<=>]|/\\*)"
    },
    "media-query": {
      "begin": "\\G",
      "end": "(?=\\s*[;{])",
      "patterns": [
        {
          "include": "#comment-block"
        },
        {
          "include": "#escapes"
        },
        {
          "include": "#media-types"
        },
        {
          "match": "(?i)(?<=\\s|^|,|\\*/)(only|not)(?=[{\\s]|/\\*|$)",
          "name": "keyword.operator.logical.$1.media.css"
        },
        {
          "match": "(?i)(?<=\\s|^|\\*/|\\))and(?=\\s|/\\*|$)",
          "name": "keyword.operator.logical.and.media.css"
        },
        {
          "match": ",(?:(?:\\s*,)+|(?=\\s*[);{]))",
          "name": "invalid.illegal.comma.css"
        },
        {
          "include": "#commas"
        },
        {
          "begin": "\\(",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.parameters.begin.bracket.round.css"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.parameters.end.bracket.round.css"
            }
          },
          "patterns": [
            {
              "include": "#media-features"
            },
            {
              "include": "#media-feature-keywords"
            },
            {
              "match": ":",
              "name": "punctuation.separator.key-value.css"
            },
            {
              "match": ">=|<=|[<=>]",
              "name": "keyword.operator.comparison.css"
            },
            {
              "captures": {
                "1": {
                  "name": "constant.numeric.css"
                },
                "2": {
                  "name": "keyword.operator.arithmetic.css"
                },
                "3": {
                  "name": "constant.numeric.css"
                }
              },
              "match": "(\\d+)\\s*(/)\\s*(\\d+)",
              "name": "meta.ratio.css"
            },
            {
              "include": "#numeric-values"
            },
            {
              "include": "#comment-block"
            }
          ]
        }
      ]
    },
    "media-query-list": {
      "begin": "(?=\\s*[^;{])",
      "end": "(?=\\s*[;{])",
      "patterns": [
        {
          "include": "#media-query"
        }
      ]
    },
    "media-types": {
      "captures": {
        "1": {
          "name": "support.constant.media.css"
        },
        "2": {
          "name": "invalid.deprecated.constant.media.css"
        }
      },
      "match": "(?i)(?<=^|[,\\s]|\\*/)(?:(all|print|screen|speech)|(aural|braille|embossed|handheld|projection|tty|tv))(?=$|[,;{\\s]|/\\*)"
    },
    "numeric-values": {
      "patterns": [
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.constant.css"
            }
          },
          "match": "(#)(?:\\h{3,4}|\\h{6}|\\h{8})\\b",
          "name": "constant.other.color.rgb-value.hex.css"
        },
        {
          "captures": {
            "1": {
              "name": "keyword.other.unit.percentage.css"
            },
            "2": {
              "name": "keyword.other.unit.${2:/downcase}.css"
            }
          },
          "match": "(?i)(?<![-\\w])[-+]?(?:[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+)(?:(?<=[0-9])E[-+]?[0-9]+)?(?:(%)|(deg|grad|rad|turn|Hz|kHz|ch|cm|em|ex|fr|in|mm|mozmm|pc|pt|px|q|rem|rch|rex|rlh|ic|ric|rcap|vh|vw|vb|vi|svh|svw|svb|svi|dvh|dvw|dvb|dvi|lvh|lvw|lvb|lvi|vmax|vmin|cqw|cqi|cqh|cqb|cqmin|cqmax|dpi|dpcm|dppx|s|ms)\\b)?",
          "name": "constant.numeric.css"
        }
      ]
    },
    "property-keywords": {
      "patterns": [
        {
          "match": "(?i)(?<![-\\w])(above|absolute|active|add|additive|after-edge|alias|all|all-petite-caps|all-scroll|all-small-caps|alpha|alphabetic|alternate|alternate-reverse|always|antialiased|auto|auto-fill|auto-fit|auto-pos|available|avoid|avoid-column|avoid-page|avoid-region|backwards|balance|baseline|before-edge|below|bevel|bidi-override|blink|block|block-axis|block-start|block-end|bold|bolder|border|border-box|both|bottom|bottom-outside|break-all|break-word|bullets|butt|capitalize|caption|cell|center|central|char|circle|clip|clone|close-quote|closest-corner|closest-side|col-resize|collapse|color|color-burn|color-dodge|column|column-reverse|common-ligatures|compact|condensed|contain|content|content-box|contents|context-menu|contextual|copy|cover|crisp-edges|crispEdges|crosshair|cyclic|dark|darken|dashed|decimal|default|dense|diagonal-fractions|difference|digits|disabled|disc|discretionary-ligatures|distribute|distribute-all-lines|distribute-letter|distribute-space|dot|dotted|double|double-circle|downleft|downright|e-resize|each-line|ease|ease-in|ease-in-out|ease-out|economy|ellipse|ellipsis|embed|end|evenodd|ew-resize|exact|exclude|exclusion|expanded|extends|extra-condensed|extra-expanded|fallback|farthest-corner|farthest-side|fill|fill-available|fill-box|filled|fit-content|fixed|flat|flex|flex-end|flex-start|flip|flow|flow-root|forwards|freeze|from-image|full-width|geometricPrecision|georgian|grab|grabbing|grayscale|grid|groove|hand|hanging|hard-light|help|hidden|hide|historical-forms|historical-ligatures|horizontal|horizontal-tb|hue|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|infinite|inherit|initial|inline|inline-axis|inline-block|inline-end|inline-flex|inline-grid|inline-list-item|inline-start|inline-table|inset|inside|inter-character|inter-ideograph|inter-word|intersect|invert|isolate|isolate-override|italic|jis04|jis78|jis83|jis90|justify|justify-all|kannada|keep-all|landscape|larger??|left|light|lighten|lighter|line|line-edge|line-through|linear|linearRGB|lining-nums|list-item|local|loose|lowercase|lr|lr-tb|ltr|luminance|luminosity|main-size|mandatory|manipulation|manual|margin-box|match-parent|match-source|mathematical|max-content|medium|menu|message-box|middle|min-content|miter|mixed|move|multiply|n-resize|narrower|ne-resize|nearest-neighbor|nesw-resize|newspaper|no-change|no-clip|no-close-quote|no-common-ligatures|no-contextual|no-discretionary-ligatures|no-drop|no-historical-ligatures|no-open-quote|no-repeat|none|nonzero|normal|not-allowed|nowrap|ns-resize|numbers|numeric|nw-resize|nwse-resize|oblique|oldstyle-nums|open|open-quote|optimizeLegibility|optimizeQuality|optimizeSpeed|optional|ordinal|outset|outside|over|overlay|overline|padding|padding-box|page|painted|pan-down|pan-left|pan-right|pan-up|pan-x|pan-y|paused|petite-caps|pixelated|plaintext|pointer|portrait|pre|pre-line|pre-wrap|preserve-3d|progress|progressive|proportional-nums|proportional-width|proximity|radial|recto|region|relative|remove|repeat|repeat-[xy]|reset-size|reverse|revert|revert-layer|ridge|right|rl|rl-tb|round|row|row-resize|row-reverse|row-severse|rtl|ruby|ruby-base|ruby-base-container|ruby-text|ruby-text-container|run-in|running|s-resize|saturation|scale-down|screen|scroll|scroll-position|se-resize|semi-condensed|semi-expanded|separate|sesame|show|sideways|sideways-left|sideways-lr|sideways-right|sideways-rl|simplified|slashed-zero|slice|small|small-caps|small-caption|smaller|smooth|soft-light|solid|space|space-around|space-between|space-evenly|spell-out|square|sRGB|stacked-fractions|start|static|status-bar|swap|step-end|step-start|sticky|stretch|strict|stroke|stroke-box|style|sub|subgrid|subpixel-antialiased|subtract|super|sw-resize|symbolic|table|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row|table-row-group|tabular-nums|tb|tb-rl|text|text-after-edge|text-before-edge|text-bottom|text-top|thick|thin|titling-caps|top|top-outside|touch|traditional|transparent|triangle|ultra-condensed|ultra-expanded|under|underline|unicase|unset|upleft|uppercase|upright|use-glyph-orientation|use-script|verso|vertical|vertical-ideographic|vertical-lr|vertical-rl|vertical-text|view-box|visible|visibleFill|visiblePainted|visibleStroke|w-resize|wait|wavy|weight|whitespace|wider|words|wrap|wrap-reverse|x|x-large|x-small|xx-large|xx-small|y|zero|zoom-in|zoom-out)(?![-\\w])",
          "name": "support.constant.property-value.css"
        },
        {
          "match": "(?i)(?<![-\\w])(arabic-indic|armenian|bengali|cambodian|circle|cjk-decimal|cjk-earthly-branch|cjk-heavenly-stem|cjk-ideographic|decimal|decimal-leading-zero|devanagari|disc|disclosure-closed|disclosure-open|ethiopic-halehame-am|ethiopic-halehame-ti-e[rt]|ethiopic-numeric|georgian|gujarati|gurmukhi|hangul|hangul-consonant|hebrew|hiragana|hiragana-iroha|japanese-formal|japanese-informal|kannada|katakana|katakana-iroha|khmer|korean-hangul-formal|korean-hanja-formal|korean-hanja-informal|lao|lower-alpha|lower-armenian|lower-greek|lower-latin|lower-roman|malayalam|mongolian|myanmar|oriya|persian|simp-chinese-formal|simp-chinese-informal|square|tamil|telugu|thai|tibetan|trad-chinese-formal|trad-chinese-informal|upper-alpha|upper-armenian|upper-latin|upper-roman|urdu)(?![-\\w])",
          "name": "support.constant.property-value.list-style-type.css"
        },
        {
          "match": "(?<![-\\w])(?i:-(?:ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)|(?:mso|prince))-[-A-Za-z]+",
          "name": "support.constant.vendored.property-value.css"
        },
        {
          "match": "(?<![-\\w])(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system-ui|system|tahoma|times|trebuchet|ui-monospace|ui-rounded|ui-sans-serif|ui-serif|utopia|verdana|webdings|sans-serif|serif|monospace)(?![-\\w])",
          "name": "support.constant.font-name.css"
        }
      ]
    },
    "property-names": {
      "patterns": [
        {
          "match": "(?i)(?<![-\\w])(?:accent-color|additive-symbols|align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|aspect-ratio|backdrop-filter|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-position-[xy]|background-repeat|background-size|bleed|block-size|border|border-block-end|border-block-end-color|border-block-end-style|border-block-end-width|border-block-start|border-block-start-color|border-block-start-style|border-block-start-width|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-end-end-radius|border-end-start-radius|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-inline-end|border-inline-end-color|border-inline-end-style|border-inline-end-width|border-inline-start|border-inline-start-color|border-inline-start-style|border-inline-start-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-start-end-radius|border-start-start-radius|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-decoration-break|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|caret-color|clear|clip|clip-path|clip-rule|color|color-adjust|color-interpolation-filters|color-scheme|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|contain|container|container-name|container-type|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|enable-background|fallback|fill|fill-opacity|fill-rule|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|flood-color|flood-opacity|font|font-display|font-family|font-feature-settings|font-kerning|font-language-override|font-optical-sizing|font-size|font-size-adjust|font-stretch|font-style|font-synthesis|font-variant|font-variant-alternates|font-variant-caps|font-variant-east-asian|font-variant-ligatures|font-variant-numeric|font-variant-position|font-variation-settings|font-weight|gap|glyph-orientation-horizontal|glyph-orientation-vertical|grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-gap|grid-column-start|grid-gap|grid-row|grid-row-end|grid-row-gap|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows|hanging-punctuation|height|hyphens|image-orientation|image-rendering|image-resolution|ime-mode|initial-letter|initial-letter-align|inline-size|inset|inset-block|inset-block-end|inset-block-start|inset-inline|inset-inline-end|inset-inline-start|isolation|justify-content|justify-items|justify-self|kerning|left|letter-spacing|lighting-color|line-break|line-clamp|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-block|margin-block-end|margin-block-start|margin-bottom|margin-inline|margin-inline-end|margin-inline-start|margin-left|margin-right|margin-top|marker-end|marker-mid|marker-start|marks|mask|mask-border|mask-border-mode|mask-border-outset|mask-border-repeat|mask-border-slice|mask-border-source|mask-border-width|mask-clip|mask-composite|mask-image|mask-mode|mask-origin|mask-position|mask-repeat|mask-size|mask-type|max-block-size|max-height|max-inline-size|max-lines|max-width|max-zoom|min-block-size|min-height|min-inline-size|min-width|min-zoom|mix-blend-mode|negative|object-fit|object-position|offset|offset-anchor|offset-distance|offset-path|offset-position|offset-rotation|opacity|order|orientation|orphans|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-anchor|overflow-block|overflow-inline|overflow-wrap|overflow-[xy]|overscroll-behavior|overscroll-behavior-block|overscroll-behavior-inline|overscroll-behavior-[xy]|pad|padding|padding-block|padding-block-end|padding-block-start|padding-bottom|padding-inline|padding-inline-end|padding-inline-start|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|paint-order|perspective|perspective-origin|place-content|place-items|place-self|pointer-events|position|prefix|quotes|range|resize|right|rotate|row-gap|ruby-align|ruby-merge|ruby-position|scale|scroll-behavior|scroll-margin|scroll-margin-block|scroll-margin-block-end|scroll-margin-block-start|scroll-margin-bottom|scroll-margin-inline|scroll-margin-inline-end|scroll-margin-inline-start|scroll-margin-left|scroll-margin-right|scroll-margin-top|scroll-padding|scroll-padding-block|scroll-padding-block-end|scroll-padding-block-start|scroll-padding-bottom|scroll-padding-inline|scroll-padding-inline-end|scroll-padding-inline-start|scroll-padding-left|scroll-padding-right|scroll-padding-top|scroll-snap-align|scroll-snap-coordinate|scroll-snap-destination|scroll-snap-stop|scroll-snap-type|scrollbar-color|scrollbar-gutter|scrollbar-width|shape-image-threshold|shape-margin|shape-outside|shape-rendering|size|speak-as|src|stop-color|stop-opacity|stroke|stroke-dasharray|stroke-dashoffset|stroke-linecap|stroke-linejoin|stroke-miterlimit|stroke-opacity|stroke-width|suffix|symbols|system|tab-size|table-layout|text-align|text-align-last|text-anchor|text-combine-upright|text-decoration|text-decoration-color|text-decoration-line|text-decoration-skip|text-decoration-skip-ink|text-decoration-style|text-decoration-thickness|text-emphasis|text-emphasis-color|text-emphasis-position|text-emphasis-style|text-indent|text-justify|text-orientation|text-overflow|text-rendering|text-shadow|text-size-adjust|text-transform|text-underline-offset|text-underline-position|top|touch-action|transform|transform-box|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|translate|unicode-bidi|unicode-range|user-select|user-zoom|vertical-align|visibility|white-space|widows|width|will-change|word-break|word-spacing|word-wrap|writing-mode|z-index|zoom|alignment-baseline|baseline-shift|clip-rule|color-interpolation|color-interpolation-filters|color-profile|color-rendering|cx|cy|dominant-baseline|enable-background|fill|fill-opacity|fill-rule|flood-color|flood-opacity|glyph-orientation-horizontal|glyph-orientation-vertical|height|kerning|lighting-color|marker-end|marker-mid|marker-start|rx??|ry|shape-rendering|stop-color|stop-opacity|stroke|stroke-dasharray|stroke-dashoffset|stroke-linecap|stroke-linejoin|stroke-miterlimit|stroke-opacity|stroke-width|text-anchor|width|[xy]|adjust|after|align|align-last|alignment|alignment-adjust|appearance|attachment|azimuth|background-break|balance|baseline|before|bidi|binding|bookmark|bookmark-label|bookmark-level|bookmark-target|border-length|bottom-color|bottom-left-radius|bottom-right-radius|bottom-style|bottom-width|box|box-align|box-direction|box-flex|box-flex-group|box-lines|box-ordinal-group|box-orient|box-pack|break|character|collapse|column|column-break-after|column-break-before|count|counter|crop|cue|cue-after|cue-before|decoration|decoration-break|delay|display-model|display-role|down|drop|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|duration|elevation|emphasis|family|fit|fit-position|flex-group|float-offset|gap|grid-columns|grid-rows|hanging-punctuation|header|hyphenate|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|icon|image|increment|indent|index|initial-after-adjust|initial-after-align|initial-before-adjust|initial-before-align|initial-size|initial-value|inline-box-align|iteration-count|justify|label|left-color|left-style|left-width|length|level|line|line-stacking|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|lines|list|mark|mark-after|mark-before|marks|marquee|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max|min|model|move-to|name|nav|nav-down|nav-index|nav-left|nav-right|nav-up|new|numeral|offset|ordinal-group|orient|origin|overflow-style|overhang|pack|page|page-policy|pause|pause-after|pause-before|phonemes|pitch|pitch-range|play-count|play-during|play-state|point|presentation|presentation-level|profile|property|punctuation|punctuation-trim|radius|rate|rendering-intent|repeat|replace|reset|resolution|resource|respond-to|rest|rest-after|rest-before|richness|right-color|right-style|right-width|role|rotation|rotation-point|rows|ruby|ruby-overhang|ruby-span|rule|rule-color|rule-style|rule-width|shadow|size|size-adjust|sizing|space|space-collapse|spacing|span|speak|speak-header|speak-numeral|speak-punctuation|speech|speech-rate|speed|stacking|stacking-ruby|stacking-shift|stacking-strategy|stress|stretch|string-set|style|style-image|style-position|style-type|target|target-name|target-new|target-position|text|text-height|text-justify|text-outline|text-replace|text-wrap|timing-function|top-color|top-left-radius|top-right-radius|top-style|top-width|trim|unicode|up|user-select|variant|voice|voice-balance|voice-duration|voice-family|voice-pitch|voice-pitch-range|voice-rate|voice-stress|voice-volume|volume|weight|white|white-space-collapse|word|wrap)(?![-\\w])",
          "name": "support.type.property-name.css"
        },
        {
          "match": "(?<![-\\w])(?i:-(?:ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)|(?:mso|prince))-[-A-Za-z]+",
          "name": "support.type.vendored.property-name.css"
        }
      ]
    },
    "property-values": {
      "patterns": [
        {
          "include": "#commas"
        },
        {
          "include": "#comment-block"
        },
        {
          "include": "#escapes"
        },
        {
          "include": "#functions"
        },
        {
          "include": "#property-keywords"
        },
        {
          "include": "#unicode-range"
        },
        {
          "include": "#numeric-values"
        },
        {
          "include": "#color-keywords"
        },
        {
          "include": "#string"
        },
        {
          "match": "!\\s*important(?![-\\w])",
          "name": "keyword.other.important.css"
        }
      ]
    },
    "pseudo-classes": {
      "captures": {
        "1": {
          "name": "punctuation.definition.entity.css"
        },
        "2": {
          "name": "invalid.illegal.colon.css"
        }
      },
      "match": "(?i)(:)(:*)(?:active|any-link|checked|default|disabled|empty|enabled|first|(?:first|last|only)-(?:child|of-type)|focus|focus-visible|focus-within|fullscreen|host|hover|in-range|indeterminate|invalid|left|link|optional|out-of-range|read-only|read-write|required|right|root|scope|target|unresolved|valid|visited)(?![-\\w]|\\s*[;}])",
      "name": "entity.other.attribute-name.pseudo-class.css"
    },
    "pseudo-elements": {
      "captures": {
        "1": {
          "name": "punctuation.definition.entity.css"
        },
        "2": {
          "name": "punctuation.definition.entity.css"
        }
      },
      "match": "(?i)(?:(::?)(?:after|before|first-letter|first-line|(?:-(?:ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)|(?:mso|prince))-[-a-z]+)|(::)(?:backdrop|content|grammar-error|marker|placeholder|selection|shadow|spelling-error))(?![-\\w]|\\s*[;}])",
      "name": "entity.other.attribute-name.pseudo-element.css"
    },
    "rule-list": {
      "begin": "\\{",
      "beginCaptures": {
        "0": {
          "name": "punctuation.section.property-list.begin.bracket.curly.css"
        }
      },
      "end": "}",
      "endCaptures": {
        "0": {
          "name": "punctuation.section.property-list.end.bracket.curly.css"
        }
      },
      "name": "meta.property-list.css",
      "patterns": [
        {
          "include": "#rule-list-innards"
        }
      ]
    },
    "rule-list-innards": {
      "patterns": [
        {
          "include": "#comment-block"
        },
        {
          "include": "#escapes"
        },
        {
          "include": "#font-features"
        },
        {
          "match": "(?<![-\\w])--[-A-Z_a-z[^\\x00-\\x7F]](?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*",
          "name": "variable.css"
        },
        {
          "begin": "(?<![-A-Za-z])(?=[-A-Za-z])",
          "end": "$|(?![-A-Za-z])",
          "name": "meta.property-name.css",
          "patterns": [
            {
              "include": "#property-names"
            }
          ]
        },
        {
          "begin": "(:)\\s*",
          "beginCaptures": {
            "1": {
              "name": "punctuation.separator.key-value.css"
            }
          },
          "contentName": "meta.property-value.css",
          "end": "\\s*(;)|\\s*(?=[)}])",
          "endCaptures": {
            "1": {
              "name": "punctuation.terminator.rule.css"
            }
          },
          "patterns": [
            {
              "include": "#comment-block"
            },
            {
              "include": "#property-values"
            }
          ]
        },
        {
          "match": ";",
          "name": "punctuation.terminator.rule.css"
        }
      ]
    },
    "selector": {
      "begin": "(?=\\|?(?:[-#*.:A-\\[_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.)))",
      "end": "(?=\\s*[)/@{])",
      "name": "meta.selector.css",
      "patterns": [
        {
          "include": "#selector-innards"
        }
      ]
    },
    "selector-innards": {
      "patterns": [
        {
          "include": "#comment-block"
        },
        {
          "include": "#commas"
        },
        {
          "include": "#escapes"
        },
        {
          "include": "#combinators"
        },
        {
          "captures": {
            "1": {
              "name": "entity.other.namespace-prefix.css"
            },
            "2": {
              "name": "punctuation.separator.css"
            }
          },
          "match": "(?:^|(?<=[(,;}\\s]))(?![-*\\w]+\\|(?![-#*.:A-\\[_a-z[^\\x00-\\x7F]]))([-A-Z_a-z[^\\x00-\\x7F]](?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*|\\*)?(\\|)"
        },
        {
          "include": "#tag-names"
        },
        {
          "match": "\\*",
          "name": "entity.name.tag.wildcard.css"
        },
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.entity.css"
            },
            "2": {
              "patterns": [
                {
                  "include": "#escapes"
                }
              ]
            }
          },
          "match": "(?<![-@\\w])([#.])((?:-?[0-9]|-(?=$|[#)+,.:>\\[{|~\\s]|/\\*)|(?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*(?:[]!\"%-(*;<?@^`|}]|/(?!\\*))+)(?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*)",
          "name": "invalid.illegal.bad-identifier.css"
        },
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.entity.css"
            },
            "2": {
              "patterns": [
                {
                  "include": "#escapes"
                }
              ]
            }
          },
          "match": "(\\.)((?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))+)(?=$|[#)+,.:>\\[{|~\\s]|/\\*)",
          "name": "entity.other.attribute-name.class.css"
        },
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.entity.css"
            },
            "2": {
              "patterns": [
                {
                  "include": "#escapes"
                }
              ]
            }
          },
          "match": "(#)(-?(?![0-9])(?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))+)(?=$|[#)+,.:>\\[{|~\\s]|/\\*)",
          "name": "entity.other.attribute-name.id.css"
        },
        {
          "begin": "\\[",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.entity.begin.bracket.square.css"
            }
          },
          "end": "]",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.entity.end.bracket.square.css"
            }
          },
          "name": "meta.attribute-selector.css",
          "patterns": [
            {
              "include": "#comment-block"
            },
            {
              "include": "#string"
            },
            {
              "captures": {
                "1": {
                  "name": "storage.modifier.ignore-case.css"
                }
              },
              "match": "(?<=[\"'\\s]|^|\\*/)\\s*([Ii])\\s*(?=[]\\s]|/\\*|$)"
            },
            {
              "captures": {
                "1": {
                  "name": "string.unquoted.attribute-value.css",
                  "patterns": [
                    {
                      "include": "#escapes"
                    }
                  ]
                }
              },
              "match": "(?<==)\\s*((?!/\\*)(?:[^]\"'\\\\\\s]|\\\\.)+)"
            },
            {
              "include": "#escapes"
            },
            {
              "match": "[$*^|~]?=",
              "name": "keyword.operator.pattern.css"
            },
            {
              "match": "\\|",
              "name": "punctuation.separator.css"
            },
            {
              "captures": {
                "1": {
                  "name": "entity.other.namespace-prefix.css",
                  "patterns": [
                    {
                      "include": "#escapes"
                    }
                  ]
                }
              },
              "match": "(-?(?!\\d)(?:[-\\w[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))+|\\*)(?=\\|(?![=\\s]|$|])(?:-?(?!\\d)|[-\\\\\\w[^\\x00-\\x7F]]))"
            },
            {
              "captures": {
                "1": {
                  "name": "entity.other.attribute-name.css",
                  "patterns": [
                    {
                      "include": "#escapes"
                    }
                  ]
                }
              },
              "match": "(-?(?!\\d)(?>[-\\w[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))+)\\s*(?=[]$*=^|~]|/\\*)"
            }
          ]
        },
        {
          "include": "#pseudo-classes"
        },
        {
          "include": "#pseudo-elements"
        },
        {
          "include": "#functional-pseudo-classes"
        },
        {
          "match": "(?<![-@\\w])(?=[a-z]\\w*-)(?:(?![A-Z])[-\\w])+(?![-(\\w])",
          "name": "entity.name.tag.custom.css"
        }
      ]
    },
    "string": {
      "patterns": [
        {
          "begin": "\"",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.string.begin.css"
            }
          },
          "end": "\"|(?<!\\\\)(?=$|\\n)",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.string.end.css"
            }
          },
          "name": "string.quoted.double.css",
          "patterns": [
            {
              "begin": "(?:\\G|^)(?=(?:[^\"\\\\]|\\\\.)+$)",
              "end": "$",
              "name": "invalid.illegal.unclosed.string.css",
              "patterns": [
                {
                  "include": "#escapes"
                }
              ]
            },
            {
              "include": "#escapes"
            }
          ]
        },
        {
          "begin": "'",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.string.begin.css"
            }
          },
          "end": "'|(?<!\\\\)(?=$|\\n)",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.string.end.css"
            }
          },
          "name": "string.quoted.single.css",
          "patterns": [
            {
              "begin": "(?:\\G|^)(?=(?:[^'\\\\]|\\\\.)+$)",
              "end": "$",
              "name": "invalid.illegal.unclosed.string.css",
              "patterns": [
                {
                  "include": "#escapes"
                }
              ]
            },
            {
              "include": "#escapes"
            }
          ]
        }
      ]
    },
    "tag-names": {
      "match": "(?i)(?<![-:\\w])(?:a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdi|bdo|bgsound|big|blink|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|content|data|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|element|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h[1-6]|head|header|hgroup|hr|html|i|iframe|image|img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing|main|map|mark|marquee|math|menu|menuitem|meta|meter|multicol|nav|nextid|nobr|noembed|noframes|noscript|object|ol|optgroup|option|output|p|param|picture|plaintext|pre|progress|q|rb|rp|rtc??|ruby|s|samp|script|section|select|shadow|slot|small|source|spacer|span|strike|strong|style|sub|summary|sup|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr|track|tt|ul??|var|video|wbr|xmp|altGlyph|altGlyphDef|altGlyphItem|animate|animateColor|animateMotion|animateTransform|circle|clipPath|color-profile|cursor|defs|desc|discard|ellipse|feBlend|feColorMatrix|feComponentTransfer|feComposite|feConvolveMatrix|feDiffuseLighting|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feImage|feMerge|feMergeNode|feMorphology|feOffset|fePointLight|feSpecularLighting|feSpotLight|feTile|feTurbulence|filter|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|foreignObject|g|glyph|glyphRef|hatch|hatchpath|hkern|line|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|metadata|missing-glyph|mpath|path|pattern|polygon|polyline|radialGradient|rect|set|solidcolor|stop|svg|switch|symbol|text|textPath|tref|tspan|use|view|vkern|annotation|annotation-xml|maction|maligngroup|malignmark|math|menclose|merror|mfenced|mfrac|mglyph|mi|mlabeledtr|mlongdiv|mmultiscripts|mn|mo|mover|mpadded|mphantom|mroot|mrow|ms|mscarries|mscarry|msgroup|msline|mspace|msqrt|msrow|mstack|mstyle|msub|msubsup|msup|mtable|mtd|mtext|mtr|munder|munderover|semantics)(?=[#)+,.:>\\[{|~\\s]|/\\*|$)",
      "name": "entity.name.tag.css"
    },
    "unicode-range": {
      "captures": {
        "0": {
          "name": "constant.other.unicode-range.css"
        },
        "1": {
          "name": "punctuation.separator.dash.unicode-range.css"
        }
      },
      "match": "(?<![-\\w])[Uu]\\+[?\\h]{1,6}(?:(-)\\h{1,6})?(?![-\\w])"
    },
    "url": {
      "begin": "(?i)(?<![-@\\w])(url)(\\()",
      "beginCaptures": {
        "1": {
          "name": "support.function.url.css"
        },
        "2": {
          "name": "punctuation.section.function.begin.bracket.round.css"
        }
      },
      "end": "\\)",
      "endCaptures": {
        "0": {
          "name": "punctuation.section.function.end.bracket.round.css"
        }
      },
      "name": "meta.function.url.css",
      "patterns": [
        {
          "match": "[^\"')\\s]+",
          "name": "variable.parameter.url.css"
        },
        {
          "include": "#string"
        },
        {
          "include": "#comment-block"
        },
        {
          "include": "#escapes"
        }
      ]
    }
  },
  "scopeName": "source.css"
}|json}