{
  "url": "https://erotik.markt.de",
  "auditedAt": "2026-07-20T12:07:55.367Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete representative audit of the public entry, age flows, marketplace/listing/detail and editorial templates. Authenticated account, checkout, messaging and cancellation flows were not covered.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered Kotlin/RequireJS marketplace with progressive client modules",
    "notes": "Public adult marketplace behind an age confirmation and a third-party consent wall."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "transition-video",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse",
    "robots+sitemap",
    "modern-web-guidance@0.0.172"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "directional-navigation-transitions",
    "declarative-dialog-popover-control",
    "light-dismiss-a-dialog",
    "fluid-scaling",
    "size-aware-styling",
    "forms",
    "performance",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-script-priority",
    "html",
    "security",
    "privacy",
    "passkeys",
    "persistent-toast-notifications",
    "translator",
    "custom-button-actions",
    "deliver-optimized-decorative-images",
    "webmcp",
    "language-model",
    "manage-recurring-intervals"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Fresh-load desktop consent wall",
      "condition": "1440x1000",
      "findingIds": [
        "F-001",
        "F-002",
        "F-010"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Fresh-load mobile consent wall",
      "condition": "360x800",
      "findingIds": [
        "F-001",
        "F-002",
        "F-003"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-light-mobile.png",
      "caption": "Mobile page under light preference",
      "condition": "prefers-color-scheme: light",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark-mobile.png",
      "caption": "Mobile page under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Rendered gateway DOM and computed styles",
      "condition": "fresh profile",
      "findingIds": [
        "F-003",
        "F-012",
        "F-013"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "Metadata, links, forms and structured-data recon",
      "condition": "fresh profile",
      "findingIds": [
        "F-016"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/detail-dom.json",
      "caption": "Fresh representative detail response shows generic age document",
      "condition": "fresh detail URL",
      "findingIds": [
        "F-011",
        "F-012",
        "F-016"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/article-index-dom.json",
      "caption": "Adult-confirmed article index DOM",
      "condition": "adult-confirmed",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/listing-dom.json",
      "caption": "Adult-flow listing/navigation DOM",
      "condition": "adult-confirmed",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Raw HTML versus rendered content comparison",
      "condition": "JavaScript on/off",
      "findingIds": [
        "F-011",
        "F-012"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Rendered browser view",
      "condition": "JavaScript enabled",
      "findingIds": [
        "F-012"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "Crawler view",
      "condition": "JavaScript disabled",
      "findingIds": [
        "F-011",
        "F-012"
      ]
    },
    {
      "type": "har",
      "path": "evidence/age-flow.har",
      "caption": "Network capture across adult confirmation",
      "condition": "adult confirmation",
      "findingIds": [
        "F-005",
        "F-010"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/age-flow-summary.json",
      "caption": "Compact network summary",
      "condition": "adult confirmation",
      "findingIds": [
        "F-005",
        "F-006",
        "F-010"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/after-age-trace.json",
      "caption": "Performance trace across adult confirmation",
      "condition": "adult confirmation",
      "findingIds": [
        "F-004"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/after-age-trace-summary.json",
      "caption": "Trace timing summary",
      "condition": "adult confirmation",
      "findingIds": [
        "F-004"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/after-age-mobile-layout.json",
      "caption": "Marketplace homepage mobile layout",
      "condition": "360x800",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/listing-mobile-layout.json",
      "caption": "Listing mobile layout and long task",
      "condition": "360x800",
      "findingIds": [
        "F-007"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/detail-mobile-layout.json",
      "caption": "Detail mobile layout",
      "condition": "360x800",
      "findingIds": []
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse full JSON",
      "condition": "mobile default",
      "findingIds": [
        "F-004",
        "F-005",
        "F-006",
        "F-013"
      ]
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-summary.json",
      "caption": "Compact Lighthouse summary",
      "condition": "mobile default",
      "findingIds": [
        "F-004",
        "F-005",
        "F-006",
        "F-013"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security response headers",
      "condition": "main document",
      "findingIds": [
        "F-008",
        "F-009"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie security posture",
      "condition": "fresh profile",
      "findingIds": [
        "F-008"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party origin inventory",
      "condition": "fresh load",
      "findingIds": [
        "F-010"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client-side secret scan",
      "condition": "fresh load",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image sizing, format and alt inventory",
      "condition": "fresh load",
      "findingIds": [
        "F-013"
      ]
    },
    {
      "type": "other",
      "path": "evidence/preferences-focus.json",
      "caption": "Preferences, animations and keyboard focus probe",
      "condition": "dark + reduce + contrast",
      "findingIds": [
        "F-014"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-a11y-probe.json",
      "caption": "Semantics, target, container and platform probe",
      "condition": "fresh load",
      "findingIds": [
        "F-003",
        "F-015"
      ]
    },
    {
      "type": "video",
      "path": "evidence/underage-flow.mp4",
      "caption": "Under-age interaction transition",
      "condition": "360x800",
      "findingIds": []
    },
    {
      "type": "video",
      "path": "evidence/listing-age-flow.mp4",
      "caption": "Adult confirmation navigation capture",
      "condition": "360x800",
      "findingIds": [
        "F-015"
      ]
    },
    {
      "type": "other",
      "path": "evidence/underage-recovery.json",
      "caption": "Under-age aria-live feedback probe",
      "condition": "under-age click",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Baseline heap snapshot",
      "condition": "fresh load",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-menu-valid.heapsnapshot",
      "caption": "Heap after ten menu cycles",
      "condition": "10 menu cycles",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/heap-comparison.json",
      "caption": "Readable heap comparison summary",
      "condition": "baseline vs ten cycles",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/memory-metrics.json",
      "caption": "Same-session heap and DOM metrics",
      "condition": "10 menu cycles",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "Robots policy",
      "condition": "plain fetch",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap-index.xml",
      "caption": "Sitemap index",
      "condition": "plain fetch",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-consulted.jsonl",
      "caption": "Pinned Modern Web Guidance search results",
      "condition": "modern-web-guidance@0.0.172",
      "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": "pass",
      "confidence": "high",
      "method": "evaluate+screenshot under explicit light/dark media",
      "evidence": "Computed body changed to a dark palette with color-scheme: dark, and paired screenshots were captured.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/home-light-mobile.png",
        "evidence/home-dark-mobile.png",
        "evidence/preferences-focus.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "medium",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Under prefers-reduced-motion: reduce, getAnimations() still returned two running animations; CSS only declared reduced-motion rules for no-preference.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/preferences-focus.json"
      ],
      "findingIds": [
        "F-014"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "computed-style focus and contrast probe plus Lighthouse",
      "evidence": "The focused skip link had a 2px solid outline under prefers-contrast: more; Lighthouse contrast audit scored 1.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/preferences-focus.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "medium",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "The transition capture produced only a single stable frame and source probes found no authored view-transition rules, while the adult click caused a full navigation.",
      "pathIds": [
        "adult-flow"
      ],
      "artifacts": [
        "evidence/listing-age-flow.mp4",
        "evidence/platform-a11y-probe.json"
      ],
      "findingIds": [
        "F-015"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No scroll-linked visual effect was present on the audited gateway, listing, detail, or article templates, so implementation technique is not applicable.",
      "reason": "No scroll-linked visual effect was present on the audited gateway, listing, detail, or article templates, so implementation technique is not applicable."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No swipe, pull, drag, carousel, or other gesture-driven task was exposed in the representative unauthenticated paths.",
      "reason": "No swipe, pull, drag, carousel, or other gesture-driven task was exposed in the representative unauthenticated paths."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "DOM/layout review across long listing/article templates",
      "evidence": "The fixed header preserves orientation on long templates and mobile layouts remained bounded.",
      "pathIds": [
        "listing",
        "article-index"
      ],
      "artifacts": [
        "evidence/listing-dom.json",
        "evidence/listing-mobile-layout.json",
        "evidence/article-index-dom.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No tooltip, anchored popover, or edge-positioned menu was present in the exercised paths.",
      "reason": "No tooltip, anchored popover, or edge-positioned menu was present in the exercised paths."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "DOM and interaction-state review",
      "evidence": "Skip link, headings, breadcrumb/navigation landmarks, age choices and aria-live feedback direct attention to the next state.",
      "pathIds": [
        "entry",
        "underage-flow"
      ],
      "artifacts": [
        "evidence/platform-a11y-probe.json",
        "evidence/underage-recovery.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Desktop and mobile screenshots show the CMP occupying the whole viewport before the age question can be used; the only prominent paths are ACCEPT ALL or subscription.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F-001"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "DOM probes found no dialog, [role=dialog], or [aria-modal=true], while screenshots show a modal full-screen interruption implemented by .cmp-root-container.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/platform-a11y-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F-003"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "desktop/mobile screenshot review after accounting for the separately reported CMP",
      "evidence": "Underlying page chrome is a compact 57px header and content occupies the remainder; no additional decorative frame dominated audited templates.",
      "pathIds": [
        "entry",
        "listing"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/listing-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "mobile layout probes across homepage, listing and detail",
      "evidence": "All three 360px probes reported scrollWidth=clientWidth=360 and horizontalOverflowPx=0 with a viewport meta tag.",
      "pathIds": [
        "adult-flow",
        "listing",
        "detail"
      ],
      "artifacts": [
        "evidence/after-age-mobile-layout.json",
        "evidence/listing-mobile-layout.json",
        "evidence/detail-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "live CSSOM probe",
      "evidence": "CSSOM contained @container rules for pagination and result-list components, demonstrating container-level adaptation.",
      "pathIds": [
        "listing"
      ],
      "artifacts": [
        "evidence/platform-a11y-probe.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "pass",
      "confidence": "high",
      "method": "focus and target-size probes",
      "evidence": "Keyboard focus produced a visible 2px solid outline; primary age and consent actions are large. Only a low-risk 16px footer link was below 24px.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/preferences-focus.json",
        "evidence/platform-a11y-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "first-viewport screenshot and semantic DOM review",
      "evidence": "The underlying page clearly states that it is an adult-content age check and presents explicit under/over-18 actions, though the CMP interruption is reported separately.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/recon.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "adult interaction HAR and post-transition layouts",
      "evidence": "Clicking “Ich bin volljährig” completed a full navigation and loaded a 4,353px marketplace homepage; listing/detail layouts also loaded without overflow.",
      "pathIds": [
        "adult-flow",
        "listing",
        "detail"
      ],
      "artifacts": [
        "evidence/age-flow.har",
        "evidence/after-age-mobile-layout.json",
        "evidence/detail-mobile-layout.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "under-age interaction probe and video",
      "evidence": "The under-age action reveals a clear German explanation in aria-live=polite, without losing the page context.",
      "pathIds": [
        "underage-flow"
      ],
      "artifacts": [
        "evidence/underage-recovery.json",
        "evidence/underage-flow.mp4"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Lighthouse measured LCP 8.2 s, FCP 2.5 s, Speed Index 5.8 s and performance 0.67; the independent trace measured LCP 6.74 s.",
      "pathIds": [
        "adult-flow"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/after-age-trace-summary.json",
        "evidence/after-age-trace.json"
      ],
      "findingIds": [
        "F-004"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "layout observers plus Lighthouse",
      "evidence": "Homepage, listing and detail observers reported CLS 0; Lighthouse also measured CLS 0.",
      "pathIds": [
        "adult-flow",
        "listing",
        "detail"
      ],
      "artifacts": [
        "evidence/after-age-mobile-layout.json",
        "evidence/listing-mobile-layout.json",
        "evidence/detail-mobile-layout.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "The mobile layout observer recorded a 496 ms long task at 5.66 s after navigation.",
      "pathIds": [
        "listing"
      ],
      "artifacts": [
        "evidence/listing-mobile-layout.json"
      ],
      "findingIds": [
        "F-007"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "HAR recorded 149 requests and 1.36 MB transferred, including 50 scripts and 14 stylesheets; Lighthouse estimated 1,490 ms render-blocking savings.",
      "pathIds": [
        "adult-flow"
      ],
      "artifacts": [
        "evidence/age-flow-summary.json",
        "evidence/age-flow.har",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F-005"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Lighthouse estimated 313 KiB unused JavaScript, 56 KiB unused CSS and 15 KiB legacy JavaScript; the largest script alone transferred 228,788 bytes.",
      "pathIds": [
        "adult-flow"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/age-flow-summary.json"
      ],
      "findingIds": [
        "F-006"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse accessibility and DOM semantic probe",
      "evidence": "Lighthouse accessibility scored 1; controls have visible names/titles, images serving content have alt text, and no unlabelled visible form field was found.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/platform-a11y-probe.json",
        "evidence/images.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse contrast audit under rendered gateway",
      "evidence": "Lighthouse color-contrast scored 1 and explicit high-contrast computed colors remained visible.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/preferences-focus.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "pass",
      "confidence": "high",
      "method": "landmark/heading/focus probes",
      "evidence": "One H1, named navigation landmarks, main/header/footer, skip link, sequential headings, and visible focused outline were observed.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/platform-a11y-probe.json",
        "evidence/preferences-focus.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "mobile and desktop screenshot review",
      "evidence": "Consent and gateway text remains readable at 360px with normal wrapping, clear hierarchy and no clipping.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "viewport and reflow probes",
      "evidence": "Viewport allows scaling, 360px layouts have no overflow, primary controls are large, and no required audiovisual media appeared.",
      "pathIds": [
        "entry",
        "listing",
        "detail"
      ],
      "artifacts": [
        "evidence/platform-a11y-probe.json",
        "evidence/listing-mobile-layout.json",
        "evidence/detail-mobile-layout.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse runtime audit",
      "evidence": "Lighthouse “errors-in-console” scored 1 with no logged browser errors.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Images primitive found three of five images without width/height; Lighthouse also failed its unsized-images audit.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F-013"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse platform audits",
      "evidence": "No deprecated APIs, permission prompts on load, or paste prevention were found; BFCache/source-map weaknesses are captured in retained Lighthouse evidence but did not break the core page.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "The representative detail DOM returned title and description “Über-18-Bestätigung”; raw-vs-rendered discoverability coverage was only 35%.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/detail-dom.json",
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png"
      ],
      "findingIds": [
        "F-011"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "robots, DOM links and Lighthouse SEO",
      "evidence": "Viewport is present, robots.txt is valid, links use real hrefs and descriptive text, and Lighthouse SEO scored 1.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/robots.txt",
        "evidence/recon.json",
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "DOM, response and robots/sitemap inspection",
      "evidence": "Entry response was 200, canonical and de-DE/de-CH/x-default hreflang were present, robots allows indexing, and the markt.de sitemap index lists public erotik.markt.de URLs.",
      "pathIds": [
        "entry",
        "detail"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/robots.txt",
        "evidence/sitemap-index.xml"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Recon found zero Open Graph tags and zero JSON-LD blocks, while sitemap URLs represent classified entities that benefit from accurate safe previews.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/detail-dom.json"
      ],
      "findingIds": [
        "F-016"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Headers primitive found no CSP. Cookies primitive found __ssid without Secure, SameSite=None and a 400-day lifetime; five cookies were flagged by the primitive.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F-008"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "HAR classified 143 of 149 requests and 1.32 MB of 1.36 MB as cross-origin relative to erotik.markt.de; the consent screenshot states 276 partners and usage-based advertising/tracking.",
      "pathIds": [
        "adult-flow"
      ],
      "artifacts": [
        "evidence/age-flow-summary.json",
        "evidence/home-desktop.png",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F-010"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No permission request or authentication form was exercised; Lighthouse confirmed no permission prompt on load, while passkeys are contextual to the separate login journey.",
      "reason": "No permission request or authentication form was exercised; Lighthouse confirmed no permission prompt on load, while passkeys are contextual to the separate login journey."
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Headers primitive confirmed HSTS, nosniff and SAMEORIGIN but reported missing Referrer-Policy and Permissions-Policy.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F-009"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "Discoverability primitive measured 35% raw-content coverage. The crawler screenshot and detail DOM show the gateway rather than route content, although the raw shell itself is non-empty.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png",
        "evidence/detail-dom.json"
      ],
      "findingIds": [
        "F-012"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "menu repetition, long-template layouts, and recovery-state probes",
      "evidence": "Ten menu open/close cycles returned aria-expanded=false, long mobile templates did not overflow, and the under-age state remained actionable.",
      "pathIds": [
        "entry",
        "listing",
        "detail"
      ],
      "artifacts": [
        "evidence/memory-metrics.json",
        "evidence/listing-mobile-layout.json",
        "evidence/underage-recovery.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "pass",
      "confidence": "high",
      "method": "manifest/service-worker DOM inspection",
      "evidence": "A web app manifest is linked, install UI is present, serviceWorker is supported, and explicit offline/connecting/online notices exist in server HTML.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/platform-a11y-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "server DOM state inspection and successful network flow",
      "evidence": "Server HTML includes explicit offline, maintenance, connecting and online notices, while the exercised network flow completed without HAR HTTP errors.",
      "pathIds": [
        "entry",
        "adult-flow"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/age-flow-summary.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "DOM language and hreflang inspection",
      "evidence": "html lang=de is present and de-DE/de-CH/x-default hreflang signals are emitted; no bidi content was in scope.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "The audited German gateway and representative templates exposed no user-facing currency/date formatting task requiring a locale comparison.",
      "reason": "The audited German gateway and representative templates exposed no user-facing currency/date formatting task requiring a locale comparison."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No event time, recurrence, or cross-time-zone scheduling concept appears in the audited marketplace paths.",
      "reason": "No event time, recurrence, or cross-time-zone scheduling concept appears in the audited marketplace paths."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Triangulated browser evidence against the check-specific guidance",
      "evidence": "The mobile and desktop first viewport offers ACCEPT ALL and SUBSCRIBE NOW while the text says 276 partners; rejection requires hunting in the Privacy Center.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F-002"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No editable user form was available before authentication; the age-response state is a binary choice, not validation of user-entered data.",
      "reason": "No editable user form was available before authentication; the age-response state is a binary choice, not validation of user-entered data."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No visible text, address, payment, sign-in, or sign-up input appeared in the audited unauthenticated paths.",
      "reason": "No visible text, address, payment, sign-in, or sign-up input appeared in the audited unauthenticated paths."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "Subscription, authentication, checkout, cancellation, and account management were not entered; the consent subscription offer was judged under no-dark-patterns.",
      "reason": "Subscription, authentication, checkout, cancellation, and account management were not entered; the consent subscription offer was judged under no-dark-patterns."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "pass",
      "confidence": "high",
      "method": "image and HAR inspection",
      "evidence": "No sampled image was oversized; modern SVG is used for logos and image-cache URLs request fitted dimensions. Remaining intrinsic sizing is reported under best practices.",
      "pathIds": [
        "entry",
        "adult-flow"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/age-flow-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "pass",
      "confidence": "high",
      "method": "trace/layout/HAR background review",
      "evidence": "Trace reported no long tasks and 0 TBT on the gateway transition; no media autoplay was observed. The listing long task and startup excess are reported under performance.",
      "pathIds": [
        "adult-flow"
      ],
      "artifacts": [
        "evidence/after-age-trace-summary.json",
        "evidence/age-flow-summary.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "pass",
      "confidence": "high",
      "method": "HAR media and tracker review",
      "evidence": "No video/audio autoplay was loaded and image transfer was 335 KB; the disproportionate cross-origin/script budget is reported as F-005/F-006/F-010.",
      "pathIds": [
        "adult-flow"
      ],
      "artifacts": [
        "evidence/age-flow-summary.json",
        "evidence/trackers.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No declared agent-facing task or WebMCP surface was found; this emerging contextual capability is not expected for the audited public gateway.",
      "reason": "No declared agent-facing task or WebMCP surface was found; this emerging contextual capability is not expected for the audited public gateway."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement across representative paths",
      "evidence": "No summarisation or language-model task was present where on-device inference would improve the audited experience.",
      "reason": "No summarisation or language-model task was present where on-device inference would improve the audited experience."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "baseline/post heap methodology plus same-session metrics",
      "evidence": "After ten genuine menu cycles the same-session DOM count changed 220→221 and used heap 15.90→17.63 MB. This bounded sample does not establish unbounded retained growth; confidence is medium.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/heap-comparison.json",
        "evidence/memory-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "heap summaries and Performance.memory",
      "evidence": "Baseline heap snapshot was 18.32 MB self size with 341,816 nodes; post-cycle snapshot was 19.86 MB. This is substantial but proportionate to the script-heavy marketplace and remained operational.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/heap-comparison.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "repeated menu cycle DOM comparison",
      "evidence": "Ten menu cycles added only one live DOM element and returned the menu to closed state; no growing Detached* signal was established from the summary-level evidence.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/heap-comparison.json",
        "evidence/memory-metrics.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-014"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-015"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-001",
        "F-003"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-004",
        "F-007",
        "F-005",
        "F-006"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-013"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-011",
        "F-016"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-008",
        "F-010",
        "F-009"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-012"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-002"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No declared agent-facing task or WebMCP surface was found; this emerging contextual capability is not expected for the audited public gateway. No summarisation or language-model task was present where on-device inference would improve the audited experience."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "entry",
      "description": "Public entry and age-verification gateway, including first-load consent UI; represents every unauthenticated visit.",
      "url": "https://erotik.markt.de/",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "light and dark color schemes"
      ],
      "result": "issues"
    },
    {
      "id": "adult-flow",
      "description": "Adult confirmation into the marketplace homepage; HAR and mobile layout cover the primary gateway transition and loaded marketplace.",
      "url": "https://erotik.markt.de/",
      "conditions": [
        "click Ich bin volljährig",
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "underage-flow",
      "description": "Under-age response and recovery state; verifies age-gate feedback and announcement.",
      "url": "https://erotik.markt.de/",
      "conditions": [
        "click Ich bin noch nicht 18",
        "mobile 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "listing",
      "description": "Representative marketplace listing reached through an adult-confirmation transition; covers dense results and scrolling.",
      "url": "https://erotik.markt.de/sie-sucht-ihn/",
      "conditions": [
        "click adult confirmation",
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "detail",
      "description": "Representative classified detail URL discovered in the public sitemap; covers a high-risk entity/detail template.",
      "url": "https://erotik.markt.de/gelsenkirchen/sie-sucht-ihn/eng-geil-sexy-und-verdammt-heiss-ella-anal-queen/a/e8cd1618/",
      "conditions": [
        "fresh unauthenticated visit",
        "mobile 360x800 after adult confirmation"
      ],
      "result": "issues"
    },
    {
      "id": "article-index",
      "description": "Editorial/advice index template, distinct from marketplace listings and details.",
      "url": "https://erotik.markt.de/ratgeber/",
      "conditions": [
        "adult-confirmed navigation"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F-001",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "severity": "critical",
      "confidence": "high",
      "summary": "A full-viewport consent wall obscures the age gate and all site content on every fresh load.",
      "evidence": "Desktop and mobile screenshots show the CMP occupying the whole viewport before the age question can be used; the only prominent paths are ACCEPT ALL or subscription.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Replace the blocking first-load wall with a compact, accessible consent surface that includes an equally prominent reject/non-personalised path and preserves access to the underlying age gate.",
      "effort": "large"
    },
    {
      "id": "F-002",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "custom-button-actions",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent choice is asymmetric: accept tracking or subscribe, with no visible reject-all action.",
      "evidence": "The mobile and desktop first viewport offers ACCEPT ALL and SUBSCRIBE NOW while the text says 276 partners; rejection requires hunting in the Privacy Center.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Provide Reject all beside Accept all with equal visual weight, keep granular settings optional, and avoid coupling access to consent or payment.",
      "effort": "medium"
    },
    {
      "id": "F-003",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The blocking consent UI is not exposed as a native dialog or ARIA dialog.",
      "evidence": "DOM probes found no dialog, [role=dialog], or [aria-modal=true], while screenshots show a modal full-screen interruption implemented by .cmp-root-container.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/platform-a11y-probe.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Use a native <dialog> with a labelled heading, managed focus, Escape/cancel behaviour, and explicit consent actions.",
      "effort": "medium"
    },
    {
      "id": "F-004",
      "pathId": "adult-flow",
      "url": "https://erotik.markt.de/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Largest Contentful Paint is far outside the good range.",
      "evidence": "Lighthouse measured LCP 8.2 s, FCP 2.5 s, Speed Index 5.8 s and performance 0.67; the independent trace measured LCP 6.74 s.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/after-age-trace-summary.json",
        "evidence/after-age-trace.json"
      ],
      "suggestedFix": "Profile the LCP dependency chain, prioritise the LCP resource, reduce consent/CSS startup work, and defer non-critical scripts and styles.",
      "effort": "large"
    },
    {
      "id": "F-005",
      "pathId": "adult-flow",
      "url": "https://erotik.markt.de/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "The page ships a long render-blocking chain and excessive startup resources.",
      "evidence": "HAR recorded 149 requests and 1.36 MB transferred, including 50 scripts and 14 stylesheets; Lighthouse estimated 1,490 ms render-blocking savings.",
      "artifacts": [
        "evidence/age-flow-summary.json",
        "evidence/age-flow.har",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Bundle only route-critical CSS, remove unused widget/editor styles from the gateway, defer non-critical scripts, and split shared Kotlin/RequireJS bundles by route.",
      "effort": "large"
    },
    {
      "id": "F-006",
      "pathId": "adult-flow",
      "url": "https://erotik.markt.de/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Large amounts of unused and legacy code are delivered on the simple gateway.",
      "evidence": "Lighthouse estimated 313 KiB unused JavaScript, 56 KiB unused CSS and 15 KiB legacy JavaScript; the largest script alone transferred 228,788 bytes.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/age-flow-summary.json"
      ],
      "suggestedFix": "Use route-level code splitting and modern-only output, and do not preload editor, carousel, fancybox, upload, payment, or widget code until those features are requested.",
      "effort": "large"
    },
    {
      "id": "F-007",
      "pathId": "listing",
      "url": "https://erotik.markt.de/sie-sucht-ihn/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The representative listing performs a severe main-thread long task.",
      "evidence": "The mobile layout observer recorded a 496 ms long task at 5.66 s after navigation.",
      "artifacts": [
        "evidence/listing-mobile-layout.json"
      ],
      "suggestedFix": "Profile the listing hydration/render task, chunk result processing, virtualise offscreen work, and yield between batches with scheduler APIs.",
      "effort": "medium"
    },
    {
      "id": "F-008",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "No enforcing Content-Security-Policy is sent and one long-lived cookie is not Secure.",
      "evidence": "Headers primitive found no CSP. Cookies primitive found __ssid without Secure, SameSite=None and a 400-day lifetime; five cookies were flagged by the primitive.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Deploy a nonce/hash-based enforcing CSP, mark every cross-site cookie Secure, minimise SameSite=None usage, and shorten non-essential cookie lifetimes.",
      "effort": "medium"
    },
    {
      "id": "F-009",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "medium",
      "confidence": "high",
      "summary": "Referrer-Policy and Permissions-Policy are absent.",
      "evidence": "Headers primitive confirmed HSTS, nosniff and SAMEORIGIN but reported missing Referrer-Policy and Permissions-Policy.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Add an explicit strict-origin-when-cross-origin Referrer-Policy and a least-privilege Permissions-Policy; retain HSTS and frame protection.",
      "effort": "small"
    },
    {
      "id": "F-010",
      "pathId": "adult-flow",
      "url": "https://erotik.markt.de/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "severity": "high",
      "confidence": "high",
      "summary": "Nearly the entire network load is classified as cross-origin and the consent wall describes sharing with 276 partners.",
      "evidence": "HAR classified 143 of 149 requests and 1.32 MB of 1.36 MB as cross-origin relative to erotik.markt.de; the consent screenshot states 276 partners and usage-based advertising/tracking.",
      "artifacts": [
        "evidence/age-flow-summary.json",
        "evidence/home-desktop.png",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Default to non-personalised operation, remove unnecessary vendors, proxy same-organisation static assets where appropriate, and load optional advertising/analytics only after freely given consent.",
      "effort": "large"
    },
    {
      "id": "F-011",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "Public entity URLs expose the generic age-confirmation document instead of unique page metadata to fresh crawlers.",
      "evidence": "The representative detail DOM returned title and description “Über-18-Bestätigung”; raw-vs-rendered discoverability coverage was only 35%.",
      "artifacts": [
        "evidence/detail-dom.json",
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png"
      ],
      "suggestedFix": "Server-render each public route’s unique title, description, heading, canonical and safe textual summary before the age interaction while keeping restricted media gated.",
      "effort": "large"
    },
    {
      "id": "F-012",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "Only 35% of rendered content is present without JavaScript, and a fresh detail route degrades to the generic age gate.",
      "evidence": "Discoverability primitive measured 35% raw-content coverage. The crawler screenshot and detail DOM show the gateway rather than route content, although the raw shell itself is non-empty.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png",
        "evidence/detail-dom.json"
      ],
      "suggestedFix": "Render safe core route content and semantic links on the server, then progressively enhance gated media and interactions after age confirmation.",
      "effort": "large"
    },
    {
      "id": "F-013",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "Visible images lack intrinsic dimensions.",
      "evidence": "Images primitive found three of five images without width/height; Lighthouse also failed its unsized-images audit.",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Add intrinsic width and height attributes (or equivalent aspect-ratio reservation) to both logo variants and the JUSPROG image.",
      "effort": "small"
    },
    {
      "id": "F-014",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "low",
      "confidence": "medium",
      "summary": "Animations remain active when reduced motion is requested.",
      "evidence": "Under prefers-reduced-motion: reduce, getAnimations() still returned two running animations; CSS only declared reduced-motion rules for no-preference.",
      "artifacts": [
        "evidence/preferences-focus.json"
      ],
      "suggestedFix": "Disable or greatly shorten non-essential CMP and navigation animation inside @media (prefers-reduced-motion: reduce).",
      "effort": "small"
    },
    {
      "id": "F-015",
      "pathId": "adult-flow",
      "url": "https://erotik.markt.de/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "medium",
      "summary": "The age-confirmation navigation is an abrupt full-document swap with no visible continuity.",
      "evidence": "The transition capture produced only a single stable frame and source probes found no authored view-transition rules, while the adult click caused a full navigation.",
      "artifacts": [
        "evidence/listing-age-flow.mp4",
        "evidence/platform-a11y-probe.json"
      ],
      "suggestedFix": "Add cross-document View Transitions for the age-gate-to-marketplace navigation, with reduced-motion fallback.",
      "effort": "small"
    },
    {
      "id": "F-016",
      "pathId": "entry",
      "url": "https://erotik.markt.de/",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "The public gateway and fresh route response expose no Open Graph or JSON-LD metadata.",
      "evidence": "Recon found zero Open Graph tags and zero JSON-LD blocks, while sitemap URLs represent classified entities that benefit from accurate safe previews.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/detail-dom.json"
      ],
      "suggestedFix": "Add route-accurate Open Graph metadata and safe schema.org JSON-LD for listings and editorial pages without exposing restricted imagery to under-age users.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "T-001",
      "title": "Make consent freely rejectable and non-blocking",
      "priority": 1,
      "findingIds": [
        "F-001",
        "F-002",
        "F-003"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T-002",
      "title": "Cut gateway LCP and route startup payload",
      "priority": 2,
      "findingIds": [
        "F-004",
        "F-005",
        "F-006",
        "F-007"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T-003",
      "title": "Deploy CSP and least-privilege browser policies",
      "priority": 3,
      "findingIds": [
        "F-008",
        "F-009"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T-004",
      "title": "Minimise tracking vendors and cross-origin startup requests",
      "priority": 4,
      "findingIds": [
        "F-010"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T-005",
      "title": "Server-render route-specific safe metadata and content",
      "priority": 5,
      "findingIds": [
        "F-011",
        "F-012",
        "F-016"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-006",
      "title": "Reserve image dimensions",
      "priority": 6,
      "findingIds": [
        "F-013"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-007",
      "title": "Respect reduced motion and add optional navigation continuity",
      "priority": 7,
      "findingIds": [
        "F-014",
        "F-015"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 2100,
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-20T12-07-55-367Z"
}
