Implement PauseNotificationCard widget
epic-pause-status-notifications-ui-task-002 — Build the Flutter widget that renders in the coordinator's in-app notification feed. Display peer mentor name as the headline, effective date as a subtitle, optional reason as secondary body text, and a tappable quick-action link that deep-links to the peer mentor's profile screen. Use existing design tokens for typography, color, and spacing to match the notification feed visual style.
Acceptance Criteria
Technical Requirements
Execution Context
Tier 1 - 540 tasks
Can start after Tier 0 completes
Implementation Notes
Do not hardcode colour values — use only design tokens from the project's `AppColors` or theme extension. Format the date using `intl` package `DateFormat('dd.MM.yyyy')` with `nb_NO` locale — confirm the locale is initialised in `main.dart`. For the deep-link URL allowlist validation, create a private `_isSafeDeepLink(String url)` helper that checks the URL begins with the app's custom scheme (e.g. `myapp://`) or an internal route path (begins with `/`).
Wrap the entire card in an `InkWell` only if the design calls for a tap-to-expand behaviour — otherwise use a plain `GestureDetector` on the quick-action link only to avoid conflicting tap targets.
Testing Requirements
Widget tests in flutter_test: (1) renders headline with correct name, (2) renders formatted date in subtitle, (3) reason text visible when non-null, (4) reason text absent from widget tree when null, (5) tap on quick-action link triggers navigation callback (use a mock GoRouter or capture navigation events), (6) reason text truncates at 2 lines when text is very long. Golden test: render widget at 375 dp width with all fields populated and compare against approved PNG baseline. Accessibility test: use `flutter_accessibility_scanner` or manual `SemanticsController` to verify labels are present.
The existing notification feed component may expect a specific notification model shape that does not map cleanly to the pause notification payload structure, requiring either payload transformation or feed refactoring.
Mitigation & Contingency
Mitigation: Review the notification-list-item and notification-model contracts before building the card. Design the pause-notification-card to extend or wrap the existing list item pattern rather than replacing it.
Contingency: If the feed contract is incompatible, implement a lightweight adapter that maps the pause notification payload to the feed's expected model shape, keeping the adapter isolated from the core card widget.
The app's existing toast/banner infrastructure may not support the auto-dismiss timeout duration or dismissal animation required for the peer mentor confirmation banner, necessitating a custom implementation that diverges from the design system.
Mitigation & Contingency
Mitigation: Audit the existing banner and toast components (in-app-notification-banner, notification-list-item) for configurable dismiss timeout before starting implementation. Prefer configuration over custom code.
Contingency: If the existing infrastructure cannot be configured, implement the banner as a thin wrapper with a custom auto-dismiss timer while reusing all visual tokens (colours, spacing, typography) from the design system to maintain consistency.