$ErrorActionPreference = 'Stop' $root = Split-Path -Parent $PSScriptRoot $page = Get-Content -LiteralPath (Join-Path $root 'pages/genealogy/g10-application-review.vue') -Raw -Encoding utf8 foreach ($required in @( 'class="review-result"', 'review-result--approved', 'review-result--rejected', 'a01-secondary-button-v2.png', 'a01-primary-button-v2.png', 'a01-scroll-secondary-v3.png', 'a01-scroll-primary-v3.png' )) { if ($page -notmatch [regex]::Escape($required)) { throw "G10 result visual missing: $required" } } $rules = @( '(?s)\.review-intro text:nth-child\(2\)\s*\{[^}]*font-size:\s*24rpx;', '(?s)\.application-card__phone\s*\{[^}]*font-size:\s*23rpx;', '(?s)\.application-card__time\s*\{[^}]*font-size:\s*23rpx;', '(?s)\.application-card__relation\s*\{[^}]*font-size:\s*24rpx;', '(?s)\.review-action\s*\{[^}]*width:\s*148rpx;[^}]*height:\s*68rpx;', '(?s)\.review-action text\s*\{[^}]*font-size:\s*24rpx;', '(?s)\.review-result\s*\{[^}]*width:\s*308rpx;[^}]*height:\s*68rpx;', '(?s)\.review-state-card__copy text:last-child\s*\{[^}]*font-size:\s*24rpx;' ) foreach ($rule in $rules) { if ($page -notmatch $rule) { throw "G10 readable visual rule missing: $rule" } } Write-Output 'G10-ALL-STATES-VISUAL-CONTRACT PASS'