$ErrorActionPreference = 'Stop' $root = Split-Path -Parent $PSScriptRoot $page = Get-Content -LiteralPath (Join-Path $root 'pages/tree/t03-member-profile.vue') -Raw -Encoding utf8 $style = [regex]::Match($page, '(?s)]*>(.*?)').Groups[1].Value if ([regex]::IsMatch($style, '(?m)\bposition\s*:')) { throw 'T03 member profile must use document flow throughout' } foreach ($required in @( 'background: url("/static/assets/modules/tree/transparent/t01-state-panel.png")', 'background: url("/static/assets/modules/genealogy/transparent/current-seal-frame.png")', 'background: url("/static/assets/modules/tree/transparent/t07-search-input-frame.png")', 'background: url("/static/assets/foundation/transparent/a01-scroll-primary-v3.png")' )) { if ($page -notmatch [regex]::Escape($required)) { throw "T03 is missing real asset background: $required" } } Write-Output 'T03-DOCUMENT-FLOW-CONTRACT PASS'