@felloinnovations/brand-kit 0.5.0 → 0.5.1

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.
Files changed (59) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +24 -0
  3. package/README.md +6 -4
  4. package/design-system/01-how-claude-decides.md +1 -1
  5. package/design-system/03-colour.md +3 -2
  6. package/design-system/08-choosing-components.md +1 -1
  7. package/design-system/09-charts.md +1 -1
  8. package/design-system/10-patterns.md +1 -1
  9. package/design-system/13-motion.md +3 -3
  10. package/design-system/17-decisions.md +10 -0
  11. package/design-system/components/CheckRow/README.md +1 -1
  12. package/design-system/components/CheckRow/preview.html +1 -1
  13. package/design-system/components/CheckRow/style.css +1 -1
  14. package/design-system/components/KanbanBoard/README.md +1 -1
  15. package/design-system/components/KanbanBoard/style.css +1 -1
  16. package/design-system/components/ListDetail/preview.html +1 -1
  17. package/design-system/components/Matrix/README.md +1 -1
  18. package/design-system/components/Matrix/preview.html +1 -1
  19. package/design-system/components/Motion/README.md +2 -2
  20. package/design-system/components/Motion/preview.html +8 -8
  21. package/design-system/components/README.md +1 -1
  22. package/design-system/components/ScoreHero/README.md +2 -2
  23. package/design-system/components/ScoreHero/style.css +1 -1
  24. package/design-system/components/ShareBar/README.md +1 -1
  25. package/design-system/components/ShareBar/style.css +1 -1
  26. package/design-system/components/Skeleton/README.md +17 -16
  27. package/design-system/components/Skeleton/preview.html +1 -1
  28. package/design-system/components/Skeleton/style.css +9 -14
  29. package/design-system/components/Starter/README.md +1 -1
  30. package/design-system/components/Starter/preview.html +1 -1
  31. package/design-system/components/Table/README.md +1 -1
  32. package/design-system/components/Table/preview.html +1 -1
  33. package/design-system/components/Table/style.css +1 -1
  34. package/design-system/components/TickStrip/README.md +1 -1
  35. package/design-system/components/TickStrip/preview.html +1 -1
  36. package/design-system/components/TickStrip/style.css +1 -1
  37. package/design-system/components/Timeline/README.md +1 -1
  38. package/design-system/components/Well/README.md +1 -1
  39. package/design-system/components/Well/style.css +2 -2
  40. package/design-system/components/_house.css +1 -1
  41. package/design-system/components/bundle.css +18 -23
  42. package/design-system/tokens.json +3 -7
  43. package/dist/fello-core.css +2 -2
  44. package/dist/fello.css +2 -2
  45. package/dist/fello.scoped.css +2 -2
  46. package/dist/index.d.ts +2 -2
  47. package/dist/scoped.js +2 -2
  48. package/dist/tokens.d.ts +8 -8
  49. package/dist/tokens.js +8 -8
  50. package/package.json +1 -1
  51. package/tokens/_dark.css +1 -2
  52. package/tokens/_product.css +11 -11
  53. package/tokens/palettes.ts +1 -1
  54. package/tokens/shadcn-compat.css +1 -1
  55. package/tokens/shadcn-compat.hsl.css +1 -1
  56. package/tokens/tokens.css +10 -15
  57. package/tokens/tokens.md +4 -5
  58. package/tokens/tokens.root.css +10 -15
  59. package/tokens/tokens.ts +9 -9
@@ -46,7 +46,7 @@
46
46
  </div>
47
47
 
48
48
  <div class="ws-stack">
49
- <span class="ws-muted">Loading: the ticks as a ghost with the chart colours' sweep (still with reduced motion)</span>
49
+ <span class="ws-muted">Loading: the ticks as a ghost with the shimmer passing over them (still with reduced motion)</span>
50
50
  <div class="ws-tick-strip ws-tick-strip--lg ws-tick-strip--loading" style="--n: 50;" aria-hidden="true"><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span><span class="ws-tick-strip__tick"></span></div>
