@grantcodes/ui 2.12.1 → 2.15.5

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 (78) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +5 -1
  3. package/custom-elements.json +295 -176
  4. package/package.json +11 -3
  5. package/src/components/accordion/accordion-item.css +14 -14
  6. package/src/components/accordion/accordion.css +1 -1
  7. package/src/components/app-bar/app-bar.component.js +2 -2
  8. package/src/components/app-bar/app-bar.css +68 -22
  9. package/src/components/app-bar/app-bar.stories.js +37 -0
  10. package/src/components/app-bar/app-bar.test.js +19 -0
  11. package/src/components/app-bar/nav-link.css +10 -11
  12. package/src/components/avatar/avatar.css +5 -6
  13. package/src/components/badge/badge.css +16 -15
  14. package/src/components/breadcrumb/breadcrumb.css +10 -11
  15. package/src/components/button/button.css +112 -24
  16. package/src/components/button/button.stories.js +37 -0
  17. package/src/components/button-group/button-group.css +4 -4
  18. package/src/components/card/card.css +25 -25
  19. package/src/components/code-preview/code-preview.css +6 -6
  20. package/src/components/container/container.css +2 -1
  21. package/src/components/container/container.stories.js +1 -1
  22. package/src/components/countdown/countdown.css +13 -13
  23. package/src/components/cta/cta.component.js +6 -5
  24. package/src/components/cta/cta.css +15 -23
  25. package/src/components/dialog/dialog.css +14 -14
  26. package/src/components/dropdown/dropdown.css +14 -14
  27. package/src/components/dropzone/dropzone.css +11 -12
  28. package/src/components/feature-list/feature-list.component.js +3 -2
  29. package/src/components/feature-list/feature-list.css +14 -20
  30. package/src/components/footer/footer-column.css +9 -10
  31. package/src/components/footer/footer.component.js +3 -2
  32. package/src/components/footer/footer.css +12 -18
  33. package/src/components/footer/footer.test.js +1 -1
  34. package/src/components/form-field/form-field.css +6 -6
  35. package/src/components/hero/hero.css +9 -9
  36. package/src/components/loading/loading.css +3 -3
  37. package/src/components/logo-cloud/logo-cloud.component.js +3 -2
  38. package/src/components/logo-cloud/logo-cloud.css +8 -16
  39. package/src/components/map/map.css +8 -8
  40. package/src/components/media-text/media-text.css +9 -9
  41. package/src/components/newsletter/newsletter.css +21 -21
  42. package/src/components/notice/notice.css +17 -17
  43. package/src/components/person/index.js +1 -0
  44. package/src/components/person/person.component.js +51 -0
  45. package/src/components/person/person.css +39 -0
  46. package/src/components/person/person.js +8 -0
  47. package/src/components/person/person.react.js +9 -0
  48. package/src/components/person/person.stories.js +59 -0
  49. package/src/components/person/person.test.js +69 -0
  50. package/src/components/pricing/pricing.component.js +3 -2
  51. package/src/components/pricing/pricing.css +33 -41
  52. package/src/components/sidebar/sidebar.css +21 -21
  53. package/src/components/stats/stats.component.js +3 -2
  54. package/src/components/stats/stats.css +13 -21
  55. package/src/components/tabs/internal/tabs-item.component.js +5 -0
  56. package/src/components/tabs/tabs.component.js +4 -2
  57. package/src/components/tabs/tabs.css +15 -15
  58. package/src/components/testimonials/testimonials.component.js +11 -24
  59. package/src/components/testimonials/testimonials.css +11 -36
  60. package/src/components/toast/toast.css +23 -24
  61. package/src/components/tooltip/tooltip.css +6 -6
  62. package/src/css/colors.stories.js +6 -6
  63. package/src/css/elements/a.css +4 -4
  64. package/src/css/elements/forms/input.css +27 -27
  65. package/src/css/elements/forms/label.css +1 -1
  66. package/src/css/elements/media/image.css +1 -0
  67. package/src/css/layers.stories.js +3 -3
  68. package/src/css/reset.css +3 -3
  69. package/src/css/themes/todomap.css +1 -1
  70. package/src/css/tokens.stories.js +16 -16
  71. package/src/css/typography.css +7 -7
  72. package/src/css/util/focus-ring.css +9 -9
  73. package/src/lib/styles/focus-ring.css +9 -9
  74. package/src/main.js +1 -0
  75. package/src/pages/agency.stories.js +5 -4
  76. package/src/pages/blog-post.stories.js +33 -50
  77. package/src/pages/saas-landing.stories.js +8 -7
  78. package/src/react.js +1 -0
