$ErrorActionPreference = 'Stop' $root = Split-Path -Parent $PSScriptRoot $profilePath = Join-Path $root 'styles/adaptive-frame-profiles.scss' if (-not (Test-Path -LiteralPath $profilePath)) { throw 'Missing adaptive frame profile owner: styles/adaptive-frame-profiles.scss' } $profile = Get-Content -LiteralPath $profilePath -Raw -Encoding UTF8 foreach ($token in @( '@mixin adaptive-auth-dialog', '@mixin adaptive-scroll-button($type)', '@mixin adaptive-module-content', '@mixin adaptive-module-field', '@mixin adaptive-feedback-toast', '@mixin adaptive-genealogy-current-slip', '@mixin adaptive-genealogy-list-card', '@mixin adaptive-genealogy-state-panel', '@mixin adaptive-genealogy-form-field', '@mixin adaptive-g05-overview-surface', '@mixin adaptive-g06-search-field', '@mixin adaptive-g06-search-action', '@mixin adaptive-g01-add-sheet', '@mixin adaptive-g01-switcher', '@mixin adaptive-family-content', '@mixin adaptive-family-panel', '@mixin adaptive-family-field', '@mixin adaptive-family-letter', '@mixin adaptive-notification-content', '@mixin adaptive-profile-content', '@mixin adaptive-profile-field', '@mixin adaptive-profile-summary', '@mixin adaptive-records-content', '@mixin adaptive-records-field', '@mixin adaptive-records-person', '@mixin adaptive-tree-panel', '@mixin adaptive-tree-field', 'a01-scroll-dialog-v3.png', 'border-image-slice: 260 240 360 240 fill;', 'border-image-slice: 56 300 fill;', 'border-image-slice: 105 150;', 'border-image-slice: 70 100 fill;' )) { if (-not $profile.Contains($token)) { throw "Adaptive frame profile missing: $token" } } Write-Output 'ADAPTIVE-FRAME-PROFILES-CONTRACT PASS'