$ErrorActionPreference = 'Stop' $root = Split-Path -Parent $PSScriptRoot $t07 = Get-Content -LiteralPath (Join-Path $root 'pages/tree/t07-member-directory.vue') -Raw -Encoding utf8 $t08 = Get-Content -LiteralPath (Join-Path $root 'pages/tree/t08-member-states.vue') -Raw -Encoding utf8 foreach ($rule in @( '(?s)\.directory-search input\s*\{[^}]*font-size:\s*26rpx;', '(?s)\.directory-summary text:last-child\s*\{[^}]*font-size:\s*23rpx;', '(?s)\.directory-card__meta\s*\{[^}]*font-size:\s*24rpx;', '(?s)\.directory-card__status\s*\{[^}]*font-size:\s*22rpx;', '(?s)\.directory-state-card text:last-child\s*\{[^}]*font-size:\s*24rpx;' )) { if ($t07 -notmatch $rule) { throw "T07 readable visual rule missing: $rule" } } foreach ($rule in @( '(?s)\.status-tab text\s*\{[^}]*font-size:\s*23rpx;', '(?s)\.status-card__copy text:first-child\s*\{[^}]*font-size:\s*22rpx;', '(?s)\.status-card__copy text:nth-child\(2\)\s*\{[^}]*font-size:\s*32rpx;', '(?s)\.status-card__copy text:last-child\s*\{[^}]*font-size:\s*24rpx;', '(?s)\.status-guidance text\s*\{[^}]*font-size:\s*24rpx;' )) { if ($t08 -notmatch $rule) { throw "T08 readable visual rule missing: $rule" } } Write-Output 'T07-T08-ALL-STATES-VISUAL-CONTRACT PASS'