/
knopf.css
389 lines (320 loc) · 12.1 KB
/
knopf.css
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
html {
/* ==========================================================================
Color
========================================================================== */
--knopf-hue: 218;
--knopf-saturation: 77%;
--knopf-luminosity: 37%;
/* ==========================================================================
Sizes
========================================================================== */
/* Font */
--knopf-font-size-base: 1rem;
--knopf-font-size-small: calc(var(--knopf-font-size-base) - 0.25rem);
--knopf-font-size-large: calc(var(--knopf-font-size-base) + 0.2rem);
--knopf-font-size-huge: calc(var(--knopf-font-size-base) + 0.5rem);
/* Padding */
--knopf-padding-base: 0.375rem;
--knopf-padding-small: calc(var(--knopf-padding-base) - 0.125rem);
--knopf-padding-large: calc(var(--knopf-padding-base) + 0.125rem);
--knopf-padding-huge: calc(var(--knopf-padding-base) + 0.375rem);
/* Icon */
--knopf-icon-size-base: 1.125rem;
--knopf-icon-size-small: calc(var(--knopf-icon-size-base) - 0.25rem);
--knopf-icon-size-large: calc(var(--knopf-icon-size-base) + 0.375rem);
--knopf-icon-size-huge: calc(var(--knopf-icon-size-base) + 0.625rem);
/* ==========================================================================
Initial
========================================================================== */
/* Size */
--knopf-font-size: var(--knopf-font-size-base);
--knopf-padding: var(--knopf-padding-base);
--knopf-icon-size: var(--knopf-icon-size-base);
/* Border */
--knopf-border-radius: 0.33em;
--knopf-border-style: solid;
--knopf-border-width: 1px;
--knopf-border-alpha: 0%;
/* Text */
--knopf-font-family: inherit;
--knopf-font-weight: 500;
--knopf-line-height: 1.5;
--knopf-align-items: center;
--knopf-justify-content: center;
--knopf-text-decoration-line: none;
--knopf-text-decoration-color: currentColor;
--knopf-text-transform: none;
/* Flex */
--knopf-display: inline-flex;
--knopf-flex-direction: row;
/* Group */
--knopf-group-direction: row;
/* Misc */
--knopf-background-image: none;
--knopf-box-shadow: none;
--knopf-foreground-color: 0 0% 100%;
--knopf--position: relative;
--knopf-transition: all 150ms ease-in-out;
}
/* ==========================================================================
Class
========================================================================== */
.knopf {
/* Colors */
--knopf-color: var(--knopf-hue) var(--knopf-saturation) var(--knopf-luminosity);
/* Light */
--knopf-color-light: var(--knopf-hue) var(--knopf-saturation) calc(var(--knopf-luminosity) + 10%);
--knopf-color-lighter: var(--knopf-hue) var(--knopf-saturation) calc(var(--knopf-luminosity) + 15%);
/* Dark */
--knopf-color-dark: var(--knopf-hue) var(--knopf-saturation) calc(var(--knopf-luminosity) - 10%);
--knopf-color-darker: var(--knopf-hue) var(--knopf-saturation) calc(var(--knopf-luminosity) - 15%);
/* Spacing */
--knopf-padding-block: var(--knopf-padding);
--knopf-padding-inline: calc(var(--knopf-padding) * 2);
/* Default */
--knopf-background-alpha: 100%;
--knopf-background-color: var(--knopf-color);
--knopf-border-color: var(--knopf-color);
--knopf-gradient-from: var(--knopf-color-light);
--knopf-gradient-to: var(--knopf-color-dark);
--knopf-text-color: var(--knopf-foreground-color);
--knopf-text-alpha: 100%;
/* Hover */
--knopf-hover-background-alpha: 100%;
--knopf-hover-background-color: var(--knopf-color-dark);
--knopf-hover-border-color: var(--knopf-color-dark);
--knopf-hover-gradient-from: var(--knopf-color-lighter);
--knopf-hover-gradient-to: var(--knopf-color);
--knopf-hover-text-color: var(--knopf-foreground-color);
--knopf-hover-text-alpha: 100%;
/* Active */
--knopf-active-background-alpha: 100%;
--knopf-active-background-color: var(--knopf-color-darker);
--knopf-active-border-color: var(--knopf-color-darker);
--knopf-active-gradient-from: var(--knopf-color-dark);
--knopf-active-gradient-to: var(--knopf-color);
--knopf-active-text-color: var(--knopf-foreground-color);
--knopf-active-text-alpha: 100%;
/* Properties */
accent-color: hsl(var(--knopf-color));
align-items: var(--knopf-align-items);
background-color: var(--knopf-named-background-color, hsl(var(--knopf-background-color) / var(--knopf-background-alpha)));
background-image: var(--knopf-background-image);
background-origin: border-box;
border-color: hsl(var(--knopf-border-color) / var(--knopf-border-alpha));
border-radius: var(--knopf-border-radius);
border-style: var(--knopf-border-style);
border-width: var(--knopf-border-width);
box-shadow: var(--knopf-box-shadow);
box-sizing: border-box;
color: hsl(var(--knopf-text-color) / var(--knopf-text-alpha));
cursor: pointer;
display: var(--knopf-display);
flex-direction: var(--knopf-flex-direction);
font-family: var(--knopf-font-family);
font-size: var(--knopf-font-size, inherit);
font-weight: var(--knopf-font-weight);
line-height: var(--knopf-line-height);
justify-content: var(--knopf-justify-content);
padding-block: var(--knopf-padding-block);
padding-inline: var(--knopf-padding-inline);
position: var(--knopf--position);
text-decoration-color: var(--knopf-text-decoration-color);
text-decoration-line: var(--knopf-text-decoration-line);
text-transform: var(--knopf-text-transform);
transition: var(--knopf-transition);
}
/* ==========================================================================
Types
========================================================================== */
.knopf.inverse {
/* base */
--knopf-background-alpha: 0%;
--knopf-text-color: var(--knopf-color);
/* hover */
--knopf-hover-background-alpha: 100%;
--knopf-hover-background-color: var(--knopf-color);
--knopf-hover-text-color: var(--knopf-foreground-color);
/* active */
--knopf-active-background-alpha: 100%;
--knopf-active-background-color: var(--knopf-color-dark);
--knopf-active-text-color: var(--knopf-foreground-color);
}
.knopf.flat {
/* base */
--knopf-background-alpha: 0;
--knopf-text-color: var(--knopf-color);
/* hover */
--knopf-hover-background-alpha: 15%;
--knopf-hover-background-color: var(--knopf-color);
--knopf-hover-text-color: var(--knopf-color-dark);
/* active */
--knopf-active-background-alpha: 25%;
--knopf-active-background-color: var(--knopf-color);
--knopf-active-text-color: var(--knopf-color-darker);
}
.knopf.pale {
/* base */
--knopf-background-alpha: 10%;
--knopf-background-color: var(--knopf-color);
--knopf-text-color: var(--knopf-color);
/* hover */
--knopf-hover-background-alpha: 20%;
--knopf-hover-background-color: var(--knopf-color);
--knopf-hover-text-color: var(--knopf-color-dark);
/* active */
--knopf-active-background-alpha: 30%;
--knopf-active-background-color: var(--knopf-color);
--knopf-active-text-color: var(--knopf-color-darker);
}
/* ==========================================================================
States
========================================================================== */
/* Hover */
.knopf:hover {
--knopf-background-alpha: var(--knopf-hover-background-alpha);
--knopf-background-color: var(--knopf-hover-background-color);
--knopf-border-color: var(--knopf-hover-border-color);
--knopf-gradient-from: var(--knopf-hover-gradient-from);
--knopf-gradient-to: var(--knopf-hover-gradient-to);
--knopf-text-color: var(--knopf-hover-text-color);
--knopf-text-decoration-color: var(--knopf-hover-text-decoration-color);
}
/* Active */
.knopf.active {
--knopf-background-alpha: var(--knopf-active-background-alpha);
--knopf-background-color: var(--knopf-active-background-color);
--knopf-border-color: var(--knopf-active-border-color);
--knopf-gradient-from: var(--knopf-active-gradient-from);
--knopf-gradient-to: var(--knopf-active-gradient-to);
--knopf-text-color: var(--knopf-active-text-color);
--knopf-text-decoration-color: var(--knopf-active-text-decoration-color);
}
/* ==========================================================================
Sizes
========================================================================== */
.knopf.small {
--knopf-font-size: var(--knopf-font-size-small);
--knopf-padding: var(--knopf-padding-small);
--knopf-icon-size: var(--knopf-icon-size-small);
}
.knopf.large {
--knopf-font-size: var(--knopf-font-size-large);
--knopf-padding: var(--knopf-padding-large);
--knopf-icon-size: var(--knopf-icon-size-large);
}
.knopf.huge {
--knopf-font-size: var(--knopf-font-size-huge);
--knopf-padding: var(--knopf-padding-huge);
--knopf-icon-size: var(--knopf-icon-size-huge);
}
/* ==========================================================================
Modifiers
========================================================================== */
.knopf:where(.traced, .outlined) {
--knopf-border-color: var(--knopf-color);
}
.knopf.traced {
--knopf-border-alpha: 33%;
}
.knopf.outlined {
--knopf-border-alpha: 100%;
}
/* ==========================================================================
Alignment
========================================================================== */
.knopf.block {
--knopf-display: flex;
width: 100%;
}
.knopf.start {
--knopf-justify-content: flex-start;
}
.knopf.center {
--knopf-justify-content: center;
}
.knopf.end {
--knopf-justify-content: flex-end;
}
/* ==========================================================================
Spacing
========================================================================== */
.knopf.even {
--knopf-padding-inline: var(--knopf-padding);
}
.knopf.wide {
--knopf-padding-inline: calc(var(--knopf-padding) * 3);
}
/* ==========================================================================
Corners
========================================================================== */
.knopf.pill {
--knopf-border-radius: 9999px;
}
.knopf.sharp {
--knopf-border-radius: 0;
}
/* ==========================================================================
Other
========================================================================== */
.knopf.gradient {
--knopf-named-background-color: transparent;
--knopf-background-image: linear-gradient(hsl(var(--knopf-gradient-from) / var(--knopf-background-alpha)), hsl(var(--knopf-gradient-to) / var(--knopf-background-alpha)));
}
.knopf.link {
--knopf-border-width: 0;
--knopf-border-radius: 0;
--knopf-padding: 0;
--knopf-font-size: null;
/* Text decoration */
--knopf-text-decoration-line: underline;
--knopf-text-decoration-color: hsl(var(--knopf-color) / 40%);
--knopf-hover-text-decoration-color: hsl(var(--knopf-color-dark));
--knopf-active-text-decoration-color: hsl(var(--knopf-color-darker));
/* base */
--knopf-background-alpha: 0;
--knopf-border-alpha: 0;
--knopf-text-color: var(--knopf-color);
/* hover */
--knopf-hover-background-alpha: 0;
--knopf-hover-border-alpha: 0;
--knopf-hover-text-color: var(--knopf-color-dark);
/* active */
--knopf-active-background-alpha: 0;
--knopf-active-border-alpha: 0;
--knopf-active-text-color: var(--knopf-color-darker);
}
/* ==========================================================================
Icon
========================================================================== */
.knopf > .icon {
align-items: center;
color: inherit;
display: inline-flex;
fill: currentColor;
flex-shrink: 0;
font-size: var(--knopf-icon-size);
height: var(--knopf-icon-size);
justify-content: center;
width: var(--knopf-icon-size);
}
.knopf > .icon.small {
--knopf-icon-size: var(--knopf-icon-size-small);
}
.knopf > .icon.base {
--knopf-icon-size: var(--knopf-icon-size-base);
}
.knopf > .icon.large {
--knopf-icon-size: var(--knopf-icon-size-large);
}
.knopf > .icon.huge {
--knopf-icon-size: var(--knopf-icon-size-huge);
}
.knopf > .icon:first-child:not(:only-child) {
margin-inline-start: calc(var(--knopf-padding-inline) * -0.25);
margin-inline-end: calc(var(--knopf-padding-inline) * 0.5);
}
.knopf > .icon:last-child:not(:only-child) {
margin-inline-start: calc(var(--knopf-padding-inline) * 0.5);
margin-inline-end: calc(var(--knopf-padding-inline) * -0.25);
}