{
  "url": "https://cookpad.com",
  "auditedAt": "2026-07-21T20:26:26.773Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage complete across 58 checks and six representative public paths. Auth-provider completion, post-auth account management, and transactions were explicitly excluded from paths but did not leave any registered check unjudged.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered Rails/Turbo-style multi-page application",
    "notes": "External URL redirects to /uk. Public recipe content is server rendered. Coverage includes home, search listing, recipe detail, auth entry, premium entry, and 404 recovery; localized duplicates, post-auth authoring/account pages, third-party identity providers, and payment execution were not covered."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "discoverability",
    "trace",
    "har",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "Lighthouse",
    "raw HTTP fetch"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "component-specific-light-dark-theme",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "cross-document-transitions",
    "group-element-transitions",
    "faster-spa-view-transitions",
    "scrollytelling",
    "parallax-scroll-effects",
    "scroll-entry-exit-effects",
    "carousel-slide-effects",
    "physics-based-easing",
    "individual-transform-properties",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "dynamic-sibling-animations",
    "interactive-content-reveal",
    "pull-to-reveal",
    "swipe-to-remove",
    "shrinking-header-on-scroll",
    "scroll-progress-indicator",
    "scroll-position-aware-elements",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "soft-edge-content-fade",
    "scrollability-affordance-hints",
    "anchor-positioning-tab-underline",
    "position-aware-tooltips",
    "interest-triggered-tooltips",
    "interest-triggered-action-previews",
    "directional-navigation-transitions",
    "carousel-snap-highlights",
    "navigation-drawer",
    "stack-drill-down",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "light-dismiss-a-dialog",
    "platform-controls-dismiss-dialog",
    "declarative-dialog-popover-control",
    "animated-select-picker",
    "branded-select-styling",
    "brand-consistent-forms",
    "custom-select-picker-layouts",
    "rich-media-picker",
    "complex-shapes",
    "shaped-cutouts",
    "overflow-clipping-control",
    "visually-texture-content",
    "apply-webgl-shaders",
    "interactive-content-in-3d-scenes",
    "highlight-text-ranges",
    "prevent-text-wrapping",
    "customize-scrollbar-color-and-thickness",
    "export-html-media-from-canvas",
    "fluid-scaling",
    "calculate-with-intrinsic-sizes",
    "css-layout",
    "size-aware-styling",
    "content-based-styling",
    "child-state-based-styling",
    "design-token-reactivity",
    "dynamic-sibling-styling",
    "form-fields-automatically-fit-contents",
    "improve-text-layout-and-legibility",
    "forms",
    "accessible-error-announcement",
    "required-field-feedback",
    "validate-input-after-interaction",
    "identify-inp-causes",
    "schedule-tasks-by-priority",
    "optimize-preload-priority",
    "improve-next-page-load-performance",
    "interactions-in-complex-layouts",
    "performance",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-script-priority",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "optimize-image-priority",
    "conditional-async-dependencies",
    "expose-canvas-content-to-browser-features",
    "move-dom-element-without-losing-state",
    "precise-text-alignment",
    "visually-stable-mixed-fonts",
    "css",
    "html",
    "reduce-style-repetition",
    "security",
    "privacy",
    "batch-analytics-events",
    "full-session-analytics",
    "calculate-total-foreground-time",
    "passkeys",
    "passkey-registration",
    "passkey-authentication",
    "passkey-reauthentication",
    "passkey-conditional-create",
    "passkey-management",
    "flicker-free-client-side-ab-testing",
    "consistent-cross-document-transitions",
    "stabilize-reactive-state",
    "resilient-context-menus-and-nested-dropdowns",
    "persistent-top-layer-ui",
    "detect-initial-visibility-state",
    "sequence-distributed-events",
    "translator",
    "language-detection",
    "support-global-calendar-systems",
    "capture-location-agnostic-data",
    "format-human-readable-durations",
    "manage-recurring-intervals",
    "calculate-event-differentials",
    "coordinate-global-events",
    "model-partial-time-concepts",
    "search-hidden-content",
    "select-menu-interaction",
    "style-parent-with-has",
    "autofill-address-form",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "autofill-highlight-inputs",
    "deliver-optimized-decorative-images",
    "resolution-optimized-pseudo-elements",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "webmcp",
    "agentic-forms",
    "agentic-javascript-tools",
    "language-model",
    "summarizer"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Home at 1440×1000, initial guest state.",
      "condition": "desktop",
      "findingIds": [
        "F06",
        "F07",
        "F20"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Home at 390×844 with consent panel.",
      "condition": "mobile",
      "findingIds": [
        "F04",
        "F07",
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Home under prefers-color-scheme: dark; palette remains light.",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search-desktop.png",
      "caption": "Chicken search-results template.",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/recipe-desktop.png",
      "caption": "Recipe detail template with ingredients and steps.",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/login-mobile.png",
      "caption": "Authentication choices.",
      "condition": "mobile",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/premium-desktop.png",
      "caption": "Premium/listing guest surface.",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/404-mobile.png",
      "caption": "Branded recovery state.",
      "condition": "mobile",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Home mobile overflow/CLS/long-task observation.",
      "condition": "390×844",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/search-mobile-layout.json",
      "caption": "Search mobile overflow/CLS/long-task observation.",
      "condition": "390×844",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/recipe-mobile-layout.json",
      "caption": "Recipe mobile overflow/CLS/long-task observation.",
      "condition": "390×844",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "Home raw-HTML/rendered comparison.",
      "condition": "JavaScript on/off",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "Rendered home crawler comparison.",
      "condition": "JavaScript enabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "Crawler home comparison.",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/recipe-discoverability.json",
      "caption": "Recipe raw-HTML/rendered comparison.",
      "condition": "JavaScript on/off",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/recipe-discoverability-rendered.png",
      "caption": "Rendered recipe crawler comparison.",
      "condition": "JavaScript enabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/recipe-discoverability-crawler.png",
      "caption": "Crawler recipe comparison.",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools performance trace for home load.",
      "condition": "load",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact home trace metrics.",
      "condition": "load",
      "findingIds": [
        "F09"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Home network archive.",
      "condition": "load",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Compact home network signals.",
      "condition": "load",
      "findingIds": [
        "F11",
        "F12",
        "F20",
        "F24"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "Lighthouse home report.",
      "condition": "mobile",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-recipe.json",
      "caption": "Lighthouse recipe report.",
      "condition": "mobile",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "Search baseline heap summary.",
      "condition": "baseline",
      "findingIds": [
        "F25"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-after-one-scroll.json",
      "caption": "Search heap after one bottom traversal.",
      "condition": "one traversal",
      "findingIds": [
        "F25"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.json",
      "caption": "Search heap after ten traversals.",
      "condition": "ten traversals",
      "findingIds": [
        "F25"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security response headers.",
      "condition": "load",
      "findingIds": [
        "F19",
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie attributes.",
      "condition": "load",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party tracker inventory.",
      "condition": "load",
      "findingIds": [
        "F20",
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client-side secret scan.",
      "condition": "load",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "Home image diagnostics.",
      "condition": "load",
      "findingIds": [
        "F17",
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recipe-images.json",
      "caption": "Recipe image diagnostics.",
      "condition": "load",
      "findingIds": [
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-platform-probe.json",
      "caption": "Document/platform feature probe.",
      "condition": "load",
      "findingIds": [
        "F01",
        "F03",
        "F05",
        "F06",
        "F07",
        "F15",
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "Robots policy including AI crawler rules.",
      "condition": "raw fetch",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap-headers.txt",
      "caption": "HTTP response for /sitemap.xml.",
      "condition": "raw fetch",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/contrast-probe.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-home-summary.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": [
        "F02",
        "F04",
        "F08",
        "F09",
        "F10",
        "F13",
        "F14",
        "F16",
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-dom.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-recipe-summary.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": [
        "F09",
        "F10",
        "F13",
        "F14",
        "F15",
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/login-recon.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion-probe.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/search-recon.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/recipe-recon.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/404-recon.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "Supporting probe or compact evidence summary.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/pwa-probe.json",
      "caption": "Supporting probe or compact evidence summary.",
      "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 evidence from evidence/home-dark.png, evidence/home-platform-probe.json.",
      "evidence": "The dark-condition screenshot is pixel-identical in palette to the light screenshot, and the platform probe found no prefers-color-scheme rule or color-scheme declaration.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Emulated prefers-reduced-motion: reduce and inspected document animations.",
      "evidence": "The preference matched and getAnimations() returned no active animations, so no non-essential motion persisted.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/reduced-motion-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/contrast-probe.json, evidence/lighthouse-home-summary.json.",
      "evidence": "The platform probe found no prefers-contrast or forced-colors rules; Lighthouse also measured text/button contrast as low as 2.13:1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/contrast-probe.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-platform-probe.json.",
      "evidence": "The live CSS probe found no view-transition declarations and no active transition animations on the representative home surface.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected live CSS and runtime animations for scroll-linked effects.",
      "evidence": "No scroll-linked/parallax animation was present, so there was no main-thread scroll-animation anti-pattern to replace.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-mobile.png, evidence/lighthouse-home-summary.json.",
      "evidence": "The mobile screenshot shows an interactive carousel; CSS had no scroll-snap, while Lighthouse measured its pagination controls at only 8–10px.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-dom.json, evidence/home-platform-probe.json.",
      "evidence": "DOM evidence shows a sticky header, but the CSS probe found no scroll-state query, scroll timeline, or progress affordance.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected representative DOM for positioned transient UI.",
      "evidence": "No tooltip, popover, or edge-positioned menu requiring anchor positioning was present in the exercised guest paths.",
      "reason": "No tooltip, popover, or edge-positioned menu requiring anchor positioning was present in the exercised guest paths."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Visually inspected navigation, recipe drill-down, carousel state and 404 recovery.",
      "evidence": "Selected navigation and carousel pagination communicate state; recipe and recovery destinations preserve a clear visual destination.",
      "pathIds": [
        "home",
        "recipe",
        "not-found"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/recipe-desktop.png",
        "evidence/404-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "medium",
      "method": "Captured first-load desktop/mobile states.",
      "evidence": "The consent panel occupies part of the viewport but provides equally visible accept/refuse actions and does not replace the page with a full-screen interstitial.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-desktop.png, evidence/home-platform-probe.json.",
      "evidence": "The loaded page exposes no dialog, popover, or details elements even though the fixed cookie consent panel and mobile navigation are dismissible transient UI.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Visual review of home, search and recipe templates.",
      "evidence": "Content dominates the primary pane; recipe ingredients and steps are presented with minimal framing and no decorative application borders.",
      "pathIds": [
        "home",
        "search",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/search-desktop.png",
        "evidence/recipe-desktop.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Ran layout primitive at 390×844 on home, search, and recipe.",
      "evidence": "All three report scrollWidth=clientWidth=390, viewport meta present, horizontalOverflowPx=0.",
      "pathIds": [
        "home",
        "search",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/search-mobile-layout.json",
        "evidence/recipe-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-mobile.png, evidence/home-desktop.png, evidence/home-platform-probe.json.",
      "evidence": "The representative components visibly rearrange between mobile and desktop, but live CSS inspection found no @container rules or container-type declarations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-desktop.png",
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/lighthouse-home-summary.json, evidence/home-mobile.png.",
      "evidence": "Lighthouse measured four mobile pagination buttons at 8–10px with less than 24px safe clickable space. Keyboard focus itself was visible.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected first viewports and labels across discovery and detail.",
      "evidence": "Home exposes recipe/ingredient search immediately; search identifies Chicken and result count; recipe leads with title, image, ingredients and steps.",
      "pathIds": [
        "home",
        "search",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/search-recon.json",
        "evidence/recipe-desktop.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Completed the guest search-to-result-to-recipe journey using a crawlable search URL and recipe link.",
      "evidence": "The Chicken listing returned 76,210 results and the selected Butter Chicken Curry recipe exposed complete ingredients and eight steps without an account wall.",
      "pathIds": [
        "search",
        "recipe"
      ],
      "artifacts": [
        "evidence/search-recon.json",
        "evidence/recipe-recon.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Loaded an unknown route and inspected recovery controls.",
      "evidence": "The 404 state clearly says the page was not found and offers four current recipe links plus a home link, rather than a blank shell.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/404-recon.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/lighthouse-home-summary.json, evidence/lighthouse-recipe-summary.json, evidence/home-trace-summary.json.",
      "evidence": "Mobile Lighthouse measured home LCP 5.4s and CLS 0.17; recipe LCP 3.6s and CLS 0.16. Both exceed good thresholds.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/lighthouse-home-summary.json, evidence/lighthouse-recipe-summary.json.",
      "evidence": "Lighthouse recorded CLS 0.170 on home and 0.160 on recipe even though the later five-second layout observer saw no additional shifts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Captured trace and Lighthouse TBT; observed long tasks in mobile layouts.",
      "evidence": "Trace reports zero long tasks and 0ms TBT; Lighthouse reports about 20ms TBT on both home and recipe. Search had one isolated 92ms task but no sustained blocking.",
      "pathIds": [
        "home",
        "search",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json",
        "evidence/search-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-summary.json, evidence/home.har.",
      "evidence": "The HAR recorded 930KB across 64 requests; GTM took 1.14s and 186KB, Facebook 108KB, and two Typekit stylesheets were parser-inserted at VeryHigh priority.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-summary.json.",
      "evidence": "Scripts account for 461KB; GTM and Facebook alone transfer about 294KB, while the home page’s main task is simple recipe discovery.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/lighthouse-home-summary.json, evidence/lighthouse-recipe-summary.json.",
      "evidence": "Lighthouse found invalid tablist/tab relationships, unnamed banner links/images on home, an unnamed recipe back button, and aria-hidden content containing a focusable app link.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/lighthouse-home-summary.json, evidence/lighthouse-recipe-summary.json.",
      "evidence": "Lighthouse measured white on Cookpad orange at 2.13:1, orange text on the recipe surface at 2.07:1, and secondary text at 2.88–4.42:1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-platform-probe.json, evidence/lighthouse-recipe-summary.json.",
      "evidence": "Both Lighthouse runs report no main landmark; home contains two H1s, and recipe ingredients are li elements overridden with role=paragraph, invalidating their list.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "medium",
      "method": "Visually inspected body, headings, recipe lists and responsive wrapping.",
      "evidence": "Primary recipe and search text is comfortably sized and wraps without clipping; the separate colour-token failures are recorded under sufficient-contrast.",
      "pathIds": [
        "home",
        "search",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/recipe-desktop.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-mobile-layout.json, evidence/lighthouse-home-summary.json.",
      "evidence": "The 390px layouts had no horizontal overflow, but Lighthouse’s target-size audit found 8–10px pagination buttons with insufficient spacing.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Ran Lighthouse best-practices audits on home and recipe.",
      "evidence": "No console-error or uncaught-exception failure was reported; overall best-practices scores were 1.00 and 0.96.",
      "pathIds": [
        "home",
        "recipe"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-recipe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-images.json, evidence/lighthouse-recipe-summary.json.",
      "evidence": "The image probes found two home images without dimensions, and Lighthouse found a recipe avatar displayed at a distorted 14×16 ratio instead of 1:1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed Lighthouse best-practices failures and live page behaviour.",
      "evidence": "No deprecated API, vulnerable library, paste prevention, source-map, intrusive permission prompt, or BFCache issue was reported on exercised public paths.",
      "pathIds": [
        "home",
        "recipe",
        "auth"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json",
        "evidence/login-recon.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Read title and description on home and recipe.",
      "evidence": "Home and recipe have descriptive unique titles and non-empty meta descriptions matching their visible purpose.",
      "pathIds": [
        "home",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/recipe-recon.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected href links, viewport metadata, robots.txt and no-JS output.",
      "evidence": "Primary navigation/search/recipe links are real hrefs, viewport meta is valid, default robots allows public content, and raw HTML contains the core content.",
      "pathIds": [
        "home",
        "search",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/robots.txt",
        "evidence/home-discoverability.json",
        "evidence/recipe-discoverability.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-platform-probe.json, evidence/lighthouse-home-summary.json, evidence/sitemap-headers.txt.",
      "evidence": "The UK page declares canonical https://cookpad.com/eng, Lighthouse flags it invalid, and https://cookpad.com/sitemap.xml returns HTTP 404. Recipe canonical and metadata are valid.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/sitemap-headers.txt"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Parsed recipe JSON-LD and Open Graph metadata.",
      "evidence": "Recipe exposes schema.org Recipe with instructions plus accurate og:title, description, image, URL and article type.",
      "pathIds": [
        "recipe"
      ],
      "artifacts": [
        "evidence/recipe-recon.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/headers.json.",
      "evidence": "The headers primitive confirms HTTPS, HSTS, nosniff and SAMEORIGIN, but no Content-Security-Policy header.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/trackers.json, evidence/home-summary.json, evidence/home-desktop.png.",
      "evidence": "A fresh guest load requested Google Tag Manager and Facebook tracking code; tracker evidence lists six third-party origins and the HAR attributes about 294KB to GTM/Facebook.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/login-mobile.png, evidence/login-recon.json.",
      "evidence": "The auth surface offers Google, Apple, Facebook, and Email; the inspected markup exposes no WebAuthn/passkey path. No permission prompt fired on load.",
      "pathIds": [
        "auth"
      ],
      "artifacts": [
        "evidence/login-mobile.png",
        "evidence/login-recon.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/headers.json.",
      "evidence": "The headers primitive found HSTS, clickjacking protection and Referrer-Policy, but no Permissions-Policy header.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Compared raw server HTML with rendered DOM and crawler screenshots.",
      "evidence": "Home raw HTML retains 100% of rendered content tokens and recipe retains 78%, including title, H1 and description; neither is a JS shell.",
      "pathIds": [
        "home",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/recipe-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected mobile/desktop overlays and exercised long listings.",
      "evidence": "Consent, navigation, recipe actions and long lists remained within viewport bounds; no clipped overlay or blank runtime state appeared.",
      "pathIds": [
        "home",
        "search",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/recipe-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected web manifest and service-worker registration.",
      "evidence": "Cookpad presents the web surface as a content site and explicitly prefers related native applications; the manifest exists but no service worker is registered, so offline web-app installability was judged out of scope.",
      "reason": "Cookpad presents the web surface as a content site and explicitly prefers related native applications; the manifest exists but no service worker is registered, so offline web-app installability was judged out of scope.",
      "artifacts": [
        "evidence/pwa-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Requested a representative 404 route.",
      "evidence": "The server returns a branded explanatory state with useful recipe recovery links.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/404-recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected document locale/direction and localized community surfaces.",
      "evidence": "Home uses lang=en-GB dir=ltr, recipe uses lang=en dir=ltr, and the site exposes many language/region variants including RTL locales.",
      "pathIds": [
        "home",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/recipe-recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected localized date and regional content rendering.",
      "evidence": "Recipe renders “19 July 2026” from a machine-readable UTC datetime through a localtime controller; UK locale and region-specific copy are consistent.",
      "pathIds": [
        "recipe"
      ],
      "artifacts": [
        "evidence/recipe-recon.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected machine-readable time representation.",
      "evidence": "Published time is stored unambiguously as 2026-07-19T21:36:29Z and rendered locally, avoiding ambiguous local-only storage.",
      "pathIds": [
        "recipe"
      ],
      "artifacts": [
        "evidence/lighthouse-recipe-summary.json",
        "evidence/recipe-recon.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed consent, premium entry, auth choices and visible pricing labels.",
      "evidence": "Consent provides accept and refuse with equal prominence; auth offers multiple routes; observed premium labels show the monthly price rather than disguising commitment.",
      "pathIds": [
        "home",
        "auth",
        "premium",
        "recipe"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/login-mobile.png",
        "evidence/lighthouse-recipe-summary.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected guest-accessible forms.",
      "evidence": "The covered guest flow contains search, federated auth launchers, and navigation but no validation-bearing data-entry form where required-field/error timing could be exercised.",
      "reason": "The covered guest flow contains search, federated auth launchers, and navigation but no validation-bearing data-entry form where required-field/error timing could be exercised.",
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/login-recon.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected guest-accessible form controls.",
      "evidence": "No address, payment, password, or profile form is exposed before choosing a third-party/email auth route; the only text field is free-form recipe search, so transactional autofill tokens do not apply.",
      "reason": "No address, payment, password, or profile form is exposed before choosing a third-party/email auth route; the only text field is free-form recipe search, so transactional autofill tokens do not apply.",
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/login-recon.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed guest premium and auth entry points without initiating a transaction.",
      "evidence": "Visible recipe upsell labels state £2.90/month, premium is clearly identified, and unauthenticated users are routed through explicit sign-up/login choices before any account transaction. Post-auth cancellation was excluded.",
      "pathIds": [
        "recipe",
        "premium",
        "auth"
      ],
      "artifacts": [
        "evidence/lighthouse-recipe-summary.json",
        "evidence/premium-desktop.png",
        "evidence/login-mobile.png"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-images.json, evidence/recipe-images.json.",
      "evidence": "Home has 17 images without srcset and 24 legacy-format images; recipe has 39 without srcset and 86 legacy-format images, plus the hero fetched at 300px but displayed as wide as 780px in the probe.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/recipe-images.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed HAR activity and trace after load.",
      "evidence": "No sustained long tasks, autoplay media, or chatty background fetch loop was observed; only two aborted first-party activity-log requests appeared.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from evidence/home-summary.json, evidence/trackers.json.",
      "evidence": "GTM (186KB) and Facebook (108KB) are the first and third largest transferred resources; all third-party origins account for 910KB under the harness’s origin classification.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected robots policy, structured data and agent-facing feature signals.",
      "evidence": "Cookpad intentionally disallows major AI agents in robots.txt and exposes no declared agent-tool surface; this emerging capability is therefore judged intentionally out of scope rather than penalised.",
      "reason": "Cookpad intentionally disallows major AI agents in robots.txt and exposes no declared agent-tool surface; this emerging capability is therefore judged intentionally out of scope rather than penalised.",
      "artifacts": [
        "evidence/robots.txt",
        "evidence/recipe-recon.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected public UI and scripts for an inference feature.",
      "evidence": "No summarisation, generation, or other user-facing inference task is offered on the audited guest surfaces, so built-in on-device AI is not applicable.",
      "reason": "No summarisation, generation, or other user-facing inference task is offered on the audited guest surfaces, so built-in on-device AI is not applicable.",
      "artifacts": [
        "evidence/home-platform-probe.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "issues",
      "confidence": "medium",
      "method": "Direct evidence from evidence/heap-baseline.json, evidence/heap-after-one-scroll.json, evidence/heap-post-scroll.json.",
      "evidence": "Heap summaries rose from 24.9MB/425k nodes at baseline to 35.8MB/610k after one bottom traversal and 51.0MB/882k after ten. Growth is consistent with retained loaded results; it may be intentional rather than a detached-node leak, but remains unbounded for a long session.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-after-one-scroll.json",
        "evidence/heap-post-scroll.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Captured a baseline heap summary on the search listing.",
      "evidence": "Baseline retained self-size was 24.9MB with 425k nodes, proportionate to an image-rich server-rendered results page; repeated-growth risk is separately reported.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/heap-baseline.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "low",
      "method": "Compared heap constructor summaries after repeated traversal.",
      "evidence": "No Detached* constructor appeared among reported dominant constructors. The primitive could not enumerate all listeners, so confidence is low; observed growth aligns with retained result content rather than proven detached DOM.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-scroll.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03",
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F14",
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F19",
        "F20",
        "F21",
        "F22"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F23",
        "F24"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "Cookpad intentionally disallows major AI agents in robots.txt and exposes no declared agent-tool surface; this emerging capability is therefore judged intentionally out of scope rather than penalised. No summarisation, generation, or other user-facing inference task is offered on the audited guest surfaces, so built-in on-device AI is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F25"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Localized UK home and discovery surface: navigation, search entry, banners, trends, consent, desktop/mobile and preference conditions.",
      "url": "https://cookpad.com/uk",
      "conditions": [
        "desktop 1440x1000",
        "mobile 390x844",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "prefers-contrast: more",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Primary recipe-discovery journey and listing template, using the Chicken results page; includes repeated infinite-scroll interaction.",
      "url": "https://cookpad.com/eng/search/chicken",
      "conditions": [
        "desktop",
        "mobile 390x844",
        "10 repeated bottom/top scroll cycles"
      ],
      "result": "issues"
    },
    {
      "id": "recipe",
      "description": "Representative recipe detail and core content-consumption task, including metadata, mobile layout and no-JavaScript crawler view.",
      "url": "https://cookpad.com/eng/recipes/26340299",
      "conditions": [
        "desktop",
        "mobile 390x844",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "auth",
      "description": "Guest sign-up/login entry surface, representing authentication choices. Third-party identity-provider completion was excluded because it leaves Cookpad and requires credentials.",
      "url": "https://cookpad.com/uk/login",
      "conditions": [
        "mobile 390x844",
        "guest"
      ],
      "result": "issues"
    },
    {
      "id": "premium",
      "description": "Premium/listing surface and visible subscription entry points. Post-auth purchase/account cancellation was excluded because credentials and a transaction would be required.",
      "url": "https://cookpad.com/uk/premium",
      "conditions": [
        "desktop",
        "guest"
      ],
      "result": "pass"
    },
    {
      "id": "not-found",
      "description": "Representative HTTP failure/recovery state on an unknown route.",
      "url": "https://cookpad.com/uk/this-route-does-not-exist-audit",
      "conditions": [
        "mobile 390x844"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site does not honour the user’s dark colour-scheme preference.",
      "evidence": "The dark-condition screenshot is pixel-identical in palette to the light screenshot, and the platform probe found no prefers-color-scheme rule or color-scheme declaration.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Declare color-scheme and provide preference-driven dark surface/text tokens with prefers-color-scheme or light-dark().",
      "effort": "medium"
    },
    {
      "id": "F02",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "There is no explicit high-contrast or forced-colours adaptation.",
      "evidence": "The platform probe found no prefers-contrast or forced-colors rules; Lighthouse also measured text/button contrast as low as 2.13:1.",
      "artifacts": [
        "evidence/contrast-probe.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "suggestedFix": "Add forced-colors and prefers-contrast adaptations, preserve native control colours, and strengthen low-contrast tokens.",
      "effort": "medium"
    },
    {
      "id": "F03",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Route and state changes do not use View Transitions.",
      "evidence": "The live CSS probe found no view-transition declarations and no active transition animations on the representative home surface.",
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Use same-document and cross-document View Transitions for route/detail changes, with reduced-motion fallbacks.",
      "effort": "medium"
    },
    {
      "id": "F04",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "physical-gestures",
      "guidanceId": "carousel-slide-effects",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "The banner carousel uses small custom pagination rather than a platform-aligned, touch-friendly scrolling interaction.",
      "evidence": "The mobile screenshot shows an interactive carousel; CSS had no scroll-snap, while Lighthouse measured its pagination controls at only 8–10px.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/lighthouse-home-summary.json"
      ],
      "suggestedFix": "Use a scroll-snap carousel with adequately sized controls and native scrolling behaviour.",
      "effort": "medium"
    },
    {
      "id": "F05",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Sticky navigation does not adapt to scroll state.",
      "evidence": "DOM evidence shows a sticky header, but the CSS probe found no scroll-state query, scroll timeline, or progress affordance.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Use scroll-state container queries or a lightweight declarative progress/shrinking treatment where the long listing and recipe pages benefit.",
      "effort": "medium"
    },
    {
      "id": "F06",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Transient consent and navigation UI use custom containers rather than modern semantic overlay primitives.",
      "evidence": "The loaded page exposes no dialog, popover, or details elements even though the fixed cookie consent panel and mobile navigation are dismissible transient UI.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Use dialog/popover semantics and declarative light-dismiss where appropriate, retaining explicit accept/refuse actions.",
      "effort": "medium"
    },
    {
      "id": "F07",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Responsive components rely on viewport styling only.",
      "evidence": "The representative components visibly rearrange between mobile and desktop, but live CSS inspection found no @container rules or container-type declarations.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-desktop.png",
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Introduce container queries for reusable recipe cards, sidebars, and action groups that appear in differently sized parents.",
      "effort": "medium"
    },
    {
      "id": "F08",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Carousel controls are too small for reliable touch input.",
      "evidence": "Lighthouse measured four mobile pagination buttons at 8–10px with less than 24px safe clickable space. Keyboard focus itself was visible.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Keep the visual dots small if desired, but expand each interactive hit area to at least 24px and preferably 44px.",
      "effort": "medium"
    },
    {
      "id": "F09",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Lab Core Web Vitals are outside the good range on key templates.",
      "evidence": "Mobile Lighthouse measured home LCP 5.4s and CLS 0.17; recipe LCP 3.6s and CLS 0.16. Both exceed good thresholds.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Prioritise the LCP element, shorten dependency chains, and reserve stable space for late content.",
      "effort": "medium"
    },
    {
      "id": "F10",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "visually-stable-font-fallbacks",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "Both home and recipe templates shift materially during load.",
      "evidence": "Lighthouse recorded CLS 0.170 on home and 0.160 on recipe even though the later five-second layout observer saw no additional shifts.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "suggestedFix": "Reserve dimensions for all initial media/chrome and diagnose Lighthouse layout-shift elements before hydration or font swaps.",
      "effort": "medium"
    },
    {
      "id": "F11",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party scripts and render-blocking font styles delay critical delivery.",
      "evidence": "The HAR recorded 930KB across 64 requests; GTM took 1.14s and 186KB, Facebook 108KB, and two Typekit stylesheets were parser-inserted at VeryHigh priority.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Self-host/subset fonts, minimise blocking styles, and delay analytics until consent or idle where business requirements allow.",
      "effort": "medium"
    },
    {
      "id": "F12",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party JavaScript dominates a substantial share of the home load.",
      "evidence": "Scripts account for 461KB; GTM and Facebook alone transfer about 294KB, while the home page’s main task is simple recipe discovery.",
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Audit tag usage, remove duplicate/unneeded tags, and conditionally load analytics only when needed.",
      "effort": "medium"
    },
    {
      "id": "F13",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Core navigation and recipe controls have invalid or missing accessible semantics.",
      "evidence": "Lighthouse found invalid tablist/tab relationships, unnamed banner links/images on home, an unnamed recipe back button, and aria-hidden content containing a focusable app link.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "suggestedFix": "Use native list/navigation semantics, provide names for icon controls and linked images, and remove hidden descendants from the tab order.",
      "effort": "medium"
    },
    {
      "id": "F14",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Text and primary action colours fail WCAG contrast.",
      "evidence": "Lighthouse measured white on Cookpad orange at 2.13:1, orange text on the recipe surface at 2.07:1, and secondary text at 2.88–4.42:1.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "suggestedFix": "Darken the orange/secondary tokens or change foreground colours until normal text reaches at least 4.5:1 and essential UI reaches 3:1.",
      "effort": "medium"
    },
    {
      "id": "F15",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Page landmarks, headings, and list semantics are not logically structured.",
      "evidence": "Both Lighthouse runs report no main landmark; home contains two H1s, and recipe ingredients are li elements overridden with role=paragraph, invalidating their list.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "suggestedFix": "Add one main landmark, one page-level H1 per template, and retain native list semantics for ingredients/navigation.",
      "effort": "medium"
    },
    {
      "id": "F16",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Small carousel targets weaken reflowed/touch use.",
      "evidence": "The 390px layouts had no horizontal overflow, but Lighthouse’s target-size audit found 8–10px pagination buttons with insufficient spacing.",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "suggestedFix": "Enlarge target hit areas without changing the compact visual marker and verify at 200% zoom.",
      "effort": "medium"
    },
    {
      "id": "F17",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "Some image assets are incorrectly sized or lack intrinsic dimensions.",
      "evidence": "The image probes found two home images without dimensions, and Lighthouse found a recipe avatar displayed at a distorted 14×16 ratio instead of 1:1.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-recipe-summary.json"
      ],
      "suggestedFix": "Set correct width/height or aspect-ratio on every image and avoid stretching avatars.",
      "effort": "medium"
    },
    {
      "id": "F18",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "The localized home has inconsistent canonical/sitemap signals.",
      "evidence": "The UK page declares canonical https://cookpad.com/eng, Lighthouse flags it invalid, and https://cookpad.com/sitemap.xml returns HTTP 404. Recipe canonical and metadata are valid.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/sitemap-headers.txt"
      ],
      "suggestedFix": "Give each indexable locale a valid self/cluster canonical strategy, publish sitemap indexes, and reference them from robots.txt.",
      "effort": "medium"
    },
    {
      "id": "F19",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "medium",
      "confidence": "high",
      "summary": "The main document is served without Content-Security-Policy.",
      "evidence": "The headers primitive confirms HTTPS, HSTS, nosniff and SAMEORIGIN, but no Content-Security-Policy header.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Deploy a nonce/hash-based CSP, beginning in report-only mode, then enforce it without unsafe-inline/unsafe-eval.",
      "effort": "medium"
    },
    {
      "id": "F20",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "severity": "medium",
      "confidence": "high",
      "summary": "Tracking code loads before the user chooses a cookie preference.",
      "evidence": "A fresh guest load requested Google Tag Manager and Facebook tracking code; tracker evidence lists six third-party origins and the HAR attributes about 294KB to GTM/Facebook.",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Gate non-essential analytics behind refusal-aware consent and minimise/batch events.",
      "effort": "medium"
    },
    {
      "id": "F21",
      "pathId": "auth",
      "url": "https://cookpad.com/uk/login",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "passkeys",
      "severity": "low",
      "confidence": "high",
      "summary": "Guest authentication offers federated identity or email, but no passkey option.",
      "evidence": "The auth surface offers Google, Apple, Facebook, and Email; the inspected markup exposes no WebAuthn/passkey path. No permission prompt fired on load.",
      "artifacts": [
        "evidence/login-mobile.png",
        "evidence/login-recon.json"
      ],
      "suggestedFix": "Add discoverable passkey registration/authentication and conditional UI alongside existing recovery methods.",
      "effort": "medium"
    },
    {
      "id": "F22",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "low",
      "confidence": "high",
      "summary": "Permissions-Policy is absent.",
      "evidence": "The headers primitive found HSTS, clickjacking protection and Referrer-Policy, but no Permissions-Policy header.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Send a restrictive Permissions-Policy allowing only capabilities required by Cookpad and trusted origins.",
      "effort": "medium"
    },
    {
      "id": "F23",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image delivery is not consistently responsive or format-efficient.",
      "evidence": "Home has 17 images without srcset and 24 legacy-format images; recipe has 39 without srcset and 86 legacy-format images, plus the hero fetched at 300px but displayed as wide as 780px in the probe.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/recipe-images.json"
      ],
      "suggestedFix": "Serve AVIF/WebP picture sources with width-based srcset/sizes and match intrinsic resolution to rendered size.",
      "effort": "medium"
    },
    {
      "id": "F24",
      "pathId": "home",
      "url": "https://cookpad.com/uk",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Analytics and social tracking consume disproportionate bytes on a simple discovery page.",
      "evidence": "GTM (186KB) and Facebook (108KB) are the first and third largest transferred resources; all third-party origins account for 910KB under the harness’s origin classification.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Set a third-party byte budget, defer tags until consent/idle, and remove tags that do not produce actionable value.",
      "effort": "medium"
    },
    {
      "id": "F25",
      "pathId": "search",
      "url": "https://cookpad.com/eng/search/chicken",
      "principleId": "be-memory-efficient",
      "principleCheckId": "no-leak-under-repeated-interaction",
      "guidanceId": "defer-rendering-heavy-content",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "medium",
      "summary": "Repeated infinite-scroll traversal grows retained heap substantially without evidence of release.",
      "evidence": "Heap summaries rose from 24.9MB/425k nodes at baseline to 35.8MB/610k after one bottom traversal and 51.0MB/882k after ten. Growth is consistent with retained loaded results; it may be intentional rather than a detached-node leak, but remains unbounded for a long session.",
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-after-one-scroll.json",
        "evidence/heap-post-scroll.json"
      ],
      "suggestedFix": "Virtualise or prune off-screen result cards and bound caches; repeat the same cycle in one session with allocation/retainer analysis to verify release.",
      "effort": "large"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Repair semantic structure, accessible names, contrast, focus visibility, and touch target sizing",
      "priority": 1,
      "findingIds": [
        "F08",
        "F13",
        "F14",
        "F15",
        "F16"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Improve LCP and eliminate initial layout shifts on home and recipe templates",
      "priority": 2,
      "findingIds": [
        "F09",
        "F10",
        "F11"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Bound infinite-list DOM and retained-memory growth with virtualization or pruning",
      "priority": 3,
      "findingIds": [
        "F25"
      ],
      "guidanceId": "defer-rendering-heavy-content",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Gate and reduce analytics/social tags; establish third-party budgets",
      "priority": 4,
      "findingIds": [
        "F12",
        "F20",
        "F24"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Add responsive image sources, modern formats, intrinsic sizing, and correct aspect ratios",
      "priority": 5,
      "findingIds": [
        "F17",
        "F23"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Add CSP and Permissions-Policy, then introduce passkey authentication",
      "priority": 6,
      "findingIds": [
        "F19",
        "F21",
        "F22"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Implement preference-driven dark/high-contrast themes",
      "priority": 7,
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Correct localized canonical and sitemap signals",
      "priority": 8,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Modernise carousel/navigation motion, touch interaction, and scroll-state feedback",
      "priority": 9,
      "findingIds": [
        "F03",
        "F04",
        "F05"
      ],
      "guidanceId": "carousel-slide-effects",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Adopt semantic transient UI and component container queries",
      "priority": 10,
      "findingIds": [
        "F06",
        "F07"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T20-26-26-773Z"
}
