@kolkrabbi/kol-theme 0.81.0 → 0.83.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.
@@ -1116,8 +1116,11 @@
1116
1116
  * happening reads as a photograph breathing; a fast one reads as a
1117
1117
  * glitch.
1118
1118
  * ───────────────────────────────────────────────────────────────────── */
1119
- .kol-media-zoom > img,
1120
- .kol-media-zoom > video {
1119
+ /* THE TARGET IS THE WRAPPER'S CHILD, WHATEVER IT IS (CatalogCardFrameAndZoom,
1120
+ * kol-website 2026-08-28): a catalog card whose media is an SVG glyph on a
1121
+ * specimen plate resolves `zoom` true and got the class, the transition and no
1122
+ * motion while this named img/video. Everything but the ring hairline. */
1123
+ .kol-media-zoom > :not(.kol-media-ring) {
1121
1124
  transition: transform 600ms var(--kol-ease-house);
1122
1125
  /* THE ANCHOR IS THE CONSUMER'S (ContentMediaFocusBinding, kol-monitor
1123
1126
  * 2026-08-27): `--kol-media-focus`, bound once on a repo's :root, is where
@@ -1128,16 +1131,14 @@
1128
1131
  }
1129
1132
 
1130
1133
  @media (hover: hover) {
1131
- .group:hover .kol-media-zoom > img,
1132
- .group:hover .kol-media-zoom > video {
1134
+ .group:hover .kol-media-zoom > :not(.kol-media-ring) {
1133
1135
  transform: scale(1.06);
1134
1136
  }
1135
1137
  /* the HERO rung (StackCardHover, 2026-08-27 — user: "that is TOO MUCH
1136
1138
  * ZOOM"): 1.06 on a ~1500px featured thumb is 90px of travel where the
1137
1139
  * 500px list thumbs move 30. 1.02 on the hero is the same pixel travel.
1138
1140
  * `ListingCard size="hero"` wears it; ContentMedia takes zoom="hero". */
1139
- .group:hover .kol-media-zoom.is-hero > img,
1140
- .group:hover .kol-media-zoom.is-hero > video {
1141
+ .group:hover .kol-media-zoom.is-hero > :not(.kol-media-ring) {
1141
1142
  transform: scale(1.02);
1142
1143
  }
1143
1144
  }
@@ -1176,12 +1177,10 @@
1176
1177
  }
1177
1178
 
1178
1179
  @media (prefers-reduced-motion: reduce) {
1179
- .kol-media-zoom > img,
1180
- .kol-media-zoom > video {
1180
+ .kol-media-zoom > :not(.kol-media-ring) {
1181
1181
  transition: none;
1182
1182
  }
1183
- .group:hover .kol-media-zoom > img,
1184
- .group:hover .kol-media-zoom > video {
1183
+ .group:hover .kol-media-zoom > :not(.kol-media-ring) {
1185
1184
  transform: none;
1186
1185
  }
1187
1186
  }
@@ -1327,32 +1326,58 @@
1327
1326
  }
1328
1327
 
1329
1328
  /* ─────────────────────────────────────────────────────────────────────
1330
- * TONE — inverse (ControlToneInverse, kol-website 2026-08-27; user on brand's
1331
- * /icons over a `pageWash` of fg-04: "a flipped version of this color scheme,
1332
- * where the darker is background and grey is the active it would fit better
1333
- * on the light grey" "that would also need to be a variant for the dropdown
1334
- * and the input" — "the active grey can be lighter"). On a washed plane the
1335
- * default grey well reads as a second plate. `tone="inverse"` on ViewToggle
1336
- * (icon) · Dropdown · Input · SearchInput stamps `.kol-tone-inverse`; the rules
1337
- * live HERE, after every default they out-rank, so a consumer never restates
1338
- * them (brand's stopgap did).
1329
+ * TONE — sunken (ControlToneSunken, kol-website 2026-08-28; was "inverse",
1330
+ * ControlToneInverse 2026-08-27). User, on brand's /icons over a `pageWash`:
1331
+ * "a flipped version of this color scheme, where the darker is background and
1332
+ * grey is the active it would fit better on the light grey" and then, on
1333
+ * the name: the control does not INVERT anything, it sits BELOW the plane it
1334
+ * is on `sunken`. ("inverse" already meant four things: `tone` here,
1335
+ * `variant` on Tag/Pill, `theme` on Section, a boolean on Divider.) On a
1336
+ * washed plane the default grey well reads as a second plate, so the set takes
1337
+ * ONE tone: `tone="sunken"` (`inverse` aliased) on ViewToggle (icon) ·
1338
+ * Dropdown · Input · SearchInput · Button · IconFrame · ThemeToggle stamps
1339
+ * `.kol-tone-sunken`; the rules live HERE, after every default they out-rank,
1340
+ * so a consumer never restates them (brand hand-wrote the fill and GUESSED
1341
+ * the ink for its two icon buttons — that fork is what widening the set ends).
1339
1342
  *
1340
- * The chip is `fg-absolute-24` theme-invariant black, as the icon well's
1341
- * active state already was so it darkens on either theme; the active chip
1342
- * is the fg-16 ink wash (ruled on the page); a dark well wants a LIGHTER hover,
1343
- * so the inactive hover is an absolute-white wash.
1343
+ * THE SET: well `fg-absolute-24` (theme-invariant black, darkens either
1344
+ * theme) · active chip `fg-08` (user ruling 2026-08-28, down from the 0.78.1
1345
+ * fg-16) · inactive hover absolute-white @ 8% (a dark well wants a LIGHTER
1346
+ * hover) · ink `fg-96`. `.kol-tone-inverse` stays selected for any class
1347
+ * hand-stamped on the old name.
1344
1348
  * ───────────────────────────────────────────────────────────────────── */
1345
- .kol-view-toggle.kol-tone-inverse { background-color: var(--kol-fg-absolute-24); }
1346
- /* the active chip is the fg-16 INK WASH (user ruling 2026-08-27 on the live page — "why are you using
1347
- * absolute transparent? just use bg-fg-16"; surface-tertiary sat BELOW secondary on the dark ramp):
1348
- * it lifts off the fg-absolute-24 well on both themes */
1349
- .kol-view-toggle.kol-tone-inverse > button[aria-pressed="true"] { background-color: var(--kol-fg-16); }
1350
- .kol-view-toggle.kol-tone-inverse > button:not([aria-pressed="true"]):hover { background-color: color-mix(in srgb, var(--kol-color-absolute-white) 8%, transparent); }
1351
- .kol-control.kol-tone-inverse { background-color: var(--kol-fg-absolute-24); }
1352
- .kol-expand.kol-tone-inverse { background-color: var(--kol-fg-absolute-24); }
1349
+ .kol-view-toggle.kol-tone-sunken, .kol-view-toggle.kol-tone-inverse { background-color: var(--kol-fg-absolute-24); }
1350
+ .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); }
1351
+ .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: color-mix(in srgb, var(--kol-color-absolute-white) 8%, transparent); }
1352
+ .kol-control.kol-tone-sunken, .kol-control.kol-tone-inverse { background-color: var(--kol-fg-absolute-24); }
1353
+ .kol-expand.kol-tone-sunken, .kol-expand.kol-tone-inverse { background-color: var(--kol-fg-absolute-24); }
1353
1354
  /* the trigger: rest and open are its only states — the pin-back rules above
1354
- * paint surface-secondary on hover/active, so the inverse pins its own chip */
1355
- .kol-dd-trigger.kol-tone-inverse,
1356
- .kol-dd-trigger.kol-tone-inverse:not(:disabled):hover,
1357
- .kol-dd-trigger.kol-tone-inverse:not(:disabled):active { background-color: var(--kol-fg-absolute-24); }
1358
- .kol-dd-panel.kol-tone-inverse { background-color: var(--kol-fg-absolute-24); }
1355
+ * paint surface-secondary on hover/active, so the tone pins its own chip */
1356
+ .kol-dd-trigger.kol-tone-sunken, .kol-dd-trigger.kol-tone-inverse,
1357
+ .kol-dd-trigger.kol-tone-sunken:not(:disabled):hover, .kol-dd-trigger.kol-tone-inverse:not(:disabled):hover,
1358
+ .kol-dd-trigger.kol-tone-sunken:not(:disabled):active, .kol-dd-trigger.kol-tone-inverse:not(:disabled):active { background-color: var(--kol-fg-absolute-24); }
1359
+ .kol-dd-panel.kol-tone-sunken, .kol-dd-panel.kol-tone-inverse { background-color: var(--kol-fg-absolute-24); }
1360
+ /* the rest of the set — Button (icon-only especially), IconFrame, ThemeToggle:
1361
+ * the well, transparent edge, fg-96 ink; hover the white wash, pressed the
1362
+ * fg-08 chip — both LAYERED over the well (a gradient image over the fill),
1363
+ * since one background cannot stack two translucent colours */
1364
+ .kol-btn.kol-tone-sunken,
1365
+ .kol-icon-frame.kol-tone-sunken,
1366
+ .kol-theme-toggle.kol-tone-sunken {
1367
+ background-color: var(--kol-fg-absolute-24);
1368
+ border-color: transparent;
1369
+ color: var(--kol-fg-96);
1370
+ }
1371
+ @media (hover: hover) {
1372
+ .kol-btn.kol-tone-sunken:not(.kol-btn-animate):not(:disabled):hover {
1373
+ background-color: var(--kol-fg-absolute-24);
1374
+ background-image: linear-gradient(color-mix(in srgb, var(--kol-color-absolute-white) 8%, transparent), color-mix(in srgb, var(--kol-color-absolute-white) 8%, transparent));
1375
+ color: var(--kol-fg-96);
1376
+ }
1377
+ }
1378
+ .kol-btn.kol-tone-sunken.kol-btn-pressed,
1379
+ .kol-btn.kol-tone-sunken:not(:disabled):active {
1380
+ background-color: var(--kol-fg-absolute-24);
1381
+ background-image: linear-gradient(var(--kol-fg-08), var(--kol-fg-08));
1382
+ color: var(--kol-fg-96);
1383
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.81.0",
3
+ "version": "0.83.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",