{
  "url": "https://www.joyclub.de",
  "auditedAt": "2026-07-23T17:54:44.678Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete representative audit of four public archetypes plus a 404 recovery state. Authenticated member-only areas, payments, account cancellation execution, livestream playback and actual account creation were not covered because they require credentials, personal data or commitment.",
  "page": {
    "appType": "hybrid",
    "framework": "Mixed server-rendered pages with custom elements/client-rendered islands",
    "notes": "Public German adult community, events, education and registration. Sex Education is a JS shell while other templates are substantially server rendered."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse",
    "curl metadata",
    "modern-web-guidance"
  ],
  "guidanceConsulted": [
    "size-aware-styling",
    "css",
    "summarizer",
    "agentic-javascript-tools",
    "search-hidden-content",
    "language-model",
    "accessibility",
    "schedule-tasks-by-priority",
    "performance",
    "improve-text-layout-and-legibility",
    "highlight-text-ranges",
    "fluid-scaling",
    "translator",
    "support-global-calendar-systems",
    "coordinate-global-events",
    "calculate-with-intrinsic-sizes",
    "move-dom-element-without-losing-state",
    "faster-spa-view-transitions",
    "privacy",
    "security",
    "passkey-conditional-create",
    "passkey-management",
    "stabilize-reactive-state",
    "deprioritize-background-fetches",
    "validate-input-after-interaction",
    "dark-mode",
    "autofill-payment-form",
    "scroll-snap-realtime-feedback",
    "carousel-slide-effects",
    "directional-navigation-transitions",
    "persistent-app-tours",
    "defer-rendering-heavy-content",
    "light-dismiss-a-dialog",
    "position-aware-tooltips",
    "carousel-snap-highlights",
    "scroll-position-aware-elements",
    "adapt-scrollbar-to-contrast-preferences",
    "interest-triggered-action-previews",
    "passkey-reauthentication",
    "capture-location-agnostic-data",
    "optimize-image-priority",
    "identify-heavy-scripts",
    "forms",
    "accessible-error-announcement",
    "autofill-sign-up-form",
    "deliver-optimized-decorative-images",
    "efficient-background-processing",
    "html"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/discover-desktop.png",
      "caption": "Audit evidence: discover-desktop.png",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/discover-dom.json",
      "caption": "Audit evidence: discover-dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/education-desktop.png",
      "caption": "Audit evidence: education-desktop.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/education-discoverability-crawler.png",
      "caption": "Audit evidence: education-discoverability-crawler.png",
      "findingIds": [
        "F18",
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/education-discoverability-rendered.png",
      "caption": "Audit evidence: education-discoverability-rendered.png",
      "findingIds": [
        "F18",
        "F22"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/education-discoverability.json",
      "caption": "Audit evidence: education-discoverability.json",
      "findingIds": [
        "F18",
        "F22"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/education-dom.json",
      "caption": "Audit evidence: education-dom.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/education-meta.json",
      "caption": "Audit evidence: education-meta.json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/education-mobile-layout.json",
      "caption": "Audit evidence: education-mobile-layout.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/education-mobile.png",
      "caption": "Audit evidence: education-mobile.png",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/events-desktop.png",
      "caption": "Audit evidence: events-desktop.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/events-discoverability-crawler.png",
      "caption": "Audit evidence: events-discoverability-crawler.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/events-discoverability-rendered.png",
      "caption": "Audit evidence: events-discoverability-rendered.png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/events-discoverability.json",
      "caption": "Audit evidence: events-discoverability.json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/events-dom.json",
      "caption": "Audit evidence: events-dom.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/events-meta.json",
      "caption": "Audit evidence: events-meta.json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/events-mobile-layout.json",
      "caption": "Audit evidence: events-mobile-layout.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/events-mobile.png",
      "caption": "Audit evidence: events-mobile.png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-list.json",
      "caption": "Audit evidence: guidance-list.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "Audit evidence: guidance-retrieved.md",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/har-detail.json",
      "caption": "Audit evidence: har-detail.json",
      "findingIds": [
        "F11",
        "F26"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Audit evidence: heap-baseline.heapsnapshot",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Audit evidence: heap-post.heapsnapshot",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-contrast.png",
      "caption": "Audit evidence: home-contrast.png",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "Audit evidence: home-cookies.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Audit evidence: home-dark.png",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Audit evidence: home-desktop.png",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "Audit evidence: home-discoverability-crawler.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "Audit evidence: home-discoverability-rendered.png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "Audit evidence: home-discoverability.json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Audit evidence: home-dom.json",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "Audit evidence: home-headers.json",
      "findingIds": [
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "Audit evidence: home-images.json",
      "findingIds": [
        "F16",
        "F25"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-meta.json",
      "caption": "Audit evidence: home-meta.json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Audit evidence: home-mobile-layout.json",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Audit evidence: home-mobile.png",
      "findingIds": [
        "F05",
        "F06",
        "F08"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe-reduced.json",
      "caption": "Audit evidence: home-probe-reduced.json",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "Audit evidence: home-probe.json",
      "findingIds": [
        "F01",
        "F02",
        "F03",
        "F04",
        "F05",
        "F06",
        "F07",
        "F08",
        "F14",
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "Audit evidence: home-secrets.json",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Audit evidence: home-summary.json",
      "findingIds": [
        "F11",
        "F25",
        "F27"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Audit evidence: home-trace-summary.json",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "Audit evidence: home-trace.json",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "Audit evidence: home-trackers.json",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Audit evidence: home.har",
      "findingIds": [
        "F11",
        "F25",
        "F27"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-detail.json",
      "caption": "Audit evidence: lighthouse-detail.json",
      "findingIds": [
        "F12",
        "F13",
        "F16",
        "F17"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary.json",
      "caption": "Audit evidence: lighthouse-summary.json",
      "findingIds": [
        "F10"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Audit evidence: lighthouse.json",
      "findingIds": [
        "F10",
        "F11",
        "F12",
        "F13",
        "F17",
        "F18",
        "F26"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/not-found-dom.json",
      "caption": "Audit evidence: not-found-dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/not-found.png",
      "caption": "Audit evidence: not-found.png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "Audit evidence: recon.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots-headers.txt",
      "caption": "Audit evidence: robots-headers.txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "Audit evidence: robots.txt",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/signup-desktop.png",
      "caption": "Audit evidence: signup-desktop.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/signup-discoverability-crawler.png",
      "caption": "Audit evidence: signup-discoverability-crawler.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/signup-discoverability-rendered.png",
      "caption": "Audit evidence: signup-discoverability-rendered.png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/signup-discoverability.json",
      "caption": "Audit evidence: signup-discoverability.json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/signup-dom.json",
      "caption": "Audit evidence: signup-dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/signup-invalid.png",
      "caption": "Audit evidence: signup-invalid.png",
      "findingIds": [
        "F09",
        "F23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/signup-meta.json",
      "caption": "Audit evidence: signup-meta.json",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/signup-mobile-layout.json",
      "caption": "Audit evidence: signup-mobile-layout.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/signup-mobile.png",
      "caption": "Audit evidence: signup-mobile.png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/signup-probe.json",
      "caption": "Audit evidence: signup-probe.json",
      "findingIds": [
        "F07",
        "F09",
        "F21",
        "F23",
        "F24"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "Audit evidence: sitemap.xml",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Dark-emulated and default screenshots are byte-identical (402,610 bytes), while the probe reports matchMedia dark=true but no prefers-color-scheme/light-dark CSS and color-scheme: normal.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Both probes report three running 200 ms animations; the reduced-motion probe finds no prefers-reduced-motion CSS.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-probe-reduced.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "The CSS probe found no prefers-contrast or forced-colors rules and the prefers-contrast screenshot is byte-identical to default.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-contrast.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "CSS inspection found no view-transition rules on a site with many MPA routes and changing carousel state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "reason": "No parallax, scrollytelling or scroll-linked reveal was observed on the representative paths, so there is no scroll-linked implementation to assess.",
      "method": "Screenshot and CSS signal inspection",
      "evidence": "Representative pages use ordinary document scrolling; CSS probe found no scroll timeline.",
      "confidence": "high"
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "The landing screenshot shows carousel arrows and dots, while CSS inspection found no scroll-snap signal.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Desktop and long mobile captures show static header chrome; CSS inspection found neither scroll-state queries nor scroll timelines.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/education-mobile.png",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "reason": "No visible tooltip, transient popover or edge-positioned menu requiring anchor positioning was present in the exercised unauthenticated paths.",
      "method": "DOM semantics probe and screenshots",
      "evidence": "No popover elements or relevant open overlays were observed.",
      "confidence": "high"
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Representative-path screenshots, DOM/evaluate probes and specialised audit evidence",
      "evidence": "No divergence was observed in the directly exercised condition; the recorded evidence supports the expected outcome.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "Load screenshots and DOM probe",
      "evidence": "No content-obscuring popup or consent interstitial appeared on any initial representative-page load.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Registration uses J-BUTTON custom elements; the landing DOM has a role=dialog surface but no dialog, popover or details elements.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop/mobile screenshots",
      "evidence": "The landing and content templates devote the main viewport to hero, listing or educational content with compact persistent navigation.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Four 360x800 layout captures",
      "evidence": "Home, events, education and signup all reported horizontalOverflowPx=0 with viewport meta present.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "CSS signal probe and mobile/desktop comparison",
      "evidence": "Probe found container-query CSS and representative cards/forms materially reflow between 1440 and 360 pixels.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "The focus/target probe found several links only 15–16 px high, including story and business-registration links.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "First-viewport screenshots",
      "evidence": "Home clearly offers free single/couple signup; events exposes filters/results; education names and explains its offer.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "All visible registration fields report required=false; the custom submit immediately navigated/closed the inspected target on an empty submission, preventing an in-place recoverable validation state.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/signup-invalid.png"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "404 walkthrough screenshot",
      "evidence": "Intentional invalid URL produces a clear German 404, explanation, search field and home action.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Lighthouse measured LCP 5.6 s, FCP 3.1 s, Speed Index 10.6 s and performance 0.65; trace LCP was 3.00 s.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Layout and Lighthouse",
      "evidence": "CLS was 0.009 on home, 0 on events/signup and 0.048 on education, all within the good range.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Trace and layout observers",
      "evidence": "Trace found one 57 ms task and only 7.36 ms TBT; mobile layouts found at most one 67 ms task.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "HAR recorded 210 requests and 2.95 MB transferred, including 23 stylesheets and 159 scripts; Lighthouse estimates 1.06 s render-blocking savings and 950 ms font-display savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/har-detail.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Lighthouse estimates 239 KiB unused JavaScript and 92 KiB unused CSS; one 144 KiB chunk is 95.6% unused.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-detail.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Lighthouse found a visible “Deutsch” control named only “Sprache ändern” and a footer logo link with no discernible accessible text.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-detail.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility audit and screenshots",
      "evidence": "Lighthouse color-contrast audit passed and body/control text remains visually distinct in representative captures.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "The DOM probe found only a footer landmark on the landing page, with no main, nav or header element, despite extensive navigation and content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop/mobile screenshots",
      "evidence": "Headings and body copy retain readable size, spacing and wrapping at 360 px without clipping.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "At 360 px the layout reflows without overflow, but the target probe reports multiple interactive links only 15–16 px high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse Runtime/Log audit",
      "evidence": "Lighthouse errors-in-console audit passed with zero items.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Image audit found five images without width/height; Lighthouse identified four visible unsized images including app-store badges and the claim image.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-detail.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Lighthouse found three deprecated API warnings from the challenge script and many first-party .map URLs returning 404.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-detail.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Four metadata probes",
      "evidence": "Home, events, education and signup each expose a distinct descriptive title and meta description.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/events-meta.json",
        "evidence/education-meta.json",
        "evidence/signup-meta.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Sex Education has only 2% raw/rendered word coverage, no raw H1 and isJsShell=true; Lighthouse also reports robots.txt blocking its crawler.",
      "pathIds": [
        "education"
      ],
      "artifacts": [
        "evidence/education-discoverability.json",
        "evidence/education-discoverability-rendered.png",
        "evidence/education-discoverability-crawler.png",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Metadata and response probes",
      "evidence": "Representative pages returned 200, self-canonical URLs and localized pages provide de/en/fr/etc hreflang alternates.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/events-meta.json",
        "evidence/education-meta.json",
        "evidence/signup-meta.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Metadata probes found no Open Graph tags on home, events, education or signup; events and education also expose no JSON-LD.",
      "pathIds": [
        "education"
      ],
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/events-meta.json",
        "evidence/education-meta.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "pass",
      "confidence": "high",
      "method": "Headers, cookies and secrets probes",
      "evidence": "HTTPS, nonce/strict-dynamic CSP, HSTS, nosniff and frame protection are present; cookies are Secure+HttpOnly and secrets scan found none.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json",
        "evidence/home-secrets.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "pass",
      "confidence": "high",
      "method": "HAR and tracker probes",
      "evidence": "Only one known tracker origin (Sentry) made one request; remaining high-volume CDN/analytics origins are joyclub.de subdomains and no sensitive secret was exposed.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "medium",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "The signup probe found a password field with empty autocomplete and no passkey/WebAuthn affordance in the inspected registration surface.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-probe.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Headers include CSP, HSTS, nosniff and frame protection, but Permissions-Policy is missing and Referrer-Policy is the permissive legacy no-referrer-when-downgrade value.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Crawler/no-JS capture shows only navigation and a blank content area; discoverability reports 2% content coverage and no raw H1.",
      "pathIds": [
        "education"
      ],
      "artifacts": [
        "evidence/education-discoverability.json",
        "evidence/education-discoverability-crawler.png",
        "evidence/education-discoverability-rendered.png"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Mobile screenshots and 404 state",
      "evidence": "Filters, navigation and forms remain within the viewport; recoverable 404 state is complete and actionable.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "reason": "The community, live events and account journeys are intrinsically network/account-backed; offline completion is not a reasonable requirement for this public web surface.",
      "method": "Manifest/service-worker metadata probe and site-purpose judgement",
      "evidence": "No web manifest was linked; the product advertises native apps and live/account-backed services.",
      "confidence": "medium"
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Intentional 404 walkthrough",
      "evidence": "404 page clearly identifies the failure and offers search and home recovery controls.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/not-found.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Metadata/CSS probes",
      "evidence": "html lang=de and dir=ltr are correct; logical CSS property usage is present and multiple language alternates are exposed.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Events screenshot and hreflang metadata",
      "evidence": "German dates/day labels and localized alternate routes are rendered for the German locale.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "high",
      "method": "Events screenshot",
      "evidence": "Event result explicitly labels time as Ortszeit, avoiding an unqualified global-time claim.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Signup and 404 screenshots",
      "evidence": "Signup states the free action and sensitive-data terms; footer exposes cancellation/withdrawal links, with no confirmshaming overlay observed.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Every visible field reports required=false and aria-invalid is absent; empty custom submission navigates rather than yielding a stable in-place validation state.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/signup-invalid.png"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Username, password and email fields have empty autocomplete values; only hidden/decoy fields carry username/new-password tokens.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-probe.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "high",
      "method": "Signup and 404 screenshots",
      "evidence": "Terms/privacy are visible next to signup and cancellation/withdrawal links are directly exposed in the footer.",
      "pathIds": [
        "home",
        "events",
        "education",
        "signup"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "Image audit found 11/12 images without srcset, nine legacy-format images, two oversized images and ten below-fold images without lazy loading.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "HAR offenders include four desktop and four mobile hero JPEGs on one load; Lighthouse reports 239 KiB unused JS and 92 KiB unused CSS.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/har-detail.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Active audit using the named screenshot, DOM/evaluate, Lighthouse or specialised primitive evidence.",
      "evidence": "HAR records 2.95 MB across 210 requests, including 1.72 MB images, 842 KB scripts and 159 script requests before user interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "reason": "No declared agent-facing intent exists and this emerging capability is optional for the audited public acquisition/content surfaces.",
      "method": "DOM/source signal inspection and contextual applicability judgement",
      "evidence": "No WebMCP or agent-tool surface was observed.",
      "confidence": "high"
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "reason": "No summarisation or generative task in the exercised paths requires on-device inference.",
      "method": "DOM/source signal inspection and contextual applicability judgement",
      "evidence": "The representative journeys are navigation, content browsing and registration.",
      "confidence": "high"
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Baseline/post heap summaries",
      "evidence": "After ten carousel interaction attempts, heap grew only 77,059 bytes (0.33%) and 935 nodes (0.26%), not evidence of unbounded retention.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Heap baseline summary",
      "evidence": "Baseline retained heap self size was 23.0 MB for a media-rich page; post-interaction remained 23.1 MB.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Heap summary comparison",
      "evidence": "Top constructor summaries contain no Detached* population and show only small bounded overall growth.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F14",
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21",
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F23",
        "F24"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F25",
        "F26",
        "F27"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No declared agent-facing intent exists and this emerging capability is optional for the audited public acquisition/content surfaces. No summarisation or generative task in the exercised paths requires on-device inference."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Public landing page and primary acquisition surface; inspected desktop, mobile, user preferences, load, network, security, accessibility, discoverability and memory.",
      "url": "https://www.joyclub.de/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "prefers-contrast: more",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "events",
      "description": "Representative listing/filter template and event-discovery journey; inspected desktop, mobile and no-JavaScript rendering.",
      "url": "https://www.joyclub.de/dates_partys/events/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800",
        "JavaScript disabled"
      ],
      "result": "issues"
    },
    {
      "id": "education",
      "description": "Representative content/index surface with high public-discoverability value; inspected desktop, mobile and crawler/no-JavaScript rendering.",
      "url": "https://www.joyclub.de/sexeducation/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800",
        "JavaScript disabled"
      ],
      "result": "issues"
    },
    {
      "id": "signup",
      "description": "Primary registration form; inspected field semantics, autofill, invalid submission behaviour, mobile layout and no-JavaScript rendering without creating an account.",
      "url": "https://www.joyclub.de/anmeldung/",
      "conditions": [
        "desktop 1440x900",
        "mobile 360x800",
        "empty submission",
        "JavaScript disabled"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Representative HTTP/error recovery state at an intentionally invalid URL.",
      "url": "https://www.joyclub.de/does-not-exist-web-uplift",
      "conditions": [
        "desktop 1440x900"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "summary": "Theme does not respond to the user’s color-scheme preference.",
      "evidence": "Dark-emulated and default screenshots are byte-identical (402,610 bytes), while the probe reports matchMedia dark=true but no prefers-color-scheme/light-dark CSS and color-scheme: normal.",
      "suggestedFix": "Declare color-scheme and define preference-driven light/dark tokens with prefers-color-scheme or light-dark().",
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png",
        "evidence/home-probe.json"
      ]
    },
    {
      "id": "F02",
      "severity": "medium",
      "confidence": "high",
      "summary": "Motion is unchanged when reduced motion is requested.",
      "evidence": "Both probes report three running 200 ms animations; the reduced-motion probe finds no prefers-reduced-motion CSS.",
      "suggestedFix": "Add a prefers-reduced-motion: reduce override that removes non-essential carousel and transition motion.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-probe-reduced.json"
      ]
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "summary": "High-contrast preferences are not explicitly supported.",
      "evidence": "The CSS probe found no prefers-contrast or forced-colors rules and the prefers-contrast screenshot is byte-identical to default.",
      "suggestedFix": "Add forced-colors and prefers-contrast adaptations for controls, focus indicators and muted text.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-contrast.png",
        "evidence/home-probe.json"
      ]
    },
    {
      "id": "F04",
      "severity": "low",
      "confidence": "high",
      "summary": "Route and state changes do not use View Transitions.",
      "evidence": "CSS inspection found no view-transition rules on a site with many MPA routes and changing carousel state.",
      "suggestedFix": "Progressively enhance same-origin routes and important state changes with View Transitions, retaining instant navigation as fallback.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "faster-spa-view-transitions",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "id": "F05",
      "severity": "low",
      "confidence": "high",
      "summary": "The hero carousel is JS-driven without platform scroll-snap/gesture semantics.",
      "evidence": "The landing screenshot shows carousel arrows and dots, while CSS inspection found no scroll-snap signal.",
      "suggestedFix": "Use a horizontal scroll-snap carousel with native touch/keyboard scrolling and progressive arrow controls.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "physical-gestures",
      "guidanceId": "carousel-slide-effects",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-probe.json"
      ]
    },
    {
      "id": "F06",
      "severity": "low",
      "confidence": "high",
      "summary": "Persistent navigation does not expose scroll-aware feedback.",
      "evidence": "Desktop and long mobile captures show static header chrome; CSS inspection found neither scroll-state queries nor scroll timelines.",
      "suggestedFix": "Add restrained scroll-state feedback, such as a compact sticky header or progress cue, without obscuring content.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-position-aware-elements",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/education-mobile.png",
        "evidence/home-probe.json"
      ]
    },
    {
      "id": "F07",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several controls and overlay surfaces use custom elements instead of native primitives.",
      "evidence": "Registration uses J-BUTTON custom elements; the landing DOM has a role=dialog surface but no dialog, popover or details elements.",
      "suggestedFix": "Use native button, dialog, popover and details primitives, preserving accessible names and built-in dismissal/focus behaviour.",
      "effort": "medium",
      "pathId": "signup",
      "url": "https://www.joyclub.de/anmeldung/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/home-probe.json"
      ]
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "summary": "Some interactive targets are too short for reliable touch use.",
      "evidence": "The focus/target probe found several links only 15–16 px high, including story and business-registration links.",
      "suggestedFix": "Give interactive targets a minimum 44×44 CSS pixel activation area while preserving visible keyboard focus.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "summary": "The registration flow hides requirements from browser semantics and cannot be safely validated before navigation.",
      "evidence": "All visible registration fields report required=false; the custom submit immediately navigated/closed the inspected target on an empty submission, preventing an in-place recoverable validation state.",
      "suggestedFix": "Mark required fields with native required/constraints, validate after interaction, and keep the user on the form with clear recovery until inputs are valid.",
      "effort": "medium",
      "pathId": "signup",
      "url": "https://www.joyclub.de/anmeldung/",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/signup-invalid.png"
      ]
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "summary": "Mobile load performance misses the good LCP range.",
      "evidence": "Lighthouse measured LCP 5.6 s, FCP 3.1 s, Speed Index 10.6 s and performance 0.65; trace LCP was 3.00 s.",
      "suggestedFix": "Prioritise the LCP asset, reduce document latency and redirects, and defer non-critical work.",
      "effort": "large",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ]
    },
    {
      "id": "F11",
      "severity": "high",
      "confidence": "high",
      "summary": "The critical resource chain is large and render-blocking.",
      "evidence": "HAR recorded 210 requests and 2.95 MB transferred, including 23 stylesheets and 159 scripts; Lighthouse estimates 1.06 s render-blocking savings and 950 ms font-display savings.",
      "suggestedFix": "Bundle critical CSS, defer non-critical styles/scripts, optimise font-display and preload only the actual LCP resource.",
      "effort": "large",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/har-detail.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "id": "F12",
      "severity": "medium",
      "confidence": "high",
      "summary": "The landing page ships substantial unused CSS and JavaScript.",
      "evidence": "Lighthouse estimates 239 KiB unused JavaScript and 92 KiB unused CSS; one 144 KiB chunk is 95.6% unused.",
      "suggestedFix": "Route-split assets, remove legacy/global bundles from the landing template and conditionally load feature code.",
      "effort": "large",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-detail.json"
      ]
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "summary": "Some controls and links have incorrect or missing accessible names.",
      "evidence": "Lighthouse found a visible “Deutsch” control named only “Sprache ändern” and a footer logo link with no discernible accessible text.",
      "suggestedFix": "Make accessible names include visible labels and name image-only links with aria-label or real text.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-detail.json"
      ]
    },
    {
      "id": "F14",
      "severity": "low",
      "confidence": "high",
      "summary": "The landing template lacks clear semantic page landmarks.",
      "evidence": "The DOM probe found only a footer landmark on the landing page, with no main, nav or header element, despite extensive navigation and content.",
      "suggestedFix": "Use header/nav/main/footer landmarks and retain the existing logical heading order and visible focus styles.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-dom.json"
      ]
    },
    {
      "id": "F15",
      "severity": "medium",
      "confidence": "high",
      "summary": "Small targets weaken reflow and touch accessibility.",
      "evidence": "At 360 px the layout reflows without overflow, but the target probe reports multiple interactive links only 15–16 px high.",
      "suggestedFix": "Increase activation areas to at least 44×44 CSS pixels and retest at 200% zoom and 320–360 px widths.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-probe.json"
      ]
    },
    {
      "id": "F16",
      "severity": "medium",
      "confidence": "high",
      "summary": "Multiple images omit intrinsic dimensions.",
      "evidence": "Image audit found five images without width/height; Lighthouse identified four visible unsized images including app-store badges and the claim image.",
      "suggestedFix": "Set width and height or aspect-ratio on every content image and preserve intrinsic aspect ratios.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-detail.json"
      ]
    },
    {
      "id": "F17",
      "severity": "low",
      "confidence": "high",
      "summary": "The page emits platform deprecation warnings and ships broken source-map references.",
      "evidence": "Lighthouse found three deprecated API warnings from the challenge script and many first-party .map URLs returning 404.",
      "suggestedFix": "Update or isolate deprecated challenge code and publish valid source maps or remove broken sourceMappingURL declarations.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-detail.json"
      ]
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "summary": "A valuable public content surface is nearly empty without JavaScript, and robots blocks Lighthouse crawling.",
      "evidence": "Sex Education has only 2% raw/rendered word coverage, no raw H1 and isJsShell=true; Lighthouse also reports robots.txt blocking its crawler.",
      "suggestedFix": "Server-render the Sex Education heading and core cards/links, and ensure robots.txt permits intended search and AI crawlers.",
      "effort": "large",
      "pathId": "education",
      "url": "https://www.joyclub.de/sexeducation/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "search-hidden-content",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/education-discoverability.json",
        "evidence/education-discoverability-rendered.png",
        "evidence/education-discoverability-crawler.png",
        "evidence/lighthouse.json"
      ]
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "summary": "Representative public pages lack share-preview and entity metadata.",
      "evidence": "Metadata probes found no Open Graph tags on home, events, education or signup; events and education also expose no JSON-LD.",
      "suggestedFix": "Add accurate Open Graph/Twitter cards and relevant schema.org JSON-LD for organization, event and educational content.",
      "effort": "small",
      "pathId": "education",
      "url": "https://www.joyclub.de/sexeducation/",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "search-hidden-content",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-meta.json",
        "evidence/events-meta.json",
        "evidence/education-meta.json"
      ]
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "summary": "Browser policy coverage is incomplete.",
      "evidence": "Headers include CSP, HSTS, nosniff and frame protection, but Permissions-Policy is missing and Referrer-Policy is the permissive legacy no-referrer-when-downgrade value.",
      "suggestedFix": "Add a least-privilege Permissions-Policy and use strict-origin-when-cross-origin or stricter referrer policy.",
      "effort": "small",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-headers.json"
      ]
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Registration exposes password-only authentication with no passkey path.",
      "evidence": "The signup probe found a password field with empty autocomplete and no passkey/WebAuthn affordance in the inspected registration surface.",
      "suggestedFix": "Offer passkey registration/authentication as the preferred path, retaining password fallback with correct autocomplete tokens.",
      "effort": "large",
      "pathId": "signup",
      "url": "https://www.joyclub.de/anmeldung/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkey-management",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/signup-probe.json"
      ]
    },
    {
      "id": "F22",
      "severity": "high",
      "confidence": "high",
      "summary": "Core Sex Education content is not progressively enhanced.",
      "evidence": "Crawler/no-JS capture shows only navigation and a blank content area; discoverability reports 2% content coverage and no raw H1.",
      "suggestedFix": "Render core educational content and links in server HTML, then hydrate filters and richer interactions as enhancements.",
      "effort": "large",
      "pathId": "education",
      "url": "https://www.joyclub.de/sexeducation/",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "stabilize-reactive-state",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/education-discoverability.json",
        "evidence/education-discoverability-crawler.png",
        "evidence/education-discoverability-rendered.png"
      ]
    },
    {
      "id": "F23",
      "severity": "high",
      "confidence": "high",
      "summary": "Registration does not expose native, accessible invalid-state semantics.",
      "evidence": "Every visible field reports required=false and aria-invalid is absent; empty custom submission navigates rather than yielding a stable in-place validation state.",
      "suggestedFix": "Use native constraints plus :user-invalid, aria-describedby and an announced error summary after submit or field interaction.",
      "effort": "medium",
      "pathId": "signup",
      "url": "https://www.joyclub.de/anmeldung/",
      "principleId": "be-trustworthy",
      "principleCheckId": "humane-error-handling",
      "guidanceId": "validate-input-after-interaction",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/signup-probe.json",
        "evidence/signup-invalid.png"
      ]
    },
    {
      "id": "F24",
      "severity": "medium",
      "confidence": "high",
      "summary": "Sign-up fields omit expected autofill tokens.",
      "evidence": "Username, password and email fields have empty autocomplete values; only hidden/decoy fields carry username/new-password tokens.",
      "suggestedFix": "Put username, new-password, email, bday and address-level tokens on the actual user-editable controls.",
      "effort": "small",
      "pathId": "signup",
      "url": "https://www.joyclub.de/anmeldung/",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-sign-up-form",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/signup-probe.json"
      ]
    },
    {
      "id": "F25",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image delivery wastes bytes and misses responsive optimisation.",
      "evidence": "Image audit found 11/12 images without srcset, nine legacy-format images, two oversized images and ten below-fold images without lazy loading.",
      "suggestedFix": "Serve responsive AVIF/WebP sources, lazy-load below-fold media and size assets to their rendered dimensions.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home.har",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F26",
      "severity": "medium",
      "confidence": "high",
      "summary": "The landing page eagerly loads both desktop and mobile hero variants plus broad code bundles.",
      "evidence": "HAR offenders include four desktop and four mobile hero JPEGs on one load; Lighthouse reports 239 KiB unused JS and 92 KiB unused CSS.",
      "suggestedFix": "Use picture/media selection so only one hero variant downloads, and conditionally import route/feature code.",
      "effort": "large",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/har-detail.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "id": "F27",
      "severity": "medium",
      "confidence": "high",
      "summary": "The initial media/script budget is disproportionate to the landing task.",
      "evidence": "HAR records 2.95 MB across 210 requests, including 1.72 MB images, 842 KB scripts and 159 script requests before user interaction.",
      "suggestedFix": "Set a landing-page budget, defer non-visible media and non-essential analytics, and consolidate/cache static assets.",
      "effort": "large",
      "pathId": "home",
      "url": "https://www.joyclub.de/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ]
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Server-render public educational content and fix crawler access",
      "priority": 1,
      "findingIds": [
        "F18",
        "F22"
      ],
      "guidanceId": "search-hidden-content",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Cut LCP, request count and render-blocking delivery",
      "priority": 2,
      "findingIds": [
        "F10",
        "F11",
        "F12",
        "F26",
        "F27"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Rebuild registration validation and autofill semantics",
      "priority": 3,
      "findingIds": [
        "F09",
        "F23",
        "F24"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Fix accessible names, landmarks and target sizes",
      "priority": 4,
      "findingIds": [
        "F08",
        "F13",
        "F14",
        "F15"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Implement preference-driven color, motion and contrast",
      "priority": 5,
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Optimise responsive image delivery and dimensions",
      "priority": 6,
      "findingIds": [
        "F16",
        "F25"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Strengthen browser security policies and authentication",
      "priority": 7,
      "findingIds": [
        "F20",
        "F21"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Add structured/share metadata to entity pages",
      "priority": 8,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "search-hidden-content",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Modernise navigation, carousel and semantic controls",
      "priority": 9,
      "findingIds": [
        "F04",
        "F05",
        "F06",
        "F07"
      ],
      "guidanceId": "faster-spa-view-transitions",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Resolve deprecated APIs and broken source maps",
      "priority": 10,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "html",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-23T17-54-44-678Z"
}
