@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.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +24 -0
- package/README.md +6 -4
- package/design-system/01-how-claude-decides.md +1 -1
- package/design-system/03-colour.md +3 -2
- package/design-system/08-choosing-components.md +1 -1
- package/design-system/09-charts.md +1 -1
- package/design-system/10-patterns.md +1 -1
- package/design-system/13-motion.md +3 -3
- package/design-system/17-decisions.md +10 -0
- package/design-system/components/CheckRow/README.md +1 -1
- package/design-system/components/CheckRow/preview.html +1 -1
- package/design-system/components/CheckRow/style.css +1 -1
- package/design-system/components/KanbanBoard/README.md +1 -1
- package/design-system/components/KanbanBoard/style.css +1 -1
- package/design-system/components/ListDetail/preview.html +1 -1
- package/design-system/components/Matrix/README.md +1 -1
- package/design-system/components/Matrix/preview.html +1 -1
- package/design-system/components/Motion/README.md +2 -2
- package/design-system/components/Motion/preview.html +8 -8
- package/design-system/components/README.md +1 -1
- package/design-system/components/ScoreHero/README.md +2 -2
- package/design-system/components/ScoreHero/style.css +1 -1
- package/design-system/components/ShareBar/README.md +1 -1
- package/design-system/components/ShareBar/style.css +1 -1
- package/design-system/components/Skeleton/README.md +17 -16
- package/design-system/components/Skeleton/preview.html +1 -1
- package/design-system/components/Skeleton/style.css +9 -14
- package/design-system/components/Starter/README.md +1 -1
- package/design-system/components/Starter/preview.html +1 -1
- package/design-system/components/Table/README.md +1 -1
- package/design-system/components/Table/preview.html +1 -1
- package/design-system/components/Table/style.css +1 -1
- package/design-system/components/TickStrip/README.md +1 -1
- package/design-system/components/TickStrip/preview.html +1 -1
- package/design-system/components/TickStrip/style.css +1 -1
- package/design-system/components/Timeline/README.md +1 -1
- package/design-system/components/Well/README.md +1 -1
- package/design-system/components/Well/style.css +2 -2
- package/design-system/components/_house.css +1 -1
- package/design-system/components/bundle.css +18 -23
- package/design-system/tokens.json +3 -7
- package/dist/fello-core.css +2 -2
- package/dist/fello.css +2 -2
- package/dist/fello.scoped.css +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/scoped.js +2 -2
- package/dist/tokens.d.ts +8 -8
- package/dist/tokens.js +8 -8
- package/package.json +1 -1
- package/tokens/_dark.css +1 -2
- package/tokens/_product.css +11 -11
- package/tokens/palettes.ts +1 -1
- package/tokens/shadcn-compat.css +1 -1
- package/tokens/shadcn-compat.hsl.css +1 -1
- package/tokens/tokens.css +10 -15
- package/tokens/tokens.md +4 -5
- package/tokens/tokens.root.css +10 -15
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
20
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
3528
|
-
/* A ghost block: the shimmer (the
|
|
3529
|
-
breathing pulse (ws-working-slow), which read as blank. Under reduced motion it is
|
|
3530
|
-
(the chart ghost's), never a frozen frame of the sweep
|
|
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
|
|
3544
|
-
over the
|
|
3545
|
-
.ws-skeleton__chart {
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
4478
|
-
|
|
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.
|
|
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
|
-
|
|
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",
|