{"catalog":{"checkCountPerSite":58,"principleCountPerSite":17,"principles":[{"checkCount":3,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences"},{"checkCount":3,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions"},{"checkCount":3,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation"},{"checkCount":3,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise"},{"checkCount":3,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor"},{"checkCount":3,"principleId":"support-core-task-success","principleTitle":"Support core task success"},{"checkCount":5,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable"},{"checkCount":5,"principleId":"be-inclusive","principleTitle":"Be inclusive"},{"checkCount":3,"principleId":"follow-best-practices","principleTitle":"Follow best practices"},{"checkCount":4,"principleId":"be-discoverable","principleTitle":"Be discoverable"},{"checkCount":4,"principleId":"be-private-and-secure","principleTitle":"Be private and secure"},{"checkCount":4,"principleId":"be-resilient","principleTitle":"Be resilient"},{"checkCount":3,"principleId":"be-internationalised","principleTitle":"Be internationalised"},{"checkCount":4,"principleId":"be-trustworthy","principleTitle":"Be trustworthy"},{"checkCount":3,"principleId":"be-sustainable","principleTitle":"Be sustainable"},{"checkCount":2,"principleId":"be-agent-ready","principleTitle":"Be agent ready"},{"checkCount":3,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient"}],"siteCount":10,"totalSlots":580},"datasetId":"web-uplift-fixed10-operational-pilot-2026-08-01","schemaVersion":1,"sites":[{"disposition":"error","methodInvalid":false,"ordinal":1,"origin":"https://github.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":null,"detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":null,"detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":null,"detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":null,"detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":null,"detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":null,"detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":null,"detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["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","scroll-state query scrolled sticky header"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":null,"detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":null,"detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":null,"detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":null,"detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":null,"detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["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","reduce visual clutter maximize content"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":null,"detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":null,"detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":null,"detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":null,"detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":null,"detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":null,"detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":null,"detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":null,"detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":null,"detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":null,"detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":null,"detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":null,"detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":null,"detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":null,"detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":null,"detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":null,"detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":null,"detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":null,"detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":null,"detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":null,"detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["page title meta description seo"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":null,"detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":null,"detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":null,"detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":null,"detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["security","https csp secure cookies content security policy"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":null,"detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":null,"detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":null,"detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":null,"detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":null,"detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":null,"detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":null,"detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":null,"detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":null,"detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":null,"detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":null,"detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":null,"detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":null,"detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":null,"detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":null,"detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":null,"detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":null,"detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":null,"detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":null,"detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":null,"detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":null,"detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":null,"detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"The authoritative ledger records missing-report. Permit expiry is not claimed: the retained timestamps place the start before expiry.","sourceStatus":"missing-report"}],"reportState":"missing-report"},{"disposition":"error","methodInvalid":false,"ordinal":2,"origin":"https://web.facebook.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":null,"detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":null,"detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":null,"detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":null,"detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":null,"detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":null,"detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":null,"detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["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","scroll-state query scrolled sticky header"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":null,"detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":null,"detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":null,"detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":null,"detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":null,"detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["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","reduce visual clutter maximize content"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":null,"detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":null,"detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":null,"detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":null,"detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":null,"detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":null,"detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":null,"detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":null,"detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":null,"detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":null,"detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":null,"detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":null,"detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":null,"detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":null,"detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":null,"detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":null,"detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":null,"detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":null,"detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":null,"detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":null,"detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["page title meta description seo"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":null,"detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":null,"detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":null,"detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":null,"detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["security","https csp secure cookies content security policy"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":null,"detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":null,"detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":null,"detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":null,"detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":null,"detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":null,"detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":null,"detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":null,"detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":null,"detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":null,"detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":null,"detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":null,"detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":null,"detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":null,"detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":null,"detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":null,"detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":null,"detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":null,"detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":null,"detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":null,"detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":null,"detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":null,"detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"unavailable","evidence":{"availability":"unavailable","summary":"No atomic report or check-specific evidence was produced for this site-check slot.","types":[]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"No check-specific method was executed because the site report is unavailable.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"The authoritative ledger records runner-error. The runner invalidated completed journey states that crossed away from the reviewed origin.","sourceStatus":"runner-error"}],"reportState":"runner-error"},{"disposition":"runner-completed","methodInvalid":true,"ordinal":3,"origin":"https://www.google.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":"high","detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page rendered a light surface under prefers-color-scheme: light and a dark surface under dark, with legible consent UI in both.","types":["screenshot"]},"findings":[],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"Compared permit-bound light and dark screenshots.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":"high","detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The media query matched and [host/path omitted]() returned zero active animations.","types":["other-private-evidence"]},"findings":[],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"Permit-bound evaluate probe under prefers-reduced-motion: reduce.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":"medium","detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Essential consent text, links, outline borders, language, and sign-in controls remained visible in forced colors.","types":["other-private-evidence"]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"Permit-bound forced-colors and prefers-contrast screenshot review.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":"medium","detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No same-document or route state change was safely exercised on this single search entry surface.","types":[]},"findings":[],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"Reviewed the static entry and journey states.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"No applicable state or route transition was present in the bounded audited path.","sourceStatus":"not-applicable"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":"high","detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The entry document had no scrollable desktop surface and no scroll-linked animation.","types":["layout-summary","other-private-evidence"]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"Layout, reduced-motion probe, and journey state review.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"There is no scroll-linked visual effect on this surface.","sourceStatus":"not-applicable"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":"medium","detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page relies on native scrolling and native form controls; no custom gesture surface or pointer-driven replacement was observed.","types":["memory-summary","page-probe-summary"]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"Reviewed DOM, layout, and bounded repeated native scrolling.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":null,"sourceStatus":"pass"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":"high","detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The desktop entry state has no meaningful scrolling chrome; the planned bounded scroll was skipped after the journey network mutation blocker.","types":["journey-summary","layout-summary"]},"findings":[],"guides":["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","scroll-state query scrolled sticky header"],"method":"Journey and layout review.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"No sticky or affixed chrome needs to react on this bounded single-screen path.","sourceStatus":"not-applicable"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":"medium","detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No tooltip or popover was open or required on the audited state; the consent surface is modal.","types":["page-probe-summary"]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"DOM review for popovers and anchored transient UI.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"No anchored transient overlay was present on the audited state.","sourceStatus":"not-applicable"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":"medium","detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The centered Google mark, search field, and consent heading establish a clear reading order and visible current state.","types":["screenshot"]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"Visual hierarchy review of desktop, mobile, and journey baseline screenshots.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"pass"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":"high","detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"A consent wall obscures the search task on load; at 780x493 its action controls are below the visible viewport.","types":["screenshot"]},"findings":[{"findingId":"site-03-finding-01","severity":"high","summary":"The first-load consent wall obscures the core search task and its actions fall below a short desktop viewport."}],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"First-load screenshot review at the journey viewport.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":"high","detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The consent surface is exposed as a dialog and the DOM contains a dialog element rather than only an unstructured overlay div.","types":["page-probe-summary"]},"findings":[],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"DOM and role inspection.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":"high","detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Outside the required consent decision, the search page is visually sparse and gives the central task most of the viewport.","types":["screenshot"]},"findings":[],"guides":["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","reduce visual clutter maximize content"],"method":"Desktop and mobile screenshot review.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":"high","detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The response has no viewport meta tag; Chrome laid it out at 980 CSS px and scaled it to [host/path omitted] on the 360px device viewport.","types":["layout-summary","screenshot"]},"findings":[{"findingId":"site-03-finding-02","severity":"high","summary":"The page omits viewport metadata and scales a 980px layout down on mobile."}],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"Permit-bound 360x800 layout metrics and screenshot.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":"medium","detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No reused component was observed in multiple container contexts; the page uses a single search layout.","types":["page-probe-summary"]},"findings":[],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"CSS feature probe and component inventory review.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"The audited page has no evidenced multi-container reuse case requiring component-level adaptation.","sourceStatus":"not-applicable"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":"high","detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Focused links and controls reported outline-style none and :focus-visible false; several text links were only 24 to 26 CSS px tall.","types":["page-probe-summary"]},"findings":[{"findingId":"site-03-finding-03","severity":"high","summary":"Keyboard focus is not visibly exposed on sampled controls."}],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"Programmatically focused the first 20 focusable controls and inspected outlines and target rectangles.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":"high","detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The Google brand, labelled Search combobox, and clearly named search actions communicate the page purpose.","types":["page-probe-summary","screenshot"]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"First viewport and semantic form review.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":"high","detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The representative path did not reach search: the baseline action was marked mutation-blocked after POST telemetry and the bounded scroll was skipped; the consent wall also obscured search controls.","types":["journey-summary","screenshot"]},"findings":[{"findingId":"site-03-finding-01","severity":"high","summary":"The first-load consent wall obscures the core search task and its actions fall below a short desktop viewport."}],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"Reviewed the already-replayed strict journey and baseline screenshot.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"issues"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":"medium","detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page explains the consent state and offers Reject all, Accept all, More options, privacy, and terms paths; the journey ledger explicitly records its blocker.","types":["journey-summary","screenshot"]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"Consent state and journey ledger review.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":"high","detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"LCP was [host/path omitted] ms, CLS was 0, and total blocking time was [host/path omitted] ms; no INP sample was produced because policy prohibited form submission.","types":["layout-summary","performance-summary"]},"findings":[],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"Permit-bound trace and layout observers.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":"high","detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The layout primitive recorded CLS 0 with no shift entries.","types":["layout-summary"]},"findings":[],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"Layout shift observer during page load.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":"high","detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The trace recorded one [host/path omitted] ms long task and only [host/path omitted] ms total blocking time.","types":["performance-summary"]},"findings":[],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"Permit-bound performance trace.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":"high","detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The simple entry transferred 816,024 bytes across 43 requests; 715,201 bytes were script and parser-inserted stylesheets appeared as render-blocking candidates.","types":["network-summary","page-probe-summary"]},"findings":[{"findingId":"site-03-finding-04","severity":"medium","summary":"Resource delivery is heavy for the entry task and includes parser-inserted blocking styles."}],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"HAR summary plus rendered DOM review.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":"medium","detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Eight scripts transferred 715,201 bytes for a roughly 502-node search entry. The payload is disproportionate, although this run did not collect code coverage to isolate exact unused ranges.","types":["network-summary","page-probe-summary"]},"findings":[{"findingId":"site-03-finding-05","severity":"medium","summary":"JavaScript payload is disproportionate to the initial search surface."}],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"HAR resource-type and page-complexity comparison.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":"medium","detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The primary search textarea is labelled Search with role combobox, the form has role search, visible submit controls are named, and the visible Google SVG is exposed as an image.","types":["page-probe-summary"]},"findings":[],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"DOM accessibility semantics and visible control review.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":"medium","detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Primary and consent text remained legible against dark surfaces, and essential UI survived forced colors.","types":["other-private-evidence","screenshot"]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"Normal dark and forced-colors screenshot review.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":"high","detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"A logical H1 and search landmark exist, but the focus probe found no visible outline or :focus-visible match on the sampled keyboard-reachable links and controls.","types":["page-probe-summary"]},"findings":[{"findingId":"site-03-finding-03","severity":"high","summary":"Keyboard focus is not visibly exposed on sampled controls."}],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"Heading, landmark, and programmatic focus inspection.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":"high","detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Search and consent copy uses readable line lengths and spacing; no text clipping was visible inside the mobile full-page capture.","types":["other-private-evidence","screenshot"]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"Desktop, mobile, and contrast screenshot review.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":"high","detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Without viewport metadata, the page renders a 980px layout scaled down to 360px, making text and controls unusually small instead of reflowing at device width.","types":["layout-summary","screenshot"]},"findings":[{"findingId":"site-03-finding-02","severity":"high","summary":"The page omits viewport metadata and scales a 980px layout down on mobile."}],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"Narrow viewport layout and screenshot review.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":"low","detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The independent loads completed without an uncaught-exception signal in CLI output; the earlier journey console collector itself was unavailable, so confidence is low.","types":["journey-summary","performance-summary"]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"Observed permit-bound Chrome CLI load, trace completion, and journey event ledger.","methodInvalid":true,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"pass"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":"medium","detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The document has an HTML doctype and UTF-8 charset; visible SVG imagery retained its aspect ratio and the layout recorded CLS 0. Empty image placeholders reported by the image scanner were not visible content.","types":["image-summary","layout-summary","page-probe-summary"]},"findings":[],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"DOM, document metadata, image, and layout inspection.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"pass"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":"low","detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"No geolocation or notification prompt appeared on load, paste prevention was not observed, and the page remained functional in the raw no-JavaScript crawler view.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"DOM and runtime surface review.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"pass"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":"high","detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The page title is Google, but meta[name=description] is absent.","types":["page-probe-summary"]},"findings":[{"findingId":"site-03-finding-06","severity":"medium","summary":"The public homepage has no meta description."}],"guides":["page title meta description seo"],"method":"DOM metadata probe.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":"high","detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Most navigation links have real href values, but the viewport meta tag is absent and one More options anchor lacks href.","types":["layout-summary","page-probe-summary"]},"findings":[{"findingId":"site-03-finding-07","severity":"high","summary":"Missing viewport metadata undermines mobile crawlability and presentation."}],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"DOM links, raw HTML comparison, and mobile layout inspection.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":"medium","detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The raw document returned HTTP 200, no accidental noindex signal was present, and the canonical homepage URL remained on the reviewed origin.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"Discoverability fetch and metadata inspection.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":"high","detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The entry is a utility search form, not an article, product, event, or other rich entity needing share cards or JSON-LD.","types":["page-probe-summary"]},"findings":[],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"Entity and metadata review.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"The generic search entry does not represent a rich content entity.","sourceStatus":"not-applicable"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":"high","detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 2 of 6 baseline security-header categories present. Cookie-attribute review records 2 of 2 records with Secure and 2 with HttpOnly. Names, values, routes, and raw headers remain private.","types":["cookie-attribute-summary","security-header-summary"]},"findings":[{"findingId":"site-03-finding-08","severity":"high","summary":"The main document omits several baseline transport and content defenses."}],"guides":["security","https csp secure cookies content security policy"],"method":"Reviewed transport state, baseline security-header presence, and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":"high","detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 1 first-party origin categories and 4 third-party origin categories across 43 requests. Destinations, identifiers, routes, headers, and bodies remain private.","types":["cookie-attribute-summary","network-summary","screenshot","tracker-summary"]},"findings":[{"findingId":"site-03-finding-09","severity":"medium","summary":"The initial page has a material third-party and long-lived identifier footprint."}],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"Reviewed categorical request-origin and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":"medium","detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No browser permission prompt appeared. Authentication is only a cross-origin Sign in link and was outside the permitted journey.","types":["page-probe-summary","screenshot"]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"Initial-load prompt and auth-surface review.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The bounded audited path does not contain an authentication flow to assess passkeys or WebAuthn.","sourceStatus":"not-applicable"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":"high","detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 2 of 6 baseline browser-policy header categories present. Values and raw headers remain private.","types":["security-header-summary"]},"findings":[{"findingId":"site-03-finding-10","severity":"high","summary":"Defensive browser policy coverage is incomplete."}],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"Reviewed baseline browser-policy header presence from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":"high","detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"With JavaScript disabled, the Google mark, search field, search buttons, navigation, and footer remain rendered and usable; the raw response was not a JS shell.","types":["discoverability-summary"]},"findings":[],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"Permit-bound discoverability raw fetch and crawler screenshot.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":"high","detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"At 780x493 the consent dialog extends below the viewport and its decision controls are not initially visible, so the mandatory overlay is cut off in a common short viewport.","types":["screenshot"]},"findings":[{"findingId":"site-03-finding-11","severity":"high","summary":"The consent dialog is cut off in a short viewport."}],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"Journey viewport screenshot and dialog rectangle review.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"issues"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":"high","detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No manifest or active service-worker registration exists. Search results intrinsically require a live network.","types":["page-probe-summary"]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"Manifest and service-worker registration probe.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"This live search portal is intrinsically online; installability and offline result retrieval are not reasonable requirements.","sourceStatus":"not-applicable"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":"medium","detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The audited entry is a network-dependent search portal and the strict journey did not permit simulated failing submissions.","types":["journey-summary"]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"Site purpose and bounded policy review.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Search result retrieval is intrinsically online and no safe failure-producing action was permitted in this run.","sourceStatus":"not-applicable"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":"high","detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The document declares lang=en-GB and stylesheet inspection found logical inline properties.","types":["page-probe-summary"]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"DOM and stylesheet feature probe.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":"high","detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The bounded entry state displays no dates, numbers, currencies, durations, or calendar data.","types":["page-probe-summary"]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"Rendered content and control inventory review.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"No locale-sensitive data is rendered on this path.","sourceStatus":"not-applicable"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":"high","detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The page renders no events or time values requiring time-zone or DST handling.","types":["page-probe-summary"]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"Rendered content and platform probe.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"No time concepts are present on this path.","sourceStatus":"not-applicable"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":"medium","detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The mandatory consent interstitial blocks the core search task on first load and describes measurement and personalised advertising before the user can proceed, although Reject all and Accept all are given equal visual weight on the full mobile capture.","types":["screenshot"]},"findings":[{"findingId":"site-03-finding-12","severity":"medium","summary":"A mandatory consent interstitial delays the primary task."}],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"Consent wall visual and copy review.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"issues"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":"high","detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The search field is not required and no validation or error state exists on the untouched entry path.","types":["page-probe-summary"]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"Form requirements inspection.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"No user-error validation state applies to the optional search field before submission.","sourceStatus":"not-applicable"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":"medium","detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The primary control is a labelled search combobox named q with native form submission; no paste prevention or obstructive formatting was observed.","types":["page-probe-summary"]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"Search control semantics inspection.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":"medium","detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Reject all and Accept all are both present with equal visual treatment, More options is available, and privacy and terms links are visible.","types":["screenshot"]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"Consent choice visual review.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":"high","detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The seven image requests transferred only 972 bytes; the visible product mark is SVG and no oversized image was reported.","types":["image-summary","network-summary"]},"findings":[],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"Image and HAR resource review.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"pass"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":"medium","detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"A roughly 502-node search entry transfers 715,201 bytes of JavaScript across eight script requests, disproportionate to the initial task surface.","types":["network-summary","page-probe-summary"]},"findings":[{"findingId":"site-03-finding-05","severity":"medium","summary":"JavaScript payload is disproportionate to the initial search surface."}],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"HAR and page-complexity review.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":"medium","detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Eight third-party requests transferred 92,305 bytes across five third-party origins on the initial search page, before the user performs a search.","types":["network-summary","tracker-summary"]},"findings":[{"findingId":"site-03-finding-09","severity":"medium","summary":"The initial page has a material third-party and long-lived identifier footprint."}],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"HAR and tracker review.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":"high","detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The primary capability is exposed as a standard server-rendered form with role search, a labelled q combobox, named submit controls, and real links, so agents need not infer a canvas-only interaction.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"Raw HTML and semantic form inspection.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":null,"sourceStatus":"pass"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":"high","detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The entry is a remote web-search portal; no bounded local summarisation or inference task is exposed.","types":["page-probe-summary"]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"Page purpose and runtime capability review.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"On-device inference does not improve the audited search-entry task.","sourceStatus":"not-applicable"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":"medium","detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Post-cycle heap self size decreased by 7,716 bytes and node count decreased by 35 versus baseline, with no retained-growth signal.","types":["memory-summary"]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"Compared independent heap summaries before and after ten bounded native scroll down/up cycles.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":"medium","detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page held about [host/path omitted] MB V8 self size and roughly 502 DOM elements, proportionate for this feature-rich search entry.","types":["memory-summary","page-probe-summary"]},"findings":[],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"Heap summary and DOM-size review.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":"medium","detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The post-cycle heap did not grow overall and no Detached constructor appeared among the largest retained constructors.","types":["memory-summary"]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"Compared heap constructor summaries across repeated bounded scroll.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"}],"reportState":"available"},{"disposition":"partial","methodInvalid":false,"ordinal":4,"origin":"https://www.reddit.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":"high","detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"Desktop and dark/high-contrast screenshots are pixel-identical at 40,303 bytes; DOM reports color-scheme normal and fixed white surfaces.","types":[]},"findings":[{"findingId":"site-04-finding-01","severity":"medium","summary":"Dark preference is ignored"}],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"issues"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":"medium","detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Reduced-motion video captured one static frame and the probe found zero active animations.","types":[]},"findings":[],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":"medium","detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Text and challenge controls remain visually legible in the high-contrast screenshot; no content disappears.","types":[]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":"high","detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":"high","detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The response is exactly one viewport tall and has no scroll-driven content.","types":[]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The response is exactly one viewport tall and has no scroll-driven content.","sourceStatus":"not-applicable"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":"high","detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The static challenge response exposes no gesture-driven UI.","types":[]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The static challenge response exposes no gesture-driven UI.","sourceStatus":"not-applicable"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":"high","detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The response has no scroll range or chrome whose state could react to scrolling.","types":[]},"findings":[],"guides":["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","scroll-state query scrolled sticky header"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The response has no scroll range or chrome whose state could react to scrolling.","sourceStatus":"not-applicable"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":"high","detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No page-owned tooltip, popover, or anchored overlay is exposed without performing the prohibited CAPTCHA interaction.","types":[]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"No page-owned tooltip, popover, or anchored overlay is exposed without performing the prohibited CAPTCHA interaction.","sourceStatus":"not-applicable"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":"medium","detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Desktop and mobile screenshots provide a direct H1, explanatory copy, and centered CAPTCHA with clear visual hierarchy.","types":[]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"pass"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":"high","detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":"high","detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No page-owned dismissible dialog or popover is present in the observed response.","types":[]},"findings":[],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":"No page-owned dismissible dialog or popover is present in the observed response.","sourceStatus":"not-applicable"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":"medium","detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Screenshots show minimal branding/footer chrome around the single challenge task.","types":[]},"findings":[],"guides":["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","reduce visual clutter maximize content"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":"medium","detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Layout reports 0 horizontal overflow at both 1440x1000 and 360x800.","types":[]},"findings":[],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":"medium","detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Desktop/mobile screenshots and DOM CSS show the main surface constrains to 480px and footer switches to a column below 600px.","types":[]},"findings":[],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":"medium","detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Programmatic focus on the first link produced a native auto 1px focus outline.","types":[]},"findings":[],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":"medium","detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"The H1 and copy explicitly state the purpose and point to the reCAPTCHA as the only primary action.","types":[]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":"high","detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":"high","detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":"medium","detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Trace reports LCP/FCP [host/path omitted], 0 long tasks, and 0ms total blocking time; layout reports CLS 0.","types":[]},"findings":[],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":"medium","detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Both layout captures report CLS 0 with no layout shifts.","types":[]},"findings":[],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":"medium","detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Trace reports no long tasks and 0ms total blocking time over [host/path omitted].","types":[]},"findings":[],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":"high","detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"HAR summary records 514,675 transferred bytes for the challenge; 346,849 bytes are third-party and a parser-inserted reCAPTCHA script has no async/defer.","types":[]},"findings":[{"findingId":"site-04-finding-10","severity":"medium","summary":"The minimal wall transfers half a megabyte, mostly third-party JavaScript"}],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":"high","detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":"high","detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"The evaluated control inventory shows the 100x32 Reddit logo link has no text, aria-label, or title; the image audit reports its image has no alt.","types":[]},"findings":[{"findingId":"site-04-finding-02","severity":"medium","summary":"The Reddit logo link has no accessible name"}],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":"medium","detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Visual review of desktop, mobile, and increased-contrast captures shows readable dark text and visible controls on white surfaces.","types":[]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":"high","detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"The probe found one H1 and a visible native focus outline, but zero main, nav, header, or footer landmark elements.","types":[]},"findings":[{"findingId":"site-04-finding-04","severity":"medium","summary":"The page has no semantic landmarks"}],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":"medium","detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Desktop/mobile screenshots show a 24px heading and 16px centered body copy with readable line lengths.","types":[]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":"high","detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"At 360px there is no overflow, but the evaluated footer links are only 14 CSS px tall, below a comfortable touch target.","types":[]},"findings":[{"findingId":"site-04-finding-05","severity":"medium","summary":"Footer links have undersized touch targets"}],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":"high","detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":"high","detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"The image audit reports the sole image lacks width and height attributes; DOM confirms it renders at 100x28 from a 300x84 intrinsic asset.","types":[]},"findings":[{"findingId":"site-04-finding-03","severity":"low","summary":"The logo image omits intrinsic dimensions"}],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"issues"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":"medium","detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"DOM confirms HTML doctype, UTF-8, viewport metadata, and no permission prompt; the page uses HTTPS.","types":[]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"pass"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":"high","detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"The rendered title is present, but the probe found no meta description.","types":[]},"findings":[{"findingId":"site-04-finding-06","severity":"medium","summary":"The anti-bot response has no meta description"}],"guides":["page title meta description seo"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":"high","detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"The discoverability primitive found only 4% rendered-word coverage in raw HTML; title and H1 are absent from raw HTML.","types":[]},"findings":[{"findingId":"site-04-finding-07","severity":"high","summary":"The rendered challenge is almost absent without JavaScript"}],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":"high","detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"The probe found no canonical link and no robots meta on a 200 response that renders an anti-bot interstitial.","types":[]},"findings":[{"findingId":"site-04-finding-08","severity":"medium","summary":"Indexing and sharing metadata are missing"}],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":"high","detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"The probe found zero JSON-LD blocks and zero Open Graph metadata.","types":[]},"findings":[{"findingId":"site-04-finding-08","severity":"medium","summary":"Indexing and sharing metadata are missing"}],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":"medium","detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Retained evidence records 3 of 6 baseline security-header categories present. Cookie-attribute review records 1 of 1 records with Secure and 0 with HttpOnly. Names, values, routes, and raw headers remain private.","types":[]},"findings":[],"guides":["security","https csp secure cookies content security policy"],"method":"Reviewed transport state, baseline security-header presence, and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"pass"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":"medium","detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Retained evidence records 1 first-party origin categories and 3 third-party origin categories across 8 requests. Destinations, identifiers, routes, headers, and bodies remain private.","types":[]},"findings":[],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"Reviewed categorical request-origin and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"pass"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":"high","detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":"high","detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"Retained evidence records 3 of 6 baseline browser-policy header categories present. Values and raw headers remain private.","types":[]},"findings":[{"findingId":"site-04-finding-09","severity":"high","summary":"Defensive response policies are incomplete"}],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"Reviewed baseline browser-policy header presence from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":"high","detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"The no-JavaScript/raw comparison exposes only 4% of rendered content words and omits the rendered title and H1.","types":[]},"findings":[{"findingId":"site-04-finding-07","severity":"high","summary":"The rendered challenge is almost absent without JavaScript"}],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"issues"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":"medium","detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"The challenge rendered consistently across desktop, mobile, reduced-motion, and crawler captures without runtime-visible breakage.","types":[]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":"high","detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"Installability is not applicable to this transient anti-bot response, and the intended Reddit application was blocked.","types":[]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Installability is not applicable to this transient anti-bot response, and the intended Reddit application was blocked.","sourceStatus":"not-applicable"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":"high","detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":"medium","detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"The document declares lang=en; observed text is consistently left-to-right and mobile CSS adapts without clipping.","types":[]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":"high","detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The observed response presents no locale-sensitive dates, numbers, currency, or calendars.","types":[]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The observed response presents no locale-sensitive dates, numbers, currency, or calendars.","sourceStatus":"not-applicable"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":"high","detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The observed response presents no time-zone-dependent data or scheduling.","types":[]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The observed response presents no time-zone-dependent data or scheduling.","sourceStatus":"not-applicable"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":"medium","detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"The wall plainly explains why the challenge exists and presents no deceptive choices, confirmshaming, or commercial pressure.","types":[]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":"high","detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Attempted permit-bound DOM/visual/journey inspection. The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","types":[]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"Permit-bound recon plus strict journey replay result","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The exact URL rendered a reCAPTCHA anti-bot wall instead of Reddit content, and the strict pre-replayed journey aborted after its baseline navigation; direct evidence for the intended application was unavailable.","sourceStatus":"blocked"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":"high","detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The only page form control is reCAPTCHA implementation plumbing; there is no address, payment, sign-in, or signup field to autofill.","types":[]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The only page form control is reCAPTCHA implementation plumbing; there is no address, payment, sign-in, or signup field to autofill.","sourceStatus":"not-applicable"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":"high","detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No commercial, subscription, checkout, or account-management flow is exposed on the observed response.","types":[]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"No commercial, subscription, checkout, or account-management flow is exposed on the observed response.","sourceStatus":"not-applicable"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":"medium","detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"The one page-owned visual is an inline SVG logo; no raster transfer is used for it.","types":[]},"findings":[],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"pass"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":"medium","detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Trace shows no long tasks and the reduced-motion capture produced no continuing animation activity.","types":[]},"findings":[],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"pass"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":"high","detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"issues","evidence":{"availability":"described-only","summary":"HAR summary records 67% of transfer bytes from third parties, dominated by 340,589 bytes of reCAPTCHA JavaScript for a minimal wall.","types":[]},"findings":[{"findingId":"site-04-finding-10","severity":"medium","summary":"The minimal wall transfers half a megabyte, mostly third-party JavaScript"}],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":"high","detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The anti-bot response is not an agent-capability surface, and the intended Reddit content could not be reached.","types":[]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"The anti-bot response is not an agent-capability surface, and the intended Reddit content could not be reached.","sourceStatus":"not-applicable"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":"high","detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The observed challenge has no inference use case or built-in AI surface.","types":[]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"The observed challenge has no inference use case or built-in AI surface.","sourceStatus":"not-applicable"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":"high","detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The document has no scroll range and the strict journey did not permit a repeatable interaction; fabricating one would not test a real user action.","types":[]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"The document has no scroll range and the strict journey did not permit a repeatable interaction; fabricating one would not test a real user action.","sourceStatus":"not-applicable"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":"medium","detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"Baseline heap summary is 6,490,062 bytes for 105,620 nodes, proportionate to the challenge plus reCAPTCHA.","types":[]},"findings":[],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":"medium","detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"pass","evidence":{"availability":"described-only","summary":"After ten bounded scroll attempts, heap growth was only 11,487 bytes and 26 nodes; no Detached* constructor appears in either top-constructor summary.","types":[]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"Permit-bound screenshot, DOM/evaluate, layout, trace, HAR, security, discoverability, or heap evidence as applicable","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"}],"reportState":"available"},{"disposition":"partial","methodInvalid":false,"ordinal":5,"origin":"https://www.amazon.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":"high","detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The dark-mode probe reports body rgb(255, 255, 255), text rgb(15, 17, 17), and color-scheme normal while the dark media query matches.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-05-finding-01","severity":"high","summary":"The homepage remains light when the user requests dark mode."}],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"issues"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":"medium","detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Reduced-motion emulation matched and the page exposed zero active animations with automatic scroll behavior.","types":["layout-summary","page-probe-summary"]},"findings":[],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":"medium","detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The high-contrast screenshot retained readable navigation, promotional text, and controls without disappearing content.","types":["other-private-evidence"]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":"high","detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The only replayed baseline triggered an automatic POST and the strict journey aborted; no safe state transition was available to inspect.","types":[]},"findings":[],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The only replayed baseline triggered an automatic POST and the strict journey aborted; no safe state transition was available to inspect.","sourceStatus":"blocked"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":"high","detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The bounded-scroll journey step was skipped after the baseline mutation blocker, so scroll-linked behavior could not be exercised safely.","types":[]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The bounded-scroll journey step was skipped after the baseline mutation blocker, so scroll-linked behavior could not be exercised safely.","sourceStatus":"blocked"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":"high","detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"No permitted reversible gesture surface could be exercised after the strict journey aborted.","types":[]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"No permitted reversible gesture surface could be exercised after the strict journey aborted.","sourceStatus":"blocked"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":"high","detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The planned bounded scroll was skipped after the automatic POST blocker.","types":[]},"findings":[],"guides":["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","scroll-state query scrolled sticky header"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The planned bounded scroll was skipped after the automatic POST blocker.","sourceStatus":"blocked"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":"high","detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Opening menus or overlays was outside the already replayed journey and no additional control interaction was permitted.","types":[]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"Opening menus or overlays was outside the already replayed journey and no additional control interaction was permitted.","sourceStatus":"blocked"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":"high","detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The strict journey could not advance beyond baseline, so post-navigation attention movement was not observable.","types":[]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The strict journey could not advance beyond baseline, so post-navigation attention movement was not observable.","sourceStatus":"blocked"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":"medium","detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Independent desktop and mobile load screenshots showed the page content directly with no modal interstitial obscuring it.","types":["screenshot"]},"findings":[],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":"high","detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The DOM probe found many div role=dialog nodes but zero dialog, popover, or details elements.","types":["page-probe-summary"]},"findings":[{"findingId":"site-05-finding-02","severity":"medium","summary":"Overlay semantics rely on custom role-based containers rather than native primitives."}],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":"high","detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Desktop and mobile screenshots devote the first viewport to two navigation rows and large promotional panels; the mobile capture reaches footer chrome with little product-detail content.","types":["screenshot"]},"findings":[{"findingId":"site-05-finding-03","severity":"medium","summary":"Navigation, promotional chrome, location messaging, and dense merchandising compete with the shopping content."}],"guides":["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","reduce visual clutter maximize content"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":"high","detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The mobile layout reports no viewport meta and 620 px horizontal overflow at 360x800; desktop also reports 220 px overflow. The mobile screenshot is visibly clipped to a desktop-width surface.","types":["layout-summary","screenshot"]},"findings":[{"findingId":"site-05-finding-04","severity":"critical","summary":"The entry page does not establish a mobile viewport and overflows horizontally."}],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":"high","detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Rendered evidence proves page-level overflow, but authored CSS and safe component resizing were unavailable, so container-level behavior could not be conclusively judged.","types":[]},"findings":[],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"Rendered evidence proves page-level overflow, but authored CSS and safe component resizing were unavailable, so container-level behavior could not be conclusively judged.","sourceStatus":"blocked"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":"high","detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The focus probe reports 0 px outline on the Amazon home link, delivery control, search field, search submit, language, account, orders, and cart controls.","types":["page-probe-summary"]},"findings":[{"findingId":"site-05-finding-05","severity":"high","summary":"Keyboard focus is not visibly exposed on several primary controls."}],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":"medium","detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The Amazon identity, prominent search control, category navigation, and shopping promotions make the commerce purpose and next action clear.","types":["screenshot"]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":"high","detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Search, account, product, cart, and checkout routes were outside the exact-URL permit, and the strict baseline aborted on an automatic POST.","types":[]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"Search, account, product, cart, and checkout routes were outside the exact-URL permit, and the strict baseline aborted on an automatic POST.","sourceStatus":"blocked"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":"high","detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Failure, empty, success, and retry states require prohibited route or mutation testing and were not safely reachable.","types":[]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"Failure, empty, success, and retry states require prohibited route or mutation testing and were not safely reachable.","sourceStatus":"blocked"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":"high","detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The trace did not yield FCP or LCP and no permitted interaction was available for an INP-like measurement.","types":[]},"findings":[],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The trace did not yield FCP or LCP and no permitted interaction was available for an INP-like measurement.","sourceStatus":"blocked"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":"medium","detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Desktop and mobile layout observers recorded CLS 0 with no shift entries during their capture windows.","types":["layout-summary"]},"findings":[],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":"medium","detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The performance trace recorded zero long tasks and 0 ms total blocking time over [host/path omitted] seconds.","types":["performance-summary"]},"findings":[],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":"high","detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The HAR records 43 requests and 1,101,460 transferred bytes, including ten parser-inserted render-blocking candidates and a 286,614-byte WAF script.","types":["network-summary"]},"findings":[{"findingId":"site-05-finding-06","severity":"high","summary":"The landing load has a long render-blocking resource chain and a large anti-bot script cost."}],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":"high","detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"No permit-aware code-coverage evidence was gathered, so shipped bytes cannot be classified as used or unused.","types":[]},"findings":[],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"No permit-aware code-coverage evidence was gathered, so shipped bytes cannot be classified as used or unused.","sourceStatus":"blocked"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":"high","detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The accessibility probe found 56 unnamed controls among 268 controls, while the image audit found three images without alt in its captured variant.","types":["image-summary","page-probe-summary"]},"findings":[{"findingId":"site-05-finding-07","severity":"high","summary":"A material number of interactive controls lack a detectable accessible name."}],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":"medium","detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Desktop, mobile, and prefers-contrast screenshots show legible text and controls against their immediate surfaces; no visual contrast failure was observed.","types":["other-private-evidence","screenshot"]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":"high","detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The probe reports zero H1 elements and 0 px outlines on primary navigation and search controls.","types":["page-probe-summary"]},"findings":[{"findingId":"site-05-finding-08","severity":"high","summary":"The page has no H1 and several major controls suppress visible focus."}],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":"medium","detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Captured headings, navigation labels, and body text are readable and not clipped vertically in the inspected states.","types":["screenshot"]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":"high","detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"At 360x800 the layout viewport remains 980 px wide and horizontal overflow is 620 px, making content clipped and zoomed out.","types":["layout-summary","screenshot"]},"findings":[{"findingId":"site-05-finding-09","severity":"critical","summary":"Narrow-screen reflow fails because the page omits a viewport declaration."}],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":"high","detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The journey console dimension was blocked by the unavailable Stage 2 collector and no independent console-event capture was retained.","types":[]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The journey console dimension was blocked by the unavailable Stage 2 collector and no independent console-event capture was retained.","sourceStatus":"blocked"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":"high","detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The image audit found 11 of 12 captured images without width/height, two oversized images, seven without srcset, and eight legacy-format images.","types":["image-summary"]},"findings":[{"findingId":"site-05-finding-10","severity":"medium","summary":"Image sizing and delivery are structurally fragile."}],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"issues"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":"high","detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Deprecation, BFCache, source-map, prompt timing, and vulnerable-library checks require evidence not available within the bounded entry-only run.","types":[]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"Deprecation, BFCache, source-map, prompt timing, and vulnerable-library checks require evidence not available within the bounded entry-only run.","sourceStatus":"blocked"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":"medium","detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The rendered probe found a descriptive title and a detailed meta description.","types":["page-probe-summary"]},"findings":[],"guides":["page title meta description seo"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":"high","detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The discoverability probe reports 1% raw-to-rendered content coverage and isJsShell=true; the page also lacks viewport meta.","types":["discoverability-summary","layout-summary"]},"findings":[{"findingId":"site-05-finding-11","severity":"high","summary":"The rendered landing page is not mobile-friendly and most content is absent from the raw HTML response."}],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":"high","detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Discoverability evidence records fetchedStatus 202, 1% coverage, no title in raw HTML, and no raw meta description, despite a rendered canonical URL.","types":["discoverability-summary"]},"findings":[{"findingId":"site-05-finding-12","severity":"high","summary":"The non-JavaScript fetch returns an HTTP 202 challenge shell rather than indexable page content."}],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":"high","detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The probe found two Open Graph tags but no JSON-LD blocks for the organization or commerce destination.","types":["page-probe-summary"]},"findings":[{"findingId":"site-05-finding-13","severity":"low","summary":"The homepage exposes limited entity metadata."}],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":"high","detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 0 of 6 baseline security-header categories present. Cookie-attribute review records 3 of 7 records with Secure and 0 with HttpOnly. Names, values, routes, and raw headers remain private.","types":["cookie-attribute-summary","security-header-summary"]},"findings":[{"findingId":"site-05-finding-14","severity":"high","summary":"The captured main response lacks baseline defensive headers and several cookies have weak attributes."}],"guides":["security","https csp secure cookies content security policy"],"method":"Reviewed transport state, baseline security-header presence, and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":"high","detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 1 first-party origin categories and 3 third-party origin categories across 43 requests. Destinations, identifiers, routes, headers, and bodies remain private.","types":["network-summary","tracker-summary"]},"findings":[{"findingId":"site-05-finding-15","severity":"medium","summary":"Most landing-load requests and bytes are delivered from third-party-classified origins."}],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"Reviewed categorical request-origin and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":"high","detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Authentication is on an unpermitted path and no permission prompt fired on the captured landing state; modern-auth support could not be verified.","types":[]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"Authentication is on an unpermitted path and no permission prompt fired on the captured landing state; modern-auth support could not be verified.","sourceStatus":"blocked"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":"high","detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 0 of 6 baseline browser-policy header categories present. Values and raw headers remain private.","types":["security-header-summary"]},"findings":[{"findingId":"site-05-finding-16","severity":"high","summary":"Browser-enforced defense headers are absent in the captured response."}],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"Reviewed baseline browser-policy header presence from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":"high","detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The raw response has 14 content tokens versus 304 rendered tokens, 1% coverage, no raw title, and no raw description; the crawler screenshot is a challenge/blank shell.","types":["discoverability-summary"]},"findings":[{"findingId":"site-05-finding-17","severity":"high","summary":"Core landing content is effectively unavailable without JavaScript."}],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"issues"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":"high","detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Menus and async state could not be exercised because the strict replay aborted after baseline network mutation.","types":[]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Menus and async state could not be exercised because the strict replay aborted after baseline network mutation.","sourceStatus":"blocked"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":"high","detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"Offline/installability is contextual and not essential to this public commerce landing page; progressive enhancement is judged separately.","types":[]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"Applicability judgement from the audited commerce entry state.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Offline/installability is contextual and not essential to this public commerce landing page; progressive enhancement is judged separately.","sourceStatus":"not-applicable"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":"high","detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Network failure simulation and error routes were outside the bounded execution plan.","types":[]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Network failure simulation and error routes were outside the bounded execution plan.","sourceStatus":"blocked"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":"medium","detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The rendered document declares lang=en-us and computes ltr direction; the captured English content follows that direction.","types":["page-probe-summary"]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":"high","detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No date, currency, duration, or other locale-sensitive value was present in the audited entry state.","types":[]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"Applicability judgement from the audited commerce entry state.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"No date, currency, duration, or other locale-sensitive value was present in the audited entry state.","sourceStatus":"not-applicable"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":"high","detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No time or event data was present in the audited entry state.","types":[]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"Applicability judgement from the audited commerce entry state.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"No time or event data was present in the audited entry state.","sourceStatus":"not-applicable"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":"medium","detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"No consent wall, confirmshaming, forced continuity, disguised ad control, or purchase prompt appeared on the audited entry state.","types":["screenshot"]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":"high","detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Form mutation and submission are hard-denied by the journey protocol.","types":[]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Form mutation and submission are hard-denied by the journey protocol.","sourceStatus":"blocked"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":"high","detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Account, address, and payment forms were outside the exact-URL boundary, so autofill assistance could not be assessed.","types":[]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Account, address, and payment forms were outside the exact-URL boundary, so autofill assistance could not be assessed.","sourceStatus":"blocked"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":"high","detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Cart, checkout, purchase, authentication, account management, and cancellation are hard-denied or outside the exact-URL permit.","types":[]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"Attempted bounded entry-page inspection and/or strict pre-replayed journey.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Cart, checkout, purchase, authentication, account management, and cancellation are hard-denied or outside the exact-URL permit.","sourceStatus":"blocked"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":"high","detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The image audit reports two oversized images, seven without srcset, eight legacy-format images, and no modern-format image in the captured set.","types":["image-summary"]},"findings":[{"findingId":"site-05-finding-18","severity":"medium","summary":"Captured image delivery omits responsive sizing and modern formats."}],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":"high","detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The flow baseline was aborted after an automatic WAF verification POST attempt; the independent HAR still recorded 43 requests and [host/path omitted] MB transferred.","types":["journey-summary","network-summary"]},"findings":[{"findingId":"site-05-finding-19","severity":"medium","summary":"The baseline immediately starts substantial challenge and telemetry work."}],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":"high","detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Third-party-classified traffic accounts for 794,498 bytes and 37 requests; scripts alone transfer 449,270 bytes.","types":["network-summary"]},"findings":[{"findingId":"site-05-finding-20","severity":"high","summary":"Third-party-classified delivery dominates the landing-page transfer budget."}],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"Permit-bound screenshot, DOM/evaluate, layout, HAR, discoverability, security, image, or journey evidence as cited.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":"high","detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"Agentic commerce is an emerging opportunity, but no declared agent-facing intent or surface was available; absence is not penalized.","types":[]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"Applicability judgement from the audited commerce entry state.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"Agentic commerce is an emerging opportunity, but no declared agent-facing intent or surface was available; absence is not penalized.","sourceStatus":"not-applicable"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":"high","detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No on-device inference use case or declared intent was present on the commerce landing state.","types":[]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"Applicability judgement from the audited commerce entry state.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"No on-device inference use case or declared intent was present on the commerce landing state.","sourceStatus":"not-applicable"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":"medium","detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"After ten bounded scroll-to-500-and-back cycles, summarized heap size rose only 200,845 bytes ([host/path omitted]%) and node count 1,851 ([host/path omitted]%) across independent captures, with no unbounded-growth signal.","types":["memory-summary"]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":"medium","detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The rendered commerce landing state used about [host/path omitted] MB summarized self-size; this is substantial but proportionate to a dense, script-heavy homepage and did not grow materially in the bounded repeat.","types":["memory-summary"]},"findings":[],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":"medium","detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"No Detached* constructor appeared among top heap constructors, and closure count changed by only 74 across the repeated-scroll pair; no accumulating pattern was observed.","types":["memory-summary"]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"Permit-bound evidence review for the entry state.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"}],"reportState":"available"},{"disposition":"runner-completed","methodInvalid":true,"ordinal":6,"origin":"https://en.wikipedia.org","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":"high","detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Desktop and prefers-color-scheme: dark screenshots are byte-identical; computed color-scheme is normal and the rendered body remains rgb(248,249,250).","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-06-finding-01","severity":"medium","summary":"The page does not follow the system dark-color preference by default."}],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"issues"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":"high","detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Reduced-motion probe matched the preference, reported scroll-behavior auto, and found zero active animations; CSS also contains a reduced-motion rule.","types":["page-probe-summary"]},"findings":[],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":"high","detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The prefers-contrast: more screenshot retains visible dark text, blue links, borders, and controls across the full page.","types":["page-probe-summary"]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":"high","detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"CSS probe found no view-transition rules or declarations; the MPA exposes hundreds of same-origin article links.","types":["journey-summary","page-probe-summary"]},"findings":[{"findingId":"site-06-finding-02","severity":"low","summary":"Same-origin document navigation has no View Transition enhancement."}],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":null,"sourceStatus":"issues"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":"high","detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The audited main page and bounded-scroll journey contain no parallax, scrollytelling, reveal, or other scroll-linked animation to implement.","sourceStatus":"not-applicable"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":"high","detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The recorded bounded wheel scroll moved 246 CSS px using native scrolling, with no pointer interception, unexpected state change, or network request.","types":["page-probe-summary"]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":null,"sourceStatus":"pass"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":"high","detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The bounded-scroll screenshot shows content moving predictably without a static header covering the reading area; no JS scroll toggling was detected.","types":["page-probe-summary"]},"findings":[],"guides":["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","scroll-state query scrolled sticky header"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"pass"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":"high","detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"No tooltip, popover, or menu overlay was opened or present in the bounded journey, so there is no positioned overlay to assess.","sourceStatus":"not-applicable"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":"high","detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The baseline has a clear selected Main Page tab, section headings, blue link affordances, and a visible skip link focus treatment.","types":["page-probe-summary"]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"pass"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":"high","detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Baseline and full-page screenshots contain no load-time modal, interstitial, consent wall, or banner obscuring content.","types":["page-probe-summary"]},"findings":[],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":"high","detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"DOM inspection found no active overlay in the audited state; existing controls use native form and button elements rather than a visible ad-hoc modal.","types":["page-probe-summary"]},"findings":[],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":"high","detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Screenshots show the viewport dominated by encyclopedia content with compact navigation and no decorative application frame.","types":["page-probe-summary"]},"findings":[],"guides":["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","reduce visual clutter maximize content"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":"high","detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"At requested 360x800, layout reports a 1120 CSS-pixel client width and the DOM declares meta viewport width=1120; the full-page mobile capture shows desktop columns and tiny text.","types":["layout-summary","page-probe-summary","screenshot"]},"findings":[{"findingId":"site-06-finding-03","severity":"high","summary":"The mobile viewport is forced to a 1120 CSS-pixel desktop canvas and scaled down."}],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":"high","detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"At requested 360x800, layout reports a 1120 CSS-pixel client width and the DOM declares meta viewport width=1120; the full-page mobile capture shows desktop columns and tiny text.","types":["layout-summary","page-probe-summary","screenshot"]},"findings":[{"findingId":"site-06-finding-03","severity":"high","summary":"The mobile viewport is forced to a 1120 CSS-pixel desktop canvas and scaled down."}],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":"high","detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The focus/target probe measured Donate, Create account, Log in and many content links at 15 to 17 px high, below a comfortable touch-target size.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-06-finding-04","severity":"medium","summary":"Many important navigation links have touch boxes only 15 to 17 CSS pixels high."}],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":"high","detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The first viewport clearly says “Welcome to Wikipedia”, exposes search/navigation, and immediately presents the featured article.","types":["page-probe-summary"]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":"high","detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Both supplied journey actions completed: same-origin baseline load and bounded scroll, with 2 planned and 2 performed actions and no blocked action.","types":["page-probe-summary"]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":"high","detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The supplied non-mutating baseline and bounded-scroll journey has no loading, empty, error, success, or partial-completion state.","sourceStatus":"not-applicable"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":"high","detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Permit-bound trace measured LCP/FCP [host/path omitted] ms and TBT [host/path omitted] ms; layout measured CLS [host/path omitted], all within good lab ranges.","types":["page-probe-summary"]},"findings":[],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":"high","detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Layout observers measured CLS [host/path omitted] desktop and 0 mobile, with only one very small desktop shift.","types":["page-probe-summary"]},"findings":[],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":"high","detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Trace found one [host/path omitted] ms long task and [host/path omitted] ms total blocking time, while the page reached LCP in [host/path omitted] s.","types":["page-probe-summary"]},"findings":[],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":"high","detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Image audit found 16 below-fold images without loading=lazy, 17 legacy-format images, 3 oversized images, and one missing dimension; HAR lists 10 images without cache headers, including a 129 KB portrait.","types":["image-summary","layout-summary","network-summary"]},"findings":[{"findingId":"site-06-finding-07","severity":"medium","summary":"Below-fold imagery is eagerly loaded and several image delivery details waste bytes or weaken stability."}],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":"medium","detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"HAR transferred 682,131 bytes total with 281,579 script bytes and no third-party tracker package; this is proportionate for the feature-rich reference landing page.","types":["page-probe-summary"]},"findings":[],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":"high","detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Probe found zero unlabeled visible controls; all images carry an alt attribute and the page exposes 13 landmarks.","types":["page-probe-summary"]},"findings":[],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":"medium","detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Desktop and high-contrast screenshots retain legible dark text, blue links, controls, and section boundaries; no content disappears in the preference condition.","types":["page-probe-summary"]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":"high","detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Visible heading sequence is one H1 followed by eight H2s with no skipped levels; first keyboard target has a 2 px solid focus outline.","types":["page-probe-summary"]},"findings":[],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":"high","detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"At requested 360x800, layout reports a 1120 CSS-pixel client width and the DOM declares meta viewport width=1120; the full-page mobile capture shows desktop columns and tiny text.","types":["layout-summary","page-probe-summary","screenshot"]},"findings":[{"findingId":"site-06-finding-03","severity":"high","summary":"The mobile viewport is forced to a 1120 CSS-pixel desktop canvas and scaled down."}],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":"high","detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"At requested 360x800, layout reports a 1120 CSS-pixel client width and the DOM declares meta viewport width=1120; the full-page mobile capture shows desktop columns and tiny text. The focus/target probe measured Donate, Create account, Log in and many content links at 15 to 17 px high, below a comfortable touch-target size.","types":["layout-summary","page-probe-summary","screenshot"]},"findings":[{"findingId":"site-06-finding-03","severity":"high","summary":"The mobile viewport is forced to a 1120 CSS-pixel desktop canvas and scaled down."},{"findingId":"site-06-finding-04","severity":"medium","summary":"Many important navigation links have touch boxes only 15 to 17 CSS pixels high."}],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":"medium","detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"All permit-bound DOM, layout, trace, HAR, evaluate, and journey navigations completed without an uncaught exception surfaced by the harness.","types":["page-probe-summary"]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":true,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"pass"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":"high","detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Image audit found 16 below-fold images without loading=lazy, 17 legacy-format images, 3 oversized images, and one missing dimension; HAR lists 10 images without cache headers, including a 129 KB portrait.","types":["image-summary","layout-summary","network-summary"]},"findings":[{"findingId":"site-06-finding-07","severity":"medium","summary":"Below-fold imagery is eagerly loaded and several image delivery details waste bytes or weaken stability."}],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"issues"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":"high","detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The document uses HTML5, no inline event-handler attributes were found, and no permission prompt appeared during repeated permit-bound loads.","types":["page-probe-summary"]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"pass"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":"high","detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"DOM and discoverability probes both report metaDescription null, although the title survives without JavaScript.","types":["discoverability-summary","page-probe-summary"]},"findings":[{"findingId":"site-06-finding-05","severity":"low","summary":"The Main Page has no meta description."}],"guides":["page title meta description seo"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":"high","detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"At requested 360x800, layout reports a 1120 CSS-pixel client width and the DOM declares meta viewport width=1120; the full-page mobile capture shows desktop columns and tiny text.","types":["layout-summary","page-probe-summary","screenshot"]},"findings":[{"findingId":"site-06-finding-03","severity":"high","summary":"The mobile viewport is forced to a 1120 CSS-pixel desktop canvas and scaled down."}],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":"high","detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Fetch returned 200 after the canonical root redirect; rendered DOM declares canonical [origin omitted] and robots allows previews.","types":["page-probe-summary"]},"findings":[],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":"high","detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page contains one JSON-LD block plus matching og:title and og:image metadata for the visible Main Page content.","types":["page-probe-summary"]},"findings":[],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":"high","detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 3 of 6 baseline security-header categories present. Cookie-attribute review records 6 of 7 records with Secure and 4 with HttpOnly. Names, values, routes, and raw headers remain private.","types":["cookie-attribute-summary","security-header-summary"]},"findings":[{"findingId":"site-06-finding-06","severity":"high","summary":"Browser defenses and one session-like cookie are weaker than expected."}],"guides":["security","https csp secure cookies content security policy"],"method":"Reviewed transport state, baseline security-header presence, and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":"high","detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Retained evidence records 1 first-party origin categories and 2 third-party origin categories across 40 requests. Destinations, identifiers, routes, headers, and bodies remain private.","types":["page-probe-summary"]},"findings":[],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"Reviewed categorical request-origin and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"pass"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":"high","detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"The public anonymous main-page journey requests no browser permission and contains no authentication step.","sourceStatus":"not-applicable"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":"high","detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 3 of 6 baseline browser-policy header categories present. Values and raw headers remain private.","types":["cookie-attribute-summary","security-header-summary"]},"findings":[{"findingId":"site-06-finding-06","severity":"high","summary":"Browser defenses and one session-like cookie are weaker than expected."}],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"Reviewed baseline browser-policy header presence from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":"high","detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Discoverability measured 98% content coverage without JavaScript, isJsShell false, and matching browser/crawler views.","types":["page-probe-summary"]},"findings":[],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":"high","detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The recorded load and scroll retained the same URL, 2,375-node state and 142 listeners, with no overlay clipping or state loss.","types":["page-probe-summary"]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":"high","detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Wikipedia Main Page is a server-rendered reference document rather than an installable application; PWA installability is not needed for this path.","sourceStatus":"not-applicable"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":"high","detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The reviewed exact-URL journey contains no client-side mutation or async task with an application-owned retry/error state; testing a different error URL was explicitly prohibited.","sourceStatus":"not-applicable"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":"high","detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"DOM reports html lang=en and dir=ltr; CSS inspection found logical inline/block properties and the page links to 347 language editions.","types":["page-probe-summary"]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":"high","detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"This English reference landing page does not perform locale-sensitive number, currency, duration, or calendar calculations in the supplied journey.","sourceStatus":"not-applicable"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":"high","detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The supplied journey exposes no scheduled event or time-zone-sensitive transaction.","sourceStatus":"not-applicable"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":"high","detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Screenshots show no consent wall, disguised ad, confirmshaming, forced continuity, or hidden commitment; controls and links use direct labels.","types":["page-probe-summary"]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":"high","detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The bounded non-mutating journey does not submit a form or create an invalid-input state.","sourceStatus":"not-applicable"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":"high","detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The only relevant visible input is encyclopedia search, for which address, payment, sign-in, and sign-up autocomplete tokens do not apply.","sourceStatus":"not-applicable"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":"high","detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"No checkout, subscription, consent, authentication, or account-management flow appears in the supplied anonymous journey.","sourceStatus":"not-applicable"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":"high","detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Image audit found 16 below-fold images without loading=lazy, 17 legacy-format images, 3 oversized images, and one missing dimension; HAR lists 10 images without cache headers, including a 129 KB portrait.","types":["image-summary","layout-summary","network-summary"]},"findings":[{"findingId":"site-06-finding-07","severity":"medium","summary":"Below-fold imagery is eagerly loaded and several image delivery details waste bytes or weaken stability."}],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"Permit-bound visual, DOM/evaluate, network, layout, trace, or journey evidence as cited.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":"high","detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"After the bounded scroll, no network requests occurred; trace and journey metrics show no ongoing animation or increasing task work.","types":["page-probe-summary"]},"findings":[],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"pass"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":"high","detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"HAR totals 682 KB, has no audio/video/autoplay media and no known trackers; third-party bytes are 253 KB of Wikimedia assets/auth.","types":["page-probe-summary"]},"findings":[],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"pass"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":"high","detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"No developer intent to expose action tools to agents was declared; high server-rendered content coverage already supports read-only agents without making emerging WebMCP mandatory.","sourceStatus":"not-applicable"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":"high","detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No applicable surface exists in the audited path.","types":[]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"Applicability judgement against the supplied exact-URL non-mutating journey.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"The static encyclopedia landing page has no summarisation or generation interaction for which built-in on-device inference is necessary.","sourceStatus":"not-applicable"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":"high","detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"After ten scroll-down/up repetitions, heap self size fell from 13,165,795 to 12,918,423 bytes and heap node count fell from 190,046 to 167,942.","types":["page-probe-summary"]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":"high","detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Baseline heap was [host/path omitted] MB self size; journey JSHeapUsedSize was about [host/path omitted] MB for a content-rich 2,375-element page.","types":["page-probe-summary"]},"findings":[],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":"high","detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Heap constructor summaries show no growing Detached* population; flow listeners stayed at 142 and DOM node count at 2,375 before/after scroll.","types":["page-probe-summary"]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"Permit-bound screenshot, journey, DOM/evaluate, layout, trace, HAR, discoverability, or heap evidence.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"}],"reportState":"available"},{"disposition":"partial","methodInvalid":false,"ordinal":7,"origin":"https://www.nytimes.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":"high","detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Dark emulation retained a white surface.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-07-finding-01","severity":"medium","summary":"The homepage stays light when the user requests dark mode."}],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"issues"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":"medium","detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The reduced-motion query matched; only three finished 300ms animations remained and the CSS capture contains reduced-motion handling.","types":["page-probe-summary","video"]},"findings":[],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":"high","detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Forced-colors/high-contrast capture preserved visible text, controls, borders, and links.","types":["other-private-evidence"]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":"low","detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The strict supplied journey aborted before any state or route transition could be exercised.","types":["journey-summary"]},"findings":[],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"strict journey replay review","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"A blocked POST caused the journey to stop before a transition state.","sourceStatus":"blocked"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":"high","detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No scroll-linked animation or scrollytelling surface is exposed in the exact homepage state.","types":["page-probe-summary"]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The audited state has no scroll-linked visual effect requiring a declarative timeline.","sourceStatus":"not-applicable"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":"high","detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No gesture-driven removal, pull, swipe, or comparable physical interaction is exposed on the exact homepage state.","types":["screenshot"]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"The audited homepage state has no representative gesture surface.","sourceStatus":"not-applicable"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":"high","detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The supplied bounded-scroll state was skipped, so responsive scroll chrome could not be observed in that reviewed path.","types":["journey-summary"]},"findings":[],"guides":["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","scroll-state query scrolled sticky header"],"method":"strict journey replay review","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The strict journey stopped before its bounded-scroll action.","sourceStatus":"blocked"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":"low","detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"No tooltip or menu could be safely opened in the supplied strict journey after it aborted.","types":["journey-summary"]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The strict journey stopped before overlay interactions.","sourceStatus":"blocked"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":"low","detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"No in-page jump or disclosure state was reached after the journey aborted.","types":["journey-summary"]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"The strict journey stopped before a focus-moving navigation action.","sourceStatus":"blocked"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":"high","detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The consent dialog obscures nearly all primary content.","types":["screenshot"]},"findings":[{"findingId":"site-07-finding-02","severity":"high","summary":"A privacy alert dialog obscures the news on every fresh load."}],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":"high","detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The privacy surface uses a real dialog plus role=alertdialog and aria-modal=true, with explicit actions.","types":["page-probe-summary","screenshot"]},"findings":[],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":"medium","detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Below the modal, the publication layout is content-dense and uses restrained separators rather than a heavy app frame.","types":["screenshot"]},"findings":[],"guides":["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","reduce visual clutter maximize content"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":"high","detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Desktop and 360px layouts reported zero horizontal overflow and a valid viewport meta tag.","types":["layout-summary"]},"findings":[],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":"high","detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Captured CSS contains no container-query declarations.","types":["page-probe-summary"]},"findings":[{"findingId":"site-07-finding-03","severity":"medium","summary":"No container-query implementation was found in the captured homepage CSS."}],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":"high","detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Visible focus and target-size probes found undersized and focus-invisible controls.","types":["page-probe-summary"]},"findings":[{"findingId":"site-07-finding-04","severity":"high","summary":"Many visible controls are undersized and lose a visible keyboard focus indicator."}],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":"high","detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Consent management displaces the news purpose in the first viewport.","types":["screenshot"]},"findings":[{"findingId":"site-07-finding-05","severity":"high","summary":"The first viewport prioritises consent management over the publication and its current news."}],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"issues"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":"high","detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The supplied baseline action encountered a blocked POST and the bounded scroll was skipped, so the reviewed primary journey did not complete.","types":["journey-summary"]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"strict journey replay review","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The strict journey result is partial and action 2 is skipped-after-blocker.","sourceStatus":"blocked"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":"high","detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The privacy state is explicit and offers Accept all, Reject all, and Manage preferences without hiding the rejection path.","types":["screenshot"]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":"high","detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"LCP was [host/path omitted] and TBT 994ms.","types":["performance-summary"]},"findings":[{"findingId":"site-07-finding-06","severity":"high","summary":"Observed load performance misses the good LCP range and has substantial blocking work."}],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":"high","detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Mobile CLS was [host/path omitted] and most images omitted dimensions.","types":["image-summary","layout-summary"]},"findings":[{"findingId":"site-07-finding-07","severity":"high","summary":"The mobile homepage has poor observed layout stability."}],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":"high","detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Trace captured 13 long tasks and 994ms TBT.","types":["performance-summary"]},"findings":[{"findingId":"site-07-finding-08","severity":"high","summary":"Heavy scripting blocks the main thread during load."}],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":"high","detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"HAR captured 368 requests and [host/path omitted].","types":["network-summary"]},"findings":[{"findingId":"site-07-finding-09","severity":"high","summary":"The homepage load is exceptionally request-heavy for a content entry page."}],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":"high","detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"259 script requests transferred [host/path omitted].","types":["network-summary"]},"findings":[{"findingId":"site-07-finding-10","severity":"high","summary":"JavaScript and third-party code dominate transfer cost."}],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":"high","detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Empty interactive anchors and null image alternatives were observed.","types":["image-summary","page-probe-summary"]},"findings":[{"findingId":"site-07-finding-11","severity":"high","summary":"The homepage includes interactive links with no accessible text and editorial images with absent descriptions."}],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":"high","detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The default consent surface is high contrast and forced-colors preserves all essential text and controls.","types":["other-private-evidence","screenshot"]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":"high","detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Many focused interactive elements expose transparent or none outlines.","types":["page-probe-summary"]},"findings":[{"findingId":"site-07-finding-12","severity":"high","summary":"Keyboard focus is not consistently visible."}],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":"high","detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Desktop and mobile captures show readable type, comfortable line lengths, and no clipping in the privacy content.","types":["screenshot"]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":"high","detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The mobile layout reflows, but several controls are 12px to 32px high and carousel buttons are 24px square.","types":["layout-summary","page-probe-summary"]},"findings":[{"findingId":"site-07-finding-13","severity":"high","summary":"Several primary and repeated controls miss an inclusive target-size floor."}],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":"high","detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The supplied journey explicitly reports the console collector as blocked, and no pre-navigation console capture was available.","types":["journey-summary"]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"strict journey capture review","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"Required Stage 2 console collector was unavailable.","sourceStatus":"blocked"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":"high","detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Document basics pass, but 20 of 25 images omit intrinsic dimensions.","types":["image-summary","page-probe-summary"]},"findings":[{"findingId":"site-07-finding-14","severity":"medium","summary":"Most rendered images omit intrinsic dimensions."}],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"issues"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":"high","detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Three requests for the same VTT resource returned 404.","types":["network-summary"]},"findings":[{"findingId":"site-07-finding-15","severity":"medium","summary":"The load includes repeated failed media-caption requests."}],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"issues"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":"high","detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"A descriptive title and meta description are present in raw and rendered HTML.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["page title meta description seo"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":"high","detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page has a viewport meta tag, 95% no-JS content coverage, and 392 of 412 anchors expose hrefs.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":"high","detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"HTTP status is 200; canonical, nine hreflang links, and no accidental noindex were observed.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":"high","detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The rendered homepage exposes two JSON-LD blocks and five Open Graph tags.","types":["page-probe-summary"]},"findings":[],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":"high","detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 5 of 6 baseline security-header categories present. Cookie-attribute review records 9 of 14 records with Secure and 3 with HttpOnly. Names, values, routes, and raw headers remain private.","types":["cookie-attribute-summary","security-header-summary"]},"findings":[{"findingId":"site-07-finding-16","severity":"high","summary":"Transport is strong, but CSP and cookie posture remain permissive."}],"guides":["security","https csp secure cookies content security policy"],"method":"Reviewed transport state, baseline security-header presence, and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":"high","detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 1 first-party origin categories and 27 third-party origin categories across 368 requests. Destinations, identifiers, routes, headers, and bodies remain private.","types":["network-summary","screenshot","tracker-summary"]},"findings":[{"findingId":"site-07-finding-17","severity":"high","summary":"Large advertising and measurement traffic begins before a privacy choice is made."}],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"Reviewed categorical request-origin and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":"medium","detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"No browser permission prompt appeared on load; an authentication form was not part of the exact permitted page state.","types":["screenshot"]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"pass"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":"high","detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 5 of 6 baseline browser-policy header categories present. Values and raw headers remain private.","types":["security-header-summary"]},"findings":[{"findingId":"site-07-finding-18","severity":"medium","summary":"Defensive policy coverage is incomplete."}],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"Reviewed baseline browser-policy header presence from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":"high","detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Raw HTML returned 200 with 95% rendered-content coverage, including title, H1, and description.","types":["discoverability-summary"]},"findings":[],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":"high","detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The privacy dialog remains contained and usable at desktop and 360px without overflow.","types":["layout-summary","screenshot"]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":"high","detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The audited surface is a public news homepage, not an app-like offline workflow; progressive enhancement is judged separately and passes.","types":["discoverability-summary"]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Offline installability is not required for this publication homepage archetype.","sourceStatus":"not-applicable"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":"high","detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"not-run","evidence":{"availability":"retained-private","summary":"No alternate URL or failure route was permitted, and injecting a network failure was outside the supplied bounded journey.","types":["journey-summary"]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The exact-URL and strict-journey boundary did not permit a representative error-state path.","sourceStatus":"not-run"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":"high","detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page declares lang=en, offers language choices, exposes nine hreflang links, and captured CSS uses inline logical properties.","types":["page-probe-summary"]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":"medium","detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The UK-observed page localises subscription currency to GBP and provides language selection.","types":["screenshot"]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":"high","detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No event scheduling or time-zone-sensitive task is present in the exact homepage state.","types":["screenshot"]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The audited homepage state exposes no time-zone-sensitive flow.","sourceStatus":"not-applicable"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":"high","detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Accept all and Reject all have equal visual prominence, Manage preferences is explicit, and policy links are visible.","types":["screenshot"]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":"high","detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No user-submitted form or invalid-input state is present in the exact homepage state.","types":["page-probe-summary"]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The only visible choices are consent actions, not data-entry validation.","sourceStatus":"not-applicable"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":"high","detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No sign-in, address, payment, or comparable text input is present in the audited state.","types":["page-probe-summary"]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"No user text-entry flow is present on the exact homepage state.","sourceStatus":"not-applicable"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":"high","detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"not-run","evidence":{"availability":"retained-private","summary":"A subscription link is present, but cross-origin or different-path commercial navigation was expressly outside the exact-URL boundary.","types":["screenshot"]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"The commercial flow could not be opened without leaving the only permitted URL.","sourceStatus":"not-run"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":"high","detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"All 25 observed images use legacy JPG or PNG formats.","types":["image-summary"]},"findings":[{"findingId":"site-07-finding-19","severity":"medium","summary":"Image delivery relies entirely on legacy formats in the observed state."}],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":"high","detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The initial state transfers [host/path omitted] and executes 259 script requests before content access.","types":["network-summary","performance-summary"]},"findings":[{"findingId":"site-07-finding-20","severity":"high","summary":"The initial page performs disproportionate background and third-party work."}],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":"high","detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Third parties account for [host/path omitted] and 114 requests.","types":["network-summary","tracker-summary"]},"findings":[{"findingId":"site-07-finding-21","severity":"high","summary":"Third-party scripts consume more than half of transferred bytes."}],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":"high","detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"The publication exposes crawlable structured content but no declared agent-action surface; emerging WebMCP capability is treated as an opportunity, not a failure.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"No agent-facing transactional capability is declared for this public homepage.","sourceStatus":"not-applicable"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":"high","detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"retained-private","summary":"No on-device inference feature is part of the homepage purpose.","types":["page-probe-summary"]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"Built-in AI is not necessary for the audited homepage task.","sourceStatus":"not-applicable"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":"medium","detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"After ten bounded down/up scroll cycles, heap self-size fell from [host/path omitted] to [host/path omitted] and node count fell from [host/path omitted] to [host/path omitted].","types":["memory-summary"]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":"high","detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Both snapshots retain roughly 116MB and [host/path omitted] heap nodes.","types":["memory-summary"]},"findings":[{"findingId":"site-07-finding-22","severity":"medium","summary":"The baseline memory footprint is large for a news homepage."}],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"multi-modal evidence review","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"issues"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":"medium","detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The post-scroll snapshot did not grow: nodes, closures, objects, arrays, and total self-size all decreased; Detached constructors were not among the retained leaders.","types":["memory-summary"]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"permit-bound evidence review","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"}],"reportState":"available"},{"disposition":"partial","methodInvalid":false,"ordinal":8,"origin":"https://gemini.google.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":"medium","detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["screenshot"]},"findings":[],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":"high","detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The permit-bound reduced-motion probe reported prefers-reduced-motion: reduce=true but 9 running animations, including two with 1,498,500 ms durations.","types":["other-private-evidence"]},"findings":[{"findingId":"site-08-finding-01","severity":"high","summary":"Long-running motion remains active when reduced motion is requested."}],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"issues"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":"high","detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":"high","detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":"high","detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":"high","detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":"high","detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["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","scroll-state query scrolled sticky header"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":"high","detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":"high","detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":"high","detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Desktop, mobile, and pre-replayed journey screenshots show a modal covering the prompt and main content. On 360x800, the dialog fills most of the viewport and initially exposes only Read more while the decisive controls are below the fold.","types":["screenshot"]},"findings":[{"findingId":"site-08-finding-02","severity":"high","summary":"The consent dialog obscures the primary assistant on first load."}],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":"medium","detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["page-probe-summary","screenshot"]},"findings":[],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":"medium","detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["page-probe-summary","screenshot"]},"findings":[],"guides":["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","reduce visual clutter maximize content"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":"medium","detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["layout-summary","screenshot"]},"findings":[],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":"high","detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":"medium","detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["journey-summary"]},"findings":[],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":"medium","detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["page-probe-summary","screenshot"]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":"high","detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":"high","detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":"high","detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The permit-bound trace measured FCP 6,623 ms and LCP 6,862 ms, well outside the good LCP range; it also recorded 108 ms total blocking time.","types":["performance-summary"]},"findings":[{"findingId":"site-08-finding-03","severity":"high","summary":"Cold-load rendering is too slow."}],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":"medium","detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["layout-summary"]},"findings":[],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":"high","detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The permit-bound trace measured FCP 6,623 ms and LCP 6,862 ms, well outside the good LCP range; it also recorded 108 ms total blocking time.","types":["performance-summary"]},"findings":[{"findingId":"site-08-finding-03","severity":"high","summary":"Cold-load rendering is too slow."}],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":"high","detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The HAR summary recorded 100 requests and 5,424,867 transferred bytes: [host/path omitted] MB of scripts and [host/path omitted] MB of fonts. Two parser-inserted high-priority scripts were render-blocking candidates.","types":["network-summary","other-private-evidence"]},"findings":[{"findingId":"site-08-finding-04","severity":"high","summary":"The initial app shell transfers a disproportionate payload."}],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":"high","detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The HAR captured 51 script requests totalling 3,787,375 transferred bytes before any assistant task was performed, including individual bundles over 1 MB and 700 KB.","types":["other-private-evidence"]},"findings":[{"findingId":"site-08-finding-05","severity":"medium","summary":"The signed-out shell eagerly loads a large script surface."}],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":"high","detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The images primitive found all 5 images without width/height attributes and 4 without alt attributes; the narrow layout still measured CLS [host/path omitted].","types":["image-summary","layout-summary"]},"findings":[{"findingId":"site-08-finding-06","severity":"medium","summary":"Rendered images omit intrinsic dimensions and several omit alt text."}],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":"high","detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":"medium","detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["page-probe-summary","screenshot"]},"findings":[],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":"medium","detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["screenshot"]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":"medium","detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["screenshot"]},"findings":[],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":"high","detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":"high","detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The images primitive found all 5 images without width/height attributes and 4 without alt attributes; the narrow layout still measured CLS [host/path omitted].","types":["image-summary","layout-summary"]},"findings":[{"findingId":"site-08-finding-06","severity":"medium","summary":"Rendered images omit intrinsic dimensions and several omit alt text."}],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"issues"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":"high","detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":"medium","detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["page-probe-summary"]},"findings":[],"guides":["page title meta description seo"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":"high","detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Discoverability evidence measured only 2% rendered-word coverage in raw HTML and classified the page as isJsShell=true; the crawler screenshot contains no useful assistant content.","types":["discoverability-summary"]},"findings":[{"findingId":"site-08-finding-07","severity":"high","summary":"The public entry page is effectively a JavaScript shell for non-JS crawlers."}],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":"medium","detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["page-probe-summary"]},"findings":[],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":"medium","detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The audited entry state does not present this contextual surface.","types":[]},"findings":[],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"Applicability judgement from the signed-out Gemini app archetype","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":"This contextual check is not applicable to the exact signed-out entry state and bounded non-mutating journey.","sourceStatus":"not-applicable"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":"high","detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 4 of 6 baseline security-header categories present. Cookie-attribute review records 1 of 1 records with Secure and 1 with HttpOnly. Names, values, routes, and raw headers remain private.","types":["security-header-summary"]},"findings":[{"findingId":"site-08-finding-08","severity":"medium","summary":"The document security policy leaves avoidable browser-defense gaps."}],"guides":["security","https csp secure cookies content security policy"],"method":"Reviewed transport state, baseline security-header presence, and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":"high","detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 1 first-party origin categories and 8 third-party origin categories across 100 requests. Destinations, identifiers, routes, headers, and bodies remain private.","types":["other-private-evidence","screenshot","tracker-summary"]},"findings":[{"findingId":"site-08-finding-09","severity":"medium","summary":"The signed-out baseline contacts a broad third-party-origin surface."}],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"Reviewed categorical request-origin and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":"high","detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":"high","detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 4 of 6 baseline browser-policy header categories present. Values and raw headers remain private.","types":["security-header-summary"]},"findings":[{"findingId":"site-08-finding-08","severity":"medium","summary":"The document security policy leaves avoidable browser-defense gaps."}],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"Reviewed baseline browser-policy header presence from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":"high","detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The raw document returned HTTP 200 but exposed only 2% of rendered content words without JavaScript and was classified as a JS shell.","types":["discoverability-summary"]},"findings":[{"findingId":"site-08-finding-10","severity":"high","summary":"Core public content does not progressively enhance without JavaScript."}],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"issues"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":"high","detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":"medium","detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The audited entry state does not present this contextual surface.","types":[]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"Applicability judgement from the signed-out Gemini app archetype","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"This contextual check is not applicable to the exact signed-out entry state and bounded non-mutating journey.","sourceStatus":"not-applicable"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":"high","detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":"medium","detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["page-probe-summary"]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":"medium","detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The audited entry state does not present this contextual surface.","types":[]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"Applicability judgement from the signed-out Gemini app archetype","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"This contextual check is not applicable to the exact signed-out entry state and bounded non-mutating journey.","sourceStatus":"not-applicable"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":"medium","detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The audited entry state does not present this contextual surface.","types":[]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"Applicability judgement from the signed-out Gemini app archetype","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"This contextual check is not applicable to the exact signed-out entry state and bounded non-mutating journey.","sourceStatus":"not-applicable"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":"medium","detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Direct evidence on the signed-out entry state supported this outcome under the audited desktop/mobile condition.","types":["page-probe-summary","screenshot"]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"Permit-bound screenshot, DOM, layout, or evaluate probe","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":"high","detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":"high","detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":"high","detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":"high","detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The images primitive found all 5 images without width/height attributes and 4 without alt attributes; the narrow layout still measured CLS [host/path omitted].","types":["image-summary","layout-summary"]},"findings":[{"findingId":"site-08-finding-06","severity":"medium","summary":"Rendered images omit intrinsic dimensions and several omit alt text."}],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":"high","detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":"high","detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The baseline transferred [host/path omitted] MB, including [host/path omitted] MB from non-entry origins, to render a consent-covered assistant shell; scripts and fonts dominate.","types":["other-private-evidence","screenshot"]},"findings":[{"findingId":"site-08-finding-11","severity":"medium","summary":"Initial resource use is disproportionate to the visible signed-out state."}],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":"high","detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The discoverability probe found only 2% raw-HTML word coverage and no useful crawler-visible task surface, leaving non-JS agents to infer the product from metadata.","types":["discoverability-summary"]},"findings":[{"findingId":"site-08-finding-12","severity":"medium","summary":"The AI assistant entry surface is not robustly machine-readable without executing the application."}],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":null,"sourceStatus":"issues"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":"medium","detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The audited entry state does not present this contextual surface.","types":[]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"Applicability judgement from the signed-out Gemini app archetype","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"This contextual check is not applicable to the exact signed-out entry state and bounded non-mutating journey.","sourceStatus":"not-applicable"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":"high","detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":"high","detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"A single permit-bound heap summary contained 763,142 nodes, 3,168,144 edges, and 36,441,757 self-size bytes before any assistant interaction.","types":["memory-summary"]},"findings":[{"findingId":"site-08-finding-13","severity":"medium","summary":"The signed-out, consent-covered shell has a large baseline heap footprint."}],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"Permit-bound raw-CDP evidence and model judgement","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"issues"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":"high","detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"blocked","evidence":{"availability":"retained-private","summary":"The pre-replayed strict journey aborted after mutation-method-OPTIONS on baseline load; the bounded scroll was skipped, and login, prompt submission, account, permission, error, and repeated-interaction states are prohibited by the supplied boundary.","types":["journey-summary"]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"Attempted strict V1 journey or required a prohibited/unavailable interaction state","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":"Exact execution policy and the partial journey prevented direct evidence for this check.","sourceStatus":"blocked"}],"reportState":"available"},{"disposition":"partial","methodInvalid":false,"ordinal":9,"origin":"https://www.netflix.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":"high","detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Dark and default screenshots are byte-identical, while computed color-scheme is normal. The dark visual design is hard-coded rather than preference-driven.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-09-finding-01","severity":"low","summary":"The page does not react to the user color-scheme preference"}],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"issues"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":"medium","detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Reduced-motion evaluate probe reports zero animations, while the default probe reports ten running 4,000ms animations.","types":["page-probe-summary"]},"findings":[],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":"medium","detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Forced-colors/prefers-contrast screenshot keeps text, form borders, buttons, and dismiss control visible.","types":["other-private-evidence"]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":"high","detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The retained DOM/CSS contains no view-transition declarations despite interactive FAQ, carousel, signup, and navigation surfaces.","types":["page-probe-summary"]},"findings":[{"findingId":"site-09-finding-02","severity":"low","summary":"State and route changes do not expose View Transition support"}],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":null,"sourceStatus":"issues"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":"high","detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No parallax, scrollytelling, or entry/exit reveal motion was observed; the horizontal carousel uses native scroll snap without scroll-linked animation.","types":[]},"findings":[],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"Contextual applicability judgement against the audited landing state.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":"No parallax, scrollytelling, or entry/exit reveal motion was observed; the horizontal carousel uses native scroll snap without scroll-linked animation.","sourceStatus":"not-applicable"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":"medium","detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Retained CSS uses mandatory horizontal scroll-snap and logical scroll margins for the trending carousel.","types":["page-probe-summary"]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":null,"sourceStatus":"pass"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":"high","detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The document is 3,266px tall at desktop and 3,970px at mobile, but the retained CSS has no animation-timeline or scroll-state query markers and the planned scroll state was skipped.","types":["journey-summary","layout-summary"]},"findings":[{"findingId":"site-09-finding-03","severity":"low","summary":"The long landing page has no scroll-state-aware guidance"}],"guides":["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","scroll-state query scrolled sticky header"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"issues"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":"high","detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No tooltip, popover, or menu overlay requiring anchored positioning exists in the audited landing state.","types":[]},"findings":[],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"Contextual applicability judgement against the audited landing state.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":"No tooltip, popover, or menu overlay requiring anchored positioning exists in the audited landing state.","sourceStatus":"not-applicable"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":"medium","detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The carousel uses scroll-snap alignment and the visual hierarchy clearly highlights the current hero action.","types":["other-private-evidence","page-probe-summary"]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"pass"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":"high","detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Desktop and mobile screenshots show the cookie banner over the hero; on 360x800 it occupies roughly the top quarter of the viewport before the core task.","types":["other-private-evidence","screenshot"]},"findings":[{"findingId":"site-09-finding-04","severity":"medium","summary":"The cookie banner obscures primary content on load"}],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":"high","detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The live DOM reports zero dialog, popover, and details elements while the cookie preference overlay and six FAQ disclosures are present.","types":["other-private-evidence","page-probe-summary"]},"findings":[{"findingId":"site-09-finding-05","severity":"low","summary":"Dismissible UI is implemented without native overlay primitives"}],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":"medium","detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The first viewport is dominated by content and the core signup action, with minimal persistent chrome.","types":["other-private-evidence"]},"findings":[],"guides":["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","reduce visual clutter maximize content"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"pass"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":"medium","detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Layout evidence reports zero horizontal overflow at both 780x493 and 360x800, with viewport meta present.","types":["layout-summary","screenshot"]},"findings":[],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":"high","detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The retained authored CSS contains no @container rule and computed container-type is normal on inspected components.","types":["page-probe-summary"]},"findings":[{"findingId":"site-09-finding-06","severity":"low","summary":"Components rely on viewport styling rather than container queries"}],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":"medium","detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The focused Sign In link has a 2px solid outline; primary input and button are 56px tall and work without hover.","types":["page-probe-summary"]},"findings":[],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":"medium","detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The headline, £[host/path omitted] starting price, cancellation promise, email field, and Get Started action are prominent in the first viewport.","types":["other-private-evidence"]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":"high","detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Signup requires entering and submitting an email, a hard-denied mutating journey action. It was not executed.","types":[]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"Attempted coverage planning under the strict exact-URL journey policy.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"Signup requires entering and submitting an email, a hard-denied mutating journey action. It was not executed.","sourceStatus":"blocked"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":"high","detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Invalid submission and network-failure states require prohibited mutation/failure injection and were not executed.","types":[]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"Attempted coverage planning under the strict exact-URL journey policy.","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"Invalid submission and network-failure states require prohibited mutation/failure injection and were not executed.","sourceStatus":"blocked"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":"medium","detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Trace reports LCP 2,[host/path omitted] and TBT [host/path omitted]; layout reports CLS [host/path omitted] desktop and 0 mobile. No field INP was claimed.","types":["layout-summary","performance-summary"]},"findings":[],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":"medium","detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Observed CLS is [host/path omitted] desktop and 0 mobile, both in the good range.","types":["layout-summary"]},"findings":[],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":"medium","detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Trace reports two long tasks, longest [host/path omitted], with [host/path omitted] total blocking time.","types":["performance-summary"]},"findings":[],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":"high","detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"HAR summary reports 53 requests and [host/path omitted] MB transferred, including [host/path omitted] MB scripts and 681 KB fonts. A 753 KB framework script and parser-inserted OneTrust script are high-priority candidates.","types":["network-summary","performance-summary"]},"findings":[{"findingId":"site-09-finding-07","severity":"medium","summary":"Initial delivery is heavier than the acquisition task requires"}],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":"high","detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The HAR attributes [host/path omitted] MB of [host/path omitted] MB to non-main origins, including 341 KB reCAPTCHA and 352 KB OneTrust resources before signup interaction.","types":["network-summary"]},"findings":[{"findingId":"site-09-finding-08","severity":"medium","summary":"Third-party and support code dominate initial transfer"}],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":"medium","detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Both email inputs have programmatic labels and autocomplete=email; visible controls have names. Missing alt values apply to decorative hero/logo images.","types":["image-summary","page-probe-summary"]},"findings":[],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":"medium","detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Default, mobile, and forced-colors screenshots keep essential text and controls visibly distinct from their backgrounds.","types":["other-private-evidence","screenshot"]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":"high","detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The probe finds an H1 followed directly by H3 and no main or nav landmark, although keyboard focus is visibly outlined.","types":["page-probe-summary"]},"findings":[{"findingId":"site-09-finding-09","severity":"medium","summary":"The document hierarchy and landmarks are incomplete"}],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":"medium","detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Desktop and mobile screenshots show readable type, sensible wrapping, and no clipped primary copy.","types":["other-private-evidence","screenshot"]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":"high","detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The viewport meta is width=device-width, initial-scale=[host/path omitted], minimum-scale=[host/path omitted], maximum-scale=[host/path omitted]. The maximum-scale restriction prevents user scaling in affected browsers.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-09-finding-10","severity":"high","summary":"The viewport metadata disables pinch zoom"}],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":"high","detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The imported V1 journey explicitly records console capture as blocked, and no permit-bound console collector primitive was available.","types":[]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"Attempted coverage planning under the strict exact-URL journey policy.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The imported V1 journey explicitly records console capture as blocked, and no permit-bound console collector primitive was available.","sourceStatus":"blocked"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":"high","detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The image audit reports 4 of 4 images without width/height and 2 oversized images; the logo natural width is 370px for an 89px display width.","types":["image-summary"]},"findings":[{"findingId":"site-09-finding-11","severity":"medium","summary":"Images omit intrinsic dimensions and some are oversized"}],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"issues"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":"high","detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"BFCache, notification prompt, vulnerable library, and paste-prevention coverage was not available from the retained bounded paths.","types":[]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"Attempted coverage planning under the strict exact-URL journey policy.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"BFCache, notification prompt, vulnerable library, and paste-prevention coverage was not available from the retained bounded paths.","sourceStatus":"blocked"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":"medium","detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The probe records a descriptive localized title and meta description.","types":["page-probe-summary"]},"findings":[],"guides":["page title meta description seo"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":"medium","detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"All 30 links have hrefs and non-empty text; viewport meta is present; raw HTML returns 200.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":"high","detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The page succeeds with HTTP 200 at [route omitted] but the DOM probe finds no canonical URL and source inspection finds no hreflang markers.","types":["discoverability-summary","page-probe-summary"]},"findings":[{"findingId":"site-09-finding-12","severity":"low","summary":"The localized landing page has no canonical or hreflang signal"}],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":"high","detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The DOM includes Open Graph and Twitter metadata, but contains no JSON-LD for the organization/service represented by the page.","types":["page-probe-summary"]},"findings":[{"findingId":"site-09-finding-13","severity":"low","summary":"Share metadata exists but structured entity metadata is absent"}],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":"high","detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 3 of 6 baseline security-header categories present. Cookie-attribute review records 3 of 9 records with Secure and 3 with HttpOnly. Names, values, routes, and raw headers remain private.","types":["cookie-attribute-summary","security-header-summary"]},"findings":[{"findingId":"site-09-finding-14","severity":"high","summary":"Security headers and cookie flags have material gaps"}],"guides":["security","https csp secure cookies content security policy"],"method":"Reviewed transport state, baseline security-header presence, and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":"high","detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 1 first-party origin categories and 11 third-party origin categories across 53 requests. Destinations, identifiers, routes, headers, and bodies remain private.","types":["network-summary","tracker-summary"]},"findings":[{"findingId":"site-09-finding-15","severity":"medium","summary":"Extensive cross-origin code and telemetry load before task interaction"}],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"Reviewed categorical request-origin and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":"high","detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Authentication was outside the permitted path; passkey support and prompt timing could not be exercised.","types":[]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"Attempted coverage planning under the strict exact-URL journey policy.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":"Authentication was outside the permitted path; passkey support and prompt timing could not be exercised.","sourceStatus":"blocked"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":"high","detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 3 of 6 baseline browser-policy header categories present. Values and raw headers remain private.","types":["security-header-summary"]},"findings":[{"findingId":"site-09-finding-16","severity":"medium","summary":"Several browser-enforced policies are absent"}],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"Reviewed baseline browser-policy header presence from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":"medium","detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Discoverability evidence shows 90% rendered-word coverage in raw HTML, with title, H1, and description present and no JS shell.","types":["discoverability-summary"]},"findings":[],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":"medium","detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The cookie banner and hero remain contained at desktop and mobile widths, and the carousel uses native scroll snap.","types":["other-private-evidence","page-probe-summary","screenshot"]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":"high","detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The public acquisition page is not an installed app surface; offline signup cannot complete meaningfully.","types":[]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"Contextual applicability judgement against the audited landing state.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"The public acquisition page is not an installed app surface; offline signup cannot complete meaningfully.","sourceStatus":"not-applicable"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":"high","detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Network failure and error-route injection were outside the exact-URL bounded run.","types":[]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"Attempted coverage planning under the strict exact-URL journey policy.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Network failure and error-route injection were outside the exact-URL bounded run.","sourceStatus":"blocked"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":"high","detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"html lang is en but dir is empty; retained CSS contains many physical left/right declarations, although some logical scroll-margin-inline is used.","types":["page-probe-summary"]},"findings":[{"findingId":"site-09-finding-17","severity":"low","summary":"The localized page does not declare direction and still ships substantial physical-direction CSS"}],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"issues"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":"medium","detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The GB page renders pound pricing and retained source includes Intl usage rather than only hand-written locale formatting.","types":["other-private-evidence","page-probe-summary"]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":"high","detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The audited landing page presents no dates, events, recurrence, or time-zone-sensitive data.","types":[]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"Contextual applicability judgement against the audited landing state.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The audited landing page presents no dates, events, recurrence, or time-zone-sensitive data.","sourceStatus":"not-applicable"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":"medium","detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Visible pricing and cancellation terms are adjacent to the CTA; Reject and Accept consent actions have equal prominence.","types":["other-private-evidence","screenshot"]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":"high","detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Invalid form submission is a prohibited mutating action and was not executed.","types":[]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"Attempted coverage planning under the strict exact-URL journey policy.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Invalid form submission is a prohibited mutating action and was not executed.","sourceStatus":"blocked"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":"medium","detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Both email fields use type=email, programmatic labels, and autocomplete=email.","types":["page-probe-summary"]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":"high","detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Subscription and account flows are hard-denied by the strict journey policy and were not executed.","types":[]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"Attempted coverage planning under the strict exact-URL journey policy.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Subscription and account flows are hard-denied by the strict journey policy and were not executed.","sourceStatus":"blocked"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":"high","detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Image evidence reports 2 oversized images, 2 legacy-format images, and missing intrinsic dimensions on all four img elements.","types":["image-summary"]},"findings":[{"findingId":"site-09-finding-18","severity":"medium","summary":"Several first-view assets are not optimally sized or encoded"}],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":"high","detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The initial load transfers a 341 KB reCAPTCHA script, 352 KB of OneTrust resources, and six logging requests before the signup action is used.","types":["network-summary","tracker-summary"]},"findings":[{"findingId":"site-09-finding-19","severity":"medium","summary":"Task-specific work is eagerly loaded before user intent"}],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":"high","detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"HAR summary reports [host/path omitted] MB cross-origin transfer, 681 KB fonts, and [host/path omitted] MB scripts for a static acquisition first view.","types":["network-summary"]},"findings":[{"findingId":"site-09-finding-20","severity":"medium","summary":"The initial third-party and font budget is disproportionate"}],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":"high","detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"Agent capabilities are emerging and no agent-facing surface is intended for this consumer acquisition state.","types":[]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"Contextual applicability judgement against the audited landing state.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"Agent capabilities are emerging and no agent-facing surface is intended for this consumer acquisition state.","sourceStatus":"not-applicable"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":"high","detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No observed landing-page task benefits from on-device inference.","types":[]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"Contextual applicability judgement against the audited landing state.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"No observed landing-page task benefits from on-device inference.","sourceStatus":"not-applicable"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":"medium","detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"After ten bounded scroll cycles, heap self size increased only 5,079 bytes while node and edge counts decreased.","types":["memory-summary"]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":"medium","detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Baseline heap is [host/path omitted] MB self size for the media landing page and remains stable after repeated scrolling.","types":["memory-summary"]},"findings":[],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":"medium","detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"No Detached constructor appears in either top-constructor summary; node count falls from 621,070 to 620,495 after repeated scrolling.","types":["memory-summary"]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"Direct permitted evidence review against pinned guidance.","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"}],"reportState":"available"},{"disposition":"partial","methodInvalid":false,"ordinal":10,"origin":"https://www.apple.com","outcomes":[{"checkId":"respects-color-scheme","checkSummary":"Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.","confidence":"high","detectableVia":"HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Dark-emulation screenshot remained visually identical to the light baseline, and the CSS probe found no color-scheme or prefers-color-scheme signal.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-01","severity":"medium","summary":"No user-preference dark theme"}],"guides":["dark-mode","component-specific-light-dark-theme","dark mode color-scheme prefers-color-scheme light-dark theming"],"method":"Planned from a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corrob","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"issues"},{"checkId":"respects-reduced-motion","checkSummary":"Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.","confidence":"high","detectableVia":"HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Under prefers-reduced-motion: reduce, 18 animations remained with the same 240 ms durations and the CSS probe found no reduced-motion rule.","types":["page-probe-summary","video"]},"findings":[{"findingId":"site-10-finding-02","severity":"medium","summary":"Reduced-motion preference does not reduce animation"}],"guides":["accessibility","respect reduced motion preference accessible animation"],"method":"Planned from a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model c","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"issues"},{"checkId":"respects-contrast","checkSummary":"Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.","confidence":"high","detectableVia":"HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Forced-colors and prefers-contrast capture preserved visible text, controls, outlines, and button boundaries.","types":["other-private-evidence"]},"findings":[],"guides":["adapt-scrollbar-to-contrast-preferences","high contrast prefers-contrast forced colors"],"method":"Planned from a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.","methodInvalid":false,"principleId":"respect-user-preferences","principleTitle":"Respect user preferences","reason":null,"sourceStatus":"pass"},{"checkId":"view-transitions","checkSummary":"State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.","confidence":"medium","detectableVia":"HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The CSS probe found no view-transition usage despite multiple stateful galleries and navigational surfaces.","types":["page-probe-summary"]},"findings":[{"findingId":"site-10-finding-03","severity":"low","summary":"State changes do not use View Transitions"}],"guides":["same-document-transitions","cross-document-transitions","group-element-transitions","faster-spa-view-transitions","view transitions smooth state route change"],"method":"Planned from a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":null,"sourceStatus":"issues"},{"checkId":"scroll-driven-animations","checkSummary":"Scroll-linked motion (parallax, scrollytelling, entry/exit reveals) uses declarative CSS scroll-driven animations (off main thread) instead of scroll event listeners.","confidence":"medium","detectableVia":"HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The page contains scroll and gallery motion, but the CSS probe found no animation-timeline, scroll-timeline, or view-timeline signal.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-04","severity":"low","summary":"Scroll-linked experiences do not use declarative timelines"}],"guides":["scrollytelling","parallax-scroll-effects","scroll-entry-exit-effects","carousel-slide-effects","scroll-driven animations animation-timeline"],"method":"Planned from source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":null,"sourceStatus":"issues"},{"checkId":"physical-gestures","checkSummary":"Gesture-driven interactions and entry/exit motion feel native (declarative overscroll/scroll-snap, physics-based easing, animating to intrinsic sizes, pull/swipe gestures) rather than fighting the platform with custom pointer handlers.","confidence":"medium","detectableVia":"HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The bounded wheel journey produced a native 246 CSS px scroll with no horizontal movement or gesture trapping.","types":["screenshot"]},"findings":[],"guides":["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","natural gesture interaction scroll snap overscroll"],"method":"Planned from CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.","methodInvalid":false,"principleId":"implement-natural-interactions","principleTitle":"Implement natural interactions","reason":null,"sourceStatus":"pass"},{"checkId":"scroll-state-aware-chrome","checkSummary":"Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.","confidence":"medium","detectableVia":"HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Baseline and scrolled journey screenshots show unchanged static header chrome, and the CSS probe found no scroll-state or timeline signal.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-05","severity":"low","summary":"Header chrome does not respond to scroll state"}],"guides":["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","scroll-state query scrolled sticky header"],"method":"Planned from a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"issues"},{"checkId":"anchored-positioning","checkSummary":"Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.","confidence":"medium","detectableVia":"HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Header menus and overlay surfaces are present, but the CSS probe found no anchor-name, position-anchor, or position-try usage.","types":["page-probe-summary"]},"findings":[{"findingId":"site-10-finding-06","severity":"low","summary":"Overlay positioning does not use CSS anchors"}],"guides":["anchor-positioning-tab-underline","position-aware-tooltips","interest-triggered-tooltips","interest-triggered-action-previews","anchor positioning tooltip popover position-try"],"method":"Planned from CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"issues"},{"checkId":"directs-attention","checkSummary":"Navigation and in-page jumps guide attention (highlight effects, scroll/carousel markers, directional transitions, drill-down and drawer navigation) so the user can follow where focus moved.","confidence":"medium","detectableVia":"HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The initial hero has clear hierarchy and the bounded scroll carries attention directly from the CTA area into the product visual without disorientation.","types":["screenshot"]},"findings":[],"guides":["directional-navigation-transitions","carousel-snap-highlights","navigation-drawer","stack-drill-down","persistent-app-tours","persistent-toast-notifications","scroll marker highlight guide attention navigation"],"method":"Planned from CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.","methodInvalid":false,"principleId":"provide-guided-navigation","principleTitle":"Provide guided navigation","reason":null,"sourceStatus":"pass"},{"checkId":"no-intrusive-interruptions","checkSummary":"No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.","confidence":"high","detectableVia":"HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"A fixed country or region chooser is present on load and consumes a substantial portion of the first viewport before the product content.","types":["page-probe-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-07","severity":"medium","summary":"Locale chooser dominates the first viewport"}],"guides":["light-dismiss-a-dialog","platform-controls-dismiss-dialog","avoid intrusive interstitial popup content first"],"method":"Planned from a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"semantic-dismissible-primitives","checkSummary":"Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.","confidence":"high","detectableVia":"HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The load-time locale surface is a custom fixed ASIDE; the probe found zero dialog, popover, or details primitives.","types":["page-probe-summary"]},"findings":[{"findingId":"site-10-finding-08","severity":"medium","summary":"Locale overlay uses custom fixed chrome"}],"guides":["declarative-dialog-popover-control","animated-select-picker","branded-select-styling","brand-consistent-forms","custom-select-picker-layouts","rich-media-picker","popover dialog light dismiss semantic overlay"],"method":"Planned from DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"reduced-chrome","checkSummary":"Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.","confidence":"high","detectableVia":"HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"At 780x493, the locale chooser plus navigation occupies about 183 px, roughly 37% of the first viewport, before primary content.","types":["screenshot"]},"findings":[{"findingId":"site-10-finding-07","severity":"medium","summary":"Locale chooser dominates the first viewport"}],"guides":["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","reduce visual clutter maximize content"],"method":"Planned from a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.","methodInvalid":false,"principleId":"maximize-content-reduce-noise","principleTitle":"Maximize content, reduce noise","reason":null,"sourceStatus":"issues"},{"checkId":"responsive-no-horizontal-scroll","checkSummary":"Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.","confidence":"high","detectableVia":"HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"At 360x800, layout reported scrollWidth 360, clientWidth 360, zero horizontal overflow, and a valid viewport meta tag.","types":["layout-summary","screenshot"]},"findings":[],"guides":["fluid-scaling","calculate-with-intrinsic-sizes","css-layout","responsive layout adapt viewport mobile"],"method":"Planned from layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"pass"},{"checkId":"component-level-responsiveness","checkSummary":"Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.","confidence":"medium","detectableVia":"HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The responsive page uses no detectable @container or container-type rules, so reused components rely on page-level adaptation only.","types":["layout-summary","page-probe-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-09","severity":"low","summary":"Components do not use container queries"}],"guides":["size-aware-styling","content-based-styling","child-state-based-styling","design-token-reactivity","dynamic-sibling-styling","form-fields-automatically-fit-contents","container queries component responsive"],"method":"Planned from CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"input-modality-aware","checkSummary":"Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.","confidence":"high","detectableVia":"HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The focused locale control has a visible 2 px outline, but the locale close button measures only 18x18 CSS px.","types":["page-probe-summary"]},"findings":[{"findingId":"site-10-finding-10","severity":"medium","summary":"Locale close target is too small"}],"guides":["touch target size hover fallback pointer input focus-visible"],"method":"Planned from a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.","methodInvalid":false,"principleId":"adapt-to-the-form-factor","principleTitle":"Adapt to the form factor","reason":null,"sourceStatus":"issues"},{"checkId":"clear-purpose-and-primary-action","checkSummary":"The page communicates what it is for and exposes the primary next action without requiring users to hunt through decorative content, generic copy, or competing calls to action.","confidence":"high","detectableVia":"HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The first viewport names the iPhone offer and exposes Learn more and Shop iPhone actions with strong visual hierarchy.","types":["screenshot"]},"findings":[],"guides":["direct user attention primary action visual hierarchy task success","improve-text-layout-and-legibility","scrollability-affordance-hints"],"method":"Planned from screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":null,"sourceStatus":"pass"},{"checkId":"primary-flow-completion","checkSummary":"The representative primary flow can be completed end-to-end with predictable steps, no avoidable dead ends, no hidden required information, and no needless detours through modals, account walls, or upsells.","confidence":"high","detectableVia":"HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The reviewed boundary permits only the exact homepage URL, so following Shop iPhone or another primary action was prohibited.","types":[]},"findings":[],"guides":["forms","custom-button-actions","persistent-toast-notifications","primary user journey task completion"],"method":"Planned from run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"Only the exact input URL is permitted.","sourceStatus":"blocked"},{"checkId":"clear-system-state-and-recovery","checkSummary":"Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.","confidence":"high","detectableVia":"HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"No error, offline, empty, or completion state could be reached without network mutation or another URL.","types":[]},"findings":[],"guides":["accessible-error-announcement","required-field-feedback","validate-input-after-interaction","persistent-toast-notifications","loading empty error success retry undo cancel state"],"method":"Planned from exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain","methodInvalid":false,"principleId":"support-core-task-success","principleTitle":"Support core task success","reason":"The strict journey and exact-URL boundary prohibit the required failure-state exercise.","sourceStatus":"blocked"},{"checkId":"good-core-web-vitals","checkSummary":"Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.","confidence":"high","detectableVia":"HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The trace measured LCP 8477 ms and FCP 6311 ms; mobile layout measured CLS [host/path omitted], outside the good thresholds.","types":["layout-summary","performance-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-11","severity":"high","summary":"Slow LCP and unstable mobile load"}],"guides":["identify-inp-causes","schedule-tasks-by-priority","optimize-preload-priority","improve-next-page-load-performance","interactions-in-complex-layouts","performance","improve core web vitals LCP INP CLS"],"method":"Planned from Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal fir","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"visual-stability","checkSummary":"No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.","confidence":"high","detectableVia":"HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Layout measured CLS [host/path omitted] on mobile and [host/path omitted] on desktop, including a single mobile shift of [host/path omitted].","types":["layout-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-11","severity":"high","summary":"Slow LCP and unstable mobile load"}],"guides":["visually-stable-font-fallbacks","prevent layout shift reserve space CLS aspect-ratio"],"method":"Planned from the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"efficient-main-thread","checkSummary":"The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.","confidence":"high","detectableVia":"HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The trace found zero long tasks and 0 ms total blocking time during the captured load.","types":["performance-summary"]},"findings":[],"guides":["break-up-long-tasks","identify-heavy-scripts","optimize-script-priority","defer-rendering-heavy-content","defer-work-until-scroll-ends","reduce main thread work long tasks total blocking time"],"method":"Planned from the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"pass"},{"checkId":"efficient-resource-delivery","checkSummary":"Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.","confidence":"high","detectableVia":"HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The HAR recorded 51 requests and [host/path omitted] MB transferred, including 10 parser-inserted render-blocking candidates and [host/path omitted] MB of fonts.","types":["network-summary"]},"findings":[{"findingId":"site-10-finding-12","severity":"high","summary":"Heavy render-blocking delivery path"}],"guides":["optimize-image-priority","optimize-preload-priority","optimize-script-priority","visually-stable-font-fallbacks","cache headers render blocking font display modern http network dependency tree"],"method":"Planned from a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discover","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":null,"sourceStatus":"issues"},{"checkId":"trim-unused-and-duplicate-code","checkSummary":"The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.","confidence":"medium","detectableVia":"HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The HAR identified script weight but no code-coverage evidence was available to distinguish used from unused or duplicated code.","types":[]},"findings":[],"guides":["identify-heavy-scripts","conditional-async-dependencies","defer-rendering-heavy-content","unused javascript css duplicated javascript third party cost"],"method":"Planned from Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model","methodInvalid":false,"principleId":"be-fast-and-stable","principleTitle":"Be fast and stable","reason":"The permitted evidence primitives in this run did not expose JavaScript or CSS coverage.","sourceStatus":"blocked"},{"checkId":"names-roles-labels","checkSummary":"Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.","confidence":"medium","detectableVia":"HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The DOM probe found labelled search controls, extensive landmarks, and alt attributes on all img elements; visible primary actions have descriptive names.","types":["page-probe-summary"]},"findings":[],"guides":["accessibility","expose-canvas-content-to-browser-features","accessible name label role form field aria"],"method":"Planned from axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"sufficient-contrast","checkSummary":"Text and essential UI meet WCAG colour-contrast minimums against their background.","confidence":"medium","detectableVia":"HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Normal and forced-colors screenshots retain legible text and clear essential-control boundaries.","types":["other-private-evidence","screenshot"]},"findings":[],"guides":["color contrast WCAG text legibility"],"method":"Planned from axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"structure-and-focus","checkSummary":"Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.","confidence":"high","detectableVia":"HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Focus is visibly outlined, but the heading inventory contains a generic H1 of Apple and one empty H2 among 55 headings.","types":["page-probe-summary"]},"findings":[{"findingId":"site-10-finding-13","severity":"medium","summary":"Heading structure is weak"}],"guides":["move-dom-element-without-losing-state","heading structure landmarks focus order keyboard"],"method":"Planned from axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"legible-text","checkSummary":"Text is legible and inclusively rendered: comfortable line layout, precise alignment, stable rendering across mixed fonts, no clipping or cramped wrapping that harms comprehension.","confidence":"high","detectableVia":"HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Desktop, mobile, and journey captures show unclipped, comfortably spaced hero and supporting text.","types":["layout-summary","screenshot"]},"findings":[],"guides":["improve-text-layout-and-legibility","precise-text-alignment","visually-stable-mixed-fonts","legible text layout reading comfort"],"method":"Planned from a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"pass"},{"checkId":"zoom-reflow-targets-and-media","checkSummary":"The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.","confidence":"high","detectableVia":"HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The 360 px page reflows without overflow, but the locale close control is only 18x18 CSS px, below an adequate touch target.","types":["layout-summary","page-probe-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-10","severity":"medium","summary":"Locale close target is too small"}],"guides":["accessibility","fluid-scaling","calculate-with-intrinsic-sizes","target size zoom reflow captions viewport user scalable"],"method":"Planned from Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The mo","methodInvalid":false,"principleId":"be-inclusive","principleTitle":"Be inclusive","reason":null,"sourceStatus":"issues"},{"checkId":"no-console-errors","checkSummary":"The page loads without console errors or uncaught exceptions.","confidence":"high","detectableVia":"HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The supplied strict journey recorded its required console collector as blocked, and no equivalent Runtime/Log stream was retained.","types":[]},"findings":[],"guides":["avoid console errors uncaught exceptions"],"method":"Planned from capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"Required Stage 2 console collector was unavailable in the supplied V1 journey.","sourceStatus":"blocked"},{"checkId":"sound-document-and-assets","checkSummary":"Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)","confidence":"high","detectableVia":"HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Doctype and UTF-8 are valid, but all 52 img elements lack width and height attributes; measured mobile CLS is [host/path omitted].","types":["image-summary","layout-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-14","severity":"high","summary":"Images do not reserve intrinsic space"}],"guides":["css","html","reduce-style-repetition","valid doctype charset image aspect ratio deprecated api best practices"],"method":"Planned from a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":null,"sourceStatus":"issues"},{"checkId":"browser-platform-hygiene","checkSummary":"The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.","confidence":"medium","detectableVia":"HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"No deprecation, BFCache, source-map, vulnerable-library, or paste-prevention diagnostic was retained.","types":[]},"findings":[],"guides":["html","security","baseline deprecated api bfcache source maps inspector issues paste prevention geolocation notification on load"],"method":"Planned from Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.","methodInvalid":false,"principleId":"follow-best-practices","principleTitle":"Follow best practices","reason":"The bounded run did not include the required inspector and BFCache diagnostics.","sourceStatus":"blocked"},{"checkId":"title-and-description","checkSummary":"The page has a unique, descriptive <title> and a meta description.","confidence":"high","detectableVia":"HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The title is only Apple and there is no meta description, although Open Graph description metadata exists.","types":["page-probe-summary"]},"findings":[{"findingId":"site-10-finding-15","severity":"medium","summary":"Homepage metadata is too generic"}],"guides":["page title meta description seo"],"method":"Planned from a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"issues"},{"checkId":"crawlable-and-mobile-friendly","checkSummary":"Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.","confidence":"high","detectableVia":"HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The probe found a viewport meta tag and 347 real href links; discoverability found 96% raw-HTML content coverage.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["crawlable links viewport meta robots descriptive link text"],"method":"Planned from a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"canonical-and-indexing-signals","checkSummary":"Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.","confidence":"high","detectableVia":"HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The document returned 200, declares the homepage canonical, provides 137 hreflang links, and has no noindex robots meta.","types":["discoverability-summary","page-probe-summary"]},"findings":[],"guides":["canonical hreflang http status robots sitemap noindex seo indexing"],"method":"Planned from inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, [host/path omitted] and [host/path omitted]; Lighthouse SEO audits cover several of these. The model chooses.","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"structured-and-shareable-metadata","checkSummary":"Where the page represents an article, product, organization, event, place or other rich entity, structured data and share-preview metadata accurately describe the visible content.","confidence":"high","detectableVia":"HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page exposes three JSON-LD blocks plus Open Graph title, description, and image matching the visible brand content.","types":["page-probe-summary"]},"findings":[],"guides":["structured data schema.org json-ld open graph social preview metadata"],"method":"Planned from inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse [host/path omitted] blocks. The model c","methodInvalid":false,"principleId":"be-discoverable","principleTitle":"Be discoverable","reason":null,"sourceStatus":"pass"},{"checkId":"secure-transport-and-headers","checkSummary":"Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.","confidence":"high","detectableVia":"HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 5 of 6 baseline security-header categories present. Cookie-attribute review records 5 of 6 records with Secure and 0 with HttpOnly. Names, values, routes, and raw headers remain private.","types":["cookie-attribute-summary","security-header-summary"]},"findings":[{"findingId":"site-10-finding-16","severity":"high","summary":"CSP and cookie transport defenses are weakened"}],"guides":["security","https csp secure cookies content security policy"],"method":"Reviewed transport state, baseline security-header presence, and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"data-minimisation-and-third-parties","checkSummary":"No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.","confidence":"high","detectableVia":"HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 1 first-party origin categories and 1 third-party origin categories across 51 requests. Destinations, identifiers, routes, headers, and bodies remain private.","types":["cookie-attribute-summary","network-summary","security-header-summary"]},"findings":[{"findingId":"site-10-finding-17","severity":"medium","summary":"Analytics and identifiers activate on baseline load"}],"guides":["privacy","batch-analytics-events","full-session-analytics","calculate-total-foreground-time","data minimisation third party privacy analytics"],"method":"Reviewed categorical request-origin and cookie-attribute counts from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"in-context-permissions-and-modern-auth","checkSummary":"Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.","confidence":"medium","detectableVia":"HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"No browser permission prompt appeared on load; authentication is not part of the audited homepage state.","types":["screenshot"]},"findings":[],"guides":["passkeys","passkey-registration","passkey-authentication","passkey-reauthentication","passkey-conditional-create","passkey-management","in-context permission prompt passkeys webauthn"],"method":"Planned from a probe for permission requests fired on load; source inspection for passkey / WebAuthn / [host/path omitted] usage in auth flows. The model chooses.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"pass"},{"checkId":"defensive-browser-policies","checkSummary":"Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.","confidence":"high","detectableVia":"HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Retained evidence records 5 of 6 baseline browser-policy header categories present. Values and raw headers remain private.","types":["cookie-attribute-summary","security-header-summary"]},"findings":[{"findingId":"site-10-finding-18","severity":"medium","summary":"Permissions policy is absent"}],"guides":["security","privacy","hsts clickjacking frame-ancestors trusted types origin isolation referrer policy permissions policy third-party cookies"],"method":"Reviewed baseline browser-policy header presence from retained private evidence.","methodInvalid":false,"principleId":"be-private-and-secure","principleTitle":"Be private and secure","reason":null,"sourceStatus":"issues"},{"checkId":"progressive-enhancement","checkSummary":"Core content and primary flows are reachable and usable without JavaScript and on older or non-Baseline browsers; modern features layer on as enhancements with fallbacks, and reactive/transition state stabilises rather than flickering before it settles.","confidence":"high","detectableVia":"HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Discoverability measured 96% of rendered content in raw HTML, with title and H1 present and no empty JavaScript shell.","types":["discoverability-summary"]},"findings":[],"guides":["flicker-free-client-side-ab-testing","consistent-cross-document-transitions","stabilize-reactive-state","progressive enhancement graceful degradation no javascript baseline fallback"],"method":"Planned from load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":null,"sourceStatus":"pass"},{"checkId":"resilient-runtime-behaviour","checkSummary":"The page behaves robustly at runtime: overlays and menus never get cut off, DOM state survives moves, background work and async dependencies are sequenced and conditional rather than fragile, and initial visibility state is detected correctly.","confidence":"medium","detectableVia":"HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The supplied journey only loaded and scrolled; menu-edge placement and repeated async overlay state were not exercised.","types":[]},"findings":[],"guides":["resilient-context-menus-and-nested-dropdowns","move-dom-element-without-losing-state","persistent-top-layer-ui","detect-initial-visibility-state","conditional-async-dependencies","sequence-distributed-events","robust overlay state async resilience"],"method":"Planned from exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Strict supplied journey did not include disclosure or menu actions.","sourceStatus":"blocked"},{"checkId":"offline-and-installable","checkSummary":"Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)","confidence":"high","detectableVia":"HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"The audited surface is a public product-marketing and commerce homepage, not an installable web application; no offline app intent was declared.","types":[]},"findings":[],"guides":["offline fallback service worker web app manifest installable pwa"],"method":"Planned from a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Offline installability is contextual and does not apply to this audited surface.","sourceStatus":"not-applicable"},{"checkId":"network-and-http-failure-states","checkSummary":"HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.","confidence":"high","detectableVia":"HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The exact-URL policy and strict journey did not permit simulated HTTP failures or navigation to an error route.","types":[]},"findings":[],"guides":["persistent-toast-notifications","detect-initial-visibility-state","conditional-async-dependencies","http error network failure timeout retry stale data resilient state"],"method":"Planned from simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The mo","methodInvalid":false,"principleId":"be-resilient","principleTitle":"Be resilient","reason":"Failure injection and alternate URLs were outside the execution boundary.","sourceStatus":"blocked"},{"checkId":"lang-dir-and-logical-properties","checkSummary":"Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.","confidence":"high","detectableVia":"HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The document declares en-US and ltr, uses logical CSS properties, and provides 137 hreflang alternatives including RTL locales.","types":["page-probe-summary"]},"findings":[],"guides":["translator","language-detection","lang dir logical properties translation ready bidi"],"method":"Planned from a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"locale-aware-data","checkSummary":"Dates, numbers, currencies, durations and calendar systems are formatted locale-aware (Intl), location-agnostic where stored, and recurring intervals and event differentials are modelled correctly.","confidence":"medium","detectableVia":"HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The page presents region-specific content and a country chooser, and exposes extensive locale-specific alternate URLs.","types":["page-probe-summary"]},"findings":[],"guides":["support-global-calendar-systems","capture-location-agnostic-data","format-human-readable-durations","manage-recurring-intervals","calculate-event-differentials","locale aware dates numbers currency intl calendar"],"method":"Planned from source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":null,"sourceStatus":"pass"},{"checkId":"time-zone-correctness","checkSummary":"Time handling survives time zones and DST: events coordinate across zones, partial time concepts are modelled, and stored times are unambiguous.","confidence":"high","detectableVia":"HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No time, event, recurrence, or time-zone-sensitive data appears in the audited homepage and journey states.","types":[]},"findings":[],"guides":["coordinate-global-events","model-partial-time-concepts","time zone dst event coordination partial time"],"method":"Planned from source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.","methodInvalid":false,"principleId":"be-internationalised","principleTitle":"Be internationalised","reason":"The audited surface contains no time-zone-sensitive content.","sourceStatus":"not-applicable"},{"checkId":"no-dark-patterns","checkSummary":"No deceptive design: no confirmshaming, forced continuity, disguised ads, or nagging consent walls; honest defaults; clear pricing and consent; easy reversal/cancel; predictable, declaratively-wired actions; and no hidden-text tricks (hidden content stays deep-linkable and indexable rather than used to deceive).","confidence":"medium","detectableVia":"HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The locale prompt states its purpose plainly, offers a close control, and uses neutral Continue wording without confirmshaming.","types":["screenshot"]},"findings":[],"guides":["custom-button-actions","search-hidden-content","swipe-to-remove","honest defaults no dark patterns confirmshaming forced continuity consent"],"method":"Planned from a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":null,"sourceStatus":"pass"},{"checkId":"humane-error-handling","checkSummary":"Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.","confidence":"high","detectableVia":"HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"The page contains search, but strict journey policy prohibited input mutation and submission, so validation and recovery could not be tested.","types":[]},"findings":[],"guides":["forms","validate-input-after-interaction","required-field-feedback","select-menu-interaction","accessible-error-announcement","style-parent-with-has","humane form validation error prevention recovery user-invalid"],"method":"Planned from exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Form input and submission are forbidden by the strict journey policy.","sourceStatus":"blocked"},{"checkId":"trustworthy-input-assistance","checkSummary":"Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.","confidence":"high","detectableVia":"HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No address, payment, sign-in, or sign-up fields appear in the audited state; the only field is site search.","types":[]},"findings":[],"guides":["autofill-address-form","autofill-payment-form","autofill-sign-in-form","autofill-sign-up-form","autofill-highlight-inputs","autocomplete autofill address payment sign-in input assistance"],"method":"Planned from source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Autofill assistance for transactional input does not apply to the audited homepage state.","sourceStatus":"not-applicable"},{"checkId":"safe-commercial-and-account-flows","checkSummary":"Checkout, subscription, consent, authentication and account-management flows are clear, reversible, and proportionate: pricing and commitments are visible, cancellation is findable, sensitive actions re-authenticate when appropriate, and users are not tricked into continuity.","confidence":"high","detectableVia":"HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.","displayStatus":"blocked","evidence":{"availability":"described-only","summary":"Commercial links are visible, but checkout, subscription, authentication, and account routes could not be entered under the exact-URL boundary.","types":[]},"findings":[],"guides":["autofill-payment-form","autofill-sign-in-form","passkey-reauthentication","passkey-management","clear pricing consent cancellation subscription checkout account flow"],"method":"Planned from walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support","methodInvalid":false,"principleId":"be-trustworthy","principleTitle":"Be trustworthy","reason":"Only the exact homepage URL is permitted.","sourceStatus":"blocked"},{"checkId":"optimised-assets","checkSummary":"Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.","confidence":"high","detectableVia":"HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Image inspection found 52 legacy-format images, 31 below-fold images without lazy loading, and 23 images without responsive srcset.","types":["image-summary","layout-summary","screenshot"]},"findings":[{"findingId":"site-10-finding-19","severity":"high","summary":"Image delivery is not resource-efficient"}],"guides":["deliver-optimized-decorative-images","optimize-image-priority","resolution-optimized-pseudo-elements","optimized images appropriate resolution page weight budget"],"method":"Planned from inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"no-wasteful-work","checkSummary":"Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.","confidence":"high","detectableVia":"HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"Initial load shipped a 104 KB analytics script plus data-relay scripts and contacted securemetrics before user interaction.","types":["network-summary"]},"findings":[{"findingId":"site-10-finding-20","severity":"medium","summary":"Non-essential analytics work starts immediately"}],"guides":["deprioritize-background-fetches","efficient-background-processing","avoid wasteful background work over-fetching carbon efficiency"],"method":"Planned from a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"third-party-and-media-budget","checkSummary":"Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.","confidence":"high","detectableVia":"HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.","displayStatus":"issues","evidence":{"availability":"retained-private","summary":"The homepage transferred [host/path omitted] MB, with [host/path omitted] MB of fonts, 424 KB of scripts, and three hero media requests including two aborted requests.","types":["network-summary"]},"findings":[{"findingId":"site-10-finding-21","severity":"high","summary":"Font, script, and media budget is excessive"}],"guides":["deliver-optimized-decorative-images","deprioritize-background-fetches","efficient-background-processing","third-party scripts fonts video autoplay media budget cache resource efficiency"],"method":"Planned from a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation ke","methodInvalid":false,"principleId":"be-sustainable","principleTitle":"Be sustainable","reason":null,"sourceStatus":"issues"},{"checkId":"structured-agent-capabilities","checkSummary":"Where it makes sense, the site exposes structured, safe capabilities to agents via WebMCP tools, agentic forms, and agentic JavaScript tools rather than leaving agents to scrape and guess.","confidence":"high","detectableVia":"HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No agent-facing intent is declared for this audited marketing homepage; raw content remains highly machine-readable at 96% coverage.","types":[]},"findings":[],"guides":["webmcp","agentic-forms","agentic-javascript-tools","webmcp agentic tools agent ready machine readable"],"method":"Planned from source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"This emerging capability is contextual and no agent-facing surface was declared.","sourceStatus":"not-applicable"},{"checkId":"on-device-inference","checkSummary":"On-device inference (built-in language model, summariser) is used appropriately where it improves the experience, rather than shipping every task to a server.","confidence":"high","detectableVia":"HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.","displayStatus":"not-applicable","evidence":{"availability":"described-only","summary":"No page feature calls for on-device inference in the audited homepage and journey states.","types":[]},"findings":[],"guides":["language-model","summarizer","on-device built-in ai language model summarizer"],"method":"Planned from source inspection for built-in AI (language model / summariser) usage. The model chooses.","methodInvalid":false,"principleId":"be-agent-ready","principleTitle":"Be agent ready","reason":"On-device inference is contextual and no relevant task is present.","sourceStatus":"not-applicable"},{"checkId":"no-leak-under-repeated-interaction","checkSummary":"Repeating a representative interaction (open/close a modal, navigate a route and back, infinite-scroll a list) about 10 times does not grow retained heap without bound; what is allocated during the interaction is released when it ends.","confidence":"high","detectableVia":"HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"After ten scroll-to-500-and-back cycles, heap self-size rose only 9,131 bytes, about [host/path omitted]%, while closure count fell by four.","types":["memory-summary"]},"findings":[],"guides":["memory leak retained heap growth under repeated interaction long single-page-app session"],"method":"Planned from compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repe","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"bounded-footprint","checkSummary":"Heap size and DOM node count are reasonable for what the page is; the footprint is proportionate rather than bloated.","confidence":"medium","detectableVia":"HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"The baseline heap was [host/path omitted] MB self-size with 297,024 nodes, proportionate to the media-rich homepage and stable after exercise.","types":["memory-summary"]},"findings":[],"guides":["bounded memory footprint javascript heap size page weight proportionate allocations"],"method":"Planned from a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus [host/path omitted] (Nodes, JSHeapUsedSize) give the current footprint to judge aga","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"},{"checkId":"no-detached-dom-or-unbounded-listeners","checkSummary":"No growing population of detached DOM nodes, and no ever-accumulating event listeners or timers that are added but never removed across a session.","confidence":"medium","detectableVia":"HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.","displayStatus":"pass","evidence":{"availability":"retained-private","summary":"Neither heap summary surfaced a Detached constructor among top populations; closures decreased and arrays were effectively flat after repetition.","types":["memory-summary"]},"findings":[],"guides":["manage-recurring-intervals","detached DOM nodes event listener leak uncleared timers observers caches"],"method":"Planned from the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer count","methodInvalid":false,"principleId":"be-memory-efficient","principleTitle":"Be memory-efficient","reason":null,"sourceStatus":"pass"}],"reportState":"available"}],"totals":{"blocked":73,"issues":147,"not-applicable":68,"not-run":2,"pass":174,"unavailable":116}}
