@knadh/oat 0.3.0 → 0.4.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/README.md CHANGED
@@ -10,6 +10,8 @@ I wrote this to use in my own projects after getting sick of the ridiculous bloa
10
10
 
11
11
  See live demo and docs at [**oat.ink**](https://oat.ink)
12
12
 
13
+ **IMPORTANT:** The lib is currently sub v1 and is likely to have breaking changes until it hits v1.
14
+
13
15
  -------------
14
16
 
15
17
  <img width="739" height="735" alt="image" src="https://github.com/user-attachments/assets/b0a2f55c-659d-4aab-922c-b13d89eeab36" />
package/css/00-base.css CHANGED
@@ -3,6 +3,7 @@
3
3
  @layer base {
4
4
  *, *::before, *::after {
5
5
  box-sizing: border-box;
6
+ -webkit-tap-highlight-color: transparent;
6
7
  }
7
8
 
8
9
  * {
@@ -108,7 +109,7 @@
108
109
  code {
109
110
  font-family: var(--font-mono);
110
111
  font-size: 0.875em;
111
- padding: 0.125rem 0.25rem;
112
+ padding: calc(var(--space-1) / 2) var(--space-1);
112
113
  background-color: var(--faint);
113
114
  border-radius: var(--radius-small);
114
115
  }
@@ -139,7 +140,7 @@
139
140
  hr {
140
141
  border: none;
141
142
  border-top: 1px solid var(--border);
142
- margin: var(--space-8) 0;
143
+ margin: var(--space-2) 0;
143
144
  }
144
145
 
145
146
  ul, ol {
@@ -161,10 +162,14 @@
161
162
 
162
163
  mark {
163
164
  background-color: rgb(from var(--warning) r g b / 0.3);
164
- padding: 0.125rem 0.25rem;
165
+ padding: calc(var(--space-1) / 2) var(--space-1);
165
166
  border-radius: var(--radius-small);
166
167
  }
167
168
 
169
+ [hidden] {
170
+ display: none;
171
+ }
172
+
168
173
  :focus-visible {
169
174
  outline: 2px solid var(--ring);
170
175
  outline-offset: 2px;
package/css/01-theme.css CHANGED
@@ -1,27 +1,29 @@
1
1
  @layer theme {
2
2
  :root {
3
- /* Default light theme variables */
4
- --background: #fff;
5
- --foreground: #09090b;
6
- --card: #fff;
7
- --card-foreground: #09090b;
8
- --primary: #574747;
9
- --primary-foreground: #fafafa;
10
- --secondary: #f4f4f5;
11
- --secondary-foreground: #574747;
12
- --muted: #f4f4f5;
13
- --muted-foreground: #71717a;
14
- --faint: #fafafa;
15
- --accent: #f4f4f5;
16
- --danger: #df514c;
17
- --danger-foreground: #fafafa;
18
- --success: #4caf50;
19
- --success-foreground: #fafafa;
20
- --warning: #ff8c00;
3
+ color-scheme: light dark;
4
+
5
+ --background: light-dark(#fff, #09090b);
6
+ --foreground: light-dark(#09090b, #fafafa);
7
+ --card: light-dark(#fff, #18181b);
8
+ --card-foreground: light-dark(#09090b, #fafafa);
9
+ --primary: light-dark(#574747, #fafafa);
10
+ --primary-foreground: light-dark(#fafafa, #18181b);
11
+ --secondary: light-dark(#f4f4f5, #27272a);
12
+ --secondary-foreground: light-dark(#574747, #fafafa);
13
+ --muted: light-dark(#f4f4f5, #27272a);
14
+ --muted-foreground: light-dark(#71717a, #a1a1aa);
15
+ --faint: light-dark(#fafafa, #1e1e21);
16
+ --faint-foreground: light-dark(#a1a1aa, #71717a);
17
+ --accent: light-dark(#f4f4f5, #27272a);
18
+ --danger: light-dark(#d32f2f, #f4807b);
19
+ --danger-foreground: light-dark(#fafafa, #18181b);
20
+ --success: light-dark(#008032, #6cc070);
21
+ --success-foreground: light-dark(#fafafa, #18181b);
22
+ --warning: light-dark(#a65b00, #f0a030);
21
23
  --warning-foreground: #09090b;
22
- --border: #d4d4d8;
23
- --input: #d4d4d8;
24
- --ring: #574747;
24
+ --border: light-dark(#d4d4d8, #52525b);
25
+ --input: light-dark(#d4d4d8, #52525b);
26
+ --ring: light-dark(#574747, #d4d4d8);
25
27
 
26
28
  /* ==================== */
27
29
  --space-1: 0.25rem;
@@ -74,26 +76,4 @@
74
76
  --z-dropdown: 50;
75
77
  --z-modal: 200;
76
78
  }
77
-
78
- [data-theme="dark"] {
79
- color-scheme: dark;
80
- --background: #09090b;
81
- --foreground: #fafafa;
82
- --card: #18181b;
83
- --card-foreground: #fafafa;
84
- --primary: #fafafa;
85
- --primary-foreground: #18181b;
86
- --secondary: #27272a;
87
- --secondary-foreground: #fafafa;
88
- --muted: #27272a;
89
- --muted-foreground: #a1a1aa;
90
- --faint: #1e1e21;
91
- --accent: #27272a;
92
- --danger-foreground: #fafafa;
93
- --success-foreground: #fafafa;
94
- --warning-foreground: #09090b;
95
- --border: #52525b;
96
- --input: #52525b;
97
- --ring: #d4d4d8;
98
- }
99
79
  }
package/css/alert.css CHANGED
@@ -1,20 +1,14 @@
1
1
  @layer components {
2
2
  [role="alert"] {
3
- --bg-amount: 8%;
4
-
5
3
  position: relative;
6
4
  display: flex;
7
5
  gap: var(--space-3);
8
- padding: var(--space-4);
6
+ padding: var(--space-4) var(--space-6);
9
7
  background-color: var(--background);
10
8
  border: 1px solid var(--border);
11
9
  border-radius: var(--radius-medium);
12
10
  font-size: var(--text-7);
13
11
 
14
- [data-theme="dark"] & {
15
- --bg-amount: 20%;
16
- }
17
-
18
12
  &[data-variant] {
19
13
  border: none;
20
14
  }
@@ -22,7 +16,10 @@
22
16
  &[data-variant="error"],
23
17
  &[data-variant="danger"] {
24
18
  color: var(--danger);
25
- background-color: color-mix(in srgb, var(--danger) var(--bg-amount), transparent);
19
+ background-color: light-dark(
20
+ color-mix(in srgb, var(--danger) 8%, transparent),
21
+ color-mix(in srgb, var(--danger) 20%, transparent)
22
+ );
26
23
 
27
24
  & a {
28
25
  color: var(--danger);
@@ -31,7 +28,10 @@
31
28
 
32
29
  &[data-variant="success"] {
33
30
  color: var(--success);
34
- background-color: color-mix(in srgb, var(--success) var(--bg-amount), transparent);
31
+ background-color: light-dark(
32
+ color-mix(in srgb, var(--success) 8%, transparent),
33
+ color-mix(in srgb, var(--success) 20%, transparent)
34
+ );
35
35
 
36
36
  & a {
37
37
  color: var(--success);
@@ -40,7 +40,10 @@
40
40
 
41
41
  &[data-variant="warning"] {
42
42
  color: var(--warning);
43
- background-color: color-mix(in srgb, var(--warning) var(--bg-amount), transparent);
43
+ background-color: light-dark(
44
+ color-mix(in srgb, var(--warning) 8%, transparent),
45
+ color-mix(in srgb, var(--warning) 20%, transparent)
46
+ );
44
47
 
45
48
  & a {
46
49
  color: var(--warning);
package/css/badge.css CHANGED
@@ -1,7 +1,5 @@
1
1
  @layer components {
2
2
  .badge {
3
- --bg-amount: 12%;
4
-
5
3
  display: inline-flex;
6
4
  align-items: center;
7
5
  gap: var(--space-1);
@@ -13,10 +11,6 @@
13
11
  color: var(--primary-foreground);
14
12
  border-radius: var(--radius-full);
15
13
 
16
- [data-theme="dark"] & {
17
- --bg-amount: 40%;
18
- }
19
-
20
14
  &.secondary {
21
15
  background-color: var(--secondary);
22
16
  color: var(--secondary-foreground);
@@ -30,17 +24,26 @@
30
24
 
31
25
  &.success {
32
26
  color: var(--success);
33
- background-color: color-mix(in srgb, var(--success) var(--bg-amount), transparent);
27
+ background-color: light-dark(
28
+ color-mix(in srgb, var(--success) 10%, transparent),
29
+ color-mix(in srgb, var(--success) 30%, transparent)
30
+ );
34
31
  }
35
32
 
36
33
  &.warning {
37
34
  color: var(--warning);
38
- background-color: color-mix(in srgb, var(--warning) var(--bg-amount), transparent);
35
+ background-color: light-dark(
36
+ color-mix(in srgb, var(--warning) 10%, transparent),
37
+ color-mix(in srgb, var(--warning) 30%, transparent)
38
+ );
39
39
  }
40
40
 
41
41
  &.danger {
42
42
  color: var(--danger);
43
- background-color: color-mix(in srgb, var(--danger) var(--bg-amount), transparent);
43
+ background-color: light-dark(
44
+ color-mix(in srgb, var(--danger) 10%, transparent),
45
+ color-mix(in srgb, var(--danger) 30%, transparent)
46
+ );
44
47
  }
45
48
  }
46
49
  }
package/css/button.css CHANGED
@@ -1,10 +1,11 @@
1
1
  @layer base {
2
2
  :is(button, [type=submit], [type=reset], [type=button], a.button), ::file-selector-button {
3
+ --_hov: color-mix(in srgb, var(--primary), white 25%);
4
+
3
5
  display: inline-flex;
4
6
  align-items: center;
5
7
  justify-content: center;
6
8
  gap: var(--space-2);
7
- /* height: 2.5rem; */
8
9
  padding: var(--space-2) var(--space-4);
9
10
  font-size: var(--text-7);
10
11
  font-weight: var(--font-medium);
@@ -17,10 +18,13 @@
17
18
  border: 1px solid;
18
19
  border-color: rgb(from #fff r g b / 0.15) rgb(from #000 r g b / 0.2) rgb(from #000 r g b / 0.2) rgb(from #fff r g b / 0.15);
19
20
  transition: background-color var(--transition-fast), opacity var(--transition-fast), transform var(--transition-fast);
20
- cursor: pointer;
21
+
22
+ &:not(:disabled) {
23
+ cursor: pointer;
24
+ }
21
25
 
22
26
  &:hover:not(:disabled) {
23
- background-color: color-mix(in srgb, var(--primary), white 25%);
27
+ background-color: var(--_hov);
24
28
  }
25
29
 
26
30
  &:active:not(:disabled) {
@@ -28,74 +32,51 @@
28
32
  }
29
33
 
30
34
  &[data-variant="secondary"] {
35
+ --_hov: color-mix(in srgb, var(--secondary), black 10%);
31
36
  background-color: var(--secondary);
32
37
  color: var(--secondary-foreground);
33
38
  border-color: rgb(from #fff r g b / 0.5) rgb(from #000 r g b / 0.1) rgb(from #000 r g b / 0.1) rgb(from #fff r g b / 0.5);
34
-
35
- &:hover:not(:disabled) {
36
- background-color: color-mix(in srgb, var(--secondary), black 10%);
37
- }
38
39
  }
39
40
 
40
41
  &[data-variant="danger"] {
42
+ --_hov: color-mix(in srgb, var(--danger), black 15%);
41
43
  background-color: var(--danger);
42
44
  color: var(--danger-foreground);
43
-
44
- &:hover:not(:disabled) {
45
- background-color: color-mix(in srgb, var(--danger), black 15%);
46
- }
47
45
  }
48
46
 
49
- &.outline {
47
+ &:is(.outline, .ghost) {
48
+ --_hov: var(--accent);
50
49
  background-color: transparent;
51
- border-color: var(--border);
50
+ color: var(--foreground);
52
51
 
53
- &:not([data-variant]) {
54
- color: var(--foreground);
55
- }
56
52
  &[data-variant="danger"] {
53
+ --_hov: color-mix(in srgb, var(--danger), transparent 90%);
57
54
  color: var(--danger);
58
- border-color: var(--danger);
59
- &:hover:not(:disabled) {
60
- background-color: color-mix(in srgb, var(--danger), transparent 90%);
61
- }
62
55
  }
56
+
63
57
  &[data-variant="secondary"] {
58
+ --_hov: color-mix(in srgb, var(--secondary), transparent 80%);
64
59
  color: var(--secondary-foreground);
65
- border-color: var(--secondary);
66
- &:hover:not(:disabled) {
67
- background-color: color-mix(in srgb, var(--secondary), transparent 80%);
68
- }
69
- }
70
- &:hover:not(:disabled):not([data-variant]) {
71
- background-color: var(--accent);
72
60
  }
73
61
  }
74
62
 
75
- &.ghost {
76
- background-color: transparent;
77
- border-color: transparent;
63
+ &.outline {
64
+ border-color: var(--border);
78
65
 
79
- &:not([data-variant]) {
80
- color: var(--foreground);
81
- }
82
66
  &[data-variant="danger"] {
83
- color: var(--danger);
84
- &:hover:not(:disabled) {
85
- background-color: color-mix(in srgb, var(--danger), transparent 90%);
86
- }
67
+ border-color: var(--danger);
87
68
  }
69
+
88
70
  &[data-variant="secondary"] {
89
- color: var(--secondary-foreground);
90
- &:hover:not(:disabled) {
91
- background-color: color-mix(in srgb, var(--secondary), transparent 80%);
92
- }
93
- }
94
- &:hover:not(:disabled):not([data-variant]) {
95
- background-color: var(--accent);
71
+ border-color: var(--secondary);
96
72
  }
97
73
  }
98
74
 
75
+ &.ghost {
76
+ /* Same as .outline but no border. */
77
+ border-color: transparent;
78
+ }
79
+
99
80
  &.small {
100
81
  padding: var(--space-1) var(--space-3);
101
82
  font-size: var(--text-8);
@@ -134,23 +115,27 @@
134
115
 
135
116
  @layer components {
136
117
  menu.buttons {
118
+ list-style-type: none;
137
119
  padding-inline-start: 0;
138
120
  display: inline-flex;
139
121
 
140
- & > :is(button, [type=button], [type=submit], [type=reset], a.button) {
141
- border-radius: 0;
142
-
143
- &:first-child {
122
+ /* In menu.buttons, <li> children are expected to have just one child, which is a button/or a.button */
123
+ & > li {
124
+ &:first-child > * {
144
125
  border-start-start-radius: var(--radius-medium);
145
126
  border-end-start-radius: var(--radius-medium);
146
127
  }
147
128
 
148
- &:last-child {
129
+ &:last-child > * {
149
130
  border-start-end-radius: var(--radius-medium);
150
131
  border-end-end-radius: var(--radius-medium);
151
132
  }
152
133
 
153
- &:not(:last-child) {
134
+ & > * {
135
+ border-radius: 0;
136
+ }
137
+
138
+ &:not(:last-child) > * {
154
139
  border-inline-end: 1px solid rgb(from var(--primary-foreground) r g b / 0.2);
155
140
  }
156
141
  }
package/css/dialog.css CHANGED
@@ -3,8 +3,7 @@
3
3
  position: fixed;
4
4
  inset: 0;
5
5
  z-index: var(--z-modal);
6
- width: 100%;
7
- max-width: 32rem;
6
+ width: min(100% - 2rem, 32rem);
8
7
  max-height: 85vh;
9
8
  margin: auto;
10
9
  padding: 0;
package/css/dropdown.css CHANGED
@@ -28,10 +28,6 @@
28
28
  transform: translateY(-4px);
29
29
  }
30
30
  }
31
-
32
- hr {
33
- margin: var(--space-1) 0;
34
- }
35
31
  }
36
32
 
37
33
  [role="menuitem"] {
package/css/form.css CHANGED
@@ -32,6 +32,7 @@
32
32
  outline: none;
33
33
  border-color: var(--ring);
34
34
  box-shadow: 0 0 0 2px rgb(from var(--ring) r g b / 0.2);
35
+ z-index: 1;
35
36
  }
36
37
 
37
38
  &:disabled {
@@ -67,6 +68,7 @@
67
68
  width: 1rem;
68
69
  height: 1rem;
69
70
  margin: 0;
71
+ position: relative;
70
72
  background-color: var(--background);
71
73
  border: 1px solid var(--input);
72
74
  transition: background-color var(--transition-fast), border-color var(--transition-fast);
@@ -74,22 +76,24 @@
74
76
  &:checked {
75
77
  background-color: var(--primary);
76
78
  border-color: var(--primary);
79
+
80
+ &::after {
81
+ content: "";
82
+ position: absolute;
83
+ inset: 0;
84
+ background-color: var(--primary-foreground);
85
+ mask-position: center;
86
+ mask-repeat: no-repeat;
87
+ mask-size: 100%;
88
+ }
77
89
  }
78
90
  }
79
91
 
80
92
  input[type=checkbox] {
81
93
  border-radius: var(--radius-small);
82
- position: relative;
83
94
 
84
95
  &:checked::after {
85
- content: "";
86
- position: absolute;
87
- inset: 0;
88
- background-color: var(--primary-foreground);
89
96
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='4'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
90
- mask-size: 90%;
91
- mask-position: center;
92
- mask-repeat: no-repeat;
93
97
  }
94
98
 
95
99
  &[role=switch] {
@@ -101,7 +105,6 @@
101
105
  height: var(--switch-height);
102
106
  border-radius: var(--radius-full);
103
107
  background-color: var(--input);
104
- position: relative;
105
108
 
106
109
  &::before {
107
110
  content: "";
@@ -133,17 +136,9 @@
133
136
 
134
137
  input[type=radio] {
135
138
  border-radius: var(--radius-full);
136
- position: relative;
137
139
 
138
140
  &:checked::after {
139
- content: "";
140
- position: absolute;
141
- inset: 0;
142
- background-color: var(--primary-foreground);
143
141
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='4' fill='currentColor'/%3E%3C/svg%3E");
144
- mask-size: 100%;
145
- mask-position: center;
146
- mask-repeat: no-repeat;
147
142
  }
148
143
  }
149
144
 
@@ -206,7 +201,10 @@
206
201
  & > :is(input, textarea, select) {
207
202
  flex: 1;
208
203
  margin-block-start: 0;
209
- border-inline-end: 0;
204
+
205
+ &:not(:focus) {
206
+ border-inline-end-color: transparent;
207
+ }
210
208
  }
211
209
 
212
210
  & > :is(input, textarea, select, button) {
package/css/sidebar.css CHANGED
@@ -1,7 +1,6 @@
1
1
  @layer components {
2
2
  :root {
3
- --topnav-height: var(--space-12);
4
- --sidebar-width: 14rem;
3
+ --_nh: var(--space-12);
5
4
  }
6
5
 
7
6
  [data-sidebar-layout] {
@@ -9,13 +8,13 @@
9
8
  --topnav-scroll-offset: 0px;
10
9
 
11
10
  display: grid;
12
- grid-template-columns: var(--sidebar-width) 1fr;
11
+ grid-template-columns: 14rem 1fr;
13
12
  min-height: 100dvh;
14
13
  gap: var(--space-4);
15
14
 
16
15
  &:has(nav[data-topnav]) {
17
- --topnav-offset: var(--topnav-height);
18
- --topnav-scroll-offset: calc(var(--topnav-height) + var(--space-6));
16
+ --topnav-offset: var(--_nh);
17
+ --topnav-scroll-offset: calc(var(--_nh) + var(--space-6));
19
18
  }
20
19
 
21
20
  > main {
@@ -37,7 +36,6 @@
37
36
  border-inline-end: 1px solid var(--border);
38
37
  display: flex;
39
38
  flex-direction: column;
40
- width: var(--sidebar-width);
41
39
 
42
40
  > :is(header, footer) {
43
41
  flex-shrink: 0;
@@ -93,11 +91,8 @@
93
91
 
94
92
  summary {
95
93
  justify-content: flex-start;
96
- gap: var(--space-2);
97
94
  padding: var(--space-2) var(--space-3);
98
95
  font-size: var(--text-7);
99
- font-weight: var(--font-medium);
100
- color: var(--foreground);
101
96
  border-radius: var(--radius-small);
102
97
 
103
98
  &::after {
@@ -112,10 +107,9 @@
112
107
 
113
108
  nav[data-topnav] {
114
109
  position: fixed;
115
- inset-block-start: 0;
116
- inset-inline: 0;
110
+ inset: 0 0 auto;
117
111
  z-index: 5;
118
- min-height: var(--topnav-height);
112
+ min-height: var(--_nh);
119
113
  display: flex;
120
114
  align-items: center;
121
115
  gap: var(--space-3);
@@ -137,31 +131,33 @@
137
131
  cursor: pointer;
138
132
  }
139
133
 
140
- [data-sidebar-layout="always"] [data-sidebar-toggle] {
141
- display: inline-block;
142
- }
134
+ @media (min-width: 769px) {
135
+ [data-sidebar-layout="always"] [data-sidebar-toggle] {
136
+ display: inline-block;
137
+ }
143
138
 
144
- [data-sidebar-layout="always"] {
145
- transition: grid-template-columns var(--transition);
139
+ [data-sidebar-layout="always"] {
140
+ transition: grid-template-columns var(--transition);
146
141
 
147
- > aside[data-sidebar] {
148
- transform: translateX(0);
149
- opacity: 1;
150
- transition: transform var(--transition), opacity var(--transition), visibility var(--transition);
142
+ > aside[data-sidebar] {
143
+ transform: translateX(0);
144
+ opacity: 1;
145
+ transition: transform var(--transition), opacity var(--transition), visibility var(--transition);
146
+ }
151
147
  }
152
- }
153
148
 
154
- [data-sidebar-layout="always"][data-sidebar-open] {
155
- grid-template-columns: 0px 1fr;
156
- gap: 0;
149
+ [data-sidebar-layout="always"][data-sidebar-open] {
150
+ grid-template-columns: 0px 1fr;
151
+ gap: 0;
157
152
 
158
- > aside[data-sidebar] {
159
- overflow: hidden;
160
- min-width: 0;
161
- transform: translateX(-100%);
162
- opacity: 0;
163
- visibility: hidden;
164
- border-inline-end: none;
153
+ > aside[data-sidebar] {
154
+ overflow: hidden;
155
+ min-width: 0;
156
+ transform: translateX(-100%);
157
+ opacity: 0;
158
+ visibility: hidden;
159
+ border-inline-end: none;
160
+ }
165
161
  }
166
162
  }
167
163
 
@@ -171,9 +167,7 @@
171
167
 
172
168
  > aside[data-sidebar] {
173
169
  position: fixed;
174
- top: var(--topnav-offset);
175
170
  left: 0;
176
- height: calc(100dvh - var(--topnav-offset));
177
171
  width: 16rem;
178
172
  transform: translateX(-100%);
179
173
  transition: transform var(--transition);
@@ -184,17 +178,6 @@
184
178
  transform: translateX(0);
185
179
  }
186
180
  }
187
- [data-sidebar-layout="always"][data-sidebar-open] {
188
- grid-template-columns: 1fr;
189
- gap: var(--space-4);
190
-
191
- > aside[data-sidebar] {
192
- opacity: 1;
193
- visibility: visible;
194
- transform: translateX(0);
195
- }
196
- }
197
-
198
181
  [data-sidebar-toggle] { display: inline-block; }
199
182
 
200
183
  [data-sidebar-header] {
package/css/skeleton.css CHANGED
@@ -1,26 +1,22 @@
1
1
  @layer components {
2
2
  [role="status"].skeleton {
3
+ --_c: light-dark(
4
+ color-mix(in srgb, var(--muted) 30%, white),
5
+ color-mix(in srgb, var(--muted) 90%, var(--foreground))
6
+ );
7
+
3
8
  margin-block-end: var(--space-3);
4
9
  background: var(--muted);
5
10
  border-radius: var(--radius-medium);
6
- animation: shimmer 2s infinite;
11
+ animation: anim 2s infinite;
7
12
  background-size: 200% 100%;
8
13
  background-image: linear-gradient(
9
14
  90deg,
10
15
  var(--muted) 0%,
11
- color-mix(in srgb, var(--muted) 30%, white) 30%,
16
+ var(--_c) 50%,
12
17
  var(--muted) 100%
13
18
  );
14
19
 
15
- [data-theme="dark"] & {
16
- background-image: linear-gradient(
17
- 90deg,
18
- var(--muted) 0%,
19
- color-mix(in srgb, var(--muted) 90%, var(--foreground)) 90%,
20
- var(--muted) 100%
21
- );
22
- }
23
-
24
20
  &.box {
25
21
  width: 4rem;
26
22
  height: 4rem;
@@ -36,7 +32,7 @@
36
32
  margin-block-end: 0;
37
33
  }
38
34
 
39
- @keyframes shimmer {
35
+ @keyframes anim {
40
36
  from { background-position: 200% 0; }
41
37
  to { background-position: -200% 0; }
42
38
  }