@@ -10,8 +10,8 @@
10
10
 
11
11
  .accordion__item {
12
12
  border: 1px solid
13
- var(--g-theme-color-border-subtle, var(--g-theme-color-border-default));
14
- border-radius: var(--g-theme-border-radius-md, 0.5rem);
13
+ var(--g-color-border-subtle, var(--g-color-border-default));
14
+ border-radius: var(--g-border-radius-md, 0.5rem);
15
15
  }
16
16
 
17
17
  .accordion__item::details-content {
@@ -27,23 +27,23 @@
27
27
  }
28
28
 
29
29
  .accordion__summary {
30
- padding: var(--g-theme-spacing-md);
30
+ padding: var(--g-spacing-md);
31
31
  cursor: pointer;
32
- background: var(--g-theme-color-background-subtle);
33
- font-weight: var(--g-typography-font-weight-500);
32
+ background: var(--g-color-background-subtle);
33
+ font-weight: var(--g-typography-body-font-weight);
34
34
  list-style: none;
35
35
  display: flex;
36
36
  justify-content: space-between;
37
37
  align-items: center;
38
- gap: var(--g-theme-spacing-md);
39
- border-radius: var(--g-theme-border-radius-md, 0.5rem);
38
+ gap: var(--g-spacing-md);
39
+ border-radius: var(--g-border-radius-md, 0.5rem);
40
40
  transition-property: background-color, outline-width, outline-color;
41
41
  }
42
42
 
43
43
  .accordion__summary:hover {
44
44
  background: var(
45
- --g-theme-color-background-subtle-hover,
46
- var(--g-theme-color-background-subtle)
45
+ --g-color-background-subtle-hover,
46
+ var(--g-color-background-subtle)
47
47
  );
48
48
  }
49
49
 
@@ -57,7 +57,7 @@
57
57
  block-size: 1em;
58
58
  flex-shrink: 0;
59
59
  transition: transform 0.25s ease;
60
- color: var(--g-theme-color-content-subtle, currentColor);
60
+ color: var(--g-color-content-subtle, currentColor);
61
61
  }
62
62
 
63
63
  .accordion__item[open] .accordion__chevron {
@@ -65,10 +65,10 @@
65
65
  }
66
66
 
67
67
  .accordion__content {
68
- padding: var(--g-theme-spacing-md);
69
- background: var(--g-theme-color-background-default);
70
- border-radius: 0 0 var(--g-theme-border-radius-md, 0.5rem)
71
- var(--g-theme-border-radius-md, 0.5rem);
68
+ padding: var(--g-spacing-md);
69
+ background: var(--g-color-background-default);
70
+ border-radius: 0 0 var(--g-border-radius-md, 0.5rem)
71
+ var(--g-border-radius-md, 0.5rem);
72
72
  }
73
73
 
