{
  "ursId": "URS-036",
  "title": "Mobile device support",
  "timestamp": "2026-04-23T03:41:37.043Z",
  "durationMs": 123642,
  "config": {
    "inboxUrl": "http://localhost:64265",
    "dbHost": "localhost",
    "dbPort": 64266,
    "dbName": "cc_repinbox_dev"
  },
  "setup": {
    "status": "pass"
  },
  "scenarios": [
    {
      "name": "Step 1: Login form on iPhone 12 (empty)",
      "status": "pass",
      "description": "Step 1: Login form on iPhone 12 (empty)",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-01-iphone-12-login-empty.png"
      ],
      "explanation": "Confirms the login form is rendered and accessible on an iPhone 12 viewport (390×844 px) before credentials are entered. Verifies the form fields are visible and that no horizontal scroll occurs at the phone viewport width.",
      "startedAt": "2026-04-23T03:41:41.503Z",
      "finishedAt": "2026-04-23T03:41:41.503Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-01-iphone-12-login.webm"
    },
    {
      "name": "Step 1: Login form on iPhone 12 (filled)",
      "status": "pass",
      "description": "Step 1: Login form on iPhone 12 (filled)",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-01-iphone-12-login-filled.png"
      ],
      "explanation": "Shows the login form with credentials filled in, immediately before the submit button is tapped. Confirms all fields are reachable and readable on a mobile viewport.",
      "startedAt": "2026-04-23T03:41:42.681Z",
      "finishedAt": "2026-04-23T03:41:42.681Z"
    },
    {
      "name": "Step 1: Home page on iPhone 12 after login",
      "status": "pass",
      "description": "Step 1: Home page on iPhone 12 after login",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-01-iphone-12-home.png"
      ],
      "explanation": "Confirms a successful login redirected the browser away from /login and that the post-login home page renders without horizontal overflow on the iPhone 12 viewport.",
      "startedAt": "2026-04-23T03:41:45.457Z",
      "finishedAt": "2026-04-23T03:41:45.457Z"
    },
    {
      "name": "Step 2: Navigation drawer open on iPhone 12",
      "status": "pass",
      "description": "Step 2: Navigation drawer open on iPhone 12",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-02-drawer-open-iphone-12.png"
      ],
      "explanation": "Taps the hamburger menu button to open the mobile navigation drawer, then captures the full open state. Proves the primary navigation destinations are reachable by touch on a 390×844 px phone viewport.",
      "startedAt": "2026-04-23T03:41:51.084Z",
      "finishedAt": "2026-04-23T03:41:51.084Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-02-nav-drawer.webm"
    },
    {
      "name": "Step 2: Billing page after drawer navigation",
      "status": "pass",
      "description": "Step 2: Billing page after drawer navigation",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-02-billing-after-nav.png"
      ],
      "explanation": "Taps the Bill-Only nav link inside the open drawer and confirms the app routes to /billing. Also confirms the drawer auto-closes after navigation, matching the NavigationSidebar setOpenMobile(false) behavior.",
      "startedAt": "2026-04-23T03:41:54.036Z",
      "finishedAt": "2026-04-23T03:41:54.036Z"
    },
    {
      "name": "Step 3: Accounts cards on iPhone 12",
      "status": "pass",
      "description": "Step 3: Accounts cards on iPhone 12",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-03-accounts-cards-iphone-12.png"
      ],
      "explanation": "Confirms the /sales-accounts page renders a vertical card list (not a table) on the iPhone 12 viewport. Asserts the three seeded ZuriMED account names appear inside the mobile-only card container and that no horizontal scroll is present.",
      "startedAt": "2026-04-23T03:42:00.375Z",
      "finishedAt": "2026-04-23T03:42:00.375Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-03-accounts-mobile-cards.webm"
    },
    {
      "name": "Step 3: Account detail on iPhone 12",
      "status": "pass",
      "description": "Step 3: Account detail on iPhone 12",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-03-account-detail-iphone-12.png"
      ],
      "explanation": "Taps a mobile card link and confirms the app navigates to the account detail page. Verifies the detail page loads without horizontal overflow on a phone viewport.",
      "startedAt": "2026-04-23T03:42:01.464Z",
      "finishedAt": "2026-04-23T03:42:01.464Z"
    },
    {
      "name": "Step 4: Billing cards on iPhone 12",
      "status": "pass",
      "description": "Step 4: Billing cards on iPhone 12",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-04-billing-cards-iphone-12.png"
      ],
      "explanation": "Confirms the /billing page renders all four seeded Bill-Only Orders as tappable links on the iPhone 12 viewport, and that no horizontal scroll is present.",
      "startedAt": "2026-04-23T03:42:07.789Z",
      "finishedAt": "2026-04-23T03:42:07.789Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-04-billing-mobile-cards.webm"
    },
    {
      "name": "Step 4: Billing detail on iPhone 12",
      "status": "pass",
      "description": "Step 4: Billing detail on iPhone 12",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-04-billing-detail-iphone-12.png"
      ],
      "explanation": "Taps a billing card link and confirms the app navigates to the order detail page. Verifies the detail page loads without horizontal overflow on a phone viewport.",
      "startedAt": "2026-04-23T03:42:10.886Z",
      "finishedAt": "2026-04-23T03:42:10.886Z"
    },
    {
      "name": "Step 5: iPhone 12 /billing?filter=all",
      "status": "pass",
      "description": "Step 5: iPhone 12 /billing?filter=all",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-12-billing-filter-all.png"
      ],
      "explanation": "Verifies the /billing page renders without horizontal overflow on iPhone 12 (390×844 px). Part of the full-matrix no-horizontal-scroll sweep covering all four phone profiles.",
      "startedAt": "2026-04-23T03:42:17.334Z",
      "finishedAt": "2026-04-23T03:42:17.334Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-05-galaxy-s21-no-hscroll.webm"
    },
    {
      "name": "Step 5: iPhone 12 /sales-accounts",
      "status": "pass",
      "description": "Step 5: iPhone 12 /sales-accounts",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-12-sales-accounts.png"
      ],
      "explanation": "Verifies the /sales-accounts page renders without horizontal overflow on iPhone 12 (390×844 px). Part of the full-matrix no-horizontal-scroll sweep.",
      "startedAt": "2026-04-23T03:42:19.727Z",
      "finishedAt": "2026-04-23T03:42:19.727Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-05-iphone-12-no-hscroll.webm"
    },
    {
      "name": "Step 5: iPhone 12 /orders/requests",
      "status": "pass",
      "description": "Step 5: iPhone 12 /orders/requests",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-12-orders-requests.png"
      ],
      "explanation": "Verifies the /orders/requests page renders without horizontal overflow on iPhone 12 (390×844 px). Covers the order-request queue a field rep reaches from the mobile drawer.",
      "startedAt": "2026-04-23T03:42:22.115Z",
      "finishedAt": "2026-04-23T03:42:22.115Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-05-iphone-se-no-hscroll.webm"
    },
    {
      "name": "Step 5: iPhone 12 /packages",
      "status": "pass",
      "description": "Step 5: iPhone 12 /packages",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-12-packages.png"
      ],
      "explanation": "Verifies the /packages page renders without horizontal overflow on iPhone 12 (390×844 px). Uses the DataTable mobile-row layout below the md breakpoint.",
      "startedAt": "2026-04-23T03:42:24.564Z",
      "finishedAt": "2026-04-23T03:42:24.564Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-05-pixel-5-no-hscroll.webm"
    },
    {
      "name": "Step 5: iPhone 12 /inventory",
      "status": "pass",
      "description": "Step 5: iPhone 12 /inventory",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-12-inventory.png"
      ],
      "explanation": "Verifies the /inventory page renders without horizontal overflow on iPhone 12 (390×844 px). Uses the DataTable mobile-row layout below the md breakpoint.",
      "startedAt": "2026-04-23T03:42:26.911Z",
      "finishedAt": "2026-04-23T03:42:26.911Z"
    },
    {
      "name": "Step 5: iPhone SE /billing?filter=all",
      "status": "pass",
      "description": "Step 5: iPhone SE /billing?filter=all",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-se-billing-filter-all.png"
      ],
      "explanation": "Verifies the /billing page renders without horizontal overflow on iPhone SE (375×667 px), the narrowest iOS viewport in the test matrix.",
      "startedAt": "2026-04-23T03:42:33.320Z",
      "finishedAt": "2026-04-23T03:42:33.320Z"
    },
    {
      "name": "Step 5: iPhone SE /sales-accounts",
      "status": "pass",
      "description": "Step 5: iPhone SE /sales-accounts",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-se-sales-accounts.png"
      ],
      "explanation": "Verifies the /sales-accounts page renders without horizontal overflow on iPhone SE (375×667 px), the narrowest iOS viewport in the test matrix.",
      "startedAt": "2026-04-23T03:42:35.648Z",
      "finishedAt": "2026-04-23T03:42:35.648Z"
    },
    {
      "name": "Step 5: iPhone SE /orders/requests",
      "status": "pass",
      "description": "Step 5: iPhone SE /orders/requests",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-se-orders-requests.png"
      ],
      "explanation": "Verifies the /orders/requests page renders without horizontal overflow on iPhone SE (375×667 px), the narrowest iOS viewport in the test matrix.",
      "startedAt": "2026-04-23T03:42:37.932Z",
      "finishedAt": "2026-04-23T03:42:37.932Z"
    },
    {
      "name": "Step 5: iPhone SE /packages",
      "status": "pass",
      "description": "Step 5: iPhone SE /packages",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-se-packages.png"
      ],
      "explanation": "Verifies the /packages page renders without horizontal overflow on iPhone SE (375×667 px), the narrowest iOS viewport in the test matrix.",
      "startedAt": "2026-04-23T03:42:40.258Z",
      "finishedAt": "2026-04-23T03:42:40.258Z"
    },
    {
      "name": "Step 5: iPhone SE /inventory",
      "status": "pass",
      "description": "Step 5: iPhone SE /inventory",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-iphone-se-inventory.png"
      ],
      "explanation": "Verifies the /inventory page renders without horizontal overflow on iPhone SE (375×667 px), the narrowest iOS viewport in the test matrix.",
      "startedAt": "2026-04-23T03:42:42.556Z",
      "finishedAt": "2026-04-23T03:42:42.556Z"
    },
    {
      "name": "Step 5: Android Pixel 5 /billing?filter=all",
      "status": "pass",
      "description": "Step 5: Android Pixel 5 /billing?filter=all",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-pixel-5-billing-filter-all.png"
      ],
      "explanation": "Verifies the /billing page renders without horizontal overflow on Android Pixel 5 (432×864 px). Tests responsive layout on an Android Chrome user agent.",
      "startedAt": "2026-04-23T03:42:48.594Z",
      "finishedAt": "2026-04-23T03:42:48.594Z"
    },
    {
      "name": "Step 5: Android Pixel 5 /sales-accounts",
      "status": "pass",
      "description": "Step 5: Android Pixel 5 /sales-accounts",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-pixel-5-sales-accounts.png"
      ],
      "explanation": "Verifies the /sales-accounts page renders without horizontal overflow on Android Pixel 5 (432×864 px). Tests responsive layout on an Android Chrome user agent.",
      "startedAt": "2026-04-23T03:42:50.993Z",
      "finishedAt": "2026-04-23T03:42:50.993Z"
    },
    {
      "name": "Step 5: Android Pixel 5 /orders/requests",
      "status": "pass",
      "description": "Step 5: Android Pixel 5 /orders/requests",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-pixel-5-orders-requests.png"
      ],
      "explanation": "Verifies the /orders/requests page renders without horizontal overflow on Android Pixel 5 (432×864 px). Tests responsive layout on an Android Chrome user agent.",
      "startedAt": "2026-04-23T03:42:53.345Z",
      "finishedAt": "2026-04-23T03:42:53.345Z"
    },
    {
      "name": "Step 5: Android Pixel 5 /packages",
      "status": "pass",
      "description": "Step 5: Android Pixel 5 /packages",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-pixel-5-packages.png"
      ],
      "explanation": "Verifies the /packages page renders without horizontal overflow on Android Pixel 5 (432×864 px). Tests responsive layout on an Android Chrome user agent.",
      "startedAt": "2026-04-23T03:42:55.674Z",
      "finishedAt": "2026-04-23T03:42:55.674Z"
    },
    {
      "name": "Step 5: Android Pixel 5 /inventory",
      "status": "pass",
      "description": "Step 5: Android Pixel 5 /inventory",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-pixel-5-inventory.png"
      ],
      "explanation": "Verifies the /inventory page renders without horizontal overflow on Android Pixel 5 (432×864 px). Tests responsive layout on an Android Chrome user agent.",
      "startedAt": "2026-04-23T03:42:58.027Z",
      "finishedAt": "2026-04-23T03:42:58.027Z"
    },
    {
      "name": "Step 5: Android Galaxy S21 /billing?filter=all",
      "status": "pass",
      "description": "Step 5: Android Galaxy S21 /billing?filter=all",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-galaxy-s21-billing-filter-all.png"
      ],
      "explanation": "Verifies the /billing page renders without horizontal overflow on Android Galaxy S21 (360×800 px), the narrowest viewport in the full mobile matrix.",
      "startedAt": "2026-04-23T03:43:03.961Z",
      "finishedAt": "2026-04-23T03:43:03.961Z"
    },
    {
      "name": "Step 5: Android Galaxy S21 /sales-accounts",
      "status": "pass",
      "description": "Step 5: Android Galaxy S21 /sales-accounts",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-galaxy-s21-sales-accounts.png"
      ],
      "explanation": "Verifies the /sales-accounts page renders without horizontal overflow on Android Galaxy S21 (360×800 px), the narrowest viewport in the full mobile matrix.",
      "startedAt": "2026-04-23T03:43:06.311Z",
      "finishedAt": "2026-04-23T03:43:06.311Z"
    },
    {
      "name": "Step 5: Android Galaxy S21 /orders/requests",
      "status": "pass",
      "description": "Step 5: Android Galaxy S21 /orders/requests",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-galaxy-s21-orders-requests.png"
      ],
      "explanation": "Verifies the /orders/requests page renders without horizontal overflow on Android Galaxy S21 (360×800 px), the narrowest viewport in the full mobile matrix.",
      "startedAt": "2026-04-23T03:43:08.622Z",
      "finishedAt": "2026-04-23T03:43:08.622Z"
    },
    {
      "name": "Step 5: Android Galaxy S21 /packages",
      "status": "pass",
      "description": "Step 5: Android Galaxy S21 /packages",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-galaxy-s21-packages.png"
      ],
      "explanation": "Verifies the /packages page renders without horizontal overflow on Android Galaxy S21 (360×800 px), the narrowest viewport in the full mobile matrix.",
      "startedAt": "2026-04-23T03:43:10.923Z",
      "finishedAt": "2026-04-23T03:43:10.923Z"
    },
    {
      "name": "Step 5: Android Galaxy S21 /inventory",
      "status": "pass",
      "description": "Step 5: Android Galaxy S21 /inventory",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-05-galaxy-s21-inventory.png"
      ],
      "explanation": "Verifies the /inventory page renders without horizontal overflow on Android Galaxy S21 (360×800 px), the narrowest viewport in the full mobile matrix.",
      "startedAt": "2026-04-23T03:43:13.248Z",
      "finishedAt": "2026-04-23T03:43:13.248Z"
    },
    {
      "name": "Step 6: Touch targets on /billing?filter=all",
      "status": "pass",
      "description": "Step 6: Touch targets on /billing?filter=all",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-06-touch-targets-billing-filter-all.png"
      ],
      "explanation": "Measures every visible interactive element inside <main> on /billing on the iPhone 12 viewport and records each element's bounding box. Fails if any element's width AND height both fall below the 24 px hard minimum from WCAG 2.5.8 Target Size (Minimum). Elements below the 44 px Apple HIG recommendation are logged for review but do not fail the step.",
      "startedAt": "2026-04-23T03:43:19.558Z",
      "finishedAt": "2026-04-23T03:43:19.558Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-06-touch-targets.webm"
    },
    {
      "name": "Step 6: Touch targets on /sales-accounts",
      "status": "pass",
      "description": "Step 6: Touch targets on /sales-accounts",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-06-touch-targets-sales-accounts.png"
      ],
      "explanation": "Measures every visible interactive element inside <main> on /sales-accounts on the iPhone 12 viewport. Fails if any element falls below the 24 px WCAG 2.5.8 hard minimum on both axes.",
      "startedAt": "2026-04-23T03:43:22.229Z",
      "finishedAt": "2026-04-23T03:43:22.229Z"
    },
    {
      "name": "Step 6: Touch targets on /orders/requests",
      "status": "pass",
      "description": "Step 6: Touch targets on /orders/requests",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-06-touch-targets-orders-requests.png"
      ],
      "explanation": "Measures every visible interactive element inside <main> on /orders/requests on the iPhone 12 viewport. Fails if any element falls below the 24 px WCAG 2.5.8 hard minimum on both axes.",
      "startedAt": "2026-04-23T03:43:24.850Z",
      "finishedAt": "2026-04-23T03:43:24.850Z"
    },
    {
      "name": "Step 6: Touch targets on /packages",
      "status": "pass",
      "description": "Step 6: Touch targets on /packages",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-06-touch-targets-packages.png"
      ],
      "explanation": "Measures every visible interactive element inside <main> on /packages on the iPhone 12 viewport. Fails if any element falls below the 24 px WCAG 2.5.8 hard minimum on both axes.",
      "startedAt": "2026-04-23T03:43:27.476Z",
      "finishedAt": "2026-04-23T03:43:27.476Z"
    },
    {
      "name": "Step 6: Touch targets on /inventory",
      "status": "pass",
      "description": "Step 6: Touch targets on /inventory",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-06-touch-targets-inventory.png"
      ],
      "explanation": "Measures every visible interactive element inside <main> on /inventory on the iPhone 12 viewport. Fails if any element falls below the 24 px WCAG 2.5.8 hard minimum on both axes.",
      "startedAt": "2026-04-23T03:43:30.103Z",
      "finishedAt": "2026-04-23T03:43:30.103Z"
    },
    {
      "name": "Step 7: Pixel 5 billing",
      "status": "pass",
      "description": "Step 7: Pixel 5 billing",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-07-pixel-5-billing.png"
      ],
      "explanation": "Smoke test on Android Pixel 5: navigates to /billing after login and confirms the first seeded order is visible without horizontal overflow. Console errors are captured and fail the step if any are found.",
      "startedAt": "2026-04-23T03:43:37.888Z",
      "finishedAt": "2026-04-23T03:43:37.888Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/videos/step-07-pixel-5-smoke.webm"
    },
    {
      "name": "Step 7: Pixel 5 accounts",
      "status": "pass",
      "description": "Step 7: Pixel 5 accounts",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z/screenshots/step-07-pixel-5-accounts.png"
      ],
      "explanation": "Smoke test on Android Pixel 5: navigates to /sales-accounts and confirms the BOSS account card is visible inside the mobile-only wrapper without horizontal overflow.",
      "startedAt": "2026-04-23T03:43:38.749Z",
      "finishedAt": "2026-04-23T03:43:38.749Z"
    }
  ],
  "dbValidations": [
    {
      "name": "Login user alex.admin@zurimed.com exists",
      "query": "\n    SELECT id, email, name\n      FROM users\n     WHERE id = $1",
      "status": "pass",
      "rows": [
        {
          "id": "f6a7b8c9-d0e1-2345-f123-456789012345",
          "email": "alex.admin@zurimed.com",
          "name": "Alex Admin"
        }
      ],
      "assertion": "Exactly one user with id=alexAdmin should be seeded"
    },
    {
      "name": "At least 4 seeded billing orders exist",
      "query": "\n    SELECT order_number, status\n      FROM billing_orders\n     WHERE order_number = ANY($1)\n     ORDER BY order_number",
      "status": "pass",
      "rows": [
        {
          "order_number": "ZBO-2025-001",
          "status": "draft"
        },
        {
          "order_number": "ZBO-2025-002",
          "status": "submitted"
        },
        {
          "order_number": "ZBO-2025-003",
          "status": "invoice_sent"
        },
        {
          "order_number": "ZBO-2025-004",
          "status": "invoice_voided"
        }
      ],
      "assertion": ">= 4 ZBO-2025-* orders should be seeded by zurimedDemo"
    },
    {
      "name": "At least 3 active ZuriMED sales accounts exist",
      "query": "\n    SELECT id, name, status\n      FROM sales_accounts\n     WHERE manufacturer_organization_id = $1 AND status = 'active'\n     ORDER BY name",
      "status": "pass",
      "rows": [
        {
          "id": "fea7b8c9-d0e1-2345-0123-456789012345",
          "name": "BOSS Surgical Account Request",
          "status": "active"
        },
        {
          "id": "2ac9d0e1-f2a3-4567-2345-678901234567",
          "name": "Connecticut Ortho Account Request",
          "status": "active"
        },
        {
          "id": "1fb8c9d0-e1f2-3456-1234-567890123456",
          "name": "Copley Hospital Account Request",
          "status": "active"
        }
      ],
      "assertion": ">= 3 active sales_accounts rows for ZuriMED"
    },
    {
      "name": "At least 8 ZuriMED products exist",
      "query": "\n    SELECT count(*)::int AS product_count\n      FROM org_products\n     WHERE organization_id = $1",
      "status": "pass",
      "rows": [
        {
          "product_count": 12
        }
      ],
      "assertion": ">= 8 products rows for ZuriMED"
    }
  ],
  "overallStatus": "pass",
  "outputDir": "/Users/jason/projects/casecohort/code/validation_test_results/urs-036-mobile-device-support/2026-04-23T03-41-37-042Z",
  "auditStartTime": "2026-04-23T03:41:35.107Z",
  "auditEventEvidence": [
    {
      "createdAt": "2026-04-23T03:41:45.137Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:41:46.895Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:41:57.055Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:42:04.454Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:42:13.979Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:42:29.869Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:42:45.246Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:43:00.636Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:43:16.250Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:43:36.890Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "alex.admin@zurimed.com",
      "userId": "f6a7b8c9-d0e1-2345-f123-456789012345",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "alex.admin@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    }
  ],
  "auditQuery": "SELECT\n    ae.created_at,\n    ae.event_type,\n    ae.action,\n    ae.user_id,\n    u.email AS user_email,\n    ae.organization_id,\n    o.name AS organization_name,\n    ae.object_id,\n    ae.secondary_object_id,\n    ae.payload,\n    ae.route,\n    ae.trace_id\n  FROM audit_events ae\n  LEFT JOIN users u ON u.id = ae.user_id\n  LEFT JOIN organizations o ON o.id = ae.organization_id\n  WHERE ae.created_at >= $1\n    AND ae.organization_id = ANY($2::uuid[])\n  ORDER BY ae.created_at ASC",
  "auditAssertions": [],
  "emailAssertions": []
}