Implement CertificationAlertBanner widget
epic-peer-mentor-detail-screen-ui-components-task-005 — Build the CertificationAlertBanner as a conditional banner widget that is only rendered for HLF-org contexts. The banner must display a days-remaining countdown derived from the HLF cert expiry date and include an 'Enroll' CTA button that deep-links to the HLF course enrollment screen. Suppress rendering entirely for non-HLF orgs by checking org type via OrgLabelsProvider.
Acceptance Criteria
Technical Requirements
Execution Context
Tier 2 - 518 tasks
Can start after Tier 1 completes
Implementation Notes
The HLF org detection should rely on a well-defined constant or enum (e.g., `OrgType.hlf`) rather than a string comparison against a magic string. If the project uses a `currentOrgProvider`, read `ref.watch(currentOrgProvider).type == OrgType.hlf`. The 'Enroll' deep-link route path should be defined as a named route constant in the app's router configuration — do not hardcode a path string in the widget. Per the HLF workshop notes, certification expiry is directly tied to the peer mentor's visibility on the local chapter website; this banner is therefore business-critical and must be robustly tested.
Coordinate with the router owner to confirm the enrollment screen route name before implementation.
Testing Requirements
Widget tests: (1) non-HLF org → `find.byType(CertificationAlertBanner)` subtree is empty / SizedBox.shrink, (2) HLF org + cert expiring in 10 days → banner is visible with '10 days' text, (3) HLF org + cert fully active (35 days) → banner is suppressed, (4) HLF org + cert expired → banner is visible with expired messaging, (5) 'Enroll' button tap triggers the expected router navigation call (mock the router). Provide a Riverpod ProviderScope override in each test to inject a fake OrgLabelsProvider with the desired org type.
The org labels system may not yet have label keys defined for peer mentor detail screen terminology (role labels, section headings), requiring additions to the label key registry that must be coordinated with the admin configuration team.
Mitigation & Contingency
Mitigation: Audit existing label keys in the terminology system before starting OrgLabelsProvider integration. Submit required new label keys for admin configuration in parallel with component implementation.
Contingency: If label keys are not available at integration time, use hardcoded English fallbacks with a clear TODO for admin configuration, ensuring the widget renders correctly while keys are being provisioned.
The design token semantic colors (warning, error surface) may not meet WCAG 2.2 AA 4.5:1 contrast ratio when rendered on the app's background surface tokens, requiring design system changes that affect the entire app.
Mitigation & Contingency
Mitigation: Run contrast ratio validation on the token palette during Epic 1 design token implementation. Flag any failing pairs to the design system owner before building UI components that depend on them.
Contingency: If tokens fail contrast requirements, define supplementary high-contrast override tokens specific to alert and badge contexts that meet AA without modifying the global palette.