@kolkrabbi/kol-theme 0.108.0 → 0.110.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.
@@ -74,7 +74,12 @@
74
74
  * flips toward the ground, `oq-ab-96` IS the well everywhere — 245 under a
75
75
  * 250 page in light, 10 under an 18 page in dark. The per-theme alias this
76
76
  * replaced was the tell that the ladder underneath was wrong. */
77
- --kol-surface-sunken: var(--kol-oq-ab-96);
77
+ /* THE POLE ITSELF (user 2026-08-30: *"in light mode we could fix the sunken
78
+ * to use fff? fully white?"*). `100` is the ab ladder's endpoint — the ground
79
+ * pole, no mix — so the well is pure #ffffff in light and pure #000000 in
80
+ * dark, and it is still ONE token because `ab` flips toward the ground.
81
+ * A washed page cannot close this gap the way it closed the 96 rung. */
82
+ --kol-surface-sunken: var(--kol-oq-ab-100);
78
83
 
79
84
  --kol-surface-inverse: #0e0e11;
80
85
  --kol-surface-on-inverse: #fcfbf8;
@@ -1324,20 +1324,14 @@
1324
1324
  * ink `fg-96`. `.kol-tone-inverse` stays selected for any class
1325
1325
  * hand-stamped on the old name.
1326
1326
  * ───────────────────────────────────────────────────────────────────── */
1327
- /* THE WELL TAKES THE PAGE'S WASH TOO (SunkenWellEatenByPageWash, kol-fxr
1328
- * 2026-08-30). `--kol-surface-sunken` is derived from `surface-primary`, but
1329
- * `AppShell`'s `pageWash` paints a film ON TOP of that page and the control's
1330
- * opaque fill does not receive it. At the ruled `fg-02` rung the light page
1331
- * lands 250 × 0.98 + 18 × 0.02 = 245, which is EXACTLY the well: measured delta
1332
- * [0,0,0], four controls rendering as bare text with no pill.
1333
- *
1334
- * Deepening the well would have worked by luck and broken on the next rung
1335
- * change. Instead every sunken surface paints the same film the page does, so
1336
- * the five levels hold by construction whatever `pageWash` is set to. The
1337
- * property is unset outside an AppShell and falls back to `transparent`.
1338
- *
1339
- * State washes stack ON TOP of it — `linear-gradient(state), linear-gradient(wash)`
1340
- * — because one background-color cannot carry two translucent layers.
1327
+ /* ⚠️ `SunkenWellEatenByPageWash` IS NOT SOLVED HERE see the ticket.
1328
+ * On 2026-08-30 these rules briefly painted `--kol-shell-page-wash` as a
1329
+ * background layer so the well would track a washed page. That was the wrong
1330
+ * layer (user: *"we are talking about components, wash affects background"*):
1331
+ * a control has no business reproducing a page-level film, and portalling
1332
+ * proved it `.kol-dd-panel` renders at document.body, could not inherit the
1333
+ * property, and drew a different colour from its own trigger. Reverted.
1334
+ * The collision is a PAGE/token question and belongs there.
1341
1335
  *
1342
1336
  * THE SUNKEN TONE IS `surface-tertiary`, NOT `oq-inverse-96` (measured on
1343
1337
  * kol-fxr's /settings, 2026-08-30). The whole set read `--kol-oq-inverse-96`,
@@ -1356,13 +1350,13 @@
1356
1350
  * `surface-tertiary` is `#0e0e11` in dark (14.2, genuinely below the page) and
1357
1351
  * `#ffffff` in light, so it is theme-correct on both sides where a mix toward
1358
1352
  * a fixed near-white could only ever be right on one. */
1359
- .kol-view-toggle.kol-tone-sunken, .kol-view-toggle.kol-tone-inverse { background-color: var(--kol-surface-sunken); background-image: linear-gradient(var(--kol-shell-page-wash, transparent), var(--kol-shell-page-wash, transparent)); }
1353
+ .kol-view-toggle.kol-tone-sunken, .kol-view-toggle.kol-tone-inverse { background-color: var(--kol-surface-sunken); }
1360
1354
  .kol-view-toggle.kol-tone-sunken > button[aria-pressed="true"], .kol-view-toggle.kol-tone-inverse > button[aria-pressed="true"] { background-color: var(--kol-fg-08); }
1361
1355
  .kol-view-toggle.kol-tone-sunken > button:not([aria-pressed="true"]):hover, .kol-view-toggle.kol-tone-inverse > button:not([aria-pressed="true"]):hover { background-color: var(--kol-fg-04); }
