clairity.css 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,33 +2,117 @@
2
2
  PALETTE - this is where we define the overall color palette. This file can be
3
3
  entirely replaced to customize the color palette of a site. In doing
4
4
  so, be mindful of defining at least the base hues and the primary,
5
- complementary, and perhaps the secondary colors.
6
-
5
+ complementary, and perhaps the secondary colors.
6
+
7
+ We set variables on :root so other doc types like svg can inherit
8
+ these variables. We'll use HSL by default, and override HSL values
9
+ with okLCH values for browsers that support the newer color space,
10
+ via an @supports query. For why we prefer okLCH where available:
11
+ https://evilmartians.com/chronicles/oklch-in-css-why-quit-rgb-hsl
12
+
13
+ First we define scales for each color component: hue, lightness, and
14
+ alpha in common, saturation just for HSL, and chroma just for okLCH.
15
+ 15 semantically-named core hues define our color palette, though not
16
+ all need be used. We deliberately name our hue variables with color
17
+ names to preclude their use in the utility style as opposed to the
18
+ semantic style we prefer.
19
+
20
+ HSL and okLCH hues differ, so we override the hues in the okLCH
21
+ section to visually match the HSL hues. You can also change or
22
+ override these hues to suit your own taste and needs.
23
+
24
+ We then map up to 9 of the palette hues (2 is recommended) to ranked
25
+ theme *hue* variables, --1st through --9th, which are in turn used
26
+ to create our theme *color* variables. --1st should map to the
27
+ primary theme *hue* (--blue by default) and will be used to
28
+ programmatically create complementary hues (e.g., --complement,
29
+ --triad, --tetrad). --2nd provides the secondary (accent) theme hue.
30
+
31
+ These hues are used to create 9 semantic color variables, --primary,
32
+ --secondary, etc. as well as 5 complementary color variables,
33
+ --complementary, --triadic, etc. Most sites will only use the
34
+ --primary color, with sparing use of --secondary and/or
35
+ --complementary, if at all. Only complex or extensive sites will
36
+ need more than these three core theme colors (beyond the included
37
+ grayscale and semantic messaging/state colors).
38
+
39
+ Finally, we create color scales for each core theme color. In the
40
+ future, we hope CSS Relative Color syntax will allow us to skip this
41
+ step of creating color scales, and just directly apply color
42
+ component scales on the base color as needed. As noted, we also
43
+ provide a neutral/gray scale and a few semantic color sets (--error,
44
+ --warning, --success, --info, --valid, --invalid, --unknown) too.
45
+
7
46
  \******************************************************************************/
8
47
 
