@kolkrabbi/kol-theme 0.7.4 → 0.7.5
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/kol-base-tokens.css +3 -0
- package/kol-color.css +22 -0
- package/kol-components-atoms.css +79 -0
- package/kol-components-chess.css +14 -3
- package/kol-components-molecules.css +27 -0
- package/kol-components-organisms.css +10 -6
- package/package.json +1 -1
package/kol-base-tokens.css
CHANGED
package/kol-color.css
CHANGED
|
@@ -34,6 +34,16 @@
|
|
|
34
34
|
--kol-accent-on-primary: var(--kol-surface-primary);
|
|
35
35
|
--kol-accent-primary-strong: color-mix(in srgb, var(--kol-accent-primary) 80%, var(--kol-surface-primary));
|
|
36
36
|
|
|
37
|
+
/* ---------------------------------------------------------------------------
|
|
38
|
+
* HYPERLINKS — the one text role with its own color (2026-07-15, chess
|
|
39
|
+
* consumer audit finding 3: no link token, no a{} rule → links rendered as
|
|
40
|
+
* body ink). Theme-owned hex defaults in the --ui-info blue family; the
|
|
41
|
+
* brand layer overrides the tokens, consumers override per element.
|
|
42
|
+
* --------------------------------------------------------------------------- */
|
|
43
|
+
|
|
44
|
+
--kol-link: #2563EB;
|
|
45
|
+
--kol-link-hover: #1D4ED8;
|
|
46
|
+
|
|
37
47
|
/* ---------------------------------------------------------------------------
|
|
38
48
|
* UI STATE — error / warning / info / success.
|
|
39
49
|
* Direct hex (not ramp-dependent). Intentionally not part of the brand layer
|
|
@@ -74,6 +84,9 @@
|
|
|
74
84
|
|
|
75
85
|
@media (prefers-color-scheme: dark) {
|
|
76
86
|
:root:not([data-theme="light"]) {
|
|
87
|
+
--kol-link: #60A5FA;
|
|
88
|
+
--kol-link-hover: #93C5FD;
|
|
89
|
+
|
|
77
90
|
--kol-surface-primary: #121215;
|
|
78
91
|
--kol-surface-on-primary: #FAFAFA;
|
|
79
92
|
|
|
@@ -88,6 +101,15 @@
|
|
|
88
101
|
}
|
|
89
102
|
}
|
|
90
103
|
|
|
104
|
+
/* =============================================================================
|
|
105
|
+
* BASE ANCHOR RULE — unstyled links get the link color. Sits in the
|
|
106
|
+
* components layer, so any utility class or later-loading chrome sheet
|
|
107
|
+
* (kol-framework, brand) still wins per the cascade contract (§5).
|
|
108
|
+
* ============================================================================= */
|
|
109
|
+
|
|
110
|
+
a { color: var(--kol-link); }
|
|
111
|
+
a:hover { color: var(--kol-link-hover); }
|
|
112
|
+
|
|
91
113
|
/* =============================================================================
|
|
92
114
|
* CONTEXT-AWARE SURFACE INVERSE
|
|
93
115
|
* ============================================================================= */
|
package/kol-components-atoms.css
CHANGED
|
@@ -140,6 +140,51 @@
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
|
|
143
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
144
|
+
* FullscreenOverlay — atoms/FullscreenOverlay.jsx
|
|
145
|
+
* The classes existed in JSX with NO rules anywhere (found 2026-07-15 via
|
|
146
|
+
* the chess archive overlay — close button floated in dead space).
|
|
147
|
+
* Anatomy: fixed dim backdrop → full-bleed sheet → absolute corner close.
|
|
148
|
+
* ═══════════════════════════════════════════════════════════════ */
|
|
149
|
+
|
|
150
|
+
.kol-overlay {
|
|
151
|
+
position: fixed;
|
|
152
|
+
inset: 0;
|
|
153
|
+
z-index: 100;
|
|
154
|
+
background: color-mix(in srgb, var(--kol-color-absolute-black) 55%, transparent);
|
|
155
|
+
display: grid;
|
|
156
|
+
place-items: center;
|
|
157
|
+
overflow-y: auto;
|
|
158
|
+
padding: 24px;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* the sheet HUGS its content (the consumer's panel) — backdrop clicks land
|
|
162
|
+
* on .kol-overlay itself, so outside-dismiss works; the close button rides
|
|
163
|
+
* the panel's corner instead of floating at the viewport edge */
|
|
164
|
+
.kol-overlay-sheet {
|
|
165
|
+
position: relative;
|
|
166
|
+
max-width: 100%;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.kol-overlay-close {
|
|
170
|
+
position: absolute;
|
|
171
|
+
top: 12px;
|
|
172
|
+
right: 12px;
|
|
173
|
+
z-index: 10;
|
|
174
|
+
display: inline-flex;
|
|
175
|
+
align-items: center;
|
|
176
|
+
justify-content: center;
|
|
177
|
+
width: 32px;
|
|
178
|
+
height: 32px;
|
|
179
|
+
border-radius: var(--kol-radius-sm);
|
|
180
|
+
border: 1px solid var(--kol-oq-16);
|
|
181
|
+
background: var(--kol-surface-primary);
|
|
182
|
+
color: var(--kol-surface-on-primary);
|
|
183
|
+
font-size: 16px;
|
|
184
|
+
line-height: 1;
|
|
185
|
+
cursor: pointer;
|
|
186
|
+
}
|
|
187
|
+
|
|
143
188
|
/* ═══════════════════════════════════════════════════════════════
|
|
144
189
|
* Button — atoms/Button.jsx
|
|
145
190
|
*
|
|
@@ -244,6 +289,38 @@
|
|
|
244
289
|
}
|
|
245
290
|
}
|
|
246
291
|
|
|
292
|
+
/* Grey (2026-07-15, user-ordered) — pill-subtle's visual weight as a real
|
|
293
|
+
* Button variant on the opaque tier: rest oq-12, hover/active one stop past
|
|
294
|
+
* each, same state math as the rest of the family. */
|
|
295
|
+
.kol-btn-grey {
|
|
296
|
+
background: var(--kol-oq-12);
|
|
297
|
+
color: var(--kol-surface-on-primary);
|
|
298
|
+
border: 1px solid transparent;
|
|
299
|
+
}
|
|
300
|
+
@media (hover: hover) {
|
|
301
|
+
.kol-btn-grey:not(.kol-btn-animate):hover {
|
|
302
|
+
background-color: var(--kol-oq-16);
|
|
303
|
+
color: var(--kol-surface-on-primary);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/* Destructive actions (2026-07-15, chess consumer audit finding 1: red was
|
|
308
|
+
* being hacked onto normal buttons via className). Accent's shape on the
|
|
309
|
+
* --ui-error state token — filled, opaque interaction stops, white label
|
|
310
|
+
* (error red carries it in both themes). */
|
|
311
|
+
.kol-btn-danger {
|
|
312
|
+
background: var(--ui-error);
|
|
313
|
+
color: var(--kol-color-absolute-white);
|
|
314
|
+
border: 1px solid transparent;
|
|
315
|
+
font-weight: 500;
|
|
316
|
+
}
|
|
317
|
+
@media (hover: hover) {
|
|
318
|
+
.kol-btn-danger:not(.kol-btn-animate):hover {
|
|
319
|
+
background-color: color-mix(in srgb, var(--ui-error) 80%, var(--kol-surface-primary));
|
|
320
|
+
color: var(--kol-color-absolute-white);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
247
324
|
.kol-btn-sm { padding: 4px 12px; }
|
|
248
325
|
.kol-btn-md { padding: 6px 16px; }
|
|
249
326
|
.kol-btn-lg { padding: 8px 20px; }
|
|
@@ -255,6 +332,8 @@
|
|
|
255
332
|
.kol-btn-accent:not(.kol-btn-animate):not(:disabled):active { background-color: color-mix(in srgb, var(--kol-accent-primary) 70%, var(--kol-surface-primary)); }
|
|
256
333
|
.kol-btn-outline:not(.kol-btn-animate):not(:disabled):active,
|
|
257
334
|
.kol-btn-ghost:not(.kol-btn-animate):not(:disabled):active { background-color: var(--kol-oq-08); }
|
|
335
|
+
.kol-btn-danger:not(.kol-btn-animate):not(:disabled):active { background-color: color-mix(in srgb, var(--ui-error) 70%, var(--kol-surface-primary)); }
|
|
336
|
+
.kol-btn-grey:not(.kol-btn-animate):not(:disabled):active { background-color: var(--kol-oq-24); }
|
|
258
337
|
|
|
259
338
|
.kol-btn:disabled,
|
|
260
339
|
.kol-btn[disabled] {
|
package/kol-components-chess.css
CHANGED
|
@@ -41,14 +41,23 @@
|
|
|
41
41
|
border-radius: 4px;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/* fluid sizes by width AND height (2026-07-15 100dvh stage): the square is
|
|
45
|
+
* the largest that fits both the column width and the viewport minus the
|
|
46
|
+
* stage chrome. Mobile budget is bigger (strip + transport + notation min). */
|
|
44
47
|
.chess-board--fluid {
|
|
45
|
-
width: 100
|
|
48
|
+
width: min(100%, calc(100dvh - 200px));
|
|
46
49
|
height: auto;
|
|
47
50
|
aspect-ratio: 1;
|
|
48
51
|
max-width: 760px;
|
|
49
52
|
min-width: 280px;
|
|
50
53
|
}
|
|
51
54
|
|
|
55
|
+
@media (max-width: 1023px) {
|
|
56
|
+
.chess-board--fluid {
|
|
57
|
+
width: min(100%, calc(100dvh - 380px));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
52
61
|
|
|
53
62
|
.chess-board__grid {
|
|
54
63
|
display: grid;
|
|
@@ -535,6 +544,8 @@
|
|
|
535
544
|
color: var(--kol-status-danger);
|
|
536
545
|
}
|
|
537
546
|
|
|
547
|
+
/* no text-transform (casing law) — the JSX authors 'CHESS.COM' in-case;
|
|
548
|
+
* color rides the theme link tokens instead of accent (= ink) */
|
|
538
549
|
.analysis-table__link {
|
|
539
550
|
display: inline-flex;
|
|
540
551
|
align-items: center;
|
|
@@ -542,11 +553,11 @@
|
|
|
542
553
|
font-family: var(--kol-font-family-mono);
|
|
543
554
|
font-size: 0.7rem;
|
|
544
555
|
letter-spacing: 0.12em;
|
|
545
|
-
|
|
546
|
-
color: var(--kol-accent-primary);
|
|
556
|
+
color: var(--kol-link);
|
|
547
557
|
}
|
|
548
558
|
|
|
549
559
|
.analysis-table__link:hover {
|
|
560
|
+
color: var(--kol-link-hover);
|
|
550
561
|
text-decoration: underline;
|
|
551
562
|
}
|
|
552
563
|
|
|
@@ -147,6 +147,21 @@
|
|
|
147
147
|
justify-content: space-between;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
/* Dropdowns have NO hover and NO clicked state (2026-07-15 ruling) — the
|
|
151
|
+
* trigger borrows Button chrome for geometry/fill but its only states are
|
|
152
|
+
* rest and open. Scoped here so Button's own rules stay untouched. */
|
|
153
|
+
.kol-dd-trigger.kol-btn-primary:not(.kol-btn-animate):hover,
|
|
154
|
+
.kol-dd-trigger.kol-btn-primary:not(.kol-btn-animate):not(:disabled):active {
|
|
155
|
+
background: var(--kol-surface-secondary);
|
|
156
|
+
color: var(--kol-surface-on-primary);
|
|
157
|
+
}
|
|
158
|
+
.kol-dd-trigger.kol-btn-outline:not(.kol-btn-animate):hover,
|
|
159
|
+
.kol-dd-trigger.kol-btn-outline:not(.kol-btn-animate):not(:disabled):active {
|
|
160
|
+
background: transparent;
|
|
161
|
+
border-color: var(--kol-oq-16);
|
|
162
|
+
color: var(--kol-surface-on-primary);
|
|
163
|
+
}
|
|
164
|
+
|
|
150
165
|
.kol-dd-trigger--open {
|
|
151
166
|
border-radius: var(--kol-radius-sm) var(--kol-radius-sm) 0 0;
|
|
152
167
|
}
|
|
@@ -165,6 +180,18 @@
|
|
|
165
180
|
border-top: none;
|
|
166
181
|
}
|
|
167
182
|
|
|
183
|
+
/* grey — the opaque grey chrome (oq-12, fill law:
|
|
184
|
+
* interactive surfaces never translucent). Dropdown-only chrome; rest = hover
|
|
185
|
+
* = active per the no-states dropdown ruling (no kol-btn-* class emitted, so
|
|
186
|
+
* no button state rules ever apply). */
|
|
187
|
+
.kol-dd-trigger--grey {
|
|
188
|
+
background-color: var(--kol-oq-12);
|
|
189
|
+
color: var(--kol-surface-on-primary);
|
|
190
|
+
border: 1px solid transparent;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.kol-dd-panel--grey { background-color: var(--kol-oq-12); }
|
|
194
|
+
|
|
168
195
|
.kol-dd-div {
|
|
169
196
|
height: 1px;
|
|
170
197
|
background-color: var(--kol-border-default);
|
|
@@ -43,7 +43,10 @@
|
|
|
43
43
|
.kol-table-wrapper {
|
|
44
44
|
overflow-x: auto;
|
|
45
45
|
scrollbar-width: none;
|
|
46
|
-
border
|
|
46
|
+
/* opaque border stop — translucent fg-08 stacked with the collapsed table's
|
|
47
|
+
* own borders composited into darker seams over gradients (2026-07-15 chess
|
|
48
|
+
* audit finding 4); oq-* mirrors the same visual weight without alpha */
|
|
49
|
+
border: 1px solid var(--kol-oq-08);
|
|
47
50
|
border-radius: 4px;
|
|
48
51
|
/* Scroll affordance: with the scrollbar hidden, a clipped table reads as
|
|
49
52
|
* cut-off data on narrow viewports. Edge shadows appear only on the
|
|
@@ -72,23 +75,24 @@
|
|
|
72
75
|
|
|
73
76
|
.kol-table-thead {
|
|
74
77
|
background: var(--kol-fg-04);
|
|
75
|
-
border-bottom: 1px solid var(--kol-
|
|
78
|
+
border-bottom: 1px solid var(--kol-oq-08);
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
.kol-table-row {
|
|
79
|
-
border-bottom: 1px solid var(--kol-
|
|
82
|
+
border-bottom: 1px solid var(--kol-oq-08);
|
|
80
83
|
vertical-align: top;
|
|
81
84
|
}
|
|
82
85
|
|
|
83
86
|
.kol-table-row:last-child { border-bottom: none; }
|
|
84
87
|
|
|
88
|
+
/* no text-transform (casing law 2026-07-15): headers render as authored —
|
|
89
|
+
* consumers wanting caps author "DATE", not lowercase + CSS shouting */
|
|
85
90
|
.kol-table-cell-title {
|
|
86
91
|
padding: 12px 16px;
|
|
87
92
|
font-family: var(--kol-font-family-mono);
|
|
88
93
|
font-size: 0.75rem;
|
|
89
94
|
font-weight: 400;
|
|
90
95
|
line-height: 1.3;
|
|
91
|
-
text-transform: uppercase;
|
|
92
96
|
color: var(--kol-surface-on-primary);
|
|
93
97
|
white-space: nowrap;
|
|
94
98
|
}
|
|
@@ -205,13 +209,13 @@
|
|
|
205
209
|
}
|
|
206
210
|
|
|
207
211
|
.kol-table a {
|
|
208
|
-
color: var(--kol-
|
|
212
|
+
color: var(--kol-link);
|
|
209
213
|
text-decoration: underline;
|
|
210
214
|
text-decoration-thickness: 1px;
|
|
211
215
|
text-underline-offset: 2px;
|
|
212
216
|
}
|
|
213
217
|
|
|
214
|
-
.kol-table a:hover { color: var(--kol-
|
|
218
|
+
.kol-table a:hover { color: var(--kol-link-hover); }
|
|
215
219
|
|
|
216
220
|
@media (max-width: 768px) {
|
|
217
221
|
.kol-table-cell-title,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-theme",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5",
|
|
4
4
|
"description": "KOL (Kolkrabbi) design-system tokens + base CSS — brand-neutral. The canonical token/cascade layer every other KOL package and consumer builds on.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|