@semanticus/semanticus-css 2.2.0 → 3.0.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.
Files changed (150) hide show
  1. package/README.md +21 -20
  2. package/dist/semanticus-no-utilities.css +1 -1
  3. package/dist/semanticus-semantics.css +1 -1
  4. package/dist/semanticus-utilities.css +1 -1
  5. package/dist/semanticus.css +2 -2
  6. package/dist/semanticus.palette.amber.css +1 -1
  7. package/dist/semanticus.palette.azure.css +1 -1
  8. package/dist/semanticus.palette.blue.css +1 -1
  9. package/dist/semanticus.palette.cyan.css +1 -1
  10. package/dist/semanticus.palette.fuchsia.css +1 -1
  11. package/dist/semanticus.palette.green.css +1 -1
  12. package/dist/semanticus.palette.grey.css +1 -1
  13. package/dist/semanticus.palette.indigo.css +1 -1
  14. package/dist/semanticus.palette.jade.css +1 -1
  15. package/dist/semanticus.palette.lime.css +1 -1
  16. package/dist/semanticus.palette.orange.css +1 -1
  17. package/dist/semanticus.palette.pink.css +1 -1
  18. package/dist/semanticus.palette.pumpkin.css +1 -1
  19. package/dist/semanticus.palette.purple.css +1 -1
  20. package/dist/semanticus.palette.red.css +1 -1
  21. package/dist/semanticus.palette.sand.css +1 -1
  22. package/dist/semanticus.palette.slate.css +1 -1
  23. package/dist/semanticus.palette.violet.css +1 -1
  24. package/dist/semanticus.palette.yellow.css +1 -1
  25. package/dist/semanticus.palette.zinc.css +1 -1
  26. package/dist/semanticus.size.pico.css +1 -1
  27. package/package.json +1 -1
  28. package/src/components/_card.css +55 -46
  29. package/src/components/_icons.css +2 -2
  30. package/src/components/_pane.css +15 -8
  31. package/src/components/_sidebar.css +6 -6
  32. package/src/components/_variables.css +28 -0
  33. package/src/components/modules.css +2 -0
  34. package/src/index.css +1 -1
  35. package/src/palettes/amber.css +22 -26
  36. package/src/palettes/azure.css +22 -26
  37. package/src/palettes/blue.css +22 -26
  38. package/src/palettes/cyan.css +22 -26
  39. package/src/palettes/fuchsia.css +25 -26
  40. package/src/palettes/green.css +22 -26
  41. package/src/palettes/grey.css +22 -26
  42. package/src/palettes/indigo.css +22 -26
  43. package/src/palettes/jade.css +22 -26
  44. package/src/palettes/lime.css +22 -26
  45. package/src/palettes/orange.css +22 -26
  46. package/src/palettes/pink.css +22 -26
  47. package/src/palettes/pumpkin.css +25 -26
  48. package/src/palettes/purple.css +22 -26
  49. package/src/palettes/red.css +22 -26
  50. package/src/palettes/sand.css +22 -26
  51. package/src/palettes/slate.css +22 -26
  52. package/src/palettes/violet.css +22 -26
  53. package/src/palettes/yellow.css +22 -26
  54. package/src/palettes/zinc.css +22 -26
  55. package/src/semantics/attributes/_aria-busy.css +1 -10
  56. package/src/semantics/attributes/_aria-disabled.css +2 -23
  57. package/src/semantics/attributes/_disabled.css +3 -0
  58. package/src/semantics/attributes/_popover.css +4 -3
  59. package/src/semantics/attributes/_role-group-search.css +135 -0
  60. package/src/semantics/attributes/_role-list.css +23 -0
  61. package/src/semantics/attributes/_role-status-alert.css +28 -22
  62. package/src/semantics/attributes/_role-tooltip.css +11 -8
  63. package/src/semantics/elements/_address.css +2 -2
  64. package/src/semantics/elements/_aside.css +1 -2
  65. package/src/semantics/elements/_blockquote.css +6 -6
  66. package/src/semantics/elements/_body.css +0 -2
  67. package/src/semantics/elements/_buttons.css +100 -0
  68. package/src/semantics/elements/_code.css +18 -8
  69. package/src/semantics/elements/_del.css +1 -1
  70. package/src/semantics/elements/_details.css +147 -162
  71. package/src/semantics/elements/_dialog.css +24 -17
  72. package/src/semantics/elements/_fieldset.css +27 -0
  73. package/src/semantics/elements/_figure.css +1 -1
  74. package/src/semantics/elements/_footer.css +0 -1
  75. package/src/semantics/elements/_header.css +0 -1
  76. package/src/semantics/elements/_headings.css +86 -9
  77. package/src/semantics/elements/_hgroup.css +2 -2
  78. package/src/semantics/elements/_hr.css +2 -2
  79. package/src/semantics/elements/_inputs.css +14 -0
  80. package/src/semantics/elements/_ins.css +1 -1
  81. package/src/semantics/elements/_label.css +4 -0
  82. package/src/semantics/elements/_links.css +39 -27
  83. package/src/semantics/elements/_lists.css +10 -8
  84. package/src/semantics/elements/_mark.css +2 -2
  85. package/src/semantics/elements/_nav.css +31 -7
  86. package/src/semantics/elements/_p.css +2 -2
  87. package/src/semantics/elements/_progress.css +18 -11
  88. package/src/semantics/elements/{_document.css → _root.css} +12 -9
  89. package/src/semantics/elements/_section.css +0 -1
  90. package/src/semantics/elements/_small.css +27 -0
  91. package/src/semantics/elements/_table.css +20 -6
  92. package/src/semantics/elements/inputs/_checkbox-radio.css +30 -0
  93. package/src/semantics/elements/inputs/_checkbox.css +19 -0
  94. package/src/semantics/elements/{_type-color.css → inputs/_color.css} +5 -3
  95. package/src/semantics/elements/inputs/_common.css +87 -0
  96. package/src/semantics/elements/inputs/_date.css +53 -0
  97. package/src/semantics/elements/inputs/_file.css +35 -0
  98. package/src/semantics/elements/inputs/_input.css +47 -0
  99. package/src/semantics/elements/inputs/_radio.css +11 -0
  100. package/src/semantics/elements/inputs/_range.css +69 -0
  101. package/src/semantics/elements/inputs/_search.css +48 -0
  102. package/src/semantics/elements/inputs/_select.css +32 -0
  103. package/src/semantics/elements/inputs/_switch.css +46 -0
  104. package/src/semantics/elements/inputs/_textarea.css +30 -0
  105. package/src/semantics/modules.css +9 -13
  106. package/src/sizes/pico.css +24 -23
  107. package/src/utilities/_grid.css +917 -179
  108. package/src/utilities/_variables.css +21 -14
  109. package/src/utilities/borders/_border-radius.css +9 -9
  110. package/src/utilities/borders/_border-style.css +10 -10
  111. package/src/utilities/colors/_bg-colors.css +22 -38
  112. package/src/utilities/colors/_border-colors.css +20 -26
  113. package/src/utilities/colors/_subtle-colors.css +55 -61
  114. package/src/utilities/colors/_text-bg-colors.css +35 -35
  115. package/src/utilities/colors/_text-colors.css +24 -46
  116. package/src/utilities/effects/_focus-ring.css +14 -11
  117. package/src/utilities/layout/_misc.css +4 -3
  118. package/src/utilities/sizing/_width.css +48 -0
  119. package/src/utilities/spacing/_gap.css +0 -43
  120. package/src/utilities/spacing/_margin.css +0 -1
  121. package/src/utilities/spacing/_padding.css +0 -1
  122. package/src/utilities/typography/_font-sizes.css +6 -6
  123. package/src/variables/_all.css +3 -4
  124. package/src/variables/_theme.css +394 -237
  125. package/src/variants/_intent.css +8 -0
  126. package/src/variants/_variables.css +109 -9
  127. package/src/variants/intent/_common.css +33 -0
  128. package/src/variants/intent/_contrast.css +30 -31
  129. package/src/variants/intent/_danger.css +7 -30
  130. package/src/variants/intent/_info.css +7 -30
  131. package/src/variants/intent/_primary.css +7 -30
  132. package/src/variants/intent/_secondary.css +7 -30
  133. package/src/variants/intent/_success.css +7 -30
  134. package/src/variants/intent/_warning.css +7 -30
  135. package/src/variants/modifiers/_ghost.css +52 -152
  136. package/src/variants/modifiers/_striped.css +6 -5
  137. package/src/variants/modifiers/_subtle.css +55 -113
  138. package/src/variants/modules.css +1 -7
  139. package/src/semantics/attributes/_role-group.css +0 -126
  140. package/src/semantics/attributes/_role-search.css +0 -14
  141. package/src/semantics/elements/_article.css +0 -3
  142. package/src/semantics/elements/_button.css +0 -124
  143. package/src/semantics/elements/_input.css +0 -302
  144. package/src/semantics/elements/_main.css +0 -3
  145. package/src/semantics/elements/_type-checkbox-radio.css +0 -139
  146. package/src/semantics/elements/_type-date.css +0 -37
  147. package/src/semantics/elements/_type-file.css +0 -23
  148. package/src/semantics/elements/_type-range.css +0 -87
  149. package/src/semantics/elements/_type-search.css +0 -30
  150. package/src/variables/_elements.css +0 -195
