{
  "url": "https://m.fabguys.com",
  "auditedAt": "2026-07-18T18:06:52.818Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage complete. Five representative unauthenticated archetypes audited. Authenticated messaging/profile/account states and real account creation were not covered because they require credentials or create external state.",
  "page": {
    "appType": "mpa",
    "framework": "ASP.NET/server-rendered MPA",
    "notes": "Dedicated mobile site with legacy table/presentational markup, server-rendered public content, and minimal JavaScript."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "discoverability",
    "heap-summary",
    "lighthouse",
    "robots/sitemap fetch",
    "Modern Web Guidance"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "cross-document-transitions",
    "scroll-progress-indicator",
    "accessibility",
    "accessible-error-announcement",
    "optimize-image-priority",
    "improve-text-layout-and-legibility",
    "fluid-scaling",
    "html",
    "security",
    "passkeys",
    "detect-initial-visibility-state",
    "persistent-toast-notifications",
    "translator",
    "forms",
    "validate-input-after-interaction",
    "autofill-sign-in-form",
    "deliver-optimized-decorative-images",
    "performance",
    "privacy",
    "manage-recurring-intervals"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/age-discoverability-crawler.png",
      "caption": "age discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/age-discoverability-rendered.png",
      "caption": "age discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/age-discoverability.json",
      "caption": "age discoverability",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/age-dom.json",
      "caption": "age dom",
      "findingIds": [
        "F02",
        "F13",
        "F15"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/age-mobile.png",
      "caption": "age mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/browse-dom.json",
      "caption": "browse dom",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/browse-mobile.png",
      "caption": "browse mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F03",
        "F09"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "home cookies",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": [
        "F02",
        "F09",
        "F11",
        "F12",
        "F15",
        "F19"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-forced-colors.png",
      "caption": "home forced colors",
      "condition": "forced-colors: active",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "home headers",
      "findingIds": [
        "F16",
        "F18"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/home-heap-post.json",
      "caption": "home heap post",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/home-heap.json",
      "caption": "home heap",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images",
      "findingIds": [
        "F06",
        "F07",
        "F11",
        "F25"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout.json",
      "caption": "home layout",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F01",
        "F09"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "home probe",
      "findingIds": [
        "F04",
        "F08",
        "F10",
        "F13",
        "F14",
        "F15",
        "F19",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "home secrets",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": []
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "home trackers",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home",
      "findingIds": [
        "F06",
        "F07",
        "F08",
        "F10",
        "F12",
        "F21",
        "F25"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-register.json",
      "caption": "lighthouse register",
      "findingIds": [
        "F07",
        "F10",
        "F21"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/login-dom.json",
      "caption": "login dom",
      "findingIds": [
        "F13",
        "F17",
        "F24"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/login-mobile.png",
      "caption": "login mobile",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/register-dom.json",
      "caption": "register dom",
      "findingIds": [
        "F05",
        "F17",
        "F22",
        "F23"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/register-layout.json",
      "caption": "register layout",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/register-mobile.png",
      "caption": "register mobile",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F17",
        "F22"
      ]
    },
    {
      "type": "other",
      "path": "evidence/register-probe.json",
      "caption": "register probe",
      "findingIds": [
        "F04",
        "F07",
        "F08",
        "F10",
        "F13",
        "F21",
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap",
      "findingIds": [
        "F14",
        "F20"
      ]
    }
  ],
  "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": "Model judgement from evidence/home-dark.png, evidence/home-mobile.png across home",
      "evidence": "Dark-scheme screenshot is pixel-identical to light: white surfaces and black text remain; DOM/CSS has no color-scheme or prefers-color-scheme rule.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-probe.json across home",
      "evidence": "DOM probe found 0 active animations and source contains no auto-advance or motion, so reduced-motion users receive a motion-free state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-forced-colors.png across home",
      "evidence": "Forced-colors screenshot retains readable text, links and icons without obscured controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-forced-colors.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "low",
      "method": "Model judgement from evidence/home-dom.json, evidence/age-dom.json across home, browse, age",
      "evidence": "Multi-page navigation changes are abrupt and DOM/CSS inspection found no @view-transition opt-in or View Transition API usage.",
      "pathIds": [
        "home",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/age-dom.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/browse-dom.json, evidence/age-dom.json across browse, age",
      "evidence": "Long listing and article contain no scroll-linked visual effects and the lightweight DOM has no scroll handlers or animation timelines, avoiding main-thread scroll work.",
      "pathIds": [
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/browse-dom.json",
        "evidence/age-dom.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-dom.json, evidence/browse-dom.json across home, browse, age",
      "evidence": "The inspected public surfaces rely on native scrolling and links, with no custom pointer handlers that fight platform gestures.",
      "pathIds": [
        "home",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/browse-dom.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/browse-mobile.png, evidence/age-mobile.png across browse, age",
      "evidence": "The long browse and age-assurance pages have no navigation landmark, persistent header, progress indicator, or other scroll-position orientation aid.",
      "pathIds": [
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/browse-mobile.png",
        "evidence/age-mobile.png"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Model judgement from evidence/home-dom.json, evidence/home-mobile.png across home, login, register, browse, age",
      "evidence": "No tooltip, popover, menu, or other anchored overlay exists on the audited public surfaces, so there is no overlay to position.",
      "pathIds": [
        "home",
        "login",
        "register",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "reason": "No tooltip, popover, menu, or other anchored overlay exists on the audited public surfaces, so there is no overlay to position."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-mobile.png, evidence/browse-mobile.png, evidence/age-mobile.png across home, browse, age",
      "evidence": "Conventional underlined links, section headings on the article, and clear list separators visibly cue destinations and reading order.",
      "pathIds": [
        "home",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/browse-mobile.png",
        "evidence/age-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-mobile.png, evidence/login-mobile.png, evidence/register-mobile.png, evidence/browse-mobile.png, evidence/age-mobile.png across home, login, register, browse, age",
      "evidence": "All five initial screenshots show content immediately with no modal, consent wall, ad overlay, or interstitial.",
      "pathIds": [
        "home",
        "login",
        "register",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/login-mobile.png",
        "evidence/register-mobile.png",
        "evidence/browse-mobile.png",
        "evidence/age-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Model judgement from evidence/home-dom.json, evidence/home-mobile.png across home, login, register, browse, age",
      "evidence": "No transient or modal overlay is present on the audited unauthenticated surfaces.",
      "pathIds": [
        "home",
        "login",
        "register",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "reason": "No transient or modal overlay is present on the audited unauthenticated surfaces."
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-mobile.png, evidence/browse-mobile.png, evidence/age-mobile.png across home, browse, age",
      "evidence": "Screenshots show sparse, content-first pages without sidebars, ads, app framing, or decorative panels.",
      "pathIds": [
        "home",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/browse-mobile.png",
        "evidence/age-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-layout.json, evidence/register-layout.json across home, register",
      "evidence": "Layout at 360x800 reports scrollWidth=clientWidth=360 and 0 horizontal overflow on landing and registration; viewport meta is present.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/home-layout.json",
        "evidence/register-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-mobile.png, evidence/register-mobile.png, evidence/age-mobile.png across home, register, age",
      "evidence": "Simple single-column content and form controls fluidly fit 360px without a reused multi-context component requiring container queries.",
      "pathIds": [
        "home",
        "register",
        "age"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/register-mobile.png",
        "evidence/age-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-probe.json, evidence/register-probe.json across home, register",
      "evidence": "Target-size probe measured primary links at 12-17px high and radio/checkbox controls at 13x13px, far below a comfortable touch target.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/register-probe.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-mobile.png, evidence/register-mobile.png across home, register",
      "evidence": "First viewport states the free gay-dating purpose and presents distinct Login and Join links; registration has one explicit Create my account action.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/register-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/register-mobile.png, evidence/register-probe.json across register",
      "evidence": "Registration exposes username, email, password, account type, DOB, terms and one submit action in a single continuous form; audit stopped pre-submit to avoid creating an account.",
      "pathIds": [
        "register"
      ],
      "artifacts": [
        "evidence/register-mobile.png",
        "evidence/register-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/register-dom.json across register",
      "evidence": "Registration source handles invalid fields with blocking JavaScript alert() calls; there are no inline error summaries, persistent field messages, or retry guidance.",
      "pathIds": [
        "register"
      ],
      "artifacts": [
        "evidence/register-dom.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-trace-summary.json, evidence/home-layout.json, evidence/lighthouse-home.json across home",
      "evidence": "Trace measured FCP 524ms, LCP 617ms, zero long tasks/TBT, and layout measured CLS 0; Lighthouse performance scored 1.00.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-layout.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-layout.json, evidence/register-layout.json across home, register",
      "evidence": "Layout observer recorded CLS 0 and no shifts at 360px.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/home-layout.json",
        "evidence/register-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-trace-summary.json, evidence/home-layout.json across home",
      "evidence": "Trace and layout observers recorded no long tasks and total blocking time of 0ms.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-summary.json, evidence/lighthouse-home.json, evidence/home-images.json across home",
      "evidence": "HAR is tiny (21,379 bytes, 9 requests) with no blocking candidates, but Lighthouse reports inefficient cache lifetime and image delivery; the LCP image lacks explicit dimensions/srcset.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-summary.json, evidence/home-trace-summary.json across home",
      "evidence": "HAR shows no JavaScript requests on landing and only 21KB total transfer; trace has no script blocking, so no large duplicate/unused code payload is shipped there.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-images.json, evidence/lighthouse-home.json, evidence/lighthouse-register.json, evidence/register-probe.json across home, register",
      "evidence": "Lighthouse accessibility is 0.63 on home and 0.76 on registration: 9 home images lack alt, and username, email, password and DOB selects have no associated labels.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-register.json",
        "evidence/register-probe.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/lighthouse-home.json, evidence/home-forced-colors.png, evidence/register-mobile.png across home, register",
      "evidence": "Lighthouse reported no color-contrast audit failure, and normal/forced-colors screenshots remain legible.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-forced-colors.png",
        "evidence/register-mobile.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-probe.json, evidence/register-probe.json, evidence/lighthouse-home.json across home, register",
      "evidence": "DOM probes found no main/nav/header/footer landmarks and no h1 on landing/registration; Lighthouse flags missing main landmark.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/register-probe.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-mobile.png, evidence/browse-mobile.png, evidence/home-dom.json across home, browse",
      "evidence": "Footer links render at only 8pt/12px and dense browse metadata uses 10pt text, producing cramped reading and tap areas on mobile.",
      "pathIds": [
        "home",
        "browse"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/browse-mobile.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/lighthouse-home.json, evidence/lighthouse-register.json, evidence/home-probe.json, evidence/register-probe.json across home, register",
      "evidence": "Both pages set maximum-scale=1.0, which Lighthouse flags as restricting zoom; many measured controls are under 44px despite correct horizontal reflow.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-register.json",
        "evidence/home-probe.json",
        "evidence/register-probe.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/lighthouse-home.json, evidence/lighthouse-register.json across home, register",
      "evidence": "Lighthouse best-practices reported no console-error or uncaught-exception failure across landing and registration.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-register.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-images.json, evidence/home-dom.json across home",
      "evidence": "Image audit found all 10 images without dimensions, 10 legacy-format assets, and 9 missing alt attributes; markup also relies heavily on layout tables and obsolete presentational attributes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/lighthouse-home.json, evidence/home-dom.json across home",
      "evidence": "Lighthouse reports the landing page is ineligible for back/forward cache restoration; source also contains legacy browser-prefixed gradients and presentational markup.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-probe.json, evidence/login-dom.json, evidence/register-probe.json, evidence/age-dom.json across home, login, register, age",
      "evidence": "Landing has a descriptive title but no meta description; login title is empty and other titles are generic (register, age-assurance).",
      "pathIds": [
        "home",
        "login",
        "register",
        "age"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/login-dom.json",
        "evidence/register-probe.json",
        "evidence/age-dom.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-probe.json, evidence/robots.txt, evidence/home-discoverability.json across home, age",
      "evidence": "Visible navigation uses real href links, viewport metadata exists, robots.txt is reachable, and public content is server-rendered; robots intentionally excludes account flows.",
      "pathIds": [
        "home",
        "age"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/robots.txt",
        "evidence/home-discoverability.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-probe.json, evidence/sitemap.xml, evidence/robots.txt across home",
      "evidence": "No canonical link is present and /sitemap.xml returns an HTML File not found body with status-like content rather than a sitemap.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/sitemap.xml",
        "evidence/robots.txt"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-probe.json, evidence/home-dom.json, evidence/age-dom.json across home, age",
      "evidence": "Landing and age-assurance pages expose no JSON-LD and no Open Graph/social-preview metadata despite representing an organization/service and substantive policy content.",
      "pathIds": [
        "home",
        "age"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-dom.json",
        "evidence/age-dom.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-headers.json, evidence/home-cookies.json across home",
      "evidence": "HTTPS is used, but CSP, HSTS and nosniff are absent; 7 cookies are insecure, including ASP.NET_SessionId without Secure, and several are SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-trackers.json, evidence/home-secrets.json, evidence/home-summary.json across home",
      "evidence": "Tracker probe found no known trackers, secrets scan found none, and the only secondary origin is the same registrable-domain static asset host.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-secrets.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/login-dom.json, evidence/register-dom.json, evidence/register-mobile.png across login, register",
      "evidence": "No permission prompt fires on load, but authentication exposes only username/password and no passkey/WebAuthn option; registration defaults Remember my login on.",
      "pathIds": [
        "login",
        "register"
      ],
      "artifacts": [
        "evidence/login-dom.json",
        "evidence/register-dom.json",
        "evidence/register-mobile.png"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-headers.json across home",
      "evidence": "Headers probe finds no HSTS, CSP/frame-ancestors, Referrer-Policy or Permissions-Policy; only X-Frame-Options SAMEORIGIN is present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-discoverability.json, evidence/age-discoverability.json across home, age",
      "evidence": "Discoverability reports 100% raw-HTML content coverage and no JS shell on landing and article; core links/content work without JavaScript.",
      "pathIds": [
        "home",
        "age"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/age-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-dom.json, evidence/register-dom.json, evidence/age-dom.json across home, register, age",
      "evidence": "Audited surfaces use server-rendered documents, native controls and ordinary links with no fragile overlay or async dependency state.",
      "pathIds": [
        "home",
        "register",
        "age"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/register-dom.json",
        "evidence/age-dom.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-probe.json, evidence/home-dom.json across home",
      "evidence": "This mobile dating service has no web app manifest or service worker/offline fallback signal despite app-like repeat use.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/sitemap.xml across home",
      "evidence": "Requesting /sitemap.xml returns a File not found message in an otherwise 200-looking HTML response with only a home link; no intentional 404 status/recovery shell is exposed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/sitemap.xml"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/home-probe.json, evidence/register-probe.json, evidence/lighthouse-home.json, evidence/lighthouse-register.json across home, register",
      "evidence": "All audited documents have an empty html lang and no dir; Lighthouse flags html-has-lang, and CSS uses physical left/right properties.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/register-probe.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-register.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-dom.json, evidence/home-mobile.png across home, register, browse, age",
      "evidence": "The audited unauthenticated surfaces do not render locale-sensitive dates, currency, durations, or numbers that require Intl formatting.",
      "pathIds": [
        "home",
        "register",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "reason": "The audited unauthenticated surfaces do not render locale-sensitive dates, currency, durations, or numbers that require Intl formatting."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Model judgement from evidence/home-dom.json, evidence/home-mobile.png across home, register, browse, age",
      "evidence": "No scheduled event or time-zone-sensitive timestamp appears on the audited public surfaces.",
      "pathIds": [
        "home",
        "register",
        "browse",
        "age"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "reason": "No scheduled event or time-zone-sensitive timestamp appears on the audited public surfaces."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/register-mobile.png, evidence/register-dom.json across register",
      "evidence": "Registration preselects Remember my login and bundles age confirmation with agreement to site rules; these defaults are not maximally privacy-preserving or granular.",
      "pathIds": [
        "register"
      ],
      "artifacts": [
        "evidence/register-mobile.png",
        "evidence/register-dom.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/register-dom.json across register",
      "evidence": "Required-field validation uses sequential alert() dialogs and focus jumps instead of post-interaction inline messages, aria-invalid and an accessible error summary.",
      "pathIds": [
        "register"
      ],
      "artifacts": [
        "evidence/register-dom.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Model judgement from evidence/login-dom.json, evidence/register-probe.json across login, register",
      "evidence": "Login username/password lack standard autocomplete tokens; registration email has none and username explicitly disables autocomplete.",
      "pathIds": [
        "login",
        "register"
      ],
      "artifacts": [
        "evidence/login-dom.json",
        "evidence/register-probe.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-mobile.png, evidence/register-mobile.png across home, register",
      "evidence": "Public registration clearly says free, labels the 18+ commitment on the submit action, links site rules, and exposes contact/content-removal routes; no payment or forced subscription is encountered.",
      "pathIds": [
        "home",
        "register"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/register-mobile.png"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-images.json, evidence/lighthouse-home.json across home",
      "evidence": "Images probe finds 10/10 legacy JPG/PNG/GIF assets, no explicit dimensions, and the hero lacks srcset; Lighthouse estimates image-delivery savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-summary.json, evidence/home-trace-summary.json across home",
      "evidence": "HAR transfers only 21KB in 9 requests and trace records 0 long tasks/TBT; no background fetch or script processing is present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-summary.json, evidence/home-trackers.json across home",
      "evidence": "No video/audio/autoplay or known tracker exists; only 15KB comes from the related static asset host, proportionate to the page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trackers.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Model judgement from evidence/home-dom.json, evidence/home-mobile.png across home, login, register",
      "evidence": "No declared agent-facing intent exists; this public dating service handles sensitive interpersonal/account actions where exposing WebMCP tools is not an established expectation.",
      "pathIds": [
        "home",
        "login",
        "register"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "reason": "No declared agent-facing intent exists; this public dating service handles sensitive interpersonal/account actions where exposing WebMCP tools is not an established expectation."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Model judgement from evidence/home-dom.json, evidence/home-mobile.png across home, age",
      "evidence": "No user task on the audited public surfaces needs on-device language-model or summarisation inference.",
      "pathIds": [
        "home",
        "age"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png"
      ],
      "reason": "No user task on the audited public surfaces needs on-device language-model or summarisation inference."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Model judgement from evidence/home-heap.json across home",
      "evidence": "The audited landing page has no modal, SPA route, infinite scroll, or other representative repeatable interaction; repeated synthetic interaction would not be meaningful.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap.json"
      ],
      "reason": "The audited landing page has no modal, SPA route, infinite scroll, or other representative repeatable interaction; repeated synthetic interaction would not be meaningful."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Model judgement from evidence/home-heap.json, evidence/home-heap-post.json across home",
      "evidence": "Heap summary is proportionate at 28,214 nodes and 935,724 self-size bytes; post-scroll snapshot remains under 1MB.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap.json",
        "evidence/home-heap-post.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Model judgement from evidence/home-heap.json, evidence/home-heap-post.json across home",
      "evidence": "Baseline/post heap summaries show no Detached* constructor among retained populations; the static page has no app listeners/timers and post-scroll growth is only ~63KB in separate fresh sessions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap.json",
        "evidence/home-heap-post.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F14",
        "F15"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16",
        "F17",
        "F18"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F22",
        "F23",
        "F24"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No declared agent-facing intent exists; this public dating service handles sensitive interpersonal/account actions where exposing WebMCP tools is not an established expectation. No user task on the audited public surfaces needs on-device language-model or summarisation inference."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Public landing page and primary choice between login and registration.",
      "url": "https://m.fabguys.com/",
      "conditions": [
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "forced-colors: active",
        "prefers-reduced-motion: reduce",
        "crawler/no JavaScript"
      ],
      "result": "issues"
    },
    {
      "id": "login",
      "description": "Existing-member authentication form.",
      "url": "https://m.fabguys.com/login.aspx",
      "conditions": [
        "viewport: 360x800",
        "keyboard/form semantics"
      ],
      "result": "issues"
    },
    {
      "id": "register",
      "description": "Primary account-creation flow through the complete pre-submit form; submission was not performed to avoid creating a real account.",
      "url": "https://m.fabguys.com/register.aspx?tip=signupffm",
      "conditions": [
        "viewport: 360x800",
        "keyboard/form semantics",
        "invalid-input source review"
      ],
      "result": "issues"
    },
    {
      "id": "browse",
      "description": "Public profile-listing archetype and long scrolling content.",
      "url": "https://m.fabguys.com/browse/online_men",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "age",
      "description": "Long-form policy/content archetype and age-assurance journey explanation.",
      "url": "https://m.fabguys.com/content/age-assurance",
      "conditions": [
        "viewport: 360x800",
        "crawler/no JavaScript"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "severity": "medium",
      "confidence": "high",
      "summary": "Dark-scheme screenshot is pixel-identical to light: white surfaces and black text remain",
      "evidence": "Dark-scheme screenshot is pixel-identical to light: white surfaces and black text remain; DOM/CSS has no color-scheme or prefers-color-scheme rule.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Add color-scheme: light dark and theme surface/text tokens with prefers-color-scheme or light-dark().",
      "effort": "small"
    },
    {
      "id": "F02",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "severity": "low",
      "confidence": "low",
      "summary": "Multi-page navigation changes are abrupt and DOM/CSS inspection found no @view-transition opt-in or View Transition API usage.",
      "evidence": "Multi-page navigation changes are abrupt and DOM/CSS inspection found no @view-transition opt-in or View Transition API usage.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/age-dom.json"
      ],
      "suggestedFix": "Opt same-origin pages into cross-document View Transitions, with reduced-motion respected.",
      "effort": "small"
    },
    {
      "id": "F03",
      "pathId": "browse",
      "url": "https://m.fabguys.com/browse/online_men",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-progress-indicator",
      "severity": "low",
      "confidence": "medium",
      "summary": "The long browse and age-assurance pages have no navigation landmark, persistent header, progress indicator, or other scroll-position orientation aid.",
      "evidence": "The long browse and age-assurance pages have no navigation landmark, persistent header, progress indicator, or other scroll-position orientation aid.",
      "artifacts": [
        "evidence/browse-mobile.png",
        "evidence/age-mobile.png"
      ],
      "suggestedFix": "Add semantic navigation and a restrained sticky/progress affordance on long listing/article pages.",
      "effort": "medium"
    },
    {
      "id": "F04",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Target-size probe measured primary links at 12-17px high and radio/checkbox controls at 13x13px, far below a comfortable touch target.",
      "evidence": "Target-size probe measured primary links at 12-17px high and radio/checkbox controls at 13x13px, far below a comfortable touch target.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/register-probe.json"
      ],
      "suggestedFix": "Increase link/control hit areas to at least 44px where practical and retain visible focus styles.",
      "effort": "small"
    },
    {
      "id": "F05",
      "pathId": "register",
      "url": "https://m.fabguys.com/register.aspx?tip=signupffm",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "accessible-error-announcement",
      "severity": "high",
      "confidence": "high",
      "summary": "Registration source handles invalid fields with blocking JavaScript alert() calls",
      "evidence": "Registration source handles invalid fields with blocking JavaScript alert() calls; there are no inline error summaries, persistent field messages, or retry guidance.",
      "artifacts": [
        "evidence/register-dom.json"
      ],
      "suggestedFix": "Replace alert validation with inline post-interaction errors, a focusable summary and live-region announcements.",
      "effort": "medium"
    },
    {
      "id": "F06",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "severity": "low",
      "confidence": "medium",
      "summary": "HAR is tiny (21,379 bytes, 9 requests) with no blocking candidates, but Lighthouse reports inefficient cache lifetime and image delivery",
      "evidence": "HAR is tiny (21,379 bytes, 9 requests) with no blocking candidates, but Lighthouse reports inefficient cache lifetime and image delivery; the LCP image lacks explicit dimensions/srcset.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/home-images.json"
      ],
      "suggestedFix": "Give images dimensions/srcset, modern encodings and effective cache headers while prioritising the hero.",
      "effort": "small"
    },
    {
      "id": "F07",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Lighthouse accessibility is 0.63 on home and 0.76 on registration: 9 home images lack alt, and username, email, password and DOB selects have no associated labels.",
      "evidence": "Lighthouse accessibility is 0.63 on home and 0.76 on registration: 9 home images lack alt, and username, email, password and DOB selects have no associated labels.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-register.json",
        "evidence/register-probe.json"
      ],
      "suggestedFix": "Add html lang, semantic landmarks, useful/empty alt text as appropriate, and explicit labels for every field/select.",
      "effort": "medium"
    },
    {
      "id": "F08",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "DOM probes found no main/nav/header/footer landmarks and no h1 on landing/registration",
      "evidence": "DOM probes found no main/nav/header/footer landmarks and no h1 on landing/registration; Lighthouse flags missing main landmark.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/register-probe.json",
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Add main/nav landmarks and one logical h1 per page; verify keyboard order and focus-visible.",
      "effort": "medium"
    },
    {
      "id": "F09",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "legible-text",
      "guidanceId": "improve-text-layout-and-legibility",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Footer links render at only 8pt/12px and dense browse metadata uses 10pt text, producing cramped reading and tap areas on mobile.",
      "evidence": "Footer links render at only 8pt/12px and dense browse metadata uses 10pt text, producing cramped reading and tap areas on mobile.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/browse-mobile.png",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Raise small footer/list text and spacing to comfortable mobile reading sizes.",
      "effort": "small"
    },
    {
      "id": "F10",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "severity": "high",
      "confidence": "high",
      "summary": "Both pages set maximum-scale=1.0, which Lighthouse flags as restricting zoom",
      "evidence": "Both pages set maximum-scale=1.0, which Lighthouse flags as restricting zoom; many measured controls are under 44px despite correct horizontal reflow.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-register.json",
        "evidence/home-probe.json",
        "evidence/register-probe.json"
      ],
      "suggestedFix": "Remove maximum-scale=1.0 and enlarge touch targets while preserving reflow.",
      "effort": "small"
    },
    {
      "id": "F11",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image audit found all 10 images without dimensions, 10 legacy-format assets, and 9 missing alt attributes",
      "evidence": "Image audit found all 10 images without dimensions, 10 legacy-format assets, and 9 missing alt attributes; markup also relies heavily on layout tables and obsolete presentational attributes.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Modernise semantic markup and declare image dimensions/aspect ratios; remove presentational attributes/tables.",
      "effort": "medium"
    },
    {
      "id": "F12",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "severity": "low",
      "confidence": "medium",
      "summary": "Lighthouse reports the landing page is ineligible for back/forward cache restoration",
      "evidence": "Lighthouse reports the landing page is ineligible for back/forward cache restoration; source also contains legacy browser-prefixed gradients and presentational markup.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Investigate and remove the BFCache blocker and retire obsolete CSS/HTML patterns.",
      "effort": "medium"
    },
    {
      "id": "F13",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "guidanceId": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "Landing has a descriptive title but no meta description",
      "evidence": "Landing has a descriptive title but no meta description; login title is empty and other titles are generic (register, age-assurance).",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/login-dom.json",
        "evidence/register-probe.json",
        "evidence/age-dom.json"
      ],
      "suggestedFix": "Give every template a unique descriptive title and meta description.",
      "effort": "small"
    },
    {
      "id": "F14",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "No canonical link is present and /sitemap.xml returns an HTML File not found body with status-like content rather than a sitemap.",
      "evidence": "No canonical link is present and /sitemap.xml returns an HTML File not found body with status-like content rather than a sitemap.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/sitemap.xml",
        "evidence/robots.txt"
      ],
      "suggestedFix": "Publish a valid sitemap.xml, canonical links and consistent status/indexing signals.",
      "effort": "small"
    },
    {
      "id": "F15",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Landing and age-assurance pages expose no JSON-LD and no Open Graph/social-preview metadata despite representing an organization/service and substantive policy content.",
      "evidence": "Landing and age-assurance pages expose no JSON-LD and no Open Graph/social-preview metadata despite representing an organization/service and substantive policy content.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-dom.json",
        "evidence/age-dom.json"
      ],
      "suggestedFix": "Add accurate Open Graph metadata and relevant JSON-LD for the service and content pages.",
      "effort": "small"
    },
    {
      "id": "F16",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "severity": "critical",
      "confidence": "high",
      "summary": "HTTPS is used, but CSP, HSTS and nosniff are absent",
      "evidence": "HTTPS is used, but CSP, HSTS and nosniff are absent; 7 cookies are insecure, including ASP.NET_SessionId without Secure, and several are SameSite=None.",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "suggestedFix": "Set Secure, HttpOnly where appropriate, and Lax/Strict cookies; deploy HSTS, CSP and nosniff.",
      "effort": "medium"
    },
    {
      "id": "F17",
      "pathId": "login",
      "url": "https://m.fabguys.com/login.aspx",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "severity": "medium",
      "confidence": "medium",
      "summary": "No permission prompt fires on load, but authentication exposes only username/password and no passkey/WebAuthn option",
      "evidence": "No permission prompt fires on load, but authentication exposes only username/password and no passkey/WebAuthn option; registration defaults Remember my login on.",
      "artifacts": [
        "evidence/login-dom.json",
        "evidence/register-dom.json",
        "evidence/register-mobile.png"
      ],
      "suggestedFix": "Offer passkey/WebAuthn sign-in and make persistent login an explicit user choice.",
      "effort": "large"
    },
    {
      "id": "F18",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "Headers probe finds no HSTS, CSP/frame-ancestors, Referrer-Policy or Permissions-Policy",
      "evidence": "Headers probe finds no HSTS, CSP/frame-ancestors, Referrer-Policy or Permissions-Policy; only X-Frame-Options SAMEORIGIN is present.",
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "suggestedFix": "Deploy CSP/frame-ancestors, HSTS, Referrer-Policy and a least-privilege Permissions-Policy.",
      "effort": "medium"
    },
    {
      "id": "F19",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "detect-initial-visibility-state",
      "severity": "low",
      "confidence": "medium",
      "summary": "This mobile dating service has no web app manifest or service worker/offline fallback signal despite app-like repeat use.",
      "evidence": "This mobile dating service has no web app manifest or service worker/offline fallback signal despite app-like repeat use.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "For this repeat-use mobile service, add a manifest and a minimal offline/retry fallback.",
      "effort": "medium"
    },
    {
      "id": "F20",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Requesting /sitemap.xml returns a File not found message in an otherwise 200-looking HTML response with only a home link",
      "evidence": "Requesting /sitemap.xml returns a File not found message in an otherwise 200-looking HTML response with only a home link; no intentional 404 status/recovery shell is exposed.",
      "artifacts": [
        "evidence/sitemap.xml"
      ],
      "suggestedFix": "Return correct HTTP error statuses and provide useful, navigable recovery pages.",
      "effort": "small"
    },
    {
      "id": "F21",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "severity": "high",
      "confidence": "high",
      "summary": "All audited documents have an empty html lang and no dir",
      "evidence": "All audited documents have an empty html lang and no dir; Lighthouse flags html-has-lang, and CSS uses physical left/right properties.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/register-probe.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-register.json"
      ],
      "suggestedFix": "Set correct lang/dir and migrate physical CSS properties to logical inline/block properties.",
      "effort": "small"
    },
    {
      "id": "F22",
      "pathId": "register",
      "url": "https://m.fabguys.com/register.aspx?tip=signupffm",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "forms",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Registration preselects Remember my login and bundles age confirmation with agreement to site rules",
      "evidence": "Registration preselects Remember my login and bundles age confirmation with agreement to site rules; these defaults are not maximally privacy-preserving or granular.",
      "artifacts": [
        "evidence/register-mobile.png",
        "evidence/register-dom.json"
      ],
      "suggestedFix": "Default persistent login off and separate age attestation from terms acceptance.",
      "effort": "small"
    },
    {
      "id": "F23",
      "pathId": "register",
      "url": "https://m.fabguys.com/register.aspx?tip=signupffm",
      "principleId": "be-trustworthy",
      "principleCheckId": "humane-error-handling",
      "guidanceId": "validate-input-after-interaction",
      "severity": "high",
      "confidence": "high",
      "summary": "Required-field validation uses sequential alert() dialogs and focus jumps instead of post-interaction inline messages, aria-invalid and an accessible error summary.",
      "evidence": "Required-field validation uses sequential alert() dialogs and focus jumps instead of post-interaction inline messages, aria-invalid and an accessible error summary.",
      "artifacts": [
        "evidence/register-dom.json"
      ],
      "suggestedFix": "Use constraint validation plus :user-invalid, aria-invalid and accessible inline feedback after interaction.",
      "effort": "medium"
    },
    {
      "id": "F24",
      "pathId": "login",
      "url": "https://m.fabguys.com/login.aspx",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-sign-in-form",
      "severity": "high",
      "confidence": "high",
      "summary": "Login username/password lack standard autocomplete tokens",
      "evidence": "Login username/password lack standard autocomplete tokens; registration email has none and username explicitly disables autocomplete.",
      "artifacts": [
        "evidence/login-dom.json",
        "evidence/register-probe.json"
      ],
      "suggestedFix": "Add correct username/current-password/email/new-password autocomplete tokens.",
      "effort": "small"
    },
    {
      "id": "F25",
      "pathId": "home",
      "url": "https://m.fabguys.com/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "severity": "low",
      "confidence": "medium",
      "summary": "Images probe finds 10/10 legacy JPG/PNG/GIF assets, no explicit dimensions, and the hero lacks srcset",
      "evidence": "Images probe finds 10/10 legacy JPG/PNG/GIF assets, no explicit dimensions, and the hero lacks srcset; Lighthouse estimates image-delivery savings.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Serve appropriately sized AVIF/WebP assets with srcset and dimensions.",
      "effort": "small"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Set Secure, HttpOnly where appropriate, and Lax/Strict cookies; deploy HSTS, CSP and nosniff.",
      "priority": 1,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Increase link/control hit areas to at least 44px where practical and retain visible focus styles.",
      "priority": 2,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Replace alert validation with inline post-interaction errors, a focusable summary and live-region announcements.",
      "priority": 3,
      "findingIds": [
        "F05"
      ],
      "guidanceId": "accessible-error-announcement",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Add html lang, semantic landmarks, useful/empty alt text as appropriate, and explicit labels for every field/select.",
      "priority": 4,
      "findingIds": [
        "F07"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Add main/nav landmarks and one logical h1 per page; verify keyboard order and focus-visible.",
      "priority": 5,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Remove maximum-scale=1.0 and enlarge touch targets while preserving reflow.",
      "priority": 6,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Give every template a unique descriptive title and meta description.",
      "priority": 7,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Publish a valid sitemap.xml, canonical links and consistent status/indexing signals.",
      "priority": 8,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Deploy CSP/frame-ancestors, HSTS, Referrer-Policy and a least-privilege Permissions-Policy.",
      "priority": 9,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Set correct lang/dir and migrate physical CSS properties to logical inline/block properties.",
      "priority": 10,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "translator",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Use constraint validation plus :user-invalid, aria-invalid and accessible inline feedback after interaction.",
      "priority": 11,
      "findingIds": [
        "F23"
      ],
      "guidanceId": "validate-input-after-interaction",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Add correct username/current-password/email/new-password autocomplete tokens.",
      "priority": 12,
      "findingIds": [
        "F24"
      ],
      "guidanceId": "autofill-sign-in-form",
      "status": "open"
    },
    {
      "id": "T13",
      "title": "Add color-scheme: light dark and theme surface/text tokens with prefers-color-scheme or light-dark().",
      "priority": 13,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T14",
      "title": "Raise small footer/list text and spacing to comfortable mobile reading sizes.",
      "priority": 14,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "improve-text-layout-and-legibility",
      "status": "open"
    },
    {
      "id": "T15",
      "title": "Modernise semantic markup and declare image dimensions/aspect ratios; remove presentational attributes/tables.",
      "priority": 15,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T16",
      "title": "Add accurate Open Graph metadata and relevant JSON-LD for the service and content pages.",
      "priority": 16,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T17",
      "title": "Offer passkey/WebAuthn sign-in and make persistent login an explicit user choice.",
      "priority": 17,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "T18",
      "title": "Return correct HTTP error statuses and provide useful, navigable recovery pages.",
      "priority": 18,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T19",
      "title": "Default persistent login off and separate age attestation from terms acceptance.",
      "priority": 19,
      "findingIds": [
        "F22"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T20",
      "title": "Opt same-origin pages into cross-document View Transitions, with reduced-motion respected.",
      "priority": 20,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "cross-document-transitions",
      "status": "open"
    },
    {
      "id": "T21",
      "title": "Add semantic navigation and a restrained sticky/progress affordance on long listing/article pages.",
      "priority": 21,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "scroll-progress-indicator",
      "status": "open"
    },
    {
      "id": "T22",
      "title": "Give images dimensions/srcset, modern encodings and effective cache headers while prioritising the hero.",
      "priority": 22,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T23",
      "title": "Investigate and remove the BFCache blocker and retire obsolete CSS/HTML patterns.",
      "priority": 23,
      "findingIds": [
        "F12"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T24",
      "title": "For this repeat-use mobile service, add a manifest and a minimal offline/retry fallback.",
      "priority": 24,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "detect-initial-visibility-state",
      "status": "open"
    },
    {
      "id": "T25",
      "title": "Serve appropriately sized AVIF/WebP assets with srcset and dimensions.",
      "priority": 25,
      "findingIds": [
        "F25"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 900,
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T18-06-52-818Z"
}
