@kolkrabbi/kol-theme 0.115.0 → 0.117.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.
package/kol-animation.css CHANGED
@@ -279,12 +279,21 @@
279
279
  * showed nothing at 3% while dark UI screenshots beside them read correctly.
280
280
  * The card publishes `--kol-card-feature-zoom` from its `zoom` prop; 1.03 is
281
281
  * the fallback, so nothing moves for anyone who does not set it. */
282
- .kol-card-feature:hover .kol-card-feature-visual {
282
+ /* ONE TREATMENT, TWO WAYS IN (CardSetInViewAttention, kol-website 2026-08-31).
283
+ * `data-attention` is stamped by the card when it holds the viewport's centre on
284
+ * a coarse pointer, and it is added to the SAME rule the hover uses rather than
285
+ * given rules of its own — two parallel sets would drift, and the whole reason
286
+ * this state exists is that variance was already costing more than the
287
+ * behaviour. On a phone a card is an anchor: a tap navigates, so hover was never
288
+ * reachable and the zoom simply never fired. */
289
+ .kol-card-feature:hover .kol-card-feature-visual,
290
+ .kol-card-feature[data-attention] .kol-card-feature-visual {
283
291
  transform: scale(var(--kol-card-feature-zoom, 1.03));
284
292
  }
285
293
  @media (prefers-reduced-motion: reduce) {
286
294
  .kol-card-feature-visual { transition: none; }
287
- .kol-card-feature:hover .kol-card-feature-visual { transform: none; }
295
+ .kol-card-feature:hover .kol-card-feature-visual,
296
+ .kol-card-feature[data-attention] .kol-card-feature-visual { transform: none; }
288
297
  }
289
298
 
290
299
  /* Media hover zoom — opt-in via `mediaHover` (SectionSplit ruling, 2026-08-15).
@@ -1342,8 +1342,15 @@ a.kol-icon-frame {
1342
1342
  * (ARCHITECTURE §5). The height pin travels with the size: Input pins its inner
1343
1343
  * field to the token's line-height (h-4 / h-[18px] / h-[22px]), so a 16px face
1344
1344
  * in an unlifted 16px box would clip. */
1345
+ /* `.kol-control--bare` is a MARKER, not chrome (OverlaySearchFieldZoomsIOS,
1346
+ * 2026-09-01): SearchInput's `bare` body plan — the overlay palette's field —
1347
+ * sits in a plain <label>, outside both shells, and was the field that put a
1348
+ * whole mobile review in a zoomed page. The marker carries no rules of its
1349
+ * own; it exists so the floor below keys on every body plan the DS ships,
1350
+ * including the chrome-less one. */
1345
1351
  @media (pointer: coarse) {
1346
1352
  .kol-control input,
1353
+ .kol-control--bare input,
1347
1354
  .kol-expand input {
1348
1355
  font-size: 16px;
1349
1356
  line-height: 22px;
@@ -852,10 +852,12 @@
852
852
  /* LOOK ONLY — the call site owns the box. Three scrims exist and two are
853
853
  * `fixed inset-0` while one is `absolute inset-0`; baking position in would
854
854
  * have forced a wrong one on two of them. The class owns what was drifting:
855
- * the tint (60 / 50 / 50 across three files) and the blur. */
855
+ * the tint (60 / 50 / 50 across three files).
856
+ * NO BLUR (user ruling 2026-09-01, OverlayScrimBlur): the 1px blur bought a
857
+ * compositing layer on every overlay open, on a phone, for a separation the
858
+ * 60% tint already carries. */
856
859
  .kol-overlay-scrim {
857
860
  background-color: color-mix(in srgb, #000 60%, transparent);
858
- backdrop-filter: blur(1px);
859
861
  }
860
862
 
861
863
  .kol-overlay-panel {
@@ -866,8 +868,8 @@
866
868
  /* NO BORDER, NO SHADOW (user 2026-08-01). Both were tried and both were
867
869
  * wrong: the shadow was another product's floating-card idiom, and the
868
870
  * hairline left an empty palette reading as a bordered empty box. The SCRIM
869
- * is the separation — a 60% tint plus blur is already a stronger edge than
870
- * an 8%-opacity line. */
871
+ * is the separation — a 60% tint is already a stronger edge than an
872
+ * 8%-opacity line. */
871
873
  /* `sm` — the radius this repo's chrome actually uses. */
872
874
  border-radius: var(--kol-radius-sm);
873
875
  /* NO SHADOW (user ruling 2026-08-01). The border and the scrim already
@@ -968,6 +970,26 @@
968
970
  min-height: var(--kol-row-h);
969
971
  }
970
972
 
973
+ /* fixed BELOW the md container only, the floor above it
974
+ * (ContentRowShowcaseImageDrivenHeight, 2026-09-01): the showcase row's height
975
+ * is a function of the image — thumb + padding — and content fits inside it.
976
+ * `overflow: hidden` is deliberate here, not the silent-loss case: the rung is
977
+ * the design, the text truncates by ramp, and the tags line goes single-row
978
+ * below md so the cut lands on the chips. Released at md, where the floor in
979
+ * the container query below resumes. */
980
+ .kol-row--fixed-sm {
981
+ height: var(--kol-row-h-sm);
982
+ min-height: var(--kol-row-h-sm);
983
+ overflow: hidden;
984
+ }
985
+ @container (min-width: 768px) {
986
+ .kol-row--fixed-sm {
987
+ height: auto;
988
+ min-height: var(--kol-row-min-h-md, var(--kol-row-min-h));
989
+ overflow: visible;
990
+ }
991
+ }
992
+
971
993
  /* the divider is its OWN longhand, declared after the shorthand above so it
972
994
  * wins on order — `default`'s bottom rule is not the same thing as a framed
973
995
  * variant's border, and one property cannot carry both. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.115.0",
3
+ "version": "0.117.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",