74
74
  @media (prefers-reduced-motion: reduce) {
@@ -11,5 +11,5 @@
11
11
  .accordion {
12
12
  display: flex;
13
13
  flex-direction: column;
14
- gap: var(--g-theme-spacing-sm);
14
+ gap: var(--g-spacing-sm);
15
15
  }
@@ -10,8 +10,8 @@ export class GrantCodesAppBar extends LitElement {
10
10
  static styles = [focusRingStyles, appBarStyles];
11
11
 
12
12
  static properties = {
13
- sticky: { type: Boolean },
14
- transparent: { type: Boolean },
13
+ sticky: { type: Boolean, reflect: true },
14
+ transparent: { type: Boolean, reflect: true },
15
15
  _mobileMenuOpen: { type: Boolean, state: true },
16
16
  };
17
17
 
@@ -11,12 +11,13 @@
11
11
  }
12
12
 
13
13
  .app-bar {
14
- background-color: var(--g-theme-color-background-default);
15
- border-block-end: 1px solid var(--g-theme-color-border-default);
14
+ background-color: var(--g-color-background-default);
15
+ border-block-end: 1px solid var(--g-color-border-default);
16
16
  position: relative;
17
17
  z-index: 100;
18
18
  }
19
19
 
20
+ :host([sticky]),
20
21
  .app-bar--sticky {
21
22
  position: sticky;
22
23
  inset-block-start: 0;
@@ -32,9 +33,9 @@
32
33
  .app-bar__bar {
33
34
  display: flex;
34
35
  align-items: center;
35
- gap: var(--g-theme-spacing-lg);
36
- padding-inline: var(--g-theme-spacing-md);
37
- padding-block: var(--g-theme-spacing-md);
36
+ gap: var(--g-spacing-lg);
37
+ padding-inline: var(--g-spacing-md);
38
+ padding-block: var(--g-spacing-md);
38
39
  max-inline-size: 1400px;
39
40
  margin-inline: auto;
40
41
  }
@@ -55,7 +56,7 @@
55
56
  .app-bar__actions {
56
57
  display: flex;
57
58
  align-items: center;
58
- gap: var(--g-theme-spacing-sm);
59
+ gap: var(--g-spacing-sm);
59
60
  margin-inline-start: auto;
60
61
  }
61
62
 
@@ -67,15 +68,15 @@
67
68
  justify-content: center;
68
69
  inline-size: 2.75rem;
69
70
  block-size: 2.75rem;
70
- padding: var(--g-theme-spacing-sm);
71
- border-radius: var(--g-theme-border-radius-md);
71
+ padding: var(--g-spacing-sm);
72
+ border-radius: var(--g-border-radius-md);
72
73
  cursor: pointer;
73
- color: var(--g-theme-color-content-default);
74
+ color: var(--g-color-content-default);
74
75
  transition: background-color 0.2s ease;
75
76
  }
76
77
 
77
78
  .app-bar__menu-button:hover {
78
- background-color: var(--g-theme-color-background-subtle-hover);
79
+ background-color: var(--g-color-background-subtle-hover);
79
80
  }
80
81
 
81
82
  /* Hamburger Icon */
@@ -127,16 +128,16 @@
127
128
  .app-bar__nav--open {
128
129
  display: flex;
129
130
  flex-direction: column;
130
- gap: var(--g-theme-spacing-xs, 0.25rem);
131
+ gap: var(--g-spacing-xs, 0.25rem);
131
132
  position: absolute;
132
133
  inset-inline: 0;
133
134
  inset-block-start: 100%;
134
135
  z-index: 99;
135
- background-color: var(--g-theme-color-background-default);
136
- border-block-end: 1px solid var(--g-theme-color-border-default);
137
- padding-block: var(--g-theme-spacing-md);
138
- padding-inline: var(--g-theme-spacing-md);
139
- box-shadow: var(--g-theme-shadow-lg, 0 8px 24px rgba(0, 0, 0, 0.12));
136
+ background-color: var(--g-color-background-default);
137
+ border-block-end: 1px solid var(--g-color-border-default);
138
+ padding-block: var(--g-spacing-md);
139
+ padding-inline: var(--g-spacing-md);
140
+ box-shadow: var(--g-box-shadow-lg, 0 8px 24px rgba(0, 0, 0, 0.12));
140
141
  animation: menu-open 0.25s ease-out;
141
142
  }
142
143
 
@@ -156,7 +157,7 @@
156
157
  .app-bar__nav--open ::slotted(div[slot="nav"]) {
157
158
  display: flex;
158
159
  flex-direction: column;
159
- gap: var(--g-theme-spacing-xs, 0.25rem);
160
+ gap: var(--g-spacing-xs, 0.25rem);
160
161
  margin: 0;
161
162
  padding: 0;
162
163
  list-style: none;
@@ -211,8 +212,37 @@
211
212
  display: flex;
212
213
  flex-direction: row;
213
214
  align-items: center;
214
- gap: var(--g-theme-spacing-xs, 0.25rem);
215
+ gap: var(--g-spacing-xs, 0.25rem);
215
216
  flex: 1;
217
+ min-inline-size: 0;
218
+ overflow-x: auto;
219
+ flex-wrap: nowrap;
220
+ -webkit-overflow-scrolling: touch;
221
+ -webkit-mask-image: linear-gradient(
222
+ to right,
223
+ black calc(100% - 1.5rem),
224
+ transparent
225
+ );
226
+ mask-image: linear-gradient(
227
+ to right,
228
+ black calc(100% - 1.5rem),
229
+ transparent
230
+ );
231
+ scrollbar-width: thin;
232
+ scrollbar-color: var(--g-color-border-default) transparent;
233
+ }
234
+
235
+ .app-bar__nav::-webkit-scrollbar {
236
+ height: 4px;
237
+ }
238
+
239
+ .app-bar__nav::-webkit-scrollbar-track {
240
+ background: transparent;
241
+ }
242
+
243
+ .app-bar__nav::-webkit-scrollbar-thumb {
244
+ background: var(--g-color-border-default);
245
+ border-radius: 2px;
216
246
  }
217
247
 
218
248
  /* Reset mobile-open styles at desktop — nav is always inline */
@@ -224,10 +254,22 @@
224
254
  box-shadow: none;
225
255
  animation: none;
226
256
  flex-direction: row;
257
+ overflow-x: auto;
258
+ -webkit-mask-image: linear-gradient(
259
+ to right,
260
+ black calc(100% - 1.5rem),
261
+ transparent
262
+ );
263
+ mask-image: linear-gradient(
264
+ to right,
265
+ black calc(100% - 1.5rem),
266
+ transparent
267
+ );
227
268
  }
