impact-nova 2.5.22 → 2.6.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 (37) hide show
  1. package/dist/components/data/ag-grid-react/ag-grid.types.d.ts +2 -0
  2. package/dist/components/data/ag-grid-react/headers/components/header-info.d.ts +9 -3
  3. package/dist/components/data/ag-grid-react/headers/components/header-info.js +69 -61
  4. package/dist/components/data/ag-grid-react/headers/components/info-modal.js +8 -8
  5. package/dist/components/flows/guidance/guidance-layer.js +34 -31
  6. package/dist/components/flows/guidance/hooks/useGuidanceOverlayGeometry.js +29 -20
  7. package/dist/components/flows/guidance/renderers/announcement-renderer.d.ts +1 -1
  8. package/dist/components/flows/guidance/renderers/announcement-renderer.js +74 -28
  9. package/dist/components/flows/guidance/renderers/guidance-action-tap-icon.d.ts +5 -0
  10. package/dist/components/flows/guidance/renderers/guidance-action-tap-icon.js +68 -0
  11. package/dist/components/flows/guidance/renderers/guidance-announcement-surface.d.ts +5 -0
  12. package/dist/components/flows/guidance/renderers/guidance-announcement-surface.js +76 -0
  13. package/dist/components/flows/guidance/renderers/guidance-card-shared.d.ts +43 -2
  14. package/dist/components/flows/guidance/renderers/guidance-card-shared.js +322 -99
  15. package/dist/components/flows/guidance/renderers/guidance-renderer-shared.d.ts +3 -0
  16. package/dist/components/flows/guidance/renderers/guidance-renderer-shared.js +189 -148
  17. package/dist/components/flows/guidance/renderers/guidance-shortcut-display.d.ts +9 -0
  18. package/dist/components/flows/guidance/renderers/guidance-shortcut-display.js +36 -0
  19. package/dist/components/flows/guidance/renderers/guidance-tour-overlay.d.ts +2 -1
  20. package/dist/components/flows/guidance/renderers/guidance-tour-overlay.js +152 -89
  21. package/dist/i18n/defaultMessages.d.ts +6 -0
  22. package/dist/i18n/defaultMessages.js +13 -9
  23. package/dist/i18n/locales/de.js +4 -0
  24. package/dist/i18n/locales/es.js +4 -0
  25. package/dist/i18n/locales/hi.js +4 -0
  26. package/dist/i18n/locales/kn.js +4 -0
  27. package/dist/impact-nova-tokens.scss +22 -0
  28. package/dist/impact-nova.css +1 -1
  29. package/dist/lib/guidance/engine/guidance-engine.d.ts +9 -0
  30. package/dist/lib/guidance/engine/guidance-engine.js +127 -65
  31. package/dist/lib/guidance/engine/manifest-validator.js +37 -30
  32. package/dist/lib/guidance/targets/target-resolver.d.ts +1 -1
  33. package/dist/lib/guidance/targets/target-resolver.js +32 -30
  34. package/dist/lib/guidance/types/guidance.types.d.ts +41 -0
  35. package/dist/llms/rules/installation.js +1 -1
  36. package/dist/llms/rules/requirements.js +1 -1
  37. package/package.json +2 -1
