@semanticus/semanticus-css 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semanticus/semanticus-css",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "lightweight CSS framework that prioritizes semantic HTML and ARIA-focused accessibility, with a small set of atomic utilities",
5
5
  "author": "Joao Goncalves",
6
6
  "style": "./dist/semanticus.css",
@@ -88,6 +88,7 @@
88
88
  "storybook": "storybook dev -p 6006",
89
89
  "demo:server": "tsx --tsconfig scripts/tsconfig.json scripts/demo-server.ts",
90
90
  "test": "npx playwright test",
91
+ "test:dev": "npx playwright test --ui",
91
92
  "test:update-snapshots": "npx playwright test -u",
92
93
  "kill-zombies": "sh -c 'PORT=${PORT:-4000}; pids=$(lsof -t -i :$PORT); if [ -n \"$pids\" ]; then echo \"Killing PIDs: $pids\"; kill -9 $pids; else echo \"No processes listening on port $PORT\"; fi'",
93
94
  "kill-playwright": "sh -c 'pgrep -af playwright | awk \"{print $1}\" | xargs -r kill -9 || true'",
@@ -0,0 +1,60 @@
1
+ .card-list {
2
+ border: none;
3
+ display: flex;
4
+ flex-direction: column;
5
+ padding: 0;
6
+ list-style: none;
7
+
8
+ > * {
9
+ --color-background: transparent;
10
+ --card-fill: var(--color-background);
11
+ --border-color: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-zinc-350)), transparent 90%);
12
+
13
+ background: var(--card-fill);
14
+ border-bottom: var(--border-size) solid var(--border-color);
15
+ border-inline: var(--border-size) solid var(--border-color);
16
+ color: var(--color-text);
17
+ margin: 0;
18
+ padding: var(--spacing);
19
+ list-style: none;
20
+
21
+ &:first-child {
22
+ border-top: var(--border-size) solid var(--border-color);
23
+ border-top-left-radius: var(--radius);
24
+ border-top-right-radius: var(--radius);
25
+ }
26
+
27
+ &:last-child {
28
+ border-bottom-left-radius: var(--radius);
29
+ border-bottom-right-radius: var(--radius);
30
+ }
31
+
32
+ &:is([aria-current]:not([aria-current="false"])) {
33
+ --card-fill: color-mix(in srgb, var(--color-background), var(--color-hover-effect) 15%);
34
+ }
35
+ }
36
+
37
+ nav & {
38
+ gap: 0;
39
+ flex-direction: row;
40
+
41
+ > * {
42
+ flex: 1 1 0;
43
+ text-align: center;
44
+ border-top: var(--border-size) solid var(--border-color);
45
+ border-left: none;
46
+ white-space: nowrap;
47
+
48
+ &:first-child {
49
+ border-left: var(--border-size) solid var(--border-color);
50
+ border-bottom-left-radius: var(--radius);
51
+ border-top-right-radius: 0;
52
+ }
53
+
54
+ &:last-child {
55
+ border-top-right-radius: var(--radius);
56
+ border-bottom-left-radius: 0;
57
+ }
58
+ }
59
+ }
60
+ }
@@ -1,6 +1,4 @@
1
- .card,
2
- .pane {
3
- --shadow: var(--dialog-shadow);
1
+ .card {
4
2
  --color-background: var(--dialog-fill);
5
3
  --border-color: var(--dialog-border);
6
4
 
@@ -10,7 +8,6 @@
10
8
  border-radius: var(--radius);
11
9
  border: var(--border-size) solid var(--border-color);
12
10
  background: var(--color-background);
13
- box-shadow: var(--shadow);
14
11
 
15
12
  > header,
16
13
  > footer {
@@ -1,5 +1,5 @@
1
1
  @import "./_card.css";
2
+ @import "./_card-list.css";
2
3
  @import "./_container.css";
3
4
  @import "./_icons.css";
4
- @import "./_pane.css";
5
5
  @import "./_sidebar.css";
package/src/index.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Semanticus CSS v1.1.0 (https://semanticus.design/)
2
+ * Semanticus CSS v1.2.0 (https://semanticus.design/)
3
3
  *
4
4
  * A ARIA-centric, semantic HTML — enhanced with components and variants and utilities
5
5
  *
@@ -0,0 +1,125 @@
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
+ margin-left: calc(var(--border-size) * -1);
22
+ border-top-left-radius: 0;
23
+ border-bottom-left-radius: 0;
24
+ }
25
+
26
+ &:not(:last-child) {
27
+ border-top-right-radius: 0;
28
+ border-bottom-right-radius: 0;
29
+ }
30
+
31
+ &:focus {
32
+ z-index: 2;
33
+ }
34
+ }
35
+
36
+ & button,
37
+ & [type="submit"],
38
+ & [type="reset"],
39
+ & [type="button"],
40
+ & [role="button"] {
41
+ width: auto;
42
+ }
43
+
44
+ /* Details dropdown inside group */
45
+ & > details {
46
+ position: relative;
47
+ margin-bottom: 0;
48
+ /* Constrain details height to just the button, not the dropdown menu */
49
+ height: calc(
50
+ 1rem * var(--line-height) + var(--input-spacing-vertical) *
51
+ 2 + var(--border-size) * 2
52
+ );
53
+ overflow: visible;
54
+
55
+ &:not(:first-child) {
56
+ margin-left: calc(var(--border-size) * -1);
57
+
58
+ & > summary {
59
+ border-top-left-radius: 0;
60
+ border-bottom-left-radius: 0;
61
+ }
62
+ }
63
+
64
+ &:not(:last-child) > summary {
65
+ border-top-right-radius: 0;
66
+ border-bottom-right-radius: 0;
67
+ }
68
+
69
+ & > summary:focus {
70
+ z-index: 2;
71
+ }
72
+
73
+ /* Ensure consistent height with other form elements in the group */
74
+ & > summary[role="button"] {
75
+ display: flex;
76
+ align-items: center;
77
+ height: 100%;
78
+
79
+ &::after {
80
+ height: calc(1rem * var(--line-height, 1.5));
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ @supports selector(:has(*)) {
87
+ [role="search"],
88
+ [role="group"] {
89
+ &:has(
90
+ button:focus,
91
+ [type="submit"]:focus,
92
+ [type="button"]:focus,
93
+ [role="button"]:focus
94
+ ) {
95
+ --group-shadow: var(--group-shadow-focus-button);
96
+
97
+ & input:not([type="checkbox"], [type="radio"]),
98
+ & select {
99
+ border-color: transparent;
100
+ }
101
+ }
102
+
103
+ &:has(input:not([type="submit"], [type="button"]):focus, select:focus) {
104
+ --group-shadow: var(--group-shadow-focus-input);
105
+
106
+ & button,
107
+ & [type="submit"],
108
+ & [type="button"],
109
+ & [role="button"] {
110
+ --button-shadow: 0 0 0 var(--border-size)
111
+ var(--color-primary-fill);
112
+ --button-shadow-hover: 0 0 0 var(--border-size)
113
+ var(--color-primary-fill-hover);
114
+ }
115
+ }
116
+
117
+ & button:focus,
118
+ & [type="submit"]:focus,
119
+ & [type="reset"]:focus,
120
+ & [type="button"]:focus,
121
+ & [role="button"]:focus {
122
+ box-shadow: none;
123
+ }
124
+ }
125
+ }
@@ -0,0 +1,14 @@
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
+ }
@@ -15,7 +15,6 @@
15
15
  border-inline-start-width: var(--alert-size);
16
16
  border-inline-start-color: var(--dialog-border);
17
17
  background: var(--color-background);
18
- position: relative;
19
18
 
20
19
  &:is(.ghost, .subtle) {
21
20
  --alert-size: calc(var(--border-size) * 4);
@@ -8,8 +8,12 @@ nav {
8
8
  justify-content: space-between;
9
9
  overflow: visible;
10
10
 
11
- & > * {
11
+ > * {
12
12
  margin: 0 !important;
13
+
14
+ &:only-child {
15
+ flex-grow: 1;
16
+ }
13
17
  }
14
18
 
15
19
  &[aria-label=breadcrumb] {
@@ -2,7 +2,8 @@
2
2
  @import "./attributes/_aria-disabled.css";
3
3
  @import "./attributes/_hidden.css";
4
4
  @import "./attributes/_popover.css";
5
- @import "./attributes/_role-group-search.css";
5
+ @import "./attributes/_role-group.css";
6
+ @import "./attributes/_role-search.css";
6
7
  @import "./attributes/_role-status-alert.css";
7
8
  @import "./attributes/_role-toolbar.css";
8
9
  @import "./attributes/_role-tooltip.css";
@@ -6,6 +6,10 @@
6
6
  box-shadow: var(--shadow-sm) !important;
7
7
  }
8
8
 
9
+ .shadow-md {
10
+ box-shadow: var(--shadow-md) !important;
11
+ }
12
+
9
13
  .shadow-lg {
10
14
  box-shadow: var(--shadow-lg) !important;
11
15
  }
@@ -220,7 +220,7 @@
220
220
 
221
221
  /* === Dialog / Alert tokens === */
222
222
  --dialog-fill: light-dark(var(--color-background), var(--color-slate-900));
223
- --dialog-border: light-dark(var(--color-border), var(--color-slate-900));
223
+ --dialog-border: var(--color-border);
224
224
  --dialog-shadow: var(--shadow);
225
225
  --dialog-section-fill: light-dark(
226
226
  color-mix(in srgb, var(--color-slate-50) 25%, white),
@@ -1,6 +1,17 @@
1
- :where(a:not([role="button"])),
2
- [role="link"] {
3
- &.contrast {
1
+ .contrast {
2
+ &:not(a:not([role="button"]), [role="link"]) {
3
+ --color-background: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
4
+ --border-color: oklch(from var(--color-contrast-fill) l c h / var(--color-border-opacity));
5
+ --color-text: oklch(from var(--color-contrast-on-fill) l c h / var(--color-text-opacity));
6
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
7
+
8
+ --dialog-fill: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
9
+ --dialog-border: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
10
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-50), var(--color-slate-900)), transparent 90%);
11
+ --dialog-section-border: color-mix(in srgb, light-dark(var(--color-slate-50), black), transparent 95%);
12
+ }
13
+
14
+ &:is(a:not([role="button"]), [role="link"]) {
4
15
  --color-text: oklch(from var(--color-contrast-text) l c h / var(--color-text-opacity));
5
16
  --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
17
 
@@ -8,17 +19,8 @@
8
19
  --color-text: oklch(from var(--color-contrast-text-hover) l c h / var(--color-text-opacity));
9
20
  }
10
21
  }
11
- }
12
22
 
13
- .contrast:not([role="link"], a:not([role="button"])) {
14
- --color-background: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
15
- --border-color: oklch(from var(--color-contrast-fill) l c h / var(--color-border-opacity));
16
- --color-text: oklch(from var(--color-contrast-on-fill) l c h / var(--color-text-opacity));
17
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
- }
19
-
20
- :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
- &.contrast {
23
+ &:is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
22
24
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
25
  --color-background: oklch(from var(--color-contrast-fill-hover) l c h / var(--color-background-opacity));
24
26
  --border-color: oklch(from var(--color-contrast-fill-hover) l c h / var(--color-border-opacity));
@@ -32,13 +34,6 @@
32
34
  }
33
35
  }
34
36
 
35
- :is(.card, .pane, [role="status"], [role="alert"]).contrast {
36
- --dialog-fill: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
37
- --dialog-border: oklch(from var(--color-contrast-fill) l c h / var(--color-background-opacity));
38
- --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-50), var(--color-slate-900)), transparent 90%);
39
- --dialog-section-border: color-mix(in srgb, light-dark(var(--color-slate-50), black), transparent 95%);
40
- }
41
-
42
37
  /* Accordion chevron override */
43
38
  details summary[role="button"].contrast::after {
44
39
  @container style(--theme: dark) {
@@ -1,6 +1,16 @@
1
- :where(a:not([role="button"])),
2
- [role="link"] {
3
- &.danger {
1
+ .danger {
2
+ &:not(a:not([role="button"]), [role="link"]) {
3
+ --color-background: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
4
+ --border-color: oklch(from var(--color-danger-fill) l c h / var(--color-border-opacity));
5
+ --color-text: oklch(from var(--color-danger-on-fill) l c h / var(--color-text-opacity));
6
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
7
+
8
+ --dialog-fill: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
9
+ --dialog-border: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
10
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
11
+ }
12
+
13
+ &:is(a:not([role="button"]), [role="link"]) {
4
14
  --color-text: oklch(from var(--color-danger-text) l c h / var(--color-text-opacity));
5
15
  --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
16
 
@@ -8,17 +18,8 @@
8
18
  --color-text: oklch(from var(--color-danger-text-hover) l c h / var(--color-text-opacity));
9
19
  }
10
20
  }
11
- }
12
21
 
13
- .danger:not([role="link"], a:not([role="button"])) {
14
- --color-background: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
15
- --border-color: oklch(from var(--color-danger-fill) l c h / var(--color-border-opacity));
16
- --color-text: oklch(from var(--color-danger-on-fill) l c h / var(--color-text-opacity));
17
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
- }
19
-
20
- :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
- &.danger {
22
+ &:is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
22
23
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
24
  --color-background: oklch(from var(--color-danger-fill-hover) l c h / var(--color-background-opacity));
24
25
  --border-color: oklch(from var(--color-danger-fill-hover) l c h / var(--color-border-opacity));
@@ -31,9 +32,3 @@
31
32
  }
32
33
  }
33
34
  }
34
-
35
- :is(.card, .pane, [role="status"], [role="alert"]).danger {
36
- --dialog-fill: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
37
- --dialog-border: oklch(from var(--color-danger-fill) l c h / var(--color-background-opacity));
38
- --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
39
- }
@@ -1,6 +1,16 @@
1
- :where(a:not([role="button"])),
2
- [role="link"] {
3
- &.info {
1
+ .info {
2
+ &:not(a:not([role="button"]), [role="link"]) {
3
+ --color-background: oklch(from var(--color-info-fill) l c h / var(--color-background-opacity));
4
+ --border-color: oklch(from var(--color-info-fill) l c h / var(--color-border-opacity));
5
+ --color-text: oklch(from var(--color-info-on-fill) l c h / var(--color-text-opacity));
6
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
7
+
8
+ --dialog-fill: oklch(from var(--color-info-fill) l c h / var(--color-background-opacity));
9
+ --dialog-border: oklch(from var(--color-info-fill) l c h / var(--color-background-opacity));
10
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
11
+ }
12
+
13
+ &:is(a:not([role="button"]), [role="link"]) {
4
14
  --color-text: oklch(from var(--color-info-text) l c h / var(--color-text-opacity));
5
15
  --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
16
 
@@ -8,17 +18,8 @@
8
18
  --color-text: oklch(from var(--color-info-text-hover) l c h / var(--color-text-opacity));
9
19
  }
10
20
  }
11
- }
12
21
 
13
- .info:not([role="link"], a:not([role="button"])) {
14
- --color-background: oklch(from var(--color-info-fill) l c h / var(--color-background-opacity));
15
- --border-color: oklch(from var(--color-info-fill) l c h / var(--color-border-opacity));
16
- --color-text: oklch(from var(--color-info-on-fill) l c h / var(--color-text-opacity));
17
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
- }
19
-
20
- :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
- &.info {
22
+ &:is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
22
23
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
24
  --color-background: oklch(from var(--color-info-fill-hover) l c h / var(--color-background-opacity));
24
25
  --border-color: oklch(from var(--color-info-fill-hover) l c h / var(--color-border-opacity));
@@ -31,9 +32,3 @@
31
32
  }
32
33
  }
33
34
  }
34
-
35
- :is(.card, .pane, [role="status"], [role="alert"]).info {
36
- --dialog-fill: oklch(from var(--color-info-fill) l c h / var(--color-background-opacity));
37
- --dialog-border: oklch(from var(--color-info-fill) l c h / var(--color-background-opacity));
38
- --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
39
- }
@@ -1,6 +1,16 @@
1
- :where(a:not([role="button"])),
2
- [role="link"] {
3
- &.primary {
1
+ .primary {
2
+ &:not(a:not([role="button"]), [role="link"]) {
3
+ --color-background: oklch(from var(--color-primary-fill) l c h / var(--color-background-opacity));
4
+ --border-color: oklch(from var(--color-primary-fill) l c h / var(--color-border-opacity));
5
+ --color-text: oklch(from var(--color-primary-on-fill) l c h / var(--color-text-opacity));
6
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
7
+
8
+ --dialog-fill: oklch(from var(--color-primary-fill) l c h / var(--color-background-opacity));
9
+ --dialog-border: oklch(from var(--color-primary-fill) l c h / var(--color-background-opacity));
10
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
11
+ }
12
+
13
+ &:is(a:not([role="button"]), [role="link"]) {
4
14
  --color-text: oklch(from var(--color-primary-text) l c h / var(--color-text-opacity));
5
15
  --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
16
 
@@ -8,17 +18,8 @@
8
18
  --color-text: oklch(from var(--color-primary-text-hover) l c h / var(--color-text-opacity));
9
19
  }
10
20
  }
11
- }
12
21
 
13
- .primary:not([role="link"], a:not([role="button"])) {
14
- --color-background: oklch(from var(--color-primary-fill) l c h / var(--color-background-opacity));
15
- --border-color: oklch(from var(--color-primary-fill) l c h / var(--color-border-opacity));
16
- --color-text: oklch(from var(--color-primary-on-fill) l c h / var(--color-text-opacity));
17
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
- }
19
-
20
- :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
- &.primary {
22
+ &:is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
22
23
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
24
  --color-background: oklch(from var(--color-primary-fill-hover) l c h / var(--color-background-opacity));
24
25
  --border-color: oklch(from var(--color-primary-fill-hover) l c h / var(--color-border-opacity));
@@ -31,9 +32,3 @@
31
32
  }
32
33
  }
33
34
  }
34
-
35
- :is(.card, .pane, [role="status"], [role="alert"]).primary {
36
- --dialog-fill: oklch(from var(--color-primary-fill) l c h / var(--color-background-opacity));
37
- --dialog-border: oklch(from var(--color-primary-fill) l c h / var(--color-background-opacity));
38
- --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
39
- }
@@ -1,6 +1,16 @@
1
- :where(a:not([role="button"])),
2
- [role="link"] {
3
- &.secondary {
1
+ .secondary {
2
+ &:not(a:not([role="button"]), [role="link"]) {
3
+ --color-background: oklch(from var(--color-secondary-fill) l c h / var(--color-background-opacity));
4
+ --border-color: oklch(from var(--color-secondary-fill) l c h / var(--color-border-opacity));
5
+ --color-text: oklch(from var(--color-secondary-on-fill) l c h / var(--color-text-opacity));
6
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
7
+
8
+ --dialog-fill: oklch(from var(--color-secondary-fill) l c h / var(--color-background-opacity));
9
+ --dialog-border: oklch(from var(--color-secondary-fill) l c h / var(--color-background-opacity));
10
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
11
+ }
12
+
13
+ &:is(a:not([role="button"]), [role="link"]) {
4
14
  --color-text: oklch(from var(--color-secondary-text) l c h / var(--color-text-opacity));
5
15
  --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
16
 
@@ -8,17 +18,8 @@
8
18
  --color-text: oklch(from var(--color-secondary-text-hover) l c h / var(--color-text-opacity));
9
19
  }
10
20
  }
11
- }
12
21
 
13
- .secondary:not([role="link"], a:not([role="button"])) {
14
- --color-background: oklch(from var(--color-secondary-fill) l c h / var(--color-background-opacity));
15
- --border-color: oklch(from var(--color-secondary-fill) l c h / var(--color-border-opacity));
16
- --color-text: oklch(from var(--color-secondary-on-fill) l c h / var(--color-text-opacity));
17
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
- }
19
-
20
- :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
- &.secondary {
22
+ &:is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
22
23
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
24
  --color-background: oklch(from var(--color-secondary-fill-hover) l c h / var(--color-background-opacity));
24
25
  --border-color: oklch(from var(--color-secondary-fill-hover) l c h / var(--color-border-opacity));
@@ -31,9 +32,3 @@
31
32
  }
32
33
  }
33
34
  }
34
-
35
- :is(.card, .pane, [role="status"], [role="alert"]).secondary {
36
- --dialog-fill: oklch(from var(--color-secondary-fill) l c h / var(--color-background-opacity));
37
- --dialog-border: oklch(from var(--color-secondary-fill) l c h / var(--color-background-opacity));
38
- --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
39
- }
@@ -1,6 +1,16 @@
1
- :where(a:not([role="button"])),
2
- [role="link"] {
3
- &.success {
1
+ .success {
2
+ &:not(a:not([role="button"]), [role="link"]) {
3
+ --color-background: oklch(from var(--color-success-fill) l c h / var(--color-background-opacity));
4
+ --border-color: oklch(from var(--color-success-fill) l c h / var(--color-border-opacity));
5
+ --color-text: oklch(from var(--color-success-on-fill) l c h / var(--color-text-opacity));
6
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
7
+
8
+ --dialog-fill: oklch(from var(--color-success-fill) l c h / var(--color-background-opacity));
9
+ --dialog-border: oklch(from var(--color-success-fill) l c h / var(--color-background-opacity));
10
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
11
+ }
12
+
13
+ &:is(a:not([role="button"]), [role="link"]) {
4
14
  --color-text: oklch(from var(--color-success-text) l c h / var(--color-text-opacity));
5
15
  --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
16
 
@@ -8,17 +18,8 @@
8
18
  --color-text: oklch(from var(--color-success-text-hover) l c h / var(--color-text-opacity));
9
19
  }
10
20
  }
11
- }
12
21
 
13
- .success:not([role="link"], a:not([role="button"])) {
14
- --color-background: oklch(from var(--color-success-fill) l c h / var(--color-background-opacity));
15
- --border-color: oklch(from var(--color-success-fill) l c h / var(--color-border-opacity));
16
- --color-text: oklch(from var(--color-success-on-fill) l c h / var(--color-text-opacity));
17
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
- }
19
-
20
- :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
- &.success {
22
+ &:is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
22
23
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
24
  --color-background: oklch(from var(--color-success-fill-hover) l c h / var(--color-background-opacity));
24
25
  --border-color: oklch(from var(--color-success-fill-hover) l c h / var(--color-border-opacity));
@@ -31,9 +32,3 @@
31
32
  }
32
33
  }
33
34
  }
