@kolkrabbi/kol-theme 0.137.0 → 0.138.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.
@@ -249,7 +249,7 @@
249
249
  /* WEIGHT IS THE VARIANT'S, not the tone's: a tone is a ground, and a ground
250
250
  * must not re-weigh a label — a sunken secondary keeps its 500 (matrix-verified
251
251
  * 2026-09-03, the one regression the first cut had). */
252
- .kol-btn-secondary, .kol-btn-accent, .kol-btn-danger, .kol-btn.kol-tone-secondary { font-weight: 500; }
252
+ .kol-btn-secondary, .kol-btn-accent, .kol-btn-danger, .kol-btn.kol-tone-inverted { font-weight: 500; }
253
253
 
254
254
  .kol-btn:focus-visible {
255
255
  outline: 2px solid var(--kol-focus-ring);
@@ -1112,8 +1112,8 @@ a:hover .icon-hover,
1112
1112
  border-radius: var(--kol-radius-sm);
1113
1113
  padding: 0;
1114
1114
  /* paint from the TONE properties (kol-components-molecules.css, TONE); the
1115
- * variant classes are aliases of the tones, the fallback is `secondary`
1116
- * the frame's default since it was promoted — and a toned wrapper reaches a
1115
+ * variant classes are aliases of the tones, the fallback is the `secondary`
1116
+ * VARIANT's paint (the `inverted` tone) — the frame's default since it was promoted — and a toned wrapper reaches a
1117
1117
  * frame with no variant of its own. No states, as ever. */
1118
1118
  background-color: var(--kol-tone-bg, var(--kol-surface-on-primary));
1119
1119
  color: var(--kol-tone-fg, var(--kol-surface-primary));
@@ -1540,6 +1540,9 @@
1540
1540
  * `default` is not a tone: it is the ABSENCE of one — inherit the wrapper's,
1541
1541
  * else the family's fallback. (An alias of `primary` set on the element would
1542
1542
  * block the inheritance that ask 3 exists for.) `inverse` stays sunken's alias.
1543
+ * SEVEN since 0.138.0: `secondary` paints the page surface and `inverted` is
1544
+ * the text-colour fill the word `secondary` used to mean (tone-secondary-is-
1545
+ * inverse, the line of the user's ruling the first ticket did not carry).
1543
1546
  *
1544
1547
  * The rules live HERE, after every default they out-rank. Sunken's own
1545
1548
  * history — the well, its three-rung ladder, why it was raised until
@@ -1564,7 +1567,37 @@
1564
1567
  --kol-tone-panel-border-w: 0;
1565
1568
  --kol-tone-panel-border: transparent;
1566
1569
  }