9
- /* we use :root here so other doc types like svg can inherit these variables */
10
48
  :root {
11
- /* Palette Hues - define HSL (eventually okLCH) hues in the following broad
12
- categorical color names that will be used for primary, secondary, & accent
13
- colors. Not all need to be defined or used. okLCH versions of these hues
14
- are currently defined behind an @supports rule below. range: [0, 360] */
49
+
50
+ /* -----------------------------------------------------------------------------
51
+ // Color component scales - standardized variations of each color component
52
+ // -------------------------------------------------------------------------- */
53
+
54
+ /* Palette Hues (HSL) - brand-consistent hues - range: [0, 360]
55
+ // .......................................................................... */
15
56
  --red: 4; /* dark red / error color / secondary */
16
- --brown: 20;
17
- --orange: 30;
57
+ --brown: 20;
58
+ --orange: 30;
18
59
  --yellow: 55; /* warning color */
19
- --lime: 80;
60
+ --lime: 80;
20
61
  --green: 100; /* success color */
21
- --aqua: 160;
22
- --cyan: 175;
23
- --azure: 190;
62
+ --aqua: 160;
63
+ --cyan: 175;
64
+ --azure: 190;
24
65
  --blue: 210; /* slate blue / info color / primary */
25
- --indigo: 260;
26
- --purple: 270;
27
- --violet: 280;
28
- --magenta: 300;
29
- --pink: 330;
30
-
66
+ --indigo: 260;
67
+ --purple: 270;
68
+ --violet: 280;
69
+ --magenta: 300;
70
+ --pink: 330;
31
71
 
72
+
73
+ /* Saturation scale (HSL) - range: [0%, 100%]
74
+ // .......................................................................... */
75
+ --s0: 0%;
76
+ --s4: 40%; /* less saturated */
77
+ --s5: 55%; /* default saturation level */
78
+ --s6: 60%;
79
+ --s7: 70%; /* more saturated */
80
+ --s8: 80%;
81
+ --s9: 90%;
82
+ --s10: 100%; /* completely saturated */
83
+
84
+
85
+ /* Lightness scale */
86
+ --l1: 99.9%;
87
+ --l5: 99%;
88
+ --l10: 96%;
89
+ --l15: 92%; /* brighten */
90
+ --l20: 90%;
91
+ --l25: 85%;
92
+ --l30: 80%;
93
+ --l35: 75%;
94
+ --l40: 70%;
95
+ --l45: 67%; /* lighten */
96
+ --l50: 60%; /* default */
97
+ --l54: 53%;
98
+ --l55: 52%; /* darken */
99
+ --l60: 50%;
100
+ --l65: 45%;
101
+ --l70: 40%;
102
+ --l75: 35%;
103
+ --l80: 30%;
104
+ --l85: 25%;
105
+ --l90: 20%;
106
+ --l95: 10%;
107
+ --l99: 5%;
108
+
109
+
110
+ /* Transparency (alpha) scale - range: [0, 1] or [0%, 100%] */
111
+ --a0: 0.05; /* more transparent */
112
+ --a1: 0.1; /* default for nearly transparent bg's */
113
+ --a2: 0.2;
114
+
115
+
32
116
  /* Theme Hues - map the above hues to a palette order here, with primary being
33
117
  first, secondary being second, etc., to palettize your theme. You can pick
34
118
  hues as primary, secondary, etc. or use complementary colors based off the
@@ -42,173 +126,155 @@
42
126
  --7th: var(--purple);
43
127
  --8th: var(--magenta);
44
128
  --9th: var(--pink);
45
-
129
+
46
130
  /* programmatically specified colors based off primary - EXPERIMENTAL */
47
131
  --complement: calc(var(--1st) + 180); /* also a tetrad */
48
132
  --triad: calc(var(--1st) + 120);
49
133
  --cotriad: calc(var(--1st) + 240);
50
134
  --tetrad: calc(var(--1st) + 90);
51
135
  --cotetrad: calc(var(--1st) + 270);
52
-
53
- /* HSL saturations - range: [0%, 100%] */
54
- --s4: 40%; /* less saturated */
55
- --s5: 55%; /* default saturation level */
56
- --s7: 70%; /* more saturated */
57
- --s10: 100%; /* completely saturated */
58
-
59
- /* HSL lightnesses - range: [0%, 100%] */
60
- --l4: 40%; /* darker lightness */
61
- --l5: 45%; /* default lightness level */
62
- --l6: 50%; /* lighter lightness */
63
- --l7: 67%;
64
-
65
- /* Alpha transparency values - range: [0, 1] or [0%, 100%] */
66
- --a0: 0.05; /* more transparent */
67
- --a1: 0.1; /* default for nearly transparent bg's */
68
-
69
-
70
- /* Named flash/form message colors - highlights are more extreme & lowlights
71
- less extreme versions of the base color, relative to the color scheme */
72
- --error: hsl(var(--red) 100% 43%);
73
- --error-high: hsl(var(--red) 100% 80%);
74
- --error-low: hsl(var(--red) 60% 38%);
75
- --bg-error: hsl(var(--red) 60% 92%);
76
-
77
- --warning: hsl(var(--yellow) 100% 40%);
78
- --warning-high: hsl(var(--yellow) 100% 47%);
79
- --warning-low: hsl(var(--yellow) 60% 40%);
80
- --bg-warning: hsl(var(--yellow) 60% 92%);
81
-
82
- --success: hsl(var(--green) 100% 35%);
83
- --success-high: hsl(var(--green) 100% 45%);
84
- --success-low: hsl(var(--green) 60% 25%);
85
- --bg-success: hsl(var(--green) 60% 92%);
86
-
87
- --info: hsl(var(--blue) 100% 45%);
88
- --info-high: hsl(var(--blue) 100% 65%);
89
- --info-low: hsl(var(--blue) 60% 35%);
90
- --bg-info: hsl(var(--blue) 60% 92%);
91
-
92
- /* Named (icon) state colors - highlights are more extreme & lowlights
93
- less extreme versions of the base color, relative to the color scheme */
94
-
95
- --valid: hsl(var(--green) 70% 30%);
96
- --valid-high: hsl(var(--green) 80% 40%);
97
- --valid-low: hsl(var(--green) 70% 25%);
98
- --bg-valid: hsl(var(--green) 60% 92%);
99
-
100
- --invalid: hsl(var(--red) 80% 35%);
101
- --invalid-high: hsl(var(--red) 90% 42%);
102
- --invalid-low: hsl(var(--red) 70% 30%);
103
- --bg-invalid: hsl(var(--red) 60% 92%);
104
-
105
- --unknown: hsl(var(--yellow) 100% 40%);
106
- --unknown-high: hsl(var(--yellow) 100% 47%);
107
- --unknown-low: hsl(var(--yellow) 60% 40%);
108
- --bg-unknown: hsl(var(--yellow) 60% 92%);
109
-
110
-
111
- /* Neutrals / Grayscale - use the black/white keywords for pure black/white.
112
- we have two extra levels at each of the scale for greater flexibility in
113
- developing shadows and highlights */
114
- --10: hsl(0 0% 99%); /* effectively white */
115
- --50: hsl(0 0% 97%);
116
- --100: hsl(0 0% 95%);
117
- --200: hsl(0 0% 86%);
118
- --300: hsl(0 0% 77%);
119
- --400: hsl(0 0% 68%);
120
- --500: hsl(0 0% 59%);
121
- --neutral: hsl(0 0% 50%);
122
- --600: hsl(0 0% 41%);
123
- --700: hsl(0 0% 32%);
124
- --800: hsl(0 0% 23%);
125
- --900: hsl(0 0% 16%);
126
- --950: hsl(0 0% 10%);
127
- --990: hsl(0 0% 5%); /* effectively black */
128
-
129
- /* Primary colors */
130
- --primary: hsl(var(--1st) var(--s5) var(--l5));
131
- --secondary: hsl(var(--2nd) var(--s5) var(--l5));
132
- --tertiary: hsl(var(--3rd) var(--s5) var(--l5));
133
-
134
- /* Complementary colors */
135
- --complementary: hsl(var(--complement) var(--s5) var(--l5));
136
- --triadic: hsl(var(--triad) var(--s5) var(--l5));
137
- --cotriadic: hsl(var(--cotriad) var(--s5) var(--l5));
138
- --tetradic: hsl(var(--tetrad) var(--s5) var(--l5));
139
- --cotetradic: hsl(var(--cotetrad) var(--s5) var(--l5));
140
-
141
-
136
+
137
+ /* Primary colors (HSL) */
138
+ --primary: hsl(var(--1st) var(--s5) var(--l65));
139
+ --secondary: hsl(var(--2nd) var(--s5) var(--l65));
140
+ --tertiary: hsl(var(--3rd) var(--s5) var(--l65));
141
+ --quaternary: hsl(var(--4th) var(--s5) var(--l65));
142
+ --quinary: hsl(var(--5th) var(--s5) var(--l65));
143
+ --senary: hsl(var(--6th) var(--s5) var(--l65));
144
+ --septenary: hsl(var(--7th) var(--s5) var(--l65));
145
+ --octonary: hsl(var(--8th) var(--s5) var(--l65));
146
+ --nonary: hsl(var(--9th) var(--s5) var(--l65));
147
+
148
+ --complementary: hsl(var(--complement) var(--s5) var(--l65));
149
+ --triadic: hsl(var(--triad) var(--s5) var(--l65));
150
+ --cotriadic: hsl(var(--cotriad) var(--s5) var(--l65));
151
+ --tetradic: hsl(var(--tetrad) var(--s5) var(--l65));
152
+ --cotetradic: hsl(var(--cotetrad) var(--s5) var(--l65));
153
+
154
+
142
155
  /* Color scales */
143
156
  /* HSL is not perceptually uniform, so using the same S & L values won't
144
157
  provide natural cohesiveness to these generated colors as LCH would. */
145
- --primary-100: hsl(var(--1st) var(--s5) 96%);
146
- --primary-200: hsl(var(--1st) var(--s5) 90%);
147
- --primary-300: hsl(var(--1st) var(--s5) 80%);
148
- --primary-400: hsl(var(--1st) var(--s5) 70%);
149
- --primary-500: hsl(var(--1st) var(--s5) 60%);
150
- --primary-600: hsl(var(--1st) var(--s5) 50%);
151
- --primary-700: hsl(var(--1st) var(--s5) 40%);
152
- --primary-800: hsl(var(--1st) var(--s5) 30%);
153
- --primary-900: hsl(var(--1st) var(--s5) 20%);
154
- --primary-950: hsl(var(--1st) var(--s5) 10%);
155
- --primary-bright: hsl(var(--1st) var(--s7) var(--l4));
156
- --primary-transparent: hsl(var(--1st) var(--s5) var(--l5) / var(--a1));
157
-
158
+ --primary-100: hsl(var(--1st) var(--s5) var(--l10));
159
+ --primary-200: hsl(var(--1st) var(--s5) var(--l20));
160
+ --primary-300: hsl(var(--1st) var(--s5) var(--l30));
161
+ --primary-400: hsl(var(--1st) var(--s5) var(--l40));
162
+ --primary-500: hsl(var(--1st) var(--s5) var(--l50));
163
+ --primary-600: hsl(var(--1st) var(--s5) var(--l60));
164
+ --primary-700: hsl(var(--1st) var(--s5) var(--l70));
165
+ --primary-800: hsl(var(--1st) var(--s5) var(--l80));
166
+ --primary-900: hsl(var(--1st) var(--s5) var(--l90));
167
+ --primary-950: hsl(var(--1st) var(--s5) var(--l95));
168
+ --primary-bright: hsl(var(--1st) var(--s7) var(--l70));
169
+ --primary-transparent: hsl(var(--1st) var(--s5) var(--l65) / var(--a1));
170
+
158
171
  /* Complementary color */
159
- --complementary-100: hsl(var(--complement) var(--s5) 96%);
160
- --complementary-200: hsl(var(--complement) var(--s5) 90%);
161
- --complementary-300: hsl(var(--complement) var(--s5) 80%);
162
- --complementary-400: hsl(var(--complement) var(--s5) 70%);
163
- --complementary-500: hsl(var(--complement) var(--s5) 60%);
164
- --complementary-600: hsl(var(--complement) var(--s5) 50%);
165
- --complementary-700: hsl(var(--complement) var(--s5) 40%);
166
- --complementary-800: hsl(var(--complement) var(--s5) 30%);
167
- --complementary-900: hsl(var(--complement) var(--s5) 20%);
172
+ --complementary-100: hsl(var(--complement) var(--s5) var(--l10));
173
+ --complementary-200: hsl(var(--complement) var(--s5) var(--l20));
174
+ --complementary-300: hsl(var(--complement) var(--s5) var(--l30));
175
+ --complementary-400: hsl(var(--complement) var(--s5) var(--l40));
176
+ --complementary-500: hsl(var(--complement) var(--s5) var(--l50));
177
+ --complementary-600: hsl(var(--complement) var(--s5) var(--l60));
178
+ --complementary-700: hsl(var(--complement) var(--s5) var(--l70));
179
+ --complementary-800: hsl(var(--complement) var(--s5) var(--l80));
180
+ --complementary-900: hsl(var(--complement) var(--s5) var(--l90));
168
181
 
169
182
  /* Secondary color */
170
- --secondary-100: hsl(var(--2nd) var(--s5) 96%);
171
- --secondary-200: hsl(var(--2nd) var(--s5) 90%);
172
- --secondary-300: hsl(var(--2nd) var(--s5) 80%);
173
- --secondary-400: hsl(var(--2nd) var(--s5) 70%);
174
- --secondary-500: hsl(var(--2nd) var(--s5) 60%);
175
- --secondary-600: hsl(var(--2nd) var(--s5) 50%);
176
- --secondary-700: hsl(var(--2nd) var(--s5) 40%);
177
- --secondary-800: hsl(var(--2nd) var(--s5) 30%);
178
- --secondary-900: hsl(var(--2nd) var(--s5) 20%);
179
- --secondary-bright: hsl(var(--2nd) var(--s7) var(--l4));
183
+ --secondary-100: hsl(var(--2nd) var(--s5) var(--l10));
184
+ --secondary-200: hsl(var(--2nd) var(--s5) var(--l20));
185
+ --secondary-300: hsl(var(--2nd) var(--s5) var(--l30));
186
+ --secondary-400: hsl(var(--2nd) var(--s5) var(--l40));
187
+ --secondary-500: hsl(var(--2nd) var(--s5) var(--l50));
188
+ --secondary-600: hsl(var(--2nd) var(--s5) var(--l60));
189
+ --secondary-700: hsl(var(--2nd) var(--s5) var(--l70));
190
+ --secondary-800: hsl(var(--2nd) var(--s5) var(--l80));
191
+ --secondary-900: hsl(var(--2nd) var(--s5) var(--l90));
192
+ --secondary-bright: hsl(var(--2nd) var(--s7) var(--l70));
193
+
194
+
195
+ /* Neutrals / Grayscale - use the black/white keywords for pure black/white.
196
+ we have two extra levels at each of the scale for greater flexibility in
197
+ developing shadows and highlights */
198
+ --10: hsl( 0 var(--s0) 99% ); /* effectively white */
199
+ --50: hsl( 0 var(--s0) 97% );
200
+ --100: hsl( 0 var(--s0) 95% );
201
+ --200: hsl( 0 var(--s0) 86% );
202
+ --300: hsl( 0 var(--s0) 77% );
203
+ --400: hsl( 0 var(--s0) 68% );
204
+ --500: hsl( 0 var(--s0) 59% );
205
+ --neutral: hsl( 0 var(--s0) 50% );
206
+ --600: hsl( 0 var(--s0) 41% );
207
+ --700: hsl( 0 var(--s0) 32% );
208
+ --800: hsl( 0 var(--s0) 23% );
209
+ --900: hsl( 0 var(--s0) 16% );
210
+ --950: hsl( 0 var(--s0) 10% );
211
+ --990: hsl( 0 var(--s0) 5% ); /* effectively black */
212
+
213
+
214
+ /* Named flash/form message colors - highlights are more extreme & lowlights
215
+ less extreme versions of the base color, relative to the color scheme */
216
+ --error: hsl(var(--red) var(--s10) var(--l40)); /* 43% */
217
+ --error-high: hsl(var(--red) var(--s10) var(--l80)); /* 80% */
218
+ --error-low: hsl(var(--red) var(--s6) var(--l30)); /* 38% */
219
+ --bg-error: hsl(var(--red) var(--s6) var(--l90)); /* 92% */
220
+
221
+ --warning: hsl(var(--yellow) var(--s10) var(--l40)); /* 40% */
222
+ --warning-high: hsl(var(--yellow) var(--s10) var(--l50)); /* 47% */
223
+ --warning-low: hsl(var(--yellow) var(--s6) var(--l40)); /* 40% */
224
+ --bg-warning: hsl(var(--yellow) var(--s6) var(--l90)); /* 92% */
225
+
226
+ --success: hsl(var(--green) var(--s10) var(--l35)); /* 35% */
227
+ --success-high: hsl(var(--green) var(--s10) var(--l45)); /* 45% */
228
+ --success-low: hsl(var(--green) var(--s6) var(--l25)); /* 25% */
229
+ --bg-success: hsl(var(--green) var(--s6) var(--l90)); /* 92% */
230
+
231
+ --info: hsl(var(--blue) var(--s10) var(--l45)); /* 45% */
232
+ --info-high: hsl(var(--blue) var(--s10) var(--l65)); /* 65% */
233
+ --info-low: hsl(var(--blue) var(--s6) var(--l35)); /* 35% */
234
+ --bg-info: hsl(var(--blue) var(--s6) var(--l90)); /* 92% */
235
+
236
+ /* Named (icon) state colors - highlights are more extreme & lowlights
237
+ less extreme versions of the base color, relative to the color scheme */
238
+
239
+ --valid: hsl(var(--green) var(--s7) var(--l30)); /* 30% */
240
+ --valid-high: hsl(var(--green) var(--s8) var(--l40)); /* 40% */
241
+ --valid-low: hsl(var(--green) var(--s7) var(--l25)); /* 25% */
242
+ --bg-valid: hsl(var(--green) var(--s6) var(--l90)); /* 92% */
243
+
244
+ --invalid: hsl(var(--red) var(--s8) var(--l35)); /* 35% */
245
+ --invalid-high: hsl(var(--red) var(--s9) var(--l40)); /* 42% */
246
+ --invalid-low: hsl(var(--red) var(--s7) var(--l30)); /* 30% */
247
+ --bg-invalid: hsl(var(--red) var(--s6) var(--l90)); /* 92% */
248
+
249
+ --unknown: hsl(var(--yellow) var(--s10) var(--l40)); /* 40% */
250
+ --unknown-high: hsl(var(--yellow) var(--s10) var(--l45)); /* 47% */
251
+ --unknown-low: hsl(var(--yellow) var(--s6) var(--l40)); /* 40% */
252
+ --bg-unknown: hsl(var(--yellow) var(--s6) var(--l90)); /* 92% */
253
+
180
254
  }