@@ -4,11 +4,14 @@
4
4
  width: fit-content;
5
5
  }
6
6
 
7
- :not(a, button, dialog, input, [role=button])[aria-describedby] {
7
+ /* TODO: reconsider using a declarative selector */
8
+ /*
9
+ :not(a, button, dialog, input, [role="button"])[aria-describedby] {
8
10
  border-bottom: 1px dotted;
9
11
  text-decoration: none;
10
12
  cursor: help;
11
13
  }
14
+ */
12
15
 
13
16
  [role="tooltip"] {
14
17
  display: block;
@@ -18,9 +21,9 @@
18
21
  left: 50%;
19
22
  padding: 0.25rem 0.5rem;
20
23
  transform: translate(-50%, -0.25rem);
21
- border-radius: var(--radius);
22
- background: var(--tooltip-fill);
23
- color: var(--tooltip-text);
24
+ border-radius: var(--border-radius);
25
+ background: var(--tooltip-background-color);
26
+ color: var(--tooltip-color);
24
27
  font-style: normal;
25
28
  font-weight: var(--font-weight);
26
29
  font-size: 0.875rem;
@@ -37,7 +40,7 @@
37
40
  top: 100%;
38
41
  left: 50%;
39
42
  transform: translate(-50%, 0);
40
- border-top: 0.3rem solid var(--tooltip-fill);
43
+ border-top: 0.3rem solid var(--tooltip-background-color);
41
44
  border-right: 0.3rem solid transparent;
42
45
  border-left: 0.3rem solid transparent;
43
46
  }
@@ -52,7 +55,7 @@
52
55
  bottom: 100%;
53
56
  transform: translate(-50%, 0);
54
57
  border-top: none;
55
- border-bottom: 0.3rem solid var(--tooltip-fill);
58
+ border-bottom: 0.3rem solid var(--tooltip-background-color);
56
59
  }
