farvist 0.5.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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +324 -0
  3. package/assets/farvist.js +187 -0
  4. package/assets/icons/farvist-icons.svg +49 -0
  5. package/assets/logo.svg +11 -0
  6. package/assets/og-image.svg +34 -0
  7. package/assets/patterns/blob.svg +9 -0
  8. package/assets/patterns/dots.svg +3 -0
  9. package/assets/patterns/grid.svg +3 -0
  10. package/assets/patterns/mesh.svg +20 -0
  11. package/dist/farvist.css +8967 -0
  12. package/dist/farvist.min.css +1 -0
  13. package/package.json +53 -0
  14. package/scss/abstracts/_functions.scss +85 -0
  15. package/scss/abstracts/_index.scss +9 -0
  16. package/scss/abstracts/_mixins.scss +78 -0
  17. package/scss/abstracts/_variables.scss +252 -0
  18. package/scss/base/_reset.scss +120 -0
  19. package/scss/base/_root.scss +87 -0
  20. package/scss/base/_typography.scss +102 -0
  21. package/scss/components/_accordion.scss +64 -0
  22. package/scss/components/_alerts.scss +63 -0
  23. package/scss/components/_avatar.scss +76 -0
  24. package/scss/components/_badges.scss +54 -0
  25. package/scss/components/_breadcrumb.scss +44 -0
  26. package/scss/components/_buttons.scss +163 -0
  27. package/scss/components/_callout.scss +37 -0
  28. package/scss/components/_cards.scss +74 -0
  29. package/scss/components/_chip.scss +61 -0
  30. package/scss/components/_dropdown.scss +90 -0
  31. package/scss/components/_empty-state.scss +37 -0
  32. package/scss/components/_forms.scss +125 -0
  33. package/scss/components/_icon.scss +25 -0
  34. package/scss/components/_list-group.scss +60 -0
  35. package/scss/components/_modal.scss +95 -0
  36. package/scss/components/_navbar.scss +67 -0
  37. package/scss/components/_pagination.scss +51 -0
  38. package/scss/components/_progress.scss +60 -0
  39. package/scss/components/_range.scss +58 -0
  40. package/scss/components/_rating.scss +26 -0
  41. package/scss/components/_segmented.scss +51 -0
  42. package/scss/components/_skeleton.scss +52 -0
  43. package/scss/components/_spinner.scss +60 -0
  44. package/scss/components/_stat.scss +32 -0
  45. package/scss/components/_stepper.scss +78 -0
  46. package/scss/components/_switch.scss +65 -0
  47. package/scss/components/_table.scss +51 -0
  48. package/scss/components/_tabs.scss +64 -0
  49. package/scss/components/_timeline.scss +77 -0
  50. package/scss/components/_toast.scss +79 -0
  51. package/scss/components/_tooltip.scss +45 -0
  52. package/scss/farvist.scss +60 -0
  53. package/scss/layout/_grid.scss +83 -0
  54. package/scss/utilities/_backgrounds.scss +110 -0
  55. package/scss/utilities/_effects.scss +118 -0
  56. package/scss/utilities/_spacing.scss +76 -0
  57. package/scss/utilities/_utilities.scss +213 -0
