@kolkrabbi/kol-theme 0.18.0 → 0.19.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.
@@ -892,8 +892,16 @@ a:hover .icon-hover,
892
892
  * between. `sm` is the default and carries no class — it's on .kol-icon-frame
893
893
  * above. `full` is a deliberate exception to the hard 4px repo invariant,
894
894
  * because a round frame is its own chrome idiom (edge-straddling controls,
895
- * avatars, status dots) rather than a radius tweak. */
896
- .kol-icon-frame-radius-full { border-radius: 9999px; }
895
+ * avatars, status dots) rather than a radius tweak.
896
+ *
897
+ * Shared with `.kol-btn-radius-full` (component 0.20.0): Button gained the same
898
+ * two-value `radius` prop, and an icon-only Button IS this control with states.
899
+ * ONE rule rather than a second copy of the value — no --kol-* token holds a
900
+ * full round today (checked, zero hits), and inventing one for a single value
901
+ * used by one rule adds a name without adding a source of truth. If such a
902
+ * token ever lands beside --kol-radius-sm, this one selector reads it. */
903
+ .kol-icon-frame-radius-full,
904
+ .kol-btn-radius-full { border-radius: 9999px; }
897
905
 
898
906
  /* pinned squares — the box never moves with glyph size (user law 2026-07-28) */
899
907
  .kol-icon-frame-sm { width: 28px; height: 28px; }
@@ -537,6 +537,58 @@
537
537
  overflow-y: auto;
538
538
  }
539
539
 
540
+ /* Thumb — the tile's media box. It is the positioning context for the video
541
+ * fallback below, which is the only reason it carries `position`. */
542
+ .kol-media-thumb {
543
+ position: relative;
544
+ width: 100%;
545
+ height: 100%;
546
+ }
547
+
548
+ /* A blank square must never be the resting state (lobby/MediaLibraryVideoFallback,
549
+ * filed from kol-website 2026-08-01, quoting the consumer this replaced).
550
+ *
551
+ * A <video> paints NOTHING until a frame decodes — so on a slow link, or a codec
552
+ * the browser cannot decode at all, a video tile is an empty grey box with no
553
+ * name and no type marker, and the page reads as broken rather than as loading.
554
+ * 222 of the 433 objects in the reference bucket are video/mp4.
555
+ *
556
+ * This is the <img alt> equivalent: a play glyph and the filename, sitting
557
+ * BEHIND the video and revealed only while it has nothing to show. The video
558
+ * covers it the moment a frame lands, so a decoding tile never flashes it.
559
+ *
560
+ * NB the loading strategy is deliberately untouched. The brief probed
561
+ * preload=metadata + #t= against preload=auto + seek and BOTH timed out
562
+ * headless (no h264 decoder), so that test discriminates nothing and no
563
+ * evidence exists either way. The fallback needs no decoder to justify it. */
564
+ .kol-media-thumb-fallback {
565
+ position: absolute;
566
+ inset: 0;
567
+ display: flex;
568
+ flex-direction: column;
569
+ align-items: center;
570
+ justify-content: center;
571
+ gap: var(--kol-spacing-2);
572
+ padding-inline: var(--kol-spacing-3);
573
+ text-align: center;
574
+ color: var(--kol-fg-48);
575
+ pointer-events: none;
576
+ }
577
+
578
+ .kol-media-thumb-fallback > span {
579
+ max-width: 100%;
580
+ overflow: hidden;
581
+ text-overflow: ellipsis;
582
+ white-space: nowrap;
583
+ }
584
+
585
+ /* Painted — the video has a frame, so the fallback stops being the tile's
586
+ * resting state. Kept in the layout box (opacity, not display) so nothing
587
+ * reflows when the first frame arrives. */
588
+ .kol-media-thumb-fallback[data-painted='true'] {
589
+ opacity: 0;
590
+ }
591
+
540
592
  /* Sortable header — a real button inside the <th> so it is keyboard-reachable.
541
593
  * The glyph is always in the layout box (opacity, not display) so the header
542
594
  * does not reflow on first sort. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.18.0",
3
+ "version": "0.19.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",