228
269
 
229
270
  .app-bar__actions {
230
271
  order: 3;
272
+ flex-shrink: 0;
231
273
  }
232
274
 
233
275
  .app-bar__menu-button {
@@ -238,21 +280,25 @@
238
280
  .app-bar__overlay--visible {
239
281
  display: none;
240
282
  }
283
+
284
+ ::slotted(ul),
285
+ ::slotted(div[slot="nav"]) {
286
+ flex-shrink: 0;
287
+ }
241
288
  }
242
289
 
243
290
  /* Slotted content styling */
244
291
  ::slotted(a[slot="logo"]) {
245
- color: var(--g-theme-color-content-default) !important;
292
+ color: var(--g-color-content-default) !important;
246
293
  text-decoration: none !important;
247
- font-family: var(--g-theme-typography-label-font-family);
248
- font-weight: var(--g-theme-typography-label-font-weight);
294
+ font: var(--g-typography-body-sm-font);
249
295
  }
250
296
 
251
297
  ::slotted(ul),
252
298
  ::slotted(div[slot="nav"]) {
253
299
  display: flex;
254
300
  flex-direction: row;
255
- gap: var(--g-theme-spacing-xs, 0.25rem);
301
+ gap: var(--g-spacing-xs, 0.25rem);
256
302
  margin: 0;
257
303
  padding: 0;
258
304
  list-style: none;
@@ -100,6 +100,43 @@ export const Transparent = {
100
100
  `,
101
101
  };
102
102
 
103
+ /**
104
+ * Many nav items demonstrating horizontal scroll overflow on desktop.
105
+ * When the viewport is wide enough for desktop mode but too narrow for all
106
+ * items, the nav becomes horizontally scrollable with a subtle fade affordance
107
+ * at the right edge and styled thin scrollbars.
108
+ */
109
+ export const ManyNavItems = {
110
+ render: () => html`
111
+ <grantcodes-app-bar>
112
+ <a slot="logo" href="/">MyApp</a>
113
+ <div slot="nav">
114
+ <grantcodes-nav-link><a href="/">Home</a></grantcodes-nav-link>
115
+ <grantcodes-nav-link><a href="/about">About</a></grantcodes-nav-link>
116
+ <grantcodes-nav-link><a href="/features">Features</a></grantcodes-nav-link>
117
+ <grantcodes-nav-link><a href="/pricing">Pricing</a></grantcodes-nav-link>
118
+ <grantcodes-nav-link><a href="/docs">Docs</a></grantcodes-nav-link>
119
+ <grantcodes-nav-link><a href="/blog">Blog</a></grantcodes-nav-link>
120
+ <grantcodes-nav-link><a href="/changelog">Changelog</a></grantcodes-nav-link>
121
+ <grantcodes-nav-link><a href="/api">API</a></grantcodes-nav-link>
122
+ <grantcodes-nav-link><a href="/support">Support</a></grantcodes-nav-link>
123
+ <grantcodes-nav-link><a href="/status">Status</a></grantcodes-nav-link>
124
+ </div>
125
+ <div slot="actions">
126
+ <grantcodes-button>Sign In</grantcodes-button>
127
+ </div>
128
+ </grantcodes-app-bar>
129
+ `,
130
+ parameters: {
131
+ docs: {
132
+ description: {
133
+ story:
134
+ "Resize the viewport to see the nav items become horizontally scrollable on desktop with a right-edge fade affordance and thin scrollbar.",
135
+ },
136
+ },
137
+ },
138
+ };
139
+
103
140
  /**
104
141
  * App bar with multiple action buttons.
105
142
  */
@@ -55,6 +55,14 @@ describe("App Bar Component", () => {
55
55
  assert.ok(appBar, "Should have sticky class");
56
56
  });
57
57
 
58
+ it("should reflect sticky to the host attribute", async () => {
59
+ element = await fixture("grantcodes-app-bar", {
60
+ sticky: true,
61
+ });
62
+
63
+ assert.ok(element.hasAttribute("sticky"), "Should reflect sticky attribute");
64
+ });
65
+
58
66
  it("should apply transparent class when transparent", async () => {
59
67
  element = await fixture("grantcodes-app-bar", {
60
68
  transparent: true,
@@ -64,6 +72,17 @@ describe("App Bar Component", () => {
64
72
  assert.ok(appBar, "Should have transparent class");
65
73
  });
66
74
 
75
+ it("should reflect transparent to the host attribute", async () => {
76
+ element = await fixture("grantcodes-app-bar", {
77
+ transparent: true,
78
+ });
79
+
80
+ assert.ok(
81
+ element.hasAttribute("transparent"),
82
+ "Should reflect transparent attribute",
83
+ );
84
+ });
85
+
67
86
  it("should have logo slot", async () => {
68
87
  element = await fixture("grantcodes-app-bar");
69
88
  const logoSlot = element.shadowRoot.querySelector('slot[name="logo"]');
@@ -11,7 +11,7 @@
11
11
  .nav-link {
12
12
  display: inline-flex;
13
13
  align-items: center;
14
- border-radius: var(--g-theme-border-radius-md);
14
+ border-radius: var(--g-border-radius-md);
15
15
  background-color: transparent;
16
16
  transition: background-color 0.15s ease;
17
17
  }
@@ -19,7 +19,7 @@
19
19
  .nav-link:hover {
20
20
  background-color: color-mix(
21
21
  in srgb,
22
- var(--g-theme-color-content-default) 8%,
22
+ var(--g-color-content-default) 8%,
23
23
  transparent
24
24
  );
25
25
  }
@@ -39,21 +39,20 @@
39
39
  ::slotted(a:focus-visible) {
40
40
  display: inline-flex;
41
41
  align-items: center;
42
- color: var(--g-theme-color-content-default) !important;
42
+ color: var(--g-color-content-default) !important;
43
43
  text-decoration: none !important;
44
44
  opacity: 1 !important;
45
- padding-block: var(--g-theme-spacing-xs, 0.25rem);
46
- padding-inline: var(--g-theme-spacing-sm);
47
- font-family: var(--g-theme-typography-label-font-family);
48
- font-weight: var(--g-theme-typography-label-font-weight);
45
+ padding-block: var(--g-spacing-xs, 0.25rem);
46
+ padding-inline: var(--g-spacing-sm);
47
+ font: var(--g-typography-body-sm-font);
49
48
  white-space: nowrap;
50
49
  }
51
50
 
52
51
  ::slotted(a:focus-visible) {
53
- outline: var(--g-theme-focus-ring-width-default) solid
54
- var(--g-theme-focus-ring-color-default);
55
- outline-offset: var(--g-theme-focus-ring-offset-default);
56
- border-radius: var(--g-theme-border-radius-md);
52
+ outline: var(--g-focus-ring-width-default) solid
53
+ var(--g-focus-ring-color-default);
54
+ outline-offset: var(--g-focus-ring-offset-default);
55
+ border-radius: var(--g-border-radius-md);
57
56
  }
58
57
 
59
58
  @media (prefers-reduced-motion: reduce) {
@@ -13,15 +13,14 @@
13
13
  display: flex;
14
14
  align-items: center;
15
15
  justify-content: center;
16
- inline-size: var(--g-theme-spacing-2xl);
17
- block-size: var(--g-theme-spacing-2xl);
16
+ inline-size: var(--g-spacing-2xl);
17
+ block-size: var(--g-spacing-2xl);
18
18
  border-radius: 50%;
19
19
  overflow: hidden;
20
- background-color: var(--g-theme-color-primary-200);
21
- color: var(--g-theme-color-primary-900);
20
+ background-color: var(--g-color-primary-200);
21
+ color: var(--g-color-primary-900);
22
22
  text-align: center;
23
- font-size: var(--g-theme-typography-h6-font-size);
24
- font-weight: var(--g-theme-typography-label-default-font-weight);
23
+ font: var(--g-typography-h6-font)
25
24
  }
26
25
 
27
26
  .avatar__image {
@@ -11,11 +11,12 @@
11
11
  .badge {
12
12
  display: inline-flex;
13
13
  align-items: center;
14
- gap: var(--g-theme-spacing-xs);
14
+ gap: var(--g-spacing-xs);
15
15
  padding-inline: 0.625em;
16
16
  padding-block: 0.375em;
17
- border-radius: var(--g-theme-border-radius-md, 0.375rem);
18
- font: var(--g-theme-typography-meta);
17
+ border-radius: var(--g-border-radius-md);
18
+ font: var(--g-typography-body-sm-font);
19
+ font-size: var(--g-typography-font-size-2xs);
19
20
  line-height: 1;
20
21
  white-space: nowrap;
21
22
  border-width: 1px;
@@ -25,54 +26,54 @@
25
26
 
26
27
  /* Soft style variants */
27
28
  .badge--primary {
28
- background-color: var(--g-theme-color-primary-200);
29
- color: var(--g-theme-color-primary-600);
29
+ background-color: var(--g-color-primary-200);
30
+ color: var(--g-color-primary-600);
30
31
  border-color: transparent;
31
32
  }
32
33
 
33
34
  .badge--success {
34
35
  background-color: color-mix(
35
36
  in srgb,
36
- var(--g-color-utility-green-500) 15%,
37
+ var(--g-color-utility-success) 15%,
37
38
  transparent
38
39
  );
39
- color: var(--g-color-utility-green-700);
40
+ color: var(--g-color-content-utility-success);
40
41
  border-color: transparent;
41
42
  }
42
43
 
43
44
  .badge--warning {
44
45
  background-color: color-mix(
45
46
  in srgb,
46
- var(--g-color-utility-yellow-500) 15%,
47
+ var(--g-color-utility-warning) 15%,
47
48
  transparent
48
49
  );
49
- color: var(--g-color-utility-yellow-700);
50
+ color: var(--g-color-content-utility-warning);
50
51
  border-color: transparent;
51
52
  }
52
53
 
53
54
  .badge--error {
54
55
  background-color: color-mix(
55
56
  in srgb,
56
- var(--g-color-utility-red-500) 15%,
57
+ var(--g-color-utility-error) 15%,
57
58
  transparent
58
59
  );
59
- color: var(--g-color-utility-red-700);
60
+ color: var(--g-color-content-utility-error);
60
61
  border-color: transparent;
61
62
  }
62
63
 
63
64
  .badge--info {
64
65
  background-color: color-mix(
65
66
  in srgb,
66
- var(--g-color-utility-blue-500) 15%,
67
+ var(--g-color-utility-info) 15%,
67
68
  transparent
68
69
  );
69
- color: var(--g-color-utility-blue-700);
70
+ color: var(--g-color-content-utility-info);
70
71
  border-color: transparent;
71
72
  }
72
73
 
73
74
  .badge--neutral {
74
- background-color: var(--g-theme-color-background-subtle);
75
- color: var(--g-theme-color-content-default);
75
+ background-color: var(--g-color-background-subtle);
76
+ color: var(--g-color-content-default);
76
77
  border-color: transparent;
77
78
  }
78
79
 
@@ -16,7 +16,7 @@
16
16
  display: flex;
17
17
  flex-wrap: wrap;
18
18
  align-items: center;
19
- gap: var(--g-theme-spacing-sm);
19
+ gap: var(--g-spacing-sm);
20
20
  margin: 0;
21
21
  padding: 0;
22
22
  list-style: none;
@@ -25,24 +25,23 @@
25
25
  .breadcrumb__item {
26
26
  display: inline-flex;
27
27
  align-items: center;
28
- gap: var(--g-theme-spacing-sm);
29
- font-size: var(--g-typography-font-size-14);
30
- color: var(--g-theme-color-primary-700);
28
+ gap: var(--g-spacing-sm);
29
+ font-size: var(--g-typography-body-sm-font-size);
30
+ color: var(--g-color-primary-700);
31
31
  }
32
32
 
33
33
  /* Separator using ::after pseudo-element; driven by parent via data-has-separator */
34
34
  :host([data-has-separator]) .breadcrumb__item::after {
35
35
  content: var(--component-breadcrumb-separator, "/");
36
36
  display: inline-block;
37
- color: var(--g-theme-color-primary-400);
38
- font-weight: var(--g-typography-font-weight-400);
37
+ color: var(--g-color-primary-400);
38
+ font-weight: var(--g-typography-body-lg-font-weight);
39
39
  user-select: none;
40
40
  pointer-events: none;
41
41
  }
42
42
 
43
43
  /* Current page styling */
44
44
  .breadcrumb__item[data-current] {
45
- font-weight: var(--g-typography-font-weight-600);
46
45
  color: var(--color-base-primary-900);
47
46
  }
48
47
 
@@ -51,10 +50,10 @@
51
50
  }
52
51
 
53
52
  .breadcrumb__link {
54
- color: var(--g-theme-color-primary-600);
53
+ color: var(--g-color-primary-600);
55
54
  text-decoration: none;
56
55
  transition: color 0.2s ease;
57
- border-radius: var(--g-theme-border-radius-md, 0.25rem);
56
+ border-radius: var(--g-border-radius-md, 0.25rem);
58
57
  padding-inline: 0.25em;
59
58
  padding-block: 0.125em;
60
59
  margin-inline: -0.25em;
@@ -62,7 +61,7 @@
62
61
  }
63
62
 
64
63
  .breadcrumb__link:hover {
65
- color: var(--g-theme-color-primary-700);
64
+ color: var(--g-color-primary-700);
66
65
  text-decoration: underline;
67
66
  }
68
67
 
@@ -80,6 +79,6 @@
80
79
  content: "...";
81
80
  display: inline-block;
82
81
  margin-inline-end: 0.5rem;
83
- color: var(--g-theme-color-primary-400);
82
+ color: var(--g-color-primary-400);
84
83
  }
85
84
  }