@@ -1,33 +1,33 @@
1
- import { jsxs as h, jsx as o, Fragment as C } from "react/jsx-runtime";
2
- import * as l from "react";
3
- import { createPortal as $ } from "react-dom";
4
- import { GuidanceStepPanel as S } from "./guidance-card-shared.js";
5
- import { useGuidanceOverlayGeometry as z } from "../hooks/useGuidanceOverlayGeometry.js";
6
- import { useAdvanceOnTargetClick as E, buildHighlightRectForTarget as P, computePopoverPosition as A } from "./guidance-renderer-shared.js";
7
- const R = 220, n = `motion-safe:transition-[top,left,width,height] motion-safe:duration-[${R}ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)]`;
8
- function G({
1
+ import { jsxs as g, jsx as o, Fragment as $ } from "react/jsx-runtime";
2
+ import * as h from "react";
3
+ import { createPortal as z } from "react-dom";
4
+ import { GuidanceStepPanel as A } from "./guidance-card-shared.js";
5
+ import { useGuidanceOverlayGeometry as G } from "../hooks/useGuidanceOverlayGeometry.js";
6
+ import { useAdvanceOnTargetClick as P, buildHighlightRectForTarget as T, computePopoverPosition as H } from "./guidance-renderer-shared.js";
7
+ const _ = 220, i = `motion-safe:transition-[top,left,width,height] motion-safe:duration-[${_}ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)]`;
8
+ function L({
9
9
  highlightRect: e,
10
- blocksPointerEvents: u = !0
10
+ blocksPointerEvents: n = !0
11
11
  }) {
12
- const i = typeof window < "u" ? window.innerWidth : 0, g = typeof window < "u" ? window.innerHeight : 0, s = e.x + e.width, a = e.y + e.height, d = u ? `pointer-events-auto absolute bg-[var(--guidance-backdrop-bg)] opacity-[var(--guidance-backdrop-opacity,0.6)] ${n}` : `pointer-events-none absolute bg-[var(--guidance-backdrop-bg)] opacity-[var(--guidance-backdrop-opacity,0.6)] ${n}`;
13
- return /* @__PURE__ */ h(C, { children: [
12
+ const a = typeof window < "u" ? window.innerWidth : 0, d = typeof window < "u" ? window.innerHeight : 0, l = e.x + e.width, c = e.y + e.height, r = n ? `pointer-events-auto absolute bg-[var(--guidance-backdrop-bg)] opacity-[var(--guidance-backdrop-opacity,0.6)] ${i}` : `pointer-events-none absolute bg-[var(--guidance-backdrop-bg)] opacity-[var(--guidance-backdrop-opacity,0.6)] ${i}`;
13
+ return /* @__PURE__ */ g($, { children: [
14
14
  /* @__PURE__ */ o(
15
15
  "div",
16
16
  {
17
- className: d,
18
- style: { top: 0, left: 0, width: i, height: e.y },
17
+ className: r,
18
+ style: { top: 0, left: 0, width: a, height: e.y },
19
19
  "aria-hidden": "true"
20
20
  }
21
21
  ),
22
22
  /* @__PURE__ */ o(
23
23
  "div",
24
24
  {
25
- className: d,
25
+ className: r,
26
26
  style: {
27
- top: a,
27
+ top: c,
28
28
  left: 0,
29
- width: i,
30
- height: Math.max(0, g - a)
29
+ width: a,
30
+ height: Math.max(0, d - c)
31
31
  },
32
32
  "aria-hidden": "true"
33
33
  }
@@ -35,7 +35,7 @@ function G({
35
35
  /* @__PURE__ */ o(
36
36
  "div",
37
37
  {
38
- className: d,
38
+ className: r,
39
39
  style: {
40
40
  top: e.y,
41
41
  left: 0,
@@ -48,11 +48,11 @@ function G({
48
48
  /* @__PURE__ */ o(
49
49
  "div",
50
50
  {
51
- className: d,
51
+ className: r,
52
52
  style: {
53
53
  top: e.y,
54
- left: s,
55
- width: Math.max(0, i - s),
54
+ left: l,
55
+ width: Math.max(0, a - l),
56
56
  height: e.height
57
57
  },
58
58
  "aria-hidden": "true"
@@ -60,58 +60,94 @@ function G({
60
60
  )
61
61
  ] });
62
62
  }
63
+ const C = 12, y = 20;
64
+ function M(e) {
65
+ const n = C / 2, a = e.placement === "left" || e.placement === "right", d = a ? e.highlightRect.y + e.highlightRect.height / 2 : e.highlightRect.x + e.highlightRect.width / 2, l = a ? e.popoverTop : e.popoverLeft, c = a ? e.popoverHeight : e.popoverWidth, r = d - l - n, m = Math.max(
66
+ y,
67
+ c - y - C
68
+ );
69
+ return Math.min(Math.max(r, y), m);
70
+ }
63
71
  function B({
72
+ placement: e,
73
+ offset: n
74
+ }) {
75
+ const a = e === "left" || e === "right" ? { top: n } : { left: n }, d = {
76
+ bottom: "left-0 top-0 -translate-y-1/2 border-l border-t",
77
+ top: "bottom-0 left-0 translate-y-1/2 border-b border-r",
78
+ right: "left-0 top-0 -translate-x-1/2 border-b border-l",
79
+ left: "right-0 top-0 translate-x-1/2 border-r border-t"
80
+ }[e];
81
+ return /* @__PURE__ */ o(
82
+ "span",
83
+ {
84
+ "aria-hidden": "true",
85
+ className: `pointer-events-none absolute z-0 size-3 rotate-45 border border-[var(--color-border-accent-muted)] bg-[var(--color-border-accent-muted)] ${d}`,
86
+ style: a
87
+ }
88
+ );
89
+ }
90
+ function j({
64
91
  instruction: e,
65
- overlayComponent: u,
66
- onNext: i,
67
- onSkip: g,
68
- onDismiss: s
92
+ overlayComponent: n,
93
+ onNext: a,
94
+ onSkip: d,
95
+ onDismiss: l,
96
+ onBack: c
69
97
  }) {
70
- const a = e.target?.element, d = z(a, e.stepId), I = e.stepIndex + 1 >= e.totalSteps, c = E(e, i), v = c || e.advanceOn === "auto", b = l.useRef(null), f = l.useRef(null), [m, O] = l.useState({ width: 400, height: 240 }), N = l.useCallback(() => {
71
- a?.click();
72
- }, [a]);
73
- if (l.useLayoutEffect(() => {
74
- const r = f.current;
75
- r?.parentElement === document.body && document.body.appendChild(r);
76
- }, [e.stepId, v]), l.useLayoutEffect(() => {
77
- const r = b.current;
78
- if (!r)
98
+ const r = e.target?.element, m = G(r, e.stepId), N = e.stepIndex + 1 >= e.totalSteps, f = P(e, a), u = f || e.advanceOn === "auto", w = h.useRef(null), k = h.useRef(null), [v, E] = h.useState({ width: 400, height: 240 }), R = h.useCallback(() => {
99
+ r?.click();
100
+ }, [r]);
101
+ if (h.useLayoutEffect(() => {
102
+ const p = k.current;
103
+ p?.parentElement === document.body && document.body.appendChild(p);
104
+ }, [e.stepId, u]), h.useLayoutEffect(() => {
105
+ const p = w.current;
106
+ if (!p)
79
107
  return;
80
- const k = () => {
81
- const p = r.getBoundingClientRect();
82
- p.width > 0 && p.height > 0 && O({
83
- width: p.width,
84
- height: p.height
108
+ const I = () => {
109
+ const b = p.getBoundingClientRect();
110
+ b.width > 0 && b.height > 0 && E({
111
+ width: b.width,
112
+ height: b.height
85
113
  });
86
114
  };
87
- k();
88
- const x = new ResizeObserver(k);
89
- return x.observe(r), () => {
90
- x.disconnect();
115
+ I();
116
+ const O = new ResizeObserver(I);
117
+ return O.observe(p), () => {
118
+ O.disconnect();
91
119
  };
92
- }, [e.stepId, e.content.title, e.content.body]), !d || !a || typeof document > "u")
120
+ }, [e.stepId, e.content.title, e.content.body]), !m || !r || typeof document > "u")
93
121
  return null;
94
- const t = P(a), y = A({
122
+ const t = T(r), s = H({
95
123
  targetRect: t,
96
- popoverWidth: m.width,
97
- popoverHeight: m.height
98
- }), w = `guidance-mask-${e.stepId}`;
99
- return $(
100
- /* @__PURE__ */ h(
124
+ popoverWidth: v.width,
125
+ popoverHeight: v.height,
126
+ preferredPlacement: e.placement
127
+ }), S = M({
128
+ placement: s.placement,
129
+ popoverTop: s.top,
130
+ popoverLeft: s.left,
131
+ highlightRect: t,
132
+ popoverWidth: v.width,
133
+ popoverHeight: v.height
134
+ }), x = `guidance-mask-${e.stepId}`;
135
+ return z(
136
+ /* @__PURE__ */ g(
101
137
  "div",
102
138
  {
103
- ref: f,
104
- "data-component": u,
105
- className: "fixed inset-0 z-50 pointer-events-none",
139
+ ref: k,
140
+ "data-component": n,
141
+ className: "fixed inset-0 z-[60] pointer-events-none",
106
142
  role: "presentation",
107
143
  children: [
108
- /* @__PURE__ */ h(
144
+ /* @__PURE__ */ g(
109
145
  "svg",
110
146
  {
111
- className: `pointer-events-none absolute inset-0 size-full ${n}`,
147
+ className: `pointer-events-none absolute inset-0 size-full ${i}`,
112
148
  "aria-hidden": "true",
113
149
  children: [
114
- /* @__PURE__ */ o("defs", { children: /* @__PURE__ */ h("mask", { id: w, children: [
150
+ /* @__PURE__ */ o("defs", { children: /* @__PURE__ */ g("mask", { id: x, children: [
115
151
  /* @__PURE__ */ o("rect", { width: "100%", height: "100%", fill: "white" }),
116
152
  /* @__PURE__ */ o(
117
153
  "rect",
@@ -122,7 +158,7 @@ function B({
122
158
  height: t.height,
123
159
  rx: "8",
124
160
  fill: "black",
125
- className: n
161
+ className: i
126
162
  }
127
163
  )
128
164
  ] }) }),
@@ -133,24 +169,37 @@ function B({
133
169
  height: "100%",
134
170
  fill: "var(--guidance-backdrop-bg)",
135
171
  fillOpacity: "var(--guidance-backdrop-opacity, 0.6)",
136
- mask: `url(#${w})`
172
+ mask: `url(#${x})`
137
173
  }
138
174
  )
139
175
  ]
140
176
  }
141
177
  ),
142
178
  /* @__PURE__ */ o(
143
- G,
179
+ L,
144
180
  {
145
181
  highlightRect: t,
146
- blocksPointerEvents: !v
182
+ blocksPointerEvents: !u
147
183
  }
148
184
  ),
149
- c ? /* @__PURE__ */ o(
185
+ u ? null : /* @__PURE__ */ o(
186
+ "div",
187
+ {
188
+ className: "pointer-events-auto absolute z-10",
189
+ style: {
190
+ top: t.y,
191
+ left: t.x,
192
+ width: t.width,
193
+ height: t.height
194
+ },
195
+ "aria-hidden": "true"
196
+ }
197
+ ),
198
+ f ? /* @__PURE__ */ o(
150
199
  "button",
151
200
  {
152
201
  type: "button",
153
- className: `absolute z-10 cursor-pointer border-0 bg-transparent p-0 pointer-events-auto ${n}`,
202
+ className: `absolute z-10 cursor-pointer border-0 bg-transparent p-0 pointer-events-auto ${i}`,
154
203
  style: {
155
204
  top: t.y,
156
205
  left: t.x,
@@ -158,13 +207,13 @@ function B({
158
207
  height: t.height
159
208
  },
160
209
  "aria-label": `Click ${e.content.title}`,
161
- onClick: N
210
+ onClick: R
162
211
  }
163
212
  ) : null,
164
213
  /* @__PURE__ */ o(
165
214
  "div",
166
215
  {
167
- className: `pointer-events-none absolute rounded-lg ring-2 ring-[var(--guidance-highlight-ring,var(--color-primary))] ${n}`,
216
+ className: `pointer-events-none absolute rounded-lg ring-2 ring-[var(--guidance-highlight-ring,var(--color-primary))] ${i}`,
168
217
  style: {
169
218
  top: t.y,
170
219
  left: t.x,
@@ -173,37 +222,51 @@ function B({
173
222
  }
174
223
  }
175
224
  ),
176
- /* @__PURE__ */ o(
225
+ /* @__PURE__ */ g(
177
226
  "div",
178
227
  {
179
- ref: b,
180
- className: `pointer-events-auto absolute z-20 w-[min(400px,calc(100vw-2rem))] overflow-hidden rounded-2xl border border-stroke bg-canvas shadow-elevation-floating ${n}`,
228
+ ref: w,
229
+ className: `pointer-events-auto absolute z-20 w-[min(400px,calc(100vw-2rem))] ${i}`,
181
230
  style: {
182
- top: y.top,
183
- left: y.left
231
+ top: s.top,
232
+ left: s.left
184
233
  },
185
234
  role: "dialog",
186
235
  "aria-labelledby": `guidance-tour-title-${e.stepId}`,
187
236
  "aria-describedby": `guidance-tour-body-${e.stepId}`,
188
- children: /* @__PURE__ */ o(
189
- S,
190
- {
191
- title: e.content.title,
192
- body: e.content.body,
193
- optionalFooter: e.advanceOn !== "auto" ? e.content.footer : void 0,
194
- stepIndex: e.stepIndex,
195
- totalSteps: e.totalSteps,
196
- skippable: e.skippable,
197
- primaryActionLabel: I ? "Done" : "Next",
198
- onSkip: g,
199
- onDismiss: s,
200
- onPrimaryAction: i,
201
- showPrimaryAction: !c && e.advanceOn !== "auto",
202
- footerHint: c ? e.content.footer ?? "Click the highlighted button to continue." : e.advanceOn === "auto" ? e.content.footer ?? "Complete the action above to continue." : null,
203
- titleId: `guidance-tour-title-${e.stepId}`,
204
- bodyId: `guidance-tour-body-${e.stepId}`
205
- }
206
- )
237
+ children: [
238
+ /* @__PURE__ */ o(
239
+ B,
240
+ {
241
+ placement: s.placement,
242
+ offset: S
243
+ }
244
+ ),
245
+ /* @__PURE__ */ o("div", { className: "relative z-[1] overflow-hidden rounded-2xl border border-stroke bg-canvas shadow-elevation-floating", children: /* @__PURE__ */ o(
246
+ A,
247
+ {
248
+ title: e.content.title,
249
+ body: e.content.body,
250
+ optionalFooter: e.advanceOn !== "auto" ? e.content.footer : void 0,
251
+ stepIndex: e.stepIndex,
252
+ totalSteps: e.totalSteps,
253
+ skippable: e.skippable,
254
+ primaryActionLabel: N ? "Done" : "Next",
255
+ onSkip: d,
256
+ onDismiss: l,
257
+ onBack: c,
258
+ canGoBack: e.canGoBack,
259
+ advanceOn: e.advanceOn,
260
+ onPrimaryAction: a,
261
+ showPrimaryAction: !f && e.advanceOn !== "auto",
262
+ footerHint: f ? e.content.footer ?? "Click the highlighted button to continue." : e.advanceOn === "auto" ? e.content.footer ?? "Complete the action above to continue." : null,
263
+ footerKeybinding: e.content.keybinding,
264
+ shortcutReferences: e.content.shortcutReferences,
265
+ titleId: `guidance-tour-title-${e.stepId}`,
266
+ bodyId: `guidance-tour-body-${e.stepId}`
267
+ }
268
+ ) })
269
+ ]
207
270
  }
208
271
  )
209
272
  ]
@@ -213,5 +276,5 @@ function B({
213
276
  );
214
277
  }
215
278
  export {
216
- B as GuidanceTourOverlay
279
+ j as GuidanceTourOverlay
217
280
  };
@@ -280,6 +280,11 @@ export interface SidebarMessages {
280
280
  export interface StepperMessages {
281
281
  stepOfTotal: string;
282
282
  }
283
+ export interface GuidanceMessages {
284
+ endTour: string;
285
+ /** Toolbar badge on click-target steps (no trailing colon). */
286
+ actionRequiredBadge: string;
287
+ }
283
288
  export interface AdvancedFilterMessages {
284
289
  title: string;
285
290
  currentColumn: string;
@@ -350,6 +355,7 @@ export interface ImpactNovaMessages {
350
355
  horizontalScroller: HorizontalScrollerMessages;
351
356
  sidebar: SidebarMessages;
352
357
  stepper: StepperMessages;
358
+ guidance: GuidanceMessages;
353
359
  }
354
360
  /** Default English messages used when no provider or partial override */
355
361
  export declare const defaultMessages: ImpactNovaMessages;
@@ -237,13 +237,16 @@ const e = {
237
237
  }, m = {
238
238
  scrollLeft: "Scroll left",
239
239
  scrollRight: "Scroll right"
240
- }, S = {
240
+ }, f = {
241
241
  viewMore: "View More",
242
242
  viewLess: "View Less",
243
243
  logout: "Logout"
244
- }, f = {
244
+ }, S = {
245
245
  stepOfTotal: "Step {{current}} of {{total}}"
246
246
  }, g = {
247
+ endTour: "End tour",
248
+ actionRequiredBadge: "Action required"
249
+ }, v = {
247
250
  title: "Advanced Filter",
248
251
  currentColumn: "Current Column",
249
252
  allFilters: "Active Filters",
@@ -257,7 +260,7 @@ const e = {
257
260
  addRule: "+ Add Rule",
258
261
  deleteColumn: "Delete",
259
262
  noValueNeeded: "No value needed"
260
- }, v = {
263
+ }, w = {
261
264
  activeFilter: "Active filter",
262
265
  search: "Search",
263
266
  selection: "Selection",
@@ -292,7 +295,7 @@ const e = {
292
295
  columnOptions: "Column Options",
293
296
  chooseColumns: "Choose Columns",
294
297
  resetColumns: "Reset Columns"
295
- }, w = {
298
+ }, A = {
296
299
  calendar: e,
297
300
  datePicker: t,
298
301
  filter: a,
@@ -304,14 +307,15 @@ const e = {
304
307
  fileUpload: c,
305
308
  filterStrip: d,
306
309
  filterPanel: u,
307
- advancedFilter: g,
308
- gridHeader: v,
310
+ advancedFilter: v,
311
+ gridHeader: w,
309
312
  notificationPanel: p,
310
313
  helpCenter: h,
311
314
  horizontalScroller: m,
312
- sidebar: S,
313
- stepper: f
315
+ sidebar: f,
316
+ stepper: S,
317
+ guidance: g
314
318
  };
315
319
  export {
316
- w as defaultMessages
320
+ A as defaultMessages
317
321
  };
@@ -310,6 +310,10 @@ const e = {
310
310
  },
311
311
  stepper: {
312
312
  stepOfTotal: "Schritt {{current}} von {{total}}"
313
+ },
314
+ guidance: {
315
+ endTour: "Tour beenden",
316
+ actionRequiredBadge: "Aktion erforderlich"
313
317
  }
314
318
  };
315
319
  export {
@@ -310,6 +310,10 @@ const e = {
310
310
  },
311
311
  stepper: {
312
312
  stepOfTotal: "Paso {{current}} de {{total}}"
313
+ },
314
+ guidance: {
315
+ endTour: "Finalizar tour",
316
+ actionRequiredBadge: "Acción requerida"
313
317
  }
314
318
  };
315
319
  export {
@@ -310,6 +310,10 @@ const e = {
310
310
  },
311
311
  stepper: {
312
312
  stepOfTotal: "चरण {{current}} / {{total}}"
313
+ },
314
+ guidance: {
315
+ endTour: "टूर समाप्त करें",
316
+ actionRequiredBadge: "कार्रवाई आवश्यक"
313
317
  }
314
318
  };
315
319
  export {
@@ -310,6 +310,10 @@ const e = {
310
310
  },
311
311
  stepper: {
312
312
  stepOfTotal: "ಹಂತ {{current}} / {{total}}"
313
+ },
314
+ guidance: {
315
+ endTour: "ಟೂರ್ ಮುಗಿಸಿ",
316
+ actionRequiredBadge: "ಕ್ರಿಯೆ ಅಗತ್ಯ"
313
317
  }
314
318
  };
315
319
  export {
@@ -173,6 +173,17 @@
173
173
  --color-scrim-light: hsl(0 0% 0% / 0.06);
174
174
  --color-scrim-skeleton: hsl(0 0% 0% / 0.1);
175
175
 
176
+ /* —— Guidance (tours, coach marks, announcements) —— */
177
+ --guidance-announcement-hero-bg: #eceefd;
178
+ --guidance-backdrop-bg: #000000;
179
+ --guidance-backdrop-opacity: 0.6;
180
+ --guidance-coach-mark-bg: #ffffff;
181
+ --guidance-coach-mark-border: #e8eaed;
182
+ --guidance-highlight-ring: #5267f4;
183
+ --guidance-highlight-ring-width: 2px;
184
+ --guidance-step-counter-active: #5267f4;
185
+ --guidance-step-counter-text: #7a83b8;
186
+
176
187
  /* —— Radius —— */
177
188
  --radius: 0.5rem;
178
189
  /* —— Chart series palette (6–50; 1–5 are chart-1..chart-5 above) —— */
@@ -398,6 +409,17 @@
398
409
  --color-scrim-light: hsl(0 0% 0% / 0.35);
399
410
  --color-scrim-skeleton: hsl(0 0% 100% / 0.06);
400
411
 
412
+ /* —— Guidance (tours, coach marks, announcements) —— */
413
+ --guidance-announcement-hero-bg: #eceefd;
414
+ --guidance-backdrop-bg: #000000;
415
+ --guidance-backdrop-opacity: 0.6;
416
+ --guidance-coach-mark-bg: #ffffff;
417
+ --guidance-coach-mark-border: #e8eaed;
418
+ --guidance-highlight-ring: #5267f4;
419
+ --guidance-highlight-ring-width: 2px;
420
+ --guidance-step-counter-active: #5267f4;
421
+ --guidance-step-counter-text: #7a83b8;
422
+
401
423
  /* —— Radius —— */
402
424
  --radius: 0.625rem;
403
425
  /* —— Chart series palette (6–50; 1–5 are chart-1..chart-5 above) —— */