181
255
 
182
- /* INCOMPLETE - LCH version for browsers that support it - safari only for now*/
256
+ /* okLCH version for browsers that support it - chrome/safari only for now */
183
257
  @supports (color: oklch(1% 1 1)) {
184
258
  :root {
259
+
260
+ /* okLCH hues */
185
261
  --red: 26; /* dark red / error color */
186
262
  --brown: 45;
187
263
  --orange: 63;
188
264
  --yellow: 104; /* warning color */
189
- --lime: 126;
265
+ --lime: 126;
190
266
  --green: 137; /* success color */
191
- --aqua: 190;
192
- --cyan: 205;
193
- --azure: 214;
267
+ --aqua: 190;
268
+ --cyan: 205;
269
+ --azure: 214;
194
270
  --blue: 251; /* slate blue / info / default primary*/
195
- --indigo: 292;
196
- --purple: 302;
197
- --violet: 312;
198
- --magenta: 328;
199
- --pink: 354;
200
-
201
- /* useful chroma in LCH is ~[0, 150]; in OKLCH, it's ~[0, 0.4] - percentages
202
- would clamp chroma to these ranges, but is not yet implemented in safari */
203
- --dullest: 0.05;
204
- --duller: 0.08;
205
- --dull: 0.10;
206
- --chroma: 0.12; /* default */
207
- --rich: 0.15;
208
- --richer: 0.18;
209
- --richest: 0.23;
210
-
211
- /* chroma scale */
271
+ --indigo: 292;
272
+ --purple: 302;
273
+ --violet: 312;
274
+ --magenta: 328;
275
+ --pink: 354;
276
+
277
+ /* okLCH chroma scale */
212
278
  --c0: 0.010;
213
279
  --c1: 0.030;
214
280
  --c2: 0.050; /* dullest */
@@ -219,40 +285,10 @@
219
285
  --c7: 0.180; /* richer */
220
286
  --c8: 0.190;
221
287
  --c9: 0.230; /* richest */
222
-
223
- /* lightness in LCH ranges [0, 100]; in OKLCH, it's [0, 1.0] - percentages
224
- will clamp lightness to these ranges, and is implemented in safari */
225
- --darken: 52%;
226
- --lightness: 60%; /* default */
227
- --lighten: 67%;
228
- --brighten: 92%;
229
-
230
- /* lightness scale for deriving primary color scales */
231
- --l1: 99.9%;
232
- --l5: 99%;
233
- --l10: 96%;
234
- --l15: 92%; /* brighten */
235
- --l20: 90%;
236
- --l30: 80%;
237
- --l40: 70%;
238
- --l45: 67%; /* lighten */
239
- --l50: 60%; /* default */
240
- --l54: 53%;
241
- --l55: 52%; /* darken */
242
- --l60: 50%;
243
- --l65: 45%;
244
- --l70: 40%;
245
- --l80: 30%;
246
- --l90: 20%;
247
- --l95: 10%;
248
- --l99: 5%;
249
-
250
-
251
- /* Base Color Palette - no need for color scales with okLCH since it's support
252
- implies support for CSS relative colors, so variations can be created on
253
- the fly */
288
+
289
+ /* Primary colors (okLCH) */
254
290
  --primary: oklch(var(--l60) var(--c4) var(--1st));
255
- --secondary: oklch(var(--l54) var(--c7) var(--2nd));
291
+ --secondary: oklch(var(--l54) var(--c6) var(--2nd));
256
292
  --tertiary: oklch(var(--l50) var(--c5) var(--3rd));
257
293
  --quaternary: oklch(var(--l50) var(--c6) var(--4th));
258
294
  --quinary: oklch(var(--l50) var(--c7) var(--5th));
@@ -260,52 +296,118 @@
260
296
  --septenary: oklch(var(--l50) var(--c5) var(--7th));
261
297
  --octonary: oklch(var(--l50) var(--c6) var(--8th));
262
298
  --nonary: oklch(var(--l50) var(--c7) var(--9th));
263
-
299
+
300
+ /* Complementary colors (okLCH) */
264
301
  --complementary: oklch(var(--l50) var(--c7) var(--complement) );
265
302
  --triadic: oklch(var(--l50) var(--c7) var(--triad) );
266
303
  --cotriadic: oklch(var(--l50) var(--c7) var(--cotriad) );
267
304
  --tetradic: oklch(var(--l50) var(--c7) var(--tetrad) );
268
305
  --cotetradic: oklch(var(--l50) var(--c7) var(--cotetrad) );
269
306
 
270
-
307
+ /* Color scales - with relative colors, we shouldn't need color scales; just
308
+ apply the desired lightness, chroma, alpha scale value to the base color */
309
+ --primary-100: oklch(var(--l20) var(--c2) var(--1st));
310
+ --primary-200: oklch(var(--l25) var(--c4) var(--1st));
311
+ --primary-300: oklch(var(--l40) var(--c4) var(--1st));
312
+ --primary-400: oklch(var(--l50) var(--c4) var(--1st));
313
+ --primary-500: oklch(var(--l55) var(--c4) var(--1st));
314
+ --primary-600: oklch(var(--l65) var(--c4) var(--1st));
315
+ --primary-700: oklch(var(--l70) var(--c4) var(--1st));
316
+ --primary-800: oklch(var(--l80) var(--c4) var(--1st));
317
+ --primary-900: oklch(var(--l90) var(--c4) var(--1st));
318
+ --primary-bright: oklch(var(--l55) var(--c6) var(--1st));
319
+ --primary-transparent: oklch(var(--l60) var(--c6) var(--1st) / var(--a2));
320
+
321
+ /* CSS Color Level 5 Relative Color Syntax not supported in firefox yet,
322
+ see: https://bugzilla.mozilla.org/show_bug.cgi?id=1701488 */
323
+ /*--primary-transparent: oklch(from var(--primary) l var(--c6) h / var(--a1));*/
324
+
325
+
326
+ /* Secondary color (okLCH) - brand color differentiated from primary */
327
+ --secondary-100: oklch(var(--l10) var(--c4) var(--2nd));
328
+ --secondary-200: oklch(var(--l20) var(--c4) var(--2nd));
329
+ --secondary-300: oklch(var(--l30) var(--c4) var(--2nd));
330
+ --secondary-400: oklch(var(--l40) var(--c4) var(--2nd));
331
+ --secondary-500: oklch(var(--l50) var(--c4) var(--2nd));
332
+ --secondary-600: oklch(var(--l60) var(--c4) var(--2nd));
333
+ --secondary-700: oklch(var(--l70) var(--c4) var(--2nd));
334
+ --secondary-800: oklch(var(--l80) var(--c4) var(--2nd));
335
+ --secondary-900: oklch(var(--l90) var(--c4) var(--2nd));
336
+ --secondary-bright: oklch(var(--l55) var(--c6) var(--2nd));
337
+ --secondary-transparent:oklch(var(--l30) var(--c6) var(--2nd) / var(--a2));
338
+
339
+
340
+ /* Complementary color (okLCH) - meant to be used next to primary */
341
+ --complementary-100: oklch(var(--l20) var(--c2) var(--complement));
342
+ --complementary-200: oklch(var(--l25) var(--c4) var(--complement));
343
+ --complementary-300: oklch(var(--l40) var(--c4) var(--complement));
344
+ --complementary-400: oklch(var(--l50) var(--c4) var(--complement));
345
+ --complementary-500: oklch(var(--l55) var(--c4) var(--complement));
346
+ --complementary-600: oklch(var(--l65) var(--c4) var(--complement));
347
+ --complementary-700: oklch(var(--l70) var(--c4) var(--complement));
348
+ --complementary-800: oklch(var(--l80) var(--c4) var(--complement));
349
+ --complementary-900: oklch(var(--l90) var(--c4) var(--complement));
350
+ --complementary-bright: oklch(var(--l55) var(--c6) var(--complement));
351
+ --complementary-transparent:oklch(var(--l55) var(--c6) var(--complement) / var(--a2));
352
+
353
+
354
+ /* Neutrals / Grayscale */
355
+ --10: oklch(var(--l1) 0 0); /* nearly white */
356
+ --50: oklch(var(--l5) 0 0);
357
+ --100: oklch(var(--l10) 0 0);
358
+ --200: oklch(var(--l20) 0 0);
359
+ --300: oklch(var(--l30) 0 0);
360
+ --400: oklch(var(--l40) 0 0);
361
+ --500: oklch(var(--l50) 0 0);
362
+ --neutral: oklch(var(--l50) 0 0);
363
+ --600: oklch(var(--l60) 0 0);
364
+ --700: oklch(var(--l70) 0 0);
365
+ --800: oklch(var(--l80) 0 0);
366
+ --900: oklch(var(--l90) 0 0);
367
+ --950: oklch(var(--l95) 0 0);
368
+ --990: oklch(var(--l99) 0 0); /* nearly black */
369
+
271
370
  /* Named flash/form message colors - highlights are more extreme & lowlights
272
371
  less extreme versions of the base color, relative to the color scheme */
273
372
  --info: oklch(var(--l50) var(--c5) var(--blue));
274
373
  --info-high: oklch(var(--l45) var(--c5) var(--blue));
275
374
  --info-low: oklch(var(--l55) var(--c6) var(--blue));
276
375
  --bg-info: oklch(var(--l15) var(--c3) var(--blue));
277
-
376
+
278
377
  --success: oklch(var(--l50) var(--c6) var(--green));
279
378
  --success-high: oklch(var(--l45) var(--c6) var(--green));
280
379
  --success-low: oklch(var(--l55) var(--c6) var(--green));
281
380
  --bg-success: oklch(var(--l15) var(--c3) var(--green));
282
-
381
+
283
382
  --warning: oklch(var(--l50) var(--c5) var(--yellow));
284
383
  --warning-high: oklch(var(--l45) var(--c5) var(--yellow));
285
384
  --warning-low: oklch(var(--l55) var(--c5) var(--yellow));
286
385
  --bg-warning: oklch(var(--l15) var(--c3) var(--yellow));
287
-
386
+
288
387
  --error: oklch(var(--l50) var(--c4) var(--red));
289
388
  --error-high: oklch(var(--l45) var(--c5) var(--red));
290
389
  --error-low: oklch(var(--l55) var(--c5) var(--red));
291
390
  --bg-error: oklch(var(--l15) var(--c3) var(--red));
292
-
293
- /* Neutrals / Grayscale */
294
- --10: oklch(var(--l1) 0 0); /* nearly white */
295
- --50: oklch(var(--l5) 0 0);
296
- --100: oklch(var(--l10) 0 0);
297
- --200: oklch(var(--l20) 0 0);
298
- --300: oklch(var(--l30) 0 0);
299
- --400: oklch(var(--l40) 0 0);
300
- --500: oklch(var(--l50) 0 0);
301
- --neutral: oklch(var(--l50) 0 0);
302
- --600: oklch(var(--l60) 0 0);
303
- --700: oklch(var(--l70) 0 0);
304
- --800: oklch(var(--l80) 0 0);
305
- --900: oklch(var(--l90) 0 0);
306
- --950: oklch(var(--l95) 0 0);
307
- --990: oklch(var(--l99) 0 0); /* nearly black */
308
-
391
+
392
+
393
+ /* Named (icon) state colors - highlights are more extreme & lowlights
394
+ less extreme versions of the base color, relative to the color scheme */
395
+
396
+ --valid: oklch(var(--l55) var(--c7) var(--green));
397
+ --valid-high: oklch(var(--l45) var(--c8) var(--green));
398
+ --valid-low: oklch(var(--l55) var(--c6) var(--green));
399
+ --bg-valid: oklch(var(--l65) var(--c9) var(--green));
400
+
401
+ --invalid: oklch(var(--l55) var(--c5) var(--red));
402
+ --invalid-high: oklch(var(--l45) var(--c6) var(--red));
403
+ --invalid-low: oklch(var(--l65) var(--c4) var(--red));
404
+ --bg-invalid: oklch(var(--l75) var(--c8) var(--red));
405
+
406
+ --unknown: oklch(var(--l20) var(--c6) var(--yellow));
407
+ --unknown-high: oklch(var(--l20) var(--c7) var(--yellow));
408
+ --unknown-low: oklch(var(--l60) var(--c5) var(--yellow));
409
+ --bg-unknown: oklch(var(--l60) var(--c9) var(--yellow));
410
+
309
411
  }}
310
412
 
311
413