57
60
  }
58
61
 
@@ -69,7 +72,7 @@
69
72
  transform: translate(0, -50%);
70
73
  border-top: 0.3rem solid transparent;
71
74
  border-bottom: 0.3rem solid transparent;
72
- border-left: 0.3rem solid var(--tooltip-fill);
75
+ border-left: 0.3rem solid var(--tooltip-background-color);
73
76
  border-right: none;
74
77
  }
75
78
  }
@@ -87,7 +90,7 @@
87
90
  transform: translate(0, -50%);
88
91
  border-top: 0.3rem solid transparent;
89
92
  border-bottom: 0.3rem solid transparent;
90
- border-right: 0.3rem solid var(--tooltip-fill);
93
+ border-right: 0.3rem solid var(--tooltip-background-color);
91
94
  border-left: none;
92
95
  }
93
96
  }
@@ -1,7 +1,7 @@
1
1
  address {
2
2
  margin-top: 0;
3
- margin-bottom: var(--typography-spacing-vertical);
4
- color: var(--color-text);
3
+ margin-bottom: var(--typography-margin-block);
4
+ color: var(--typography-color);
5
5
  font-style: normal;
6
6
  font-weight: var(--font-weight);
7
7
  }
@@ -1,6 +1,5 @@
1
1
  aside {
2
- width: var(--sidebar-size) !important;
3
- padding: var(--spacing) !important;
2
+ padding: var(--spacing);
4
3
 
5
4
  :where(ol, ul, li) {
6
5
  align-items: stretch !important;
@@ -1,18 +1,18 @@
1
1
  blockquote {
2
2
  border-inline-end: none;
3
- border-inline-start: 0.25rem solid var(--color-border);
4
- border-left: 0.25rem solid var(--color-border);
3
+ border-inline-start: 0.25rem solid var(--border-color);
4
+ border-left: 0.25rem solid var(--border-color);
5
5
  border-right: none;
6
- color: var(--color-text);
6
+ color: var(--typography-color);
7
7
  display: block;
8
8
  font-style: normal;
9
9
  font-weight: var(--font-weight);
10
- margin-bottom: var(--typography-spacing-vertical);
10
+ margin-bottom: var(--typography-margin-block);
11
11
  margin-top: 0;
12
12
  padding: var(--spacing);
13
13
 
14
14
  & footer {
15
- margin-top: calc(var(--typography-spacing-vertical) * 0.5);
16
- color: var(--color-text-muted);
15
+ margin-top: calc(var(--typography-margin-block) * 0.5);
16
+ color: var(--color-muted);
17
17
  }
18
18
  }
@@ -1,5 +1,3 @@
1
1
  body {
2
- width: 100%;
3
- min-height: 100svh;
4
2
  margin: 0; /* modern-normalize */
5
3
  }
@@ -0,0 +1,100 @@
1
+ button {
2
+ margin: 0;
3
+ overflow: visible;
4
+ font-family: inherit;
5
+ text-transform: none;
6
+ }
7
+
8
+ button,
9
+ [type="submit"],
10
+ [type="reset"],
11
+ [type="button"],
12
+ [type="file"]::file-selector-button,
13
+ [role="button"] {
14
+ --_buttons-background-color-hover: var(--buttons-background-color-hover);
15
+ --_buttons-background-color: var(--buttons-background-color);
16
+ --_buttons-color-hover: var(--buttons-color-hover);
17
+ --_buttons-color: var(--buttons-color);
18
+ --_buttons-outline-color: var(--primary-outline-color);
19
+ --_buttons-padding-block: var(--buttons-padding-block);
20
+ --_buttons-padding-inline: var(--buttons-padding-inline);
21
+ --_buttons-border-color: var(--_buttons-background-color);
22
+ --_buttons-border-color-hover: var(--_buttons-background-color-hover);
23
+
24
+ padding-block: var(--_buttons-padding-block);
25
+ padding-inline: var(--_buttons-padding-inline);
26
+ border: var(--border-width) solid var(--_buttons-border-color);
27
+ border-radius: var(--border-radius);
28
+ background-color: var(--_buttons-background-color);
29
+ color: var(--_buttons-color);
30
+ font-weight: var(--font-weight);
31
+ font-size: 1rem;
32
+ line-height: var(--line-height);
33
+ text-align: center;
34
+ text-decoration: none;
35
+ cursor: pointer;
36
+ user-select: none;
37
+ transition:
38
+ background-color var(--transition),
39
+ border-color var(--transition),
40
+ color var(--transition);
41
+
42
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
43
+ color: var(--_buttons-color-hover);
44
+ border: var(--border-width) solid var(--_buttons-border-color-hover);
45
+ background-color: var(--_buttons-background-color-hover);
46
+ }
47
+
48
+ &:is(:active, :focus) {
49
+ outline: var(--outline-width) solid var(--_buttons-outline-color);
50
+ box-shadow: 0 0 0 var(--focus-ring-width) var(--_buttons-outline-color);
51
+ }
52
+
53
+ &[aria-busy="true"] {
54
+ pointer-events: none;
55
+
56
+ &:before {
57
+ filter: brightness(0) invert(1);
58
+ }
59
+ }
60
+ }
61
+
62
+ [type="submit"] {
63
+ width: 100%;
64
+ }
65
+
66
+ [type="reset"],
67
+ [type="file"]::file-selector-button {
68
+ --_buttons-background-color: var(--secondary-background-color);
69
+ --_buttons-background-color-hover: var(--secondary-background-color-hover);
70
+ --_buttons-outline-color: var(--secondary-outline-color);
71
+
72
+ cursor: pointer;
73
+ }
74
+
75
+ button,
76
+ [type="submit"],
77
+ [type="reset"],
78
+ [type="button"] {
79
+ appearance: auto;
80
+ }
81
+
82
+ aside {
83
+ nav {
84
+ :where(
85
+ button,
86
+ [role="button"],
87
+ [type="button"],
88
+ input:not(
89
+ [type="checkbox"],
90
+ [type="radio"],
91
+ [type="range"],
92
+ [type="file"]
93
+ ),
94
+ select
95
+ ) {
96
+ display: block !important;
97
+ width: 100%;
98
+ }
99
+ }
100
+ }
@@ -1,12 +1,23 @@
1
+ pre,
2
+ code,
3
+ kbd,
4
+ samp {
5
+ --font-family: var(--font-family-monospace);
6
+ }
7
+
8
+ kbd {
9
+ --font-weight: var(--kbd-font-weight);
10
+ }
11
+
1
12
  pre,
2
13
  code,
3
14
  kbd,
4
15
  samp {
5
16
  font-size: 0.875em;
6
17
  font-family: var(--font-family);
7
- border-radius: var(--radius);
8
- background: var(--code-fill);
9
- color: var(--code-text);
18
+ border-radius: var(--border-radius);
19
+ background: var(--code-background-color);
20
+ color: var(--code-color);
10
21
  font-weight: var(--font-weight);
11
22
  line-height: initial;
12
23
  }
@@ -19,12 +30,11 @@ samp {
19
30
  }
20
31
 
21
32
  pre {
22
- -ms-overflow-style: scrollbar;
23
- color: var(--color-text);
33
+ color: var(--typography-color);
24
34
  display: block;
25
35
  font-style: normal;
26
36
  font-weight: var(--font-weight);
27
- margin-bottom: var(--typography-spacing-vertical);
37
+ margin-bottom: var(--typography-margin-block);
28
38
  margin-top: 0;
29
39
  overflow: auto;
30
40
 
@@ -44,7 +54,7 @@ pre {
44
54
  }
45
55
 
46
56
  kbd {
47
- background-color: var(--kbd-fill);
48
- color: var(--kbd-text);
57
+ background-color: var(--kbd-background-color);
58
+ color: var(--kbd-color);
49
59
  vertical-align: baseline;
50
60
  }
@@ -1,3 +1,3 @@
1
1
  del {
2
- color: var(--color-danger-text);
2
+ color: var(--danger-color);
3
3
  }
@@ -3,16 +3,32 @@ summary {
3
3
  }
4
4
 
5
5
  details {
6
+ --_details-summary-background-color: var(--details-summary-background-color);
7
+ --_details-summary-color: var(--details-summary-color);
8
+ --_details-summary-color-focus: var(--primary-color-hover);
9
+ --_details-summary-color-open: var(--details-summary-color-open);
10
+ --_details-summary-outline-color: var(--primary-outline-color);
11
+
6
12
  display: block;
7
13
 
8
- & summary {
14
+ > summary {
9
15
  line-height: 1rem;
10
16
  list-style-type: none;
11
17
  cursor: pointer;
12
18
  transition: color var(--transition);
13
19
 
20
+ color: var(--_details-summary-color);
21
+ background-color: var(--_details-summary-background-color);
22
+
14
23
  &:not([role]) {
15
- color: var(--details-summary-text);
24
+ &:focus {
25
+ --_details-summary-color: var(--_details-summary-color-focus);
26
+
27
+ outline: var(--outline-width) solid
28
+ var(--_details-summary-outline-color);
29
+ box-shadow: 0 0 0 var(--focus-ring-width)
30
+ var(--_details-summary-outline-color);
31
+ }
16
32
  }
17
33
 
18
34
  &::-webkit-details-marker {
@@ -31,52 +47,43 @@ details {
31
47
  display: block;
32
48
  width: 1rem;
33
49
  height: 1rem;
34
- margin-inline-start: calc(var(--spacing, 1rem) * 0.5);
35
50
  float: right;
36
51
  transform: rotate(-90deg);
52
+ content: "";
53
+ transition: transform var(--transition);
37
54
  background-image: var(--icon-chevron);
38
55
  background-position: right center;
39
- background-size: 1rem auto;
40
56
  background-repeat: no-repeat;
41
- content: "";
42
- transition: transform var(--transition);
57
+ background-size: var(--icons-width) auto;
43
58
  }
44
59
 
45
- &:focus {
46
- outline: none;
47
-
48
- &:not([role]) {
49
- color: var(--details-summary-text-hover);
50
- }
51
- }
52
-
53
- &:focus-visible:not([role]) {
54
- outline: var(--outline-size) solid var(--color-primary-focus-ring);
55
- outline-offset: calc(var(--spacing, 1rem) * 0.5);
56
- color: var(--color-primary-text);
57
- }
58
-
59
- &[role=button] {
60
+ &[role="button"] {
60
61
  width: 100%;
61
62
  text-align: left;
62
63
 
63
- &:focus-visible {
64
- outline: var(--outline-size) solid var(--color-primary-focus-ring);
65
- outline-offset: calc(var(--spacing, 1rem) * 0.5);
66
- }
67
-
68
64
  &::after {
69
65
  height: calc(1rem * var(--line-height, 1.5));
70
66
  filter: brightness(0) invert(1);
71
67
  }
72
68
  }
69
+
70
+ &[dir="rtl"],
71
+ [dir="rtl"] & {
72
+ text-align: right;
73
+
74
+ &::after {
75
+ float: left;
76
+ transform: rotate(90deg);
77
+ background-position: left center;
78
+ }
79
+ }
73
80
  }
74
81
 
75
82
  &[open] > summary {
76
83
  margin-bottom: var(--spacing);
77
84
 
78
85
  &:not([role]):not(:focus) {
79
- color: var(--details-summary-text-open);
86
+ --_details-summary-color: var(--_details-summary-color-open);
80
87
  }
81
88
 
82
89
  &::after {
@@ -85,146 +92,133 @@ details {
85
92
  }
86
93
  }
87
94
 
88
- [dir=rtl] details summary {
89
- text-align: right;
90
-
91
- &::after {
92
- float: left;
93
- background-position: left center;
94
- }
95
- }
96
-
97
95
  /**
98
96
  * Dropdown (details with summary[aria-haspopup="menu"])
99
97
  */
100
98
  details:has(> summary[aria-haspopup="menu"]) {
101
99
  position: relative;
102
- border-bottom: none;
103
-
104
- & > summary::after,
105
- & > button::after,
106
- & > a::after {
107
- display: block;
108
- width: 1rem;
109
- height: calc(1rem * var(--line-height, 1.5));
110
- margin-inline-start: 0.25rem;
111
- margin-left: auto;
112
- float: right;
113
- transform: rotate(0deg) translateX(0.2rem);
114
- background-image: var(--icon-chevron);
115
- background-position: right center;
116
- background-size: 1rem auto;
117
- background-repeat: no-repeat;
118
- content: "";
119
- }
120
-
121
- & summary:not([role="button"]) {
122
- --outline-size: 0.0625rem;
123
- }
124
-
125
- & > :where(summary:not([role])) {
126
- display: flex;
127
- align-items: center;
128
- height: calc(1rem * var(--line-height) + var(--input-spacing-vertical) * 2 + var(--border-size) * 2);
129
- padding: var(--input-spacing-vertical) var(--input-spacing-horizontal);
130
- border: var(--border-size) solid var(--input-border);
131
- border-radius: var(--radius);
132
- background-color: var(--input-fill);
133
- color: var(--input-placeholder-text);
134
- line-height: inherit;
135
- cursor: pointer;
136
- user-select: none;
137
- transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition);
138
- }
139
-
140
- & > :where(summary:not([role]):active, summary:not([role]):focus) {
141
- border-color: var(--input-border-focus);
142
- background-color: var(--input-fill-active);
143
- }
144
100
 
145
- & > :where(summary:not([role]):focus) {
146
- box-shadow: 0 0 0 var(--outline-size) var(--input-border-focus);
147
- }
101
+ > summary[aria-haspopup="menu"] {
102
+ --_details-dropdown-color: var(--details-dropdown-color);
103
+ --_details-dropdown-border-color: var(--details-dropdown-border-color);
104
+ --_details-dropdown-padding-block: var(
105
+ --details-dropdown-padding-block
106
+ );
107
+ --_details-dropdown-padding-inline: var(
108
+ --details-dropdown-padding-inline
109
+ );
110
+ --_details-summary-color: var(--_details-dropdown-color);
148
111
 
149
- & > :where(summary:not([role]):focus-visible) {
150
- outline: none;
151
- }
112
+ &::after {
113
+ height: calc(1rem * var(--line-height, 1.5));
114
+ margin-inline-start: 0.25rem;
115
+ margin-left: auto;
116
+ transform: rotate(0deg) translateX(0.2rem);
117
+ }
152
118
 
153
- & > :where(summary:not([role])[aria-invalid=false]) {
154
- --input-border: var(--color-success-fill);
155
- --input-border-focus: var(--color-success-fill-hover);
156
- }
119
+ &:not([role]) {
120
+ border: var(--border-width) solid var(--_details-dropdown-border-color);
121
+ border-radius: var(--border-radius);
122
+ padding: var(--_details-dropdown-padding-block)
123
+ var(--_details-dropdown-padding-inline);
124
+ display: flex;
125
+ align-items: center;
126
+ height: calc(
127
+ 1rem * var(--line-height) + var(--_details-dropdown-padding-block) *
128
+ 2 + var(--border-width) * 2
129
+ );
130
+ line-height: inherit;
131
+ cursor: pointer;
132
+ user-select: none;
133
+ transition:
134
+ background-color var(--transition),
135
+ border-color var(--transition),
136
+ color var(--transition);
137
+
138
+ &[aria-invalid="false"] {
139
+ --_details-dropdown-border-color: var(--success-background-color);
140
+ --_details-summary-outline-color: var(--success-outline-color);
141
+ }
157
142
 
158
- & > :where(summary:not([role])[aria-invalid=true]) {
159
- --input-border: var(--color-danger-fill);
160
- --input-border-focus: var(--color-danger-fill-hover);
143
+ &[aria-invalid="true"] {
144
+ --_details-dropdown-border-color: var(--danger-background-color);
145
+ --_details-summary-outline-color: var(--danger-outline-color);
146
+ }
147
+ }
161
148
  }
162
149
 
163
150
  & > :where(summary + ul[role="menu"]) {
164
151
  display: flex;
165
152
  z-index: var(--max-z-index);
166
153
  position: absolute;
167
- left: 0;
154
+ inset-inline-start: 0;
168
155
  flex-direction: column;
169
156
  width: 100%;
170
157
  min-width: fit-content;
171
158
  margin: 0;
172
- margin-top: var(--outline-size);
159
+ margin-top: var(--focus-ring-width);
173
160
  padding: 0;
174
- border: var(--border-size) solid var(--menu-border);
175
- border-radius: var(--radius);
176
- background-color: var(--menu-fill);
177
- box-shadow: var(--menu-shadow);
178
- color: var(--menu-text);
161
+ border: var(--border-width) solid var(--details-menu-border-color);
162
+ border-radius: var(--border-radius);
163
+ background-color: var(--details-menu-background-color);
164
+ box-shadow: var(--menu-box-shadow);
165
+ color: var(--details-menu-color);
179
166
  white-space: nowrap;
180
167
  opacity: 0;
181
- transition: opacity var(--transition), transform 0s ease-in-out 1s;
182
- }
168
+ transition:
169
+ opacity var(--transition),
170
+ transform 0s ease-in-out 1s;
183
171
 
184
- & > :where(summary + ul[role="menu"][dir=rtl]) {
185
- right: 0;
186
- left: auto;
187
- }
172
+ [dir="rtl"] &[dir="rtl"] {
173
+ inset-inline-start: unset;
174
+ inset-inline-end: 0;
175
+ text-align: left;
176
+ }
188
177
 
189
- & > summary + ul[role="menu"] li {
190
- width: 100%;
191
- margin-bottom: 0;
192
- padding: calc(var(--input-spacing-vertical) * 0.5) var(--input-spacing-horizontal);
193
- list-style: none;
178
+ & > li {
179
+ width: 100%;
180
+ margin-bottom: 0;
181
+ padding: calc(var(--inputs-padding-block) * 0.5)
182
+ var(--inputs-padding-inline);
183
+ list-style: none;
194
184
 
195
- &:first-of-type {
196
- margin-top: calc(var(--input-spacing-vertical) * 0.5);
197
- }
185
+ &:first-of-type {
186
+ margin-top: calc(var(--inputs-padding-block) * 0.5);
187
+ }
198
188
 
199
- &:last-of-type {
200
- margin-bottom: calc(var(--input-spacing-vertical) * 0.5);
201
- }
189
+ &:last-of-type {
190
+ margin-bottom: calc(var(--inputs-padding-block) * 0.5);
191
+ }
202
192
 
203
- & a {
204
- display: block;
205
- margin: calc(var(--input-spacing-vertical) * -0.5) calc(var(--input-spacing-horizontal) * -1);
206
- padding: calc(var(--input-spacing-vertical) * 0.5) var(--input-spacing-horizontal);
207
- overflow: hidden;
208
- border-radius: 0;
209
- color: var(--menu-text);
210
- text-decoration: none;
211
- text-overflow: ellipsis;
212
-
213
- &:hover,
214
- &:focus,
215
- &:active,
216
- &:focus-visible,
217
- &[aria-current]:not([aria-current=false]) {
218
- background-color: var(--menu-fill-hover);
193
+ & a {
194
+ display: block;
195
+ margin: calc(var(--inputs-padding-block) * -0.5)
196
+ calc(var(--inputs-padding-inline) * -1);
197
+ padding: calc(var(--inputs-padding-block) * 0.5)
198
+ var(--inputs-padding-inline);
199
+ overflow: hidden;
200
+ border-radius: 0;
201
+ color: var(--details-menu-color);
202
+ text-decoration: none;
203
+ text-overflow: ellipsis;
204
+
205
+ &:is(
206
+ [aria-current]:not([aria-current="false"]),
207
+ :hover,
208
+ :active,
209
+ :focus
210
+ ) {
211
+ background-color: var(--details-menu-background-color-hover);
212
+ }
219
213
  }
220
- }
221
214
 
222
- & label {
223
- width: 100%;
224
- }
215
+ & label {
216
+ width: 100%;
217
+ }
225
218
 
226
- &:has(label):hover {
227
- background-color: var(--menu-fill-hover);
219
+ &:has(label):hover {
220
+ background-color: var(--details-menu-background-color-hover);
221
+ }
228
222
  }
229
223
  }
230
224
 
@@ -235,7 +229,9 @@ details:has(> summary[aria-haspopup="menu"]) {
235
229
  &[open] > summary + ul[role="menu"] {
236
230
  transform: scaleY(1);
237
231
  opacity: 1;
238
- transition: opacity var(--transition), transform 0s ease-in-out 0s;
232
+ transition:
233
+ opacity var(--transition),
234
+ transform 0s ease-in-out 0s;
239
235
  }
240
236
 
241
237
  &[open] > summary::before {
@@ -259,31 +255,20 @@ nav details:has(> summary[aria-haspopup="menu"]) {
259
255
  margin-bottom: 0;
260
256
  display: inline;
261
257
 
262
- & > summary::after {
263
- transform: rotate(0deg) translateX(0rem);
264
- }
265
-
266
- & > :where(summary:not([role])) {
267
- display: flex;
268
- align-items: center;
269
- height: auto;
270
- padding: calc(var(--nav-link-gap) - var(--border-size) * 2) var(--nav-link-gap);
271
- }
258
+ > summary {
259
+ display: flex !important;
260
+ align-items: center !important;
261
+ height: auto !important;
262
+ padding: calc(var(--nav-link-gap) - var(--border-width) * 2)
263
+ var(--nav-link-gap) !important;
272
264
 
273
- & > :where(summary:not([role]):focus-visible) {
274
- box-shadow: 0 0 0 var(--outline-size) var(--color-primary-focus-ring);
275
- }
276
-
277
- & summary:focus-visible {
278
- --outline-size: 0.125rem;
279
- }
265
+ &::after {
266
+ transform: rotate(0deg) translateX(0rem);
267
+ }
280
268
 
281
- /* Styles for dropdowns with role="button" inside nav */
282
- & > summary[role="button"] {
283
- display: flex;
284
- align-items: center;
285
- width: auto;
286
- height: auto;
287
- padding: calc(var(--nav-link-gap) - var(--border-size) * 2) var(--nav-link-gap);
269
+ /* Styles for dropdowns with role="button" inside nav */
270
+ &:is([role="button"]) {
271
+ width: auto;
272
+ }
288
273
  }
289
274
  }