{
  "url": "https://m.tabor.ru",
  "auditedAt": "2026-07-23T10:03:16.134Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete audit of public unauthenticated templates. Authenticated profile, messaging, matching, payment, and account-deletion flows were not accessible without credentials; these exclusions are explicit in paths/report.md.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered legacy MPA with small JavaScript bundles",
    "notes": "Russian mobile dating site. Public surfaces are server-rendered; login/registration are protected by Cloudflare Turnstile."
  },
  "evidenceUsed": [
    "screenshot",
    "dom+css",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse",
    "axe-core",
    "curl"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "component-specific-light-dark-theme",
    "accessibility",
    "adapt-scrollbar-to-contrast-preferences",
    "same-document-transitions",
    "cross-document-transitions",
    "group-element-transitions",
    "faster-spa-view-transitions",
    "scrollytelling",
    "parallax-scroll-effects",
    "scroll-entry-exit-effects",
    "carousel-slide-effects",
    "physics-based-easing",
    "individual-transform-properties",
    "animate-element-entry-exit",
    "animate-to-from-top-layer",
    "animate-to-intrinsic-sizes",
    "dynamic-sibling-animations",
    "interactive-content-reveal",
    "pull-to-reveal",
    "swipe-to-remove",
    "shrinking-header-on-scroll",
    "scroll-progress-indicator",
    "scroll-position-aware-elements",
    "scroll-snap-realtime-feedback",
    "scroll-snap-state-sync",
    "scroll-target-on-load",
    "soft-edge-content-fade",
    "scrollability-affordance-hints",
    "anchor-positioning-tab-underline",
    "position-aware-tooltips",
    "interest-triggered-tooltips",
    "interest-triggered-action-previews",
    "directional-navigation-transitions",
    "carousel-snap-highlights",
    "navigation-drawer",
    "stack-drill-down",
    "persistent-app-tours",
    "persistent-toast-notifications",
    "light-dismiss-a-dialog",
    "platform-controls-dismiss-dialog",
    "declarative-dialog-popover-control",
    "animated-select-picker",
    "branded-select-styling",
    "brand-consistent-forms",
    "custom-select-picker-layouts",
    "rich-media-picker",
    "complex-shapes",
    "shaped-cutouts",
    "overflow-clipping-control",
    "visually-texture-content",
    "apply-webgl-shaders",
    "interactive-content-in-3d-scenes",
    "highlight-text-ranges",
    "prevent-text-wrapping",
    "customize-scrollbar-color-and-thickness",
    "export-html-media-from-canvas",
    "fluid-scaling",
    "calculate-with-intrinsic-sizes",
    "css-layout",
    "size-aware-styling",
    "content-based-styling",
    "child-state-based-styling",
    "design-token-reactivity",
    "dynamic-sibling-styling",
    "form-fields-automatically-fit-contents",
    "improve-text-layout-and-legibility",
    "forms",
    "accessible-error-announcement",
    "required-field-feedback",
    "validate-input-after-interaction",
    "identify-inp-causes",
    "schedule-tasks-by-priority",
    "optimize-preload-priority",
    "improve-next-page-load-performance",
    "interactions-in-complex-layouts",
    "performance",
    "visually-stable-font-fallbacks",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-script-priority",
    "defer-rendering-heavy-content",
    "defer-work-until-scroll-ends",
    "optimize-image-priority",
    "conditional-async-dependencies",
    "expose-canvas-content-to-browser-features",
    "move-dom-element-without-losing-state",
    "precise-text-alignment",
    "visually-stable-mixed-fonts",
    "css",
    "html",
    "reduce-style-repetition",
    "security",
    "privacy",
    "batch-analytics-events",
    "full-session-analytics",
    "calculate-total-foreground-time",
    "passkeys",
    "passkey-registration",
    "passkey-authentication",
    "passkey-reauthentication",
    "passkey-conditional-create",
    "passkey-management",
    "flicker-free-client-side-ab-testing",
    "consistent-cross-document-transitions",
    "stabilize-reactive-state",
    "resilient-context-menus-and-nested-dropdowns",
    "persistent-top-layer-ui",
    "detect-initial-visibility-state",
    "sequence-distributed-events",
    "translator",
    "language-detection",
    "support-global-calendar-systems",
    "capture-location-agnostic-data",
    "format-human-readable-durations",
    "manage-recurring-intervals",
    "calculate-event-differentials",
    "coordinate-global-events",
    "model-partial-time-concepts",
    "search-hidden-content",
    "select-menu-interaction",
    "style-parent-with-has",
    "autofill-address-form",
    "autofill-payment-form",
    "autofill-sign-in-form",
    "autofill-sign-up-form",
    "autofill-highlight-inputs",
    "deliver-optimized-decorative-images",
    "resolution-optimized-pseudo-elements",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "webmcp",
    "agentic-forms",
    "agentic-javascript-tools",
    "language-model",
    "summarizer"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Landing page at 360x800",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F-01",
        "F-05",
        "F-07",
        "F-15",
        "F-17",
        "F-26",
        "F-33",
        "F-36"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Landing page at 1365x768",
      "condition": "viewport: 1365x768",
      "findingIds": [
        "F-07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Landing page under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F-01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-high-contrast.png",
      "caption": "Landing page under increased contrast",
      "condition": "prefers-contrast: more",
      "findingIds": [
        "F-02"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/registration.png",
      "caption": "Registration promo",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F-05"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/registration-step1.png",
      "caption": "Registration step 1",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F-09",
        "F-17",
        "F-36"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/registration-invalid.png",
      "caption": "Registration after invalid submit attempt",
      "condition": "invalid submission",
      "findingIds": [
        "F-09",
        "F-10",
        "F-34"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/restore.png",
      "caption": "Password recovery",
      "condition": "viewport: 360x800"
    },
    {
      "type": "screenshot",
      "path": "evidence/reviews.png",
      "caption": "Public reviews listing",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F-04",
        "F-32"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/help.png",
      "caption": "Help index",
      "condition": "viewport: 360x800"
    },
    {
      "type": "screenshot",
      "path": "evidence/404.png",
      "caption": "Real 404 response",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F-10",
        "F-30"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Rendered browser view",
      "condition": "JavaScript enabled"
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "Crawler/no-JS view",
      "condition": "JavaScript disabled"
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Landing rendered DOM and CSS",
      "findingIds": [
        "F-01",
        "F-03",
        "F-05",
        "F-06",
        "F-17",
        "F-18",
        "F-19",
        "F-21",
        "F-27",
        "F-31",
        "F-33"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/registration-dom.json",
      "caption": "Signup promotion rendered DOM and CSS",
      "findingIds": [
        "F-03",
        "F-21"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/registration-step1-dom.json",
      "caption": "Registration form rendered DOM and CSS",
      "findingIds": [
        "F-08",
        "F-14",
        "F-16",
        "F-18",
        "F-21",
        "F-22",
        "F-27",
        "F-31",
        "F-35",
        "F-36"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/reviews-dom.json",
      "caption": "Reviews rendered DOM",
      "findingIds": [
        "F-03",
        "F-04",
        "F-21",
        "F-24",
        "F-32"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "Landing metadata, links, and forms probe",
      "findingIds": [
        "F-22",
        "F-23",
        "F-24",
        "F-35"
      ]
    },
    {
      "type": "other",
      "path": "evidence/motion-css.json",
      "caption": "Reduced-motion animation and CSS probe"
    },
    {
      "type": "other",
      "path": "evidence/404-probe.json",
      "caption": "404 status and content probe",
      "findingIds": [
        "F-10",
        "F-30"
      ]
    },
    {
      "type": "other",
      "path": "evidence/document-headers.txt",
      "caption": "Main document response headers",
      "findingIds": [
        "F-23",
        "F-28"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "Mobile overflow, CLS, and long-task observations",
      "findingIds": [
        "F-11"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools load trace"
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Compact trace timings and blocking summary",
      "findingIds": [
        "F-11"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Network HAR",
      "findingIds": [
        "F-12",
        "F-39"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Compact request, weight, and third-party summary",
      "findingIds": [
        "F-12",
        "F-13",
        "F-26",
        "F-33",
        "F-37",
        "F-38",
        "F-39"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Raw HTML versus rendered content report"
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Full Lighthouse report"
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-summary.json",
      "caption": "Selected Lighthouse scores and diagnostics",
      "findingIds": [
        "F-11",
        "F-13",
        "F-19",
        "F-20",
        "F-22",
        "F-27",
        "F-38"
      ]
    },
    {
      "type": "other",
      "path": "evidence/axe.json",
      "caption": "axe-core accessibility results",
      "findingIds": [
        "F-02",
        "F-14",
        "F-15",
        "F-16",
        "F-31"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security-header inspection",
      "findingIds": [
        "F-25",
        "F-28"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie attribute inspection",
      "findingIds": [
        "F-25",
        "F-26"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party origin inspection",
      "findingIds": [
        "F-26",
        "F-33",
        "F-39"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client secret scan"
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Rendered image inspection",
      "findingIds": [
        "F-19",
        "F-37"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Baseline heap summary"
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Post-interaction heap summary"
    },
    {
      "type": "other",
      "path": "evidence/memory-metrics.json",
      "caption": "Before/after runtime memory metrics"
    },
    {
      "type": "other",
      "path": "evidence/ui-probe.json",
      "caption": "Focus, target, viewport, and CSS capability probe",
      "findingIds": [
        "F-07",
        "F-08",
        "F-09",
        "F-16",
        "F-18",
        "F-31",
        "F-35"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "Script attributes, media, permission, agent, and time probe",
      "findingIds": [
        "F-12",
        "F-27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/pwa-probe.json",
      "caption": "Service-worker registration and manifest probe",
      "findingIds": [
        "F-29",
        "F-30"
      ]
    },
    {
      "type": "other",
      "path": "evidence/registration-invalid-probe.json",
      "caption": "Invalid registration state probe",
      "findingIds": [
        "F-10",
        "F-34"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "Fetched robots.txt",
      "findingIds": [
        "F-22",
        "F-23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "Fetched sitemap index",
      "findingIds": [
        "F-23"
      ]
    },
    {
      "type": "other",
      "path": "evidence/manifest.json",
      "caption": "Fetched web app manifest",
      "findingIds": [
        "F-29"
      ]
    },
    {
      "type": "other",
      "path": "coverage-manifest.json",
      "caption": "Atomic audit coverage plan"
    }
  ],
  "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": "Emulated prefers-color-scheme: dark, screenshot comparison, and DOM/CSS inspection",
      "evidence": "The dark-mode screenshot is pixel-identical in appearance to the light capture; body and form surfaces remain fixed pale cream/white and the DOM CSS contains no color-scheme or prefers-color-scheme rule.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dark.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F-01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Emulated reduced motion and queried document animations/CSS",
      "evidence": "Under prefers-reduced-motion: reduce, getAnimations() returned no active animations; the audited pages use no non-essential motion or auto-advance.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/motion-css.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Emulated prefers-contrast: more screenshot plus axe color-contrast audit",
      "evidence": "The prefers-contrast: more capture does not adapt the palette, and axe measured five failures including 1.98:1 for the h1 and 2.49:1 for the cookie button.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-high-contrast.png",
        "evidence/axe.json"
      ],
      "findingIds": [
        "F-02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "medium",
      "method": "Navigated representative MPA routes and inspected page CSS",
      "evidence": "Navigation among home, registration, recovery, reviews, and help performs abrupt full-document swaps; DOM/CSS inspection found no ::view-transition rules or view-transition-name usage.",
      "pathIds": [
        "home",
        "signup",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/registration-dom.json",
        "evidence/reviews-dom.json"
      ],
      "findingIds": [
        "F-03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/CSS inspection and screenshots across long reviews and static pages",
      "evidence": "No parallax, scrollytelling, entry reveal, carousel, or other scroll-linked motion exists on the audited public templates.",
      "pathIds": [
        "home",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/reviews-dom.json"
      ],
      "reason": "There is no scroll-linked effect to implement declaratively."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/CSS inspection across representative paths",
      "evidence": "The public unauthenticated templates expose ordinary links/forms only, with no swipe, pull-to-refresh, draggable, snap-carousel, or gesture-driven component.",
      "pathIds": [
        "home",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/reviews-dom.json"
      ],
      "reason": "No custom gesture interaction is present on the audited surfaces."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "medium",
      "method": "Mobile screenshot and DOM inspection of long listing",
      "evidence": "The long reviews listing has no sticky context, progress, or scroll-state response; its only menu is at the top while pagination appears after the list.",
      "pathIds": [
        "reviews"
      ],
      "artifacts": [
        "evidence/reviews.png",
        "evidence/reviews-dom.json"
      ],
      "findingIds": [
        "F-04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM inspection across home, registration, recovery, reviews, and help",
      "evidence": "No tooltip, attached popover, dropdown, or edge-sensitive overlay is exposed on the audited unauthenticated templates.",
      "pathIds": [
        "home",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/reviews-dom.json"
      ],
      "reason": "There is no anchored overlay whose positioning can be judged."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Visual review and link/heading DOM inspection",
      "evidence": "Headings, explicit action labels, numbered registration progress, back links, and review pagination identify the current context and next location without ambiguous icon-only navigation.",
      "pathIds": [
        "home",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/registration-step1.png",
        "evidence/reviews.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Initial mobile screenshot and DOM overlay inspection",
      "evidence": "A fixed cookie banner occupies roughly the bottom 148px of the 800px mobile viewport on load and presents only a prominent Accept action, obscuring app-store/footer content.",
      "pathIds": [
        "home",
        "signup"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/registration.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F-05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Rendered DOM inspection of the consent surface",
      "evidence": "The cookie control is a custom <span role=\"button\" tabindex=\"0\"> inside fixed divs, with no dialog/popover semantics and no light-dismiss or reject action.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F-06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "medium",
      "method": "Desktop/mobile screenshots and layout review",
      "evidence": "The unauthenticated pages are visually sparse and devote nearly all non-consent space to login, registration, help, or review content rather than decorative application chrome.",
      "pathIds": [
        "home",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/registration-step1.png",
        "evidence/reviews.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Mobile layout metrics and screenshots",
      "evidence": "At 360x800 the layout primitive reported scrollWidth=clientWidth=360 and horizontalOverflowPx=0; mobile screenshots show controls reflowing without clipping.",
      "pathIds": [
        "home",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/home-mobile.png",
        "evidence/registration-step1.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "CSS capability probe plus desktop/mobile screenshot comparison",
      "evidence": "CSS inspection found no container queries or logical sizing; at 1365px the login form remains a 244px strip while background panels stretch edge-to-edge, showing no component-level adaptation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F-07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Focus/target-size probe and registration DOM inspection",
      "evidence": "Every login control, recovery link, and registration field has tabindex=-1, removing the core flows from sequential keyboard navigation; many links are only 14–17px tall and the checkbox is 13x13px.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/registration-step1-dom.json"
      ],
      "findingIds": [
        "F-08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "First-viewport screenshots and heading/action inspection",
      "evidence": "The first viewport identifies the service as mobile dating and exposes sign-in plus a clearly labelled free-registration action; the signup promo has one explicit next step.",
      "pathIds": [
        "home",
        "signup"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/registration.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Walked login/signup paths, inspected controls, and attempted empty registration submission",
      "evidence": "The login and two-step registration journeys cannot be completed with sequential keyboard input because all controls are tabindex=-1; Turnstile also gates both flows and the invalid registration attempt produced no actionable state.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/registration-step1.png",
        "evidence/registration-invalid.png"
      ],
      "findingIds": [
        "F-09"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Invalid-submit interaction plus 404 screenshot/DOM probe",
      "evidence": "After accepting consent and attempting an empty registration submission, the page remained unchanged with no :invalid fields, role=alert, aria-invalid, or error text; the 404 tells users to go back but provides no actionable link.",
      "pathIds": [
        "registration",
        "error404"
      ],
      "artifacts": [
        "evidence/registration-invalid.png",
        "evidence/registration-invalid-probe.json",
        "evidence/404.png",
        "evidence/404-probe.json"
      ],
      "findingIds": [
        "F-10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile Lighthouse plus desktop trace and mobile layout observers",
      "evidence": "Mobile Lighthouse measured LCP 4.3s and FCP 3.7s, outside the good range, although the local desktop trace was faster at 1.35s and CLS remained low.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-layout-mobile.json"
      ],
      "findingIds": [
        "F-11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse and first-load layout-shift observer",
      "evidence": "Observed CLS was 0.037 in Lighthouse and 0.059 in the mobile layout capture, both within the good range; screenshots showed no disruptive content jump.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-layout-mobile.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse and DevTools trace summary",
      "evidence": "Lighthouse TBT was 0ms; the trace found one 84.57ms long task and 34.57ms total blocking time, a light main-thread result.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary confirmed against actual head script attributes",
      "evidence": "Two 300KB+ parser-inserted legacy scripts in <head> have neither async nor defer; HAR recorded 31 requests, seven redirects, and 484KB transferred, with Turnstile alone delaying about 1.39s.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/platform-probe.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F-12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse code-coverage diagnostics and HAR weight breakdown",
      "evidence": "Lighthouse estimates 225KiB of unused JavaScript: 128KB from index.min.js, 54KB from Yandex Metrika, and 48KB from vendor-index.min.js.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core plus rendered DOM inspection",
      "evidence": "axe reported critical label failures for both login fields, an unnamed tracking link, and missing landmarks; registration fields likewise use nearby text rather than associated <label> elements.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/axe.json",
        "evidence/registration-step1-dom.json"
      ],
      "findingIds": [
        "F-14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core computed contrast audit",
      "evidence": "axe found five serious contrast failures, including the 1.98:1 heading, 1.79:1 online count, 3.94:1 sign-in button, 3.26:1 policy link, and 2.49:1 consent button.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/axe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F-15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "axe structure audit and active focus/tabIndex probe",
      "evidence": "axe found no main landmark and content outside landmarks; more critically, login and registration inputs/buttons are all tabindex=-1 despite showing an outline only when focused programmatically.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/axe.json",
        "evidence/ui-probe.json",
        "evidence/registration-step1-dom.json"
      ],
      "findingIds": [
        "F-16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "Computed CSS and mobile screenshot inspection",
      "evidence": "The primary h1 is rendered at 13px and the consent text at 12px/14px; screenshots show dense low-contrast copy and edge-to-edge rows that reduce reading comfort.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png",
        "evidence/registration-step1.png"
      ],
      "findingIds": [
        "F-17"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "DOM meta inspection, target-size probe, and mobile screenshots",
      "evidence": "Home, signup, registration, recovery, and help omit the viewport meta; the target probe found 13x13 and 14–17px-high controls, while core CAPTCHA canvas interaction has no equivalent exposed in page markup.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/ui-probe.json"
      ],
      "findingIds": [
        "F-18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse console-error audit",
      "evidence": "Lighthouse observed no browser console errors or uncaught exceptions during load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "DOM, Lighthouse asset audits, and images primitive",
      "evidence": "The doctype and charset are valid, but 5 of 6 images omit width/height, four below-fold images are not lazy, and five use legacy PNG/GIF without responsive sources.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F-19"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse best-practices diagnostics",
      "evidence": "Lighthouse reports five BFCache blockers (notably Cache-Control: no-store and WebSocket use) plus DevTools cookie issues; deprecated APIs, paste prevention, and on-load permission prompts did pass.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F-20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "DOM metadata inspection across representative templates",
      "evidence": "Home has a descriptive title/description, but signup, registration, recovery, and help have no meta description and reviews uses a blank description.",
      "pathIds": [
        "home",
        "signup",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/registration-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/reviews-dom.json"
      ],
      "findingIds": [
        "F-21"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "DOM/link probes, robots.txt, and Lighthouse SEO corroboration",
      "evidence": "Links and robots.txt are crawlable, but four of five representative legacy templates omit meta viewport; several app-store links rely solely on images.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/robots.txt",
        "evidence/lighthouse-summary.json",
        "evidence/registration-step1-dom.json"
      ],
      "findingIds": [
        "F-22"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "medium",
      "method": "Fetched robots.txt, sitemap.xml, headers, and page canonicals",
      "evidence": "Responses and canonicals are valid, but the sitemap index lists only http:// URLs and every lastmod is 2021-09-12 despite currently changing profile/review content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/sitemap.xml",
        "evidence/robots.txt",
        "evidence/document-headers.txt",
        "evidence/recon.json"
      ],
      "findingIds": [
        "F-23"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "DOM metadata probe across landing and reviews",
      "evidence": "No JSON-LD or Open Graph tags were present on the organization landing page or public review listing, despite these representing a service/organization and user reviews.",
      "pathIds": [
        "home",
        "reviews"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/reviews-dom.json"
      ],
      "findingIds": [
        "F-24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Security headers and cookies primitives",
      "evidence": "HTTPS is used, but CSP, HSTS, X-Content-Type-Options, frame protection, Referrer-Policy, and Permissions-Policy are all absent; sid and test cookies lack Secure and SameSite protection.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F-25"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Initial screenshot, trackers, cookies, and HAR summary",
      "evidence": "While the only consent UI is still visible, Yandex Metrika and LiveInternet load; HAR recorded 25 of 31 requests and 468KB of 484KB from other origins, including repeated Yandex cookie-sync chains.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/trackers.json",
        "evidence/cookies.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-26"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse permission audits and auth DOM/platform inspection",
      "evidence": "Lighthouse confirms no geolocation/notification prompt on load, but both public authentication and registration expose password-only flows; no WebAuthn/passkey capability is present.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F-27"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Main-document security header inspection",
      "evidence": "Neither CSP frame-ancestors nor X-Frame-Options, HSTS, Referrer-Policy, Permissions-Policy, Trusted Types enforcement, or origin-isolation headers were observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/document-headers.txt"
      ],
      "findingIds": [
        "F-28"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Raw HTML versus rendered DOM discoverability capture",
      "evidence": "The raw response contains title, h1, description, form content, and core links; discoverability measured 80% content coverage and isJsShell=false, so primary public content survives without JavaScript.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "DOM/layout/Lighthouse review across representative pages",
      "evidence": "The audited public templates are server-rendered, use ordinary links/forms, fit at 360px without clipping, and produced no console errors; no fragile menu/overlay positioning was observed beyond separately reported consent semantics.",
      "pathIds": [
        "home",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/lighthouse-summary.json",
        "evidence/registration-step1.png",
        "evidence/reviews.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "Fetched manifest and queried service-worker registrations",
      "evidence": "This app-like dating service exposes a manifest, but it contains only name \"App\" and one 192px icon, with no start_url/display/short_name; no service-worker registrations exist.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/manifest.json",
        "evidence/pwa-probe.json"
      ],
      "findingIds": [
        "F-29"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Navigated a missing route and inspected 404 state plus service-worker registrations",
      "evidence": "The real 404 returns status 404 and explains the problem, but offers only plain-text instructions to go back, no Home/Retry link; no offline fallback is registered.",
      "pathIds": [
        "error404",
        "home"
      ],
      "artifacts": [
        "evidence/404.png",
        "evidence/404-probe.json",
        "evidence/pwa-probe.json"
      ],
      "findingIds": [
        "F-30"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "axe, DOM, and CSS capability inspection across templates",
      "evidence": "Home, recovery, reviews, and registration use xml:lang or no language instead of a valid HTML lang attribute; axe flags html-has-lang, and the CSS capability probe found no logical properties.",
      "pathIds": [
        "home",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/axe.json",
        "evidence/home-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/ui-probe.json"
      ],
      "findingIds": [
        "F-31"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "issues",
      "confidence": "medium",
      "method": "Rendered reviews DOM and time-element inspection",
      "evidence": "The reviews template renders Russian relative dates such as “вчера в 21:54” in <time> elements without datetime values, leaving no machine-readable instant and no evidence of locale-aware formatting.",
      "pathIds": [
        "reviews"
      ],
      "artifacts": [
        "evidence/reviews-dom.json",
        "evidence/reviews.png"
      ],
      "findingIds": [
        "F-32"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/text inspection across representative templates",
      "evidence": "The audited public/auth/help templates expose no scheduled event, recurring interval, absolute appointment time, or other user-editable time-zone-sensitive concept.",
      "pathIds": [
        "home",
        "registration",
        "reviews"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/reviews-dom.json"
      ],
      "reason": "No time-zone-sensitive task is present on the audited public surfaces."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Initial screenshot, consent DOM, cookies, trackers, and HAR evidence",
      "evidence": "The consent banner offers only Accept while analytics and cookie syncing already run; there is no Reject or Settings control, making the apparent choice non-reversible and non-neutral.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-33"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "issues",
      "confidence": "high",
      "method": "Invalid registration interaction, screenshot, and state probe",
      "evidence": "After accepting terms and attempting an empty registration submission, no visible error, :invalid field, aria-invalid state, role=alert, or focused recovery target appeared; the CAPTCHA remained in “Verifying...” state.",
      "pathIds": [
        "registration"
      ],
      "artifacts": [
        "evidence/registration-invalid.png",
        "evidence/registration-invalid-probe.json"
      ],
      "findingIds": [
        "F-34"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Form attribute probes across login and registration",
      "evidence": "Login and registration text/password/date fields have empty autocomplete values and tabindex=-1; fields rely on nearby text rather than explicit labels, preventing autofill and keyboard assistance.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/ui-probe.json",
        "evidence/registration-step1-dom.json"
      ],
      "findingIds": [
        "F-35"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Auth/registration walkthrough and DOM inspection",
      "evidence": "The audited account-creation/sign-in flows are password-only, keyboard-inaccessible, gated by a canvas CAPTCHA, and combine terms, cookies, and personal-data consent into one required checkbox.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/registration-step1.png",
        "evidence/registration-step1-dom.json"
      ],
      "findingIds": [
        "F-36"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Images primitive and HAR resource summary",
      "evidence": "Five images use legacy PNG/GIF, five omit intrinsic dimensions, four below-fold images are not lazy, and no image uses srcset; transferred image weight is modest at 36KB but delivery is not optimized.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-37"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse unused-code and HAR network analysis",
      "evidence": "A simple server-rendered login page transfers 428KB of script and Lighthouse estimates 225KiB unused; analytics triggers multiple cookie-sync redirects before consent.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-38"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR and tracker-origin analysis",
      "evidence": "25 of 31 requests and 468KB of 484KB transferred came from other origins; Yandex, Cloudflare, and LiveInternet account for substantial script/network activity on a minimal login view.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F-39"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected forms, metadata, and platform globals for agent tool registration",
      "evidence": "No developer intent or public agent-facing workflow was declared; this emerging capability is not required for the audited conventional dating/auth site.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/recon.json"
      ],
      "reason": "Agent-facing capabilities are contextual and the site declares no agentic intent."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected platform globals and representative page tasks",
      "evidence": "No summarisation, generation, translation, or other inference task is part of the audited public login/registration/help journeys.",
      "pathIds": [
        "home",
        "registration"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "reason": "There is no user task on these public surfaces that calls for on-device inference."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Baseline and post-interaction heap-summary comparison plus runtime memory metrics",
      "evidence": "After ten representative login input/focus cycles, heap self-size rose only 59,176 bytes (6,693,096 to 6,752,272; 0.9%), node count by 142, while closure count stayed exactly 8,393.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot",
        "evidence/memory-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Heap summary and in-page node/heap metrics",
      "evidence": "The loaded page heap summary was about 6.7MB with stable DOM element count of 92, proportionate for the login page and its CAPTCHA/analytics dependencies.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/memory-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Compared heap type/constructor summaries and DOM count before/after",
      "evidence": "Across the repeated interaction, native node population remained effectively flat (18,967 to 18,968), closures stayed 8,393, DOM elements stayed 92, and no Detached* constructor appeared in either top-constructor summary.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot",
        "evidence/memory-metrics.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-01",
        "F-02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-05",
        "F-06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-07",
        "F-08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-09",
        "F-10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-11",
        "F-12",
        "F-13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-14",
        "F-15",
        "F-16",
        "F-17",
        "F-18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-19",
        "F-20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-21",
        "F-22",
        "F-23",
        "F-24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-25",
        "F-26",
        "F-27",
        "F-28"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-29",
        "F-30"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-31",
        "F-32"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-33",
        "F-34",
        "F-35",
        "F-36"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-37",
        "F-38",
        "F-39"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "Agent-facing capabilities are contextual and the site declares no agentic intent. There is no user task on these public surfaces that calls for on-device inference."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Landing/login template: primary sign-in, consent, preference, performance, privacy, security, responsiveness, and no-JS evidence.",
      "url": "https://m.tabor.ru/",
      "conditions": [
        "1365x768",
        "360x800",
        "prefers-color-scheme: dark",
        "prefers-contrast: more",
        "prefers-reduced-motion: reduce",
        "keyboard/focus probe",
        "repeated login-field interaction"
      ],
      "result": "issues"
    },
    {
      "id": "signup",
      "description": "Signup promotion template: acquisition message and route into account creation.",
      "url": "https://m.tabor.ru/regpromo.php",
      "conditions": [
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "registration",
      "description": "Registration step 1: representative primary form, consent, CAPTCHA, keyboard path, and invalid submission.",
      "url": "https://m.tabor.ru/reg.php?step=1",
      "conditions": [
        "360x800",
        "keyboard/focus inspection",
        "empty invalid submission"
      ],
      "result": "issues"
    },
    {
      "id": "restore",
      "description": "Password-recovery index: account recovery options and navigation.",
      "url": "https://m.tabor.ru/restore/",
      "conditions": [
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "reviews",
      "description": "Public reviews listing: distinct content/list template, long-scroll navigation, form, dates, and metadata.",
      "url": "https://m.tabor.ru/reviews/",
      "conditions": [
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "help",
      "description": "Help index: distinct support/navigation template including safety and account-deletion links.",
      "url": "https://m.tabor.ru/faq.php",
      "conditions": [
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "error404",
      "description": "Synthetic missing route that returned a real HTTP 404, used to judge recovery behavior.",
      "url": "https://m.tabor.ru/__web_uplift_missing_404__",
      "conditions": [
        "360x800"
      ],
      "result": "issues"
    },
    {
      "id": "excluded-auth",
      "description": "Authenticated profiles, matching/search, messaging, payments, and account management were not covered because no test credentials were provided and login is CAPTCHA-protected.",
      "result": "skipped"
    }
  ],
  "findings": [
    {
      "id": "F-01",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site ignores the user’s dark color-scheme preference.",
      "evidence": "The dark-mode screenshot is pixel-identical in appearance to the light capture; body and form surfaces remain fixed pale cream/white and the DOM CSS contains no color-scheme or prefers-color-scheme rule.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dark.png",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Declare color-scheme: light dark and provide preference-driven surface, text, control, and browser-chrome colors.",
      "effort": "medium"
    },
    {
      "id": "F-02",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "Text and controls do not adapt to increased contrast and several fail WCAG contrast.",
      "evidence": "The prefers-contrast: more capture does not adapt the palette, and axe measured five failures including 1.98:1 for the h1 and 2.49:1 for the cookie button.",
      "artifacts": [
        "evidence/home-high-contrast.png",
        "evidence/axe.json"
      ],
      "suggestedFix": "Use system/forced-color-friendly colors, avoid fixed low-contrast orange/green pairs, and test all states at 4.5:1 for normal text.",
      "effort": "medium"
    },
    {
      "id": "F-03",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "medium",
      "summary": "Primary route changes are abrupt and provide no spatial continuity.",
      "evidence": "Navigation among home, registration, recovery, reviews, and help performs abrupt full-document swaps; DOM/CSS inspection found no ::view-transition rules or view-transition-name usage.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/registration-dom.json",
        "evidence/reviews-dom.json"
      ],
      "suggestedFix": "Progressively add @view-transition { navigation: auto } and restrained directional transitions, with reduced-motion handling.",
      "effort": "medium"
    },
    {
      "id": "F-04",
      "pathId": "reviews",
      "url": "https://m.tabor.ru/reviews/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scrollability-affordance-hints",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "medium",
      "summary": "Long content offers no scroll-state orientation or persistent navigation.",
      "evidence": "The long reviews listing has no sticky context, progress, or scroll-state response; its only menu is at the top while pagination appears after the list.",
      "artifacts": [
        "evidence/reviews.png",
        "evidence/reviews-dom.json"
      ],
      "suggestedFix": "Provide a compact sticky header/back control and a subtle scrollability/progress affordance, progressively enhanced with scroll-state queries.",
      "effort": "medium"
    },
    {
      "id": "F-05",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "The on-load cookie banner obscures content and cannot be declined or dismissed.",
      "evidence": "A fixed cookie banner occupies roughly the bottom 148px of the 800px mobile viewport on load and presents only a prominent Accept action, obscuring app-store/footer content.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/registration.png",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Use a compact, non-blocking consent surface with equally available accept, reject, and settings actions and remember the choice.",
      "effort": "medium"
    },
    {
      "id": "F-06",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Consent uses an ad-hoc pseudo-button and non-semantic overlay.",
      "evidence": "The cookie control is a custom <span role=\"button\" tabindex=\"0\"> inside fixed divs, with no dialog/popover semantics and no light-dismiss or reject action.",
      "artifacts": [
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Use a real button and an appropriate dialog/popover pattern with labelled purpose, focus behavior, and declarative dismissal.",
      "effort": "small"
    },
    {
      "id": "F-07",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Components rely on legacy fixed sizing rather than adapting to their available container.",
      "evidence": "CSS inspection found no container queries or logical sizing; at 1365px the login form remains a 244px strip while background panels stretch edge-to-edge, showing no component-level adaptation.",
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Introduce a centered intrinsic-width content container and use container queries/logical sizing for reusable forms and listings.",
      "effort": "medium"
    },
    {
      "id": "F-08",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "critical",
      "confidence": "high",
      "summary": "Core login and registration controls are removed from keyboard navigation and several targets are undersized.",
      "evidence": "Every login control, recovery link, and registration field has tabindex=-1, removing the core flows from sequential keyboard navigation; many links are only 14–17px tall and the checkbox is 13x13px.",
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/registration-step1-dom.json"
      ],
      "suggestedFix": "Remove tabindex=-1 from native interactive elements, preserve visible :focus-visible styles, and provide at least 24x24 CSS px targets with 44px preferred for primary touch actions.",
      "effort": "small"
    },
    {
      "id": "F-09",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "severity": "critical",
      "confidence": "high",
      "summary": "The primary authentication and registration journeys exclude keyboard users.",
      "evidence": "The login and two-step registration journeys cannot be completed with sequential keyboard input because all controls are tabindex=-1; Turnstile also gates both flows and the invalid registration attempt produced no actionable state.",
      "artifacts": [
        "evidence/ui-probe.json",
        "evidence/registration-step1.png",
        "evidence/registration-invalid.png"
      ],
      "suggestedFix": "Restore native tab order, label all fields, make CAPTCHA provide an accessible alternative, and verify both steps end-to-end by keyboard and assistive technology.",
      "effort": "medium"
    },
    {
      "id": "F-10",
      "pathId": "registration",
      "url": "https://m.tabor.ru/reg.php?step=1",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "accessible-error-announcement",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Failure states do not provide clear, actionable recovery.",
      "evidence": "After accepting consent and attempting an empty registration submission, the page remained unchanged with no :invalid fields, role=alert, aria-invalid, or error text; the 404 tells users to go back but provides no actionable link.",
      "artifacts": [
        "evidence/registration-invalid.png",
        "evidence/registration-invalid-probe.json",
        "evidence/404.png",
        "evidence/404-probe.json"
      ],
      "suggestedFix": "Validate after interaction, move focus to a concise error summary, associate field errors, and add real recovery links on error pages.",
      "effort": "medium"
    },
    {
      "id": "F-11",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Mobile paint performance is slow despite a visually simple page.",
      "evidence": "Mobile Lighthouse measured LCP 4.3s and FCP 3.7s, outside the good range, although the local desktop trace was faster at 1.35s and CLS remained low.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-layout-mobile.json"
      ],
      "suggestedFix": "Prioritize the initial HTML/CSS and logo, defer non-critical scripts/analytics/CAPTCHA, and retest LCP under mobile throttling.",
      "effort": "medium"
    },
    {
      "id": "F-12",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Parser-blocking scripts and third-party dependency chains delay a very small page.",
      "evidence": "Two 300KB+ parser-inserted legacy scripts in <head> have neither async nor defer; HAR recorded 31 requests, seven redirects, and 484KB transferred, with Turnstile alone delaying about 1.39s.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/platform-probe.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Defer/module-load the application bundles, load CAPTCHA only when the auth form is engaged, and remove avoidable redirect chains.",
      "effort": "medium"
    },
    {
      "id": "F-13",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Most of the shipped JavaScript is unused on the landing page.",
      "evidence": "Lighthouse estimates 225KiB of unused JavaScript: 128KB from index.min.js, 54KB from Yandex Metrika, and 48KB from vendor-index.min.js.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Create a landing/auth-specific bundle, conditionally import feature code, and delay analytics until consent and idle time.",
      "effort": "large"
    },
    {
      "id": "F-14",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "critical",
      "confidence": "high",
      "summary": "Core form fields and some links lack accessible names and structure.",
      "evidence": "axe reported critical label failures for both login fields, an unnamed tracking link, and missing landmarks; registration fields likewise use nearby text rather than associated <label> elements.",
      "artifacts": [
        "evidence/axe.json",
        "evidence/registration-step1-dom.json"
      ],
      "suggestedFix": "Associate explicit labels with every input/select, remove or name the tracking link, and organize content with header/main/nav/footer landmarks.",
      "effort": "small"
    },
    {
      "id": "F-15",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Important text and controls fail WCAG AA contrast.",
      "evidence": "axe found five serious contrast failures, including the 1.98:1 heading, 1.79:1 online count, 3.94:1 sign-in button, 3.26:1 policy link, and 2.49:1 consent button.",
      "artifacts": [
        "evidence/axe.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Replace pale orange/green foregrounds and coral button colors with tested tokens meeting 4.5:1 for normal text and 3:1 for large text/UI.",
      "effort": "small"
    },
    {
      "id": "F-16",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "critical",
      "confidence": "high",
      "summary": "Landmark structure is weak and the primary flows are absent from keyboard focus order.",
      "evidence": "axe found no main landmark and content outside landmarks; more critically, login and registration inputs/buttons are all tabindex=-1 despite showing an outline only when focused programmatically.",
      "artifacts": [
        "evidence/axe.json",
        "evidence/ui-probe.json",
        "evidence/registration-step1-dom.json"
      ],
      "suggestedFix": "Use semantic landmarks/headings and native document-order focus; never remove required controls from sequential focus.",
      "effort": "small"
    },
    {
      "id": "F-17",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-inclusive",
      "principleCheckId": "legible-text",
      "guidanceId": "improve-text-layout-and-legibility",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Key headings and consent copy are cramped and undersized.",
      "evidence": "The primary h1 is rendered at 13px and the consent text at 12px/14px; screenshots show dense low-contrast copy and edge-to-edge rows that reduce reading comfort.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png",
        "evidence/registration-step1.png"
      ],
      "suggestedFix": "Use a readable type scale, 1.4–1.6 line-height for body copy, bounded line lengths, and clearer spacing/hierarchy.",
      "effort": "small"
    },
    {
      "id": "F-18",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Most templates omit mobile scaling metadata and expose undersized/keyboard-inaccessible targets.",
      "evidence": "Home, signup, registration, recovery, and help omit the viewport meta; the target probe found 13x13 and 14–17px-high controls, while core CAPTCHA canvas interaction has no equivalent exposed in page markup.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/ui-probe.json"
      ],
      "suggestedFix": "Add width=device-width, initial-scale=1 without disabling zoom, enlarge targets, and ensure Turnstile has an accessible non-canvas fallback.",
      "effort": "small"
    },
    {
      "id": "F-19",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image markup omits intrinsic dimensions and responsive delivery hints.",
      "evidence": "The doctype and charset are valid, but 5 of 6 images omit width/height, four below-fold images are not lazy, and five use legacy PNG/GIF without responsive sources.",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Set width/height or aspect-ratio, lazy-load below-fold badges, and provide appropriately sized modern-format sources where beneficial.",
      "effort": "small"
    },
    {
      "id": "F-20",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page cannot use BFCache and generates browser inspector issues.",
      "evidence": "Lighthouse reports five BFCache blockers (notably Cache-Control: no-store and WebSocket use) plus DevTools cookie issues; deprecated APIs, paste prevention, and on-load permission prompts did pass.",
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Limit no-store to truly sensitive responses, close/restore live connections around pagehide/pageshow, and correct cookie attributes.",
      "effort": "medium"
    },
    {
      "id": "F-21",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Most public templates lack meaningful meta descriptions.",
      "evidence": "Home has a descriptive title/description, but signup, registration, recovery, and help have no meta description and reviews uses a blank description.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/registration-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/reviews-dom.json"
      ],
      "suggestedFix": "Give each public template a concise, unique description aligned with its visible purpose.",
      "effort": "small"
    },
    {
      "id": "F-22",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Crawlable pages inconsistently declare mobile behavior and descriptive link text.",
      "evidence": "Links and robots.txt are crawlable, but four of five representative legacy templates omit meta viewport; several app-store links rely solely on images.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/robots.txt",
        "evidence/lighthouse-summary.json",
        "evidence/registration-step1-dom.json"
      ],
      "suggestedFix": "Add consistent viewport metadata and ensure image links retain descriptive accessible/crawler-visible text.",
      "effort": "small"
    },
    {
      "id": "F-23",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "medium",
      "summary": "The sitemap exposes stale HTTP-era indexing signals.",
      "evidence": "Responses and canonicals are valid, but the sitemap index lists only http:// URLs and every lastmod is 2021-09-12 despite currently changing profile/review content.",
      "artifacts": [
        "evidence/sitemap.xml",
        "evidence/robots.txt",
        "evidence/document-headers.txt",
        "evidence/recon.json"
      ],
      "suggestedFix": "Publish HTTPS sitemap locations, refresh lastmod only when content changes, and keep sitemap/canonical hosts intentionally aligned.",
      "effort": "small"
    },
    {
      "id": "F-24",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "Public entity and review pages lack structured and social-preview metadata.",
      "evidence": "No JSON-LD or Open Graph tags were present on the organization landing page or public review listing, despite these representing a service/organization and user reviews.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/reviews-dom.json"
      ],
      "suggestedFix": "Add accurate Organization/WebSite metadata and appropriate review/list metadata, plus Open Graph preview fields matching visible content.",
      "effort": "small"
    },
    {
      "id": "F-25",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "critical",
      "confidence": "high",
      "summary": "Core browser security headers and cookie protections are missing.",
      "evidence": "HTTPS is used, but CSP, HSTS, X-Content-Type-Options, frame protection, Referrer-Policy, and Permissions-Policy are all absent; sid and test cookies lack Secure and SameSite protection.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Deploy a nonce/hash-based CSP, HSTS, nosniff, frame-ancestors, strict Referrer-Policy/Permissions-Policy, and Secure HttpOnly SameSite auth cookies.",
      "effort": "medium"
    },
    {
      "id": "F-26",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "severity": "critical",
      "confidence": "high",
      "summary": "Tracking begins before meaningful consent and dominates the request surface.",
      "evidence": "While the only consent UI is still visible, Yandex Metrika and LiveInternet load; HAR recorded 25 of 31 requests and 468KB of 484KB from other origins, including repeated Yandex cookie-sync chains.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/trackers.json",
        "evidence/cookies.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Do not initialize non-essential analytics before an affirmative choice; offer reject/settings, minimize events, and remove cookie-sync/legacy counters where possible.",
      "effort": "medium"
    },
    {
      "id": "F-27",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "passkeys",
      "severity": "medium",
      "confidence": "high",
      "summary": "Authentication remains password-only with no phishing-resistant option.",
      "evidence": "Lighthouse confirms no geolocation/notification prompt on load, but both public authentication and registration expose password-only flows; no WebAuthn/passkey capability is present.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "Add passkey registration/sign-in and recovery alongside existing methods, requested only from explicit user actions.",
      "effort": "large"
    },
    {
      "id": "F-28",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "Browser-enforced defensive policies are absent.",
      "evidence": "Neither CSP frame-ancestors nor X-Frame-Options, HSTS, Referrer-Policy, Permissions-Policy, Trusted Types enforcement, or origin-isolation headers were observed.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/document-headers.txt"
      ],
      "suggestedFix": "Roll out HSTS, CSP with frame-ancestors and Trusted Types where feasible, nosniff, restrictive referrer/permissions policies, and evaluate COOP/COEP needs.",
      "effort": "medium"
    },
    {
      "id": "F-29",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "The app-like service is not meaningfully installable and has no offline fallback.",
      "evidence": "This app-like dating service exposes a manifest, but it contains only name \"App\" and one 192px icon, with no start_url/display/short_name; no service-worker registrations exist.",
      "artifacts": [
        "evidence/manifest.json",
        "evidence/pwa-probe.json"
      ],
      "suggestedFix": "Provide a complete web app manifest and a narrowly scoped service worker with an offline shell/recovery page for public/auth surfaces.",
      "effort": "medium"
    },
    {
      "id": "F-30",
      "pathId": "error404",
      "url": "https://m.tabor.ru/__web_uplift_missing_404__",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Network/error recovery surfaces are informational but not actionable.",
      "evidence": "The real 404 returns status 404 and explains the problem, but offers only plain-text instructions to go back, no Home/Retry link; no offline fallback is registered.",
      "artifacts": [
        "evidence/404.png",
        "evidence/404-probe.json",
        "evidence/pwa-probe.json"
      ],
      "suggestedFix": "Add Home, Back, and Retry actions to 404/network states and provide an offline fallback for key public routes.",
      "effort": "small"
    },
    {
      "id": "F-31",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "built-in-ai",
      "severity": "high",
      "confidence": "high",
      "summary": "Most templates do not expose a valid document language and use physical CSS.",
      "evidence": "Home, recovery, reviews, and registration use xml:lang or no language instead of a valid HTML lang attribute; axe flags html-has-lang, and the CSS capability probe found no logical properties.",
      "artifacts": [
        "evidence/axe.json",
        "evidence/home-dom.json",
        "evidence/registration-step1-dom.json",
        "evidence/ui-probe.json"
      ],
      "suggestedFix": "Set <html lang=\"ru\" dir=\"ltr\"> consistently and migrate layout declarations to logical properties so translation/writing-mode changes remain safe.",
      "effort": "small"
    },
    {
      "id": "F-32",
      "pathId": "reviews",
      "url": "https://m.tabor.ru/reviews/",
      "principleId": "be-internationalised",
      "principleCheckId": "locale-aware-data",
      "guidanceId": "format-human-readable-durations",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "medium",
      "summary": "Human-readable review times omit machine-readable locale-neutral values.",
      "evidence": "The reviews template renders Russian relative dates such as “вчера в 21:54” in <time> elements without datetime values, leaving no machine-readable instant and no evidence of locale-aware formatting.",
      "artifacts": [
        "evidence/reviews-dom.json",
        "evidence/reviews.png"
      ],
      "suggestedFix": "Emit ISO datetime attributes and format relative dates with Intl.RelativeTimeFormat from canonical timestamps.",
      "effort": "small"
    },
    {
      "id": "F-33",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "severity": "critical",
      "confidence": "high",
      "summary": "Consent is one-sided and tracking begins before the user can choose.",
      "evidence": "The consent banner offers only Accept while analytics and cookie syncing already run; there is no Reject or Settings control, making the apparent choice non-reversible and non-neutral.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-dom.json",
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Block non-essential tracking by default and present equal accept/reject/settings choices without manipulative emphasis.",
      "effort": "medium"
    },
    {
      "id": "F-34",
      "pathId": "registration",
      "url": "https://m.tabor.ru/reg.php?step=1",
      "principleId": "be-trustworthy",
      "principleCheckId": "humane-error-handling",
      "guidanceId": "validate-input-after-interaction",
      "guidanceCategory": "forms",
      "severity": "high",
      "confidence": "high",
      "summary": "Invalid registration fails silently instead of explaining what to correct.",
      "evidence": "After accepting terms and attempting an empty registration submission, no visible error, :invalid field, aria-invalid state, role=alert, or focused recovery target appeared; the CAPTCHA remained in “Verifying...” state.",
      "artifacts": [
        "evidence/registration-invalid.png",
        "evidence/registration-invalid-probe.json"
      ],
      "suggestedFix": "Use native constraints and post-interaction validation, associate concise errors with fields, announce a summary, and move focus predictably.",
      "effort": "medium"
    },
    {
      "id": "F-35",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-sign-in-form",
      "guidanceCategory": "forms",
      "severity": "high",
      "confidence": "high",
      "summary": "Authentication fields do not support standard autofill or keyboard input order.",
      "evidence": "Login and registration text/password/date fields have empty autocomplete values and tabindex=-1; fields rely on nearby text rather than explicit labels, preventing autofill and keyboard assistance.",
      "artifacts": [
        "evidence/recon.json",
        "evidence/ui-probe.json",
        "evidence/registration-step1-dom.json"
      ],
      "suggestedFix": "Add correct autocomplete tokens (username, current-password, new-password, name, bday fields), explicit labels, inputmode, and native focus order.",
      "effort": "small"
    },
    {
      "id": "F-36",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-trustworthy",
      "principleCheckId": "safe-commercial-and-account-flows",
      "guidanceId": "passkey-registration",
      "guidanceCategory": "passkeys",
      "severity": "high",
      "confidence": "high",
      "summary": "Account onboarding bundles consent and excludes safer, accessible authentication choices.",
      "evidence": "The audited account-creation/sign-in flows are password-only, keyboard-inaccessible, gated by a canvas CAPTCHA, and combine terms, cookies, and personal-data consent into one required checkbox.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/registration-step1.png",
        "evidence/registration-step1-dom.json"
      ],
      "suggestedFix": "Separate required contractual acceptance from optional cookie choices, restore accessible controls/CAPTCHA alternatives, and add passkey onboarding and reauthentication.",
      "effort": "large"
    },
    {
      "id": "F-37",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Image delivery omits modern sizing and loading optimizations.",
      "evidence": "Five images use legacy PNG/GIF, five omit intrinsic dimensions, four below-fold images are not lazy, and no image uses srcset; transferred image weight is modest at 36KB but delivery is not optimized.",
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Add intrinsic dimensions, lazy loading below fold, and appropriately sized WebP/AVIF or SVG sources where they reduce bytes.",
      "effort": "small"
    },
    {
      "id": "F-38",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Unused code and pre-consent analytics consume resources without immediate user value.",
      "evidence": "A simple server-rendered login page transfers 428KB of script and Lighthouse estimates 225KiB unused; analytics triggers multiple cookie-sync redirects before consent.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Ship a minimal route bundle, conditionally load CAPTCHA/features, and defer/batch consented analytics.",
      "effort": "large"
    },
    {
      "id": "F-39",
      "pathId": "home",
      "url": "https://m.tabor.ru/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Third-party work dominates the page’s network budget.",
      "evidence": "25 of 31 requests and 468KB of 484KB transferred came from other origins; Yandex, Cloudflare, and LiveInternet account for substantial script/network activity on a minimal login view.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Set a strict third-party budget, remove redundant counters, gate analytics on consent, and lazy-load CAPTCHA only when needed.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "T-1",
      "title": "Restore accessible keyboard-first auth and registration",
      "priority": 1,
      "findingIds": [
        "F-08",
        "F-09",
        "F-14",
        "F-16",
        "F-18",
        "F-35",
        "F-36"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T-2",
      "title": "Stop pre-consent tracking and offer real consent choice",
      "priority": 2,
      "findingIds": [
        "F-26",
        "F-33",
        "F-05"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T-3",
      "title": "Deploy security headers and hardened cookies",
      "priority": 3,
      "findingIds": [
        "F-25",
        "F-28",
        "F-20"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T-4",
      "title": "Cut parser-blocking and unused JavaScript",
      "priority": 4,
      "findingIds": [
        "F-11",
        "F-12",
        "F-13",
        "F-38",
        "F-39"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T-5",
      "title": "Fix color contrast and preference-aware theming",
      "priority": 5,
      "findingIds": [
        "F-01",
        "F-02",
        "F-15"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T-6",
      "title": "Add actionable validation and recovery states",
      "priority": 6,
      "findingIds": [
        "F-10",
        "F-30",
        "F-34"
      ],
      "guidanceId": "accessible-error-announcement",
      "status": "open"
    },
    {
      "id": "T-7",
      "title": "Standardize language, viewport, metadata, and semantic structure",
      "priority": 7,
      "findingIds": [
        "F-17",
        "F-21",
        "F-22",
        "F-23",
        "F-24",
        "F-31",
        "F-32"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-8",
      "title": "Complete the manifest and offline fallback",
      "priority": 8,
      "findingIds": [
        "F-29"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-9",
      "title": "Optimize image markup and delivery",
      "priority": 9,
      "findingIds": [
        "F-19",
        "F-37"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 7,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-23T10-03-16-134Z"
}