@@ -0,0 +1,76 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Avatar
3
+ // Image or initials, sizes, color variants, status dot and stacked groups.
4
+ // =============================================================================
5
+
6
+ @use 'sass:map';
7
+ @use '../abstracts' as *;
8
+
9
+ .avatar {
10
+ position: relative;
11
+ display: inline-flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ flex-shrink: 0;
15
+ width: 2.5rem;
16
+ height: 2.5rem;
17
+ font-weight: map.get($font-weights, 'semibold');
18
+ color: var(--fv-body-color);
19
+ background-color: var(--fv-glass-bg-strong);
20
+ border: $border-width solid var(--fv-glass-border);
21
+ border-radius: 50%;
22
+ overflow: hidden;
23
+ user-select: none;
24
+
25
+ img {
26
+ width: 100%;
27
+ height: 100%;
28
+ object-fit: cover;
29
+ }
30
+ }
31
+
32
+ .avatar-sm { width: 1.75rem; height: 1.75rem; font-size: map.get($font-sizes, 'sm'); }
33
+ .avatar-lg { width: 3.5rem; height: 3.5rem; font-size: map.get($font-sizes, 'xl'); }
34
+ .avatar-xl { width: 5rem; height: 5rem; font-size: map.get($font-sizes, '2xl'); }
35
+
36
+ // Initials avatars in theme colors.
37
+ @each $name, $clr in $theme-colors {
38
+ .avatar-#{$name} {
39
+ color: contrast-color($clr);
40
+ background-color: $clr;
41
+ border-color: transparent;
42
+ }
43
+ }
44
+
45
+ // Presence dot (overlaps the bottom-right). Default = online.
46
+ .avatar-status {
47
+ overflow: visible;
48
+ }
49
+
50
+ .avatar-status::after {
51
+ content: '';
52
+ position: absolute;
53
+ right: 2%;
54
+ bottom: 2%;
55
+ width: 28%;
56
+ height: 28%;
57
+ background-color: var(--fv-success);
58
+ border: 2px solid var(--fv-body-bg);
59
+ border-radius: 50%;
60
+ }
61
+
62
+ .avatar-status-busy::after { background-color: var(--fv-danger); }
63
+ .avatar-status-away::after { background-color: var(--fv-warning); }
64
+
65
+ // Overlapping stack.
66
+ .avatar-group {
67
+ display: inline-flex;
68
+
69
+ .avatar {
70
+ border: 2px solid var(--fv-body-bg);
71
+ }
72
+
73
+ .avatar:not(:first-child) {
74
+ margin-left: -0.75rem;
75
+ }
76
+ }
@@ -0,0 +1,54 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Badges
3
+ // Small count / label pills. Solid (auto-contrasted) and soft glass variants.
4
+ // =============================================================================
5
+
6
+ @use 'sass:map';
7
+ @use 'sass:color';
8
+ @use '../abstracts' as *;
9
+
10
+ .badge {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ padding: 0.35em 0.65em;
14
+ font-size: 0.75em;
15
+ font-weight: map.get($font-weights, 'semibold');
16
+ line-height: 1;
17
+ text-align: center;
18
+ white-space: nowrap;
19
+ color: $white;
20
+ background-color: $secondary;
21
+ border: $border-width solid transparent;
22
+ border-radius: map.get($radii, 'sm');
23
+ }
24
+
25
+ // Solid: filled background, auto-contrasted text.
26
+ @each $name, $clr in $theme-colors {
27
+ .badge-#{$name} {
28
+ color: contrast-color($clr);
29
+ background-color: $clr;
30
+ }
31
+ }
32
+
33
+ // Soft: tinted translucent fill with a colored border + same-hue text.
34
+ // Dark theme uses a light tint of the hue; the light theme darkens it (below)
35
+ // so the text clears WCAG AA on a near-white fill.
36
+ @each $name, $clr in $theme-colors {
37
+ .badge-soft-#{$name} {
38
+ color: color.mix($white, $clr, 45%);
39
+ background-color: rgba($clr, 0.16);
40
+ border-color: rgba($clr, 0.35);
41
+ }
42
+ }
43
+
44
+ [data-theme='light'] {
45
+ @each $name, $clr in $theme-colors {
46
+ .badge-soft-#{$name} {
47
+ color: color.mix($body-text-light, $clr, 65%);
48
+ }
49
+ }
50
+ }
51
+
52
+ .badge-pill {
53
+ border-radius: map.get($radii, 'pill');
54
+ }
@@ -0,0 +1,44 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Breadcrumb
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts' as *;
7
+
8
+ .breadcrumb {
9
+ display: flex;
10
+ flex-wrap: wrap;
11
+ align-items: center;
12
+ gap: spacer(2);
13
+ padding: 0;
14
+ margin-bottom: spacer(4);
15
+ font-size: map.get($font-sizes, 'sm');
16
+ list-style: none;
17
+ }
18
+
19
+ .breadcrumb-item {
20
+ display: inline-flex;
21
+ align-items: center;
22
+ gap: spacer(2);
23
+ color: var(--fv-muted);
24
+
25
+ a {
26
+ color: var(--fv-muted);
27
+ text-decoration: none;
28
+ transition: color $transition-base;
29
+ }
30
+
31
+ a:hover {
32
+ color: var(--fv-body-color);
33
+ }
34
+
35
+ &.active {
36
+ color: var(--fv-body-color);
37
+ }
38
+
39
+ &:not(:last-child)::after {
40
+ content: '/';
41
+ color: var(--fv-muted);
42
+ opacity: 0.5;
43
+ }
44
+ }
@@ -0,0 +1,163 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Buttons
3
+ // `.btn` is themed entirely through `--fv-btn-*` custom properties. Solid
4
+ // variants get a neon hover glow; gradient and glass variants add flair.
5
+ // =============================================================================
6
+
7
+ @use 'sass:map';
8
+ @use 'sass:color';
9
+ @use '../abstracts' as *;
10
+
11
+ .btn {
12
+ // Neutral defaults; variants below override these.
13
+ --fv-btn-bg: transparent;
14
+ --fv-btn-color: var(--fv-body-color);
15
+ --fv-btn-border: var(--fv-glass-border);
16
+ --fv-btn-hover-bg: var(--fv-glass-bg-strong);
17
+ --fv-btn-hover-border: var(--fv-glass-border);
18
+ --fv-btn-active-bg: var(--fv-glass-bg);
19
+ --fv-btn-focus-ring: #{rgba($primary, 0.45)};
20
+ --fv-btn-glow: none;
21
+
22
+ display: inline-flex;
23
+ align-items: center;
24
+ justify-content: center;
25
+ gap: spacer(2);
26
+ padding: spacer(2) spacer(5);
27
+ font-size: map.get($font-sizes, 'base');
28
+ font-weight: map.get($font-weights, 'semibold');
29
+ line-height: $line-height-base;
30
+ text-align: center;
31
+ text-decoration: none;
32
+ white-space: nowrap;
33
+ vertical-align: middle;
34
+ cursor: pointer;
35
+ user-select: none;
36
+ color: var(--fv-btn-color);
37
+ background-color: var(--fv-btn-bg);
38
+ border: $border-width solid var(--fv-btn-border);
39
+ border-radius: var(--fv-border-radius);
40
+ transition:
41
+ color $transition-base,
42
+ background-color $transition-base,
43
+ border-color $transition-base,
44
+ box-shadow $transition-base,
45
+ transform $transition-base;
46
+
47
+ &:hover {
48
+ color: var(--fv-btn-color);
49
+ background-color: var(--fv-btn-hover-bg);
50
+ border-color: var(--fv-btn-hover-border);
51
+ box-shadow: var(--fv-btn-glow);
52
+ text-decoration: none;
53
+ transform: translateY(-1px);
54
+ }
55
+
56
+ &:active {
57
+ background-color: var(--fv-btn-active-bg);
58
+ transform: translateY(0);
59
+ }
60
+
61
+ &:focus-visible {
62
+ outline: 0;
63
+ box-shadow: 0 0 0 3px var(--fv-btn-focus-ring);
64
+ }
65
+
66
+ &:disabled,
67
+ &.disabled {
68
+ opacity: 0.5;
69
+ box-shadow: none;
70
+ transform: none;
71
+ pointer-events: none;
72
+ }
73
+ }
74
+
75
+ // Solid variants — one rule per theme color via @each.
76
+ @each $name, $clr in $theme-colors {
77
+ .btn-#{$name} {
78
+ @include button-variant($clr);
79
+ }
80
+ }
81
+
82
+ // Outline variants — transparent until hover, then fill + glow.
83
+ @each $name, $clr in $theme-colors {
84
+ .btn-outline-#{$name} {
85
+ --fv-btn-bg: transparent;
86
+ --fv-btn-color: #{$clr};
87
+ --fv-btn-border: #{$clr};
88
+ --fv-btn-hover-bg: #{$clr};
89
+ --fv-btn-hover-border: #{$clr};
90
+ --fv-btn-active-bg: #{color.scale($clr, $lightness: -10%)};
91
+ --fv-btn-focus-ring: #{rgba($clr, 0.45)};
92
+ --fv-btn-glow: 0 0 24px #{rgba($clr, 0.5)};
93
+
94
+ &:hover {
95
+ --fv-btn-color: #{contrast-color($clr)};
96
+ }
97
+ }
98
+ }
99
+
100
+ // Gradient variants — vivid fill, intensifies on hover.
101
+ @each $name, $grad in $gradients {
102
+ .btn-gradient-#{$name} {
103
+ --fv-btn-color: #ffffff;
104
+ --fv-btn-border: transparent;
105
+ // The gradient image is the fill; keep the base hover/active color layer
106
+ // transparent so no glass tint paints underneath it.
107
+ --fv-btn-hover-bg: transparent;
108
+ --fv-btn-active-bg: transparent;
109
+ --fv-btn-glow: var(--fv-glow-primary);
110
+
111
+ color: var(--fv-btn-color);
112
+ background-image: #{$grad};
113
+ border-color: transparent;
114
+
115
+ &:hover {
116
+ filter: brightness(1.08);
117
+ }
118
+ }
119
+ }
120
+
121
+ // Frosted-glass button.
122
+ .btn-glass {
123
+ @include glass;
124
+ --fv-btn-color: var(--fv-body-color);
125
+ box-shadow: none;
126
+
127
+ &:hover {
128
+ background-color: var(--fv-glass-bg-strong);
129
+ border-color: var(--fv-glass-border);
130
+ }
131
+ }
132
+
133
+ // Link-style button.
134
+ .btn-link {
135
+ --fv-btn-bg: transparent;
136
+ --fv-btn-border: transparent;
137
+ --fv-btn-color: var(--fv-primary);
138
+ --fv-btn-hover-bg: transparent;
139
+ --fv-btn-hover-border: transparent;
140
+ --fv-btn-active-bg: transparent;
141
+ --fv-btn-glow: none;
142
+
143
+ &:hover {
144
+ text-decoration: underline;
145
+ }
146
+ }
147
+
148
+ // Sizes.
149
+ .btn-sm {
150
+ padding: spacer(1) spacer(3);
151
+ font-size: map.get($font-sizes, 'sm');
152
+ }
153
+
154
+ .btn-lg {
155
+ padding: spacer(3) spacer(6);
156
+ font-size: map.get($font-sizes, 'lg');
157
+ }
158
+
159
+ // Full-width block button.
160
+ .btn-block {
161
+ display: flex;
162
+ width: 100%;
163
+ }
@@ -0,0 +1,37 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Callout
3
+ // A lighter aside/note for docs and inline guidance.
4
+ // <div class="callout callout-info">
5
+ // <div class="callout-title">Heads up</div>
6
+ // <p>Body text.</p>
7
+ // </div>
8
+ // =============================================================================
9
+
10
+ @use 'sass:map';
11
+ @use '../abstracts' as *;
12
+
13
+ .callout {
14
+ padding: spacer(4);
15
+ margin-bottom: spacer(4);
16
+ background-color: var(--fv-glass-bg);
17
+ border: $border-width solid var(--fv-glass-border);
18
+ border-left: 3px solid var(--fv-primary);
19
+ border-radius: map.get($radii, 'md');
20
+ }
21
+
22
+ .callout-title {
23
+ margin-bottom: spacer(1);
24
+ font-weight: map.get($font-weights, 'semibold');
25
+ }
26
+
27
+ .callout > :last-child {
28
+ margin-bottom: 0;
29
+ }
30
+
31
+ @each $name, $clr in $theme-colors {
32
+ .callout-#{$name} {
33
+ border-left-color: $clr;
34
+
35
+ .callout-title { color: $clr; }
36
+ }
37
+ }
@@ -0,0 +1,74 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Cards
3
+ // Glass surfaces by default. `.card-glow` adds a neon hover halo; `.card-solid`
4
+ // opts out of translucency for content-heavy panels.
5
+ // =============================================================================
6
+
7
+ @use 'sass:map';
8
+ @use '../abstracts' as *;
9
+
10
+ .card {
11
+ display: flex;
12
+ flex-direction: column;
13
+ min-width: 0;
14
+ border-radius: map.get($radii, 'xl');
15
+ overflow: hidden;
16
+ @include glass;
17
+ transition: transform $transition-base, box-shadow $transition-base, border-color $transition-base;
18
+ }
19
+
20
+ // Opaque variant for when you don't want see-through content.
21
+ .card-solid {
22
+ background-color: var(--fv-surface-solid);
23
+ backdrop-filter: none;
24
+ -webkit-backdrop-filter: none;
25
+ }
26
+
27
+ // Lift + neon halo on hover.
28
+ .card-glow:hover {
29
+ transform: translateY(-4px);
30
+ border-color: rgba($primary, 0.5);
31
+ box-shadow: var(--fv-shadow-xl), var(--fv-glow-primary);
32
+ }
33
+
34
+ .card-body {
35
+ flex: 1 1 auto;
36
+ padding: spacer(5);
37
+ }
38
+
39
+ .card-title {
40
+ margin-bottom: spacer(2);
41
+ font-size: map.get($font-sizes, 'xl');
42
+ font-weight: map.get($font-weights, 'bold');
43
+ }
44
+
45
+ .card-subtitle {
46
+ margin-bottom: spacer(3);
47
+ color: var(--fv-muted);
48
+ }
49
+
50
+ .card-text {
51
+ color: var(--fv-muted);
52
+
53
+ &:last-child {
54
+ margin-bottom: 0;
55
+ }
56
+ }
57
+
58
+ .card-header {
59
+ padding: spacer(4) spacer(5);
60
+ font-weight: map.get($font-weights, 'semibold');
61
+ background-color: var(--fv-glass-bg);
62
+ border-bottom: $border-width solid var(--fv-glass-border);
63
+ }
64
+
65
+ .card-footer {
66
+ padding: spacer(4) spacer(5);
67
+ background-color: var(--fv-glass-bg);
68
+ border-top: $border-width solid var(--fv-glass-border);
69
+ }
70
+
71
+ .card-img-top {
72
+ width: 100%;
73
+ object-fit: cover;
74
+ }
@@ -0,0 +1,61 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Chip / Tag
3
+ // Compact glass pills with an optional remove button and soft color variants.
4
+ // =============================================================================
5
+
6
+ @use 'sass:map';
7
+ @use 'sass:color';
8
+ @use '../abstracts' as *;
9
+
10
+ .chip {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ gap: spacer(2);
14
+ padding: spacer(1) spacer(3);
15
+ font-size: map.get($font-sizes, 'sm');
16
+ font-weight: map.get($font-weights, 'medium');
17
+ color: var(--fv-body-color);
18
+ background-color: var(--fv-glass-bg);
19
+ border: $border-width solid var(--fv-glass-border);
20
+ border-radius: map.get($radii, 'pill');
21
+ }
22
+
23
+ .chip-close {
24
+ display: inline-flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ width: 1.15em;
28
+ height: 1.15em;
29
+ margin-right: -0.25rem;
30
+ padding: 0;
31
+ font-size: 1.1em;
32
+ line-height: 1;
33
+ color: inherit;
34
+ background: transparent;
35
+ border: 0;
36
+ border-radius: 50%;
37
+ cursor: pointer;
38
+ opacity: 0.7;
39
+
40
+ &:hover {
41
+ opacity: 1;
42
+ background-color: var(--fv-glass-bg-strong);
43
+ }
44
+ }
45
+
46
+ // Soft color variants (dark-theme tint; light theme darkens below).
47
+ @each $name, $clr in $theme-colors {
48
+ .chip-#{$name} {
49
+ color: color.mix($white, $clr, 45%);
50
+ background-color: rgba($clr, 0.16);
51
+ border-color: rgba($clr, 0.35);
52
+ }
53
+ }
54
+
55
+ [data-theme='light'] {
56
+ @each $name, $clr in $theme-colors {
57
+ .chip-#{$name} {
58
+ color: color.mix($body-text-light, $clr, 65%);
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,90 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Dropdown (native <details>)
3
+ // Markup:
4
+ // <details class="dropdown">
5
+ // <summary class="btn btn-glass">Menu</summary>
6
+ // <div class="dropdown-menu">
7
+ // <a class="dropdown-item" href="#">Item</a>
8
+ // <div class="dropdown-divider"></div>
9
+ // <button class="dropdown-item">Action</button>
10
+ // </div>
11
+ // </details>
12
+ // farvist.js closes it on outside click; CSS handles open/close.
13
+ // =============================================================================
14
+
15
+ @use 'sass:map';
16
+ @use '../abstracts' as *;
17
+
18
+ .dropdown {
19
+ position: relative;
20
+ display: inline-block;
21
+
22
+ > summary {
23
+ list-style: none;
24
+ cursor: pointer;
25
+
26
+ &::-webkit-details-marker {
27
+ display: none;
28
+ }
29
+ }
30
+ }
31
+
32
+ .dropdown-menu {
33
+ position: absolute;
34
+ top: calc(100% + 0.4rem);
35
+ left: 0;
36
+ z-index: map.get($z-layers, 'dropdown');
37
+ min-width: 11rem;
38
+ padding: spacer(1);
39
+ border-radius: map.get($radii, 'lg');
40
+ @include glass($strong: true);
41
+ animation: fv-dropdown-in 0.15s ease;
42
+ }
43
+
44
+ // Right-aligned variant.
45
+ .dropdown-menu-end {
46
+ left: auto;
47
+ right: 0;
48
+ }
49
+
50
+ .dropdown-item {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: spacer(2);
54
+ width: 100%;
55
+ padding: spacer(2) spacer(3);
56
+ font-size: map.get($font-sizes, 'base');
57
+ color: var(--fv-body-color);
58
+ text-align: left;
59
+ text-decoration: none;
60
+ background: transparent;
61
+ border: 0;
62
+ border-radius: map.get($radii, 'md');
63
+ cursor: pointer;
64
+ transition: background-color $transition-base;
65
+
66
+ &:hover {
67
+ background-color: var(--fv-glass-bg);
68
+ text-decoration: none;
69
+ }
70
+
71
+ &:focus-visible {
72
+ outline: 0;
73
+ box-shadow: var(--fv-focus-ring);
74
+ }
75
+ }
76
+
77
+ .dropdown-divider {
78
+ height: $border-width;
79
+ margin: spacer(1) 0;
80
+ background-color: var(--fv-glass-border);
81
+ }
82
+
83
+ @keyframes fv-dropdown-in {
84
+ from { opacity: 0; transform: translateY(-0.35rem); }
85
+ to { opacity: 1; transform: none; }
86
+ }
87
+
88
+ @media (prefers-reduced-motion: reduce) {
89
+ .dropdown-menu { animation: none; }
90
+ }
@@ -0,0 +1,37 @@
1
+ // =============================================================================
2
+ // Farvist · Components · Empty state
3
+ // <div class="empty-state">
4
+ // <svg class="icon empty-state-icon"><use href="...#i-search"/></svg>
5
+ // <div class="empty-state-title">No results</div>
6
+ // <p class="empty-state-text">Try a different search.</p>
7
+ // <button class="btn btn-gradient-primary">New search</button>
8
+ // </div>
9
+ // =============================================================================
10
+
11
+ @use 'sass:map';
12
+ @use '../abstracts' as *;
13
+
14
+ .empty-state {
15
+ padding: spacer(7) spacer(4);
16
+ text-align: center;
17
+ }
18
+
19
+ .empty-state-icon {
20
+ width: 3.5rem;
21
+ height: 3.5rem;
22
+ margin-bottom: spacer(3);
23
+ color: var(--fv-muted);
24
+ opacity: 0.7;
25
+ }
26
+
27
+ .empty-state-title {
28
+ margin-bottom: spacer(2);
29
+ font-size: map.get($font-sizes, 'xl');
30
+ font-weight: map.get($font-weights, 'semibold');
31
+ }
32
+
33
+ .empty-state-text {
34
+ max-width: 28rem;
35
+ margin: 0 auto spacer(4);
36
+ color: var(--fv-muted);
37
+ }