@shift-css/core 0.4.0 → 0.6.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.
@@ -0,0 +1,263 @@
1
+ :where([s-prose]) {
2
+ --_prose-body: var(--s-text-base);
3
+ --_prose-body-weight: var(--s-font-normal);
4
+ --_prose-leading: var(--s-leading-relaxed);
5
+ --_prose-link-color: var(--s-primary-600);
6
+ --_prose-link-hover: var(--s-primary-700);
7
+ --_prose-code-bg: var(--s-neutral-100);
8
+ --_prose-code-color: var(--s-danger-600);
9
+ --_prose-pre-bg: var(--s-neutral-900);
10
+ --_prose-pre-color: var(--s-neutral-100);
11
+ --_prose-border-color: var(--s-border-default);
12
+ --_prose-quote-border: var(--s-primary-500);
13
+ font-size: var(--_prose-body);
14
+ font-weight: var(--_prose-body-weight);
15
+ line-height: var(--_prose-leading);
16
+ color: var(--s-text-primary);
17
+ max-width: 65ch;
18
+ }
19
+
20
+ [s-prose="full"] {
21
+ max-width: none;
22
+ }
23
+
24
+ :where([s-prose]) :where(h1, h2, h3, h4, h5, h6) {
25
+ color: var(--s-text-primary);
26
+ font-weight: var(--s-font-bold);
27
+ line-height: var(--s-leading-tight);
28
+ margin-top: 1.5em;
29
+ margin-bottom: .5em;
30
+ }
31
+
32
+ :where([s-prose]) :where(h1) {
33
+ font-size: var(--s-text-4xl);
34
+ margin-top: 0;
35
+ }
36
+
37
+ :where([s-prose]) :where(h2) {
38
+ font-size: var(--s-text-3xl);
39
+ border-bottom: 1px solid var(--_prose-border-color);
40
+ padding-bottom: .25em;
41
+ }
42
+
43
+ :where([s-prose]) :where(h3) {
44
+ font-size: var(--s-text-2xl);
45
+ }
46
+
47
+ :where([s-prose]) :where(h4) {
48
+ font-size: var(--s-text-xl);
49
+ }
50
+
51
+ :where([s-prose]) :where(h5) {
52
+ font-size: var(--s-text-lg);
53
+ }
54
+
55
+ :where([s-prose]) :where(h6) {
56
+ font-size: var(--s-text-base);
57
+ color: var(--s-text-secondary);
58
+ }
59
+
60
+ :where([s-prose]) :where(p) {
61
+ margin-bottom: 1.25em;
62
+ }
63
+
64
+ :where([s-prose]) :where(strong, b) {
65
+ font-weight: var(--s-font-semibold);
66
+ color: var(--s-text-primary);
67
+ }
68
+
69
+ :where([s-prose]) :where(em, i) {
70
+ font-style: italic;
71
+ }
72
+
73
+ :where([s-prose]) :where(small) {
74
+ font-size: var(--s-text-sm);
75
+ }
76
+
77
+ :where([s-prose]) :where(a) {
78
+ color: var(--_prose-link-color);
79
+ text-underline-offset: 2px;
80
+ transition: color var(--s-duration-150) var(--s-ease-out);
81
+ text-decoration: underline 1px;
82
+
83
+ &:hover {
84
+ color: var(--_prose-link-hover);
85
+ }
86
+ }
87
+
88
+ :where([s-prose]) :where(ul, ol) {
89
+ margin-bottom: 1.25em;
90
+ padding-left: 1.5em;
91
+ }
92
+
93
+ :where([s-prose]) :where(ul) {
94
+ list-style-type: disc;
95
+ }
96
+
97
+ :where([s-prose]) :where(ol) {
98
+ list-style-type: decimal;
99
+ }
100
+
101
+ :where([s-prose]) :where(li) {
102
+ margin-bottom: .5em;
103
+
104
+ &::marker {
105
+ color: var(--s-text-tertiary);
106
+ }
107
+ }
108
+
109
+ :where([s-prose]) :where(li > ul, li > ol) {
110
+ margin-top: .5em;
111
+ margin-bottom: 0;
112
+ }
113
+
114
+ :where([s-prose]) :where(dl) {
115
+ margin-bottom: 1.25em;
116
+ }
117
+
118
+ :where([s-prose]) :where(dt) {
119
+ font-weight: var(--s-font-semibold);
120
+ margin-top: 1em;
121
+ }
122
+
123
+ :where([s-prose]) :where(dd) {
124
+ margin-bottom: .5em;
125
+ margin-left: 1.5em;
126
+ }
127
+
128
+ :where([s-prose]) :where(blockquote) {
129
+ border-left: 4px solid var(--_prose-quote-border);
130
+ background-color: var(--s-surface-sunken);
131
+ border-radius: 0 var(--s-radius-md) var(--s-radius-md) 0;
132
+ color: var(--s-text-secondary);
133
+ margin: 1.5em 0;
134
+ padding: .5em 1em;
135
+ font-style: italic;
136
+
137
+ & p:last-child {
138
+ margin-bottom: 0;
139
+ }
140
+ }
141
+
142
+ :where([s-prose]) :where(code) {
143
+ font-family: var(--s-font-mono);
144
+ background-color: var(--_prose-code-bg);
145
+ color: var(--_prose-code-color);
146
+ border-radius: var(--s-radius-sm);
147
+ padding: .125em .375em;
148
+ font-size: .875em;
149
+ }
150
+
151
+ :where([s-prose]) :where(pre) {
152
+ background-color: var(--_prose-pre-bg);
153
+ color: var(--_prose-pre-color);
154
+ border-radius: var(--s-radius-lg);
155
+ font-size: var(--s-text-sm);
156
+ line-height: var(--s-leading-normal);
157
+ margin: 1.5em 0;
158
+ padding: 1em;
159
+ overflow-x: auto;
160
+
161
+ & code {
162
+ color: inherit;
163
+ font-size: inherit;
164
+ background: none;
165
+ border-radius: 0;
166
+ padding: 0;
167
+ }
168
+ }
169
+
170
+ :where([s-prose]) :where(kbd) {
171
+ font-family: var(--s-font-mono);
172
+ background-color: var(--s-neutral-200);
173
+ color: var(--s-text-primary);
174
+ border-radius: var(--s-radius-sm);
175
+ border: 1px solid var(--s-neutral-300);
176
+ box-shadow: 0 1px 0 var(--s-neutral-400);
177
+ padding: .125em .375em;
178
+ font-size: .875em;
179
+ }
180
+
181
+ :where([s-prose]) :where(hr) {
182
+ border: none;
183
+ border-top: 1px solid var(--_prose-border-color);
184
+ margin: 2em 0;
185
+ }
186
+
187
+ :where([s-prose]) :where(img) {
188
+ border-radius: var(--s-radius-lg);
189
+ max-width: 100%;
190
+ height: auto;
191
+ }
192
+
193
+ :where([s-prose]) :where(figure) {
194
+ margin: 1.5em 0;
195
+ }
196
+
197
+ :where([s-prose]) :where(figcaption) {
198
+ font-size: var(--s-text-sm);
199
+ color: var(--s-text-secondary);
200
+ text-align: center;
201
+ margin-top: .75em;
202
+ }
203
+
204
+ :where([s-prose]) :where(table) {
205
+ border-collapse: collapse;
206
+ width: 100%;
207
+ font-size: var(--s-text-sm);
208
+ margin: 1.5em 0;
209
+ }
210
+
211
+ :where([s-prose]) :where(thead) {
212
+ border-bottom: 2px solid var(--_prose-border-color);
213
+ }
214
+
215
+ :where([s-prose]) :where(th) {
216
+ font-weight: var(--s-font-semibold);
217
+ text-align: left;
218
+ background-color: var(--s-surface-sunken);
219
+ padding: .75em 1em;
220
+ }
221
+
222
+ :where([s-prose]) :where(td) {
223
+ border-bottom: 1px solid var(--_prose-border-color);
224
+ padding: .75em 1em;
225
+ }
226
+
227
+ :where([s-prose]) :where(tbody tr:hover) {
228
+ background-color: var(--s-surface-sunken);
229
+ }
230
+
231
+ [s-prose][s-size="sm"] {
232
+ --_prose-body: var(--s-text-sm);
233
+ }
234
+
235
+ [s-prose][s-size="lg"] {
236
+ --_prose-body: var(--s-text-lg);
237
+ }
238
+
239
+ @media (prefers-color-scheme: dark) {
240
+ :where([s-prose]) {
241
+ --_prose-link-color: var(--s-primary-400);
242
+ --_prose-link-hover: var(--s-primary-300);
243
+ --_prose-code-bg: var(--s-neutral-800);
244
+ --_prose-code-color: var(--s-danger-400);
245
+ --_prose-pre-bg: var(--s-neutral-950);
246
+ --_prose-pre-color: var(--s-neutral-200);
247
+ }
248
+
249
+ :where([s-prose]) :where(kbd) {
250
+ background-color: var(--s-neutral-700);
251
+ border-color: var(--s-neutral-600);
252
+ box-shadow: 0 1px 0 var(--s-neutral-500);
253
+ }
254
+ }
255
+
256
+ :root[style*="color-scheme: dark"] :where([s-prose]), :root[style*="color-scheme:dark"] :where([s-prose]) {
257
+ --_prose-link-color: var(--s-primary-400);
258
+ --_prose-link-hover: var(--s-primary-300);
259
+ --_prose-code-bg: var(--s-neutral-800);
260
+ --_prose-code-color: var(--s-danger-400);
261
+ --_prose-pre-bg: var(--s-neutral-950);
262
+ --_prose-pre-color: var(--s-neutral-200);
263
+ }
@@ -0,0 +1,86 @@
1
+ :where([s-skip-link]) {
2
+ --_skip-bg: var(--s-primary-600);
3
+ --_skip-color: white;
4
+ --_skip-radius: var(--s-radius-md);
5
+ --_skip-shadow: var(--s-shadow-lg);
6
+ --_skip-z: 9999;
7
+ z-index: var(--_skip-z);
8
+ align-items: center;
9
+ gap: var(--s-space-2);
10
+ padding: var(--s-space-3) var(--s-space-6);
11
+ background-color: var(--_skip-bg);
12
+ color: var(--_skip-color);
13
+ font-size: var(--s-text-sm);
14
+ font-weight: var(--s-font-semibold);
15
+ border-radius: var(--_skip-radius);
16
+ box-shadow: var(--_skip-shadow);
17
+ white-space: nowrap;
18
+ transition: top var(--s-duration-200) var(--s-ease-out), opacity var(--s-duration-200) var(--s-ease-out);
19
+ opacity: 0;
20
+ text-decoration: none;
21
+ display: inline-flex;
22
+ position: fixed;
23
+ top: -100%;
24
+ left: 50%;
25
+ transform: translateX(-50%);
26
+ }
27
+
28
+ [s-skip-link]:focus, [s-skip-link]:focus-visible {
29
+ top: var(--s-space-4);
30
+ opacity: 1;
31
+ box-shadow: var(--_skip-shadow), 0 0 0 3px white, 0 0 0 5px var(--_skip-bg);
32
+ outline: none;
33
+ }
34
+
35
+ [s-skip-link-group] {
36
+ z-index: 9999;
37
+ align-items: center;
38
+ gap: var(--s-space-2);
39
+ padding: var(--s-space-2);
40
+ flex-direction: column;
41
+ display: flex;
42
+ position: fixed;
43
+ top: 0;
44
+ left: 50%;
45
+ transform: translateX(-50%);
46
+ }
47
+
48
+ [s-skip-link-group] [s-skip-link] {
49
+ position: relative;
50
+ top: -200%;
51
+ left: 0;
52
+ transform: none;
53
+ }
54
+
55
+ [s-skip-link-group] [s-skip-link]:focus, [s-skip-link-group] [s-skip-link]:focus-visible {
56
+ top: 0;
57
+ }
58
+
59
+ [s-skip-link="secondary"] {
60
+ --_skip-bg: var(--s-neutral-800);
61
+ }
62
+
63
+ [s-skip-link="contrast"] {
64
+ --_skip-bg: var(--s-neutral-950);
65
+ --_skip-color: var(--s-neutral-50);
66
+ }
67
+
68
+ @media (prefers-reduced-motion: reduce) {
69
+ [s-skip-link] {
70
+ transition: none;
71
+ }
72
+ }
73
+
74
+ @media (prefers-color-scheme: dark) {
75
+ :where([s-skip-link]:not([s-skip-link="secondary"]):not([s-skip-link="contrast"])) {
76
+ --_skip-bg: var(--s-primary-500);
77
+ }
78
+
79
+ [s-skip-link]:focus, [s-skip-link]:focus-visible {
80
+ box-shadow: var(--_skip-shadow), 0 0 0 3px var(--s-neutral-900), 0 0 0 5px var(--_skip-bg);
81
+ }
82
+ }
83
+
84
+ :root[style*="color-scheme: dark"] :where([s-skip-link]:not([s-skip-link="secondary"]):not([s-skip-link="contrast"])), :root[style*="color-scheme:dark"] :where([s-skip-link]:not([s-skip-link="secondary"]):not([s-skip-link="contrast"])) {
85
+ --_skip-bg: var(--s-primary-500);
86
+ }
@@ -0,0 +1,123 @@
1
+ :where([s-surface]) {
2
+ --_surface-bg: var(--s-surface-base);
3
+ --_surface-padding: var(--s-space-4);
4
+ --_surface-radius: var(--s-radius-lg);
5
+ --_surface-depth: 0;
6
+ background-color: var(--_surface-bg);
7
+ padding: var(--_surface-padding);
8
+ border-radius: var(--_surface-radius);
9
+ color: var(--s-text-primary);
10
+ container: surface / inline-size;
11
+
12
+ @supports (color: oklch(from red l c h)) {
13
+ color: oklch(from var(--_surface-bg) clamp(.15, calc((.55 - l) * 1000 + .15), .95) 0 0);
14
+ }
15
+
16
+ @supports (color: contrast-color(red)) {
17
+ color: contrast-color(var(--_surface-bg));
18
+ }
19
+ }
20
+
21
+ [s-surface="flat"] {
22
+ --_surface-bg: var(--s-surface-base);
23
+ --_surface-depth: 0;
24
+ }
25
+
26
+ [s-surface="sunken"] {
27
+ --_surface-bg: var(--s-surface-sunken);
28
+ --_surface-depth: -1;
29
+ box-shadow: var(--s-shadow-inner);
30
+ }
31
+
32
+ [s-surface="raised"] {
33
+ --_surface-bg: var(--s-surface-raised);
34
+ --_surface-depth: 1;
35
+ box-shadow: var(--s-shadow-md);
36
+ }
37
+
38
+ [s-surface="floating"] {
39
+ --_surface-bg: var(--s-surface-raised);
40
+ --_surface-depth: 2;
41
+ box-shadow: var(--s-shadow-xl);
42
+ }
43
+
44
+ [s-surface][s-bordered] {
45
+ border: 1px solid var(--s-border-default);
46
+ }
47
+
48
+ [s-surface][s-interactive] {
49
+ cursor: pointer;
50
+ transition: transform var(--s-duration-150) var(--s-ease-out), box-shadow var(--s-duration-150) var(--s-ease-out);
51
+
52
+ &:hover {
53
+ box-shadow: var(--s-shadow-lg);
54
+ transform: translateY(-2px);
55
+ }
56
+
57
+ &:active {
58
+ box-shadow: var(--s-shadow-sm);
59
+ transform: translateY(0);
60
+ }
61
+
62
+ &:focus-visible {
63
+ outline: 2px solid var(--s-focus-ring);
64
+ outline-offset: 2px;
65
+ }
66
+ }
67
+
68
+ [s-surface="primary"] {
69
+ --_surface-bg: var(--s-primary-700);
70
+ background-color: #06a;
71
+ background-color: var(--_surface-bg);
72
+ color: #fff;
73
+ }
74
+
75
+ [s-surface="secondary"] {
76
+ --_surface-bg: var(--s-secondary-700);
77
+ background-color: #64a;
78
+ background-color: var(--_surface-bg);
79
+ color: #fff;
80
+ }
81
+
82
+ [s-surface="accent"] {
83
+ --_surface-bg: var(--s-accent-700);
84
+ background-color: #a46;
85
+ background-color: var(--_surface-bg);
86
+ color: #fff;
87
+ }
88
+
89
+ [s-surface="success"] {
90
+ --_surface-bg: var(--s-state-success-bg);
91
+ background-color: #d4edda;
92
+ background-color: var(--_surface-bg);
93
+ border-left: 4px solid var(--s-state-success);
94
+ color: #1a1a1a;
95
+ }
96
+
97
+ [s-surface="warning"] {
98
+ --_surface-bg: var(--s-state-warning-bg);
99
+ background-color: #fff3cd;
100
+ background-color: var(--_surface-bg);
101
+ border-left: 4px solid var(--s-state-warning);
102
+ color: #1a1a1a;
103
+ }
104
+
105
+ [s-surface="danger"] {
106
+ --_surface-bg: var(--s-state-danger-bg);
107
+ background-color: #f8d7da;
108
+ background-color: var(--_surface-bg);
109
+ border-left: 4px solid var(--s-state-danger);
110
+ color: #1a1a1a;
111
+ }
112
+
113
+ @container (width <= 20rem) {
114
+ :where([s-surface]) {
115
+ --_surface-padding: var(--s-space-3);
116
+ }
117
+ }
118
+
119
+ @container (width >= 40rem) {
120
+ :where([s-surface]) {
121
+ --_surface-padding: var(--s-space-6);
122
+ }
123
+ }
@@ -0,0 +1,153 @@
1
+ :where([s-tooltip]) {
2
+ --_tooltip-bg: var(--s-surface-overlay);
3
+ --_tooltip-text: var(--s-text-inverse);
4
+ --_tooltip-radius: var(--s-radius-md);
5
+ --_tooltip-padding-x: var(--s-space-3);
6
+ --_tooltip-padding-y: var(--s-space-1_5);
7
+ --_tooltip-offset: var(--s-space-2);
8
+ --_tooltip-max-width: 200px;
9
+ --_tooltip-arrow-size: 6px;
10
+ position: relative;
11
+ }
12
+
13
+ :where([s-tooltip]):after {
14
+ content: attr(s-tooltip);
15
+ visibility: hidden;
16
+ opacity: 0;
17
+ z-index: 9999;
18
+ margin-bottom: var(--_tooltip-offset);
19
+ background-color: var(--_tooltip-bg);
20
+ color: var(--_tooltip-text);
21
+ padding: var(--_tooltip-padding-y) var(--_tooltip-padding-x);
22
+ border-radius: var(--_tooltip-radius);
23
+ box-shadow: var(--s-shadow-md);
24
+ position: absolute;
25
+ bottom: 100%;
26
+ left: 50%;
27
+ transform: translateX(-50%)translateY(4px);
28
+
29
+ @supports (color: oklch(from red l c h)) {
30
+ border: 1px solid oklch(from var(--_tooltip-bg) max(calc(l - .1), .05) c h);
31
+ }
32
+
33
+ font-size: var(--s-text-xs);
34
+ font-weight: var(--s-font-medium);
35
+ line-height: var(--s-leading-tight);
36
+ text-align: center;
37
+ text-wrap: balance;
38
+ min-width: min(100%, var(--_tooltip-max-width));
39
+ max-width: var(--_tooltip-max-width);
40
+ pointer-events: none;
41
+ transition: opacity var(--s-duration-150) var(--s-ease-out), visibility var(--s-duration-150) var(--s-ease-out), transform var(--s-duration-150) var(--s-ease-out);
42
+ }
43
+
44
+ :where([s-tooltip]):before {
45
+ content: "";
46
+ visibility: hidden;
47
+ opacity: 0;
48
+ z-index: 9999;
49
+ margin-bottom: calc(var(--_tooltip-offset) - var(--_tooltip-arrow-size));
50
+ border-left: var(--_tooltip-arrow-size) solid transparent;
51
+ border-right: var(--_tooltip-arrow-size) solid transparent;
52
+ border-top: var(--_tooltip-arrow-size) solid var(--_tooltip-bg);
53
+ pointer-events: none;
54
+ transition: opacity var(--s-duration-150) var(--s-ease-out), visibility var(--s-duration-150) var(--s-ease-out), transform var(--s-duration-150) var(--s-ease-out);
55
+ position: absolute;
56
+ bottom: 100%;
57
+ left: 50%;
58
+ transform: translateX(-50%)translateY(4px);
59
+ }
60
+
61
+ [s-tooltip]:hover:after, [s-tooltip]:hover:before, [s-tooltip]:focus-visible:after, [s-tooltip]:focus-visible:before {
62
+ visibility: visible;
63
+ opacity: 1;
64
+ transform: translateX(-50%)translateY(0);
65
+ }
66
+
67
+ [s-tooltip-pos="bottom"]:after {
68
+ margin-bottom: 0;
69
+ margin-top: var(--_tooltip-offset);
70
+ top: 100%;
71
+ bottom: auto;
72
+ transform: translateX(-50%)translateY(-4px);
73
+ }
74
+
75
+ [s-tooltip-pos="bottom"]:before {
76
+ margin-bottom: 0;
77
+ margin-top: calc(var(--_tooltip-offset) - var(--_tooltip-arrow-size));
78
+ border-top: none;
79
+ border-bottom: var(--_tooltip-arrow-size) solid var(--_tooltip-bg);
80
+ top: 100%;
81
+ bottom: auto;
82
+ transform: translateX(-50%)translateY(-4px);
83
+ }
84
+
85
+ [s-tooltip-pos="bottom"]:hover:after, [s-tooltip-pos="bottom"]:hover:before, [s-tooltip-pos="bottom"]:focus-visible:after, [s-tooltip-pos="bottom"]:focus-visible:before {
86
+ transform: translateX(-50%)translateY(0);
87
+ }
88
+
89
+ [s-tooltip-pos="left"]:after {
90
+ margin-bottom: 0;
91
+ margin-right: var(--_tooltip-offset);
92
+ inset: 50% 100% auto auto;
93
+ transform: translateY(-50%)translateX(4px);
94
+ }
95
+
96
+ [s-tooltip-pos="left"]:before {
97
+ margin-bottom: 0;
98
+ margin-right: calc(var(--_tooltip-offset) - var(--_tooltip-arrow-size));
99
+ border-top: var(--_tooltip-arrow-size) solid transparent;
100
+ border-bottom: var(--_tooltip-arrow-size) solid transparent;
101
+ border-left: var(--_tooltip-arrow-size) solid var(--_tooltip-bg);
102
+ border-right: none;
103
+ inset: 50% 100% auto auto;
104
+ transform: translateY(-50%)translateX(4px);
105
+ }
106
+
107
+ [s-tooltip-pos="left"]:hover:after, [s-tooltip-pos="left"]:hover:before, [s-tooltip-pos="left"]:focus-visible:after, [s-tooltip-pos="left"]:focus-visible:before {
108
+ transform: translateY(-50%)translateX(0);
109
+ }
110
+
111
+ [s-tooltip-pos="right"]:after {
112
+ margin-bottom: 0;
113
+ margin-left: var(--_tooltip-offset);
114
+ top: 50%;
115
+ bottom: auto;
116
+ left: 100%;
117
+ transform: translateY(-50%)translateX(-4px);
118
+ }
119
+
120
+ [s-tooltip-pos="right"]:before {
121
+ margin-bottom: 0;
122
+ margin-left: calc(var(--_tooltip-offset) - var(--_tooltip-arrow-size));
123
+ border-top: var(--_tooltip-arrow-size) solid transparent;
124
+ border-bottom: var(--_tooltip-arrow-size) solid transparent;
125
+ border-right: var(--_tooltip-arrow-size) solid var(--_tooltip-bg);
126
+ border-left: none;
127
+ top: 50%;
128
+ bottom: auto;
129
+ left: 100%;
130
+ transform: translateY(-50%)translateX(-4px);
131
+ }
132
+
133
+ [s-tooltip-pos="right"]:hover:after, [s-tooltip-pos="right"]:hover:before, [s-tooltip-pos="right"]:focus-visible:after, [s-tooltip-pos="right"]:focus-visible:before {
134
+ transform: translateY(-50%)translateX(0);
135
+ }
136
+
137
+ @media (prefers-reduced-motion: reduce) {
138
+ [s-tooltip]:after, [s-tooltip]:before {
139
+ transition: none;
140
+ }
141
+ }
142
+
143
+ @media (forced-colors: active) {
144
+ [s-tooltip]:after {
145
+ color: canvastext;
146
+ background-color: canvas;
147
+ border: 1px solid canvastext;
148
+ }
149
+
150
+ [s-tooltip]:before {
151
+ display: none;
152
+ }
153
+ }