51
51
  </div>
52
52
 
@@ -24,7 +24,7 @@
24
24
  .ws-tick-strip__label { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--ws-text-micro); line-height: var(--space-sm-plus); color: var(--color-text-muted); font-variant-numeric: tabular-nums; }
25
25
  .ws-tick-strip__marker { position: absolute; top: 0; left: var(--at, 0%); display: flex; align-items: center; gap: var(--space-xxs-plus); white-space: nowrap; font-size: var(--ws-text-micro); font-weight: 500; line-height: var(--space-sm-plus); color: var(--ws-word-needs); }
26
26
  .ws-tick-strip__marker::before { content: ""; width: var(--space-xs); height: var(--space-xs); border-radius: var(--radius-full); background: var(--ws-chart-under-half); }
27
- /* Loading (North): the ticks as a still ghost, the chart colours' sweep passing over them. */
27
+ /* Loading (North): the ticks as a still ghost, the shimmer passing over them. */
28
28
  .ws-tick-strip--loading { --pitch: calc((100% + var(--g)) / var(--n)); background: var(--ws-shimmer); background-size: 300% 100%; -webkit-mask-image: repeating-linear-gradient(90deg, var(--ws-mask) 0 calc(var(--pitch) - var(--g)), transparent 0 var(--pitch)); mask-image: repeating-linear-gradient(90deg, var(--ws-mask) 0 calc(var(--pitch) - var(--g)), transparent 0 var(--pitch)); }
29
29
  .ws-tick-strip--loading > * { visibility: hidden; }