1362
- .kol-control.kol-tone-sunken, .kol-control.kol-tone-inverse { background-color: var(--kol-surface-sunken); background-image: linear-gradient(var(--kol-shell-page-wash, transparent), var(--kol-shell-page-wash, transparent)); }
1363
- .kol-expand.kol-tone-sunken, .kol-expand.kol-tone-inverse { background-color: var(--kol-surface-sunken); background-image: linear-gradient(var(--kol-shell-page-wash, transparent), var(--kol-shell-page-wash, transparent)); }
1356
+ .kol-control.kol-tone-sunken, .kol-control.kol-tone-inverse { background-color: var(--kol-surface-sunken); }
1357
+ .kol-expand.kol-tone-sunken, .kol-expand.kol-tone-inverse { background-color: var(--kol-surface-sunken); }
1364
1358
  /* the tone's fill, one selector — nothing left to cancel (2026-08-28) */
1365
- .kol-dd-trigger.kol-tone-sunken, .kol-dd-trigger.kol-tone-inverse { background-color: var(--kol-surface-sunken); background-image: linear-gradient(var(--kol-shell-page-wash, transparent), var(--kol-shell-page-wash, transparent)); }
1359
+ .kol-dd-trigger.kol-tone-sunken, .kol-dd-trigger.kol-tone-inverse { background-color: var(--kol-surface-sunken); }
1366
1360
  /* THE PANEL IS OPAQUE (user 2026-08-28: "transparent doesn't work for
1367
1361
  * dropdown") — it floats over page content, and every `fg-*` stop is an alpha
1368
1362
  * wash that the content reads through. `oq-inverse-*`, the opaque tier, bakes
@@ -1370,7 +1364,7 @@
1370
1364
  * lands ~23.5 against the #121215 page's 18: lighter than the page, the wrong
1371
1365
  * side of it. `surface-tertiary` is the flat twin of what the trigger renders:
1372
1366
  * #0e0e11 (14.0) in dark against the trigger's 14.2, #ffffff in light. */
1373
- .kol-dd-panel.kol-tone-sunken, .kol-dd-panel.kol-tone-inverse { background-color: var(--kol-surface-sunken); background-image: linear-gradient(var(--kol-shell-page-wash, transparent), var(--kol-shell-page-wash, transparent)); }
1367
+ .kol-dd-panel.kol-tone-sunken, .kol-dd-panel.kol-tone-inverse { background-color: var(--kol-surface-sunken); }
1374
1368
  /* the rest of the set — Button (icon-only especially), IconFrame, ThemeToggle:
1375
1369
  * the well, transparent edge, fg-96 ink; hover the CONTRAST wash, pressed the
1376
1370
  * fg-08 chip — both LAYERED over the well (a gradient image over the fill),
@@ -1403,20 +1397,19 @@
1403
1397
  .kol-icon-frame.kol-tone-sunken,
1404
1398
  .kol-theme-toggle.kol-tone-sunken {
1405
1399
  background-color: var(--kol-surface-sunken);
1406
- background-image: linear-gradient(var(--kol-shell-page-wash, transparent), var(--kol-shell-page-wash, transparent));
1407
1400
  border-color: transparent;
1408
1401
  color: var(--kol-fg-96);
1409
1402
  }
1410
1403
  @media (hover: hover) {
1411
1404
  .kol-btn.kol-tone-sunken:not(.kol-btn-animate):not(:disabled):not(.kol-dd-trigger):hover {
1412
1405
  background-color: var(--kol-surface-sunken);
1413
- background-image: linear-gradient(var(--kol-fg-04), var(--kol-fg-04)), linear-gradient(var(--kol-shell-page-wash, transparent), var(--kol-shell-page-wash, transparent));
1406
+ background-image: linear-gradient(var(--kol-fg-04), var(--kol-fg-04));
1414
1407
  color: var(--kol-fg-96);
1415
1408
  }
1416
1409
  }
1417
1410
  .kol-btn.kol-tone-sunken.kol-btn-pressed:not(.kol-dd-trigger),
1418
1411
  .kol-btn.kol-tone-sunken:not(:disabled):not(.kol-dd-trigger):active {
1419
1412
  background-color: var(--kol-surface-sunken);
1420
- background-image: linear-gradient(var(--kol-fg-08), var(--kol-fg-08)), linear-gradient(var(--kol-shell-page-wash, transparent), var(--kol-shell-page-wash, transparent));
1413
+ background-image: linear-gradient(var(--kol-fg-08), var(--kol-fg-08));
1421
1414
  color: var(--kol-fg-96);
1422
1415
  }
package/kol-opaque.css CHANGED
@@ -259,6 +259,7 @@
259
259
  --kol-oq-ab-80: color-mix(in srgb, var(--kol-color-ab-white) 80%, var(--kol-color-ab-black));
260
260
  --kol-oq-ab-88: color-mix(in srgb, var(--kol-color-ab-white) 88%, var(--kol-color-ab-black));
261
261
  --kol-oq-ab-96: color-mix(in srgb, var(--kol-color-ab-white) 96%, var(--kol-color-ab-black));
262
+ --kol-oq-ab-100: var(--kol-color-ab-white);
262
263
 
263
264
  --kol-oq-ab-inverse-01: color-mix(in srgb, var(--kol-color-ab-black) 1%, var(--kol-color-ab-white));
264
265
  --kol-oq-ab-inverse-02: color-mix(in srgb, var(--kol-color-ab-black) 2%, var(--kol-color-ab-white));
@@ -275,6 +276,7 @@
275
276
  --kol-oq-ab-inverse-80: color-mix(in srgb, var(--kol-color-ab-black) 80%, var(--kol-color-ab-white));
276
277
  --kol-oq-ab-inverse-88: color-mix(in srgb, var(--kol-color-ab-black) 88%, var(--kol-color-ab-white));
277
278
  --kol-oq-ab-inverse-96: color-mix(in srgb, var(--kol-color-ab-black) 96%, var(--kol-color-ab-white));
279
+ --kol-oq-ab-inverse-100: var(--kol-color-ab-black);
278
280
  }
279
281
 
280
282
  /* DARK — the ground is black, so `ab` starts from black */
