@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
@@ -1,164 +1,64 @@
1
1
  .ghost {
2
- --color-background: transparent;
3
-
4
- background-color: var(--color-background);
5
- }
6
-
7
- :not([role="link"], a:not([role="button"])) {
8
- &.ghost {
9
- &.primary {
10
- --color-background: transparent;
11
- --border-color: oklch(from var(--color-primary-fill) l c h / var(--color-border-opacity));
12
- --color-text: oklch(from var(--color-primary-text) l c h / var(--color-text-opacity));
13
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
14
- }
15
-
16
- &.secondary {
17
- --color-background: transparent;
18
- --border-color: oklch(from var(--color-secondary-fill) l c h / var(--color-border-opacity));
19
- --color-text: oklch(from var(--color-secondary-text) l c h / var(--color-text-opacity));
20
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
21
- }
22
-
23
- &.contrast {
24
- --color-background: transparent;
25
- --border-color: oklch(from var(--color-contrast-fill) l c h / var(--color-border-opacity));
26
- --color-text: oklch(from var(--color-contrast-text) l c h / var(--color-text-opacity));
27
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
28
- }
29
-
30
- &.success {
31
- --color-background: transparent;
32
- --border-color: oklch(from var(--color-success-fill) l c h / var(--color-border-opacity));
33
- --color-text: oklch(from var(--color-success-text) l c h / var(--color-text-opacity));
34
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
35
- }
36
-
37
- &.info {
38
- --color-background: transparent;
39
- --border-color: oklch(from var(--color-info-fill) l c h / var(--color-border-opacity));
40
- --color-text: oklch(from var(--color-info-text) l c h / var(--color-text-opacity));
41
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
42
- }
43
-
44
- &.warning {
45
- --color-background: transparent;
46
- --border-color: oklch(from var(--color-warning-fill) l c h / var(--color-border-opacity));
47
- --color-text: oklch(from var(--color-warning-text) l c h / var(--color-text-opacity));
48
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
49
- }
50
-
51
- &.danger {
52
- --color-background: transparent;
53
- --border-color: oklch(from var(--color-danger-fill) l c h / var(--color-border-opacity));
54
- --color-text: oklch(from var(--color-danger-text) l c h / var(--color-text-opacity));
55
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
2
+ /* --- Buttons Individual Styling --- */
3
+ --_buttons-color: var(--intent-color, var(--buttons-color));
4
+ --_buttons-border-color: var(--intent-background-color);
5
+ --_buttons-background-color: transparent;
6
+ --_buttons-color-hover: var(--buttons-color);
7
+
8
+ /* --- Alert Individual Styling --- */
9
+ --_alert-color: var(--intent-color, var(--alert-color));
10
+ --_alert-border-color: var(--intent-background-color, var(--border-color));
11
+ --_alert-background-color: transparent;
12
+
13
+ /* --- Card Individual Styling --- */
14
+ --_card-color: var(--intent-color, var(--card-color));
15
+ --_card-background-color: transparent;
16
+ --_card-border-color: var(--intent-background-color, var(--border-color));
17
+ --_card-marginals-background-color: var(--card-marginals-background-color);
18
+
19
+ /* --- Pane Individual Styling --- */
20
+ --_pane-color: var(--intent-color, var(--pane-color));
21
+ --_pane-background-color: transparent;
22
+ --_pane-border-color: var(--intent-background-color, var(--border-color));
23
+ --_pane-border-width: var(--border-width);
24
+
25
+ /* When .ghost is used in an element that has no intent */
26
+ &:not(.primary, .secondary, .contrast, .success, .info, .warning, .danger) {
27
+ --_buttons-color: var(--primary-color);
28
+ --_buttons-border-color: var(--primary-background-color);
29
+
30
+ &[type="reset"] {
31
+ --_buttons-color: var(--secondary-color);
32
+ --_buttons-border-color: var(--secondary-background-color);
56
33
  }
57
34
  }
58
- }
59
-
60
- :is(button, [type="submit"], [type="button"], [role="button"]) {
61
- &.ghost {
62
- --color-background: transparent;
63
- --border-color: oklch(from var(--color-primary-fill) l c h / var(--color-border-opacity));
64
- --color-text: oklch(from var(--color-primary-text) l c h / var(--color-text-opacity));
65
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
66
-
67
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
68
- --color-background: oklch(from var(--color-primary-fill-hover) l c h / var(--color-background-opacity));
69
- --border-color: oklch(from var(--color-primary-fill-hover) l c h / var(--color-border-opacity));
70
- --color-text: oklch(from var(--color-primary-on-fill) l c h / var(--color-text-opacity));
71
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
72
- }
73
-
74
- &.secondary {
75
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
76
- --color-background: oklch(from var(--color-secondary-fill-hover) l c h / var(--color-background-opacity));
77
- --border-color: oklch(from var(--color-secondary-fill-hover) l c h / var(--color-border-opacity));
78
- --color-text: oklch(from var(--color-secondary-on-fill) l c h / var(--color-text-opacity));
79
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
80
- }
81
- }
82
-
83
- &.contrast {
84
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
85
- --color-background: oklch(from var(--color-contrast-fill-hover) l c h / var(--color-background-opacity));
86
- --border-color: oklch(from var(--color-contrast-fill-hover) l c h / var(--color-border-opacity));
87
- --color-text: oklch(from var(--color-contrast-on-fill) l c h / var(--color-text-opacity));
88
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
89
- }
90
- }
91
35
 
92
- &.success {
93
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
94
- --color-background: oklch(from var(--color-success-fill-hover) l c h / var(--color-background-opacity));
95
- --border-color: oklch(from var(--color-success-fill-hover) l c h / var(--color-border-opacity));
96
- --color-text: oklch(from var(--color-success-on-fill) l c h / var(--color-text-opacity));
97
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
98
- }
99
- }
36
+ &.contrast {
37
+ --_buttons-color-hover: light-dark(#fff, #191c20);
38
+ }
100
39
 
101
- &.info {
102
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
103
- --color-background: oklch(from var(--color-info-fill-hover) l c h / var(--color-background-opacity));
104
- --border-color: oklch(from var(--color-info-fill-hover) l c h / var(--color-border-opacity));
105
- --color-text: oklch(from var(--color-info-on-fill) l c h / var(--color-text-opacity));
106
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
107
- }
40
+ &:is(
41
+ button,
42
+ [type="submit"],
43
+ [type="reset"],
44
+ [type="button"],
45
+ [type="file"]::file-selector-button,
46
+ [role="button"]
47
+ )[aria-busy="true"] {
48
+ &:before {
49
+ filter: none;
108
50
  }
51
+ }
109
52
 
110
- &.warning {
111
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
112
- --color-background: oklch(from var(--color-warning-fill-hover) l c h / var(--color-background-opacity));
113
- --border-color: oklch(from var(--color-warning-fill-hover) l c h / var(--color-border-opacity));
114
- --color-text: oklch(from var(--color-warning-on-fill) l c h / var(--color-text-opacity));
115
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
116
-
117
- details &::after {
118
- filter: brightness(0);
119
- }
120
- }
53
+ /* Accordion - ghost buttons have transparent backgrounds with colored text,
54
+ so the chevron should remain dark to match the text color */
55
+ details &:is(summary[role="button"]) {
56
+ &::after {
57
+ filter: none;
121
58
  }
122
59
 
123
- &.danger {
124
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
125
- --color-background: oklch(from var(--color-danger-fill-hover) l c h / var(--color-background-opacity));
126
- --border-color: oklch(from var(--color-danger-fill-hover) l c h / var(--color-border-opacity));
127
- --color-text: oklch(from var(--color-danger-on-fill) l c h / var(--color-text-opacity));
128
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
129
- }
60
+ &:is(:hover, :active, :focus):not(.contrast)::after {
61
+ filter: brightness(0) invert();
130
62
  }
131
63
  }
132
64
  }