30
30
  @media (prefers-reduced-motion: no-preference) {
@@ -40,7 +40,7 @@ A vertical feed of what happened, grouped by day, a coloured dot on a fine line
40
40
  - **An entry that opens something**: the title is a link (`a.ws-timeline__title`, medium), underlined on hover; on
41
41
  touch its box grows to 24 without moving anything.
42
42
  - **Empty**: the same card, a sentence ("Nothing here yet") in place of the list; never a bare line with no dots.
43
- - **Loading**: ghost lines where the titles go, in the chart colours' sweep (`__ghost ws-shimmer`), the dots plain grey;
43
+ - **Loading**: ghost lines where the titles go under the shimmer (`__ghost ws-shimmer`), the dots plain grey;
44
44
  still under reduced motion.
45
45
  - **Long title**: wraps; a history entry is read once and should say the whole thing.
46
46
  - **Many entries**: the feed scrolls inside its card past a comfortable length; it is never paginated.
@@ -42,7 +42,7 @@ The system's grey well: a plate holding a short list of pressable rows, for ever
42
42
  - **Focus**: the 2 px navy ring drawn inside the row (`--ws-focus-*`), since a row cannot grow an outer ring without
43
43
  touching its neighbours.
44
44
  - **Pressed**: `--ws-surface-press` at once; rows never scale under a press, they only tint.
45
- - **Busy**: the well carries `aria-busy`, and rows still loading show a shimmer line in North's chart colours
45
+ - **Busy**: the well carries `aria-busy`, and rows still loading show a shimmer line, one quiet grey
46
46
  (`hidden` rows), present for layout and invisible to a screen reader. Under reduced motion the line stands still.
47
47
  - **Disabled**: not a state a well row carries; a row that cannot be used yet is not shown.
48
48
  - **Empty**: a well with no suggestions is not rendered; there is no empty well.
@@ -16,7 +16,7 @@
16
16
  .ws-well-row__words { display: flex; min-width: 0; flex: 1; flex-direction: column; }
17
17
  .ws-well-row__words > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
18
18
  .ws-well-row__chevron { flex-shrink: 0; width: var(--ws-icon); height: var(--ws-icon); color: var(--color-text-muted); }
19
- /* Busy: a shimmer line in each row (North's chart colours), sized where used; under reduced motion a still ghost in
20
- the ghost grey (the sweep's frozen frame showed its pink edge). */
19
+ /* Busy: a shimmer line in each row, sized where used; under reduced motion a still ghost in the hover grey, never a
20
+ frozen frame of the sweep. */
21
21
  .ws-well-row__placeholder { height: var(--space-sm); border-radius: var(--ws-radius-chip); background: var(--ws-well-hover); }
22
22
  @media (prefers-reduced-motion: no-preference) { .ws-well-row__placeholder { background: var(--ws-shimmer); background-size: 300% 100%; animation: ws-shimmer var(--ws-loop-shimmer) var(--ws-ease-shimmer) infinite; } }
@@ -237,7 +237,7 @@ body { margin: 0; background: var(--color-bg-page); color: var(--color-text-body
237
237
  .ws-settle { animation: ws-settle var(--ws-duration-settle) var(--ws-ease-soft) backwards; animation-delay: calc(var(--ws-i, 0) * var(--ws-stagger-detail)); }
238
238
  .ws-shimmer { animation: ws-shimmer var(--ws-loop-shimmer) var(--ws-ease-shimmer) infinite; }
239
239
  }
240
- /* Loading (North): a ghost block in the chart colours' sweep. Give it the size of what it stands for; its words, if
240
+ /* Loading (North): a ghost block under the shimmer. Give it the size of what it stands for; its words, if
241
241
  any, are transparent. Under reduced motion it is a still ghost. */
242
242
  .ws-shimmer { border-radius: var(--ws-radius-bar); background: var(--ws-shimmer); background-size: 300% 100%; color: transparent; }
243
243
  /* Hover tint (North): Seth's navy wash over whatever ground, a colour change, never a lift. --faint for a list row,
@@ -238,7 +238,7 @@ body { margin: 0; background: var(--color-bg-page); color: var(--color-text-body
238
238
  .ws-settle { animation: ws-settle var(--ws-duration-settle) var(--ws-ease-soft) backwards; animation-delay: calc(var(--ws-i, 0) * var(--ws-stagger-detail)); }
239
239
  .ws-shimmer { animation: ws-shimmer var(--ws-loop-shimmer) var(--ws-ease-shimmer) infinite; }
240
240
  }
241
- /* Loading (North): a ghost block in the chart colours' sweep. Give it the size of what it stands for; its words, if
241
+ /* Loading (North): a ghost block under the shimmer. Give it the size of what it stands for; its words, if
242
242
  any, are transparent. Under reduced motion it is a still ghost. */
243
243
  .ws-shimmer { border-radius: var(--ws-radius-bar); background: var(--ws-shimmer); background-size: 300% 100%; color: transparent; }
244
244
  /* Hover tint (North): Seth's navy wash over whatever ground, a colour change, never a lift. --faint for a list row,
@@ -1456,7 +1456,7 @@ a.ws-card__list-row:focus-visible, button.ws-card__list-row:focus-visible { outl
1456
1456
  .ws-check-row__line > .ws-check-row__chev { transition: transform var(--ws-spring-fold-duration) var(--ws-spring-fold); }
1457
1457
  .ws-check-row__ticks > b { transform-origin: bottom; animation: ws-grow-up var(--ws-duration-fill) var(--ws-ease-settle) backwards; animation-delay: calc(sibling-index() * var(--ws-ripple)); }
1458
1458
  }
1459
- /* Loading: the name and the ticks as ghosts in the chart colours' sweep (add ws-shimmer). */
1459
+ /* Loading: the name and the ticks as ghosts under the shimmer (add ws-shimmer). */
1460
1460
  .ws-check-row__ghost { display: block; height: calc(var(--space-xs) + var(--space-3xs)); border-radius: var(--ws-radius-bar); background: var(--ws-track); }
1461
1461
  .ws-check-row__ghost.ws-shimmer, .ws-check-row__ticks.ws-shimmer { background: var(--ws-shimmer); background-size: 300% 100%; }
1462
1462
 
@@ -2299,7 +2299,7 @@ a.ws-goal-bars__label { border-radius: var(--ws-radius-chip); }
2299
2299
  .ws-kanban-board__who { display: flex; align-items: center; gap: var(--space-xs); min-width: 0; }
2300
2300
  .ws-kanban-board__meta { font-size: var(--ws-text-control); line-height: var(--ws-leading-control); color: var(--color-text-muted); }
2301
2301
  .ws-kanban-board__empty { padding: var(--space-md) var(--space-xs); text-align: center; font-size: var(--ws-text-control); line-height: var(--ws-leading-control); color: var(--color-text-muted); }
2302
- /* Loading: a ghost the height of a card, in the chart colours' sweep (add ws-shimmer). */
2302
+ /* Loading: a ghost the height of a card under the shimmer (add ws-shimmer). */
2303
2303
  .ws-kanban-board__ghost { display: block; height: calc(var(--ws-card-padding) * 2 + var(--ws-control-h-sm) + var(--space-xxs) + var(--ws-leading-control)); border-radius: var(--ws-radius-card); background: var(--ws-track); }
2304
2304
  .ws-kanban-board__ghost.ws-shimmer { background: var(--ws-shimmer); background-size: 300% 100%; }
2305
2305
  /* A board page (K16): the board takes the rest of a height-bound column (the shell's body, a fill page), every column
@@ -3365,7 +3365,7 @@ a.ws-plate__foot:focus-visible { outline-offset: calc(var(--ws-focus-width) * -1
3365
3365
  .ws-score-hero--needs-work { --tone-word: var(--ws-word-needs-work); }
3366
3366
  .ws-score-hero--needs-work .ws-tick-strip { --tone: var(--ws-rating-needs-work); }
3367
3367
  .ws-score-hero--none { --tone-word: var(--color-text-muted); }
3368
- /* Loading: ghost blocks the size of what they stand for, in the chart colours' sweep. */
3368
+ /* Loading: ghost blocks the size of what they stand for under the shimmer. */
3369
3369
  .ws-score-hero__ghost { width: calc(var(--space-6xl) * 2); max-width: 100%; height: var(--ws-leading-score); }
3370
3370
  .ws-score-hero__ghost--line { width: min(100%, calc(var(--space-9xl) * 2)); height: var(--ws-leading-section); }
3371
3371
  @container (max-width: 26rem) {
@@ -3423,7 +3423,7 @@ a.ws-plate__foot:focus-visible { outline-offset: calc(var(--ws-focus-width) * -1
3423
3423
  .ws-share-bar__item::before { content: ""; position: absolute; inset-inline-start: 0; top: calc((var(--space-md) - var(--space-xs)) / 2); width: var(--space-xs); height: var(--space-xs); border-radius: var(--ws-radius-chip); background: var(--tone, var(--ws-chart-rest)); }
3424
3424
  /* Seth's key is one tone: the figure keeps the words' weight and colour, only its numerals are tabular. */
3425
3425
  .ws-share-bar__item b { font-weight: inherit; color: inherit; font-variant-numeric: tabular-nums; }
3426
- /* Loading: the bar as a ghost in the chart colours' sweep, the key held back. */
3426
+ /* Loading: the bar as a ghost under the shimmer, the key held back. */
3427
3427
  .ws-share-bar--loading .ws-share-bar__bar { background: var(--ws-shimmer); background-size: 300% 100%; }
3428
3428
  @media (prefers-reduced-motion: no-preference) {
3429
3429
  .ws-share-bar--loading .ws-share-bar__bar { animation: ws-shimmer var(--ws-loop-shimmer) var(--ws-ease-shimmer) infinite; }
@@ -3524,28 +3524,23 @@ a.ws-side-list__row:focus-visible::after, button.ws-side-list__row:focus-visible
3524
3524
  .ws-side-list__pick[aria-current="true"] { transition: none; }
3525
3525
  }
3526
3526
  }
3527
- /* ---- Skeleton: ghost shapes of what is coming, with North's shimmer in the chart colours running over them; sized where used ---- */
3528
- /* A ghost block: the shimmer (the warm grey, a pass of salmon, purple and teal) at 300 %, 1.8 s. It replaces the
3529
- breathing pulse (ws-working-slow), which read as blank. Under reduced motion it is a still ghost in North's ghost grey
3530
- (the chart ghost's), never a frozen frame of the sweep: at rest the 300 % gradient showed its pink edge. */
3527
+ /* ---- Skeleton: ghost shapes of what is coming, with North's shimmer, one quiet grey, running over them; sized where used ---- */
3528
+ /* A ghost block: the shimmer (the ghost grey with a lighter pass of the same grey) at 300 %, 1.8 s. It replaces the
3529
+ breathing pulse (ws-working-slow), which read as blank. Under reduced motion it is the still ghost, the same grey
3530
+ (North's ghost, the chart ghost's), never a frozen frame of the sweep. The ghost shows on the tray too (a card's foot,
3531
+ a band), so it needs no ground of its own there. */
3531
3532
  .ws-skeleton { border-radius: var(--ws-radius-control); background: var(--ws-ghost); }
3532
3533
  .ws-skeleton--line { height: var(--space-sm); }
3533
3534
  .ws-skeleton--title { height: var(--ws-leading-title); }
3534
3535
  /* A button's place (North's 116 x 38 placeholder, on the grid: 120 x 36, 6 px corners). */
3535
3536
  .ws-skeleton--button { width: var(--space-7xl); height: var(--ws-control-h-md); border-radius: var(--ws-radius-row); }
3536
- /* On the tray (a card's foot) and in a band the ghost's grey was the ground's own (1.04:1 on the tray in light, the same
3537
- grey as the track in dark), so the placeholder vanished: there it is built on the hover grey, with the dark theme's
3538
- recipe of 14 % salmon, purple and teal passes, on the token's stops (plain to 34 % and from 66 %, so the loop's end frames show no tint). */
3539
- :is(.ws-card__foot, .ws-band) .ws-skeleton { --ws-shimmer: linear-gradient(100deg, var(--ws-well-hover) 0 34%, color-mix(in srgb, var(--ws-chart-under-half) 14%, var(--ws-well-hover)) 44%, color-mix(in srgb, var(--ws-chart-past-half) 14%, var(--ws-well-hover)) 50%, color-mix(in srgb, var(--color-stat-positive) 14%, var(--ws-well-hover)) 56%, var(--ws-well-hover) 66% 100%); }
3540
- @media (prefers-reduced-motion: no-preference) { .ws-skeleton { background: var(--ws-shimmer); background-size: 300% 100%; animation: ws-shimmer var(--ws-loop-shimmer) var(--ws-ease-shimmer) infinite; } }
3541
3537
  .ws-skeleton__head { display: flex; flex-direction: column; gap: var(--space-xs); padding: var(--ws-card-inset); }
3542
3538
  .ws-skeleton__body { display: flex; flex-direction: column; gap: var(--space-xs); padding: 0 var(--ws-card-inset) var(--space-md); }
3543
- /* A chart still loading: its empty shapes in a quiet ghost grey, and one colour band (salmon, purple, teal) passing
3544
- over the whole drawing in blend mode colour, so the bars take the band's hue as it crosses them. */
3545
- .ws-skeleton__chart { position: relative; display: flex; align-items: flex-end; gap: var(--space-xxs); height: var(--space-8xl); }
3539
+ /* A chart still loading: its empty shapes, each a ghost with the same sweep as every other ghost. North's colour band
3540
+ over the drawing is gone (0.5.1): loaders are one neutral tone, and a neutral band in blend mode colour paints nothing. */
3541
+ .ws-skeleton__chart { display: flex; align-items: flex-end; gap: var(--space-xxs); height: var(--space-8xl); }
3546
3542
  .ws-skeleton__chart > * { flex: 1 1 0; min-width: 0; border-radius: var(--ws-radius-bar) var(--ws-radius-bar) 0 0; background: var(--ws-ghost); }
3547
- .ws-skeleton__chart::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(100deg, transparent 28%, var(--ws-chart-under-half) 40%, var(--ws-chart-past-half) 50%, var(--color-stat-positive) 60%, transparent 72%); background-size: 300% 100%; mix-blend-mode: color; opacity: 0; }
3548
- @media (prefers-reduced-motion: no-preference) { .ws-skeleton__chart::after { opacity: 0.85; animation: ws-shimmer var(--ws-loop-shimmer) var(--ws-ease-shimmer) infinite; } }
3543
+ @media (prefers-reduced-motion: no-preference) { :is(.ws-skeleton, .ws-skeleton__chart > *) { background: var(--ws-shimmer); background-size: 300% 100%; animation: ws-shimmer var(--ws-loop-shimmer) var(--ws-ease-shimmer) infinite; } }
3549
3544
  /* ---- Slider: a native range in the house's navy (Ignite's, 3 Nov): the browser's own control, so the keyboard, touch
3550
3545
  and a screen reader work as they should; accent-color the navy act, 24 px tall (40 on touch), its value said in words
3551
3546
  at the right of its label, the two ends named under it when they help. ---- */
@@ -3897,7 +3892,7 @@ a.ws-stat-tiles__foot:focus-visible { outline-offset: calc(var(--ws-focus-width)
3897
3892
  .ws-table .ws-table__more { display: inline-flex; }
3898
3893
  .ws-table .ws-table__name { min-width: 40cqi; white-space: normal; }
3899
3894
  }
3900
- /* Loading: a ghost bar in each cell, in the chart colours' sweep (add ws-shimmer), the head shown at once. */
3895
+ /* Loading: a ghost bar in each cell under the shimmer (add ws-shimmer), the head shown at once. */
3901
3896
  .ws-table__placeholder { height: calc(var(--space-xs) + var(--space-3xs)); border-radius: var(--ws-radius-bar); background: var(--ws-track); }
3902
3897
  .ws-table__placeholder.ws-shimmer { background: var(--ws-shimmer); background-size: 300% 100%; }
3903
3898
  /* Empty: the same card, a sentence and the act that clears the filter. */
@@ -4013,7 +4008,7 @@ a.ws-stat-tiles__foot:focus-visible { outline-offset: calc(var(--ws-focus-width)
4013
4008
  .ws-tick-strip__label { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--ws-text-micro); line-height: var(--space-sm-plus); color: var(--color-text-muted); font-variant-numeric: tabular-nums; }
4014
4009
  .ws-tick-strip__marker { position: absolute; top: 0; left: var(--at, 0%); display: flex; align-items: center; gap: var(--space-xxs-plus); white-space: nowrap; font-size: var(--ws-text-micro); font-weight: 500; line-height: var(--space-sm-plus); color: var(--ws-word-needs); }
4015
4010
  .ws-tick-strip__marker::before { content: ""; width: var(--space-xs); height: var(--space-xs); border-radius: var(--radius-full); background: var(--ws-chart-under-half); }
4016
- /* Loading (North): the ticks as a still ghost, the chart colours' sweep passing over them. */
4011
+ /* Loading (North): the ticks as a still ghost, the shimmer passing over them. */
4017
4012
  .ws-tick-strip--loading { --pitch: calc((100% + var(--g)) / var(--n)); background: var(--ws-shimmer); background-size: 300% 100%; -webkit-mask-image: repeating-linear-gradient(90deg, var(--ws-mask) 0 calc(var(--pitch) - var(--g)), transparent 0 var(--pitch)); mask-image: repeating-linear-gradient(90deg, var(--ws-mask) 0 calc(var(--pitch) - var(--g)), transparent 0 var(--pitch)); }
4018
4013
  .ws-tick-strip--loading > * { visibility: hidden; }
4019
4014
  @media (prefers-reduced-motion: no-preference) {
@@ -4474,7 +4469,7 @@ a.ws-timeline__title { display: block; font-weight: 500; text-decoration: none;
4474
4469
  .ws-well-row__words { display: flex; min-width: 0; flex: 1; flex-direction: column; }
4475
4470
  .ws-well-row__words > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4476
4471
  .ws-well-row__chevron { flex-shrink: 0; width: var(--ws-icon); height: var(--ws-icon); color: var(--color-text-muted); }
4477
- /* Busy: a shimmer line in each row (North's chart colours), sized where used; under reduced motion a still ghost in
4478
- the ghost grey (the sweep's frozen frame showed its pink edge). */
4472
+ /* Busy: a shimmer line in each row, sized where used; under reduced motion a still ghost in the hover grey, never a
4473
+ frozen frame of the sweep. */
4479
4474
  .ws-well-row__placeholder { height: var(--space-sm); border-radius: var(--ws-radius-chip); background: var(--ws-well-hover); }
4480
4475
  @media (prefers-reduced-motion: no-preference) { .ws-well-row__placeholder { background: var(--ws-shimmer); background-size: 300% 100%; animation: ws-shimmer var(--ws-loop-shimmer) var(--ws-ease-shimmer) infinite; } }
@@ -3,7 +3,7 @@
3
3
  "version": 1,
4
4
  "meta": {
5
5
  "source": "code",
6
- "repo": "@felloinnovations/brand-kit 0.5.0: tokens/_source.hubl.css (the kit), tokens/_product.css (the product layer) and tokens/_dark.css (the dark theme)",
6
+ "repo": "@felloinnovations/brand-kit 0.5.1: tokens/_source.hubl.css (the kit), tokens/_product.css (the product layer) and tokens/_dark.css (the dark theme)",
7
7
  "note": "Generated by scripts/generate-tokens.mjs (yarn tokens): every value and the token list come from tokens/; the usage notes, the order and the type groups are kept from this file, so edit a note here and a value there. Kit tokens keep the kit's names (color-*, font-size-*, space-*, radius-*, shadow-*). The product layer keeps its ws-* names. A var(), calc() or color-mix() is written as the literal it resolves to, with the formula at the end of its usage note. A colour the dark theme changes has a value per theme: light, dark (data-theme=\"dark\") and navy (data-ground=\"navy\"). A gradient or a set of colour channels cannot be held here, so these are in tokens.css and fello.css only: --gradient-ai, --gradient-scrim-dropdown, --gradient-btn-primary, --ws-ink-rgb, --ws-shade-rgb, --ws-frame, --ws-stage-wash, --ws-shimmer, --ws-team-glow, --ws-cool-glow, --ws-orb."
8
8
  },
9
9
  "color": {
@@ -783,12 +783,8 @@
783
783
  },
784
784
  {
785
785
  "name": "ws-shimmer-ground",
786
- "value": {
787
- "light": "#ece8e4",
788
- "dark": "#1a2631",
789
- "navy": "#20354b"
790
- },
791
- "usage": "The grey a loading shimmer sweeps over: the tray made warmer in light, the track in dark. (CSS: color-mix(in srgb, var(--ws-tray) 96%, #d4700c))"
786
+ "value": "{ws-ghost}",
787
+ "usage": "The grey a loading shimmer sweeps over: the ghost grey (ws-ghost), the same at rest and in motion, which shows on the cream and on the tray in every theme. The pass over it is a lighter step of the same grey, never a chart hue (0.5.1)."
792
788
  },
793
789
  {
794
790
  "name": "ws-chart-dot",