@kwtv/tokens 0.1.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,71 @@
1
+ // Generated by scripts/build-tokens.py. Do not edit by hand.
2
+
3
+ $color-sage-xlight: #DCF1E8;
4
+ $color-sage-light: #B1C9BF;
5
+ $color-sage-base: #7D938A;
6
+ $color-sage-text: #496158;
7
+ $color-sage-dark: #364A42;
8
+ $color-sage-xdark: #162620;
9
+
10
+ $color-ivory-xlight: #FAF7F0;
11
+ $color-ivory-light: #F1EBDC;
12
+ $color-ivory-base: #E9E2D2;
13
+ $color-ivory-dark: #C9C2B1;
14
+
15
+ $color-charcoal-light: #5A6164;
16
+ $color-charcoal-base: #2F3437;
17
+ $color-charcoal-dark: #252A2C;
18
+ $color-charcoal-xdark: #171B1D;
19
+
20
+ $color-burgundy-xlight: #F6E2E4;
21
+ $color-burgundy-light: #D9A3A9;
22
+ $color-burgundy-rose: #E97A8C;
23
+ $color-burgundy-base: #7A2338;
24
+ $color-burgundy-text: #5C1A29;
25
+ $color-burgundy-dark: #47131F;
26
+ $color-burgundy-xdark: #2E0F18;
27
+
28
+ $color-amber-xlight: #FBEBD2;
29
+ $color-amber-light: #E8B978;
30
+ $color-amber-base: #8A5A16;
31
+ $color-amber-dark: #5E3D0F;
32
+
33
+ $color-white-base: #FFFFFF;
34
+
35
+ $space-0: 0;
36
+ $space-px: 1px;
37
+ $space-0-5: 0.125rem;
38
+ $space-1: 0.25rem;
39
+ $space-1-5: 0.375rem;
40
+ $space-2: 0.5rem;
41
+ $space-2-5: 0.625rem;
42
+ $space-3: 0.75rem;
43
+ $space-4: 1rem;
44
+ $space-4-5: 1.125rem;
45
+ $space-5: 1.25rem;
46
+ $space-6: 1.5rem;
47
+ $space-7: 1.75rem;
48
+ $space-8: 2rem;
49
+ $space-10: 2.5rem;
50
+ $space-12: 3rem;
51
+ $space-16: 4rem;
52
+ $space-20: 5rem;
53
+ $space-24: 6rem;
54
+ $space-32: 8rem;
55
+ $space-40: 10rem;
56
+ $space-48: 12rem;
57
+
58
+ $radius-none: 0;
59
+ $radius-sm: 0.1875rem;
60
+ $radius-md: 0.375rem;
61
+ $radius-lg: 0.625rem;
62
+ $radius-xl: 1rem;
63
+ $radius-2xl: 1.5rem;
64
+ $radius-full: 9999px;
65
+
66
+ $duration-instant: 0ms;
67
+ $duration-fast: 120ms;
68
+ $duration-base: 200ms;
69
+ $duration-slow: 320ms;
70
+ $duration-slower: 480ms;
71
+
@@ -0,0 +1,212 @@
1
+ // Generated by scripts/build-tokens.py. Do not edit by hand.
2
+
3
+ export const palette = {
4
+ "sage": {
5
+ xlight: "#DCF1E8",
6
+ light: "#B1C9BF",
7
+ base: "#7D938A",
8
+ text: "#496158",
9
+ dark: "#364A42",
10
+ xdark: "#162620",
11
+ },
12
+ "ivory": {
13
+ xlight: "#FAF7F0",
14
+ light: "#F1EBDC",
15
+ base: "#E9E2D2",
16
+ dark: "#C9C2B1",
17
+ },
18
+ "charcoal": {
19
+ light: "#5A6164",
20
+ base: "#2F3437",
21
+ dark: "#252A2C",
22
+ xdark: "#171B1D",
23
+ },
24
+ "burgundy": {
25
+ xlight: "#F6E2E4",
26
+ light: "#D9A3A9",
27
+ rose: "#E97A8C",
28
+ base: "#7A2338",
29
+ text: "#5C1A29",
30
+ dark: "#47131F",
31
+ xdark: "#2E0F18",
32
+ },
33
+ "amber": {
34
+ xlight: "#FBEBD2",
35
+ light: "#E8B978",
36
+ base: "#8A5A16",
37
+ dark: "#5E3D0F",
38
+ },
39
+ "white": {
40
+ base: "#FFFFFF",
41
+ },
42
+ } as const;
43
+
44
+ export const semanticLight = {
45
+ "bg": "#FAF7F0",
46
+ "surface": "#FAF7F0",
47
+ "surface-hover": "#F1EBDC",
48
+ "surface-accent": "#B1C9BF",
49
+ "surface-accent-fg": "#162620",
50
+ "surface-accent-muted": "#364A42",
51
+ "border": "#C9C2B1",
52
+ "border-strong": "#496158",
53
+ "focus": "#5A6164",
54
+ "focus-outer": "#F1EBDC",
55
+ "text": "#171B1D",
56
+ "text-muted": "#5A6164",
57
+ "text-inverse": "#F1EBDC",
58
+ "link": "#364A42",
59
+ "link-hover": "#162620",
60
+ "primary": "#364A42",
61
+ "primary-hover": "#162620",
62
+ "primary-fg": "#FFFFFF",
63
+ "accent": "#7A2338",
64
+ "accent-hover": "#5C1A29",
65
+ "accent-fg": "#FFFFFF",
66
+ "success": "#364A42",
67
+ "success-bg": "#DCF1E8",
68
+ "warning": "#8A5A16",
69
+ "warning-bg": "#FBEBD2",
70
+ "danger": "#7A2338",
71
+ "danger-bg": "#F6E2E4",
72
+ } as const;
73
+
74
+ export const semanticDark = {
75
+ "bg": "#171B1D",
76
+ "surface": "#162620",
77
+ "surface-hover": "#364A42",
78
+ "surface-accent": "#496158",
79
+ "surface-accent-fg": "#F1EBDC",
80
+ "surface-accent-muted": "#E9E2D2",
81
+ "border": "#364A42",
82
+ "border-strong": "#7D938A",
83
+ "focus": "#F1EBDC",
84
+ "focus-outer": "#171B1D",
85
+ "text": "#F1EBDC",
86
+ "text-muted": "#B1C9BF",
87
+ "text-inverse": "#171B1D",
88
+ "link": "#B1C9BF",
89
+ "link-hover": "#DCF1E8",
90
+ "primary": "#B1C9BF",
91
+ "primary-hover": "#DCF1E8",
92
+ "primary-fg": "#171B1D",
93
+ "accent": "#D9A3A9",
94
+ "accent-hover": "#F6E2E4",
95
+ "accent-fg": "#171B1D",
96
+ "success": "#B1C9BF",
97
+ "success-bg": "#364A42",
98
+ "warning": "#E8B978",
99
+ "warning-bg": "#5E3D0F",
100
+ "danger": "#E97A8C",
101
+ "danger-bg": "#5C1A29",
102
+ } as const;
103
+
104
+ export const space = {
105
+ "0": "0",
106
+ "px": "1px",
107
+ "0.5": "0.125rem",
108
+ "1": "0.25rem",
109
+ "1.5": "0.375rem",
110
+ "2": "0.5rem",
111
+ "2.5": "0.625rem",
112
+ "3": "0.75rem",
113
+ "4": "1rem",
114
+ "4.5": "1.125rem",
115
+ "5": "1.25rem",
116
+ "6": "1.5rem",
117
+ "7": "1.75rem",
118
+ "8": "2rem",
119
+ "10": "2.5rem",
120
+ "12": "3rem",
121
+ "16": "4rem",
122
+ "20": "5rem",
123
+ "24": "6rem",
124
+ "32": "8rem",
125
+ "40": "10rem",
126
+ "48": "12rem",
127
+ } as const;
128
+
129
+ export const radius = {
130
+ "none": "0",
131
+ "sm": "0.1875rem",
132
+ "md": "0.375rem",
133
+ "lg": "0.625rem",
134
+ "xl": "1rem",
135
+ "2xl": "1.5rem",
136
+ "full": "9999px",
137
+ } as const;
138
+
139
+ export const fontFamily = {
140
+ "sans": "\"Hanken Grotesk\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif",
141
+ "serif": "\"Source Serif 4 Variable\", \"Source Serif 4\", ui-serif, Georgia, serif",
142
+ "mono": "\"JetBrains Mono Variable\", \"JetBrains Mono\", ui-monospace, \"SF Mono\", Menlo, monospace",
143
+ } as const;
144
+
145
+ export const fontWeight = {
146
+ "regular": "400",
147
+ "medium": "500",
148
+ "semibold": "600",
149
+ "bold": "700",
150
+ } as const;
151
+
152
+ export const tracking = {
153
+ "tighter": "-0.03em",
154
+ "tight": "-0.015em",
155
+ "normal": "0",
156
+ "wide": "0.02em",
157
+ "wider": "0.06em",
158
+ "widest": "0.14em",
159
+ } as const;
160
+
161
+ export const duration = {
162
+ "instant": "0ms",
163
+ "fast": "120ms",
164
+ "base": "200ms",
165
+ "slow": "320ms",
166
+ "slower": "480ms",
167
+ } as const;
168
+
169
+ export const easing = {
170
+ "standard": "cubic-bezier(.2,0,0,1)",
171
+ "enter": "cubic-bezier(0,0,0,1)",
172
+ "exit": "cubic-bezier(.3,0,1,1)",
173
+ "spring": "cubic-bezier(.2,1.3,.4,1)",
174
+ } as const;
175
+
176
+ export const breakpoint = {
177
+ "sm": "640px",
178
+ "md": "768px",
179
+ "lg": "1024px",
180
+ "xl": "1280px",
181
+ "2xl": "1536px",
182
+ } as const;
183
+
184
+ export const zIndex = {
185
+ "base": "0",
186
+ "dropdown": "1000",
187
+ "sticky": "1100",
188
+ "overlay": "1200",
189
+ "modal": "1300",
190
+ "popover": "1400",
191
+ "toast": "1500",
192
+ "tooltip": "1600",
193
+ } as const;
194
+
195
+ export const fontSize = {
196
+ "3xs": { size: "0.625rem", lineHeight: "1rem" },
197
+ "2xs": { size: "0.6875rem", lineHeight: "1rem" },
198
+ "xs": { size: "0.75rem", lineHeight: "1.125rem" },
199
+ "sm": { size: "0.875rem", lineHeight: "1.375rem" },
200
+ "base": { size: "1rem", lineHeight: "1.625rem" },
201
+ "lg": { size: "1.125rem", lineHeight: "1.75rem" },
202
+ "xl": { size: "1.25rem", lineHeight: "1.875rem" },
203
+ "2xl": { size: "1.5rem", lineHeight: "2rem" },
204
+ "3xl": { size: "1.875rem", lineHeight: "2.25rem" },
205
+ "4xl": { size: "2.25rem", lineHeight: "2.5rem" },
206
+ "5xl": { size: "3rem", lineHeight: "1.08" },
207
+ "6xl": { size: "3.75rem", lineHeight: "1.05" },
208
+ "7xl": { size: "4.5rem", lineHeight: "1.02" },
209
+ } as const;
210
+
211
+ export type ColorFamily = keyof typeof palette;
212
+ export type SemanticRole = keyof typeof semanticLight;
@@ -0,0 +1,421 @@
1
+ /* Generated by scripts/build-tokens.py. Do not edit by hand. */
2
+
3
+ @layer utilities;
4
+
5
+ /*
6
+ * Utility classes. Two ways to use them.
7
+ *
8
+ * 1. CSS modules, composing from this file:
9
+ * .card { composes: bg-ivory-50 p-6 radius-lg from '@tokens/utilities.css'; }
10
+ *
11
+ * 2. As plain global classes in markup:
12
+ * <div class="bg-sage-light text-charcoal-xdark p-4">
13
+ *
14
+ * Prefer the semantic classes (bg-surface, text-body) over raw palette
15
+ * classes (bg-sage-light) wherever a role exists. Semantic classes follow
16
+ * the theme. Raw palette classes do not.
17
+ */
18
+
19
+ @layer utilities {
20
+ /* ---- Background, raw palette ---- */
21
+ .bg-sage-xlight { background-color: var(--sage-xlight); }
22
+ .bg-sage-light { background-color: var(--sage-light); }
23
+ .bg-sage-base { background-color: var(--sage-base); }
24
+ .bg-sage-text { background-color: var(--sage-text); }
25
+ .bg-sage-dark { background-color: var(--sage-dark); }
26
+ .bg-sage-xdark { background-color: var(--sage-xdark); }
27
+ .bg-ivory-xlight { background-color: var(--ivory-xlight); }
28
+ .bg-ivory-light { background-color: var(--ivory-light); }
29
+ .bg-ivory-base { background-color: var(--ivory-base); }
30
+ .bg-ivory-dark { background-color: var(--ivory-dark); }
31
+ .bg-charcoal-light { background-color: var(--charcoal-light); }
32
+ .bg-charcoal-base { background-color: var(--charcoal-base); }
33
+ .bg-charcoal-dark { background-color: var(--charcoal-dark); }
34
+ .bg-charcoal-xdark { background-color: var(--charcoal-xdark); }
35
+ .bg-burgundy-xlight { background-color: var(--burgundy-xlight); }
36
+ .bg-burgundy-light { background-color: var(--burgundy-light); }
37
+ .bg-burgundy-rose { background-color: var(--burgundy-rose); }
38
+ .bg-burgundy-base { background-color: var(--burgundy-base); }
39
+ .bg-burgundy-text { background-color: var(--burgundy-text); }
40
+ .bg-burgundy-dark { background-color: var(--burgundy-dark); }
41
+ .bg-burgundy-xdark { background-color: var(--burgundy-xdark); }
42
+ .bg-amber-xlight { background-color: var(--amber-xlight); }
43
+ .bg-amber-light { background-color: var(--amber-light); }
44
+ .bg-amber-base { background-color: var(--amber-base); }
45
+ .bg-amber-dark { background-color: var(--amber-dark); }
46
+ .bg-white-base { background-color: var(--white-base); }
47
+
48
+ /* ---- Text colour, raw palette ---- */
49
+ .text-sage-xlight { color: var(--sage-xlight); }
50
+ .text-sage-light { color: var(--sage-light); }
51
+ .text-sage-base { color: var(--sage-base); }
52
+ .text-sage-text { color: var(--sage-text); }
53
+ .text-sage-dark { color: var(--sage-dark); }
54
+ .text-sage-xdark { color: var(--sage-xdark); }
55
+ .text-ivory-xlight { color: var(--ivory-xlight); }
56
+ .text-ivory-light { color: var(--ivory-light); }
57
+ .text-ivory-base { color: var(--ivory-base); }
58
+ .text-ivory-dark { color: var(--ivory-dark); }
59
+ .text-charcoal-light { color: var(--charcoal-light); }
60
+ .text-charcoal-base { color: var(--charcoal-base); }
61
+ .text-charcoal-dark { color: var(--charcoal-dark); }
62
+ .text-charcoal-xdark { color: var(--charcoal-xdark); }
63
+ .text-burgundy-xlight { color: var(--burgundy-xlight); }
64
+ .text-burgundy-light { color: var(--burgundy-light); }
65
+ .text-burgundy-rose { color: var(--burgundy-rose); }
66
+ .text-burgundy-base { color: var(--burgundy-base); }
67
+ .text-burgundy-text { color: var(--burgundy-text); }
68
+ .text-burgundy-dark { color: var(--burgundy-dark); }
69
+ .text-burgundy-xdark { color: var(--burgundy-xdark); }
70
+ .text-amber-xlight { color: var(--amber-xlight); }
71
+ .text-amber-light { color: var(--amber-light); }
72
+ .text-amber-base { color: var(--amber-base); }
73
+ .text-amber-dark { color: var(--amber-dark); }
74
+ .text-white-base { color: var(--white-base); }
75
+
76
+ /* ---- Border colour, raw palette ---- */
77
+ .border-sage-xlight { border-color: var(--sage-xlight); }
78
+ .border-sage-light { border-color: var(--sage-light); }
79
+ .border-sage-base { border-color: var(--sage-base); }
80
+ .border-sage-text { border-color: var(--sage-text); }
81
+ .border-sage-dark { border-color: var(--sage-dark); }
82
+ .border-sage-xdark { border-color: var(--sage-xdark); }
83
+ .border-ivory-xlight { border-color: var(--ivory-xlight); }
84
+ .border-ivory-light { border-color: var(--ivory-light); }
85
+ .border-ivory-base { border-color: var(--ivory-base); }
86
+ .border-ivory-dark { border-color: var(--ivory-dark); }
87
+ .border-charcoal-light { border-color: var(--charcoal-light); }
88
+ .border-charcoal-base { border-color: var(--charcoal-base); }
89
+ .border-charcoal-dark { border-color: var(--charcoal-dark); }
90
+ .border-charcoal-xdark { border-color: var(--charcoal-xdark); }
91
+ .border-burgundy-xlight { border-color: var(--burgundy-xlight); }
92
+ .border-burgundy-light { border-color: var(--burgundy-light); }
93
+ .border-burgundy-rose { border-color: var(--burgundy-rose); }
94
+ .border-burgundy-base { border-color: var(--burgundy-base); }
95
+ .border-burgundy-text { border-color: var(--burgundy-text); }
96
+ .border-burgundy-dark { border-color: var(--burgundy-dark); }
97
+ .border-burgundy-xdark { border-color: var(--burgundy-xdark); }
98
+ .border-amber-xlight { border-color: var(--amber-xlight); }
99
+ .border-amber-light { border-color: var(--amber-light); }
100
+ .border-amber-base { border-color: var(--amber-base); }
101
+ .border-amber-dark { border-color: var(--amber-dark); }
102
+ .border-white-base { border-color: var(--white-base); }
103
+
104
+ /* ---- Semantic. Theme aware. Prefer these. ---- */
105
+ .bg-bg { background-color: var(--bg); }
106
+ .bg-surface { background-color: var(--surface); }
107
+ .bg-surface-hover { background-color: var(--surface-hover); }
108
+ .bg-surface-accent { background-color: var(--surface-accent); }
109
+ .bg-surface-accent-fg { background-color: var(--surface-accent-fg); }
110
+ .bg-surface-accent-muted { background-color: var(--surface-accent-muted); }
111
+ .bg-border { background-color: var(--border); }
112
+ .bg-border-strong { background-color: var(--border-strong); }
113
+ .bg-focus { background-color: var(--focus); }
114
+ .bg-focus-outer { background-color: var(--focus-outer); }
115
+ .bg-text { background-color: var(--text); }
116
+ .bg-text-muted { background-color: var(--text-muted); }
117
+ .bg-text-inverse { background-color: var(--text-inverse); }
118
+ .bg-link { background-color: var(--link); }
119
+ .bg-link-hover { background-color: var(--link-hover); }
120
+ .bg-primary { background-color: var(--primary); }
121
+ .bg-primary-hover { background-color: var(--primary-hover); }
122
+ .bg-primary-fg { background-color: var(--primary-fg); }
123
+ .bg-accent { background-color: var(--accent); }
124
+ .bg-accent-hover { background-color: var(--accent-hover); }
125
+ .bg-accent-fg { background-color: var(--accent-fg); }
126
+ .bg-success { background-color: var(--success); }
127
+ .bg-success-bg { background-color: var(--success-bg); }
128
+ .bg-warning { background-color: var(--warning); }
129
+ .bg-warning-bg { background-color: var(--warning-bg); }
130
+ .bg-danger { background-color: var(--danger); }
131
+ .bg-danger-bg { background-color: var(--danger-bg); }
132
+ .text-bg { color: var(--bg); }
133
+ .text-surface { color: var(--surface); }
134
+ .text-surface-hover { color: var(--surface-hover); }
135
+ .text-surface-accent { color: var(--surface-accent); }
136
+ .text-surface-accent-fg { color: var(--surface-accent-fg); }
137
+ .text-surface-accent-muted { color: var(--surface-accent-muted); }
138
+ .text-border { color: var(--border); }
139
+ .text-border-strong { color: var(--border-strong); }
140
+ .text-focus { color: var(--focus); }
141
+ .text-focus-outer { color: var(--focus-outer); }
142
+ .text-text { color: var(--text); }
143
+ .text-text-muted { color: var(--text-muted); }
144
+ .text-text-inverse { color: var(--text-inverse); }
145
+ .text-link { color: var(--link); }
146
+ .text-link-hover { color: var(--link-hover); }
147
+ .text-primary { color: var(--primary); }
148
+ .text-primary-hover { color: var(--primary-hover); }
149
+ .text-primary-fg { color: var(--primary-fg); }
150
+ .text-accent { color: var(--accent); }
151
+ .text-accent-hover { color: var(--accent-hover); }
152
+ .text-accent-fg { color: var(--accent-fg); }
153
+ .text-success { color: var(--success); }
154
+ .text-success-bg { color: var(--success-bg); }
155
+ .text-warning { color: var(--warning); }
156
+ .text-warning-bg { color: var(--warning-bg); }
157
+ .text-danger { color: var(--danger); }
158
+ .text-danger-bg { color: var(--danger-bg); }
159
+ .border-bg { border-color: var(--bg); }
160
+ .border-surface { border-color: var(--surface); }
161
+ .border-surface-hover { border-color: var(--surface-hover); }
162
+ .border-surface-accent { border-color: var(--surface-accent); }
163
+ .border-surface-accent-fg { border-color: var(--surface-accent-fg); }
164
+ .border-surface-accent-muted { border-color: var(--surface-accent-muted); }
165
+ .border-border { border-color: var(--border); }
166
+ .border-border-strong { border-color: var(--border-strong); }
167
+ .border-focus { border-color: var(--focus); }
168
+ .border-focus-outer { border-color: var(--focus-outer); }
169
+ .border-text { border-color: var(--text); }
170
+ .border-text-muted { border-color: var(--text-muted); }
171
+ .border-text-inverse { border-color: var(--text-inverse); }
172
+ .border-link { border-color: var(--link); }
173
+ .border-link-hover { border-color: var(--link-hover); }
174
+ .border-primary { border-color: var(--primary); }
175
+ .border-primary-hover { border-color: var(--primary-hover); }
176
+ .border-primary-fg { border-color: var(--primary-fg); }
177
+ .border-accent { border-color: var(--accent); }
178
+ .border-accent-hover { border-color: var(--accent-hover); }
179
+ .border-accent-fg { border-color: var(--accent-fg); }
180
+ .border-success { border-color: var(--success); }
181
+ .border-success-bg { border-color: var(--success-bg); }
182
+ .border-warning { border-color: var(--warning); }
183
+ .border-warning-bg { border-color: var(--warning-bg); }
184
+ .border-danger { border-color: var(--danger); }
185
+ .border-danger-bg { border-color: var(--danger-bg); }
186
+
187
+ /* ---- Spacing ---- */
188
+ .p-0 { padding: var(--space-0); }
189
+ .px-0 { padding-inline: var(--space-0); }
190
+ .py-0 { padding-block: var(--space-0); }
191
+ .m-0 { margin: var(--space-0); }
192
+ .mx-0 { margin-inline: var(--space-0); }
193
+ .my-0 { margin-block: var(--space-0); }
194
+ .gap-0 { gap: var(--space-0); }
195
+ .p-px { padding: var(--space-px); }
196
+ .px-px { padding-inline: var(--space-px); }
197
+ .py-px { padding-block: var(--space-px); }
198
+ .m-px { margin: var(--space-px); }
199
+ .mx-px { margin-inline: var(--space-px); }
200
+ .my-px { margin-block: var(--space-px); }
201
+ .gap-px { gap: var(--space-px); }
202
+ .p-0-5 { padding: var(--space-0-5); }
203
+ .px-0-5 { padding-inline: var(--space-0-5); }
204
+ .py-0-5 { padding-block: var(--space-0-5); }
205
+ .m-0-5 { margin: var(--space-0-5); }
206
+ .mx-0-5 { margin-inline: var(--space-0-5); }
207
+ .my-0-5 { margin-block: var(--space-0-5); }
208
+ .gap-0-5 { gap: var(--space-0-5); }
209
+ .p-1 { padding: var(--space-1); }
210
+ .px-1 { padding-inline: var(--space-1); }
211
+ .py-1 { padding-block: var(--space-1); }
212
+ .m-1 { margin: var(--space-1); }
213
+ .mx-1 { margin-inline: var(--space-1); }
214
+ .my-1 { margin-block: var(--space-1); }
215
+ .gap-1 { gap: var(--space-1); }
216
+ .p-1-5 { padding: var(--space-1-5); }
217
+ .px-1-5 { padding-inline: var(--space-1-5); }
218
+ .py-1-5 { padding-block: var(--space-1-5); }
219
+ .m-1-5 { margin: var(--space-1-5); }
220
+ .mx-1-5 { margin-inline: var(--space-1-5); }
221
+ .my-1-5 { margin-block: var(--space-1-5); }
222
+ .gap-1-5 { gap: var(--space-1-5); }
223
+ .p-2 { padding: var(--space-2); }
224
+ .px-2 { padding-inline: var(--space-2); }
225
+ .py-2 { padding-block: var(--space-2); }
226
+ .m-2 { margin: var(--space-2); }
227
+ .mx-2 { margin-inline: var(--space-2); }
228
+ .my-2 { margin-block: var(--space-2); }
229
+ .gap-2 { gap: var(--space-2); }
230
+ .p-2-5 { padding: var(--space-2-5); }
231
+ .px-2-5 { padding-inline: var(--space-2-5); }
232
+ .py-2-5 { padding-block: var(--space-2-5); }
233
+ .m-2-5 { margin: var(--space-2-5); }
234
+ .mx-2-5 { margin-inline: var(--space-2-5); }
235
+ .my-2-5 { margin-block: var(--space-2-5); }
236
+ .gap-2-5 { gap: var(--space-2-5); }
237
+ .p-3 { padding: var(--space-3); }
238
+ .px-3 { padding-inline: var(--space-3); }
239
+ .py-3 { padding-block: var(--space-3); }
240
+ .m-3 { margin: var(--space-3); }
241
+ .mx-3 { margin-inline: var(--space-3); }
242
+ .my-3 { margin-block: var(--space-3); }
243
+ .gap-3 { gap: var(--space-3); }
244
+ .p-4 { padding: var(--space-4); }
245
+ .px-4 { padding-inline: var(--space-4); }
246
+ .py-4 { padding-block: var(--space-4); }
247
+ .m-4 { margin: var(--space-4); }
248
+ .mx-4 { margin-inline: var(--space-4); }
249
+ .my-4 { margin-block: var(--space-4); }
250
+ .gap-4 { gap: var(--space-4); }
251
+ .p-4-5 { padding: var(--space-4-5); }
252
+ .px-4-5 { padding-inline: var(--space-4-5); }
253
+ .py-4-5 { padding-block: var(--space-4-5); }
254
+ .m-4-5 { margin: var(--space-4-5); }
255
+ .mx-4-5 { margin-inline: var(--space-4-5); }
256
+ .my-4-5 { margin-block: var(--space-4-5); }
257
+ .gap-4-5 { gap: var(--space-4-5); }
258
+ .p-5 { padding: var(--space-5); }
259
+ .px-5 { padding-inline: var(--space-5); }
260
+ .py-5 { padding-block: var(--space-5); }
261
+ .m-5 { margin: var(--space-5); }
262
+ .mx-5 { margin-inline: var(--space-5); }
263
+ .my-5 { margin-block: var(--space-5); }
264
+ .gap-5 { gap: var(--space-5); }
265
+ .p-6 { padding: var(--space-6); }
266
+ .px-6 { padding-inline: var(--space-6); }
267
+ .py-6 { padding-block: var(--space-6); }
268
+ .m-6 { margin: var(--space-6); }
269
+ .mx-6 { margin-inline: var(--space-6); }
270
+ .my-6 { margin-block: var(--space-6); }
271
+ .gap-6 { gap: var(--space-6); }
272
+ .p-7 { padding: var(--space-7); }
273
+ .px-7 { padding-inline: var(--space-7); }
274
+ .py-7 { padding-block: var(--space-7); }
275
+ .m-7 { margin: var(--space-7); }
276
+ .mx-7 { margin-inline: var(--space-7); }
277
+ .my-7 { margin-block: var(--space-7); }
278
+ .gap-7 { gap: var(--space-7); }
279
+ .p-8 { padding: var(--space-8); }
280
+ .px-8 { padding-inline: var(--space-8); }
281
+ .py-8 { padding-block: var(--space-8); }
282
+ .m-8 { margin: var(--space-8); }
283
+ .mx-8 { margin-inline: var(--space-8); }
284
+ .my-8 { margin-block: var(--space-8); }
285
+ .gap-8 { gap: var(--space-8); }
286
+ .p-10 { padding: var(--space-10); }
287
+ .px-10 { padding-inline: var(--space-10); }
288
+ .py-10 { padding-block: var(--space-10); }
289
+ .m-10 { margin: var(--space-10); }
290
+ .mx-10 { margin-inline: var(--space-10); }
291
+ .my-10 { margin-block: var(--space-10); }
292
+ .gap-10 { gap: var(--space-10); }
293
+ .p-12 { padding: var(--space-12); }
294
+ .px-12 { padding-inline: var(--space-12); }
295
+ .py-12 { padding-block: var(--space-12); }
296
+ .m-12 { margin: var(--space-12); }
297
+ .mx-12 { margin-inline: var(--space-12); }
298
+ .my-12 { margin-block: var(--space-12); }
299
+ .gap-12 { gap: var(--space-12); }
300
+ .p-16 { padding: var(--space-16); }
301
+ .px-16 { padding-inline: var(--space-16); }
302
+ .py-16 { padding-block: var(--space-16); }
303
+ .m-16 { margin: var(--space-16); }
304
+ .mx-16 { margin-inline: var(--space-16); }
305
+ .my-16 { margin-block: var(--space-16); }
306
+ .gap-16 { gap: var(--space-16); }
307
+ .p-20 { padding: var(--space-20); }
308
+ .px-20 { padding-inline: var(--space-20); }
309
+ .py-20 { padding-block: var(--space-20); }
310
+ .m-20 { margin: var(--space-20); }
311
+ .mx-20 { margin-inline: var(--space-20); }
312
+ .my-20 { margin-block: var(--space-20); }
313
+ .gap-20 { gap: var(--space-20); }
314
+ .p-24 { padding: var(--space-24); }
315
+ .px-24 { padding-inline: var(--space-24); }
316
+ .py-24 { padding-block: var(--space-24); }
317
+ .m-24 { margin: var(--space-24); }
318
+ .mx-24 { margin-inline: var(--space-24); }
319
+ .my-24 { margin-block: var(--space-24); }
320
+ .gap-24 { gap: var(--space-24); }
321
+ .p-32 { padding: var(--space-32); }
322
+ .px-32 { padding-inline: var(--space-32); }
323
+ .py-32 { padding-block: var(--space-32); }
324
+ .m-32 { margin: var(--space-32); }
325
+ .mx-32 { margin-inline: var(--space-32); }
326
+ .my-32 { margin-block: var(--space-32); }
327
+ .gap-32 { gap: var(--space-32); }
328
+ .p-40 { padding: var(--space-40); }
329
+ .px-40 { padding-inline: var(--space-40); }
330
+ .py-40 { padding-block: var(--space-40); }
331
+ .m-40 { margin: var(--space-40); }
332
+ .mx-40 { margin-inline: var(--space-40); }
333
+ .my-40 { margin-block: var(--space-40); }
334
+ .gap-40 { gap: var(--space-40); }
335
+ .p-48 { padding: var(--space-48); }
336
+ .px-48 { padding-inline: var(--space-48); }
337
+ .py-48 { padding-block: var(--space-48); }
338
+ .m-48 { margin: var(--space-48); }
339
+ .mx-48 { margin-inline: var(--space-48); }
340
+ .my-48 { margin-block: var(--space-48); }
341
+ .gap-48 { gap: var(--space-48); }
342
+
343
+ /* ---- Type ---- */
344
+ .text-3xs { font-size: var(--text-3xs); line-height: var(--leading-3xs); }
345
+ .text-2xs { font-size: var(--text-2xs); line-height: var(--leading-2xs); }
346
+ .text-xs { font-size: var(--text-xs); line-height: var(--leading-xs); }
347
+ .text-sm { font-size: var(--text-sm); line-height: var(--leading-sm); }
348
+ .text-base { font-size: var(--text-base); line-height: var(--leading-base); }
349
+ .text-lg { font-size: var(--text-lg); line-height: var(--leading-lg); }
350
+ .text-xl { font-size: var(--text-xl); line-height: var(--leading-xl); }
351
+ .text-2xl { font-size: var(--text-2xl); line-height: var(--leading-2xl); }
352
+ .text-3xl { font-size: var(--text-3xl); line-height: var(--leading-3xl); }
353
+ .text-4xl { font-size: var(--text-4xl); line-height: var(--leading-4xl); }
354
+ .text-5xl { font-size: var(--text-5xl); line-height: var(--leading-5xl); }
355
+ .text-6xl { font-size: var(--text-6xl); line-height: var(--leading-6xl); }
356
+ .text-7xl { font-size: var(--text-7xl); line-height: var(--leading-7xl); }
357
+ .weight-regular { font-weight: var(--weight-regular); }
358
+ .weight-medium { font-weight: var(--weight-medium); }
359
+ .weight-semibold { font-weight: var(--weight-semibold); }
360
+ .weight-bold { font-weight: var(--weight-bold); }
361
+ .font-sans { font-family: var(--font-sans); }
362
+ .font-serif { font-family: var(--font-serif); }
363
+ .font-mono { font-family: var(--font-mono); }
364
+ .tracking-tighter { letter-spacing: var(--tracking-tighter); }
365
+ .tracking-tight { letter-spacing: var(--tracking-tight); }
366
+ .tracking-normal { letter-spacing: var(--tracking-normal); }
367
+ .tracking-wide { letter-spacing: var(--tracking-wide); }
368
+ .tracking-wider { letter-spacing: var(--tracking-wider); }
369
+ .tracking-widest { letter-spacing: var(--tracking-widest); }
370
+
371
+ /* ---- Radius and shadow ---- */
372
+ .radius-none { border-radius: var(--radius-none); }
373
+ .radius-sm { border-radius: var(--radius-sm); }
374
+ .radius-md { border-radius: var(--radius-md); }
375
+ .radius-lg { border-radius: var(--radius-lg); }
376
+ .radius-xl { border-radius: var(--radius-xl); }
377
+ .radius-2xl { border-radius: var(--radius-2xl); }
378
+ .radius-full { border-radius: var(--radius-full); }
379
+ .shadow-xs { box-shadow: var(--shadow-xs); }
380
+ .shadow-sm { box-shadow: var(--shadow-sm); }
381
+ .shadow-md { box-shadow: var(--shadow-md); }
382
+ .shadow-lg { box-shadow: var(--shadow-lg); }
383
+ .shadow-xl { box-shadow: var(--shadow-xl); }
384
+
385
+ /* ---- Accessibility helpers ---- */
386
+ .visually-hidden {
387
+ position: absolute;
388
+ width: 1px; height: 1px;
389
+ padding: 0; margin: -1px;
390
+ overflow: hidden;
391
+ clip-path: inset(50%);
392
+ white-space: nowrap;
393
+ border: 0;
394
+ }
395
+
396
+ /* Visible on keyboard focus. For skip links. */
397
+ .visually-hidden-focusable:not(:focus):not(:focus-within) {
398
+ position: absolute;
399
+ width: 1px; height: 1px;
400
+ padding: 0; margin: -1px;
401
+ overflow: hidden;
402
+ clip-path: inset(50%);
403
+ white-space: nowrap;
404
+ border: 0;
405
+ }
406
+
407
+ /* Every interactive element needs a visible focus ring. SC 2.4.7 and 2.4.11.
408
+ Two tone on purpose: the outer halo keeps the ring visible on mid-tone
409
+ buttons, where a single colour would disappear. */
410
+ .focus-ring:focus-visible {
411
+ outline: 2px solid var(--focus);
412
+ outline-offset: 2px;
413
+ box-shadow: 0 0 0 4px var(--focus-outer);
414
+ }
415
+
416
+ /* Minimum target size, SC 2.5.8. */
417
+ .target {
418
+ min-width: 24px;
419
+ min-height: 24px;
420
+ }
421
+ }