$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 @( '@include adaptive.adaptive-tree-panel;', '@include adaptive.adaptive-tree-field;', '@include adaptive.adaptive-genealogy-list-card;', '@include adaptive.adaptive-scroll-button(primary);', 'background: url("/static/assets/modules/genealogy/transparent/current-seal-frame.png")' )) { if ($page -notmatch [regex]::Escape($required)) { throw "T03 is missing adaptive asset surface: $required" } } $memberPanelStyle = [regex]::Match($style, '(?ms)^\s*\.member-panel\s*\{(?.*?)\}').Groups['body'].Value if ($memberPanelStyle -match '\bmin-height\s*:') { throw 'T03 member panel height must be driven by its current content' } Write-Output 'T03-DOCUMENT-FLOW-CONTRACT PASS'