$ErrorActionPreference = 'Stop' $root = Split-Path $PSScriptRoot -Parent $page = [System.IO.File]::ReadAllText((Join-Path $root 'pages/genealogy/g01-my-genealogies.vue'), [System.Text.Encoding]::UTF8) foreach ($expected in @( '@include adaptive.adaptive-genealogy-current-slip', '@include adaptive.adaptive-genealogy-list-card', '@include adaptive.adaptive-genealogy-state-panel', 'background: url("/static/assets/foundation/transparent/a01-scroll-primary-v3.png") center / contain no-repeat', 'grid-template-columns: minmax(0, 1fr) 96rpx' )) { if (-not $page.Contains($expected)) { throw "G01 document-flow contract missing: $expected" } } foreach ($layer in @('.add-dialog-layer', '.genealogy-switcher-layer')) { $escaped = [regex]::Escape($layer) if ($page -notmatch "(?s)$escaped\s*\{[^}]*position:\s*fixed;") { throw "G01 required dialog layer is not fixed: $layer" } } if ([regex]::Matches($page, 'position\s*:').Count -ne 2) { throw 'G01 must keep only its two user-triggered dialog layers positioned' } if ($page -match 'class="(?:current-frame|current-seal-frame|application-record__skin|error-panel__frame|empty-panel__frame|empty-seal__skin|empty-search-action__skin|empty-invite-action__skin|state-retry__skin)"') { throw 'G01 decorative skins must be container backgrounds' } Write-Output 'G01-DOCUMENT-FLOW-CONTRACT PASS'