@vizzly-testing/cli 0.32.0 → 0.33.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.
@@ -16,33 +16,33 @@ function isNewComparisonStatus(status) {
16
16
  var statusConfig = {
17
17
  failed: {
18
18
  label: "Changed",
19
- borderClass: "border-l-red-500",
20
- badgeClass: "bg-red-500/15 text-red-400 ring-red-500/30",
21
- dotClass: "bg-red-500",
19
+ borderClass: "border-l-[var(--accent-danger)]",
20
+ badgeClass: "bg-[var(--accent-danger-muted)] text-[var(--accent-danger)] ring-[color-mix(in_srgb,var(--accent-danger)_30%,transparent)]",
21
+ dotClass: "bg-[var(--accent-danger)]",
22
22
  sectionTitle: "Visual Changes",
23
23
  sectionIcon: "◐"
24
24
  },
25
25
  new: {
26
26
  label: "New",
27
- borderClass: "border-l-blue-500",
28
- badgeClass: "bg-blue-500/15 text-blue-400 ring-blue-500/30",
29
- dotClass: "bg-blue-500",
27
+ borderClass: "border-l-[var(--accent-media)]",
28
+ badgeClass: "bg-[var(--accent-media-muted)] text-[var(--accent-media)] ring-[color-mix(in_srgb,var(--accent-media)_30%,transparent)]",
29
+ dotClass: "bg-[var(--accent-media)]",
30
30
  sectionTitle: "New Screenshots",
31
31
  sectionIcon: "+"
32
32
  },
33
33
  passed: {
34
34
  label: "Passed",
35
- borderClass: "border-l-emerald-500",
36
- badgeClass: "bg-emerald-500/15 text-emerald-400 ring-emerald-500/30",
37
- dotClass: "bg-emerald-500",
35
+ borderClass: "border-l-[var(--accent-success)]",
36
+ badgeClass: "bg-[var(--accent-success-muted)] text-[var(--accent-success)] ring-[color-mix(in_srgb,var(--accent-success)_30%,transparent)]",
37
+ dotClass: "bg-[var(--accent-success)]",
38
38
  sectionTitle: "Passed",
39
39
  sectionIcon: "✓"
40
40
  },
41
41
  error: {
42
42
  label: "Error",
43
- borderClass: "border-l-orange-500",
44
- badgeClass: "bg-orange-500/15 text-orange-400 ring-orange-500/30",
45
- dotClass: "bg-orange-500",
43
+ borderClass: "border-l-[var(--accent-warning)]",
44
+ badgeClass: "bg-[var(--accent-warning-muted)] text-[var(--accent-warning)] ring-[color-mix(in_srgb,var(--accent-warning)_30%,transparent)]",
45
+ dotClass: "bg-[var(--accent-warning)]",
46
46
  sectionTitle: "Errors",
47
47
  sectionIcon: "!"
48
48
  }
@@ -57,7 +57,7 @@ function StatusBadge({ status }) {
57
57
  function DiffBadge({ percentage }) {
58
58
  if (percentage === void 0 || percentage === null || percentage === 0) return null;
59
59
  return /* @__PURE__ */ jsxs("span", {
60
- className: "font-mono text-xs text-red-400/80 tabular-nums",
60
+ className: "font-mono text-xs text-[var(--accent-danger)] tabular-nums",
61
61
  children: [percentage.toFixed(2), "%"]
62
62
  });
63
63
  }
@@ -65,7 +65,7 @@ function MetaInfo({ properties }) {
65
65
  if (!properties) return null;
66
66
  let { viewport_width, viewport_height, browser } = properties;
67
67
  return /* @__PURE__ */ jsxs("div", {
68
- className: "flex items-center gap-2 text-xs text-slate-500",
68
+ className: "flex items-center gap-2 text-xs text-[var(--text-muted)]",
69
69
  children: [viewport_width && viewport_height && /* @__PURE__ */ jsxs("span", {
70
70
  className: "font-mono tabular-nums",
71
71
  children: [
@@ -74,7 +74,7 @@ function MetaInfo({ properties }) {
74
74
  viewport_height
75
75
  ]
76
76
  }), browser && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
77
- className: "text-slate-600",
77
+ className: "text-[var(--text-muted)]",
78
78
  children: "·"
79
79
  }), /* @__PURE__ */ jsx("span", {
80
80
  className: "capitalize",
@@ -94,23 +94,23 @@ function FailedComparison({ comparison, isEven }) {
94
94
  children: [/* @__PURE__ */ jsxs("summary", {
95
95
  className: `
96
96
  flex items-center gap-4 p-4 cursor-pointer
97
- ${isEven ? "bg-slate-800/30" : "bg-slate-800/50"}
98
- hover:bg-slate-700/50
97
+ ${isEven ? "bg-[var(--vz-surface)]" : "bg-[var(--vz-elevated)]"}
98
+ hover:bg-[var(--vz-raised)]
99
99
  border-l-4 ${config.borderClass}
100
100
  rounded-r-lg transition-all duration-150
101
101
  list-none [&::-webkit-details-marker]:hidden
102
- focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-amber-500/50 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900
102
+ focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color-mix(in_srgb,var(--accent-brand)_50%,transparent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--vz-bg)]
103
103
  `,
104
104
  children: [
105
105
  /* @__PURE__ */ jsxs("div", {
106
- className: "relative w-16 h-10 flex-shrink-0 rounded overflow-hidden bg-slate-900",
106
+ className: "relative w-16 h-10 flex-shrink-0 rounded overflow-hidden bg-[var(--vz-bg)]",
107
107
  children: [(current || baseline) && /* @__PURE__ */ jsx("img", {
108
108
  src: current || baseline,
109
109
  alt: "",
110
110
  className: "w-full h-full object-cover object-top"
111
111
  }), diff && /* @__PURE__ */ jsx("div", {
112
- className: "absolute inset-0 bg-red-500/20 flex items-center justify-center",
113
- children: /* @__PURE__ */ jsx("span", { className: "w-2 h-2 bg-red-500 rounded-full animate-pulse" })
112
+ className: "absolute inset-0 bg-[color-mix(in_srgb,var(--accent-danger)_20%,transparent)] flex items-center justify-center",
113
+ children: /* @__PURE__ */ jsx("span", { className: "w-2 h-2 bg-[var(--accent-danger)] rounded-full animate-pulse" })
114
114
  })]
115
115
  }),
116
116
  /* @__PURE__ */ jsxs("div", {
@@ -118,7 +118,7 @@ function FailedComparison({ comparison, isEven }) {
118
118
  children: [/* @__PURE__ */ jsxs("div", {
119
119
  className: "flex items-center gap-2",
120
120
  children: [/* @__PURE__ */ jsx("span", {
121
- className: "font-medium text-white truncate",
121
+ className: "font-medium text-[var(--text-primary)] truncate",
122
122
  children: name
123
123
  }), /* @__PURE__ */ jsx(DiffBadge, { percentage: diffPercentage })]
124
124
  }), /* @__PURE__ */ jsx(MetaInfo, { properties })]
@@ -126,7 +126,7 @@ function FailedComparison({ comparison, isEven }) {
126
126
  /* @__PURE__ */ jsxs("div", {
127
127
  className: "flex items-center gap-3",
128
128
  children: [/* @__PURE__ */ jsx(StatusBadge, { status }), /* @__PURE__ */ jsxs("div", {
129
- className: "flex items-center gap-1.5 text-slate-500 group-hover:text-slate-400 transition-colors",
129
+ className: "flex items-center gap-1.5 text-[var(--text-muted)] group-hover:text-[var(--text-tertiary)] transition-colors",
130
130
  children: [/* @__PURE__ */ jsx("span", {
131
131
  className: "text-xs hidden sm:inline opacity-0 group-hover:opacity-100 transition-opacity",
132
132
  children: "Details"
@@ -147,23 +147,23 @@ function FailedComparison({ comparison, isEven }) {
147
147
  })
148
148
  ]
149
149
  }), /* @__PURE__ */ jsxs("div", {
150
- className: "mt-1 p-4 bg-slate-800/20 rounded-lg border border-slate-700/30 animate-[fadeIn_150ms_ease-out]",
150
+ className: "mt-1 p-4 bg-[var(--vz-surface)] rounded-lg border border-[var(--vz-border-subtle)] animate-[fadeIn_150ms_ease-out]",
151
151
  children: [/* @__PURE__ */ jsxs("div", {
152
152
  className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
153
153
  children: [baseline && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
154
154
  className: "flex items-center gap-2 mb-2",
155
155
  children: [/* @__PURE__ */ jsx("span", {
156
- className: "text-xs font-medium text-slate-400 uppercase tracking-wider",
156
+ className: "text-xs font-medium text-[var(--text-tertiary)] uppercase tracking-wider",
157
157
  children: "Baseline"
158
158
  }), /* @__PURE__ */ jsx("span", {
159
- className: "text-xs text-slate-600",
159
+ className: "text-xs text-[var(--text-muted)]",
160
160
  children: "Expected"
161
161
  })]
162
162
  }), /* @__PURE__ */ jsx("a", {
163
163
  href: baseline,
164
164
  target: "_blank",
165
165
  rel: "noopener noreferrer",
166
- className: "block rounded-lg overflow-hidden border border-slate-700/50 hover:border-slate-600 transition-colors",
166
+ className: "block rounded-lg overflow-hidden border border-[var(--vz-border-subtle)] hover:border-[var(--vz-border-strong)] transition-colors",
167
167
  children: /* @__PURE__ */ jsx("img", {
168
168
  src: baseline,
169
169
  alt: `${name} baseline`,
@@ -172,17 +172,17 @@ function FailedComparison({ comparison, isEven }) {
172
172
  })] }), current && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
173
173
  className: "flex items-center gap-2 mb-2",
174
174
  children: [/* @__PURE__ */ jsx("span", {
175
- className: "text-xs font-medium text-slate-400 uppercase tracking-wider",
175
+ className: "text-xs font-medium text-[var(--text-tertiary)] uppercase tracking-wider",
176
176
  children: "Current"
177
177
  }), /* @__PURE__ */ jsx("span", {
178
- className: "text-xs text-slate-600",
178
+ className: "text-xs text-[var(--text-muted)]",
179
179
  children: "Actual"
180
180
  })]
181
181
  }), /* @__PURE__ */ jsx("a", {
182
182
  href: current,
183
183
  target: "_blank",
184
184
  rel: "noopener noreferrer",
185
- className: "block rounded-lg overflow-hidden border border-slate-700/50 hover:border-slate-600 transition-colors",
185
+ className: "block rounded-lg overflow-hidden border border-[var(--vz-border-subtle)] hover:border-[var(--vz-border-strong)] transition-colors",
186
186
  children: /* @__PURE__ */ jsx("img", {
187
187
  src: current,
188
188
  alt: `${name} current`,
@@ -190,21 +190,21 @@ function FailedComparison({ comparison, isEven }) {
190
190
  })
191
191
  })] })]
192
192
  }), diff && /* @__PURE__ */ jsxs("div", {
193
- className: "mt-4 pt-4 border-t border-slate-700/30",
193
+ className: "mt-4 pt-4 border-t border-[var(--vz-border-subtle)]",
194
194
  children: [/* @__PURE__ */ jsxs("div", {
195
195
  className: "flex items-center gap-2 mb-2",
196
196
  children: [/* @__PURE__ */ jsx("span", {
197
- className: "text-xs font-medium text-red-400 uppercase tracking-wider",
197
+ className: "text-xs font-medium text-[var(--accent-danger)] uppercase tracking-wider",
198
198
  children: "Difference"
199
199
  }), diffPercentage > 0 && /* @__PURE__ */ jsxs("span", {
200
- className: "text-xs text-red-400/60 font-mono",
200
+ className: "text-xs text-[color-mix(in_srgb,var(--accent-danger)_70%,transparent)] font-mono",
201
201
  children: [diffPercentage.toFixed(2), "% of pixels changed"]
202
202
  })]
203
203
  }), /* @__PURE__ */ jsx("a", {
204
204
  href: diff,
205
205
  target: "_blank",
206
206
  rel: "noopener noreferrer",
207
- className: "block rounded-lg overflow-hidden border border-red-500/30 hover:border-red-500/50 transition-colors max-w-2xl",
207
+ className: "block rounded-lg overflow-hidden border border-[color-mix(in_srgb,var(--accent-danger)_32%,transparent)] hover:border-[color-mix(in_srgb,var(--accent-danger)_52%,transparent)] transition-colors max-w-2xl",
208
208
  children: /* @__PURE__ */ jsx("img", {
209
209
  src: diff,
210
210
  alt: `${name} diff`,
@@ -227,16 +227,16 @@ function NewComparison({ comparison, isEven }) {
227
227
  children: [/* @__PURE__ */ jsxs("summary", {
228
228
  className: `
229
229
  flex items-center gap-4 p-4 cursor-pointer
230
- ${isEven ? "bg-slate-800/30" : "bg-slate-800/50"}
231
- hover:bg-slate-700/50
232
- border-l-4 border-l-blue-500
230
+ ${isEven ? "bg-[var(--vz-surface)]" : "bg-[var(--vz-elevated)]"}
231
+ hover:bg-[var(--vz-raised)]
232
+ border-l-4 border-l-[var(--accent-media)]
233
233
  rounded-r-lg transition-all duration-150
234
234
  list-none [&::-webkit-details-marker]:hidden
235
- focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-amber-500/50 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900
235
+ focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[color-mix(in_srgb,var(--accent-brand)_50%,transparent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--vz-bg)]
236
236
  `,
237
237
  children: [
238
238
  /* @__PURE__ */ jsx("div", {
239
- className: "w-16 h-10 flex-shrink-0 rounded overflow-hidden bg-slate-900",
239
+ className: "w-16 h-10 flex-shrink-0 rounded overflow-hidden bg-[var(--vz-bg)]",
240
240
  children: imageSrc && /* @__PURE__ */ jsx("img", {
241
241
  src: imageSrc,
242
242
  alt: "",
@@ -246,14 +246,14 @@ function NewComparison({ comparison, isEven }) {
246
246
  /* @__PURE__ */ jsxs("div", {
247
247
  className: "flex-1 min-w-0",
248
248
  children: [/* @__PURE__ */ jsx("span", {
249
- className: "font-medium text-white truncate block",
249
+ className: "font-medium text-[var(--text-primary)] truncate block",
250
250
  children: name
251
251
  }), /* @__PURE__ */ jsx(MetaInfo, { properties })]
252
252
  }),
253
253
  /* @__PURE__ */ jsxs("div", {
254
254
  className: "flex items-center gap-3",
255
255
  children: [/* @__PURE__ */ jsx(StatusBadge, { status: "new" }), /* @__PURE__ */ jsxs("div", {
256
- className: "flex items-center gap-1.5 text-slate-500 group-hover:text-slate-400 transition-colors",
256
+ className: "flex items-center gap-1.5 text-[var(--text-muted)] group-hover:text-[var(--text-tertiary)] transition-colors",
257
257
  children: [/* @__PURE__ */ jsx("span", {
258
258
  className: "text-xs hidden sm:inline opacity-0 group-hover:opacity-100 transition-opacity",
259
259
  children: "Preview"
@@ -274,21 +274,21 @@ function NewComparison({ comparison, isEven }) {
274
274
  })
275
275
  ]
276
276
  }), /* @__PURE__ */ jsxs("div", {
277
- className: "mt-1 p-4 bg-slate-800/20 rounded-lg border border-slate-700/30 animate-[fadeIn_150ms_ease-out]",
277
+ className: "mt-1 p-4 bg-[var(--vz-surface)] rounded-lg border border-[var(--vz-border-subtle)] animate-[fadeIn_150ms_ease-out]",
278
278
  children: [/* @__PURE__ */ jsxs("div", {
279
279
  className: "flex items-center gap-2 mb-2",
280
280
  children: [/* @__PURE__ */ jsx("span", {
281
- className: "text-xs font-medium text-blue-400 uppercase tracking-wider",
281
+ className: "text-xs font-medium text-[var(--accent-media)] uppercase tracking-wider",
282
282
  children: "New Screenshot"
283
283
  }), /* @__PURE__ */ jsx("span", {
284
- className: "text-xs text-slate-600",
284
+ className: "text-xs text-[var(--text-muted)]",
285
285
  children: "No baseline to compare"
286
286
  })]
287
287
  }), imageSrc && /* @__PURE__ */ jsx("a", {
288
288
  href: imageSrc,
289
289
  target: "_blank",
290
290
  rel: "noopener noreferrer",
291
- className: "block rounded-lg overflow-hidden border border-blue-500/30 hover:border-blue-500/50 transition-colors max-w-2xl",
291
+ className: "block rounded-lg overflow-hidden border border-[color-mix(in_srgb,var(--accent-media)_32%,transparent)] hover:border-[color-mix(in_srgb,var(--accent-media)_52%,transparent)] transition-colors max-w-2xl",
292
292
  children: /* @__PURE__ */ jsx("img", {
293
293
  src: imageSrc,
294
294
  alt: name,
@@ -306,15 +306,15 @@ function PassedComparison({ comparison }) {
306
306
  return /* @__PURE__ */ jsxs("div", {
307
307
  className: `
308
308
  flex items-center gap-3 px-4 py-2.5
309
- bg-slate-800/20 hover:bg-slate-800/30
310
- border-l-4 border-l-emerald-500/50
309
+ bg-[var(--vz-surface)] hover:bg-[var(--vz-raised)]
310
+ border-l-4 border-l-[color-mix(in_srgb,var(--accent-success)_50%,transparent)]
311
311
  rounded-r-lg transition-colors
312
312
  `,
313
313
  children: [
314
314
  /* @__PURE__ */ jsx("div", {
315
- className: "w-5 h-5 rounded-full bg-emerald-500/20 flex items-center justify-center flex-shrink-0",
315
+ className: "w-5 h-5 rounded-full bg-[var(--accent-success-muted)] flex items-center justify-center flex-shrink-0",
316
316
  children: /* @__PURE__ */ jsx("svg", {
317
- className: "w-3 h-3 text-emerald-400",
317
+ className: "w-3 h-3 text-[var(--accent-success)]",
318
318
  fill: "currentColor",
319
319
  viewBox: "0 0 20 20",
320
320
  "aria-hidden": "true",
@@ -326,7 +326,7 @@ function PassedComparison({ comparison }) {
326
326
  })
327
327
  }),
328
328
  /* @__PURE__ */ jsx("span", {
329
- className: "flex-1 text-sm text-slate-300 truncate",
329
+ className: "flex-1 text-sm text-[var(--text-secondary)] truncate",
330
330
  children: name
331
331
  }),
332
332
  /* @__PURE__ */ jsx(MetaInfo, { properties })
@@ -346,11 +346,11 @@ function SectionHeader({ title, count, icon, colorClass }) {
346
346
  children: icon
347
347
  }),
348
348
  /* @__PURE__ */ jsx("h3", {
349
- className: "text-sm font-semibold text-slate-300 uppercase tracking-wider",
349
+ className: "text-sm font-semibold text-[var(--text-secondary)] uppercase tracking-wider",
350
350
  children: title
351
351
  }),
352
352
  /* @__PURE__ */ jsxs("span", {
353
- className: "text-sm text-slate-500 font-mono",
353
+ className: "text-sm text-[var(--text-muted)] font-mono",
354
354
  children: [
355
355
  "(",
356
356
  count,
@@ -368,26 +368,26 @@ function SummaryBar({ stats }) {
368
368
  return /* @__PURE__ */ jsxs("div", {
369
369
  className: `
370
370
  flex flex-wrap items-center gap-6 p-4 rounded-xl mb-8
371
- ${hasIssues ? "bg-slate-800/60 border border-slate-700/50" : "bg-emerald-500/10 border border-emerald-500/20"}
371
+ ${hasIssues ? "bg-[var(--vz-surface)] border border-[var(--vz-border)]" : "bg-[var(--accent-success-muted)] border border-[color-mix(in_srgb,var(--accent-success)_24%,transparent)]"}
372
372
  `,
373
373
  children: [/* @__PURE__ */ jsx("div", {
374
374
  className: "flex items-center gap-3",
375
375
  children: hasIssues ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
376
- className: "w-10 h-10 rounded-full bg-amber-500/20 flex items-center justify-center",
376
+ className: "w-10 h-10 rounded-full bg-[var(--accent-warning-muted)] flex items-center justify-center",
377
377
  children: /* @__PURE__ */ jsx("span", {
378
- className: "text-amber-400 text-lg",
378
+ className: "text-[var(--accent-warning)] text-lg",
379
379
  children: "◐"
380
380
  })
381
381
  }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
382
- className: "text-white font-semibold",
382
+ className: "text-[var(--text-primary)] font-semibold",
383
383
  children: "Review Required"
384
384
  }), /* @__PURE__ */ jsxs("div", {
385
- className: "text-sm text-slate-400",
385
+ className: "text-sm text-[var(--text-tertiary)]",
386
386
  children: [stats.failed + (stats.new || 0), " items need attention"]
387
387
  })] })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
388
- className: "w-10 h-10 rounded-full bg-emerald-500/20 flex items-center justify-center",
388
+ className: "w-10 h-10 rounded-full bg-[var(--accent-success-muted)] flex items-center justify-center",
389
389
  children: /* @__PURE__ */ jsx("svg", {
390
- className: "w-5 h-5 text-emerald-400",
390
+ className: "w-5 h-5 text-[var(--accent-success)]",
391
391
  fill: "currentColor",
392
392
  viewBox: "0 0 20 20",
393
393
  "aria-hidden": "true",
@@ -398,10 +398,10 @@ function SummaryBar({ stats }) {
398
398
  })
399
399
  })
400
400
  }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
401
- className: "text-white font-semibold",
401
+ className: "text-[var(--text-primary)] font-semibold",
402
402
  children: "All Tests Passed"
403
403
  }), /* @__PURE__ */ jsx("div", {
404
- className: "text-sm text-slate-400",
404
+ className: "text-sm text-[var(--text-tertiary)]",
405
405
  children: "No visual changes detected"
406
406
  })] })] })
407
407
  }), /* @__PURE__ */ jsxs("div", {
@@ -410,40 +410,40 @@ function SummaryBar({ stats }) {
410
410
  /* @__PURE__ */ jsxs("div", {
411
411
  className: "text-center",
412
412
  children: [/* @__PURE__ */ jsx("div", {
413
- className: "text-2xl font-bold text-white tabular-nums",
413
+ className: "text-2xl font-bold text-[var(--text-primary)] tabular-nums",
414
414
  children: stats.total
415
415
  }), /* @__PURE__ */ jsx("div", {
416
- className: "text-xs text-slate-500 uppercase tracking-wider",
416
+ className: "text-xs text-[var(--text-muted)] uppercase tracking-wider",
417
417
  children: "Total"
418
418
  })]
419
419
  }),
420
420
  /* @__PURE__ */ jsxs("div", {
421
421
  className: "text-center",
422
422
  children: [/* @__PURE__ */ jsx("div", {
423
- className: "text-2xl font-bold text-emerald-400 tabular-nums",
423
+ className: "text-2xl font-bold text-[var(--accent-success)] tabular-nums",
424
424
  children: stats.passed
425
425
  }), /* @__PURE__ */ jsx("div", {
426
- className: "text-xs text-slate-500 uppercase tracking-wider",
426
+ className: "text-xs text-[var(--text-muted)] uppercase tracking-wider",
427
427
  children: "Passed"
428
428
  })]
429
429
  }),
430
430
  stats.failed > 0 && /* @__PURE__ */ jsxs("div", {
431
431
  className: "text-center",
432
432
  children: [/* @__PURE__ */ jsx("div", {
433
- className: "text-2xl font-bold text-red-400 tabular-nums",
433
+ className: "text-2xl font-bold text-[var(--accent-danger)] tabular-nums",
434
434
  children: stats.failed
435
435
  }), /* @__PURE__ */ jsx("div", {
436
- className: "text-xs text-slate-500 uppercase tracking-wider",
436
+ className: "text-xs text-[var(--text-muted)] uppercase tracking-wider",
437
437
  children: "Changed"
438
438
  })]
439
439
  }),
440
440
  (stats.new || 0) > 0 && /* @__PURE__ */ jsxs("div", {
441
441
  className: "text-center",
442
442
  children: [/* @__PURE__ */ jsx("div", {
443
- className: "text-2xl font-bold text-blue-400 tabular-nums",
443
+ className: "text-2xl font-bold text-[var(--accent-media)] tabular-nums",
444
444
  children: stats.new
445
445
  }), /* @__PURE__ */ jsx("div", {
446
- className: "text-xs text-slate-500 uppercase tracking-wider",
446
+ className: "text-xs text-[var(--text-muted)] uppercase tracking-wider",
447
447
  children: "New"
448
448
  })]
449
449
  })
@@ -463,15 +463,15 @@ function formatTimestamp(timestamp) {
463
463
  }
464
464
  function Header({ timestamp }) {
465
465
  return /* @__PURE__ */ jsx("header", {
466
- className: "bg-slate-950/80 backdrop-blur-sm border-b border-slate-800/60 sticky top-0 z-10",
466
+ className: "bg-[var(--vz-bg)] border-b border-[var(--vz-border-subtle)] sticky top-0 z-10",
467
467
  children: /* @__PURE__ */ jsxs("div", {
468
468
  className: "max-w-6xl mx-auto px-6 py-4 flex items-center justify-between",
469
469
  children: [/* @__PURE__ */ jsxs("div", {
470
470
  className: "flex items-center gap-3",
471
471
  children: [/* @__PURE__ */ jsx("div", {
472
- className: "w-9 h-9 bg-gradient-to-br from-amber-400 to-amber-600 rounded-lg flex items-center justify-center shadow-lg shadow-amber-500/20",
472
+ className: "w-9 h-9 bg-[var(--accent-brand)] rounded-lg flex items-center justify-center",
473
473
  children: /* @__PURE__ */ jsxs("svg", {
474
- className: "w-5 h-5 text-slate-900",
474
+ className: "w-5 h-5 text-[var(--vz-bg)]",
475
475
  viewBox: "0 0 24 24",
476
476
  fill: "currentColor",
477
477
  "aria-hidden": "true",
@@ -482,14 +482,14 @@ function Header({ timestamp }) {
482
482
  }), /* @__PURE__ */ jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" })]
483
483
  })
484
484
  }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
485
- className: "text-lg font-semibold text-white tracking-tight",
485
+ className: "text-lg font-semibold text-[var(--text-primary)] tracking-tight",
486
486
  children: "Vizzly"
487
487
  }), /* @__PURE__ */ jsx("div", {
488
- className: "text-xs text-slate-500",
488
+ className: "text-xs text-[var(--text-muted)]",
489
489
  children: "Visual Test Report"
490
490
  })] })]
491
491
  }), timestamp && /* @__PURE__ */ jsx("div", {
492
- className: "text-xs text-slate-500 tabular-nums",
492
+ className: "text-xs text-[var(--text-muted)] tabular-nums",
493
493
  children: formatTimestamp(timestamp)
494
494
  })]
495
495
  })
@@ -497,14 +497,14 @@ function Header({ timestamp }) {
497
497
  }
498
498
  function StaticReportView({ reportData }) {
499
499
  if (!reportData?.comparisons) return /* @__PURE__ */ jsx("div", {
500
- className: "min-h-screen bg-slate-900 text-white flex items-center justify-center",
500
+ className: "min-h-screen bg-[var(--vz-bg)] text-[var(--text-primary)] flex items-center justify-center",
501
501
  children: /* @__PURE__ */ jsxs("div", {
502
502
  className: "text-center",
503
503
  children: [/* @__PURE__ */ jsx("div", {
504
504
  className: "text-xl font-medium mb-2",
505
505
  children: "No Report Data"
506
506
  }), /* @__PURE__ */ jsx("p", {
507
- className: "text-slate-400",
507
+ className: "text-[var(--text-tertiary)]",
508
508
  children: "No comparison data available for this report."
509
509
  })]
510
510
  })
@@ -522,7 +522,7 @@ function StaticReportView({ reportData }) {
522
522
  let passed = comparisons.filter((c) => c.status === "passed");
523
523
  let errors = comparisons.filter((c) => c.status === "error");
524
524
  return /* @__PURE__ */ jsxs("div", {
525
- className: "min-h-screen bg-slate-900 text-white",
525
+ className: "min-h-screen bg-[var(--vz-bg)] text-[var(--text-primary)]",
526
526
  children: [/* @__PURE__ */ jsx(Header, { timestamp: reportData.timestamp }), /* @__PURE__ */ jsxs("main", {
527
527
  className: "max-w-6xl mx-auto px-6 py-8",
528
528
  children: [
@@ -533,7 +533,7 @@ function StaticReportView({ reportData }) {
533
533
  title: "Visual Changes",
534
534
  count: failed.length,
535
535
  icon: "◐",
536
- colorClass: "text-red-400"
536
+ colorClass: "text-[var(--accent-danger)]"
537
537
  }), /* @__PURE__ */ jsx("div", {
538
538
  className: "space-y-2",
539
539
  children: failed.map((comparison, index) => /* @__PURE__ */ jsx(FailedComparison, {
@@ -548,7 +548,7 @@ function StaticReportView({ reportData }) {
548
548
  title: "New Screenshots",
549
549
  count: newItems.length,
550
550
  icon: "+",
551
- colorClass: "text-blue-400"
551
+ colorClass: "text-[var(--accent-media)]"
552
552
  }), /* @__PURE__ */ jsx("div", {
553
553
  className: "space-y-2",
554
554
  children: newItems.map((comparison, index) => /* @__PURE__ */ jsx(NewComparison, {
@@ -563,7 +563,7 @@ function StaticReportView({ reportData }) {
563
563
  title: "Errors",
564
564
  count: errors.length,
565
565
  icon: "!",
566
- colorClass: "text-orange-400"
566
+ colorClass: "text-[var(--accent-warning)]"
567
567
  }), /* @__PURE__ */ jsx("div", {
568
568
  className: "space-y-2",
569
569
  children: errors.map((comparison, index) => /* @__PURE__ */ jsx(FailedComparison, {
@@ -582,15 +582,15 @@ function StaticReportView({ reportData }) {
582
582
  className: "flex items-center gap-3 mb-3",
583
583
  children: [
584
584
  /* @__PURE__ */ jsx("span", {
585
- className: "text-lg font-mono text-emerald-400",
585
+ className: "text-lg font-mono text-[var(--accent-success)]",
586
586
  children: "✓"
587
587
  }),
588
588
  /* @__PURE__ */ jsx("h3", {
589
- className: "text-sm font-semibold text-slate-300 uppercase tracking-wider",
589
+ className: "text-sm font-semibold text-[var(--text-secondary)] uppercase tracking-wider",
590
590
  children: "Passed"
591
591
  }),
592
592
  /* @__PURE__ */ jsxs("span", {
593
- className: "text-sm text-slate-500 font-mono",
593
+ className: "text-sm text-[var(--text-muted)] font-mono",
594
594
  children: [
595
595
  "(",
596
596
  passed.length,
@@ -598,7 +598,7 @@ function StaticReportView({ reportData }) {
598
598
  ]
599
599
  }),
600
600
  /* @__PURE__ */ jsx("svg", {
601
- className: "w-4 h-4 text-slate-500 transition-transform group-open:rotate-180 ml-auto",
601
+ className: "w-4 h-4 text-[var(--text-muted)] transition-transform group-open:rotate-180 ml-auto",
602
602
  fill: "none",
603
603
  viewBox: "0 0 24 24",
604
604
  stroke: "currentColor",
@@ -619,15 +619,15 @@ function StaticReportView({ reportData }) {
619
619
  })
620
620
  }),
621
621
  /* @__PURE__ */ jsx("footer", {
622
- className: "mt-12 pt-6 border-t border-slate-800/60 text-center",
622
+ className: "mt-12 pt-6 border-t border-[var(--vz-border-subtle)] text-center",
623
623
  children: /* @__PURE__ */ jsxs("p", {
624
- className: "text-sm text-slate-500",
624
+ className: "text-sm text-[var(--text-muted)]",
625
625
  children: [
626
626
  "Visual regression report generated by",
627
627
  " ",
628
628
  /* @__PURE__ */ jsx("a", {
629
629
  href: "https://vizzly.dev",
630
- className: "text-amber-400 hover:text-amber-300 transition-colors",
630
+ className: "text-[var(--accent-brand)] hover:text-[var(--accent-brand-hover)] transition-colors",
631
631
  children: "Vizzly"
632
632
  })
633
633
  ]
@@ -25,7 +25,7 @@ function getReporterDistPath() {
25
25
  if (existsSync(join(distPath, 'reporter-bundle.css'))) {
26
26
  return distPath;
27
27
  }
28
- throw new Error('Reporter bundle not found. Run "npm run build:reporter" first.');
28
+ throw new Error('Reporter bundle not found. Run "pnpm run build:reporter" first.');
29
29
  }
30
30
 
31
31
  /**
@@ -43,7 +43,7 @@ function getSSRModulePath() {
43
43
  if (existsSync(ssrPath)) {
44
44
  return ssrPath;
45
45
  }
46
- throw new Error('SSR module not found. Run "npm run build:reporter-ssr" first.');
46
+ throw new Error('SSR module not found. Run "pnpm run build:reporter-ssr" first.');
47
47
  }
48
48
 
49
49
  /**
@@ -317,8 +317,8 @@ export class TddService {
317
317
  output.warn('No screenshots found in baseline build');
318
318
  return null;
319
319
  }
320
- output.info(`Using baseline from build: ${colors.cyan(baselineBuild.name || 'Unknown')} (${baselineBuild.id || 'Unknown ID'})`);
321
- output.info(`Checking ${colors.cyan(buildDetails.screenshots.length)} baseline screenshots...`);
320
+ output.info(`Using baseline from build: ${colors.info(baselineBuild.name || 'Unknown')} (${baselineBuild.id || 'Unknown ID'})`);
321
+ output.info(`Checking ${colors.info(buildDetails.screenshots.length)} baseline screenshots...`);
322
322
 
323
323
  // Check existing baseline metadata for SHA comparison
324
324
  let existingBaseline = await this.loadBaseline();
@@ -589,8 +589,8 @@ export class TddService {
589
589
  output.warn('No screenshots found in baseline build');
590
590
  return null;
591
591
  }
592
- output.info(`Using baseline from build: ${colors.cyan(baselineBuild.name || 'Unknown')} (${baselineBuild.id || 'Unknown ID'})`);
593
- output.info(`Checking ${colors.cyan(buildDetails.screenshots.length)} baseline screenshots...`);
592
+ output.info(`Using baseline from build: ${colors.info(baselineBuild.name || 'Unknown')} (${baselineBuild.id || 'Unknown ID'})`);
593
+ output.info(`Checking ${colors.info(buildDetails.screenshots.length)} baseline screenshots...`);
594
594
 
595
595
  // Check existing baseline metadata for SHA comparison
596
596
  let existingBaseline = await this.loadBaseline();
@@ -899,7 +899,7 @@ export class TddService {
899
899
  }
900
900
  return null;
901
901
  } else {
902
- output.info(`Using existing baseline: ${colors.cyan(baseline.buildName)}`);
902
+ output.info(`Using existing baseline: ${colors.info(baseline.buildName)}`);
903
903
  return baseline;
904
904
  }
905
905
  }
@@ -1169,9 +1169,9 @@ export class TddService {
1169
1169
  output.print(`🐻 ${colors.bold(results.total)} screenshot${results.total !== 1 ? 's' : ''} compared`);
1170
1170
  output.blank();
1171
1171
 
1172
- // Passed section - use Observatory success color
1172
+ // Passed section - use BearDen success color
1173
1173
  if (results.passed > 0) {
1174
- let successColor = colors.brand?.success || colors.green;
1174
+ let successColor = colors.brand?.success || colors.success;
1175
1175
  if (output.isVerbose()) {
1176
1176
  // Verbose mode: show each screenshot
1177
1177
  for (let comp of passedComparisons) {
@@ -1184,10 +1184,10 @@ export class TddService {
1184
1184
  output.blank();
1185
1185
  }
1186
1186
 
1187
- // Failed comparisons with diff bars - use Observatory warning/danger colors
1187
+ // Failed comparisons with diff bars - use BearDen warning/danger colors
1188
1188
  if (failedComparisons.length > 0) {
1189
1189
  let warningColor = colors.brand?.warning || colors.yellow;
1190
- let dangerColor = colors.brand?.danger || colors.red;
1190
+ let dangerColor = colors.brand?.danger || colors.error;
1191
1191
  output.print(` ${warningColor('◐')} ${warningColor(failedComparisons.length)} visual change${failedComparisons.length !== 1 ? 's' : ''} detected`);
1192
1192
 
1193
1193
  // Find longest name for alignment
@@ -1208,9 +1208,9 @@ export class TddService {
1208
1208
  output.blank();
1209
1209
  }
1210
1210
 
1211
- // New screenshots - use Observatory info color
1211
+ // New screenshots - use BearDen info color
1212
1212
  if (newComparisons.length > 0) {
1213
- let infoColor = colors.brand?.info || colors.cyan;
1213
+ let infoColor = colors.brand?.info || colors.info;
1214
1214
  let textMuted = colors.brand?.textMuted || colors.dim;
1215
1215
  output.print(` ${infoColor('+')} ${infoColor(newComparisons.length)} new screenshot${newComparisons.length !== 1 ? 's' : ''}`);
1216
1216
  for (let comp of newComparisons) {
@@ -1219,9 +1219,9 @@ export class TddService {
1219
1219
  output.blank();
1220
1220
  }
1221
1221
 
1222
- // Errors - use Observatory danger color
1222
+ // Errors - use BearDen danger color
1223
1223
  if (results.errors > 0) {
1224
- let dangerColor = colors.brand?.danger || colors.red;
1224
+ let dangerColor = colors.brand?.danger || colors.error;
1225
1225
  let errorComparisons = this.comparisons.filter(c => c.status === 'error');
1226
1226
  output.print(` ${dangerColor('!')} ${dangerColor(results.errors)} error${results.errors !== 1 ? 's' : ''}`);
1227
1227
  for (let comp of errorComparisons) {
@@ -1232,7 +1232,7 @@ export class TddService {
1232
1232
 
1233
1233
  // Dashboard link with prominent styling - detect if server is running
1234
1234
  if (hasChanges) {
1235
- let infoColor = colors.brand?.info || colors.cyan;
1235
+ let infoColor = colors.brand?.info || colors.info;
1236
1236
  let textTertiary = colors.brand?.textTertiary || colors.dim;
1237
1237
 
1238
1238
  // Check if TDD server is already running