diff --git a/.agents/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs b/.agents/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs
index 4c0777c93..a72f93e27 100644
--- a/.agents/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs
+++ b/.agents/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs
@@ -23,6 +23,18 @@ function stripHtmlToText(html) {
.replace(/\s+/g, ' ');
}
+const PAGE_ANALYZER_EXTS = new Set(['.html', '.htm', '.astro', '.vue', '.svelte']);
+
+function extFromFilePath(filePath) {
+ return filePath ? (filePath.match(/\.\w+$/)?.[0] || '').toLowerCase() : '';
+}
+
+function shouldRunPageAnalyzers(content, filePath) {
+ if (!isFullPage(content)) return false;
+ const ext = extFromFilePath(filePath);
+ return !ext || PAGE_ANALYZER_EXTS.has(ext);
+}
+
function isNeutralBorderColor(str) {
const m = str.match(/solid\s+(#[0-9a-f]{3,8}|rgba?\([^)]+\)|\w+)/i);
if (!m) return false;
@@ -422,7 +434,7 @@ const TEXT_CONTENT_ANALYZER_IDS = [
function runTextContentAnalyzers(content, filePath, options = {}) {
const profile = options?.profile;
- if (!isFullPage(content)) return [];
+ if (!shouldRunPageAnalyzers(content, filePath)) return [];
// The 4 text-content analyzers are at indices 3-6 in REGEX_ANALYZERS.
const findings = [];
for (let i = 0; i < TEXT_CONTENT_ANALYZER_IDS.length; i++) {
@@ -442,7 +454,7 @@ function detectText(content, filePath, options = {}) {
const profile = options?.profile;
const findings = [];
const lines = content.split('\n');
- const ext = filePath ? (filePath.match(/\.\w+$/)?.[0] || '').toLowerCase() : '';
+ const ext = extFromFilePath(filePath);
// Run regex matchers on the full file content (catches Tailwind classes, inline styles)
// Enable block context for CSS files where related properties span multiple lines
@@ -498,7 +510,7 @@ function detectText(content, filePath, options = {}) {
}
// Page-level analyzers only run on full pages
- if (isFullPage(content)) {
+ if (shouldRunPageAnalyzers(content, filePath)) {
const analyzerIds = [
'single-font',
'flat-type-hierarchy',
diff --git a/.agents/skills/impeccable/scripts/live-browser.js b/.agents/skills/impeccable/scripts/live-browser.js
index 539cd07d9..221fed9c6 100644
--- a/.agents/skills/impeccable/scripts/live-browser.js
+++ b/.agents/skills/impeccable/scripts/live-browser.js
@@ -287,7 +287,7 @@
}
function shouldShowHighlightTagTooltip() {
- // Configure/edit carry the tag in the bar selection pill — keep only the outline.
+ // Configure/edit carry the tag in the bar selection pill, so keep only the outline.
return state !== 'CONFIGURING' && state !== 'EDITING';
}
@@ -1148,7 +1148,7 @@
syncPageChatFocus('update-bar-content');
}
- // Configure row — the floating bar surface IS the input; modifier pills sit left of the field.
+ // Configure row: the floating bar surface IS the input; modifier pills sit left of the field.
const CONFIGURE_BAR_H = '36px';
// Compact selection pill + 7px inset balances vertical centering in the 36px bar.
@@ -1519,7 +1519,7 @@
function buildConfigureCountControl({ controlsLocked, onClick }) {
const count = el('button', configureInlineControlStyle({
- fontFamily: MONO, fontWeight: '600', letterSpacing: '-0.02em',
+ fontFamily: MONO, fontWeight: '600', letterSpacing: '0',
}));
count.textContent = '\u00D7' + selectedCount;
count.disabled = controlsLocked;
@@ -5065,6 +5065,157 @@
}
}
+ async function loadSvelteComponentVariantSource(manifest, variantNum) {
+ const dir = String(manifest?.componentDir || '').replace(/^\/+/, '');
+ if (!dir || !variantNum) return '';
+ const sourcePath = dir + '/v' + variantNum + '.svelte';
+ const url = 'http://localhost:' + PORT + '/source?token=' + TOKEN + '&path=' + encodeURIComponent(sourcePath);
+ try {
+ const res = await fetch(url);
+ if (!res.ok) return '';
+ return await res.text();
+ } catch {
+ return '';
+ }
+ }
+
+ function extractSvelteComponentStyle(source) {
+ const match = String(source || '').match(/
+
+
+
+
+ Should flag
+
+ 01
+ Strategy
+
+
+ 02
+ Prototype
+
+
+ 03
+ Launch
+
+
+ 04
+ Measure
+
+
+
+
+ Should pass
+
+ Readable date
+ Updated June 14, 2026.
+
+
+ Statistic cards
+ Revenue grew 18%, margin reached 24%, and churn fell to 3%.
+
+
+ CSS generated content
+ Generated numbers in CSS should not count as body copy.
+
+
+ Inline SVG coordinates
+
+
+
+ Script constants
+
+ Implementation constants in script blocks are invisible.
+
+
+
+
+