{
  "url": "https://www.tradingview.com",
  "auditedAt": "2026-07-19T19:52:11.479Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete audit of seven representative public paths. Authenticated account, broker order execution, payment completion and every localized/template variant were outside scope.",
  "page": {
    "appType": "hybrid",
    "framework": "Large server-rendered multi-page site plus JavaScript/canvas SPA chart application",
    "notes": "Public content pages are substantially server-rendered; /chart/ is a JavaScript shell. No bot wall prevented inspection."
  },
  "evidenceUsed": [
    "raw-CDP screenshot",
    "raw-CDP DOM",
    "raw-CDP evaluate probes",
    "layout metrics and shift/long-task observers",
    "performance trace",
    "HAR/network summary",
    "discoverability raw-vs-rendered comparison",
    "security headers",
    "cookies",
    "trackers",
    "secrets scan",
    "images audit",
    "heap summaries and repeated-interaction memory probe",
    "Lighthouse",
    "robots.txt and sitemap.xml fetch",
    "Modern Web Guidance 0.0.172 search/retrieve"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "component-specific-light-dark-theme",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "cross-document-transitions",
    "group-element-transitions",
    "faster-spa-view-transitions",
    "scrollytelling",
    "parallax-scroll-effects",
    "scroll-entry-exit-effects",
    "carousel-slide-effects",
    "physics-based-easing",
    "individual-transform-properties",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "dynamic-sibling-animations",
    "interactive-content-reveal",
    "pull-to-reveal",
    "swipe-to-remove",
    "shrinking-header-on-scroll",
    "scroll-progress-indicator",
    "scroll-position-aware-elements",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "soft-edge-content-fade",
    "scrollability-affordance-hints",
    "anchor-positioning-tab-underline",
    "position-aware-tooltips",
    "interest-triggered-tooltips",
    "interest-triggered-action-previews",
    "directional-navigation-transitions",
    "carousel-snap-highlights",
    "navigation-drawer",
    "stack-drill-down",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "light-dismiss-a-dialog",
    "platform-controls-dismiss-dialog",
    "declarative-dialog-popover-control",
    "animated-select-picker",
    "branded-select-styling",
    "brand-consistent-forms",
    "custom-select-picker-layouts",
    "rich-media-picker",
    "complex-shapes",
    "shaped-cutouts",
    "overflow-clipping-control",
    "visually-texture-content",
    "apply-webgl-shaders",
    "interactive-content-in-3d-scenes",
    "highlight-text-ranges",
    "prevent-text-wrapping",
    "customize-scrollbar-color-and-thickness",
    "export-html-media-from-canvas",
    "fluid-scaling",
    "calculate-with-intrinsic-sizes",
    "css-layout",
    "size-aware-styling",
    "content-based-styling",
    "child-state-based-styling",
    "design-token-reactivity",
    "dynamic-sibling-styling",
    "form-fields-automatically-fit-contents",
    "improve-text-layout-and-legibility",
    "forms",
    "accessible-error-announcement",
    "required-field-feedback",
    "validate-input-after-interaction",
    "identify-inp-causes",
    "schedule-tasks-by-priority",
    "optimize-preload-priority",
    "improve-next-page-load-performance",
    "interactions-in-complex-layouts",
    "performance",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-script-priority",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "optimize-image-priority",
    "conditional-async-dependencies",
    "expose-canvas-content-to-browser-features",
    "move-dom-element-without-losing-state",
    "precise-text-alignment",
    "visually-stable-mixed-fonts",
    "css",
    "html",
    "reduce-style-repetition",
    "security",
    "privacy",
    "batch-analytics-events",
    "full-session-analytics",
    "calculate-total-foreground-time",
    "passkeys",
    "passkey-registration",
    "passkey-authentication",
    "passkey-reauthentication",
    "passkey-conditional-create",
    "passkey-management",
    "flicker-free-client-side-ab-testing",
    "consistent-cross-document-transitions",
    "stabilize-reactive-state",
    "resilient-context-menus-and-nested-dropdowns",
    "persistent-top-layer-ui",
    "detect-initial-visibility-state",
    "sequence-distributed-events",
    "translator",
    "language-detection",
    "support-global-calendar-systems",
    "capture-location-agnostic-data",
    "format-human-readable-durations",
    "manage-recurring-intervals",
    "calculate-event-differentials",
    "coordinate-global-events",
    "model-partial-time-concepts",
    "search-hidden-content",
    "select-menu-interaction",
    "style-parent-with-has",
    "autofill-address-form",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "autofill-highlight-inputs",
    "deliver-optimized-decorative-images",
    "resolution-optimized-pseudo-elements",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "webmcp",
    "agentic-forms",
    "agentic-javascript-tools",
    "language-model",
    "summarizer"
  ],
  "artifacts": [
    {
      "type": "other",
      "path": "evidence/404-summary.json",
      "caption": "404 summary"
    },
    {
      "type": "screenshot",
      "path": "evidence/404.png",
      "caption": "404"
    },
    {
      "type": "other",
      "path": "evidence/chart-a11y-structure.json",
      "caption": "chart a11y structure",
      "findingIds": [
        "F09",
        "F10"
      ]
    },
    {
      "type": "other",
      "path": "evidence/chart-controls-metrics.json",
      "caption": "chart controls metrics"
    },
    {
      "type": "screenshot",
      "path": "evidence/chart-discoverability-crawler.png",
      "caption": "chart discoverability crawler",
      "findingIds": [
        "F13",
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/chart-discoverability-rendered.png",
      "caption": "chart discoverability rendered",
      "findingIds": [
        "F13",
        "F17"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/chart-discoverability.json",
      "caption": "chart discoverability",
      "findingIds": [
        "F13",
        "F17"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/chart-heap-baseline.heapsnapshot",
      "caption": "chart heap baseline"
    },
    {
      "type": "heap",
      "path": "evidence/chart-heap-post.heapsnapshot",
      "caption": "chart heap post"
    },
    {
      "type": "layout",
      "path": "evidence/chart-mobile-layout.json",
      "caption": "chart mobile layout",
      "condition": "viewport: 360x800"
    },
    {
      "type": "screenshot",
      "path": "evidence/chart-mobile.png",
      "caption": "chart mobile",
      "condition": "viewport: 360x800"
    },
    {
      "type": "other",
      "path": "evidence/chart-repeat-metrics.json",
      "caption": "chart repeat metrics"
    },
    {
      "type": "har-summary",
      "path": "evidence/chart-summary.json",
      "caption": "chart summary",
      "findingIds": [
        "F07",
        "F19"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/chart-trace-summary.json",
      "caption": "chart trace summary",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/chart-trace.json",
      "caption": "chart trace"
    },
    {
      "type": "har",
      "path": "evidence/chart.har",
      "caption": "chart",
      "findingIds": [
        "F07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/chart.png",
      "caption": "chart"
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "home cookies",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-css-capabilities.json",
      "caption": "home css capabilities",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "findingIds": [
        "F01"
      ],
      "condition": "prefers-color-scheme: dark"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": [
        "F01",
        "F03",
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered"
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability"
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom"
    },
    {
      "type": "other",
      "path": "evidence/home-focus-semantic-meta.json",
      "caption": "home focus semantic meta",
      "findingIds": [
        "F05",
        "F10"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-forced-colors.png",
      "caption": "home forced colors",
      "condition": "forced-colors: active, prefers-contrast: more"
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "home headers",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images",
      "findingIds": [
        "F09",
        "F12",
        "F18"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/home-lighthouse-summary.json",
      "caption": "home lighthouse summary",
      "findingIds": [
        "F04",
        "F05",
        "F06",
        "F08",
        "F09",
        "F11",
        "F14",
        "F20"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/home-lighthouse.json",
      "caption": "home lighthouse"
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout",
      "findingIds": [
        "F12"
      ],
      "condition": "viewport: 360x800"
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": [
        "F03"
      ],
      "condition": "viewport: 360x800"
    },
    {
      "type": "other",
      "path": "evidence/home-motion-css.json",
      "caption": "home motion css",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-runtime-i18n-agent.json",
      "caption": "home runtime i18n agent"
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "home secrets"
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F07",
        "F08",
        "F16",
        "F19",
        "F20"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace"
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "home trackers",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/ideas-discoverability-crawler.png",
      "caption": "ideas discoverability crawler"
    },
    {
      "type": "screenshot",
      "path": "evidence/ideas-discoverability-rendered.png",
      "caption": "ideas discoverability rendered"
    },
    {
      "type": "discoverability",
      "path": "evidence/ideas-discoverability.json",
      "caption": "ideas discoverability"
    },
    {
      "type": "other",
      "path": "evidence/markets-summary.json",
      "caption": "markets summary"
    },
    {
      "type": "screenshot",
      "path": "evidence/markets.png",
      "caption": "markets"
    },
    {
      "type": "other",
      "path": "evidence/pricing-signup-summary.json",
      "caption": "pricing signup summary"
    },
    {
      "type": "screenshot",
      "path": "evidence/pricing-signup.png",
      "caption": "pricing signup"
    },
    {
      "type": "other",
      "path": "evidence/pricing-summary.json",
      "caption": "pricing summary"
    },
    {
      "type": "screenshot",
      "path": "evidence/pricing.png",
      "caption": "pricing"
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon"
    },
    {
      "type": "other",
      "path": "evidence/robots-headers.txt",
      "caption": "robots headers"
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap-headers.txt",
      "caption": "sitemap headers"
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/symbol-aapl.png",
      "caption": "symbol aapl"
    },
    {
      "type": "screenshot",
      "path": "evidence/symbol-discoverability-crawler.png",
      "caption": "symbol discoverability crawler"
    },
    {
      "type": "screenshot",
      "path": "evidence/symbol-discoverability-rendered.png",
      "caption": "symbol discoverability rendered"
    },
    {
      "type": "discoverability",
      "path": "evidence/symbol-discoverability.json",
      "caption": "symbol discoverability"
    },
    {
      "type": "other",
      "path": "evidence/symbol-images.json",
      "caption": "symbol images",
      "findingIds": [
        "F09",
        "F12",
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/symbol-summary.json",
      "caption": "symbol summary"
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The CSS capability probe found 0 prefers-color-scheme rules, and the DOM reported color-scheme: light. The dark-emulated capture was pixel-identical to the default capture rather than being selected from the operating-system preference.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png",
        "evidence/home-css-capabilities.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Under prefers-reduced-motion: reduce, getAnimations() reported a running 3.5 s hero animation and twenty 1 s skeleton animations; the CSS probe found 0 prefers-reduced-motion rules.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-motion-css.json",
        "evidence/home-css-capabilities.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Screenshot and computed-style review under forced-colors: active.",
      "evidence": "Forced-colors screenshot preserves high-contrast text, buttons and consent controls.",
      "artifacts": [
        "evidence/home-forced-colors.png"
      ],
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered CSS capability probe.",
      "evidence": "CSS inspection found 12 view-transition references and the app uses stateful route/application changes.",
      "artifacts": [
        "evidence/home-css-capabilities.json"
      ],
      "pathIds": [
        "home",
        "chart"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered CSS inspection plus long-task observation.",
      "evidence": "CSS inspection found animation-timeline rules; no scroll-handler jank was observed in layout evidence.",
      "artifacts": [
        "evidence/home-css-capabilities.json",
        "evidence/home-mobile-layout.json"
      ],
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered CSS and mobile layout inspection.",
      "evidence": "CSS inspection found scroll-snap and overscroll-behavior rules, and the mobile layouts remained native-scrollable without overflow.",
      "artifacts": [
        "evidence/home-css-capabilities.json",
        "evidence/chart-mobile-layout.json"
      ],
      "pathIds": [
        "home",
        "chart"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Visual and CSS review of landing and chart chrome.",
      "evidence": "Screenshots show stable sticky application chrome and CSS includes scroll timelines/state-oriented rules without obstructing content.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/chart.png",
        "evidence/home-css-capabilities.json"
      ],
      "pathIds": [
        "home",
        "chart"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered CSS capability probe.",
      "evidence": "Rendered CSS contains anchor-name, position-anchor and position-try declarations (3 each), supporting attached fallback positioning.",
      "artifacts": [
        "evidence/home-css-capabilities.json"
      ],
      "pathIds": [
        "home",
        "chart"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Representative screenshots and DOM text review.",
      "evidence": "The landing CTA hierarchy, market breadcrumbs/tabs and chart selection states clearly indicate location and next action.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/symbol-aapl.png",
        "evidence/chart.png"
      ],
      "pathIds": [
        "home",
        "symbol",
        "chart"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The 360x800 screenshot shows the cookie banner occupying roughly the bottom 84 px and overlaying the hero on every fresh visit. It is dismissible and offers balanced choices, but still interrupts the first view.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "pass",
      "confidence": "high",
      "method": "DOM semantic and accessibility structure probes.",
      "evidence": "The observed consent control uses native buttons and no modal flow was falsely represented; chart controls expose toolbar/role semantics.",
      "artifacts": [
        "evidence/home-focus-semantic-meta.json",
        "evidence/chart-a11y-structure.json"
      ],
      "pathIds": [
        "home",
        "chart"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Visual review across page archetypes.",
      "evidence": "Marketing pages prioritize the hero/content; dense chart chrome directly serves the primary analytical task rather than decoration.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/chart.png",
        "evidence/markets.png"
      ],
      "pathIds": [
        "home",
        "chart",
        "markets"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP layout metrics and mobile screenshots.",
      "evidence": "At 360x800 both homepage and chart reported scrollWidth 360, clientWidth 360 and 0 horizontal overflow; both adapt visually.",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png",
        "evidence/chart-mobile-layout.json",
        "evidence/chart-mobile.png"
      ],
      "pathIds": [
        "home",
        "chart"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "CSS capability and mobile visual comparison.",
      "evidence": "Rendered CSS contains 108 @container rules and 637 logical/intrinsic-style declarations; mobile captures show distinct adapted layouts.",
      "artifacts": [
        "evidence/home-css-capabilities.json",
        "evidence/home-mobile.png",
        "evidence/chart-mobile.png"
      ],
      "pathIds": [
        "home",
        "chart"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse found multiple 16–20 px-high broker and footer targets below the 24 px minimum and reported the target-size audit as failing.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "First-viewport screenshots and heading probes.",
      "evidence": "The first viewport states the research-to-trade proposition and presents a single prominent “Get started for free” action; market, symbol and pricing pages have descriptive H1s.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/markets-summary.json",
        "evidence/symbol-summary.json",
        "evidence/pricing-summary.json"
      ],
      "pathIds": [
        "home",
        "markets",
        "symbol",
        "pricing"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Representative journey screenshots and DOM text.",
      "evidence": "An unauthenticated user can move from market listing to symbol detail and use the full AAPL chart; pricing clearly exposes sign-up and plan choices without a credit card claim.",
      "artifacts": [
        "evidence/markets.png",
        "evidence/symbol-aapl.png",
        "evidence/chart.png",
        "evidence/pricing.png"
      ],
      "pathIds": [
        "markets",
        "symbol",
        "chart",
        "pricing"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "State and 404 DOM/screenshot review.",
      "evidence": "Chart state states market closed and last-update time; the deliberate unknown route gives clear back/home recovery actions instead of a broken shell.",
      "artifacts": [
        "evidence/chart-summary.json",
        "evidence/404-summary.json",
        "evidence/404.png"
      ],
      "pathIds": [
        "chart",
        "not-found"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse measured LCP 8.9 s, FCP 7.4 s, TBT 530 ms and time-to-interactive 20.7 s (performance 0.45). The raw-CDP trace was faster locally but still found long tasks; the chart trace had LCP 3.76 s and 232 ms TBT.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/chart-trace-summary.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP layout-shift observers.",
      "evidence": "Homepage and chart mobile layout observers measured CLS 0.0061 and 0.0084 respectively, both well inside the good range.",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/chart-mobile-layout.json"
      ],
      "pathIds": [
        "home",
        "chart"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse measured LCP 8.9 s, FCP 7.4 s, TBT 530 ms and time-to-interactive 20.7 s (performance 0.45). The raw-CDP trace was faster locally but still found long tasks; the chart trace had LCP 3.76 s and 232 ms TBT.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/chart-trace-summary.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The homepage HAR recorded 464 requests including 194 stylesheets and 131 scripts; the chart recorded 977 requests, 458 stylesheets and 465 scripts, with 6.29 MB transferred. Parser-inserted VeryHigh-priority stylesheets form a long blocking candidate list.",
      "pathIds": [
        "chart"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/chart-summary.json",
        "evidence/chart.har"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse estimated 524 KiB of unused JavaScript, including 153 KiB from the ad script, 87 KiB from toast-layer, 73 KiB from Google identity and 136 KiB across two tag-manager bundles.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse failed image-alt; the images probe found 91/100 sampled homepage images and 87/100 symbol-page images without alt. The chart has 20 canvases with no fallback text and 35 of 193 buttons without text, aria-label or title.",
      "pathIds": [
        "chart"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-images.json",
        "evidence/symbol-images.json",
        "evidence/chart-a11y-structure.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility audit plus forced-colors screenshot.",
      "evidence": "Lighthouse did not report a color-contrast failure, and forced-colors capture preserved readable high-contrast content/control boundaries.",
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-forced-colors.png"
      ],
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The rendered chart contained no h1–h6 elements. A focus probe across the landing page found most sampled controls with outline-style none, while only one sampled control displayed a 2 px focus outline.",
      "pathIds": [
        "chart"
      ],
      "artifacts": [
        "evidence/chart-a11y-structure.json",
        "evidence/home-focus-semantic-meta.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop/mobile screenshot review.",
      "evidence": "Representative pages use clear hierarchy and readable line lengths; mobile hero copy wraps cleanly without clipping.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/markets.png",
        "evidence/pricing.png"
      ],
      "pathIds": [
        "home",
        "markets",
        "pricing"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The live meta viewport is width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no; Lighthouse failed the meta-viewport accessibility audit.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-focus-semantic-meta.json",
        "evidence/home-lighthouse-summary.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse logged a Google Identity FedCM NetworkError and a not-signed-in error. It also found an unload event listener, which is deprecated and contributes to two BFCache failure reasons.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The image primitive found width and height attributes absent on all 100 sampled images on both the homepage and symbol page. Observed CLS was low in this run, but the markup does not reserve intrinsic image space.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/symbol-images.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse logged a Google Identity FedCM NetworkError and a not-signed-in error. It also found an unload event listener, which is deprecated and contributes to two BFCache failure reasons.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Discoverability measured 1% raw-to-rendered content coverage for /chart/, classified it as a JS shell, and found that the rendered dynamic title was absent from raw HTML. Homepage, ideas and symbol pages were substantially server-rendered.",
      "pathIds": [
        "chart"
      ],
      "artifacts": [
        "evidence/chart-discoverability.json",
        "evidence/chart-discoverability-rendered.png",
        "evidence/chart-discoverability-crawler.png"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse SEO was 0.85 and flagged the link text “More”; its mobile accessibility audit also failed because viewport zoom is disabled. Robots and sitemap otherwise expose public routes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/robots.txt",
        "evidence/sitemap.xml"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "DOM metadata probes plus fetched robots and sitemap.",
      "evidence": "Public pages returned content, expose canonical links, homepage has 20 hreflang links, robots permits normal public routes and sitemap.xml indexes template-specific sitemaps.",
      "artifacts": [
        "evidence/home-focus-semantic-meta.json",
        "evidence/robots.txt",
        "evidence/sitemap.xml",
        "evidence/symbol-summary.json"
      ],
      "pathIds": [
        "home",
        "symbol",
        "ideas"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered metadata probes.",
      "evidence": "Homepage, markets and symbol pages expose Open Graph metadata and JSON-LD; the AAPL detail has five JSON-LD blocks aligned with visible entity data.",
      "artifacts": [
        "evidence/home-focus-semantic-meta.json",
        "evidence/markets-summary.json",
        "evidence/symbol-summary.json"
      ],
      "pathIds": [
        "home",
        "markets",
        "symbol"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "HTTPS, HSTS and frame-ancestors none are present, but CSP includes unsafe-inline in default-src; Permissions-Policy is absent; two non-auth cookies lacked Secure and all four observed cookies used SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "On a fresh profile while the consent banner was visible, trackers identified Tag Manager, DoubleClick and Google Ads. The HAR attributed 3.11 MB of 3.34 MB to non-main origins, including about 564 KB for tag-manager/ad scripts, before the user accepted.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Runtime permission state and Lighthouse console context.",
      "evidence": "No notification or geolocation prompt appeared on load; the observed signed-out experience uses Google FedCM/identity integration and exposes auth only after user action.",
      "artifacts": [
        "evidence/home-runtime-i18n-agent.json",
        "evidence/home-lighthouse-summary.json"
      ],
      "pathIds": [
        "home",
        "pricing"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "HTTPS, HSTS and frame-ancestors none are present, but CSP includes unsafe-inline in default-src; Permissions-Policy is absent; two non-auth cookies lacked Secure and all four observed cookies used SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The rendered chart exposes thousands of characters of symbol and market data, but raw HTML contains only 67 text characters and 1% of rendered content words. The crawler screenshot is effectively an empty shell.",
      "pathIds": [
        "chart"
      ],
      "artifacts": [
        "evidence/chart-discoverability.json",
        "evidence/chart-discoverability-rendered.png",
        "evidence/chart-discoverability-crawler.png"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Visual review plus repeated-interaction runtime probe.",
      "evidence": "Menus/toolbars rendered without clipping on desktop and mobile, repeated Indicators open/close returned to zero dialogs, and the chart remained usable.",
      "artifacts": [
        "evidence/chart.png",
        "evidence/chart-mobile.png",
        "evidence/chart-repeat-metrics.json"
      ],
      "pathIds": [
        "chart"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon applicability judgement against the catalog criteria.",
      "evidence": "",
      "reason": "TradingView’s live market chart is intrinsically online; an app manifest icon resource exists but offline trading/data is not a credible core promise, so this specific PWA/offline check is contextual and not applicable."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered 404 state review.",
      "evidence": "The deliberate unknown route presents a clear “page not found” explanation with Head back and Head to homepage recovery actions.",
      "artifacts": [
        "evidence/404.png",
        "evidence/404-summary.json"
      ],
      "pathIds": [
        "not-found"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "DOM and CSS probes.",
      "evidence": "Pages declare lang=en and dir=ltr; homepage offers a language selector, 20 hreflang variants and CSS has far more logical than physical declarations.",
      "artifacts": [
        "evidence/home-runtime-i18n-agent.json",
        "evidence/home-css-capabilities.json",
        "evidence/home-focus-semantic-meta.json"
      ],
      "pathIds": [
        "home",
        "symbol"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Pricing/symbol text and time-element probes.",
      "evidence": "Pricing rendered GBP for the observed UK locale; values use localized separators and narrow no-break spaces, while machine-readable time elements carry ISO values.",
      "artifacts": [
        "evidence/pricing-summary.json",
        "evidence/symbol-summary.json",
        "evidence/home-runtime-i18n-agent.json"
      ],
      "pathIds": [
        "pricing",
        "symbol",
        "home"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "high",
      "method": "Chart and runtime date/time probes.",
      "evidence": "Chart state explicitly labels UTC/GMT+1 update times and machine-readable time elements use unambiguous Z timestamps.",
      "artifacts": [
        "evidence/chart-summary.json",
        "evidence/home-runtime-i18n-agent.json"
      ],
      "pathIds": [
        "chart",
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Pricing and consent screenshots/text.",
      "evidence": "Pricing discloses monthly equivalent, annual billing, annual savings, trial lengths and a pay-now alternative; consent presents equally direct accept and decline controls.",
      "artifacts": [
        "evidence/pricing.png",
        "evidence/pricing-summary.json",
        "evidence/home-desktop.png"
      ],
      "pathIds": [
        "pricing",
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "404 and pricing flow review.",
      "evidence": "The exercised public paths contained no mandatory form before the task; the invalid-route state uses neutral language and actionable recovery rather than blame.",
      "artifacts": [
        "evidence/404-summary.json",
        "evidence/pricing-summary.json"
      ],
      "pathIds": [
        "not-found",
        "pricing"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "pass",
      "confidence": "high",
      "method": "Pricing input probe.",
      "evidence": "No data-entry form was required in the representative public research flow; the pricing billing-cycle radios have explicit labels and predictable controls.",
      "artifacts": [
        "evidence/pricing-signup-summary.json",
        "evidence/pricing-summary.json"
      ],
      "pathIds": [
        "pricing"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "high",
      "method": "Commercial first-step screenshot and DOM review.",
      "evidence": "Pricing clearly shows £0 forever, billing cadence, trial duration, savings and annual commitment before sign-up; no forced continuity was observed in the accessible entry flow.",
      "artifacts": [
        "evidence/pricing.png",
        "evidence/pricing-summary.json"
      ],
      "pathIds": [
        "pricing"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The homepage image probe found two hero assets over 2x display width, 55 below-fold images without lazy loading, 22 without responsive sources and 20 legacy-format assets. The symbol page found 11 oversized images.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/symbol-images.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "The chart HAR made 977 requests and transferred 6.29 MB, overwhelmingly application scripts; the homepage fetched a 192 KB month-long economic calendar payload and multiple analytics endpoints during initial rendering.",
      "pathIds": [
        "chart"
      ],
      "artifacts": [
        "evidence/chart-summary.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct multi-modal evidence gathered on representative paths and judged against the mapped Modern Web Guidance.",
      "evidence": "Lighthouse reported a 6,859 KiB page payload led by a 3.65 MB WebM video, while advertising, analytics and identity scripts added hundreds of KiB before interaction. Lighthouse reported a 6,859 KiB page payload led by a 3.65 MB WebM video, while advertising, analytics and identity scripts added hundreds of KiB before interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F20",
        "F20"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon applicability judgement against the catalog criteria.",
      "evidence": "",
      "reason": "No developer intent or public agent-execution surface is declared. This emerging capability is optional; server-rendered public content was assessed separately under discoverability."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon applicability judgement against the catalog criteria.",
      "evidence": "",
      "reason": "No summarization or language-model task is presented as a core page capability, so absence of on-device inference is not a quality failure."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Repeated-interaction memory probe plus heap summaries.",
      "evidence": "After ten Indicators open/close cycles in one chart session, used JS heap decreased from 113.4 MB to 103.9 MB and DOM nodes changed only 3485 to 3494. Separate heap captures varied, so the same-session metric was used for the verdict.",
      "artifacts": [
        "evidence/chart-repeat-metrics.json",
        "evidence/chart-heap-baseline.heapsnapshot",
        "evidence/chart-heap-post.heapsnapshot"
      ],
      "pathIds": [
        "chart"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Heap summary and Performance memory probe.",
      "evidence": "The chart baseline heap summary was about 99.0 MB self size with 1.72 M heap nodes, substantial but proportionate to a multi-canvas real-time chart; same-session used heap settled near 104 MB.",
      "artifacts": [
        "evidence/chart-heap-baseline.heapsnapshot",
        "evidence/chart-controls-metrics.json",
        "evidence/chart-repeat-metrics.json"
      ],
      "pathIds": [
        "chart"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Repeated-interaction DOM/heap probe.",
      "evidence": "The repeated modal-like interaction left only 9 additional live DOM elements and no open dialogs; used heap fell after settling, providing no evidence of accumulating listeners/timers in this window.",
      "artifacts": [
        "evidence/chart-repeat-metrics.json",
        "evidence/chart-heap-post.heapsnapshot"
      ],
      "pathIds": [
        "chart"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06",
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10",
        "F05"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F14"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "This emerging agent-capability principle is contextual and no agent-execution or on-device-inference surface is declared for the audited public experience."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Public landing page and global navigation; represents marketing, market-summary and consent surfaces.",
      "url": "https://www.tradingview.com/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "forced-colors: active"
      ],
      "result": "issues"
    },
    {
      "id": "chart",
      "description": "Supercharts primary application journey; represents the core interactive research task and long-lived SPA behavior.",
      "url": "https://www.tradingview.com/chart/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "repeated Indicators open/close x10",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "markets",
      "description": "Markets index; represents a dense listing and navigation archetype.",
      "url": "https://www.tradingview.com/markets/",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    },
    {
      "id": "symbol",
      "description": "Apple symbol detail; represents instrument detail, data formatting and structured metadata.",
      "url": "https://www.tradingview.com/symbols/NASDAQ-AAPL/",
      "conditions": [
        "desktop",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "ideas",
      "description": "Community ideas listing; represents public editorial/community content and crawler rendering.",
      "url": "https://www.tradingview.com/ideas/",
      "conditions": [
        "no JavaScript crawler"
      ],
      "result": "pass"
    },
    {
      "id": "pricing",
      "description": "Pricing and subscription entry; represents commercial commitments and plan comparison.",
      "url": "https://www.tradingview.com/pricing/",
      "conditions": [
        "desktop",
        "sign-up CTA attempted"
      ],
      "result": "pass"
    },
    {
      "id": "not-found",
      "description": "Deliberate unknown route; represents HTTP/navigation recovery.",
      "url": "https://www.tradingview.com/404-test-web-uplift",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "System dark preference does not select a dark theme",
      "evidence": "The CSS capability probe found 0 prefers-color-scheme rules, and the DOM reported color-scheme: light. The dark-emulated capture was pixel-identical to the default capture rather than being selected from the operating-system preference.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png",
        "evidence/home-css-capabilities.json"
      ],
      "suggestedFix": "Declare color-scheme: light dark and map page surfaces and controls through prefers-color-scheme or light-dark(), while retaining any explicit user override.",
      "effort": "medium",
      "confidence": "high"
    },
    {
      "id": "F02",
      "severity": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Reduced-motion users still receive continuous animation",
      "evidence": "Under prefers-reduced-motion: reduce, getAnimations() reported a running 3.5 s hero animation and twenty 1 s skeleton animations; the CSS probe found 0 prefers-reduced-motion rules.",
      "artifacts": [
        "evidence/home-motion-css.json",
        "evidence/home-css-capabilities.json"
      ],
      "suggestedFix": "Add a reduce media query that removes nonessential hero/ambient motion and replaces repeating skeleton motion with a static state or minimal opacity change.",
      "effort": "small",
      "confidence": "high"
    },
    {
      "id": "F03",
      "severity": "medium",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Consent banner consumes a large part of the mobile first viewport",
      "evidence": "The 360x800 screenshot shows the cookie banner occupying roughly the bottom 84 px and overlaying the hero on every fresh visit. It is dismissible and offers balanced choices, but still interrupts the first view.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Reserve non-overlapping space for the consent surface or use a less obstructive compact presentation while keeping equally prominent accept and decline actions.",
      "effort": "small",
      "confidence": "high"
    },
    {
      "id": "F04",
      "severity": "medium",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Some touch targets are too small or tightly spaced",
      "evidence": "Lighthouse found multiple 16–20 px-high broker and footer targets below the 24 px minimum and reported the target-size audit as failing.",
      "artifacts": [
        "evidence/home-lighthouse-summary.json"
      ],
      "suggestedFix": "Increase the clickable box and spacing of small links/buttons to at least 24x24 CSS px, preferably 44x44 for primary mobile controls, without shrinking visible labels.",
      "effort": "small",
      "confidence": "high"
    },
    {
      "id": "F05",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "The viewport explicitly prevents user zoom",
      "evidence": "The live meta viewport is width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no; Lighthouse failed the meta-viewport accessibility audit.",
      "artifacts": [
        "evidence/home-focus-semantic-meta.json",
        "evidence/home-lighthouse-summary.json"
      ],
      "suggestedFix": "Remove user-scalable=no and the maximum/minimum scale restrictions, then verify reflow and controls at 200% and 400% zoom.",
      "effort": "trivial",
      "confidence": "high"
    },
    {
      "id": "F06",
      "severity": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Cold mobile load is slow and main-thread heavy",
      "evidence": "Lighthouse measured LCP 8.9 s, FCP 7.4 s, TBT 530 ms and time-to-interactive 20.7 s (performance 0.45). The raw-CDP trace was faster locally but still found long tasks; the chart trace had LCP 3.76 s and 232 ms TBT.",
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/chart-trace-summary.json"
      ],
      "suggestedFix": "Prioritize the actual LCP resource, delay noncritical application and advertising work, and split/chunk long tasks until lab LCP and interaction latency reach the good range.",
      "effort": "large",
      "confidence": "high"
    },
    {
      "id": "F07",
      "severity": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "pathId": "chart",
      "url": "https://www.tradingview.com/chart/",
      "summary": "Critical delivery fans out into hundreds of CSS and JavaScript requests",
      "evidence": "The homepage HAR recorded 464 requests including 194 stylesheets and 131 scripts; the chart recorded 977 requests, 458 stylesheets and 465 scripts, with 6.29 MB transferred. Parser-inserted VeryHigh-priority stylesheets form a long blocking candidate list.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/chart-summary.json",
        "evidence/chart.har"
      ],
      "suggestedFix": "Consolidate the critical CSS path, preload only proven critical assets, defer conditional chart modules, and cap initial route request fan-out.",
      "effort": "large",
      "confidence": "high"
    },
    {
      "id": "F08",
      "severity": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Large unused and third-party JavaScript ships on initial load",
      "evidence": "Lighthouse estimated 524 KiB of unused JavaScript, including 153 KiB from the ad script, 87 KiB from toast-layer, 73 KiB from Google identity and 136 KiB across two tag-manager bundles.",
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Load advertising, identity and toast code only when the relevant surface is requested; deduplicate analytics bootstraps and route-split application bundles.",
      "effort": "large",
      "confidence": "high"
    },
    {
      "id": "F09",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "chart",
      "url": "https://www.tradingview.com/chart/",
      "summary": "Images, canvas content and controls are not consistently exposed to assistive technology",
      "evidence": "Lighthouse failed image-alt; the images probe found 91/100 sampled homepage images and 87/100 symbol-page images without alt. The chart has 20 canvases with no fallback text and 35 of 193 buttons without text, aria-label or title.",
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-images.json",
        "evidence/symbol-images.json",
        "evidence/chart-a11y-structure.json"
      ],
      "suggestedFix": "Give meaningful images concise alt text, mark decoration alt=\"\", name every control, and expose chart values/summary/table equivalents outside canvas.",
      "effort": "large",
      "confidence": "high"
    },
    {
      "id": "F10",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "chart",
      "url": "https://www.tradingview.com/chart/",
      "summary": "The chart application has no heading structure and focus indication is inconsistent",
      "evidence": "The rendered chart contained no h1–h6 elements. A focus probe across the landing page found most sampled controls with outline-style none, while only one sampled control displayed a 2 px focus outline.",
      "artifacts": [
        "evidence/chart-a11y-structure.json",
        "evidence/home-focus-semantic-meta.json"
      ],
      "suggestedFix": "Add a concise page heading/landmark model to the chart shell and ensure every interactive control receives a high-contrast :focus-visible indicator in logical keyboard order.",
      "effort": "medium",
      "confidence": "high"
    },
    {
      "id": "F11",
      "severity": "medium",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Initial load logs errors and uses a deprecated unload listener",
      "evidence": "Lighthouse logged a Google Identity FedCM NetworkError and a not-signed-in error. It also found an unload event listener, which is deprecated and contributes to two BFCache failure reasons.",
      "artifacts": [
        "evidence/home-lighthouse-summary.json"
      ],
      "suggestedFix": "Treat expected signed-out identity state without console.error, remove unload listeners in favor of pagehide/visibility lifecycle patterns, and resolve BFCache blockers.",
      "effort": "medium",
      "confidence": "high"
    },
    {
      "id": "F12",
      "severity": "medium",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Rendered images omit intrinsic dimensions",
      "evidence": "The image primitive found width and height attributes absent on all 100 sampled images on both the homepage and symbol page. Observed CLS was low in this run, but the markup does not reserve intrinsic image space.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/symbol-images.json",
        "evidence/home-mobile-layout.json"
      ],
      "suggestedFix": "Emit width and height or an equivalent aspect-ratio for every image at render time and retain responsive CSS sizing.",
      "effort": "medium",
      "confidence": "high"
    },
    {
      "id": "F13",
      "severity": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "chart",
      "url": "https://www.tradingview.com/chart/",
      "summary": "The public chart route is nearly empty to non-JavaScript crawlers",
      "evidence": "Discoverability measured 1% raw-to-rendered content coverage for /chart/, classified it as a JS shell, and found that the rendered dynamic title was absent from raw HTML. Homepage, ideas and symbol pages were substantially server-rendered.",
      "artifacts": [
        "evidence/chart-discoverability.json",
        "evidence/chart-discoverability-rendered.png",
        "evidence/chart-discoverability-crawler.png"
      ],
      "suggestedFix": "Server-render a stable chart title, heading, symbol summary and key values, then hydrate the interactive chart progressively.",
      "effort": "large",
      "confidence": "high"
    },
    {
      "id": "F14",
      "severity": "low",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "A generic link label and zoom restriction weaken mobile/crawlable navigation",
      "evidence": "Lighthouse SEO was 0.85 and flagged the link text “More”; its mobile accessibility audit also failed because viewport zoom is disabled. Robots and sitemap otherwise expose public routes.",
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/robots.txt",
        "evidence/sitemap.xml"
      ],
      "suggestedFix": "Replace “More” with destination-specific text and remove viewport zoom restrictions.",
      "effort": "trivial",
      "confidence": "high"
    },
    {
      "id": "F15",
      "severity": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Browser security policy and cookie flags can be tightened",
      "evidence": "HTTPS, HSTS and frame-ancestors none are present, but CSP includes unsafe-inline in default-src; Permissions-Policy is absent; two non-auth cookies lacked Secure and all four observed cookies used SameSite=None.",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "suggestedFix": "Remove unsafe-inline where nonce/hash coverage permits, send a least-privilege Permissions-Policy, and mark HTTPS cookies Secure with Lax/Strict SameSite unless cross-site behavior is required.",
      "effort": "medium",
      "confidence": "high"
    },
    {
      "id": "F16",
      "severity": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Tracking and advertising code loads before a consent choice",
      "evidence": "On a fresh profile while the consent banner was visible, trackers identified Tag Manager, DoubleClick and Google Ads. The HAR attributed 3.11 MB of 3.34 MB to non-main origins, including about 564 KB for tag-manager/ad scripts, before the user accepted.",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Gate nonessential analytics and advertising requests behind explicit consent, minimize vendors/events, and batch necessary telemetry.",
      "effort": "large",
      "confidence": "high"
    },
    {
      "id": "F17",
      "severity": "high",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "chart",
      "url": "https://www.tradingview.com/chart/",
      "summary": "The core chart route has no useful no-JavaScript baseline",
      "evidence": "The rendered chart exposes thousands of characters of symbol and market data, but raw HTML contains only 67 text characters and 1% of rendered content words. The crawler screenshot is effectively an empty shell.",
      "artifacts": [
        "evidence/chart-discoverability.json",
        "evidence/chart-discoverability-rendered.png",
        "evidence/chart-discoverability-crawler.png"
      ],
      "suggestedFix": "Ship a server-rendered symbol snapshot and core navigation as the baseline, then enhance it with real-time canvas interaction when JavaScript is available.",
      "effort": "large",
      "confidence": "high"
    },
    {
      "id": "F18",
      "severity": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Some imagery is oversized and below-fold assets load eagerly",
      "evidence": "The homepage image probe found two hero assets over 2x display width, 55 below-fold images without lazy loading, 22 without responsive sources and 20 legacy-format assets. The symbol page found 11 oversized images.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/symbol-images.json"
      ],
      "suggestedFix": "Provide correctly sized AVIF/WebP srcsets, lazy-load below-fold imagery, and avoid downloading desktop-scale hero assets for narrow viewports.",
      "effort": "medium",
      "confidence": "high"
    },
    {
      "id": "F19",
      "severity": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "pathId": "chart",
      "url": "https://www.tradingview.com/chart/",
      "summary": "Initial routes perform disproportionate background and conditional work",
      "evidence": "The chart HAR made 977 requests and transferred 6.29 MB, overwhelmingly application scripts; the homepage fetched a 192 KB month-long economic calendar payload and multiple analytics endpoints during initial rendering.",
      "artifacts": [
        "evidence/chart-summary.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Fetch chart modules and secondary datasets on demand, narrow initial calendar queries, and move nonessential background fetches behind idle/visibility/user-intent gates.",
      "effort": "large",
      "confidence": "high"
    },
    {
      "id": "F20",
      "severity": "medium",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.tradingview.com/",
      "summary": "Heavy media and third parties dominate the landing-page budget",
      "evidence": "Lighthouse reported a 6,859 KiB page payload led by a 3.65 MB WebM video, while advertising, analytics and identity scripts added hundreds of KiB before interaction.",
      "artifacts": [
        "evidence/home-lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Use a poster/static first frame by default, defer the WebM until visible and motion-allowed, and enforce a third-party byte/request budget.",
      "effort": "medium",
      "confidence": "high"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Prioritize the actual LCP resource, delay noncritical application and advertising work, and split/chunk long tasks until lab LCP and interaction latency reach the good range.",
      "priority": 1,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Give meaningful images concise alt text, mark decoration alt=\"\", name every control, and expose chart values/summary/table equivalents outside canvas.",
      "priority": 2,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Gate nonessential analytics and advertising requests behind explicit consent, minimize vendors/events, and batch necessary telemetry.",
      "priority": 3,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Consolidate the critical CSS path, preload only proven critical assets, defer conditional chart modules, and cap initial route request fan-out.",
      "priority": 4,
      "findingIds": [
        "F07"
      ],
      "guidanceId": "optimize-script-priority",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Ship a server-rendered symbol snapshot and core navigation as the baseline, then enhance it with real-time canvas interaction when JavaScript is available.",
      "priority": 5,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Server-render a stable chart title, heading, symbol summary and key values, then hydrate the interactive chart progressively.",
      "priority": 6,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Add a reduce media query that removes nonessential hero/ambient motion and replaces repeating skeleton motion with a static state or minimal opacity change.",
      "priority": 7,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Load advertising, identity and toast code only when the relevant surface is requested; deduplicate analytics bootstraps and route-split application bundles.",
      "priority": 8,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Remove user-scalable=no and the maximum/minimum scale restrictions, then verify reflow and controls at 200% and 400% zoom.",
      "priority": 9,
      "findingIds": [
        "F05"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Add a concise page heading/landmark model to the chart shell and ensure every interactive control receives a high-contrast :focus-visible indicator in logical keyboard order.",
      "priority": 10,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Remove unsafe-inline where nonce/hash coverage permits, send a least-privilege Permissions-Policy, and mark HTTPS cookies Secure with Lax/Strict SameSite unless cross-site behavior is required.",
      "priority": 11,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Use a poster/static first frame by default, defer the WebM until visible and motion-allowed, and enforce a third-party byte/request budget.",
      "priority": 12,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "efficient-background-processing",
      "status": "open"
    },
    {
      "id": "T13",
      "title": "Fetch chart modules and secondary datasets on demand, narrow initial calendar queries, and move nonessential background fetches behind idle/visibility/user-intent gates.",
      "priority": 13,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T14",
      "title": "Provide correctly sized AVIF/WebP srcsets, lazy-load below-fold imagery, and avoid downloading desktop-scale hero assets for narrow viewports.",
      "priority": 14,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T15",
      "title": "Emit width and height or an equivalent aspect-ratio for every image at render time and retain responsive CSS sizing.",
      "priority": 15,
      "findingIds": [
        "F12"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T16",
      "title": "Increase the clickable box and spacing of small links/buttons to at least 24x24 CSS px, preferably 44x44 for primary mobile controls, without shrinking visible labels.",
      "priority": 16,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T17",
      "title": "Reserve non-overlapping space for the consent surface or use a less obstructive compact presentation while keeping equally prominent accept and decline actions.",
      "priority": 17,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T18",
      "title": "Declare color-scheme: light dark and map page surfaces and controls through prefers-color-scheme or light-dark(), while retaining any explicit user override.",
      "priority": 18,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T19",
      "title": "Treat expected signed-out identity state without console.error, remove unload listeners in favor of pagehide/visibility lifecycle patterns, and resolve BFCache blockers.",
      "priority": 19,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T20",
      "title": "Replace “More” with destination-specific text and remove viewport zoom restrictions.",
      "priority": 20,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 7,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-19T19-52-11-479Z"
}