34
-
35
- :is(.card, .pane, [role="status"], [role="alert"]).success {
36
- --dialog-fill: oklch(from var(--color-success-fill) l c h / var(--color-background-opacity));
37
- --dialog-border: oklch(from var(--color-success-fill) l c h / var(--color-background-opacity));
38
- --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
39
- }
@@ -1,6 +1,16 @@
1
- :where(a:not([role="button"])),
2
- [role="link"] {
3
- &.warning {
1
+ .warning {
2
+ &:not(a:not([role="button"]), [role="link"]) {
3
+ --color-background: oklch(from var(--color-warning-fill) l c h / var(--color-background-opacity));
4
+ --border-color: oklch(from var(--color-warning-fill) l c h / var(--color-border-opacity));
5
+ --color-text: oklch(from var(--color-warning-on-fill) l c h / var(--color-text-opacity));
6
+ --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
7
+
8
+ --dialog-fill: oklch(from var(--color-warning-fill) l c h / var(--color-background-opacity));
9
+ --dialog-border: oklch(from var(--color-warning-fill) l c h / var(--color-background-opacity));
10
+ --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
11
+ }
12
+
13
+ &:is(a:not([role="button"]), [role="link"]) {
4
14
  --color-text: oklch(from var(--color-warning-text) l c h / var(--color-text-opacity));
5
15
  --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
6
16
 
@@ -8,17 +18,8 @@
8
18
  --color-text: oklch(from var(--color-warning-text-hover) l c h / var(--color-text-opacity));
9
19
  }
10
20
  }
11
- }
12
21
 
13
- .warning:not([role="link"], a:not([role="button"])) {
14
- --color-background: oklch(from var(--color-warning-fill) l c h / var(--color-background-opacity));
15
- --border-color: oklch(from var(--color-warning-fill) l c h / var(--color-border-opacity));
16
- --color-text: oklch(from var(--color-warning-on-fill) l c h / var(--color-text-opacity));
17
- --color-text-muted: color-mix(in srgb, var(--color-text), transparent 40%);
18
- }
19
-
20
- :is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
21
- &.warning {
22
+ &:is(button, [type="submit"], [type="button"], [role="button"]):not([role="link"]) {
22
23
  &:is([aria-current]:not([aria-current="false"]), :hover, :active, :focus) {
23
24
  --color-background: oklch(from var(--color-warning-fill-hover) l c h / var(--color-background-opacity));
24
25
  --border-color: oklch(from var(--color-warning-fill-hover) l c h / var(--color-border-opacity));
@@ -31,9 +32,3 @@
31
32
  }
32
33
  }
33
34
  }
34
-
35
- :is(.card, .pane, [role="status"], [role="alert"]).warning {
36
- --dialog-fill: oklch(from var(--color-warning-fill) l c h / var(--color-background-opacity));
37
- --dialog-border: oklch(from var(--color-warning-fill) l c h / var(--color-background-opacity));
38
- --dialog-section-fill: color-mix(in srgb, light-dark(var(--color-slate-900), var(--color-slate-50)), transparent 90%);
39
- }