@@ -294,6 +296,7 @@
294
296
  --kol-oq-ab-80: color-mix(in srgb, var(--kol-color-ab-black) 80%, var(--kol-color-ab-white));
295
297
  --kol-oq-ab-88: color-mix(in srgb, var(--kol-color-ab-black) 88%, var(--kol-color-ab-white));
296
298
  --kol-oq-ab-96: color-mix(in srgb, var(--kol-color-ab-black) 96%, var(--kol-color-ab-white));
299
+ --kol-oq-ab-100: var(--kol-color-ab-black);
297
300
 
298
301
  --kol-oq-ab-inverse-01: color-mix(in srgb, var(--kol-color-ab-white) 1%, var(--kol-color-ab-black));
299
302
  --kol-oq-ab-inverse-02: color-mix(in srgb, var(--kol-color-ab-white) 2%, var(--kol-color-ab-black));
@@ -310,6 +313,7 @@
310
313
  --kol-oq-ab-inverse-80: color-mix(in srgb, var(--kol-color-ab-white) 80%, var(--kol-color-ab-black));
311
314
  --kol-oq-ab-inverse-88: color-mix(in srgb, var(--kol-color-ab-white) 88%, var(--kol-color-ab-black));
312
315
  --kol-oq-ab-inverse-96: color-mix(in srgb, var(--kol-color-ab-white) 96%, var(--kol-color-ab-black));
316
+ --kol-oq-ab-inverse-100: var(--kol-color-ab-white);
313
317
  }
314
318
 
315
319
  /* system-follow: the block a user who never touched the toggle gets */
@@ -330,6 +334,7 @@
330
334
  --kol-oq-ab-80: color-mix(in srgb, var(--kol-color-ab-black) 80%, var(--kol-color-ab-white));
331
335
  --kol-oq-ab-88: color-mix(in srgb, var(--kol-color-ab-black) 88%, var(--kol-color-ab-white));
332
336
  --kol-oq-ab-96: color-mix(in srgb, var(--kol-color-ab-black) 96%, var(--kol-color-ab-white));
337
+ --kol-oq-ab-100: var(--kol-color-ab-black);
333
338
 
334
339
  --kol-oq-ab-inverse-01: color-mix(in srgb, var(--kol-color-ab-white) 1%, var(--kol-color-ab-black));
335
340
  --kol-oq-ab-inverse-02: color-mix(in srgb, var(--kol-color-ab-white) 2%, var(--kol-color-ab-black));
@@ -346,6 +351,7 @@
346
351
  --kol-oq-ab-inverse-80: color-mix(in srgb, var(--kol-color-ab-white) 80%, var(--kol-color-ab-black));
347
352
  --kol-oq-ab-inverse-88: color-mix(in srgb, var(--kol-color-ab-white) 88%, var(--kol-color-ab-black));
348
353
  --kol-oq-ab-inverse-96: color-mix(in srgb, var(--kol-color-ab-white) 96%, var(--kol-color-ab-black));
354
+ --kol-oq-ab-inverse-100: var(--kol-color-ab-white);
349
355
  }
350
356
  }
351
357
  /* CLASSES — absolute tiers */
@@ -364,6 +370,7 @@
364
370
  .bg-oq-ab-80 { background-color: var(--kol-oq-ab-80); }
365
371
  .bg-oq-ab-88 { background-color: var(--kol-oq-ab-88); }
366
372
  .bg-oq-ab-96 { background-color: var(--kol-oq-ab-96); }
373
+ .bg-oq-ab-100 { background-color: var(--kol-oq-ab-100); }
367
374
 
368
375
  .bg-oq-ab-inverse-01 { background-color: var(--kol-oq-ab-inverse-01); }
369
376
  .bg-oq-ab-inverse-02 { background-color: var(--kol-oq-ab-inverse-02); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.108.0",
3
+ "version": "0.110.0",
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",