$ErrorActionPreference = 'Stop' $root = Split-Path -Parent $PSScriptRoot $page = Get-Content -LiteralPath (Join-Path $root 'pages/genealogy/g12-generation-poems.vue') -Raw -Encoding utf8 $style = [regex]::Match($page, '(?s)]*>(.*?)').Groups[1].Value $positions = [regex]::Matches([regex]::Replace($style, '(?s)/\*.*?\*/', ''), '(?m)\bposition\s*:\s*([^;]+);') if ($positions.Count -ne 1 -or $positions[0].Groups[1].Value.Trim() -ne 'fixed') { throw "G12 must retain only its fixed feedback layer; found $($positions.Count) position declarations" } foreach ($required in @( 'background: url("/static/assets/modules/genealogy/transparent/g01-empty-panel-frame.png")', 'background: url("/static/assets/modules/genealogy/transparent/g-form-field-frame.png")', 'background: url("/static/assets/foundation/transparent/a01-scroll-secondary-v3.png")' )) { if ($page -notmatch [regex]::Escape($required)) { throw "G12 is missing real asset background: $required" } } if ($page -notmatch '(?s)]*auto-height') { throw 'G12 generation poem field must grow from its text data' } Write-Output 'G12-DOCUMENT-FLOW-CONTRACT PASS'