1567
- .kol-tone-secondary,
1570
+ /* `secondary` PAINTS THE PAGE SURFACE (tone-secondary-is-inverse, kol-client-olina
1571
+ * 2026-09-03; user: "I told you I wanted primary surface as a tone … that tone
1572
+ * should be called secondary. What is currently secondary should be called
1573
+ * inverted."). 0.134.0 lifted the name from Button's `secondary` VARIANT, which
1574
+ * was already an inverse, and the page's own colour had no tone at all. The
1575
+ * variant keeps its pixels — it aliases `inverted` below — only the tone word
1576
+ * moved. Hover / press are primary's rungs over the page colour. */
1577
+ .kol-tone-secondary {
1578
+ --kol-tone-bg: var(--kol-surface-primary);
1579
+ --kol-tone-image: none;
1580
+ --kol-tone-fg: var(--kol-surface-on-primary);
1581
+ --kol-tone-border: transparent;
1582
+ --kol-tone-hover-bg: var(--kol-oq-08);
1583
+ --kol-tone-hover-image: none;
1584
+ --kol-tone-hover-fg: var(--kol-surface-on-primary);
1585
+ --kol-tone-hover-border: transparent;
1586
+ --kol-tone-active-bg: var(--kol-oq-16);
1587
+ --kol-tone-active-image: none;
1588
+ --kol-tone-pressed-bg: var(--kol-surface-on-primary);
1589
+ --kol-tone-pressed-image: none;
1590
+ --kol-tone-pressed-fg: var(--kol-surface-primary);
1591
+ --kol-tone-panel-bg: var(--kol-surface-primary);
1592
+ --kol-tone-panel-border-w: 0;
1593
+ --kol-tone-panel-border: transparent;
1594
+ }
1595
+ /* `inverted` — the text colour as fill: Button's / IconFrame's `secondary`
1596
+ * variant and the panel's `--secondary`, under the name the user gave it.
1597
+ * (`inverse` is NOT this: it is sunken's alias from 0.117.0, still on one
1598
+ * kol-website call, and stays that until it is dropped — the two words were
1599
+ * one letter apart and a live alias, so the new tone took the user's word.) */
1600
+ .kol-tone-inverted,
1568
1601
  :where(.kol-btn-secondary, .kol-icon-frame-secondary, .kol-dd-panel--secondary) {
1569
1602
  --kol-tone-bg: var(--kol-surface-on-primary);
1570
1603
  --kol-tone-image: none;
@@ -670,26 +670,29 @@
670
670
  .kol-filters-row {
671
671
  container-type: inline-size;
672
672
  }
673
- /* THE TRACK COUNT, COMPUTED ONCE AND READ TWICE (CatalogFilterFirstGroupTrackCount,
673
+ /* THE TRACK COUNT, MEASURED ONCE AND READ TWICE (CatalogFilterFirstGroupTrackCount,
674
674
  * kol-client-olina 2026-09-03). The first group was `(100cqw − 120px) / 6` — one
675
675
  * column of a six-track grid — while the catalog grid asks how many tracks FIT
676
- * (ceiling 6, floor `--kol-catalog-min`): on a capped page at 1280 the grid
677
- * renders five at 165 and the group measured 133, its right edge mid-card.
678
- * The 2026-08-27 "sits over the first card" law was only true at six.
676
+ * (ceiling 6, floor `minColumn`): on a capped page at 1280 the grid renders five
677
+ * at 165 and the group measured 133, its right edge mid-card. The 2026-08-27
678
+ * "sits over the first card" law was only true at six.
679
679
  *
680
- * Both now read one number: the count the grid actually renders
681
- * `min(cols, floor((W + gap) / (min + gap)))`, which is exactly what
682
- * `repeat(auto-fill, minmax(max(min, (W − 5·gap) / 6), 1fr))` resolved to, so
683
- * six-track pages are pixel-identical and narrower ones finally agree.
684
- * `100cqw` is each element's own container the filter row and the catalog
685
- * grid's wrapper are both `inline-size` containers of the page's width.
686
- * `round(down, …)` is CSS Values 4 (Firefox 118 · Chrome 125 · Safari 15.4). */
687
- .kol-filters-first,
688
- .kol-catalog-grid {
689
- --_kol-catalog-n: max(1, min(var(--kol-catalog-cols, 6), round(down, (100cqw + 24px) / (var(--kol-catalog-min, 160px) + 24px), 1)));
690
- }
680
+ * Both read `--kol-catalog-n`, the count the grid actually renders. CatalogPage
681
+ * MEASURES it (a ResizeObserver on the grid — `min(cols, floor((W + gap) /
682
+ * (min + gap)))`, exactly what `repeat(auto-fill, minmax())` resolved to) and
683
+ * publishes it on the page, so six-track pages are pixel-identical and narrower
684
+ * ones agree. Unset a ContentFilters outside CatalogPage falls back to 6,
685
+ * the pre-0.137.0 formula.
686
+ *
687
+ * ⚠️ 0.137.0 computed the count HERE with `round(down, (100cqw + 24px) / (min +
688
+ * 24px), 1)`. Chromium resolves a `<length> / <length>` division to a number;
689
+ * Firefox does not, so the declaration was invalid at computed-value time,
690
+ * `repeat(var(--n))` fell to `none`, and every catalog rendered ONE column — a
691
+ * ~1500px card (user: "is this supposed to be a joke? huge card"). Pulled the
692
+ * same hour; the count is measured in JS now, and CSS does one division by a
693
+ * NUMBER, which is Level 3 and everywhere. */
691
694
  .kol-filters-first {
692
695
  flex: none;
693
- width: calc((100cqw - (var(--_kol-catalog-n) - 1) * 24px) / var(--_kol-catalog-n));
696
+ width: calc((100cqw - (var(--kol-catalog-n, 6) - 1) * 24px) / var(--kol-catalog-n, 6));
694
697
  }
695
698
 
@@ -79,17 +79,19 @@
79
79
 
80
80
  /* ── CatalogPage ────────────────────────────────────────────────────────── */
81
81
 
82
- /* THE CATALOG GRID — a ceiling with a floor: up to `--kol-catalog-cols` (6)
83
- * tracks, none narrower than `--kol-catalog-min` (160; `CatalogPage minColumn`
84
- * sets it), gap 24. The count `--_kol-catalog-n` is computed in
85
- * kol-components-organisms.css and shared with `.kol-filters-first`, so the
86
- * filter row's first group is one track of THIS grid at every width the
87
- * grid used to be an inline `auto-fill` that resolved to the same tracks but
88
- * told nobody how many (CatalogFilterFirstGroupTrackCount, 2026-09-03). */
82
+ /* THE CATALOG GRID — a ceiling with a floor: up to 6 tracks, none narrower
83
+ * than `CatalogPage minColumn` (160), gap 24. The count is `--kol-catalog-n`,
84
+ * MEASURED by CatalogPage (a ResizeObserver on this element) and published on
85
+ * the page, where `.kol-filters-first` reads the same number — so the filter
86
+ * row's first group is one track of THIS grid at every width. The grid used to
87
+ * be an inline `auto-fill` that resolved to the same tracks but told nobody
88
+ * how many (CatalogFilterFirstGroupTrackCount, 2026-09-03). 0.137.0 computed
89
+ * the count in CSS with a length ÷ length inside `round()`, which Firefox
90
+ * rejects — one column, huge card — see kol-components-organisms.css. */
89
91
  .kol-catalog-grid {
90
92
  display: grid;
91
93
  gap: 24px;
92
- grid-template-columns: repeat(var(--_kol-catalog-n), minmax(0, 1fr));
94
+ grid-template-columns: repeat(var(--kol-catalog-n, 6), minmax(0, 1fr));
93
95
  }
94
96
 
95
97
  /* ── NavRail ────────────────────────────────────────────────────────────── */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.137.0",
3
+ "version": "0.138.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",