function analyzeVisual(baseline, candidate) {
// Layer 1: DOM fingerprint
if (baseline.domFingerprint === candidate.domFingerprint) {
return { status: 'PASS', layer: 1, reason: 'DOM identical' };
}
// Layer 2: Layout comparison
const layoutDiff = compareLayout(baseline, candidate);
if (layoutDiff.withinTolerance) {
return { status: 'PASS', layer: 2, reason: 'Layout within tolerance' };
}
// Layer 3: Perceptual diff
const ssimScore = calculateSSIM(baseline, candidate);
if (ssimScore > 0.98) {
return { status: 'PASS', layer: 3, reason: 'Perceptual similarity high' };
}
// Layer 4: AI analysis
const verdict = await aiCounselor(baseline, candidate);
return { status: verdict.status, layer: 4, reason: verdict.explanation };
}