133
-
134
- :is(.card, .pane, [role="status"], [role="alert"]).ghost {
135
- > header,
136
- > footer {
137
- --dialog-section-fill: light-dark(
138
- color-mix(in srgb, var(--color-slate-50) 25%, white),
139
- color-mix(in srgb, var(--color-slate-50), transparent 95%)
140
- );
141
- --dialog-section-border: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-zinc-350)), transparent 90%);
142
- }
143
- }
144
-
145
- /* Reset buttons */
146
- [type="reset"].ghost {
147
- --color-background: transparent;
148
- --border-color: oklch(from var(--color-secondary-fill) l c h / var(--color-border-opacity));
149
- --color-text: oklch(from var(--color-secondary-text) l c h / var(--color-text-opacity));
150
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
151
-
152
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
153
- --color-background: oklch(from var(--color-primary-fill-hover) l c h / var(--color-background-opacity));
154
- --border-color: oklch(from var(--color-primary-fill-hover) l c h / var(--color-border-opacity));
155
- --color-text: oklch(from var(--color-primary-on-fill) l c h / var(--color-text-opacity));
156
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
157
- }
158
- }
159
-
160
- /* Accordion - ghost buttons have transparent backgrounds with colored text,
161
- so the chevron should remain dark to match the text color */
162
- details summary[role="button"].ghost::after {
163
- filter: none;
164
- }
@@ -1,9 +1,10 @@
1
1
  .striped {
2
- > :not(table):nth-child(odd) {
2
+ /* Cards */
3
+ &:is(.card) > :nth-child(odd) {
3
4
  background-color: color-mix(
4
5
  in srgb,
5
- var(--color-background),
6
- var(--color-hover-effect) 15%
6
+ var(--_card-background-color),
7
+ var(--color-hover-shade) 15%
7
8
  );
8
9
  }
9
10
 
@@ -11,8 +12,8 @@
11
12
  & :is(th, td) {
12
13
  background-color: color-mix(
13
14
  in srgb,
14
- var(--color-background),
15
- var(--color-hover-effect) 15%
15
+ var(--background-color),
16
+ var(--color-hover-shade) 15%
16
17
  );
17
18
  }
18
19
  }
@@ -1,133 +1,75 @@
1
1
  .subtle {
2
- --subtle-opacity: 60%;
3
- }
4
-
5
- :not([role="link"], a:not([role="button"])) {
6
- &.subtle {
7
- &.primary {
8
- --color-text: oklch(from var(--color-primary-on-fill) l c h / var(--color-text-opacity));
9
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
10
- --color-background: oklch(from var(--color-primary-subtle-fill) l c h / var(--color-background-opacity));
11
- --border-color: oklch(from var(--color-primary-subtle-fill) l c h / var(--color-border-opacity));
2
+ /* When .subtle is used in an element that has no intent */
3
+ &:not(.primary, .secondary, .contrast, .success, .info, .warning, .danger) {
4
+ --_buttons-background-color: var(--primary-subtle-background-color);
5
+ --_buttons-background-color-hover: var(--primary-background-color);
6
+
7
+ &[type="reset"] {
8
+ --_buttons-background-color: var(--secondary-subtle-background-color);
9
+ --_buttons-background-color-hover: var(--secondary-background-color);
10
+ --_buttons-color: light-dark(#191c20, white);
12
11
  }
13
12
 
14
- &.secondary {
15
- --color-text: oklch(from var(--color-secondary-on-fill) l c h / var(--color-text-opacity));
16
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
17
- --color-background: oklch(from var(--color-secondary-subtle-fill) l c h / var(--color-background-opacity));
18
- --border-color: oklch(from var(--color-secondary-subtle-fill) l c h / var(--color-border-opacity));
19
- }
20
-
21
- &.contrast {
22
- --color-text: oklch(from var(--color-contrast-on-fill) l c h / var(--color-text-opacity));
23
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
24
- --color-background: oklch(from var(--color-contrast-subtle-fill) l c h / var(--color-background-opacity));
25
- --border-color: oklch(from var(--color-contrast-subtle-fill) l c h / var(--color-border-opacity));
26
- }
13
+ --_links-color: var(--primary-subtle-background-color);
14
+ --_links-color-hover: var(--primary-background-color);
27
15
 
28
- &.success {
29
- --color-text: oklch(from var(--color-success-on-fill) l c h / var(--color-text-opacity));
30
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
31
- --color-background: oklch(from var(--color-success-subtle-fill) l c h / var(--color-background-opacity));
32
- --border-color: oklch(from var(--color-success-subtle-fill) l c h / var(--color-border-opacity));
33
- }
16
+ --_progress-accent-color: var(--primary-subtle-background-color);
17
+ }
34
18
 
35
- &.info {
36
- --color-text: oklch(from var(--color-info-on-fill) l c h / var(--color-text-opacity));
37
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
38
- --color-background: oklch(from var(--color-info-subtle-fill) l c h / var(--color-background-opacity));
39
- --border-color: oklch(from var(--color-info-subtle-fill) l c h / var(--color-border-opacity));
40
- }
19
+ &.primary {
20
+ --intent-background-color: var(--primary-subtle-background-color);
21
+ --intent-background-color-hover: var(--primary-background-color);
22
+ }
41
23
 
42
- &.warning {
43
- --color-text: oklch(from var(--color-warning-on-fill) l c h / var(--color-text-opacity));
44
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
45
- --color-background: oklch(from var(--color-warning-subtle-fill) l c h / var(--color-background-opacity));
46
- --border-color: oklch(from var(--color-warning-subtle-fill) l c h / var(--color-border-opacity));
47
- }
24
+ &.secondary {
25
+ --intent-background-color: var(--secondary-subtle-background-color);
26
+ --intent-background-color-hover: var(--secondary-background-color);
48
27
 
49
- &.danger {
50
- --color-text: oklch(from var(--color-danger-on-fill) l c h / var(--color-text-opacity));
51
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
52
- --color-background: oklch(from var(--color-danger-subtle-fill) l c h / var(--color-background-opacity));
53
- --border-color: oklch(from var(--color-danger-subtle-fill) l c h / var(--color-border-opacity));
54
- }
28
+ /* Readability adjustments */
29
+ --_alert-color: light-dark(#191c20, white);
30
+ --_card-color: light-dark(#191c20, white);
31
+ --_pane-color: light-dark(#191c20, white);
32
+ --_buttons-color: light-dark(#191c20, white);
33
+ --_buttons-color-hover: white;
55
34
  }
56
- }
57
35
 
58
- :is(button, [type="submit"], [type="button"], [role="button"]) {
59
- &.subtle {
60
- --color-text: oklch(from var(--color-primary-on-fill) l c h / var(--color-text-opacity));
61
- --color-background: oklch(from var(--color-primary-subtle-fill) l c h / var(--color-background-opacity));
62
- --border-color: oklch(from var(--color-primary-subtle-fill) l c h / var(--color-border-opacity));
63
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
64
-
65
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
66
- --color-text: oklch(from var(--color-primary-on-fill) l c h / var(--color-text-opacity));
67
- --color-background: oklch(from var(--color-primary-fill) l c h / var(--color-background-opacity));
68
- --border-color: oklch(from var(--color-primary-fill) l c h / var(--color-border-opacity));
69
- }
36
+ &.contrast {
37
+ --intent-background-color: var(--contrast-subtle-background-color);
38
+ --intent-background-color-hover: var(--contrast-background-color);
39
+ }
70
40
 
71
- &.secondary {
72
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
73
- --color-text: oklch(from var(--color-secondary-on-fill) l c h / var(--color-text-opacity));
74
- --color-background: oklch(from var(--color-secondary-fill) l c h / var(--color-background-opacity));
75
- --border-color: oklch(from var(--color-secondary-fill) l c h / var(--color-border-opacity));
76
- }
77
- }
41
+ &.success {
42
+ --intent-background-color: var(--success-subtle-background-color);
43
+ --intent-background-color-hover: var(--success-background-color);
44
+ }
78
45
 
79
- &.contrast {
80
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
81
- --color-text: oklch(from var(--color-contrast-on-fill) l c h / var(--color-text-opacity));
82
- --color-background: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
83
- --border-color: oklch(from var(--color-contrast-fill) l c h / var(--color-border-opacity));
84
- }
85
- }
46
+ &.info {
47
+ --intent-background-color: var(--info-subtle-background-color);
48
+ --intent-background-color-hover: var(--info-background-color);
49
+ }
86
50
 
87
- &.success {
88
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
89
- --color-text: oklch(from var(--color-success-on-fill) l c h / var(--color-text-opacity));
90
- --color-background: oklch(from var(--color-success-fill) l c h / var(--color-background-opacity));
91
- --border-color: oklch(from var(--color-success-fill) l c h / var(--color-border-opacity));
92
- }
93
- }
51
+ &.warning {
52
+ --intent-background-color: var(--warning-subtle-background-color);
53
+ --intent-background-color-hover: var(--warning-background-color);
54
+ }
94
55
 
95
- &.info {
96
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
97
- --color-text: oklch(from var(--color-info-on-fill) l c h / var(--color-text-opacity));
98
- --color-background: oklch(from var(--color-info-fill) l c h / var(--color-background-opacity));
99
- --border-color: oklch(from var(--color-info-fill) l c h / var(--color-border-opacity));
100
- }
101
- }
56
+ &.danger {
57
+ --intent-background-color: var(--danger-subtle-background-color);
58
+ --intent-background-color-hover: var(--danger-background-color);
59
+ }
60
+ }
102
61
 
103
- &.warning {
104
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
105
- --color-text: oklch(from var(--color-warning-on-fill) l c h / var(--color-text-opacity));
106
- --color-background: oklch(from var(--color-warning-fill) l c h / var(--color-background-opacity));
107
- --border-color: oklch(from var(--color-warning-fill) l c h / var(--color-border-opacity));
108
- }
62
+ /* Accordion chevron override */
63
+ details summary[role="button"].subtle.secondary {
64
+ @container style(--theme: light) {
65
+ &::after {
66
+ filter: brightness(0);
109
67
  }
110
68
 
111
- &.danger {
112
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
113
- --color-text: oklch(from var(--color-danger-on-fill) l c h / var(--color-text-opacity));
114
- --color-background: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
115
- --border-color: oklch(from var(--color-danger-fill) l c h / var(--color-border-opacity));
69
+ &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
70
+ &::after {
71
+ filter: brightness(0) invert(1);
116
72
  }
117
73
  }
118
74
  }
119
75
  }
120
-
121
- /* Reset buttons */
122
- [type="reset"].subtle {
123
- --color-text: var(--color-secondary-on-fill);
124
- --color-background: var(--color-secondary-subtle-fill);
125
- --border-color: var(--color-secondary-subtle-fill);
126
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
127
-
128
- &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
129
- --color-text: var(--color-secondary-on-fill);
130
- --color-background: var(--color-secondary-fill);
131
- --border-color: var(--color-secondary-fill);
132
- }
133
- }
@@ -1,12 +1,6 @@
1
1
  @import "./_variables.css";
2
2
 
3
- @import "./intent/_contrast.css";
4
- @import "./intent/_danger.css";
5
- @import "./intent/_info.css";
6
- @import "./intent/_primary.css";
7
- @import "./intent/_secondary.css";
8
- @import "./intent/_success.css";
9
- @import "./intent/_warning.css";
3
+ @import "./_intent.css";
10
4
 
11
5
  @import "./modifiers/_ghost.css";
12
6
  @import "./modifiers/_striped.css";
@@ -1,126 +0,0 @@
1
- [role="search"],
2
- [role="group"] {
3
- border-radius: var(--radius);
4
- box-shadow: var(--group-shadow, 0 0 0 rgba(0, 0, 0, 0));
5
- display: inline-flex;
6
- gap: 0;
7
- margin-bottom: var(--spacing);
8
- position: relative;
9
- transition: box-shadow var(--transition);
10
- vertical-align: middle;
11
- width: 100%;
12
-
13
- & > *:not(details),
14
- & input:not([type="checkbox"], [type="radio"]),
15
- & select {
16
- position: relative;
17
- flex: 1 1 auto;
18
- margin-bottom: 0;
19
-
20
- &:not(:first-child) {
21
- /* when a button is next to an input that has a border */
22
- margin-left: calc(var(--border-size) * -1);
23
- border-top-left-radius: 0;
24
- border-bottom-left-radius: 0;
25
- }
26
-
27
- &:not(:last-child) {
28
- border-top-right-radius: 0;
29
- border-bottom-right-radius: 0;
30
- }
31
-
32
- &:focus {
33
- z-index: 2;
34
- }
35
- }
36
-
37
- & button,
38
- & [type="submit"],
39
- & [type="reset"],
40
- & [type="button"],
41
- & [role="button"] {
42
- width: auto;
43
- }
44
-
45
- /* Details dropdown inside group */
46
- & > details {
47
- position: relative;
48
- margin-bottom: 0;
49
- /* Constrain details height to just the button, not the dropdown menu */
50
- height: calc(
51
- 1rem * var(--line-height) + var(--input-spacing-vertical) *
52
- 2 + var(--border-size) * 2
53
- );
54
- overflow: visible;
55
-
56
- &:not(:first-child) {
57
- margin-left: calc(var(--border-size) * -1);
58
-
59
- & > summary {
60
- border-top-left-radius: 0;
61
- border-bottom-left-radius: 0;
62
- }
63
- }
64
-
65
- &:not(:last-child) > summary {
66
- border-top-right-radius: 0;
67
- border-bottom-right-radius: 0;
68
- }
69
-
70
- & > summary:focus {
71
- z-index: 2;
72
- }
73
-
74
- /* Ensure consistent height with other form elements in the group */
75
- & > summary[role="button"] {
76
- display: flex;
77
- align-items: center;
78
- height: 100%;
79
-
80
- &::after {
81
- height: calc(1rem * var(--line-height, 1.5));
82
- }
83
- }
84
- }
85
- }
86
-
87
- @supports selector(:has(*)) {
88
- [role="search"],
89
- [role="group"] {
90
- &:has(
91
- button:focus,
92
- [type="submit"]:focus,
93
- [type="button"]:focus,
94
- [role="button"]:focus
95
- ) {
96
- --group-shadow: var(--group-shadow-focus-button);
97
-
98
- & input:not([type="checkbox"], [type="radio"]),
99
- & select {
100
- border-color: transparent;
101
- }
102
- }
103
-
104
- &:has(input:not([type="submit"], [type="button"]):focus, select:focus) {
105
- --group-shadow: var(--group-shadow-focus-input);
106
-
107
- & button,
108
- & [type="submit"],
109
- & [type="button"],
110
- & [role="button"] {
111
- --button-shadow: 0 0 0 var(--border-size)
112
- var(--color-primary-fill);
113
- --button-shadow-hover: 0 0 0 var(--border-size)
114
- var(--color-primary-fill-hover);
115
- }
116
- }
117
-
118
- & button:focus,
119
- & [type="submit"]:focus,
120
- & [type="reset"]:focus,
121
- & [type="button"]:focus,
122
- & [role="button"]:focus {
123
- box-shadow: none;
124
- }
125
- }
126
- }
@@ -1,14 +0,0 @@
1
- /* [role="search"] shares most of its styles with [role="group"] */
2
- /* See _role-group.css for the shared styles */
3
-
4
- [role="search"] {
5
- & > :first-child {
6
- border-top-left-radius: 5rem;
7
- border-bottom-left-radius: 5rem;
8
- }
9
-
10
- & > :last-child {
11
- border-top-right-radius: 5rem;
12
- border-bottom-right-radius: 5rem;
13
- }
14
- }
@@ -1,3 +0,0 @@
1
- article {
2
- width: 100%;
3
- }