{
  "url": "https://testbook.com",
  "auditedAt": "2026-07-22T12:50:22.841Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage complete across six representative public templates. Checkout after purchase, authenticated test execution, and account cancellation were not covered because they require credentials/payment.",
  "page": {
    "appType": "hybrid",
    "framework": "Angular SSR on core site; WordPress blog",
    "notes": "Large public exam-preparation and subscription service. The remote target is unrelated to the repo playground config, so that scoped config was not applied."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "Lighthouse",
    "HAR",
    "trace",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "discoverability",
    "heap-summary"
  ],
  "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/blog-discoverability-crawler.png",
      "caption": "blog discoverability crawler png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/blog-discoverability-rendered.png",
      "caption": "blog discoverability rendered png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/blog-discoverability.json",
      "caption": "blog discoverability json",
      "findingIds": [
        "F024",
        "F030"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/blog-mobile-layout.json",
      "caption": "blog mobile layout json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/blog.png",
      "caption": "blog png",
      "findingIds": [
        "F030"
      ]
    },
    {
      "type": "other",
      "path": "evidence/discovery.json",
      "caption": "discovery json",
      "findingIds": [
        "F023",
        "F024"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/exam-detail-discoverability-crawler.png",
      "caption": "exam detail discoverability crawler png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/exam-detail-discoverability-rendered.png",
      "caption": "exam detail discoverability rendered png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/exam-detail-discoverability.json",
      "caption": "exam detail discoverability json",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/exam-detail-mobile-layout.json",
      "caption": "exam detail mobile layout json",
      "findingIds": [
        "F014"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/exam-detail.png",
      "caption": "exam detail png",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "heap baseline heapsnapshot",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "heap post heapsnapshot",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-axe.json",
      "caption": "home axe json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "home cookies json",
      "findingIds": [
        "F025",
        "F028"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark png",
      "findingIds": [
        "F001"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop png",
      "findingIds": [
        "F004",
        "F005",
        "F006",
        "F031"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom json",
      "findingIds": [
        "F007",
        "F029"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "home headers json",
      "findingIds": [
        "F025",
        "F028"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images json",
      "findingIds": [
        "F014",
        "F018",
        "F022",
        "F034"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/home-lighthouse.json",
      "caption": "home lighthouse json",
      "findingIds": [
        "F003",
        "F013",
        "F017",
        "F018",
        "F019",
        "F020",
        "F022",
        "F023"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-metadata-delivery.json",
      "caption": "home metadata delivery json",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout json",
      "findingIds": [
        "F014"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile png",
      "findingIds": [
        "F006",
        "F008"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-motion.json",
      "caption": "home motion json",
      "findingIds": [
        "F002"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-platform-probe.json",
      "caption": "home platform probe json",
      "findingIds": [
        "F001",
        "F002",
        "F003",
        "F004",
        "F005",
        "F010",
        "F011",
        "F020",
        "F021",
        "F022",
        "F031"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "home recon json",
      "findingIds": [
        "F023",
        "F024",
        "F029"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "home secrets json",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary json",
      "findingIds": [
        "F016",
        "F017",
        "F026",
        "F034",
        "F035",
        "F036"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary json",
      "findingIds": [
        "F013",
        "F015",
        "F035"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace json",
      "findingIds": [
        "F015"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "home trackers json",
      "findingIds": [
        "F026",
        "F035"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home har",
      "findingIds": [
        "F016",
        "F026",
        "F036"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/pass-mobile-layout.json",
      "caption": "pass mobile layout json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/pass-probe.json",
      "caption": "pass probe json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/pass.png",
      "caption": "pass png",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/signup-dom.json",
      "caption": "signup dom json",
      "findingIds": [
        "F007",
        "F033"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/signup-invalid.png",
      "caption": "signup invalid png",
      "findingIds": [
        "F012",
        "F032"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/signup-mobile.png",
      "caption": "signup mobile png",
      "findingIds": [
        "F008",
        "F027"
      ]
    },
    {
      "type": "other",
      "path": "evidence/signup-probe.json",
      "caption": "signup probe json",
      "findingIds": [
        "F027",
        "F033"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/test-series-mobile-layout.json",
      "caption": "test series mobile layout json",
      "findingIds": [
        "F009",
        "F010",
        "F021"
      ]
    },
    {
      "type": "other",
      "path": "evidence/test-series-probe.json",
      "caption": "test series probe json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/test-series.png",
      "caption": "test series png",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "Emulated prefers-color-scheme: dark and compared screenshot/computed CSS.",
      "evidence": "The dark-condition screenshot is visually identical to light; computed color-scheme is normal and CSS probe found no dark preference rule.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F001"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Emulated prefers-reduced-motion: reduce and inspected document animations.",
      "evidence": "Three animations remained running under reduce (durations 1000, 1000, and 2500 ms), and no reduced-motion CSS rule was found.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-motion.json",
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F002"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected contrast preference CSS and Lighthouse contrast audit.",
      "evidence": "No prefers-contrast or forced-colors styling was found; Lighthouse found 31 color-contrast failures.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F003"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected CSS and representative route/state changes.",
      "evidence": "No View Transition CSS/API use was found across the Angular homepage and representative navigation surfaces; state changes are abrupt.",
      "pathIds": [
        "home",
        "exam-detail",
        "test-series"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F004"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected CSS for scroll timelines and observed scrolling during layout and heap interaction captures.",
      "evidence": "No scroll-linked storytelling/parallax behavior or JavaScript-driven scroll animation was observed, so the page avoids the main-thread anti-pattern.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "medium",
      "method": "Exercised mobile scrolling and inspected representative controls.",
      "evidence": "Native scrolling and ordinary tap controls worked without custom gesture interception or scroll fighting on audited mobile paths.",
      "pathIds": [
        "home",
        "pass"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/pass-mobile-layout.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed desktop/mobile screenshots and long-page scrolling.",
      "evidence": "Navigation adapts between desktop header and mobile menu while long content remains scrollable; no blocking fixed chrome was observed.",
      "pathIds": [
        "home",
        "exam-detail"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected overlay/menu CSS and edge behavior.",
      "evidence": "The site has dropdown/menu and floating notification UI, but no CSS anchor positioning or fallback-position rules were found.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F005"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed hierarchy and navigation cues on homepage, exam detail, listing, and Pass page.",
      "evidence": "Headings, selected Pass navigation, direct CTA labels, and content grouping provide visible orientation on representative routes.",
      "pathIds": [
        "home",
        "pass",
        "exam-detail"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/pass.png",
        "evidence/exam-detail.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Captured first viewport on desktop and mobile before interaction.",
      "evidence": "A fixed notification-permission banner occupies the bottom of both first viewports while promotional chrome and WhatsApp also compete with core content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F006"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected DOM and computed styles for overlays.",
      "evidence": "The persistent notification UI is custom chrome rather than a native dialog/popover flow; the DOM reports a role=dialog surface and no popover primitive.",
      "pathIds": [
        "home",
        "signup"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/signup-dom.json"
      ],
      "findingIds": [
        "F007"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Compared content/chrome balance in first-viewport screenshots.",
      "evidence": "On mobile, the trial banner, fixed notification prompt, WhatsApp control, header, and app badges crowd the primary preparation content.",
      "pathIds": [
        "home",
        "signup"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/signup-mobile.png"
      ],
      "findingIds": [
        "F008"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "medium",
      "method": "Ran layout primitive at 360x800 across five templates.",
      "evidence": "The online test-series listing has 8 px horizontal overflow (scrollWidth 368 vs clientWidth 360); other sampled templates did not overflow.",
      "pathIds": [
        "test-series"
      ],
      "artifacts": [
        "evidence/test-series-mobile-layout.json"
      ],
      "findingIds": [
        "F009"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected CSS and compared reused components across desktop/mobile.",
      "evidence": "The CSS probe found no container queries; reusable cards/navigation rely on viewport-wide treatment and the listing overflows at 360 px.",
      "pathIds": [
        "home",
        "test-series"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/test-series-mobile-layout.json"
      ],
      "findingIds": [
        "F010"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Focused visible controls, read outlines and measured target boxes.",
      "evidence": "Several focused links report outline:none and many exam-category controls are only 34 px tall, below a comfortable touch target.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F011"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Reviewed first viewports and heading/CTA labels across core paths.",
      "evidence": "The homepage states “Complete Exam Preparation” with Get Started For Free; listing, exam detail, signup, and Pass routes expose clear next actions.",
      "pathIds": [
        "home",
        "exam-detail",
        "test-series",
        "signup",
        "pass"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/signup-mobile.png",
        "evidence/pass.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "medium",
      "method": "Walked homepage to signup and reviewed Pass purchase entry.",
      "evidence": "Get Started reaches a focused mobile-number signup step, while Pass exposes plan, total, renewal note, and purchase CTA without an avoidable detour.",
      "pathIds": [
        "signup",
        "pass"
      ],
      "artifacts": [
        "evidence/signup-mobile.png",
        "evidence/pass.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Submitted the signup step with the required mobile-number input blank and captured the resulting state.",
      "evidence": "Blank submission left the page visually unchanged with no inline error, recovery instruction, or announced required-field state.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-invalid.png"
      ],
      "findingIds": [
        "F012"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse, trace, layout, HAR, images, and DOM confirmation as applicable.",
      "evidence": "Lighthouse measured LCP 7.9 s, TBT 760 ms, and CLS 0.132; the trace measured LCP 7.13 s and 864.91 ms total blocking time.",
      "pathIds": [
        "home",
        "exam-detail"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F013"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse, trace, layout, HAR, images, and DOM confirmation as applicable.",
      "evidence": "Mobile layout observation measured CLS 0.183 on home and 0.169 on the exam detail; 54 of 98 images lack dimensions.",
      "pathIds": [
        "home",
        "exam-detail"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/exam-detail-mobile-layout.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F014"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse, trace, layout, HAR, images, and DOM confirmation as applicable.",
      "evidence": "Trace recorded six long tasks, a 667.58 ms longest task, and 864.91 ms total blocking time.",
      "pathIds": [
        "home",
        "exam-detail"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "F015"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse, trace, layout, HAR, images, and DOM confirmation as applicable.",
      "evidence": "HAR recorded 118 requests and 2.86 MB transferred; 50 scripts carried 2.12 MB and several parser-inserted high-priority scripts are candidates in the critical path.",
      "pathIds": [
        "home",
        "exam-detail"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F016"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse, trace, layout, HAR, images, and DOM confirmation as applicable.",
      "evidence": "Lighthouse estimated 611 KiB unused JavaScript and 53 KiB unused CSS; multiple GTM/gtag and Facebook bundles dominate transfer.",
      "pathIds": [
        "home",
        "exam-detail"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F017"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse accessibility audits and image inspection.",
      "evidence": "Lighthouse found seven unnamed links and an image-alt failure; image inspection found four images without alt text.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F018"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse color-contrast audit.",
      "evidence": "Lighthouse reported 31 failing contrast nodes on the homepage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F019"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse heading audit and active focus style probe.",
      "evidence": "Lighthouse found three heading-order failures; the document has two h1 elements and no main landmark, while multiple focused controls suppress outlines.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-platform-probe.json"
      ],
      "findingIds": [
        "F020"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "medium",
      "method": "Visually reviewed typography across desktop and mobile screenshots.",
      "evidence": "Core headings and body text reflow without clipping on sampled home, signup, Pass, blog, and detail views.",
      "pathIds": [
        "home",
        "signup",
        "pass",
        "blog"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/signup-mobile.png",
        "evidence/pass.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Checked viewport/reflow via layout and measured interactive targets.",
      "evidence": "Viewport scaling is allowed, but many controls are 34 px tall and the test-series template overflows by 8 px at 360 px.",
      "pathIds": [
        "home",
        "test-series"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/test-series-mobile-layout.json"
      ],
      "findingIds": [
        "F021"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Ran Lighthouse errors-in-console audit.",
      "evidence": "Lighthouse reported no console errors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected doctype/charset and ran Lighthouse plus image audit.",
      "evidence": "Doctype and UTF-8 are valid, but Lighthouse found four aspect-ratio failures and image inspection found 54 images without explicit dimensions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-lighthouse.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F022"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed Lighthouse best-practices and load behavior for prompts/errors.",
      "evidence": "No console exception or browser permission prompt occurred on load; notification consent is rendered as site UI with a defer option.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-desktop.png"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Inspected rendered/raw metadata and Lighthouse SEO.",
      "evidence": "Homepage and sampled content expose descriptive titles and meta descriptions; Lighthouse passed both audits.",
      "pathIds": [
        "home",
        "exam-detail",
        "blog"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/home-lighthouse.json",
        "evidence/home-discoverability.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected anchors, viewport, robots, and Lighthouse SEO.",
      "evidence": "Viewport and robots are valid, but Lighthouse found 77 non-crawlable anchors; recon shows many javascript:void(0) links for categories and actions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-recon.json",
        "evidence/discovery.json"
      ],
      "findingIds": [
        "F023"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Fetched robots/sitemap and ran raw HTTP discoverability checks on representative templates.",
      "evidence": "Homepage/detail return 200 with canonical/sitemap signals, but the public blog index raw fetch returned HTTP 500 while still rendering content.",
      "pathIds": [
        "home",
        "blog"
      ],
      "artifacts": [
        "evidence/discovery.json",
        "evidence/blog-discoverability.json",
        "evidence/home-recon.json"
      ],
      "findingIds": [
        "F024"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected rendered DOM for JSON-LD and Open Graph metadata.",
      "evidence": "Homepage DOM contains application/ld+json and Open Graph title, description, URL, type, image, locale, and site metadata matching visible content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Ran headers and cookies primitives.",
      "evidence": "HTTPS is used, but CSP, HSTS, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy are absent; all 15 observed cookies were flagged insecure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F025"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Ran HAR and tracker enumeration.",
      "evidence": "Load contacted 22 third-party origins and five known trackers; 70 third-party requests transferred 1.33 MB, including Google, Facebook, DoubleClick, Bing, and WebEngage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F026"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected signup flow and authentication affordances.",
      "evidence": "Signup uses a mobile-number/OTP entry with no visible passkey/WebAuthn option; phishing-resistant authentication was not offered on the sampled auth path.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-mobile.png",
        "evidence/signup-probe.json"
      ],
      "findingIds": [
        "F027"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Ran security-header and cookie policy primitives.",
      "evidence": "Only X-Frame-Options was present; HSTS, CSP/frame-ancestors, Referrer-Policy, Permissions-Policy, and nosniff were absent, and many cookies use SameSite=None without Secure.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F028"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Compared raw HTML with rendered DOM and crawler screenshots.",
      "evidence": "Raw HTML preserves 98% of home and 100% of exam-detail content, including titles, h1, and descriptions; neither route is a JS shell.",
      "pathIds": [
        "home",
        "exam-detail"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/exam-detail-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "Exercised mobile layouts, scrolling, menus/controls, and representative routes.",
      "evidence": "Core content remained rendered and scrollable across sampled mobile routes without blank shells or clipped primary content.",
      "pathIds": [
        "home",
        "exam-detail",
        "pass"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/exam-detail-mobile-layout.json",
        "evidence/pass-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected manifest/service-worker affordances and adverse-network suitability.",
      "evidence": "No manifest link was present in recon and no offline fallback was evidenced for this app-like exam-preparation service.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F029"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Fetched public blog route outside browser rendering and compared crawler/browser state.",
      "evidence": "The blog index returns HTTP 500 while rendering a normal content page, providing a misleading success-like UI and broken status signal rather than intentional recovery.",
      "pathIds": [
        "blog"
      ],
      "artifacts": [
        "evidence/blog-discoverability.json",
        "evidence/blog.png"
      ],
      "findingIds": [
        "F030"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "medium",
      "method": "Inspected document language/direction and CSS logical-property use.",
      "evidence": "html lang=en is present, but no dir and no logical inline/block properties were detected despite the site exposing language switching and localized content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F031"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed localized navigation and commercial rendering.",
      "evidence": "The interface exposes language selection and renders Indian currency/number conventions consistently on the sampled Pass and home surfaces.",
      "pathIds": [
        "home",
        "pass"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/pass.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "medium",
      "method": "Reviewed sampled routes for time-zone-sensitive scheduling interactions.",
      "evidence": "No user-entered scheduling or cross-time-zone event flow was present in the audited public routes.",
      "reason": "No representative time-zone-sensitive interaction exists on the selected public templates."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed trial, notification, signup, and pricing surfaces for deceptive defaults.",
      "evidence": "Notification can be deferred, trial close is visible, Pass pricing and renewal are disclosed, and no preselected add-on was observed.",
      "pathIds": [
        "home",
        "pass"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/pass.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "issues",
      "confidence": "high",
      "method": "Submitted signup with an empty required input and captured the result.",
      "evidence": "The blank mobile-number submission produced no visible required-field feedback or actionable error.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-invalid.png"
      ],
      "findingIds": [
        "F032"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected signup input semantics and autocomplete.",
      "evidence": "The mobile-number step is not represented by a semantic form in the rendered DOM and its input exposes no autocomplete token, reducing autofill/input assistance.",
      "pathIds": [
        "signup"
      ],
      "artifacts": [
        "evidence/signup-dom.json",
        "evidence/signup-probe.json"
      ],
      "findingIds": [
        "F033"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed Pass pricing and signup entry.",
      "evidence": "Pass shows annual price, crossed-out reference price, total, 365-day validity, renewal text, and a specific purchase CTA before commitment.",
      "pathIds": [
        "pass"
      ],
      "artifacts": [
        "evidence/pass.png",
        "evidence/pass-probe.json"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Ran images primitive and HAR weight analysis.",
      "evidence": "Of 98 images, 64 use legacy formats, 16 are oversized, 15 lack responsive sources, and 54 lack dimensions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F034"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Ran trace, HAR, and tracker primitives over an idle load.",
      "evidence": "An idle homepage load executes 50 scripts, transfers 2.12 MB of script, and records 70 third-party requests plus 864.91 ms blocking time.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trackers.json"
      ],
      "findingIds": [
        "F035"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Measured third-party bytes and origin count in HAR.",
      "evidence": "Third parties account for 1.33 MB across 70 requests; duplicate Google tags and Facebook/WebEngage code consume substantial budget before user interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F036"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "medium",
      "method": "Reviewed public site intent and rendered/source affordances.",
      "evidence": "No declared agent-facing intent was available for this public exam-preparation audit.",
      "reason": "Agent-facing tools and on-device inference are emerging opportunities, not required for the audited user journeys."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "medium",
      "method": "Reviewed public site intent and rendered/source affordances.",
      "evidence": "No declared agent-facing intent was available for this public exam-preparation audit.",
      "reason": "Agent-facing tools and on-device inference are emerging opportunities, not required for the audited user journeys."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Compared baseline heap with a post snapshot after ten full-page down/up scroll cycles.",
      "evidence": "Node count grew 924,210 to 933,764 and self size 54.76 MB to 55.69 MB (about 1.7%); this bounded change does not evidence unbounded retained growth.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected heap summary totals against the large Angular/content page.",
      "evidence": "Post-interaction heap remained about 55.7 MB with 933,764 snapshot nodes, proportionate to the large rendered homepage and stable relative to baseline.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "low",
      "method": "Compared heap summary totals before/after repeated scrolling.",
      "evidence": "The small 1.7% total-size delta after ten cycles did not show a runaway population; constructor-level detached-node evidence was not exposed by this compact summary, so confidence is low.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F001",
        "F002",
        "F003"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F004"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F005"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F006",
        "F007",
        "F008"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F009",
        "F010",
        "F011"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F012"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F013",
        "F014",
        "F015",
        "F016",
        "F017"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F018",
        "F019",
        "F020",
        "F021"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F022"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F023",
        "F024"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F025",
        "F026",
        "F027",
        "F028"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F029",
        "F030"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F031"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F032",
        "F033"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F034",
        "F035",
        "F036"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "Agent-facing tools and on-device inference are emerging opportunities, not required for the audited user journeys."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and primary acquisition entry point; tested desktop, mobile, dark theme, reduced motion, crawlability, performance, privacy, accessibility, and memory.",
      "url": "https://testbook.com/",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus",
        "JavaScript disabled crawler"
      ],
      "result": "issues"
    },
    {
      "id": "exam-detail",
      "description": "SSC CGL exam detail, representing long-form exam/content templates and navigation into preparation.",
      "url": "https://testbook.com/ssc-cgl-exam",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "JavaScript disabled crawler"
      ],
      "result": "issues"
    },
    {
      "id": "test-series",
      "description": "Online test-series listing, representing browsable product/listing templates.",
      "url": "https://testbook.com/online-test-series",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "signup",
      "description": "Signup entry flow, representing the primary account conversion form; blank submission exercised.",
      "url": "https://testbook.com/login?tile=signup",
      "conditions": [
        "mobile 390x844",
        "blank submission"
      ],
      "result": "issues"
    },
    {
      "id": "pass",
      "description": "Testbook Pass pricing page, representing commercial offer and subscription disclosure.",
      "url": "https://testbook.com/pass",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "blog",
      "description": "Blog index, representing editorial content and WordPress template behavior.",
      "url": "https://testbook.com/blog/",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "JavaScript disabled crawler"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F002",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "respect-user-preferences",
      "severity": "high",
      "confidence": "high",
      "summary": "Honours prefers-reduced-motion: non-essential animations and auto-advance are reduced or removed when the user asks for less motion.",
      "evidence": "Three animations remained running under reduce (durations 1000, 1000, and 2500 ms), and no reduced-motion CSS rule was found.",
      "artifacts": [
        "evidence/home-motion.json",
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Add a reduce media query that removes non-essential motion and auto-advance.",
      "effort": "medium"
    },
    {
      "id": "F003",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "guidanceCategory": "respect-user-preferences",
      "severity": "high",
      "confidence": "high",
      "summary": "Honours prefers-contrast / forced-colors: controls, text and scrollbars remain visible under high-contrast preferences.",
      "evidence": "No prefers-contrast or forced-colors styling was found; Lighthouse found 31 color-contrast failures.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-lighthouse.json"
      ],
      "suggestedFix": "Add forced-colors and prefers-contrast treatments and fix measured contrast failures.",
      "effort": "medium"
    },
    {
      "id": "F006",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "maximize-content-reduce-noise",
      "severity": "high",
      "confidence": "high",
      "summary": "No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.",
      "evidence": "A fixed notification-permission banner occupies the bottom of both first viewports while promotional chrome and WhatsApp also compete with core content.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Defer notification promotion until user intent and remove fixed first-load obstruction.",
      "effort": "medium"
    },
    {
      "id": "F011",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "performance",
      "guidanceCategory": "adapt-to-the-form-factor",
      "severity": "high",
      "confidence": "high",
      "summary": "Touch targets are adequately sized and hover-only affordances have a non-hover fallback, and keyboard focus is visible, so the UI works for touch, pointer and keyboard alike.",
      "evidence": "Several focused links report outline:none and many exam-category controls are only 34 px tall, below a comfortable touch target.",
      "artifacts": [
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Provide visible :focus-visible styling and at least 44px comfortable touch targets.",
      "effort": "medium"
    },
    {
      "id": "F012",
      "pathId": "signup",
      "url": "https://testbook.com/login?tile=signup",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "accessible-error-announcement",
      "guidanceCategory": "support-core-task-success",
      "severity": "high",
      "confidence": "high",
      "summary": "Loading, empty, success, error, offline, and partial-completion states are visible and actionable; users can retry, undo, cancel, go back, or continue without losing context.",
      "evidence": "Blank submission left the page visually unchanged with no inline error, recovery instruction, or announced required-field state.",
      "artifacts": [
        "evidence/signup-invalid.png"
      ],
      "suggestedFix": "Show and announce a specific mobile-number required error after attempted submission.",
      "effort": "medium"
    },
    {
      "id": "F013",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "identify-inp-causes",
      "guidanceCategory": "be-fast-and-stable",
      "severity": "high",
      "confidence": "high",
      "summary": "Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.",
      "evidence": "Lighthouse measured LCP 7.9 s, TBT 760 ms, and CLS 0.132; the trace measured LCP 7.13 s and 864.91 ms total blocking time.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Prioritize the LCP element, reduce blocking scripts, and address layout shifts to reach good CWV.",
      "effort": "medium"
    },
    {
      "id": "F014",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "visually-stable-font-fallbacks",
      "guidanceCategory": "be-fast-and-stable",
      "severity": "high",
      "confidence": "high",
      "summary": "No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.",
      "evidence": "Mobile layout observation measured CLS 0.183 on home and 0.169 on the exam detail; 54 of 98 images lack dimensions.",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/exam-detail-mobile-layout.json",
        "evidence/home-images.json"
      ],
      "suggestedFix": "Reserve dimensions/aspect-ratio for images and stop late animated banner shifts.",
      "effort": "medium"
    },
    {
      "id": "F015",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "be-fast-and-stable",
      "severity": "high",
      "confidence": "high",
      "summary": "The main thread is not blocked by long tasks or heavy scripting; work is deferred, chunked, prioritised, or moved off-thread.",
      "evidence": "Trace recorded six long tasks, a 667.58 ms longest task, and 864.91 ms total blocking time.",
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "suggestedFix": "Defer and split analytics/application work; schedule non-critical tasks after interaction/idle.",
      "effort": "medium"
    },
    {
      "id": "F016",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "be-fast-and-stable",
      "severity": "high",
      "confidence": "high",
      "summary": "Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.",
      "evidence": "HAR recorded 118 requests and 2.86 MB transferred; 50 scripts carried 2.12 MB and several parser-inserted high-priority scripts are candidates in the critical path.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Shorten the critical chain, defer non-critical scripts, and apply effective caching/preload priorities.",
      "effort": "medium"
    },
    {
      "id": "F017",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "be-fast-and-stable",
      "severity": "high",
      "confidence": "high",
      "summary": "The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.",
      "evidence": "Lighthouse estimated 611 KiB unused JavaScript and 53 KiB unused CSS; multiple GTM/gtag and Facebook bundles dominate transfer.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Remove duplicate tag containers and ship route-level code/CSS only when needed.",
      "effort": "medium"
    },
    {
      "id": "F018",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "be-inclusive",
      "severity": "high",
      "confidence": "high",
      "summary": "Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.",
      "evidence": "Lighthouse found seven unnamed links and an image-alt failure; image inspection found four images without alt text.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-images.json"
      ],
      "suggestedFix": "Name every link/control and add meaningful alt text or empty alt for decoration.",
      "effort": "medium"
    },
    {
      "id": "F019",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "performance",
      "guidanceCategory": "be-inclusive",
      "severity": "high",
      "confidence": "high",
      "summary": "Text and essential UI meet WCAG colour-contrast minimums against their background.",
      "evidence": "Lighthouse reported 31 failing contrast nodes on the homepage.",
      "artifacts": [
        "evidence/home-lighthouse.json"
      ],
      "suggestedFix": "Adjust text and control colors to meet WCAG contrast minimums.",
      "effort": "medium"
    },
    {
      "id": "F020",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "move-dom-element-without-losing-state",
      "guidanceCategory": "be-inclusive",
      "severity": "high",
      "confidence": "high",
      "summary": "Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.",
      "evidence": "Lighthouse found three heading-order failures; the document has two h1 elements and no main landmark, while multiple focused controls suppress outlines.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Use one page h1, add main/landmarks, repair heading order, and preserve visible focus.",
      "effort": "medium"
    },
    {
      "id": "F021",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "accessibility",
      "guidanceCategory": "be-inclusive",
      "severity": "high",
      "confidence": "high",
      "summary": "The experience remains usable when zoomed or reflowed, touch targets are large enough, media has captions or equivalents where needed, and the viewport does not prevent user scaling.",
      "evidence": "Viewport scaling is allowed, but many controls are 34 px tall and the test-series template overflows by 8 px at 360 px.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/test-series-mobile-layout.json"
      ],
      "suggestedFix": "Fix listing reflow and increase undersized targets without disabling zoom.",
      "effort": "medium"
    },
    {
      "id": "F023",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "performance",
      "guidanceCategory": "be-discoverable",
      "severity": "high",
      "confidence": "high",
      "summary": "Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.",
      "evidence": "Viewport and robots are valid, but Lighthouse found 77 non-crawlable anchors; recon shows many javascript:void(0) links for categories and actions.",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-recon.json",
        "evidence/discovery.json"
      ],
      "suggestedFix": "Replace javascript:void(0) navigational anchors with real URLs or semantic buttons.",
      "effort": "medium"
    },
    {
      "id": "F024",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "performance",
      "guidanceCategory": "be-discoverable",
      "severity": "high",
      "confidence": "high",
      "summary": "Public pages expose the indexing signals search engines need: successful HTTP status, canonical URL when appropriate, hreflang for localized variants, robots/sitemap consistency, and no accidental noindex/noarchive policy.",
      "evidence": "Homepage/detail return 200 with canonical/sitemap signals, but the public blog index raw fetch returned HTTP 500 while still rendering content.",
      "artifacts": [
        "evidence/discovery.json",
        "evidence/blog-discoverability.json",
        "evidence/home-recon.json"
      ],
      "suggestedFix": "Return HTTP 200 for the healthy blog index, or an intentional error page/status when unhealthy.",
      "effort": "medium"
    },
    {
      "id": "F025",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "be-private-and-secure",
      "severity": "high",
      "confidence": "high",
      "summary": "Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.",
      "evidence": "HTTPS is used, but CSP, HSTS, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy are absent; all 15 observed cookies were flagged insecure.",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "suggestedFix": "Add CSP, HSTS, nosniff, Referrer-Policy, Permissions-Policy, and secure cookie attributes.",
      "effort": "medium"
    },
    {
      "id": "F026",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "be-private-and-secure",
      "severity": "high",
      "confidence": "high",
      "summary": "No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.",
      "evidence": "Load contacted 22 third-party origins and five known trackers; 70 third-party requests transferred 1.33 MB, including Google, Facebook, DoubleClick, Bing, and WebEngage.",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Audit consent and remove/sequence duplicate or low-value trackers after explicit need.",
      "effort": "medium"
    },
    {
      "id": "F028",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "be-private-and-secure",
      "severity": "high",
      "confidence": "high",
      "summary": "Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.",
      "evidence": "Only X-Frame-Options was present; HSTS, CSP/frame-ancestors, Referrer-Policy, Permissions-Policy, and nosniff were absent, and many cookies use SameSite=None without Secure.",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "suggestedFix": "Deploy browser defenses in headers and correct SameSite/Secure cookie posture.",
      "effort": "medium"
    },
    {
      "id": "F030",
      "pathId": "blog",
      "url": "https://testbook.com/blog/",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "be-resilient",
      "severity": "high",
      "confidence": "high",
      "summary": "HTTP errors, network failures, timeouts and stale data states are handled intentionally: users see useful recovery options rather than blank screens, infinite spinners, broken shells, or misleading success states.",
      "evidence": "The blog index returns HTTP 500 while rendering a normal content page, providing a misleading success-like UI and broken status signal rather than intentional recovery.",
      "artifacts": [
        "evidence/blog-discoverability.json",
        "evidence/blog.png"
      ],
      "suggestedFix": "Make server status and rendered recovery state agree, with retry/help for failures.",
      "effort": "medium"
    },
    {
      "id": "F032",
      "pathId": "signup",
      "url": "https://testbook.com/login?tile=signup",
      "principleId": "be-trustworthy",
      "principleCheckId": "humane-error-handling",
      "guidanceId": "forms",
      "guidanceCategory": "be-trustworthy",
      "severity": "high",
      "confidence": "high",
      "summary": "Forms prevent and recover from mistakes humanely: validate after interaction (not prematurely), give clear required-field feedback, announce errors accessibly, and signal invalid fields visibly rather than blaming the user.",
      "evidence": "The blank mobile-number submission produced no visible required-field feedback or actionable error.",
      "artifacts": [
        "evidence/signup-invalid.png"
      ],
      "suggestedFix": "Validate after interaction and expose inline plus live-region feedback.",
      "effort": "medium"
    },
    {
      "id": "F034",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "be-sustainable",
      "severity": "high",
      "confidence": "high",
      "summary": "Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.",
      "evidence": "Of 98 images, 64 use legacy formats, 16 are oversized, 15 lack responsive sources, and 54 lack dimensions.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Serve responsive AVIF/WebP/SVG assets at display-appropriate sizes with dimensions.",
      "effort": "medium"
    },
    {
      "id": "F035",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "be-sustainable",
      "severity": "high",
      "confidence": "high",
      "summary": "Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.",
      "evidence": "An idle homepage load executes 50 scripts, transfers 2.12 MB of script, and records 70 third-party requests plus 864.91 ms blocking time.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trackers.json"
      ],
      "suggestedFix": "Deprioritize background analytics and remove redundant scripts/fetches.",
      "effort": "medium"
    },
    {
      "id": "F036",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "be-sustainable",
      "severity": "high",
      "confidence": "high",
      "summary": "Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.",
      "evidence": "Third parties account for 1.33 MB across 70 requests; duplicate Google tags and Facebook/WebEngage code consume substantial budget before user interaction.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Set and enforce a third-party byte/request budget and load optional vendors after consent.",
      "effort": "medium"
    },
    {
      "id": "F001",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "respect-user-preferences",
      "severity": "medium",
      "confidence": "high",
      "summary": "Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.",
      "evidence": "The dark-condition screenshot is visually identical to light; computed color-scheme is normal and CSS probe found no dark preference rule.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-platform-probe.json"
      ],
      "suggestedFix": "Declare color-scheme: light dark and theme surfaces with prefers-color-scheme or light-dark().",
      "effort": "small"
    },
    {
      "id": "F007",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "maximize-content-reduce-noise",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.",
      "evidence": "The persistent notification UI is custom chrome rather than a native dialog/popover flow; the DOM reports a role=dialog surface and no popover primitive.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/signup-dom.json"
      ],
      "suggestedFix": "Use dialog/popover semantics with declarative light-dismiss and focus management.",
      "effort": "small"
    },
    {
      "id": "F008",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "guidanceId": "complex-shapes",
      "guidanceCategory": "maximize-content-reduce-noise",
      "severity": "medium",
      "confidence": "high",
      "summary": "Minimise non-content chrome and borders so the content is the focus, not the application frame; expressive/decorative visuals serve the content rather than crowd it.",
      "evidence": "On mobile, the trial banner, fixed notification prompt, WhatsApp control, header, and app badges crowd the primary preparation content.",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/signup-mobile.png"
      ],
      "suggestedFix": "Consolidate promotional chrome and reserve the first viewport for the user’s task.",
      "effort": "small"
    },
    {
      "id": "F009",
      "pathId": "test-series",
      "url": "https://testbook.com/online-test-series",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "adapt-to-the-form-factor",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Layout adapts to narrow viewports with no horizontal overflow and no fixed pixel widths forcing a desktop layout on mobile; viewport meta present; fluid scaling and intrinsic sizing rather than brittle breakpoints.",
      "evidence": "The online test-series listing has 8 px horizontal overflow (scrollWidth 368 vs clientWidth 360); other sampled templates did not overflow.",
      "artifacts": [
        "evidence/test-series-mobile-layout.json"
      ],
      "suggestedFix": "Remove the listing’s fixed-width overflow and use intrinsic fluid sizing.",
      "effort": "small"
    },
    {
      "id": "F022",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "css",
      "guidanceCategory": "follow-best-practices",
      "severity": "medium",
      "confidence": "high",
      "summary": "Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)",
      "evidence": "Doctype and UTF-8 are valid, but Lighthouse found four aspect-ratio failures and image inspection found 54 images without explicit dimensions.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-lighthouse.json",
        "evidence/home-images.json"
      ],
      "suggestedFix": "Correct image aspect ratios and supply intrinsic width/height.",
      "effort": "small"
    },
    {
      "id": "F027",
      "pathId": "signup",
      "url": "https://testbook.com/login?tile=signup",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "be-private-and-secure",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Permission prompts are requested in context (not on load), and authentication uses modern, phishing-resistant methods (passkeys / WebAuthn) where relevant rather than passwords alone.",
      "evidence": "Signup uses a mobile-number/OTP entry with no visible passkey/WebAuthn option; phishing-resistant authentication was not offered on the sampled auth path.",
      "artifacts": [
        "evidence/signup-mobile.png",
        "evidence/signup-probe.json"
      ],
      "suggestedFix": "Offer passkeys/WebAuthn alongside the OTP path and keep prompts user-initiated.",
      "effort": "small"
    },
    {
      "id": "F029",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "performance",
      "guidanceCategory": "be-resilient",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Where the site is an app, it is installable (web app manifest) and offers an offline fallback and works on flaky networks. (Contextual: a brochure or intrinsically-online site may reasonably not need this.)",
      "evidence": "No manifest link was present in recon and no offline fallback was evidenced for this app-like exam-preparation service.",
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/home-dom.json"
      ],
      "suggestedFix": "Add a manifest and service-worker offline fallback for core preparation content.",
      "effort": "small"
    },
    {
      "id": "F031",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "be-internationalised",
      "severity": "medium",
      "confidence": "medium",
      "summary": "Correct lang and dir attributes, logical CSS properties (inline/block) rather than physical left/right, and translation-ready markup so the layout and reading order survive other languages and writing modes.",
      "evidence": "html lang=en is present, but no dir and no logical inline/block properties were detected despite the site exposing language switching and localized content.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Set direction deliberately and migrate layout spacing/positioning to logical properties.",
      "effort": "small"
    },
    {
      "id": "F033",
      "pathId": "signup",
      "url": "https://testbook.com/login?tile=signup",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-address-form",
      "guidanceCategory": "be-trustworthy",
      "severity": "medium",
      "confidence": "high",
      "summary": "Input is assisted, not obstructed: correct autocomplete tokens so address, payment, sign-in and sign-up fields autofill, and inputs are highlighted/sized to help the user rather than trip them up.",
      "evidence": "The mobile-number step is not represented by a semantic form in the rendered DOM and its input exposes no autocomplete token, reducing autofill/input assistance.",
      "artifacts": [
        "evidence/signup-dom.json",
        "evidence/signup-probe.json"
      ],
      "suggestedFix": "Use a semantic form, tel input, and autocomplete=tel.",
      "effort": "small"
    },
    {
      "id": "F004",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "implement-natural-interactions",
      "severity": "low",
      "confidence": "medium",
      "summary": "State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.",
      "evidence": "No View Transition CSS/API use was found across the Angular homepage and representative navigation surfaces; state changes are abrupt.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Progressively enhance meaningful route/state changes with View Transitions and a no-motion fallback.",
      "effort": "small"
    },
    {
      "id": "F005",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "anchored-positioning",
      "guidanceId": "anchor-positioning-tab-underline",
      "guidanceCategory": "provide-guided-navigation",
      "severity": "low",
      "confidence": "medium",
      "summary": "Tooltips, popovers and menus use CSS anchor positioning (with fallback positions) so they stay attached and reposition correctly rather than being manually positioned.",
      "evidence": "The site has dropdown/menu and floating notification UI, but no CSS anchor positioning or fallback-position rules were found.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Use CSS anchor positioning with position-try fallbacks for attached menus and overlays.",
      "effort": "small"
    },
    {
      "id": "F010",
      "pathId": "home",
      "url": "https://testbook.com/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "adapt-to-the-form-factor",
      "severity": "low",
      "confidence": "medium",
      "summary": "Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.",
      "evidence": "The CSS probe found no container queries; reusable cards/navigation rely on viewport-wide treatment and the listing overflows at 360 px.",
      "artifacts": [
        "evidence/home-platform-probe.json",
        "evidence/test-series-mobile-layout.json"
      ],
      "suggestedFix": "Make reused cards and navigation container-responsive rather than viewport-only.",
      "effort": "small"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Add a reduce media query that removes non-essential motion and auto-advance.",
      "priority": 1,
      "findingIds": [
        "F002"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Add forced-colors and prefers-contrast treatments and fix measured contrast failures.",
      "priority": 2,
      "findingIds": [
        "F003"
      ],
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Defer notification promotion until user intent and remove fixed first-load obstruction.",
      "priority": 3,
      "findingIds": [
        "F006"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Provide visible :focus-visible styling and at least 44px comfortable touch targets.",
      "priority": 4,
      "findingIds": [
        "F011"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Show and announce a specific mobile-number required error after attempted submission.",
      "priority": 5,
      "findingIds": [
        "F012"
      ],
      "guidanceId": "accessible-error-announcement",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Prioritize the LCP element, reduce blocking scripts, and address layout shifts to reach good CWV.",
      "priority": 6,
      "findingIds": [
        "F013"
      ],
      "guidanceId": "identify-inp-causes",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Reserve dimensions/aspect-ratio for images and stop late animated banner shifts.",
      "priority": 7,
      "findingIds": [
        "F014"
      ],
      "guidanceId": "visually-stable-font-fallbacks",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Defer and split analytics/application work; schedule non-critical tasks after interaction/idle.",
      "priority": 8,
      "findingIds": [
        "F015"
      ],
      "guidanceId": "break-up-long-tasks",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Shorten the critical chain, defer non-critical scripts, and apply effective caching/preload priorities.",
      "priority": 9,
      "findingIds": [
        "F016"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Remove duplicate tag containers and ship route-level code/CSS only when needed.",
      "priority": 10,
      "findingIds": [
        "F017"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Name every link/control and add meaningful alt text or empty alt for decoration.",
      "priority": 11,
      "findingIds": [
        "F018"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Adjust text and control colors to meet WCAG contrast minimums.",
      "priority": 12,
      "findingIds": [
        "F019"
      ],
      "guidanceId": "performance",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-22T12-50-22-841Z"
}
