diff --git a/packages/cli/src/capture/designStyleExtractor.ts b/packages/cli/src/capture/designStyleExtractor.ts index 601009117..91c6fd67b 100644 --- a/packages/cli/src/capture/designStyleExtractor.ts +++ b/packages/cli/src/capture/designStyleExtractor.ts @@ -21,7 +21,8 @@ const EXTRACT_DESIGN_STYLES_SCRIPT = `(() => { function rgbToHex(color) { if (!color) return ""; if (color.startsWith('#')) return color.toUpperCase(); - var m = color.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+))?/); + // capture optional alpha (group 4), allowing both comma and modern slash (rgb r g b / a) syntax. + var m = color.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)(?:\\s*[,/]\\s*([\\d.]+))?/); if (!m) return color; // fully-transparent fill (rgba(...,0)) → sentinel, NOT #000000 — otherwise a transparent // chip/tab/stat ground reads as solid black on a light-ground site. @@ -33,8 +34,15 @@ const EXTRACT_DESIGN_STYLES_SCRIPT = `(() => { return f.split(",")[0].replace(/['"]/g, "").trim(); } + // keep only gradient background-images (drop url() sprites + "none"); gradients are a core + // brand signal (Stripe/ElevenLabs/Snowflake mesh washes) that a flat background-color misses. + function gradientOf(v) { + return v && v.indexOf("gradient") >= 0 ? v.trim() : ""; + } + function getStyles(el) { var s = getComputedStyle(el); + var bf = s.backdropFilter || s.webkitBackdropFilter || ""; return { fontFamily: cleanFont(s.fontFamily), fontSize: s.fontSize, @@ -43,6 +51,8 @@ const EXTRACT_DESIGN_STYLES_SCRIPT = `(() => { letterSpacing: s.letterSpacing, color: rgbToHex(s.color), background: rgbToHex(s.backgroundColor), + backgroundImage: gradientOf(s.backgroundImage), + backdropFilter: bf === "none" ? "" : bf, padding: s.padding, borderRadius: s.borderRadius, border: s.border, @@ -111,23 +121,37 @@ const EXTRACT_DESIGN_STYLES_SCRIPT = `(() => { } // ── 2. Buttons ── + // a page's primary CTA is very often a FILLED pill in the nav/header ("Sign up", "Start for free"). + // Old code dropped everything under