srcdev-nuxt-components 9.6.5 → 9.6.7

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 (35) hide show
  1. package/.claude/rules/consumer/a11y-no-focus-steal.md +14 -0
  2. package/.claude/skills/component-compliance-checklist.md +5 -1
  3. package/.claude/skills/components/display-toast.md +6 -3
  4. package/.claude/skills/components/page-hero-highlights.md +22 -18
  5. package/.claude/skills/components/social-icons-list.md +32 -5
  6. package/.claude/skills/css-dynamic-border-radius.md +114 -0
  7. package/.claude/skills/index.md +3 -2
  8. package/.claude/skills/storybook-add-story.md +6 -0
  9. package/.vscode/srcdev-component-display-toast.code-snippets +6 -8
  10. package/.vscode/srcdev-component-page-hero-highlights.code-snippets +2 -1
  11. package/.vscode/srcdev-component-social-icons-list.code-snippets +14 -0
  12. package/.vscode/srcdev-utility-dynamic-border-radius.code-snippets +31 -0
  13. package/app/assets/styles/setup/06.utility-classes/_dynamic-border-radius.css +27 -0
  14. package/app/assets/styles/setup/06.utility-classes/index.css +1 -0
  15. package/app/components/02.molecules/social-icons-list/CONSUMER-STYLING.md +97 -8
  16. package/app/components/02.molecules/social-icons-list/SocialIconsList.vue +80 -14
  17. package/app/components/02.molecules/social-icons-list/stories/SocialIconsList.stories.ts +230 -2
  18. package/app/components/02.molecules/social-icons-list/stories/social-icons-list-recipes.css +108 -0
  19. package/app/components/02.molecules/social-icons-list/tests/SocialIconsList.spec.ts +123 -52
  20. package/app/components/02.molecules/social-icons-list/tests/__snapshots__/SocialIconsList.spec.ts.snap +10 -4
  21. package/app/components/02.molecules/toast/CONSUMER-STYLING.md +9 -3
  22. package/app/components/02.molecules/toast/DisplayToast.vue +10 -10
  23. package/app/components/02.molecules/toast/DisplayToastProvider.vue +12 -4
  24. package/app/components/02.molecules/toast/stories/DisplayToast.stories.ts +200 -2
  25. package/app/components/02.molecules/toast/tests/DisplayToast.spec.ts +33 -12
  26. package/app/components/02.molecules/toast/tests/DisplayToastProvider.spec.ts +20 -0
  27. package/app/components/04.templates/page-hero-highlights/CONSUMER-STYLING.md +32 -12
  28. package/app/components/04.templates/page-hero-highlights/PageHeroHighlights.vue +56 -47
  29. package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlights.stories.ts +158 -307
  30. package/app/components/04.templates/page-hero-highlights/stories/PageHeroHighlightsHeader.stories.ts +10 -0
  31. package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlights.spec.ts +49 -27
  32. package/app/components/04.templates/page-hero-highlights/tests/PageHeroHighlightsHeader.spec.ts +42 -7
  33. package/app/components/04.templates/page-hero-highlights/tests/__snapshots__/PageHeroHighlights.spec.ts.snap +12 -10
  34. package/app/types/components/social-icons-list.d.ts +9 -0
  35. package/package.json +1 -1
