{
  "url": "https://visuys.space",
  "auditedAt": "2026-07-20T15:42:11.305Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage complete. Lighthouse was attempted but returned NO_FCP; first-party trace, layout, HAR, axe, CDP probes, screenshots, headers, cookies, trackers, secrets, images, and heap evidence supplied direct outcomes instead.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered PHP-style MPA with Bootstrap assets and custom CSS",
    "notes": "Public Indonesian football schedule/streaming directory. Audited homepage, live listing, schedule, search, and unknown-route recovery. No playable match detail existed during the run, so that data-dependent template was not coverable; its absence is recorded as a core-flow finding rather than silently omitted."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "axe-core",
    "trace",
    "har",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "raw-http",
    "heap-summary",
    "lighthouse-attempt"
  ],
  "guidanceConsulted": [
    "adapt-scrollbar-to-contrast-preferences",
    "dark-mode",
    "accessibility",
    "brand-consistent-forms",
    "component-specific-light-dark-theme",
    "scroll-snap-realtime-feedback",
    "carousel-slide-effects",
    "navigation-drawer",
    "stack-drill-down",
    "scroll-entry-exit-effects",
    "position-aware-tooltips",
    "pull-to-reveal",
    "anchor-positioning-tab-underline",
    "defer-rendering-heavy-content",
    "interactions-in-complex-layouts",
    "soft-edge-content-fade",
    "faster-spa-view-transitions",
    "animate-to-from-top-layer",
    "scroll-position-aware-elements",
    "forms",
    "css",
    "capture-location-agnostic-data",
    "stabilize-reactive-state",
    "model-partial-time-concepts",
    "declarative-button-actions",
    "calculate-event-differentials",
    "performance",
    "webmcp",
    "schedule-tasks-by-priority",
    "agentic-javascript-tools",
    "deprioritize-background-fetches",
    "accessible-error-announcement",
    "html",
    "same-document-transitions",
    "security",
    "search-hidden-content",
    "agentic-forms",
    "interactive-content-reveal",
    "passkeys",
    "privacy",
    "passkey-reauthentication",
    "passkey-authentication",
    "passkey-management",
    "summarizer",
    "translator",
    "coordinate-global-events",
    "support-global-calendar-systems",
    "autofill-highlight-inputs",
    "autofill-payment-form",
    "language-model",
    "defer-work-until-scroll-ends",
    "persistent-top-layer-ui",
    "break-up-long-tasks"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Homepage first viewport: navigation and search render, but the content area is blank.",
      "condition": "desktop 780x493",
      "findingIds": [
        "F04",
        "F05",
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Homepage at 360x800: responsive with no horizontal clipping, but still no core content.",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F04",
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Dark-preference capture is pixel-identical to default because the theme is hard-coded dark.",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Mobile layout metrics: 0px overflow and CLS 0.00007.",
      "condition": "viewport: 360x800"
    },
    {
      "type": "screenshot",
      "path": "evidence/live.png",
      "caption": "Live route clearly communicates the zero-match empty state and links to upcoming matches.",
      "condition": "desktop",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/matches.png",
      "caption": "Schedule route shows no matches and mixed Indonesian/English day labels.",
      "condition": "desktop",
      "findingIds": [
        "F15",
        "F16",
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search.png",
      "caption": "Search route with query, date input, submit action, and clear zero-result state.",
      "condition": "desktop",
      "findingIds": [
        "F07",
        "F09"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/live-contrast.png",
      "caption": "Forced-colors/high-contrast capture remains readable and actionable.",
      "condition": "forced-colors: active; prefers-contrast: more"
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "Reduced-motion probe still finds the infinite blink animation and no reduced-motion rule.",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/focus-targets.json",
      "caption": "Keyboard/target probe finds an unnamed 36x30 menu button, unlabelled search/date inputs, and inputs with outline removed.",
      "condition": "keyboard focus",
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "type": "other",
      "path": "evidence/axe.json",
      "caption": "axe-core reports button-name (critical), landmark, region, and missing-h1 violations.",
      "condition": "default",
      "findingIds": [
        "F07",
        "F09"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/load-trace.json",
      "caption": "DevTools load trace retained for verification.",
      "condition": "cold load",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/load-trace-summary.json",
      "caption": "Trace summary reports FCP/LCP at 63.15s and no long tasks.",
      "condition": "cold load",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "har",
      "path": "evidence/network.har",
      "caption": "HAR 1.2 retained for network verification.",
      "condition": "5s capture",
      "findingIds": [
        "F06",
        "F13",
        "F18"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/network-summary.json",
      "caption": "14 requests, 1.05MB transferred, 280KB third-party, 602KB favicon, and parser-blocking ad script.",
      "condition": "5s capture",
      "findingIds": [
        "F06",
        "F13",
        "F18",
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "HTTPS is used, but CSP, HSTS, nosniff, clickjacking, referrer, and permissions policies are absent.",
      "condition": "main document",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "The sole first-party session cookie is Secure, HttpOnly, and SameSite=Lax.",
      "condition": "main document"
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Eight third-party origins include ad and beacon infrastructure.",
      "condition": "main document",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "No client-exposed secrets detected.",
      "condition": "main document"
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Logo is blocked/zero natural width and lacks dimensions; PNG is the only image.",
      "condition": "main document",
      "findingIds": [
        "F10",
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "No view-transition, container-query, scroll-timeline, or anchor-positioning usage; parser-blocking ad script confirmed.",
      "condition": "main document",
      "findingIds": [
        "F03",
        "F06",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/console.json",
      "caption": "CDP console capture found no exceptions but one deprecated software-WebGL warning.",
      "condition": "4s settled load",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots-sitemap.txt",
      "caption": "robots allows general search but blocks major AI crawlers; sitemap.xml returns a Cloudflare 403.",
      "condition": "raw HTTP",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/raw-html-summary.json",
      "caption": "Generic raw fetch receives a Cloudflare block page instead of site content.",
      "condition": "crawler/no-JS request",
      "findingIds": [
        "F14",
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/404.png",
      "caption": "Unknown path produces the same blank application shell.",
      "condition": "404 path",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/404-status.txt",
      "caption": "Unknown path returns HTTP 403 rather than a useful site error page.",
      "condition": "404 path",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/i18n-forms.json",
      "caption": "lang=id is present, but physical CSS dominates, Intl is absent, and inputs have no autocomplete tokens.",
      "condition": "search route",
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "Baseline heap summary: 128,631 nodes and 7.72MB self size.",
      "condition": "live route baseline"
    },
    {
      "type": "heap",
      "path": "evidence/heap-after-interaction.json",
      "caption": "After 10 sidebar open/close cycles: 129,409 nodes and 7.78MB self size, with no Detached constructor population.",
      "condition": "10 repeated sidebar cycles"
    },
    {
      "type": "other",
      "path": "evidence/interaction-metrics.json",
      "caption": "Same-session interaction probe keeps DOM count fixed at 70; heap sample rises 0.28MB.",
      "condition": "10 repeated sidebar cycles"
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse attempt ends with NO_FCP, corroborating the load failure; no category score was produced.",
      "condition": "cold load",
      "findingIds": [
        "F05"
      ]
    }
  ],
  "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": "HINT (not mandatory): a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.",
      "evidence": "Default and dark-preference screenshots are pixel-identical; CSS defines only dark tokens and has no prefers-color-scheme/color-scheme rule.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.",
      "evidence": "The reduced-motion probe reports a running 1s infinite blink animation and zero matching reduced-motion rules.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.",
      "evidence": "Forced-colors/high-contrast screenshot keeps text, search, status, and upcoming-match action visible with system colors.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.",
      "evidence": "Platform probe finds no view-transition CSS/API usage across the MPA navigation.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.",
      "evidence": "No scroll-linked parallax, scrollytelling, carousel, or reveal behavior exists on the representative routes.",
      "reason": "No scroll-linked parallax, scrollytelling, carousel, or reveal behavior exists on the representative routes."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.",
      "evidence": "No gesture-driven interaction or snap-based content exists; the sidebar uses a simple button toggle.",
      "reason": "No gesture-driven interaction or snap-based content exists; the sidebar uses a simple button toggle."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.",
      "evidence": "CSS uses position:sticky but contains no scroll-state container query or progress/position cue.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.",
      "evidence": "No tooltip, popover, floating menu, or other anchored overlay appears on the audited routes.",
      "reason": "No tooltip, popover, floating menu, or other anchored overlay appears on the audited routes."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.",
      "evidence": "Active sidebar links, selected date/status tabs, headings, and clear empty-state actions consistently show location and next options.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.",
      "evidence": "Four route screenshots show no modal, interstitial, cookie wall, or banner obscuring core content on load.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.",
      "evidence": "No modal, disclosure, picker, or transient popover appears in the representative flows.",
      "reason": "No modal, disclosure, picker, or transient popover appears in the representative flows."
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.",
      "evidence": "Screenshots show a compact top bar/sidebar and content-dominant layouts without decorative framing crowding the viewport.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.",
      "evidence": "At 360x800 the layout reports scrollWidth=clientWidth=360, 0 overflow, viewport meta present, and readable mobile reflow.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.",
      "evidence": "Card and hero CSS uses clamp, flex, intrinsic sizing, and narrow breakpoints; the mobile capture reflows without clipping in the only observed component contexts.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.",
      "evidence": "axe reports a critical button-name violation; direct probe finds the menu button and three search/date inputs without labels. axe reports no main landmark, uncontained regions, and no homepage h1; two inputs compute outline:none when focused. The menu is 36x30px, nav rows are 42px high, text inputs are about 23px high, and a footer link is 15px high.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/console.json",
        "evidence/headers.json"
      ],
      "findingIds": [
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.",
      "evidence": "Desktop and mobile first-viewport captures show only navigation/search and a blank content region; the DOM has no h1.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/load-trace.json",
        "evidence/load-trace-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.",
      "evidence": "Homepage is blank; Live, Schedule, and Search all return zero items, so no representative watch flow can start.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/network.har",
        "evidence/network-summary.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.",
      "evidence": "Live, schedule, and search routes provide explicit zero-result messages and relevant next actions rather than a spinner or silent failure.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.",
      "evidence": "Trace reports FCP and LCP at 63.15s; both Lighthouse attempts terminate with NO_FCP.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/search.png",
        "evidence/focus-targets.json",
        "evidence/axe.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.",
      "evidence": "Mobile layout observer records CLS 0.00007 with no meaningful shift during the settled capture.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.",
      "evidence": "Trace records no long tasks and total blocking time of 0ms; the delay is network/document response, not main-thread execution.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.",
      "evidence": "HAR shows a 62.46s document, parser-blocking ad script, three blocking stylesheets, a 602KB favicon, and 1.05MB transferred for an empty homepage.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/focus-targets.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.",
      "evidence": "HAR attributes about 179KB to jsDelivr assets, 164KB to fonts, and 67KB to ad scripts despite only 70 DOM elements on the live empty state.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/search.png",
        "evidence/axe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.",
      "evidence": "axe reports a critical button-name violation; direct probe finds the menu button and three search/date inputs without labels.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.",
      "evidence": "axe reports no contrast violations and forced-colors screenshot remains legible with distinct controls.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.",
      "evidence": "axe reports no main landmark, uncontained regions, and no homepage h1; two inputs compute outline:none when focused.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/console.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.",
      "evidence": "Route screenshots show readable line lengths, clear hierarchy, no clipping, and consistent Outfit fallback rendering.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.",
      "evidence": "The menu is 36x30px, nav rows are 42px high, text inputs are about 23px high, and a footer link is 15px high.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.",
      "evidence": "CDP Runtime/Log capture over navigation and a 4s settle finds zero uncaught exceptions and no error-level console entries.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.",
      "evidence": "The image primitive records a zero-natural-width cross-origin logo with no width/height; HAR reports ERR_BLOCKED_BY_ORB.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/network.har",
        "evidence/network-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.",
      "evidence": "CDP Log reports deprecated automatic software-WebGL fallback during page load.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/robots-sitemap.txt",
        "evidence/raw-html-summary.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.",
      "evidence": "Homepage has a descriptive title and meta description matching the visible GedongTv purpose.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.",
      "evidence": "Visible navigation and date/status links use real hrefs; viewport meta exists; robots allows User-agent:* for search.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.",
      "evidence": "Generic raw fetch receives a Cloudflare block page, sitemap.xml returns 403, and the page exposes no canonical URL.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/matches.png",
        "evidence/i18n-forms.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.",
      "evidence": "The website page includes coherent Open Graph type, title, description, URL, image dimensions, locale, and visible-content alignment.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.",
      "evidence": "Headers probe finds no CSP, HSTS, nosniff, clickjacking defense, Referrer-Policy, or Permissions-Policy.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/matches.png",
        "evidence/i18n-forms.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.",
      "evidence": "Tracker/HAR evidence shows eight third-party origins, an ad script, a tracking beacon, and 280KB third-party transfer; no consent/context is visible.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/raw-html-summary.json",
        "evidence/404.png",
        "evidence/404-status.txt"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.",
      "evidence": "The site requests no browser permissions and exposes no authentication flow.",
      "reason": "The site requests no browser permissions and exposes no authentication flow."
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.",
      "evidence": "Neither headers nor CSP provide HSTS, frame-ancestors/X-Frame-Options, referrer controls, permissions controls, or origin isolation.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/network.har",
        "evidence/network-summary.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.",
      "evidence": "The raw request receives a Cloudflare “blocked” page rather than GedongTv content, while browser CDP receives the application.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.",
      "evidence": "Sidebar open/close repeated ten times returns to a closed state, DOM count stays 70, and route empty states remain stable.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.",
      "evidence": "This public schedule/streaming service is intrinsically network-dependent; installability is not necessary to understand or navigate its content.",
      "reason": "This public schedule/streaming service is intrinsically network-dependent; installability is not necessary to understand or navigate its content."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.",
      "evidence": "A nonexistent route returns HTTP 403 and the screenshot shows the same empty shell with no error message, home link, or retry.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/network-summary.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.",
      "evidence": "lang=id is present, but dir is omitted and the authored output contains 29 physical left/right declarations with no locale switch.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.",
      "evidence": "The schedule shows “Thursday”, “Friday”, and “Saturday” beside Indonesian labels; probe finds no Intl usage.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/live.png",
        "evidence/matches.png"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.",
      "evidence": "The page heading says Sunday, 19 July 2026 while the selected “Hari Ini” tab is 20 Jul, indicating server/user timezone drift.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.",
      "evidence": "DOM includes a zero-size, zero-text link to adexchangerapid.com and network starts ad/tracking requests on load.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.",
      "evidence": "Search accepts optional text/date filters and returns a clear zero-result message without premature or blaming validation.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.",
      "evidence": "The audited forms only contain search text and a date, not address, payment, sign-in, or profile data that needs autofill tokens.",
      "reason": "The audited forms only contain search text and a date, not address, payment, sign-in, or profile data that needs autofill tokens."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.",
      "evidence": "No checkout, subscription, consent-management, authentication, or account flow is exposed.",
      "reason": "No checkout, subscription, consent-management, authentication, or account flow is exposed."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.",
      "evidence": "HAR shows favicon1.png at 602,402 bytes, over half of the 1.05MB load; the only content image is also a legacy PNG.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.",
      "evidence": "Live page announces 30-second auto-refresh while HAR records ad script, fetch, and beacon activity before useful content.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HINT: a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.",
      "evidence": "Ten of 14 requests are third-party and transfer about 280KB, excluding the oversized first-party favicon.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.",
      "evidence": "The site is a simple public football schedule/streaming directory with no structured agent action surface, and robots explicitly reserves AI use.",
      "reason": "The site is a simple public football schedule/streaming directory with no structured agent action surface, and robots explicitly reserves AI use."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "HINT: source inspection for built-in AI (language model / summariser) usage. The model chooses.",
      "evidence": "No summarisation or language-model task is part of the site’s core experience.",
      "reason": "No summarisation or language-model task is part of the site’s core experience."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "HINT (not mandatory): compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.",
      "evidence": "Ten representative sidebar open/close cycles keep DOM count fixed at 70; heap summaries differ by only about 53KB (0.7%), with no evidence of unbounded retained growth.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.",
      "evidence": "The live empty state uses a proportionate 7.72MB V8 self-size footprint and 70 rendered DOM elements.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "HINT: the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.",
      "evidence": "Before/after heap summaries show no Detached* constructor population; repeated interaction leaves DOM count unchanged and closes cleanly.",
      "pathIds": [
        "home",
        "live",
        "schedule",
        "search",
        "error"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08",
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16",
        "F17",
        "F18"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F21",
        "F22",
        "F23"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F25",
        "F26",
        "F27"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "The site is a simple public football schedule/streaming directory with no structured agent action surface, and robots explicitly reserves AI use. No summarisation or language-model task is part of the site’s core experience."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage entry and primary watch-football proposition; desktop, mobile, dark, raw-client, performance, security, privacy, and memory conditions.",
      "url": "https://visuys.space/",
      "conditions": [
        "desktop",
        "viewport 360x800",
        "prefers-color-scheme: dark",
        "raw/no-JS client",
        "cold load"
      ],
      "result": "issues"
    },
    {
      "id": "live",
      "description": "Live listing and empty-state journey; representative dynamic listing plus repeated mobile drawer interaction.",
      "url": "https://visuys.space/pages/live.php",
      "conditions": [
        "default",
        "forced-colors",
        "prefers-reduced-motion: reduce",
        "10x sidebar cycle"
      ],
      "result": "issues"
    },
    {
      "id": "schedule",
      "description": "Schedule/listing archetype covering date navigation, locale, timezone, and zero-match state.",
      "url": "https://visuys.space/pages/matches.php",
      "conditions": [
        "default"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Primary search form and zero-results flow, including labels, keyboard focus, targets, and date filtering.",
      "url": "https://visuys.space/pages/search.php?q=football",
      "conditions": [
        "keyboard focus",
        "default"
      ],
      "result": "issues"
    },
    {
      "id": "error",
      "description": "Unknown-route/network failure recovery behavior.",
      "url": "https://visuys.space/not-a-real-page-404",
      "conditions": [
        "raw HTTP",
        "desktop"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site forces one dark palette instead of responding to the user’s color-scheme preference.",
      "evidence": "Default and dark-preference screenshots are pixel-identical; CSS defines only dark tokens and has no prefers-color-scheme/color-scheme rule.",
      "artifacts": [
        "evidence/home-dark.png"
      ],
      "suggestedFix": "Declare color-scheme and provide light/dark tokens selected with prefers-color-scheme or light-dark().",
      "effort": "small"
    },
    {
      "id": "F02",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Infinite status motion continues when reduced motion is requested.",
      "evidence": "The reduced-motion probe reports a running 1s infinite blink animation and zero matching reduced-motion rules.",
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "suggestedFix": "Disable or greatly reduce non-essential blinking inside @media (prefers-reduced-motion: reduce).",
      "effort": "trivial"
    },
    {
      "id": "F03",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "faster-spa-view-transitions",
      "severity": "low",
      "confidence": "high",
      "summary": "Route changes are abrupt full-document swaps.",
      "evidence": "Platform probe finds no view-transition CSS/API usage across the MPA navigation.",
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "Add same-origin cross-document View Transitions with a reduced-motion fallback.",
      "effort": "small"
    },
    {
      "id": "F04",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-position-aware-elements",
      "severity": "low",
      "confidence": "high",
      "summary": "Navigation chrome is sticky but gives no position or scroll-state feedback.",
      "evidence": "CSS uses position:sticky but contains no scroll-state container query or progress/position cue.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Add lightweight scroll-state feedback where pages extend beyond a viewport, while preserving the static fallback.",
      "effort": "small"
    },
    {
      "id": "F05",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-purpose-and-primary-action",
      "guidanceId": "scrollability-affordance-hints",
      "severity": "high",
      "confidence": "high",
      "summary": "The homepage presents an empty content area with no heading or primary action.",
      "evidence": "Desktop and mobile first-viewport captures show only navigation/search and a blank content region; the DOM has no h1.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/load-trace.json",
        "evidence/load-trace-summary.json",
        "evidence/lighthouse.json"
      ],
      "suggestedFix": "Render a server-side heading, current match summary, and clear Live/Schedule primary actions, including a meaningful empty state.",
      "effort": "small"
    },
    {
      "id": "F06",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "forms",
      "severity": "high",
      "confidence": "high",
      "summary": "The advertised watch-football journey cannot reach any playable content in the audited state.",
      "evidence": "Homepage is blank; Live, Schedule, and Search all return zero items, so no representative watch flow can start.",
      "artifacts": [
        "evidence/network.har",
        "evidence/network-summary.json",
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "Provide a truthful availability state on the homepage and ensure schedule/live data failures expose a retry or alternate path.",
      "effort": "medium"
    },
    {
      "id": "F07",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "severity": "critical",
      "confidence": "high",
      "summary": "Cold navigation is extremely slow and fails Lighthouse’s paint requirement.",
      "evidence": "Trace reports FCP and LCP at 63.15s; both Lighthouse attempts terminate with NO_FCP.",
      "artifacts": [
        "evidence/search.png",
        "evidence/focus-targets.json",
        "evidence/axe.json"
      ],
      "suggestedFix": "Remove blocking origin/API work from the document response, stream or render the shell immediately, and measure LCP on production hosting.",
      "effort": "large"
    },
    {
      "id": "F08",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Critical delivery is dominated by avoidable blocking and oversized resources.",
      "evidence": "HAR shows a 62.46s document, parser-blocking ad script, three blocking stylesheets, a 602KB favicon, and 1.05MB transferred for an empty homepage.",
      "artifacts": [
        "evidence/focus-targets.json"
      ],
      "suggestedFix": "Serve a small favicon, defer/remove the ad script, self-host/subset fonts/icons, and return the HTML shell without waiting on upstream data.",
      "effort": "medium"
    },
    {
      "id": "F09",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "defer-rendering-heavy-content",
      "severity": "medium",
      "confidence": "high",
      "summary": "A mostly empty page ships Bootstrap, a full icon font, webfont weights, and ad code before content.",
      "evidence": "HAR attributes about 179KB to jsDelivr assets, 164KB to fonts, and 67KB to ad scripts despite only 70 DOM elements on the live empty state.",
      "artifacts": [
        "evidence/search.png",
        "evidence/axe.json"
      ],
      "suggestedFix": "Replace framework-wide assets with page-scoped CSS/SVG icons, subset fonts, and load monetisation code after useful content.",
      "effort": "medium"
    },
    {
      "id": "F10",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Primary controls and search fields lack accessible names.",
      "evidence": "axe reports a critical button-name violation; direct probe finds the menu button and three search/date inputs without labels.",
      "artifacts": [
        "evidence/images.json"
      ],
      "suggestedFix": "Give the menu button an aria-label and expanded/controls state; add explicit labels or aria-labels to every input.",
      "effort": "small"
    },
    {
      "id": "F11",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Landmarks/headings are incomplete and custom input styling suppresses visible keyboard focus.",
      "evidence": "axe reports no main landmark, uncontained regions, and no homepage h1; two inputs compute outline:none when focused.",
      "artifacts": [
        "evidence/console.json"
      ],
      "suggestedFix": "Use main/nav landmarks, one descriptive h1 per page, and a strong :focus-visible style that is never removed without replacement.",
      "effort": "small"
    },
    {
      "id": "F12",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several interactive targets are smaller than the recommended touch size.",
      "evidence": "The menu is 36x30px, nav rows are 42px high, text inputs are about 23px high, and a footer link is 15px high.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Provide at least a 44x44 CSS pixel activation area for primary controls and increase input hit areas without harming reflow.",
      "effort": "small"
    },
    {
      "id": "F13",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "The brand image is broken and lacks intrinsic dimensions.",
      "evidence": "The image primitive records a zero-natural-width cross-origin logo with no width/height; HAR reports ERR_BLOCKED_BY_ORB.",
      "artifacts": [
        "evidence/network.har",
        "evidence/network-summary.json",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Host the logo on the same origin with the correct MIME/CORS behavior and explicit width/height or aspect-ratio.",
      "effort": "trivial"
    },
    {
      "id": "F14",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "Third-party code triggers a browser deprecation warning.",
      "evidence": "CDP Log reports deprecated automatic software-WebGL fallback during page load.",
      "artifacts": [
        "evidence/robots-sitemap.txt",
        "evidence/raw-html-summary.json"
      ],
      "suggestedFix": "Identify and remove or update the ad/creative code that requests the deprecated fallback.",
      "effort": "small"
    },
    {
      "id": "F15",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "search-hidden-content",
      "severity": "high",
      "confidence": "high",
      "summary": "Crawler and indexing signals are inconsistent and important resources are blocked.",
      "evidence": "Generic raw fetch receives a Cloudflare block page, sitemap.xml returns 403, and the page exposes no canonical URL.",
      "artifacts": [
        "evidence/matches.png",
        "evidence/i18n-forms.json"
      ],
      "suggestedFix": "Allow legitimate crawlers to fetch public HTML, publish a 200 sitemap, and add self-referencing canonicals for public routes.",
      "effort": "medium"
    },
    {
      "id": "F16",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "The HTTPS response omits core browser security headers.",
      "evidence": "Headers probe finds no CSP, HSTS, nosniff, clickjacking defense, Referrer-Policy, or Permissions-Policy.",
      "artifacts": [
        "evidence/matches.png",
        "evidence/i18n-forms.json"
      ],
      "suggestedFix": "Deploy a restrictive CSP, HSTS, nosniff, frame-ancestors, Referrer-Policy, and a minimal Permissions-Policy.",
      "effort": "medium"
    },
    {
      "id": "F17",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "severity": "high",
      "confidence": "high",
      "summary": "Advertising code contacts a broad third-party footprint before useful content appears.",
      "evidence": "Tracker/HAR evidence shows eight third-party origins, an ad script, a tracking beacon, and 280KB third-party transfer; no consent/context is visible.",
      "artifacts": [
        "evidence/raw-html-summary.json",
        "evidence/404.png",
        "evidence/404-status.txt"
      ],
      "suggestedFix": "Remove unnecessary ad/tracking partners, gate non-essential requests behind informed consent, and document data purposes and retention.",
      "effort": "medium"
    },
    {
      "id": "F18",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "severity": "high",
      "confidence": "high",
      "summary": "Browser-enforced defensive policies are absent.",
      "evidence": "Neither headers nor CSP provide HSTS, frame-ancestors/X-Frame-Options, referrer controls, permissions controls, or origin isolation.",
      "artifacts": [
        "evidence/network.har",
        "evidence/network-summary.json"
      ],
      "suggestedFix": "Set the defensive headers at the edge and test them with report-only CSP before enforcement.",
      "effort": "medium"
    },
    {
      "id": "F19",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "Public content is unavailable to a generic no-JavaScript/raw client.",
      "evidence": "The raw request receives a Cloudflare “blocked” page rather than GedongTv content, while browser CDP receives the application.",
      "artifacts": [
        "evidence/images.json"
      ],
      "suggestedFix": "Serve essential navigation, headings, schedules, and empty states as accessible HTML without a browser challenge.",
      "effort": "medium"
    },
    {
      "id": "F20",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "severity": "high",
      "confidence": "high",
      "summary": "Unknown/error routes fail as a blank shell with no recovery.",
      "evidence": "A nonexistent route returns HTTP 403 and the screenshot shows the same empty shell with no error message, home link, or retry.",
      "artifacts": [
        "evidence/network-summary.json"
      ],
      "suggestedFix": "Return the correct 404 status and render a branded recovery page with Home, Search, and Schedule links.",
      "effort": "small"
    },
    {
      "id": "F21",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "severity": "medium",
      "confidence": "high",
      "summary": "The layout is only partially translation- and bidi-ready.",
      "evidence": "lang=id is present, but dir is omitted and the authored output contains 29 physical left/right declarations with no locale switch.",
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "Set direction explicitly or derive it from locale, prefer logical properties, and externalise interface strings.",
      "effort": "medium"
    },
    {
      "id": "F22",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-internationalised",
      "principleCheckId": "locale-aware-data",
      "guidanceId": "translator",
      "severity": "medium",
      "confidence": "high",
      "summary": "Indonesian UI mixes English date labels and does not use locale-aware formatting.",
      "evidence": "The schedule shows “Thursday”, “Friday”, and “Saturday” beside Indonesian labels; probe finds no Intl usage.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/live.png",
        "evidence/matches.png"
      ],
      "suggestedFix": "Format day/date labels with Intl.DateTimeFormat using the active locale rather than mixed hard-coded strings.",
      "effort": "small"
    },
    {
      "id": "F23",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-internationalised",
      "principleCheckId": "time-zone-correctness",
      "guidanceId": "coordinate-global-events",
      "severity": "medium",
      "confidence": "high",
      "summary": "Schedule dates are internally inconsistent around the audit date.",
      "evidence": "The page heading says Sunday, 19 July 2026 while the selected “Hari Ini” tab is 20 Jul, indicating server/user timezone drift.",
      "artifacts": [],
      "suggestedFix": "Store event times unambiguously and derive the heading, selected day, and API date from one explicit user timezone.",
      "effort": "medium"
    },
    {
      "id": "F24",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "privacy",
      "severity": "medium",
      "confidence": "high",
      "summary": "An empty ad link and background tracking are present without a visible explanation or choice.",
      "evidence": "DOM includes a zero-size, zero-text link to adexchangerapid.com and network starts ad/tracking requests on load.",
      "artifacts": [],
      "suggestedFix": "Remove invisible ad affordances and provide clear, non-coercive disclosure/consent before non-essential tracking.",
      "effort": "small"
    },
    {
      "id": "F25",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "A 602KB PNG favicon dominates the page transfer.",
      "evidence": "HAR shows favicon1.png at 602,402 bytes, over half of the 1.05MB load; the only content image is also a legacy PNG.",
      "artifacts": [],
      "suggestedFix": "Generate tiny multi-size favicon assets and use appropriately sized modern image formats for visible imagery.",
      "effort": "trivial"
    },
    {
      "id": "F26",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "severity": "medium",
      "confidence": "high",
      "summary": "Background refresh and advertising work run despite an empty result set.",
      "evidence": "Live page announces 30-second auto-refresh while HAR records ad script, fetch, and beacon activity before useful content.",
      "artifacts": [],
      "suggestedFix": "Pause polling when hidden, back off when empty, and defer/remove advertising background work until after user value.",
      "effort": "small"
    },
    {
      "id": "F27",
      "pathId": "home",
      "url": "https://visuys.space/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party bytes are disproportionate to the empty page’s user value.",
      "evidence": "Ten of 14 requests are third-party and transfer about 280KB, excluding the oversized first-party favicon.",
      "artifacts": [],
      "suggestedFix": "Set a third-party budget, remove unused Bootstrap/icon/font payload, and lazy-load monetisation only when needed.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Make the HTML shell and core content paint immediately",
      "priority": 1,
      "findingIds": [
        "F05",
        "F06",
        "F07",
        "F08"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Restore an actionable homepage and resilient match-data flow",
      "priority": 2,
      "findingIds": [
        "F05",
        "F06",
        "F20"
      ],
      "guidanceId": "forms",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Add security headers and reduce third-party tracking",
      "priority": 3,
      "findingIds": [
        "F16",
        "F17",
        "F18",
        "F24"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Label controls, restore focus, landmarks, headings, and target sizes",
      "priority": 4,
      "findingIds": [
        "F10",
        "F11",
        "F12"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Fix crawler access, sitemap, canonical, and 404 behavior",
      "priority": 5,
      "findingIds": [
        "F15",
        "F19",
        "F20"
      ],
      "guidanceId": "search-hidden-content",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Localise and timezone-normalise schedule dates",
      "priority": 6,
      "findingIds": [
        "F21",
        "F22",
        "F23"
      ],
      "guidanceId": "translator",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Cut favicon, font, framework, ad, and polling waste",
      "priority": 7,
      "findingIds": [
        "F09",
        "F25",
        "F26",
        "F27"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Honor color and motion preferences",
      "priority": 8,
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 1800,
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-20T15-42-11-305Z"
}
