{
  "url": "https://mobcup.fm",
  "auditedAt": "2026-07-21T07:13:55.876Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete representative audit of six paths/templates. Not covered: authenticated profile/favourites, third-party OAuth completion, destructive account actions, upload after authentication, actual binary download response, and exhaustive item URLs because they require credentials/external identity or duplicate audited templates.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered Laravel-style MPA (framework inferred from session/XSRF conventions)",
    "notes": "Public server-rendered ringtone/wallpaper catalogue with advertising, consent management, social login, media listing and detail templates."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "lighthouse",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "discoverability",
    "heap-summary",
    "raw HTTP/indexing fetch",
    "Modern Web Guidance 0.0.172"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "scrollytelling",
    "physics-based-easing",
    "shrinking-header-on-scroll",
    "anchor-positioning-tab-underline",
    "directional-navigation-transitions",
    "light-dismiss-a-dialog",
    "declarative-dialog-popover-control",
    "complex-shapes",
    "fluid-scaling",
    "size-aware-styling",
    "touch target size hover fallback pointer input focus-visible",
    "direct user attention primary action visual hierarchy task success",
    "forms",
    "accessible-error-announcement",
    "identify-inp-causes",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "optimize-image-priority",
    "identify-heavy-scripts",
    "color contrast WCAG text legibility",
    "move-dom-element-without-losing-state",
    "improve-text-layout-and-legibility",
    "avoid console errors uncaught exceptions",
    "css",
    "html",
    "page title meta description seo",
    "crawlable links viewport meta robots descriptive link text",
    "canonical hreflang http status robots sitemap noindex seo indexing",
    "structured data schema.org json-ld open graph social preview metadata",
    "security",
    "privacy",
    "passkeys",
    "flicker-free-client-side-ab-testing",
    "resilient-context-menus-and-nested-dropdowns",
    "offline fallback service worker web app manifest installable pwa",
    "persistent-toast-notifications",
    "translator",
    "support-global-calendar-systems",
    "coordinate-global-events",
    "custom-button-actions",
    "autofill-address-form",
    "autofill-payment-form",
    "deliver-optimized-decorative-images",
    "deprioritize-background-fetches",
    "webmcp",
    "language-model",
    "memory leak retained heap growth under repeated interaction long single-page-app session",
    "bounded memory footprint javascript heap size page weight proportionate allocations",
    "manage-recurring-intervals"
  ],
  "artifacts": [
    {
      "type": "other",
      "path": "evidence/404-probe.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F08",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/detail-probe.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discover-detail-crawler.png",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discover-detail.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discover-ringtones-crawler.png",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discover-ringtones.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F17",
        "F20"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-after-consent.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "type": "other",
      "path": "evidence/indexing-files.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F02",
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/login-controls.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/login-mobile.png",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/memory-metrics.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F01",
        "F03",
        "F06",
        "F07",
        "F12",
        "F13",
        "F15",
        "F16",
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-probe.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/ringtone-detail-mobile.png",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/ringtones-dark.png",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/ringtones-layout-mobile.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/ringtones-mobile.png",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F06",
        "F07",
        "F11"
      ]
    },
    {
      "type": "other",
      "path": "evidence/ringtones-recon.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/ringtones-summary.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F09",
        "F10",
        "F18",
        "F24",
        "F25"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/ringtones-trace-summary.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F09"
      ]
    },
    {
      "type": "har",
      "path": "evidence/ringtones.har",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F09",
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/wallpaper-images.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F14",
        "F23"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/wallpapers-layout-mobile.json",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/wallpapers-mobile.png",
      "caption": "Audit evidence for the recorded condition and representative path.",
      "findingIds": [
        "F14"
      ]
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The screenshot captured with prefers-color-scheme: dark remains a light #f9fbfe page, and the CSS probe found no prefers-color-scheme rule.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-dark.png",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "evaluate probe under prefers-reduced-motion: reduce",
      "evidence": "The reduced-motion probe found zero active animations on the representative listing.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/preferences-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The preferences probe found no prefers-contrast or forced-colors CSS; Lighthouse measured the ADVERTISEMENT label at 1.85:1 against #f9fbfe.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/preferences-probe.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "CSS inspection found no view-transition declarations on the multi-page browse and detail journeys.",
      "pathIds": [
        "ringtone-detail"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "No scroll-linked animation, parallax, scrollytelling, or reveal effect exists on the representative pages, so there is no scroll animation implementation to judge.",
      "reason": "No scroll-linked animation, parallax, scrollytelling, or reveal effect exists on the representative pages, so there is no scroll animation implementation to judge."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "mobile visual and DOM/CSS inspection",
      "evidence": "Mobile screenshots and DOM inspection show native scrolling and links, with no custom pointer-driven gesture layer fighting platform behavior.",
      "pathIds": [
        "ringtones",
        "wallpapers"
      ],
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/wallpapers-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "mobile screenshot and layout inspection",
      "evidence": "The long mobile listing keeps compact top and bottom navigation visible while content scrolls, providing persistent orientation without observed JS scroll jank.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/ringtones-layout-mobile.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "No tooltip, popover, or edge-positioned menu was present in the tested browse, detail, or login surfaces.",
      "reason": "No tooltip, popover, or edge-positioned menu was present in the tested browse, detail, or login surfaces."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "representative mobile screenshots and link probe",
      "evidence": "The bottom navigation visibly highlights the active Ringtone or Wallpaper destination, and detail/list links use descriptive labels.",
      "pathIds": [
        "ringtones",
        "wallpapers",
        "ringtone-detail"
      ],
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/wallpapers-mobile.png",
        "evidence/detail-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The initial desktop screenshot shows a large blocking consent panel over the homepage before the user can reach the content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "DOM inspection during the first-visit state found zero dialog elements and zero aria-modal elements while the visible panel blocked the page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "mobile visual inspection",
      "evidence": "After consent dismissal, the mobile browse templates devote most of the viewport to the media listing; header and bottom navigation remain compact.",
      "pathIds": [
        "ringtones",
        "wallpapers"
      ],
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/wallpapers-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "layout primitive at 360x800",
      "evidence": "At 360x800 both listing templates reported 0 horizontal overflow, a 360px content width, and a viewport meta tag.",
      "pathIds": [
        "ringtones",
        "wallpapers"
      ],
      "artifacts": [
        "evidence/ringtones-layout-mobile.json",
        "evidence/wallpapers-layout-mobile.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "CSS inspection found no @container rules even though the same media-card component appears at desktop and mobile widths.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The focus/geometry probe found 14 of the first 15 focusable targets under 44 CSS px; tag links were about 26px high.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/ringtones-mobile.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "mobile screenshot and rendered-text probe",
      "evidence": "The listing states “Trending Ringtones Download” and cards expose named titles and a visible Download action.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/ringtones-recon.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "detail journey DOM probe",
      "evidence": "The representative detail page exposes direct “Download .mp3 for Android” and “Download .m4r for iPhone” links without an account wall.",
      "pathIds": [
        "ringtone-detail"
      ],
      "artifacts": [
        "evidence/detail-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "A real unknown route returned HTTP 404 but rendered only “404 NOT FOUND” and no usable site link.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-probe.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "pass",
      "confidence": "high",
      "method": "trace plus Lighthouse",
      "evidence": "Trace measured LCP/FCP 1.12s and 0ms TBT; Lighthouse measured LCP 0.96s, CLS 0.001 and TBT 0ms.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-trace-summary.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "layout observers plus Lighthouse",
      "evidence": "Both mobile layouts observed CLS 0 with no shifts after consent dismissal; Lighthouse corroborated CLS 0.001 on initial load.",
      "pathIds": [
        "ringtones",
        "wallpapers"
      ],
      "artifacts": [
        "evidence/ringtones-layout-mobile.json",
        "evidence/wallpapers-layout-mobile.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "trace and long-task observers",
      "evidence": "Trace and layout observers found no long tasks and 0ms total blocking time during the tested listing load.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-trace-summary.json",
        "evidence/ringtones-layout-mobile.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "HAR recorded 718,174 transferred bytes, 642,756 third-party bytes, and parser-inserted CSS plus a script candidate; the script was 605,068 bytes total while the trace LCP was 1.12s.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones.har",
        "evidence/ringtones-summary.json",
        "evidence/ringtones-trace-summary.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "Lighthouse reported an estimated 23 KiB of unused JavaScript, while HAR showed third-party scripts as the largest transfer class.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/ringtones-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility audits plus image DOM audit",
      "evidence": "Lighthouse passed link-name and button-name; the wallpaper image audit found no missing alt text.",
      "pathIds": [
        "ringtones",
        "wallpapers"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/wallpaper-images.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "Lighthouse reported the 10px #bbbbbb ADVERTISEMENT label at 1.85:1 against #f9fbfe, below the required 4.5:1.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/ringtones-mobile.png"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "Lighthouse failed landmark-one-main and the DOM probe counted zero main or role=main elements on the ringtone listing.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "mobile visual inspection and layout metrics",
      "evidence": "Mobile screenshots show readable card titles and metadata without clipping or horizontal overflow.",
      "pathIds": [
        "ringtones",
        "login"
      ],
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/login-mobile.png",
        "evidence/ringtones-layout-mobile.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "At 360x800 there was no horizontal overflow, but the geometry probe measured numerous tag links at roughly 26px high.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/ringtones-layout-mobile.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse browser console audit",
      "evidence": "Lighthouse passed the errors-in-console audit on the representative listing.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The image primitive found 10 legacy JPEGs, 10 images without srcset, and 9 below-fold images without loading=lazy.",
      "pathIds": [
        "wallpapers"
      ],
      "artifacts": [
        "evidence/wallpaper-images.json",
        "evidence/wallpapers-mobile.png"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse and first-load visual inspection",
      "evidence": "Lighthouse best-practices scored 1.0 and reported no browser-console errors; no permission prompt appeared on load.",
      "pathIds": [
        "ringtones",
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "DOM and discoverability primitives",
      "evidence": "The listing and detail pages expose descriptive titles and meta descriptions in raw server HTML.",
      "pathIds": [
        "ringtones",
        "ringtone-detail"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/discover-ringtones.json",
        "evidence/discover-detail.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "DOM, indexing-file, layout, and discoverability probes",
      "evidence": "The page has a viewport meta tag, descriptive real href links, robots allows general crawling, and no-JS content coverage is 100%.",
      "pathIds": [
        "ringtones",
        "ringtone-detail"
      ],
      "artifacts": [
        "evidence/indexing-files.json",
        "evidence/discover-ringtones.json",
        "evidence/ringtones-layout-mobile.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The DOM probe found no canonical URL; an in-browser request to /sitemap.xml returned 404, although robots.txt allowed general crawling.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/indexing-files.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The listing probe found zero Open Graph tags; the detail page had useful AudioObject JSON-LD but no evidence of Open Graph/Twitter preview metadata.",
      "pathIds": [
        "ringtone-detail"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/detail-probe.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The headers primitive found no CSP, HSTS, nosniff, frame protection, Referrer-Policy, or Permissions-Policy; both XSRF-TOKEN and mobcupfm_session lacked Secure.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "After “Do not consent”, HAR still recorded 18 third-party requests and 642,756 third-party bytes, including Google Ads, Tag Manager, Funding Choices and a Google Analytics collection request.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-summary.json",
        "evidence/ringtones.har"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The login surface exposes only Google and Facebook links; no WebAuthn/passkey registration or authentication UI was present.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-mobile.png",
        "evidence/login-controls.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The headers primitive found HSTS, clickjacking protection, Referrer-Policy and Permissions-Policy all absent, with no CSP frame-ancestors fallback.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "no-JavaScript/raw HTML comparison",
      "evidence": "Discoverability measured 100% content coverage without JavaScript on listing and detail pages; both title and metadata survive in raw HTML.",
      "pathIds": [
        "ringtones",
        "ringtone-detail"
      ],
      "artifacts": [
        "evidence/discover-ringtones.json",
        "evidence/discover-detail.json",
        "evidence/discover-ringtones-crawler.png",
        "evidence/discover-detail-crawler.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "mobile screenshots and layout observation",
      "evidence": "Representative listing, detail and login surfaces rendered stable bounded controls at mobile size, with no cut-off menu or async blank state after consent dismissal.",
      "pathIds": [
        "ringtones",
        "ringtone-detail",
        "login"
      ],
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/ringtone-detail-mobile.png",
        "evidence/login-mobile.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "The public media catalogue is a server-rendered, intrinsically network-dependent download site rather than an installed application; offline/installability was judged out of scope.",
      "reason": "The public media catalogue is a server-rendered, intrinsically network-dependent download site rather than an installed application; offline/installability was judged out of scope."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The tested 404 returned the correct status but only “404 NOT FOUND”, with no retry, search, navigation, or explanation.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-probe.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The document correctly declared lang=en, but CSS inspection found no logical inline/block properties and the root had no explicit direction.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "The tested public templates expose no dates, currency, locale-formatted numbers, durations, or calendar data requiring locale formatting.",
      "reason": "The tested public templates expose no dates, currency, locale-formatted numbers, durations, or calendar data requiring locale formatting."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "The tested pages expose no events, schedules, stored times, or time-zone-sensitive concepts.",
      "reason": "The tested pages expose no events, schedules, stored times, or time-zone-sensitive concepts."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "first-visit screenshot and rejection walkthrough",
      "evidence": "The consent panel gives equally prominent “Do not consent” and “Consent” actions; rejecting it exposed the content without a forced account or continuity step.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-after-consent.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "No editable first-party data-entry or validation flow was present; authentication is delegated to external providers and the search field has no required value.",
      "reason": "No editable first-party data-entry or validation flow was present; authentication is delegated to external providers and the search field has no required value."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "No address, payment, credential, profile, or other personal-data input fields were present on the tested first-party pages.",
      "reason": "No address, payment, credential, profile, or other personal-data input fields were present on the tested first-party pages."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "No checkout, subscription, cancellation, or sensitive account-management flow was exposed; the tested login entry only delegates to Google or Facebook.",
      "reason": "No checkout, subscription, cancellation, or sensitive account-management flow was exposed; the tested login entry only delegates to Google or Facebook."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "The image audit found 10 legacy JPEG images, no responsive srcset on those 10, and 9 below-fold images loaded eagerly.",
      "pathIds": [
        "wallpapers"
      ],
      "artifacts": [
        "evidence/wallpaper-images.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "HAR attributed about 89.5% of transferred bytes to third parties, led by advertising, consent and analytics scripts.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-summary.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence gathered with the mapped visual/objective probes across representative paths.",
      "evidence": "18 of 26 requests were third-party and 642,756 of 718,174 transferred bytes were third-party on a simple listing.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/ringtones-summary.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "WebMCP exposure is emerging and optional; this public catalogue does not declare an agent-facing transaction or productivity capability.",
      "reason": "WebMCP exposure is emerging and optional; this public catalogue does not declare an agent-facing transaction or productivity capability."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Applicability judgement from route and interaction recon.",
      "evidence": "No summarization or language-model task is part of the site’s core ringtone/wallpaper browse and download journey.",
      "reason": "No summarization or language-model task is part of the site’s core ringtone/wallpaper browse and download journey."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "baseline/post heap summaries plus repeated-interaction metrics",
      "evidence": "After 10 play-control activations, DOM nodes and audio element count stayed at 626 and 0; sampled heap moved only from 2,090,064 to 2,095,472 bytes. Independent post heap was smaller than baseline.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot",
        "evidence/memory-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "heap summary totals",
      "evidence": "Heap summaries measured about 18.1–20.6 MB self size for the listing, proportionate to the rendered catalogue and third-party consent/ad code.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "before/after metrics and heap constructor summaries",
      "evidence": "Repeated play activation left DOM node count unchanged; no Detached* constructor appeared among the largest heap constructors and the post snapshot did not grow.",
      "pathIds": [
        "ringtones"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot",
        "evidence/memory-metrics.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06",
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17",
        "F18",
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F23",
        "F24",
        "F25"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "WebMCP exposure is emerging and optional; this public catalogue does not declare an agent-facing transaction or productivity capability. No summarization or language-model task is part of the site’s core ringtone/wallpaper browse and download journey."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and first-visit consent experience; represents entry and orientation.",
      "url": "https://mobcup.fm/",
      "conditions": [
        "desktop",
        "first visit",
        "consent declined"
      ],
      "result": "issues"
    },
    {
      "id": "ringtones",
      "description": "Ringtone listing; represents the primary browse journey and repeated media-card interaction.",
      "url": "https://mobcup.fm/ringtones",
      "conditions": [
        "desktop",
        "360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "prefers-contrast: more",
        "consent declined",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "ringtone-detail",
      "description": "Representative ringtone detail and download journey.",
      "url": "https://mobcup.fm/ringtone/main-lelun-inaam-jasleen-royal-badshah-lHIwYDbb",
      "conditions": [
        "360x800",
        "consent declined",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "wallpapers",
      "description": "Wallpaper listing; represents the image-heavy content template.",
      "url": "https://mobcup.fm/wallpapers",
      "conditions": [
        "360x800",
        "consent declined"
      ],
      "result": "issues"
    },
    {
      "id": "login",
      "description": "Authentication entry; represents the account journey.",
      "url": "https://mobcup.fm/login",
      "conditions": [
        "360x800",
        "consent declined"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Unknown route used to inspect HTTP failure and recovery.",
      "url": "https://mobcup.fm/this-route-does-not-exist-audit",
      "conditions": [
        "404"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "high",
      "confidence": "high",
      "summary": "The site does not adapt to the user’s dark colour-scheme preference.",
      "evidence": "The screenshot captured with prefers-color-scheme: dark remains a light #f9fbfe page, and the CSS probe found no prefers-color-scheme rule.",
      "suggestedFix": "Declare color-scheme and provide preference-driven light/dark surface and text tokens using the dark-mode guidance.",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/ringtones-dark.png",
        "evidence/platform-probe.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F02",
      "severity": "medium",
      "confidence": "high",
      "summary": "High-contrast preferences are not explicitly supported, and low-contrast text already fails WCAG.",
      "evidence": "The preferences probe found no prefers-contrast or forced-colors CSS; Lighthouse measured the ADVERTISEMENT label at 1.85:1 against #f9fbfe.",
      "suggestedFix": "Add forced-colors/prefers-contrast styles and raise normal-mode text contrast to at least WCAG minimums.",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/preferences-probe.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "summary": "Route changes use abrupt document swaps with no View Transition enhancement.",
      "evidence": "CSS inspection found no view-transition declarations on the multi-page browse and detail journeys.",
      "suggestedFix": "Progressively enhance same-origin navigation with cross-document View Transitions and retain an instant-navigation fallback.",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "pathId": "ringtone-detail",
      "url": "https://mobcup.fm/ringtone/main-lelun-inaam-jasleen-royal-badshah-lHIwYDbb",
      "effort": "small"
    },
    {
      "id": "F04",
      "severity": "high",
      "confidence": "high",
      "summary": "The first visit is interrupted by a modal consent wall that obscures all primary content.",
      "evidence": "The initial desktop screenshot shows a large blocking consent panel over the homepage before the user can reach the content.",
      "suggestedFix": "Use a compact, content-first consent surface where legally possible, preserve equally prominent accept/reject actions, and avoid obscuring the core page.",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/home-desktop.png"
      ],
      "pathId": "home",
      "url": "https://mobcup.fm/",
      "effort": "medium"
    },
    {
      "id": "F05",
      "severity": "medium",
      "confidence": "high",
      "summary": "The consent overlay is not exposed through a native dialog or equivalent modal semantics.",
      "evidence": "DOM inspection during the first-visit state found zero dialog elements and zero aria-modal elements while the visible panel blocked the page.",
      "suggestedFix": "Implement the modal with <dialog>, an accessible name, initial focus, Escape/cancel handling, and focus restoration.",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/recon.json"
      ],
      "pathId": "home",
      "url": "https://mobcup.fm/",
      "effort": "medium"
    },
    {
      "id": "F06",
      "severity": "low",
      "confidence": "high",
      "summary": "Reusable listing cards adapt only through global layout rules, not their container.",
      "evidence": "CSS inspection found no @container rules even though the same media-card component appears at desktop and mobile widths.",
      "suggestedFix": "Give the card an appropriate containment context and use size container queries for local card composition changes.",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/ringtones-mobile.png",
        "evidence/platform-probe.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F07",
      "severity": "medium",
      "confidence": "high",
      "summary": "Many interactive tag targets are too short for comfortable touch use.",
      "evidence": "The focus/geometry probe found 14 of the first 15 focusable targets under 44 CSS px; tag links were about 26px high.",
      "suggestedFix": "Increase target boxes and spacing to at least 44 by 44 CSS px where practical while preserving visible focus.",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/ringtones-mobile.png"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "summary": "The 404 state is a dead end with no recovery action.",
      "evidence": "A real unknown route returned HTTP 404 but rendered only “404 NOT FOUND” and no usable site link.",
      "suggestedFix": "Provide a branded not-found page with a home link, search, relevant browse destinations, and preserved HTTP 404 status.",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/404-probe.json"
      ],
      "pathId": "not-found",
      "url": "https://mobcup.fm/this-route-does-not-exist-audit",
      "effort": "small"
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party and render-blocking delivery dominates an otherwise fast page.",
      "evidence": "HAR recorded 718,174 transferred bytes, 642,756 third-party bytes, and parser-inserted CSS plus a script candidate; the script was 605,068 bytes total while the trace LCP was 1.12s.",
      "suggestedFix": "Reduce consent/ad/analytics payload, self-host or trim font selection, and defer non-critical third-party work; keep only confirmed critical CSS in the render path.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/ringtones.har",
        "evidence/ringtones-summary.json",
        "evidence/ringtones-trace-summary.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F10",
      "severity": "low",
      "confidence": "high",
      "summary": "The page ships avoidable JavaScript.",
      "evidence": "Lighthouse reported an estimated 23 KiB of unused JavaScript, while HAR showed third-party scripts as the largest transfer class.",
      "suggestedFix": "Use coverage to remove unused first-party code and conditionally load advertising/analytics modules only when needed and permitted.",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/ringtones-summary.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "summary": "Text contrast is insufficient for the advertisement label.",
      "evidence": "Lighthouse reported the 10px #bbbbbb ADVERTISEMENT label at 1.85:1 against #f9fbfe, below the required 4.5:1.",
      "suggestedFix": "Use a darker text token and avoid relying on tiny, low-contrast labels.",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/ringtones-mobile.png"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F12",
      "severity": "medium",
      "confidence": "high",
      "summary": "The content page has no main landmark.",
      "evidence": "Lighthouse failed landmark-one-main and the DOM probe counted zero main or role=main elements on the ringtone listing.",
      "suggestedFix": "Wrap the primary listing in <main> and keep header, navigation, advertising, and footer in appropriate landmarks.",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/platform-probe.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "summary": "Touch targets do not meet the inclusive target-size/reflow bar.",
      "evidence": "At 360x800 there was no horizontal overflow, but the geometry probe measured numerous tag links at roughly 26px high.",
      "suggestedFix": "Increase target dimensions and verify keyboard, 200% zoom, and narrow reflow together.",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/ringtones-layout-mobile.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F14",
      "severity": "medium",
      "confidence": "high",
      "summary": "The image listing misses modern responsive delivery.",
      "evidence": "The image primitive found 10 legacy JPEGs, 10 images without srcset, and 9 below-fold images without loading=lazy.",
      "suggestedFix": "Generate AVIF/WebP variants, supply width-based srcset/sizes, and lazy-load below-fold images while keeping explicit dimensions.",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/wallpaper-images.json",
        "evidence/wallpapers-mobile.png"
      ],
      "pathId": "wallpapers",
      "url": "https://mobcup.fm/wallpapers",
      "effort": "medium"
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "high",
      "summary": "Canonical and sitemap indexing signals are incomplete.",
      "evidence": "The DOM probe found no canonical URL; an in-browser request to /sitemap.xml returned 404, although robots.txt allowed general crawling.",
      "suggestedFix": "Add self-referencing canonicals on public templates and publish a sitemap referenced from robots.txt.",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/indexing-files.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F16",
      "severity": "low",
      "confidence": "high",
      "summary": "Rich pages lack social preview metadata.",
      "evidence": "The listing probe found zero Open Graph tags; the detail page had useful AudioObject JSON-LD but no evidence of Open Graph/Twitter preview metadata.",
      "suggestedFix": "Add accurate og:title, og:description, og:url, og:image and Twitter card metadata per template.",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/detail-probe.json"
      ],
      "pathId": "ringtone-detail",
      "url": "https://mobcup.fm/ringtone/main-lelun-inaam-jasleen-royal-badshah-lHIwYDbb",
      "effort": "small"
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "summary": "Security headers are absent and first-party cookies are not Secure.",
      "evidence": "The headers primitive found no CSP, HSTS, nosniff, frame protection, Referrer-Policy, or Permissions-Policy; both XSRF-TOKEN and mobcupfm_session lacked Secure.",
      "suggestedFix": "Set Secure on HTTPS cookies and deploy CSP, HSTS, nosniff, frame-ancestors/X-Frame-Options, Referrer-Policy, and a least-privilege Permissions-Policy.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "summary": "Third-party tracking code loads despite the tested reject choice and dominates network bytes.",
      "evidence": "After “Do not consent”, HAR still recorded 18 third-party requests and 642,756 third-party bytes, including Google Ads, Tag Manager, Funding Choices and a Google Analytics collection request.",
      "suggestedFix": "Gate non-essential advertising and analytics until the user grants the relevant purpose, minimize vendors, and verify rejection with a clean network capture.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "artifacts": [
        "evidence/ringtones-summary.json",
        "evidence/ringtones.har"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "summary": "Authentication offers federated providers but no phishing-resistant passkey path.",
      "evidence": "The login surface exposes only Google and Facebook links; no WebAuthn/passkey registration or authentication UI was present.",
      "suggestedFix": "Offer passkey registration and authentication as a first-class account method, with federated login retained as an alternative.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkey-authentication",
      "guidanceCategory": "security",
      "artifacts": [
        "evidence/login-mobile.png",
        "evidence/login-controls.json"
      ],
      "pathId": "login",
      "url": "https://mobcup.fm/login",
      "effort": "large"
    },
    {
      "id": "F20",
      "severity": "high",
      "confidence": "high",
      "summary": "Browser-enforced defensive policies are not configured.",
      "evidence": "The headers primitive found HSTS, clickjacking protection, Referrer-Policy and Permissions-Policy all absent, with no CSP frame-ancestors fallback.",
      "suggestedFix": "Configure the defensive response-header baseline and test it in report-only mode before enforcement where needed.",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/headers.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "high",
      "summary": "HTTP failure pages provide no resilient recovery state.",
      "evidence": "The tested 404 returned the correct status but only “404 NOT FOUND”, with no retry, search, navigation, or explanation.",
      "suggestedFix": "Serve a lightweight, progressively enhanced error template with recovery links and actionable messaging.",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/404-probe.json"
      ],
      "pathId": "not-found",
      "url": "https://mobcup.fm/this-route-does-not-exist-audit",
      "effort": "small"
    },
    {
      "id": "F22",
      "severity": "low",
      "confidence": "high",
      "summary": "Styles are not prepared for bidirectional or alternate writing modes.",
      "evidence": "The document correctly declared lang=en, but CSS inspection found no logical inline/block properties and the root had no explicit direction.",
      "suggestedFix": "Use logical properties for spacing and positioning, retain a correct lang value, and verify an RTL pseudo-localized build.",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F23",
      "severity": "medium",
      "confidence": "high",
      "summary": "Wallpaper assets are inefficiently encoded and loaded.",
      "evidence": "The image audit found 10 legacy JPEG images, no responsive srcset on those 10, and 9 below-fold images loaded eagerly.",
      "suggestedFix": "Serve responsive AVIF/WebP images and defer below-fold downloads.",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/wallpaper-images.json"
      ],
      "pathId": "wallpapers",
      "url": "https://mobcup.fm/wallpapers",
      "effort": "medium"
    },
    {
      "id": "F24",
      "severity": "medium",
      "confidence": "high",
      "summary": "Non-essential third-party background work consumes most transferred bytes.",
      "evidence": "HAR attributed about 89.5% of transferred bytes to third parties, led by advertising, consent and analytics scripts.",
      "suggestedFix": "Deprioritize or conditionally omit third-party fetches, especially after rejection, and batch any essential analytics.",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/ringtones-summary.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    },
    {
      "id": "F25",
      "severity": "medium",
      "confidence": "high",
      "summary": "The third-party budget is disproportionate to the ringtone listing’s user value.",
      "evidence": "18 of 26 requests were third-party and 642,756 of 718,174 transferred bytes were third-party on a simple listing.",
      "suggestedFix": "Set a third-party byte/request budget, remove low-value vendors, and load remaining media and scripts only at the point of use.",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "user-experience",
      "artifacts": [
        "evidence/ringtones-summary.json"
      ],
      "pathId": "ringtones",
      "url": "https://mobcup.fm/ringtones",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Gate non-essential tracking after consent rejection",
      "priority": 1,
      "findingIds": [
        "F18",
        "F24",
        "F25"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Deploy the security-header and secure-cookie baseline",
      "priority": 2,
      "findingIds": [
        "F17",
        "F20"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Make the consent experience content-first and semantic",
      "priority": 3,
      "findingIds": [
        "F04",
        "F05"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Add dark mode, contrast adaptation, and accessible contrast",
      "priority": 4,
      "findingIds": [
        "F01",
        "F02",
        "F11"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Add main landmark and enlarge touch targets",
      "priority": 5,
      "findingIds": [
        "F07",
        "F12",
        "F13"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Modernize responsive wallpaper delivery",
      "priority": 6,
      "findingIds": [
        "F14",
        "F23"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Reduce and defer script/resource delivery",
      "priority": 7,
      "findingIds": [
        "F09",
        "F10"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Build useful 404 and network-failure recovery",
      "priority": 8,
      "findingIds": [
        "F08",
        "F21"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Complete canonical, sitemap, and share metadata",
      "priority": 9,
      "findingIds": [
        "F15",
        "F16"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Add passkey authentication",
      "priority": 10,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "passkey-authentication",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Adopt component queries and logical CSS properties",
      "priority": 11,
      "findingIds": [
        "F06",
        "F22"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Progressively enhance route changes with View Transitions",
      "priority": 12,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "cross-document-transitions",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 900,
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T07-13-55-876Z"
}