@@ -198,21 +198,35 @@ describe("DisplayToast", () => {
198
198
 
199
199
  // ─── Dismiss via Escape key ────────────────────────────────────────────────
200
200
 
201
- it("transitions to hide class when Escape is pressed", async () => {
201
+ it("transitions to hide class when Escape is pressed on the toast", async () => {
202
202
  await mountAndShow({ config: { behavior: { autoDismiss: false } } });
203
- vi.advanceTimersByTime(100); // fire the focus setTimeout
204
- await nextTick();
203
+ vi.advanceTimersByTime(1);
205
204
  toast()!.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", bubbles: true }));
206
205
  await nextTick();
207
206
  expect(toast()!.getAttribute("data-state")).toBe("hide");
208
207
  });
209
208
 
209
+ it("dismisses on Escape pressed anywhere in the document, since it never takes focus", async () => {
210
+ await mountAndShow({ config: { behavior: { autoDismiss: false } } });
211
+ document.body.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", bubbles: true }));
212
+ await nextTick();
213
+ expect(toast()!.getAttribute("data-state")).toBe("hide");
214
+ });
215
+
216
+ it("ignores an Escape another handler has already claimed", async () => {
217
+ await mountAndShow({ config: { behavior: { autoDismiss: false } } });
218
+ const event = new KeyboardEvent("keydown", { key: "Escape", bubbles: true, cancelable: true });
219
+ event.preventDefault();
220
+ document.body.dispatchEvent(event);
221
+ await nextTick();
222
+ expect(toast()!.getAttribute("data-state")).toBe("show");
223
+ });
224
+
210
225
  // ─── Dismiss via close button ─────────────────────────────────────────────
211
226
 
212
227
  it("transitions to hide class when the close button is clicked", async () => {
213
228
  await mountAndShow({ config: { behavior: { autoDismiss: false } } });
214
- vi.advanceTimersByTime(100);
215
- await nextTick();
229
+ vi.advanceTimersByTime(1);
216
230
  (document.querySelector("[data-test-id='alert-dismiss']") as HTMLElement).click();
217
231
  await nextTick();
218
232
  expect(toast()!.getAttribute("data-state")).toBe("hide");
@@ -282,22 +296,29 @@ describe("DisplayToast", () => {
282
296
  expect(toast()!.getAttribute("data-state")).toBe("hide");
283
297
  });
284
298
 
285
- it("does not pause when the toast takes focus after mouse input", async () => {
299
+ it("does not move focus to itself when shown", async () => {
300
+ await mountAndShow({ config: autoConfig });
301
+ vi.advanceTimersByTime(500);
302
+ await nextTick();
303
+ expect(document.activeElement).not.toBe(toast());
304
+ expect(toast()!.hasAttribute("data-paused")).toBe(false);
305
+ });
306
+
307
+ it("does not pause when focused after mouse input", async () => {
286
308
  setFocusVisible(false);
287
309
  await mountAndShow({ config: autoConfig });
288
- vi.advanceTimersByTime(100); // the toast focuses itself
310
+ (toast() as HTMLElement).focus();
289
311
  await nextTick();
290
- expect(document.activeElement).toBe(toast());
291
312
  expect(toast()!.hasAttribute("data-paused")).toBe(false);
292
- vi.advanceTimersByTime(900);
313
+ vi.advanceTimersByTime(1000);
293
314
  await nextTick();
294
315
  expect(toast()!.getAttribute("data-state")).toBe("hide");
295
316
  });
296
317
 
297
- it("pauses when the toast takes focus after keyboard input, until focus leaves", async () => {
318
+ it("pauses when a keyboard user focuses the toast, until focus leaves", async () => {
298
319
  setFocusVisible(true);
299
320
  await mountAndShow({ config: autoConfig });
300
- vi.advanceTimersByTime(100);
321
+ (toast() as HTMLElement).focus();
301
322
  await nextTick();
302
323
  expect(toast()!.hasAttribute("data-paused")).toBe(true);
303
324
  vi.advanceTimersByTime(5000);
@@ -305,7 +326,7 @@ describe("DisplayToast", () => {
305
326
  expect(toast()!.getAttribute("data-state")).toBe("show");
306
327
  (toast() as HTMLElement).blur();
307
328
  await nextTick();
308
- vi.advanceTimersByTime(900);
329
+ vi.advanceTimersByTime(1000);
309
330
  await nextTick();
310
331
  expect(toast()!.getAttribute("data-state")).toBe("hide");
311
332
  });
@@ -208,6 +208,26 @@ describe("DisplayToastProvider", () => {
208
208
  expect(items().length).toBe(0);
209
209
  });
210
210
 
211
+ it("does not move focus to a toast when it appears", async () => {
212
+ await mountProvider(DisplayToastProvider);
213
+ show({ behavior: { autoDismiss: false } });
214
+ await nextTick();
215
+ await nextTick();
216
+ expect(document.activeElement).not.toBe(item());
217
+ });
218
+
219
+ it("dismisses only the newest toast when Escape is pressed outside the toasts", async () => {
220
+ await mountProvider(DisplayToastProvider, { props: { maxVisible: 2 } });
221
+ show({ content: { text: "First" }, behavior: { autoDismiss: false } });
222
+ show({ content: { text: "Second" }, behavior: { autoDismiss: false } });
223
+ await nextTick();
224
+ expect(items().length).toBe(2);
225
+ document.body.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", bubbles: true }));
226
+ await nextTick();
227
+ expect(items().length).toBe(1);
228
+ expect(item()!.textContent).toContain("First");
229
+ });
230
+
211
231
  // ─── Auto-dismiss timer ───────────────────────────────────────────────────
212
232
 
213
233
  it("auto-dismisses after duration", async () => {
@@ -6,12 +6,12 @@
6
6
 
7
7
  | Token | Default | Controls |
8
8
  |---|---|---|
9
- | `--page-hero-highlights-max-width` | `1064px` | Central column cap (unless `width-constrained`) |
9
+ | `--page-hero-highlights-max-width` | `1064px` | Central column cap with `width-constrained` |
10
10
  | `--page-hero-highlights-gutter-mobile` | `16px` | Side gutter |
11
- | `--page-hero-highlights-gutter-tablet` | `40px` | Side gutter at 768px+ container width |
12
- | `--page-hero-highlights-gutter-desktop` | `32px` | Side gutter at 1024px+ |
13
- | `--page-hero-highlights-header-background` | `darkblue` | Header zone background |
14
- | `--page-hero-highlights-content-background` | `var(--slate-01)` | Content zone background |
11
+ | `--page-hero-highlights-gutter-tablet` | `40px` | Side gutter at 768px+ of the component's width |
12
+ | `--page-hero-highlights-gutter-desktop` | `32px` | Side gutter at 1024px+ of the component's width |
13
+ | `--page-hero-highlights-header-background` | `var(--theme-surface-subtle)` | Header zone background |
14
+ | `--page-hero-highlights-content-background` | `transparent` | Content zone background |
15
15
  | `--page-hero-highlights-content-start-gap` | `1.2rem` | Space above the content panel |
16
16
  | `--page-hero-highlights-content-end-gap` | `1.2rem` | Space below the content zone |
17
17
  | `--page-hero-highlights-content-margin-block-start` | `2.4rem` | Space above the content slot |
@@ -23,24 +23,25 @@
23
23
  |---|---|---|
24
24
  | `--page-hero-highlights-strip-gap` | `1rem` | Gap between highlight items |
25
25
  | `--page-hero-highlights-strip-inset` | `1.2rem` | Strip inline inset (with the content panel) |
26
+ | `--page-hero-highlights-item-min-width` | `12rem` | Narrowest an item gets with `highlights-equal-widths` before the strip wraps to a new row |
26
27
  | `--page-hero-highlights-title-height` | `1fr` | Title row height |
27
28
  | `--page-hero-highlights-title-height-baseline` | `4rem` | Title row height with `highlight-title-baseline` |
28
29
  | `--page-hero-highlights-item-padding` | `1.2rem` | Item padding |
29
30
  | `--page-hero-highlights-item-padding-block-start` | the item padding | Item top padding |
30
31
  | `--page-hero-highlights-item-padding-block-start-baseline` | `0` | Item top padding with `highlight-title-baseline` |
31
32
  | `--page-hero-highlights-item-rows-gap` | `1.2rem` | Gap between item title and body |
32
- | `--page-hero-highlights-item-background` | `white` | Item background |
33
- | `--page-hero-highlights-item-border` | `1px solid black` | Item border |
33
+ | `--page-hero-highlights-item-background` | `var(--page-bg, Canvas)` | Item background |
34
+ | `--page-hero-highlights-item-border` | `1px solid var(--theme-border)` | Item border |
34
35
  | `--page-hero-highlights-item-border-radius` | `8px` | Item rounding |
35
- | `--page-hero-highlights-item-colour` | `black` | Item text colour |
36
+ | `--page-hero-highlights-item-colour` | `var(--theme-text)` | Item text colour |
36
37
 
37
38
  ### Content panel (`content-panel`, on by default)
38
39
 
39
40
  | Token | Default | Controls |
40
41
  |---|---|---|
41
- | `--page-hero-highlights-panel-background` | `var(--slate-00)` | Panel background |
42
- | `--page-hero-highlights-panel-border` | `1px solid var(--slate-06)` | Panel border |
43
- | `--page-hero-highlights-panel-outline` | `1px solid var(--slate-02)` | Panel outline |
42
+ | `--page-hero-highlights-panel-background` | `var(--theme-surface-subtle)` | Panel background |
43
+ | `--page-hero-highlights-panel-border` | `1px solid var(--theme-border)` | Panel border |
44
+ | `--page-hero-highlights-panel-outline` | `none` | Panel outline |
44
45
  | `--page-hero-highlights-panel-border-radius` | `0.8rem` | Panel rounding |
45
46
 
46
47
  ### PageHeroHighlightsHeader
@@ -56,6 +57,20 @@
56
57
  Private (not public API): `--_max-width`, `--_gutter`, `--_strip-inset`, `--_title-height`,
57
58
  `--_item-padding`, `--_item-padding-block-start`, `--_header-slot-grid-row`.
58
59
 
60
+ > Changed 2026-10-16:
61
+ >
62
+ > - `width-constrained` was inverted: `true` gave a full-width column and `false` capped it at
63
+ > `--page-hero-highlights-max-width`, the opposite of every doc. It now matches the docs (`true` caps it,
64
+ > `content-align` applies). Flip any `width-constrained` you set to get the old look.
65
+ > - The tablet and desktop gutters never applied: their `@container` queries had no container to
66
+ > match. The root is now a named `page-hero-highlights` inline-size container and the rows sit in a
67
+ > new `.page-hero-highlights-grid` wrapper, so the gutters step at the component's own width.
68
+ > - Colour defaults are light, from theme tokens (were `darkblue`, `white`, `black` and `--slate-*`):
69
+ > set the header, item and panel tokens to keep a dark header.
70
+ > - `highlights-equal-widths` now wraps onto new rows below `--page-hero-highlights-item-min-width`
71
+ > instead of squeezing every item into one row, and grid tracks are `minmax(0, …)` so long
72
+ > unbroken text can't widen the layout. Highlight items get `overflow-wrap: anywhere`.
73
+ >
59
74
  > Changed 2026-09-28: every token used to be declared on the root with its value, under generic
60
75
  > names (`--max-width`, `--header-row-background-colour`, `--highlight-*`, `--content-row-*`,
61
76
  > `--content-slot-*`, `--phh-*`), so a value set on an ancestor never landed and the names could
@@ -74,7 +89,7 @@ Private (not public API): `--_max-width`, `--_gutter`, `--_strip-inset`, `--_tit
74
89
  | `.highlight-title-baseline` | root | `highlight-title-baseline` |
75
90
  | `.equal-widths` / `.flexible-widths`, `.justify-*` | `.page-hero-highlights-strip` | `highlights-equal-widths`, `highlights-justify` |
76
91
 
77
- Inner classes: `.page-hero-highlights-header-row`, `.page-hero-highlights-header-slot`,
92
+ Inner classes: `.page-hero-highlights-grid` (the grid itself, inside the root), `.page-hero-highlights-header-row`, `.page-hero-highlights-header-slot`,
78
93
  `.page-hero-highlights-strip`, `.page-hero-highlights-content-row` (its `::before` is the content
79
94
  panel), `.page-hero-highlights-content-slot`; header component `.page-hero-highlights-header-start`,
80
95
  `.page-hero-highlights-header-end`.
@@ -96,6 +111,11 @@ Set the tokens above on an element you own (a page or section class, or a class
96
111
  `<style scoped>`, tokens set on your element still work, but selectors that reach inside the component need
97
112
  `:deep()`. Patterns and examples: `.claude/skills/component-local-style-override.md`.
98
113
 
114
+ **Caveat:** the root is an inline-size container (`container: page-hero-highlights / inline-size`), so it
115
+ can't size itself from its content: give it a width from its context (a block in normal flow is fine; as a
116
+ flex or grid item give it `inline-size: 100%` or a track). The highlight item padding tokens are
117
+ re-declared by `highlight-title-baseline`, so with that prop on, set the `-baseline` variants.
118
+
99
119
  ---
100
120
 
101
121
  ## Class passthrough
@@ -5,17 +5,19 @@
5
5
  :class="[elementClasses, componentClasses]"
6
6
  :aria-labelledby="ariaLabelledby"
7
7
  >
8
- <div class="page-hero-highlights-header-row">
9
- <div class="page-hero-highlights-header-slot">
10
- <slot name="header" :heading-id="headingId"></slot>
8
+ <div class="page-hero-highlights-grid">
9
+ <div class="page-hero-highlights-header-row">
10
+ <div class="page-hero-highlights-header-slot">
11
+ <slot name="header" :heading-id="headingId"></slot>
12
+ </div>
11
13
  </div>
12
- </div>
13
- <div class="page-hero-highlights-strip" :class="highlightClasses">
14
- <slot name="highlights"></slot>
15
- </div>
16
- <div class="page-hero-highlights-content-row">
17
- <div class="page-hero-highlights-content-slot">
18
- <slot name="content"></slot>
14
+ <div class="page-hero-highlights-strip" :class="highlightClasses">
15
+ <slot name="highlights"></slot>
16
+ </div>
17
+ <div class="page-hero-highlights-content-row">
18
+ <div class="page-hero-highlights-content-slot">
19
+ <slot name="content"></slot>
20
+ </div>
19
21
  </div>
20
22
  </div>
21
23
  </component>
@@ -79,13 +81,7 @@ watch(
79
81
  --_item-padding-block-start: var(--page-hero-highlights-item-padding-block-start, var(--_item-padding));
80
82
  --_header-slot-grid-row: 1;
81
83
 
82
- @container (width >= 768px) {
83
- --_gutter: var(--page-hero-highlights-gutter-tablet, 40px);
84
- }
85
-
86
- @container (width >= 1024px) {
87
- --_gutter: var(--page-hero-highlights-gutter-desktop, 32px);
88
- }
84
+ container: page-hero-highlights / inline-size;
89
85
 
90
86
  &.highlight-title-baseline {
91
87
  --_title-height: var(--page-hero-highlights-title-height-baseline, 4rem);
@@ -93,38 +89,44 @@ watch(
93
89
  --_header-slot-grid-row: 1 / span 2;
94
90
  }
95
91
 
96
- display: grid;
97
- grid-template-rows: auto var(--_title-height) 1fr auto;
98
- gap: 0;
99
-
100
- &.width-constrained {
101
- grid-template-columns: var(--_gutter) 1fr var(--_gutter);
102
- }
92
+ .page-hero-highlights-grid {
93
+ display: grid;
94
+ grid-template-rows: auto var(--_title-height) 1fr auto;
95
+ grid-template-columns: var(--_gutter) minmax(0, 1fr) var(--_gutter);
96
+ gap: 0;
103
97
 
104
- &:not(.width-constrained) {
105
- &.content-align-start {
106
- grid-template-columns: var(--_gutter) minmax(0, var(--_max-width)) minmax(var(--_gutter), 1fr);
98
+ @container page-hero-highlights (width >= 768px) {
99
+ --_gutter: var(--page-hero-highlights-gutter-tablet, 40px);
107
100
  }
108
101
 
109
- &.content-align-center {
110
- grid-template-columns:
111
- max(var(--_gutter), (100% - var(--_max-width)) / 2)
112
- 1fr
113
- max(var(--_gutter), (100% - var(--_max-width)) / 2);
102
+ @container page-hero-highlights (width >= 1024px) {
103
+ --_gutter: var(--page-hero-highlights-gutter-desktop, 32px);
114
104
  }
115
105
  }
116
106
 
107
+ &.width-constrained.content-align-start .page-hero-highlights-grid {
108
+ grid-template-columns: var(--_gutter) minmax(0, var(--_max-width)) minmax(var(--_gutter), 1fr);
109
+ }
110
+
111
+ &.width-constrained.content-align-center .page-hero-highlights-grid {
112
+ grid-template-columns:
113
+ max(var(--_gutter), (100% - var(--_max-width)) / 2)
114
+ minmax(0, 1fr)
115
+ max(var(--_gutter), (100% - var(--_max-width)) / 2);
116
+ }
117
+
117
118
  .page-hero-highlights-header-row {
118
119
  grid-column: 1 / -1;
119
120
  grid-row: 1 / 3;
120
121
  display: grid;
121
122
  grid-template-columns: subgrid;
122
123
  grid-template-rows: subgrid;
123
- background-color: var(--page-hero-highlights-header-background, darkblue);
124
+ background-color: var(--page-hero-highlights-header-background, var(--theme-surface-subtle));
124
125
 
125
126
  .page-hero-highlights-header-slot {
126
127
  grid-column: 2;
127
128
  grid-row: var(--_header-slot-grid-row);
129
+ min-inline-size: 0;
128
130
  container-type: inline-size;
129
131
  }
130
132
  }
@@ -134,19 +136,27 @@ watch(
134
136
  grid-row: 2 / 4;
135
137
  position: relative;
136
138
  z-index: 1;
139
+ min-inline-size: 0;
137
140
  gap: var(--page-hero-highlights-strip-gap, 1rem);
138
141
  margin-inline-start: 0;
139
142
 
140
143
  &.equal-widths {
141
144
  display: grid;
142
- grid-auto-columns: 1fr;
143
- grid-auto-flow: column;
145
+ grid-template-columns: repeat(
146
+ auto-fit,
147
+ minmax(min(100%, var(--page-hero-highlights-item-min-width, 12rem)), 1fr)
148
+ );
144
149
  }
145
150
 
146
151
  &.flexible-widths {
147
152
  display: flex;
148
153
  flex-wrap: wrap;
149
154
  justify-content: center;
155
+
156
+ & > * {
157
+ min-inline-size: 0;
158
+ max-inline-size: 100%;
159
+ }
150
160
  }
151
161
 
152
162
  &.justify-start {
@@ -173,18 +183,19 @@ watch(
173
183
  display: grid;
174
184
  grid-template-rows: subgrid;
175
185
  grid-auto-flow: row;
186
+ overflow-wrap: anywhere;
176
187
  padding-block: var(--_item-padding-block-start) var(--_item-padding);
177
188
  padding-inline: var(--_item-padding);
178
- background-color: var(--page-hero-highlights-item-background, white);
179
- border: var(--page-hero-highlights-item-border, 1px solid black);
189
+ background-color: var(--page-hero-highlights-item-background, var(--page-bg, Canvas));
190
+ border: var(--page-hero-highlights-item-border, 1px solid var(--theme-border));
180
191
  border-radius: var(--page-hero-highlights-item-border-radius, 8px);
181
- color: var(--page-hero-highlights-item-colour, black);
192
+ color: var(--page-hero-highlights-item-colour, var(--theme-text));
182
193
 
183
194
  .page-hero-highlights-item-title {
184
195
  display: grid;
185
196
  grid-row: 2;
186
197
  align-items: end;
187
- height: var(--_title-height);
198
+ block-size: var(--_title-height);
188
199
  }
189
200
 
190
201
  .page-hero-highlights-item-body {
@@ -202,12 +213,13 @@ watch(
202
213
  grid-template-rows: subgrid;
203
214
  position: relative;
204
215
  isolation: isolate;
205
- background-color: var(--page-hero-highlights-content-background, var(--slate-01));
216
+ background-color: var(--page-hero-highlights-content-background, transparent);
206
217
  padding-block-end: var(--page-hero-highlights-content-end-gap, 1.2rem);
207
218
 
208
219
  .page-hero-highlights-content-slot {
209
220
  grid-column: 2;
210
221
  grid-row: 2;
222
+ min-inline-size: 0;
211
223
  margin-block: var(--page-hero-highlights-content-margin-block-start, 2.4rem)
212
224
  var(--page-hero-highlights-content-margin, var(--_strip-inset));
213
225
  margin-inline: 0;
@@ -222,15 +234,12 @@ watch(
222
234
  .page-hero-highlights-content-row {
223
235
  &::before {
224
236
  content: "";
225
- display: grid;
226
- grid-template-columns: subgrid;
227
- grid-template-rows: subgrid;
228
237
  grid-column: 2;
229
238
  grid-row: 1 / span 2;
230
- margin-top: var(--page-hero-highlights-content-start-gap, 1.2rem);
231
- background-color: var(--page-hero-highlights-panel-background, var(--slate-00));
232
- border: var(--page-hero-highlights-panel-border, 1px solid var(--slate-06));
233
- outline: var(--page-hero-highlights-panel-outline, 1px solid var(--slate-02));
239
+ margin-block-start: var(--page-hero-highlights-content-start-gap, 1.2rem);
240
+ background-color: var(--page-hero-highlights-panel-background, var(--theme-surface-subtle));
241
+ border: var(--page-hero-highlights-panel-border, 1px solid var(--theme-border));
242
+ outline: var(--page-hero-highlights-panel-outline, none);
234
243
  border-radius: var(--page-hero-highlights-panel-border-radius, 0.8rem);
235
244
  }
236
245