{
  "url": "https://www.agoda.com",
  "auditedAt": "2026-07-23T03:53:19.320Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete representative audit of four archetypes. Purchase, authenticated account management, and payment submission were not performed; commercial entry states were judged without creating a transaction.",
  "page": {
    "appType": "hybrid",
    "framework": "Client-rendered commerce application plus separate travel-guide stack",
    "notes": "Homepage redirects to /en-gb/. Commerce templates force desktop-width rendering at narrow viewports; the linked travel-guide route returned 403 in screenshot capture."
  },
  "evidenceUsed": [
    "screenshot",
    "layout-metrics",
    "transition-video",
    "heap-summary",
    "evaluate-probe",
    "trace",
    "HAR",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "Lighthouse 13.4.1",
    "Modern Web Guidance 0.0.172"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "fluid-scaling",
    "performance",
    "break-up-long-tasks",
    "optimize-image-priority",
    "accessibility",
    "security",
    "privacy",
    "forms",
    "deliver-optimized-decorative-images",
    "improve-text-layout-and-legibility",
    "position-aware-tooltips",
    "webmcp"
  ],
  "artifacts": [
    {
      "type": "other",
      "path": "evidence/buttons.json",
      "caption": "buttons",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/city-layout.json",
      "caption": "city layout",
      "findingIds": [
        "F02",
        "F03",
        "F11"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/city-mobile.png",
      "caption": "city mobile",
      "findingIds": [
        "F02",
        "F03",
        "F11"
      ]
    },
    {
      "type": "other",
      "path": "evidence/city-probe.json",
      "caption": "city probe",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/deals-layout.json",
      "caption": "deals layout",
      "findingIds": [
        "F02",
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/deals-mobile.png",
      "caption": "deals mobile",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/deals-probe.json",
      "caption": "deals probe",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "discoverability crawler",
      "findingIds": [
        "F12",
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "discoverability rendered",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "discoverability",
      "findingIds": [
        "F12",
        "F17"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/guide-layout.json",
      "caption": "guide layout",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/guide-mobile.png",
      "caption": "guide mobile",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/guide-probe.json",
      "caption": "guide probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "heap baseline",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.heapsnapshot",
      "caption": "heap post scroll",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "heap post",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": [
        "F09"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile-dark-reduce.png",
      "caption": "home mobile dark reduce",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "home probe",
      "findingIds": [
        "F09",
        "F10",
        "F17"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F05",
        "F06",
        "F15"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-tab-transition-mid.png",
      "caption": "home tab transition mid",
      "findingIds": []
    },
    {
      "type": "video",
      "path": "evidence/home-tab-transition.mp4",
      "caption": "home tab transition",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images",
      "findingIds": [
        "F06",
        "F07"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary.json",
      "caption": "lighthouse summary",
      "findingIds": [
        "F04",
        "F05",
        "F07",
        "F13",
        "F14"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "lighthouse",
      "findingIds": [
        "F04",
        "F05",
        "F07",
        "F13",
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-focus.json",
      "caption": "preferences focus",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/search-empty-error.png",
      "caption": "search empty error",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "The light and dark-condition mobile screenshots are pixel-equivalent in their white surfaces; the preference probe reports colorScheme \"normal\".",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-dark-reduce.png",
        "evidence/preferences-focus.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The reduced-motion probe matched the preference and found no active non-essential animations on the loaded booking state.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/preferences-focus.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Lighthouse and screenshots found no control disappearance under the tested preference/visual conditions; ordinary contrast defects are recorded separately.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The recorded Hotels to Homes state change uses a smooth, continuous fade rather than an abrupt replacement.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-tab-transition.mp4"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and interaction-surface inventory across representative templates.",
      "evidence": "No applicable surface was found.",
      "reason": "No scroll-linked animation or scrollytelling surface was present on the representative paths."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and interaction-surface inventory across representative templates.",
      "evidence": "No applicable surface was found.",
      "reason": "No gesture-driven remove, pull-to-reveal, or snap carousel interaction was present in the audited paths."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The compact mobile header remains visually distinct and the long city content retains orientation via its heading/search region.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/city-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "The 360px London screenshot shows the calendar panel and its content cut off at the right edge while the page itself is 1,132px wide.",
      "pathIds": [
        "city-listing"
      ],
      "artifacts": [
        "evidence/city-mobile.png",
        "evidence/city-layout.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The tab transition moves the active underline and changes the contextual hero copy, clearly cueing the new state.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-tab-transition.mp4"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Desktop screenshot shows the panel covering roughly the lower quarter of the booking form; DOM probe found zero dialog, role=dialog, popover, or details elements.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Desktop screenshot shows the panel covering roughly the lower quarter of the booking form; DOM probe found zero dialog, role=dialog, popover, or details elements.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The first viewport gives primary visual weight to destination, dates, occupancy, and search rather than decorative application framing.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Home and London layout captures report 1,132px scroll width and 772px horizontal overflow at 360px; screenshots show controls and headings clipped off-screen.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json",
        "evidence/city-mobile.png",
        "evidence/city-layout.json",
        "evidence/deals-mobile.png",
        "evidence/deals-layout.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Home and London layout captures report 1,132px scroll width and 772px horizontal overflow at 360px; screenshots show controls and headings clipped off-screen.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json",
        "evidence/city-mobile.png",
        "evidence/city-layout.json",
        "evidence/deals-mobile.png",
        "evidence/deals-layout.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Programmatic keyboard focus on the first button produced a visible 1px auto outline; controls provide labelled touch/click surfaces.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/preferences-focus.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The H1 “SEE THE WORLD FOR LESS” and central destination/date/occupancy controls make accommodation search and SEARCH the dominant action.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Home and London layout captures report 1,132px scroll width and 772px horizontal overflow at 360px; screenshots show controls and headings clipped off-screen.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json",
        "evidence/city-mobile.png",
        "evidence/city-layout.json",
        "evidence/deals-mobile.png",
        "evidence/deals-layout.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "After activating SEARCH with an empty destination, the captured page shows no validation message, invalid styling, or focus cue; the text input is not marked required. The travel-guide mobile capture consists only of “403 Forbidden”, without navigation, explanation, retry, or link back; homepage HAR also logged six 502 and two 403 API responses.",
      "pathIds": [
        "home",
        "travel-guide"
      ],
      "artifacts": [
        "evidence/search-empty-error.png",
        "evidence/home-probe.json",
        "evidence/guide-mobile.png",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F10",
        "F15"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Lighthouse measured LCP 4.3s, TBT 770ms, TTI 17.4s and performance 50; the independent trace found a 279ms long task and 259ms TBT.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-trace.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "The 360px layout observer measured CLS 0.570, dominated by a single 0.57 shift; the deals page also measured 0.117.",
      "pathIds": [
        "city-listing"
      ],
      "artifacts": [
        "evidence/city-layout.json",
        "evidence/deals-layout.json",
        "evidence/city-mobile.png"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Lighthouse measured LCP 4.3s, TBT 770ms, TTI 17.4s and performance 50; the independent trace found a 279ms long task and 259ms TBT. HAR recorded 2.66MB of script transfer and a 1.36MB bundle; Lighthouse estimates 889KiB unused JavaScript, 75KiB unused CSS, and 2.6s JS execution.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-trace.json",
        "evidence/home-trace-summary.json",
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Lighthouse measured LCP 4.3s, TBT 770ms, TTI 17.4s and performance 50; the independent trace found a 279ms long task and 259ms TBT. Image audit found 35 legacy-format images, five oversized images, five without srcset, and 40 without dimensions; HAR transferred 2.29MB of images including a 1.14MB banner.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-trace.json",
        "evidence/home-trace-summary.json",
        "evidence/images.json",
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F04",
        "F06"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "HAR recorded 2.66MB of script transfer and a 1.36MB bundle; Lighthouse estimates 889KiB unused JavaScript, 75KiB unused CSS, and 2.6s JS execution.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Lighthouse accessibility score was 86 with failures for colour contrast, missing image alt text, visible-label/name mismatch, and restricted viewport scaling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Lighthouse accessibility score was 86 with failures for colour contrast, missing image alt text, visible-label/name mismatch, and restricted viewport scaling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "A keyboard focus probe produced a visible browser focus outline; the page includes a skip-to-main-content link and one H1 on core commerce paths.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/preferences-focus.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Desktop text is readable with clear hierarchy and stable labels; mobile clipping is separately recorded as a reflow issue.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Home and London layout captures report 1,132px scroll width and 772px horizontal overflow at 360px; screenshots show controls and headings clipped off-screen. Lighthouse accessibility score was 86 with failures for colour contrast, missing image alt text, visible-label/name mismatch, and restricted viewport scaling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json",
        "evidence/city-mobile.png",
        "evidence/city-layout.json",
        "evidence/deals-mobile.png",
        "evidence/deals-layout.json",
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F02",
        "F07"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Lighthouse did not report errors-in-console or uncaught-exception failures in the audited load.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Image audit found 35 legacy-format images, five oversized images, five without srcset, and 40 without dimensions; HAR transferred 2.29MB of images including a 1.14MB banner.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Lighthouse best-practices score was 81 with one deprecation warning and failed valid-source-maps audit.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Home, city, deals, and guide probes returned descriptive titles and meta descriptions.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "The London DOM probe counted 53 links with no visible/accessible text; Lighthouse also failed descriptive link text.",
      "pathIds": [
        "city-listing"
      ],
      "artifacts": [
        "evidence/city-probe.json",
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Public commerce pages returned index/follow, canonical URLs and 49–50 hreflang links; the guide exposes canonical and index policy.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The homepage exposes JSON-LD and nine Open Graph tags; city/deals pages expose nine Open Graph tags matching their visible archetypes.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Headers probe found no CSP, Referrer-Policy, or Permissions-Policy. Cookie audit found eight flagged cookies, including two without Secure and pervasive SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The tracker probe found no known tracker domains; the visible consent copy states only strictly necessary cookies, while CDN origins provide Agoda assets.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/trackers.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Lighthouse found no notification or geolocation prompt on load; authentication is optional on the audited public search entry path.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Headers probe found no CSP, Referrer-Policy, or Permissions-Policy. Cookie audit found eight flagged cookies, including two without Secure and pervasive SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Discoverability fetch returned HTTP 200 and 195KB raw HTML but zero content text, 0% rendered-word coverage, no raw title/H1/description, and a blank crawler screenshot.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The tab state change completed without a blank shell or lost search context; the calendar collision defect is recorded under anchored positioning.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-tab-transition.mp4"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Discoverability fetch returned HTTP 200 and 195KB raw HTML but zero content text, 0% rendered-word coverage, no raw title/H1/description, and a blank crawler screenshot.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "The travel-guide mobile capture consists only of “403 Forbidden”, without navigation, explanation, retry, or link back; homepage HAR also logged six 502 and two 403 API responses.",
      "pathIds": [
        "travel-guide"
      ],
      "artifacts": [
        "evidence/guide-mobile.png",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Commerce pages declare lang=en and dir=ltr; the guide declares en-US, and localized navigation remained readable.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The en-GB experience renders £ currency and localized day/month labels with 50 hreflang alternatives.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The booking UI presents local calendar dates without ambiguous timestamps; no cross-zone event-time feature is exposed on these archetypes.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Deal cards state discount levels and actions consistently; the cookie panel says analytics/marketing cookies are not used and offers Dismiss without confirmshaming.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/deals-mobile.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "After activating SEARCH with an empty destination, the captured page shows no validation message, invalid styling, or focus cue; the text input is not marked required.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/search-empty-error.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "The destination field has a clear accessible prompt and date/party controls avoid free-form date entry; no sign-in/payment form was entered.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Currency, dates, occupancy and account state are visible before search; deal cards expose their offer/action without a forced account wall on the audited entry path.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Image audit found 35 legacy-format images, five oversized images, five without srcset, and 40 without dimensions; HAR transferred 2.29MB of images including a 1.14MB banner.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "HAR showed no known tracker fleet and no uncompressed text or missing-cache-header signals; recorded excess code/media is separately identified.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "HAR recorded 2.66MB of script transfer and a 1.36MB bundle; Lighthouse estimates 889KiB unused JavaScript, 75KiB unused CSS, and 2.6s JS execution. Image audit found 35 legacy-format images, five oversized images, five without srcset, and 40 without dimensions; HAR transferred 2.29MB of images including a 1.14MB banner.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "issues",
      "confidence": "high",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "The non-JS crawler receives 0% content coverage and blank core content; no structured agent capability was found in the rendered probes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and interaction-surface inventory across representative templates.",
      "evidence": "No applicable surface was found.",
      "reason": "No summarisation or generative task was exposed where on-device inference would be an appropriate user-facing requirement."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "After ten repeated full-page scroll cycles, heap totals were effectively flat versus baseline (66.078MB vs 66.080MB; node count +902, under 0.1%).",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/heap-post-scroll.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "medium",
      "method": "Direct browser evidence gathered under the check-specific planned condition.",
      "evidence": "Baseline heap summary contained 1,211,314 nodes, 4,964,920 edges and 66.1MB self size before a booking flow was started.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Check-specific review of representative rendered paths using the recorded browser probes.",
      "evidence": "Before/after heap summaries show no material aggregate growth and no Detached* constructor among the largest retained constructors.",
      "pathIds": [
        "home",
        "city-listing",
        "deals"
      ],
      "artifacts": [
        "evidence/heap-post-scroll.heapsnapshot"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02",
        "F10",
        "F15"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F03",
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F02"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06",
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F12",
        "F15"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F06",
        "F05"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Primary accommodation-search landing page and booking-entry state; exercised tabs, empty search, preferences, mobile reflow, performance, security and memory.",
      "url": "https://www.agoda.com/en-gb/",
      "conditions": [
        "desktop",
        "360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus",
        "empty search submission"
      ],
      "result": "issues"
    },
    {
      "id": "city-listing",
      "description": "London destination/detail-listing archetype representing discovery after a search.",
      "url": "https://www.agoda.com/en-gb/city/london-gb.html",
      "conditions": [
        "360x800",
        "load stability",
        "calendar overlay"
      ],
      "result": "issues"
    },
    {
      "id": "deals",
      "description": "Promotional/listing archetype representing coupon and offer browsing.",
      "url": "https://www.agoda.com/en-gb/deals",
      "conditions": [
        "360x800",
        "load stability"
      ],
      "result": "issues"
    },
    {
      "id": "travel-guide",
      "description": "Editorial/content archetype linked from primary navigation; capture returned a bare 403.",
      "url": "https://www.agoda.com/travel-guides/",
      "conditions": [
        "360x800"
      ],
      "result": "failed"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "high",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "The booking experience remains light-only when the user requests dark mode.",
      "evidence": "The light and dark-condition mobile screenshots are pixel-equivalent in their white surfaces; the preference probe reports colorScheme \"normal\".",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-dark-reduce.png",
        "evidence/preferences-focus.json"
      ],
      "suggestedFix": "Declare color-scheme: light dark and provide preference-driven dark surface, text, border, and control tokens.",
      "effort": "medium"
    },
    {
      "id": "F02",
      "severity": "critical",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "css",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "Core accommodation pages render a desktop-width canvas inside a 360px mobile viewport.",
      "evidence": "Home and London layout captures report 1,132px scroll width and 772px horizontal overflow at 360px; screenshots show controls and headings clipped off-screen.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json",
        "evidence/city-mobile.png",
        "evidence/city-layout.json",
        "evidence/deals-mobile.png",
        "evidence/deals-layout.json"
      ],
      "suggestedFix": "Remove fixed/minimum desktop widths, preserve a device-width viewport, and use intrinsic/fluid layouts that reflow search controls and cards.",
      "effort": "large"
    },
    {
      "id": "F03",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "city-listing",
      "url": "https://www.agoda.com/en-gb/city/london-gb.html",
      "summary": "The London listing has severe layout instability during load.",
      "evidence": "The 360px layout observer measured CLS 0.570, dominated by a single 0.57 shift; the deals page also measured 0.117.",
      "artifacts": [
        "evidence/city-layout.json",
        "evidence/deals-layout.json",
        "evidence/city-mobile.png"
      ],
      "suggestedFix": "Reserve dimensions for asynchronously inserted search/calendar, hero, and promotional regions and avoid late state replacement above the fold.",
      "effort": "medium"
    },
    {
      "id": "F04",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "Mobile load and interactivity are slow and main-thread heavy.",
      "evidence": "Lighthouse measured LCP 4.3s, TBT 770ms, TTI 17.4s and performance 50; the independent trace found a 279ms long task and 259ms TBT.",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-trace.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Profile the critical booking path, split and defer non-critical work, break long tasks, and prioritize only LCP-critical resources.",
      "effort": "large"
    },
    {
      "id": "F05",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "The homepage ships excessive JavaScript and unused front-end code.",
      "evidence": "HAR recorded 2.66MB of script transfer and a 1.36MB bundle; Lighthouse estimates 889KiB unused JavaScript, 75KiB unused CSS, and 2.6s JS execution.",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Route-split the homepage, remove duplicate/legacy bundles, and defer search, account, promotion, and recommendation code until needed.",
      "effort": "large"
    },
    {
      "id": "F06",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "Promotional imagery is oversized and mostly served in legacy formats.",
      "evidence": "Image audit found 35 legacy-format images, five oversized images, five without srcset, and 40 without dimensions; HAR transferred 2.29MB of images including a 1.14MB banner.",
      "artifacts": [
        "evidence/images.json",
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Generate responsive AVIF/WebP sources for campaign art, size them to rendered slots, and include intrinsic dimensions.",
      "effort": "medium"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "The homepage fails multiple automated accessibility fundamentals.",
      "evidence": "Lighthouse accessibility score was 86 with failures for colour contrast, missing image alt text, visible-label/name mismatch, and restricted viewport scaling.",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/images.json"
      ],
      "suggestedFix": "Fix each Lighthouse/axe node: raise colour contrast, supply meaningful alt text, align accessible names with visible labels, and permit zoom.",
      "effort": "medium"
    },
    {
      "id": "F08",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "Important browser security policies are missing and cookies are overly permissive.",
      "evidence": "Headers probe found no CSP, Referrer-Policy, or Permissions-Policy. Cookie audit found eight flagged cookies, including two without Secure and pervasive SameSite=None.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Deploy a restrictive nonce/hash CSP, explicit Referrer-Policy and Permissions-Policy, and narrow cookie Secure/SameSite attributes to actual cross-site needs.",
      "effort": "medium"
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "The cookie preference panel obscures content and is not exposed as a semantic dialog/popover.",
      "evidence": "Desktop screenshot shows the panel covering roughly the lower quarter of the booking form; DOM probe found zero dialog, role=dialog, popover, or details elements.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Use an appropriate dialog/popover primitive with labelled semantics, focus handling, light-dismiss where appropriate, and a compact non-obscuring layout.",
      "effort": "small"
    },
    {
      "id": "F10",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "humane-error-handling",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "Submitting the empty destination state gives no visible recovery guidance.",
      "evidence": "After activating SEARCH with an empty destination, the captured page shows no validation message, invalid styling, or focus cue; the text input is not marked required.",
      "artifacts": [
        "evidence/search-empty-error.png",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Mark the destination requirement semantically, validate after interaction, focus the invalid field, and announce a concise actionable error.",
      "effort": "small"
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "anchored-positioning",
      "guidanceId": "position-aware-tooltips",
      "guidanceCategory": "user-experience",
      "pathId": "city-listing",
      "url": "https://www.agoda.com/en-gb/city/london-gb.html",
      "summary": "The date overlay does not fit or reposition within the mobile viewport.",
      "evidence": "The 360px London screenshot shows the calendar panel and its content cut off at the right edge while the page itself is 1,132px wide.",
      "artifacts": [
        "evidence/city-mobile.png",
        "evidence/city-layout.json"
      ],
      "suggestedFix": "Anchor the calendar to its trigger with collision-aware fallback positions and provide a true full-width mobile presentation.",
      "effort": "medium"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "Core content is invisible to clients that do not execute JavaScript.",
      "evidence": "Discoverability fetch returned HTTP 200 and 195KB raw HTML but zero content text, 0% rendered-word coverage, no raw title/H1/description, and a blank crawler screenshot.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png"
      ],
      "suggestedFix": "Server-render the core offer, headings, search form and destination links, then hydrate enhancements without replacing usable HTML.",
      "effort": "large"
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "The page uses a deprecated API and omits source maps for large first-party JavaScript.",
      "evidence": "Lighthouse best-practices score was 81 with one deprecation warning and failed valid-source-maps audit.",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Remove the deprecated API call and publish production source maps to the configured secure debugging endpoint.",
      "effort": "small"
    },
    {
      "id": "F14",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "city-listing",
      "url": "https://www.agoda.com/en-gb/city/london-gb.html",
      "summary": "Important links lack descriptive accessible text.",
      "evidence": "The London DOM probe counted 53 links with no visible/accessible text; Lighthouse also failed descriptive link text.",
      "artifacts": [
        "evidence/city-probe.json",
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Give every crawlable card and icon link descriptive text or an accessible name that communicates its destination.",
      "effort": "medium"
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "pathId": "travel-guide",
      "url": "https://www.agoda.com/travel-guides/",
      "summary": "A linked content archetype fails as a bare 403 page with no recovery path.",
      "evidence": "The travel-guide mobile capture consists only of “403 Forbidden”, without navigation, explanation, retry, or link back; homepage HAR also logged six 502 and two 403 API responses.",
      "artifacts": [
        "evidence/guide-mobile.png",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Return a branded, accessible failure state with retry/home options and prevent transient API failures from degrading the surrounding shell.",
      "effort": "medium"
    },
    {
      "id": "F16",
      "severity": "medium",
      "confidence": "medium",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "The initial homepage memory footprint is large for a search landing page.",
      "evidence": "Baseline heap summary contained 1,211,314 nodes, 4,964,920 edges and 66.1MB self size before a booking flow was started.",
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot"
      ],
      "suggestedFix": "Profile retained objects and component trees, avoid eagerly mounting below-fold/promotional systems, and lazy-initialize non-critical features.",
      "effort": "large"
    },
    {
      "id": "F17",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-agent-ready",
      "principleCheckId": "structured-agent-capabilities",
      "guidanceId": "webmcp",
      "guidanceCategory": "agentic",
      "pathId": "home",
      "url": "https://www.agoda.com/en-gb/",
      "summary": "The commerce workflow is not reliably machine-readable to non-JavaScript agents.",
      "evidence": "The non-JS crawler receives 0% content coverage and blank core content; no structured agent capability was found in the rendered probes.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "First expose server-rendered semantic booking controls, then provide narrowly scoped, confirmable agent tools for search and itinerary actions.",
      "effort": "large"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Rebuild commerce templates for true mobile reflow",
      "priority": 1,
      "findingIds": [
        "F02",
        "F03",
        "F11"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Cut initial JavaScript, main-thread work, and campaign payload",
      "priority": 2,
      "findingIds": [
        "F04",
        "F05",
        "F06",
        "F16"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Server-render core booking and destination content",
      "priority": 3,
      "findingIds": [
        "F12",
        "F17"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Fix accessibility failures and humane search validation",
      "priority": 4,
      "findingIds": [
        "F07",
        "F10",
        "F14"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Harden CSP, browser policies, and cookie attributes",
      "priority": 5,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Add a preference-driven dark theme",
      "priority": 6,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Use semantic, compact consent UI and branded failure states",
      "priority": 7,
      "findingIds": [
        "F09",
        "F15"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Remove deprecated API use and restore source-map hygiene",
      "priority": 8,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "performance",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 2400,
    "pathCount": 4,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-23T03-53-19-320Z"
}
