{
  "url": "https://groww.in",
  "auditedAt": "2026-07-18T09:26:45.809Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Public, pre-auth representative templates audited. Account opening was inspected to the credential boundary; regulated KYC/trading after authentication was intentionally outside public-scope coverage.",
  "page": {
    "appType": "hybrid",
    "framework": "Next.js",
    "notes": "Server-rendered public content with client hydration, shared desktop-oriented global shell, manifest but no active service worker registration."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "har",
    "trace",
    "lighthouse",
    "heap-summary",
    "robots/sitemap fetch",
    "Modern Web Guidance search/retrieve"
  ],
  "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/404-mobile.png",
      "caption": "404 mobile",
      "condition": "narrow mobile viewport",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "other",
      "path": "evidence/404-probe.json",
      "caption": "404 probe",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/blog-discoverability-crawler.png",
      "caption": "blog discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/blog-discoverability-rendered.png",
      "caption": "blog discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/blog-discoverability.json",
      "caption": "blog discoverability",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/blog-layout.json",
      "caption": "blog layout",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/blog-mobile.png",
      "caption": "blog mobile",
      "condition": "narrow mobile viewport",
      "findingIds": [
        "F04",
        "F09"
      ]
    },
    {
      "type": "other",
      "path": "evidence/blog-probe.json",
      "caption": "blog probe",
      "findingIds": [
        "F17",
        "F22"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/calculator-heap-baseline.heapsnapshot",
      "caption": "calculator heap baseline",
      "findingIds": [
        "F35"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/calculator-heap-post.heapsnapshot",
      "caption": "calculator heap post",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/demat-discoverability-crawler.png",
      "caption": "demat discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/demat-discoverability-rendered.png",
      "caption": "demat discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/demat-discoverability.json",
      "caption": "demat discoverability",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/demat-layout.json",
      "caption": "demat layout",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/demat-mobile.png",
      "caption": "demat mobile",
      "condition": "narrow mobile viewport",
      "findingIds": [
        "F06",
        "F28",
        "F31"
      ]
    },
    {
      "type": "other",
      "path": "evidence/demat-overlay.json",
      "caption": "demat overlay",
      "findingIds": [
        "F06",
        "F07",
        "F15",
        "F28",
        "F29",
        "F30",
        "F31"
      ]
    },
    {
      "type": "other",
      "path": "evidence/demat-probe.json",
      "caption": "demat probe",
      "findingIds": [
        "F07",
        "F29"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "home cookies",
      "findingIds": [
        "F23"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": [
        "F01",
        "F20",
        "F27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-focus.json",
      "caption": "home focus",
      "findingIds": [
        "F10",
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-forced-colors.png",
      "caption": "home forced colors",
      "condition": "forced-colors: active",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "home headers",
      "findingIds": [
        "F23",
        "F25"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images",
      "findingIds": [
        "F15",
        "F20",
        "F32"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "home layout mobile",
      "condition": "narrow mobile viewport",
      "findingIds": [
        "F08",
        "F12",
        "F18"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/home-lighthouse.json",
      "caption": "home lighthouse",
      "findingIds": [
        "F11",
        "F12",
        "F13",
        "F14",
        "F15",
        "F16",
        "F18",
        "F19",
        "F21",
        "F22",
        "F23",
        "F25",
        "F33"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-manifest-agent.json",
      "caption": "home manifest agent",
      "findingIds": [
        "F26"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "condition": "narrow mobile viewport",
      "findingIds": [
        "F04",
        "F27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-motion.json",
      "caption": "home motion",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-platform.json",
      "caption": "home platform",
      "findingIds": [
        "F03",
        "F04",
        "F05",
        "F09"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "home recon",
      "findingIds": [
        "F27"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "home secrets",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F13",
        "F14",
        "F24",
        "F32",
        "F33",
        "F34"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F11",
        "F12",
        "F33"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "home trackers",
      "findingIds": [
        "F24",
        "F34"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/mutual-funds-discoverability-crawler.png",
      "caption": "mutual funds discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/mutual-funds-discoverability-rendered.png",
      "caption": "mutual funds discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/mutual-funds-discoverability.json",
      "caption": "mutual funds discoverability",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/mutual-funds-layout.json",
      "caption": "mutual funds layout",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/mutual-funds-mobile.png",
      "caption": "mutual funds mobile",
      "condition": "narrow mobile viewport",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/mutual-funds-probe.json",
      "caption": "mutual funds probe",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots-sitemap.txt",
      "caption": "robots sitemap",
      "findingIds": [
        "F22"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/sip-calculator-discoverability-crawler.png",
      "caption": "sip calculator discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/sip-calculator-discoverability-rendered.png",
      "caption": "sip calculator discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/sip-calculator-discoverability.json",
      "caption": "sip calculator discoverability",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/sip-calculator-layout.json",
      "caption": "sip calculator layout",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/sip-calculator-mobile.png",
      "caption": "sip calculator mobile",
      "condition": "narrow mobile viewport",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sip-calculator-probe.json",
      "caption": "sip calculator probe",
      "findingIds": [
        "F10",
        "F15",
        "F30"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/stock-detail-discoverability-crawler.png",
      "caption": "stock detail discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/stock-detail-discoverability-rendered.png",
      "caption": "stock detail discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/stock-detail-discoverability.json",
      "caption": "stock detail discoverability",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/stock-detail-layout.json",
      "caption": "stock detail layout",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/stock-detail-mobile.png",
      "caption": "stock detail mobile",
      "condition": "narrow mobile viewport",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/stock-detail-probe.json",
      "caption": "stock detail probe",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/stocks-discoverability-crawler.png",
      "caption": "stocks discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/stocks-discoverability-rendered.png",
      "caption": "stocks discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/stocks-discoverability.json",
      "caption": "stocks discoverability",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/stocks-layout.json",
      "caption": "stocks layout",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/stocks-mobile.png",
      "caption": "stocks mobile",
      "condition": "narrow mobile viewport",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/stocks-probe.json",
      "caption": "stocks probe",
      "findingIds": [
        "F10",
        "F17",
        "F18",
        "F22"
      ]
    }
  ],
  "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": "Screenshot under emulated prefers-color-scheme: dark and computed root theme inspection",
      "evidence": "The dark-condition screenshot remains white and the rendered root is data-theme=\"light\" with color-scheme:light.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-dom.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "getAnimations() under prefers-reduced-motion: reduce",
      "evidence": "The preference matched, but five animations remained, including four indefinitely running 30s–200s animations, and no reduced-motion CSS rule was found.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-motion.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Screenshot under forced-colors: active plus Lighthouse contrast inspection",
      "evidence": "Forced-colors rendered navigation, search, and ticker text visibly in system black/white colors; ordinary-mode contrast failures are recorded separately under sufficient-contrast.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-forced-colors.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "medium",
      "method": "Rendered CSS probe and route walkthrough",
      "evidence": "The browser supports View Transitions, but no view-transition CSS was present on any representative template and route changes use abrupt full swaps.",
      "pathIds": [
        "home",
        "stock-detail"
      ],
      "artifacts": [
        "evidence/home-platform.json",
        "evidence/stock-detail-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "medium",
      "method": "CSS feature probe and long-task/animation inspection",
      "evidence": "No scrollytelling, parallax, or scroll-linked reveal was observed on the representative pages, so no main-thread scroll-linked animation anti-pattern was found.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-platform.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No gesture-driven removal, pull-to-reveal, draggable carousel, or comparable physical gesture was present on the audited public templates.",
      "reason": "No gesture-driven removal, pull-to-reveal, draggable carousel, or comparable physical gesture was present on the audited public templates."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "medium",
      "method": "Mobile screenshots and CSS feature probe across long pages",
      "evidence": "Long pages retain a clipped desktop-style header and provide no progress or scroll-state adaptation; no scroll-state/container CSS was detected.",
      "pathIds": [
        "home",
        "blog"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/blog-mobile.png",
        "evidence/home-platform.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No open tooltip, popover, or edge-sensitive anchored menu was exposed in the representative public flows.",
      "reason": "No open tooltip, popover, or edge-sensitive anchored menu was exposed in the representative public flows."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "issues",
      "confidence": "medium",
      "method": "Route walkthrough and rendered CSS probe",
      "evidence": "Route changes and the 404-to-home path provide no directional transition or focus/attention cue; view-transition/highlight styles were absent.",
      "pathIds": [
        "home",
        "404"
      ],
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/home-platform.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Load screenshot and fixed-overlay DOM probe on account-opening route",
      "evidence": "The demat route opens with a viewport-covering signup overlay before interaction and no visible close action.",
      "pathIds": [
        "demat"
      ],
      "artifacts": [
        "evidence/demat-mobile.png",
        "evidence/demat-overlay.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "DOM semantics probe of the signup overlay",
      "evidence": "The covering signup modal is a fixed DIV (.rodal) with no dialog role; representative pages reported zero <dialog> and zero popover elements.",
      "pathIds": [
        "demat"
      ],
      "artifacts": [
        "evidence/demat-overlay.json",
        "evidence/demat-probe.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "medium",
      "method": "Desktop and mobile visual review",
      "evidence": "The home, stock detail, calculator, and blog templates use restrained borders and keep their primary content visually dominant once no overlay is present.",
      "pathIds": [
        "home",
        "stock-detail",
        "sip-calculator"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/stock-detail-mobile.png",
        "evidence/sip-calculator-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Layout primitive at 360x800/390x844 on seven templates",
      "evidence": "Every sampled template overflowed horizontally: home/stocks/mutual funds by about 6.7k px, stock detail by 442 px, calculator by 384 px, demat by 347 px, and blog by 682 px.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/stocks-layout.json",
        "evidence/stock-detail-layout.json",
        "evidence/sip-calculator-layout.json",
        "evidence/blog-layout.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "medium",
      "method": "Rendered stylesheet probe across seven templates",
      "evidence": "No @container rules were found, while shared header/ticker and cards visibly remain desktop-sized and clipped at mobile widths.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-platform.json",
        "evidence/blog-mobile.png"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Interactive-target and focus probes across templates",
      "evidence": "Each template exposes more than 400 visible targets below 24px in at least one dimension; sampled pre-rendered anchors did not accept focus or show an outline.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-focus.json",
        "evidence/stocks-probe.json",
        "evidence/sip-calculator-probe.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "First-viewport screenshots and heading/CTA inspection",
      "evidence": "Home, stocks, mutual funds, stock detail, calculator, and blog all state their purpose with a clear H1 and an obvious next action or content object.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/stock-detail-mobile.png",
        "evidence/sip-calculator-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "medium",
      "method": "Public pre-auth task walkthrough",
      "evidence": "The representative public flow, open SIP calculator, adjust investment/return/time inputs, and read updated totals, was available without a dead end; investment/account execution correctly requires authentication.",
      "pathIds": [
        "sip-calculator",
        "demat"
      ],
      "artifacts": [
        "evidence/sip-calculator-mobile.png",
        "evidence/calculator-heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Invalid-route walkthrough plus delayed-price state inspection",
      "evidence": "The stock detail explains delayed prices and offers LOGIN; an invalid route renders a clear 404 with a Go to Home Page recovery link.",
      "pathIds": [
        "stock-detail",
        "404"
      ],
      "artifacts": [
        "evidence/stock-detail-mobile.png",
        "evidence/404-mobile.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse plus DevTools trace",
      "evidence": "Mobile Lighthouse measured LCP 10.6s, TBT 7,020ms and performance 0.33; trace corroborated LCP 2.44s and 445ms TBT in a lighter desktop run.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Layout observer and Lighthouse CLS",
      "evidence": "Both the mobile layout observer and Lighthouse recorded CLS 0 on the home load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "DevTools trace, layout long-task observer, and Lighthouse",
      "evidence": "Trace recorded 9 long tasks (longest 232ms, TBT 445ms); mobile Lighthouse measured 7,020ms TBT.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-layout-mobile.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary confirmed against DOM and Lighthouse insights",
      "evidence": "Home loaded 360 requests and 4.14MB transferred, including 138 scripts; Lighthouse failed LCP discovery and network-dependency insights.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse code coverage and HAR weight analysis",
      "evidence": "Lighthouse estimated 776KiB unused JS and 16KiB unused CSS; analytics and app chunks dominate the request weight.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility plus DOM probes",
      "evidence": "Lighthouse found an accessible-name mismatch; calculator has three unlabeled inputs, the account overlay input has no label/ARIA name, and image audit found two missing alt attributes.",
      "pathIds": [
        "home",
        "sip-calculator",
        "demat"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/sip-calculator-probe.json",
        "evidence/demat-overlay.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse color-contrast audit",
      "evidence": "Ticker text measured 2.51:1, positive values 2.66:1, and the white-on-green Get started control 2.66:1, below WCAG AA.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Landmark and focus probes",
      "evidence": "Representative probes found no main/nav/header/footer landmarks, while sampled links had outline-style none and many empty accessible names, making focus orientation unreliable.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-focus.json",
        "evidence/stocks-probe.json",
        "evidence/blog-probe.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "medium",
      "method": "Visual review of content templates",
      "evidence": "Primary headings and body text on stock, calculator, and blog templates are comfortably sized and not clipped vertically.",
      "pathIds": [
        "stock-detail",
        "sip-calculator",
        "blog"
      ],
      "artifacts": [
        "evidence/stock-detail-mobile.png",
        "evidence/sip-calculator-mobile.png",
        "evidence/blog-mobile.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse viewport audit and mobile layout/target probes",
      "evidence": "Mobile Lighthouse found a second viewport declaration with maximum-scale=1/user-scalable=no; every template overflowed horizontally and hundreds of targets were under 24px.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-layout-mobile.json",
        "evidence/stocks-probe.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse Runtime/console collection",
      "evidence": "Console logged FedCM concurrency/network errors and multiple CSP-blocked scripts, images, and analytics requests.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "DOM, Lighthouse, and image audit",
      "evidence": "Doctype/charset are valid, but 4 images lack dimensions, 29 are oversized, 18 use legacy formats, and 2 lack alt text.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "medium",
      "method": "Lighthouse best-practices diagnostics",
      "evidence": "The page failed BFCache for three no-store reasons, emitted inspector issues, and large first-party bundles referenced missing source maps.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "DOM metadata probes on seven templates",
      "evidence": "Every representative page had a unique descriptive title and meta description.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/stock-detail-probe.json",
        "evidence/blog-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Anchor, viewport, robots, and Lighthouse probes",
      "evidence": "URLs and robots are crawlable, but 326–330 anchors per template have no descriptive text/accessible name, and mobile Lighthouse found zoom disabled by a second viewport meta.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/stocks-probe.json",
        "evidence/blog-probe.json",
        "evidence/robots-sitemap.txt",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Canonical/robots probes and robots/sitemap fetch",
      "evidence": "All sampled pages returned index signals and self-referential canonicals; robots.txt and sitemap.xml were reachable.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/robots-sitemap.txt",
        "evidence/home-recon.json",
        "evidence/stock-detail-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "JSON-LD and Open Graph probe across templates",
      "evidence": "All sampled entity/content templates exposed 2–4 JSON-LD blocks and seven Open Graph tags consistent with visible titles.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/stock-detail-probe.json",
        "evidence/blog-probe.json",
        "evidence/home-recon.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Headers, cookies, and Lighthouse security inspection",
      "evidence": "HTTPS/HSTS/nosniff/frame protection are present, but the desktop response lacked CSP, 7 of 8 cookies were flagged insecure, and the mobile CSP blocked several configured integrations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Tracker primitive and HAR summary",
      "evidence": "Load contacted 14 third-party origins including four known trackers; HAR captured 347 third-party-classified requests and 4.07MB transferred (including first-party asset subdomains classified by origin).",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "medium",
      "method": "Load inspection and authentication-overlay review",
      "evidence": "No browser permission prompt appeared on load; authentication offers Google FedCM and an email continuation rather than exposing a password-only form.",
      "pathIds": [
        "demat",
        "home"
      ],
      "artifacts": [
        "evidence/demat-overlay.json",
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Security-header primitive and Lighthouse CSP inspection",
      "evidence": "Referrer-Policy and Permissions-Policy are absent; desktop CSP was absent while mobile CSP produced blocked-resource violations, indicating inconsistent defensive policy deployment.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Discoverability raw-HTML/no-JS comparison on seven templates",
      "evidence": "Raw HTML retained 85–99% of rendered content on every template and none was a JS shell, so core public content remains reachable without JavaScript.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/stock-detail-discoverability.json",
        "evidence/demat-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "Representative route, overlay, and calculator walkthrough",
      "evidence": "Stock data, calculator, signup overlay, and blog all reached stable rendered states; no cut-off menu or broken asynchronous shell was observed beyond separately reported reflow.",
      "pathIds": [
        "stock-detail",
        "sip-calculator",
        "demat"
      ],
      "artifacts": [
        "evidence/stock-detail-mobile.png",
        "evidence/sip-calculator-mobile.png",
        "evidence/demat-mobile.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "medium",
      "method": "Manifest fetch and service-worker registration probe",
      "evidence": "A valid standalone manifest exists, but navigator.serviceWorker.getRegistrations() returned no registration, so the app has no demonstrated offline fallback.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-manifest-agent.json"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Invalid-route request and screenshot",
      "evidence": "An invalid URL renders an intentional, readable 404 state with a direct home recovery action instead of a blank shell.",
      "pathIds": [
        "404"
      ],
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/404-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "medium",
      "method": "DOM language/direction and representative-layout probes",
      "evidence": "Pages declare lang=en but no dir; the public site claims multilingual finance yet exposes no hreflang/language choice in sampled metadata, and severe fixed-width overflow gives no evidence that translated expansion or bidi layouts survive.",
      "pathIds": [
        "home",
        "stocks",
        "stock-detail",
        "mutual-funds",
        "sip-calculator",
        "demat",
        "blog"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png",
        "evidence/home-recon.json"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "medium",
      "method": "Rendered currency/number inspection",
      "evidence": "Calculator and stock templates consistently render Indian currency and lakh grouping (for example ₹30,00,000 and ₹335.60), appropriate for the stated Indian locale.",
      "pathIds": [
        "sip-calculator",
        "stock-detail"
      ],
      "artifacts": [
        "evidence/sip-calculator-mobile.png",
        "evidence/stock-detail-mobile.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No public audited template exposed a date/time scheduling or recurring-event workflow whose time-zone or DST behavior could apply.",
      "reason": "No public audited template exposed a date/time scheduling or recurring-event workflow whose time-zone or DST behavior could apply."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Account-opening load screenshot and overlay DOM probe",
      "evidence": "The demat route forces an undismissible full-screen signup DIV before users can inspect the page; there is no visible cancel/close affordance and consent copy is compressed into the continuation UI.",
      "pathIds": [
        "demat"
      ],
      "artifacts": [
        "evidence/demat-mobile.png",
        "evidence/demat-overlay.json"
      ],
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "issues",
      "confidence": "high",
      "method": "Signup and calculator form semantics inspection",
      "evidence": "The signup control is not a semantic form, its text input is unlabeled, and no accessible error-announcement surface or declarative validation semantics were present.",
      "pathIds": [
        "demat"
      ],
      "artifacts": [
        "evidence/demat-overlay.json",
        "evidence/demat-probe.json"
      ],
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Input autocomplete/label probe",
      "evidence": "The signup field has autocomplete=\"on\" instead of a purpose-specific email token and no label/ARIA name; three calculator inputs are also unlabeled.",
      "pathIds": [
        "demat",
        "sip-calculator"
      ],
      "artifacts": [
        "evidence/demat-overlay.json",
        "evidence/sip-calculator-probe.json"
      ],
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Pre-auth account-opening walkthrough",
      "evidence": "The account route immediately traps the page behind a modal-like signup layer with no visible cancellation, weakening reversibility before the user can review account details.",
      "pathIds": [
        "demat"
      ],
      "artifacts": [
        "evidence/demat-mobile.png",
        "evidence/demat-overlay.json"
      ],
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Image primitive and HAR inspection",
      "evidence": "29 of 31 images were over 2x displayed resolution, 18 used legacy formats, 7 lacked srcset, and 26 below-fold images were not lazy-loaded.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F32"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "HAR, trace, and Lighthouse coverage",
      "evidence": "The home load makes 360 requests with 138 scripts; Lighthouse estimated 776KiB unused JS and the trace recorded nine long tasks.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-lighthouse.json"
      ],
      "findingIds": [
        "F33"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Tracker and HAR budget inspection",
      "evidence": "Known ad/analytics trackers and WebEngage contribute hundreds of kilobytes; Google Tag Manager/gtag alone account for roughly 487KB transferred.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F34"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Runtime agent-capability probe and contextual applicability judgement",
      "evidence": "No agent-facing capability is claimed by the public site, and the runtime probe found no WebMCP registration; this emerging capability is contextual and therefore not penalised.",
      "reason": "No agent-facing capability is claimed by the public site, and the runtime probe found no WebMCP registration; this emerging capability is contextual and therefore not penalised."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Runtime built-in-AI probe and contextual applicability judgement",
      "evidence": "No summarisation or language-model experience is offered on the audited public templates, so on-device inference is not applicable.",
      "reason": "No summarisation or language-model experience is offered on the audited public templates, so on-device inference is not applicable."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Baseline and post-interaction heap snapshots around ten calculator range-update cycles",
      "evidence": "After ten representative calculator updates, node count fell from 833,097 to 831,736 and self size from 49,888,433 to 49,813,933 bytes; no retained growth was observed.",
      "pathIds": [
        "sip-calculator"
      ],
      "artifacts": [
        "evidence/calculator-heap-baseline.heapsnapshot",
        "evidence/calculator-heap-post.heapsnapshot"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "medium",
      "method": "Heap summary totals on the calculator template",
      "evidence": "A simple calculator retained about 833k heap nodes and 49.9MB self size at baseline, a large footprint for this surface even though it did not grow under repetition.",
      "pathIds": [
        "sip-calculator"
      ],
      "artifacts": [
        "evidence/calculator-heap-baseline.heapsnapshot"
      ],
      "findingIds": [
        "F35"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Before/after heap totals over repeated interaction",
      "evidence": "The repeated interaction ended with 1,361 fewer heap nodes and 74,500 fewer self-size bytes than baseline, providing no signal of accumulating detached DOM/listeners in this bounded test.",
      "pathIds": [
        "sip-calculator"
      ],
      "artifacts": [
        "evidence/calculator-heap-baseline.heapsnapshot",
        "evidence/calculator-heap-post.heapsnapshot"
      ]
    }
  ],
  "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",
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06",
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass",
      "findingIds": []
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13",
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16",
        "F17",
        "F18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F19",
        "F20",
        "F21"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F23",
        "F24",
        "F25"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F28",
        "F29",
        "F30",
        "F31"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F32",
        "F33",
        "F34"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No agent-facing capability is claimed by the public site, and the runtime probe found no WebMCP registration; this emerging capability is contextual and therefore not penalised. No summarisation or language-model experience is offered on the audited public templates, so on-device inference is not applicable.",
      "findingIds": []
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F35"
      ]
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and global shell; represents product discovery, navigation, preference, performance, privacy, and metadata behavior.",
      "url": "https://groww.in/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "forced-colors: active",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "stocks",
      "description": "Stocks landing/listing archetype; represents category discovery and shared long-form product marketing template.",
      "url": "https://groww.in/stocks",
      "conditions": [
        "viewport: 390x844",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "stock-detail",
      "description": "Individual security detail archetype with live/delayed data and chart.",
      "url": "https://groww.in/stocks/tata-motors-ltd",
      "conditions": [
        "viewport: 390x844",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "mutual-funds",
      "description": "Mutual-fund category archetype; checks a second investment-product template.",
      "url": "https://groww.in/mutual-funds",
      "conditions": [
        "viewport: 390x844",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "sip-calculator",
      "description": "Primary public interactive task; calculator inputs/results plus repeated-interaction memory test.",
      "url": "https://groww.in/calculators/sip-calculator",
      "conditions": [
        "viewport: 390x844",
        "10 repeated range-update cycles",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "demat",
      "description": "Account-opening/sign-up journey up to the credential boundary; tests modal, form, consent, and reversibility.",
      "url": "https://groww.in/open-demat-account",
      "conditions": [
        "viewport: 390x844",
        "initial load",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "blog",
      "description": "Editorial listing archetype; represents content discovery and article-card presentation.",
      "url": "https://groww.in/blog",
      "conditions": [
        "viewport: 390x844",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "404",
      "description": "Invalid-route recovery state; represents HTTP/navigation failure handling.",
      "url": "https://groww.in/this-route-does-not-exist-web-uplift",
      "conditions": [
        "viewport: 390x844"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "summary": "Dark mode ignores the user preference",
      "evidence": "The dark-condition screenshot remains white and the rendered root is data-theme=\"light\" with color-scheme:light.",
      "suggestedFix": "Add an early color-scheme meta, set :root { color-scheme: light dark }, and drive semantic color tokens with prefers-color-scheme/light-dark().",
      "guidanceId": "dark-mode",
      "effort": "small",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-dom.json"
      ]
    },
    {
      "id": "F02",
      "severity": "high",
      "summary": "Reduced-motion users still receive indefinite motion",
      "evidence": "The preference matched, but five animations remained, including four indefinitely running 30s–200s animations, and no reduced-motion CSS rule was found.",
      "suggestedFix": "Wrap non-essential marquee/hero animations in no-preference and stop auto-running motion under reduce.",
      "guidanceId": "accessibility",
      "effort": "small",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-motion.json"
      ]
    },
    {
      "id": "F03",
      "severity": "low",
      "summary": "Route changes are abrupt despite View Transition support",
      "evidence": "The browser supports View Transitions, but no view-transition CSS was present on any representative template and route changes use abrupt full swaps.",
      "suggestedFix": "Progressively enhance same-document navigation with document.startViewTransition and add cross-document @view-transition where compatible.",
      "guidanceId": "same-document-transitions",
      "effort": "medium",
      "confidence": "medium",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-platform.json",
        "evidence/stock-detail-probe.json"
      ]
    },
    {
      "id": "F04",
      "severity": "medium",
      "summary": "Long-page navigation chrome does not adapt on mobile",
      "evidence": "Long pages retain a clipped desktop-style header and provide no progress or scroll-state adaptation; no scroll-state/container CSS was detected.",
      "suggestedFix": "Make header/ticker responsive and use CSS scroll-state/container queries for compact scrolled chrome with a fallback.",
      "guidanceId": "shrinking-header-on-scroll",
      "effort": "medium",
      "confidence": "medium",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/blog-mobile.png",
        "evidence/home-platform.json"
      ]
    },
    {
      "id": "F05",
      "severity": "low",
      "summary": "Navigation does not cue moved focus or direction",
      "evidence": "Route changes and the 404-to-home path provide no directional transition or focus/attention cue; view-transition/highlight styles were absent.",
      "suggestedFix": "Use directional view transitions and move focus to the destination heading after route/error recovery.",
      "guidanceId": "directional-navigation-transitions",
      "effort": "small",
      "confidence": "medium",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "directs-attention",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/home-platform.json"
      ]
    },
    {
      "id": "F06",
      "severity": "high",
      "summary": "Account page is obscured by an unsolicited signup overlay",
      "evidence": "The demat route opens with a viewport-covering signup overlay before interaction and no visible close action.",
      "suggestedFix": "Keep account information visible and open signup only after an explicit action; always provide a visible dismissal.",
      "guidanceId": "light-dismiss-a-dialog",
      "effort": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "pathId": "demat",
      "url": "https://groww.in/open-demat-account",
      "artifacts": [
        "evidence/demat-mobile.png",
        "evidence/demat-overlay.json"
      ]
    },
    {
      "id": "F07",
      "severity": "high",
      "summary": "Signup modal is a non-semantic fixed DIV",
      "evidence": "The covering signup modal is a fixed DIV (.rodal) with no dialog role; representative pages reported zero <dialog> and zero popover elements.",
      "suggestedFix": "Replace the Rodal DIV with <dialog>, declarative closedby/light-dismiss behavior, labelled heading, and focus restoration.",
      "guidanceId": "declarative-dialog-popover-control",
      "effort": "medium",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "pathId": "demat",
      "url": "https://groww.in/open-demat-account",
      "artifacts": [
        "evidence/demat-overlay.json",
        "evidence/demat-probe.json"
      ]
    },
    {
      "id": "F08",
      "severity": "critical",
      "summary": "All representative mobile templates overflow horizontally",
      "evidence": "Every sampled template overflowed horizontally: home/stocks/mutual funds by about 6.7k px, stock detail by 442 px, calculator by 384 px, demat by 347 px, and blog by 682 px.",
      "suggestedFix": "Remove fixed desktop widths, constrain ticker tracks without inflating document scrollWidth, and use intrinsic/fluid sizing at narrow viewports.",
      "guidanceId": "fluid-scaling",
      "effort": "large",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-layout-mobile.json",
        "evidence/stocks-layout.json",
        "evidence/stock-detail-layout.json",
        "evidence/sip-calculator-layout.json",
        "evidence/blog-layout.json"
      ]
    },
    {
      "id": "F09",
      "severity": "medium",
      "summary": "Shared components do not adapt to their containers",
      "evidence": "No @container rules were found, while shared header/ticker and cards visibly remain desktop-sized and clipped at mobile widths.",
      "suggestedFix": "Introduce container-type on reusable shells/cards and @container rules where each component is reused at narrow widths.",
      "guidanceId": "size-aware-styling",
      "effort": "medium",
      "confidence": "medium",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-platform.json",
        "evidence/blog-mobile.png"
      ]
    },
    {
      "id": "F10",
      "severity": "high",
      "summary": "Hundreds of targets are undersized and keyboard focus is unreliable",
      "evidence": "Each template exposes more than 400 visible targets below 24px in at least one dimension; sampled pre-rendered anchors did not accept focus or show an outline.",
      "suggestedFix": "Give interactive targets at least 24x24 CSS px (prefer 44px for primary touch controls), remove hidden tabbables, and add clear :focus-visible styles.",
      "guidanceId": "accessibility",
      "effort": "large",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-focus.json",
        "evidence/stocks-probe.json",
        "evidence/sip-calculator-probe.json"
      ]
    },
    {
      "id": "F11",
      "severity": "critical",
      "summary": "Mobile performance misses the Core Web Vitals load bar",
      "evidence": "Mobile Lighthouse measured LCP 10.6s, TBT 7,020ms and performance 0.33; trace corroborated LCP 2.44s and 445ms TBT in a lighter desktop run.",
      "suggestedFix": "Prioritise the LCP asset/content, defer non-critical code, and profile INP/TBT contributors before shipping.",
      "guidanceId": "performance",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-trace-summary.json"
      ]
    },
    {
      "id": "F12",
      "severity": "high",
      "summary": "Long tasks block the main thread",
      "evidence": "Trace recorded 9 long tasks (longest 232ms, TBT 445ms); mobile Lighthouse measured 7,020ms TBT.",
      "suggestedFix": "Break app initialization into scheduler-yielding tasks and defer analytics/widgets until after core interactivity.",
      "guidanceId": "break-up-long-tasks",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-layout-mobile.json",
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F13",
      "severity": "high",
      "summary": "The home load ships 360 requests and 4.14MB",
      "evidence": "Home loaded 360 requests and 4.14MB transferred, including 138 scripts; Lighthouse failed LCP discovery and network-dependency insights.",
      "suggestedFix": "Shorten critical chains, preload only true LCP dependencies, cache static assets, and conditionally load non-critical integrations.",
      "guidanceId": "optimize-preload-priority",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F14",
      "severity": "high",
      "summary": "At least 776KiB of JavaScript is unused on load",
      "evidence": "Lighthouse estimated 776KiB unused JS and 16KiB unused CSS; analytics and app chunks dominate the request weight.",
      "suggestedFix": "Code-split by route/interaction, remove duplicate analytics clients, and load large optional dependencies on demand.",
      "guidanceId": "identify-heavy-scripts",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F15",
      "severity": "high",
      "summary": "Controls and links lack robust accessible names",
      "evidence": "Lighthouse found an accessible-name mismatch; calculator has three unlabeled inputs, the account overlay input has no label/ARIA name, and image audit found two missing alt attributes.",
      "suggestedFix": "Add explicit labels to calculator/signup inputs, repair label/name mismatches, and give meaningful images/links accurate alternatives.",
      "guidanceId": "accessibility",
      "effort": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/sip-calculator-probe.json",
        "evidence/demat-overlay.json",
        "evidence/home-images.json"
      ]
    },
    {
      "id": "F16",
      "severity": "high",
      "summary": "Key ticker and CTA colors fail contrast",
      "evidence": "Ticker text measured 2.51:1, positive values 2.66:1, and the white-on-green Get started control 2.66:1, below WCAG AA.",
      "suggestedFix": "Use darker semantic text/accent tokens that reach 4.5:1 for normal text and verify all interactive states.",
      "guidanceId": "accessibility",
      "effort": "small",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F17",
      "severity": "high",
      "summary": "Landmarks and focus orientation are weak",
      "evidence": "Representative probes found no main/nav/header/footer landmarks, while sampled links had outline-style none and many empty accessible names, making focus orientation unreliable.",
      "suggestedFix": "Add semantic header/nav/main/footer landmarks, remove empty links, preserve logical focus order, and style :focus-visible.",
      "guidanceId": "accessibility",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-focus.json",
        "evidence/stocks-probe.json",
        "evidence/blog-probe.json"
      ]
    },
    {
      "id": "F18",
      "severity": "critical",
      "summary": "Zoom is disabled and content fails mobile reflow",
      "evidence": "Mobile Lighthouse found a second viewport declaration with maximum-scale=1/user-scalable=no; every template overflowed horizontally and hundreds of targets were under 24px.",
      "suggestedFix": "Remove maximum-scale/user-scalable restrictions and fix intrinsic reflow so content works at 320px and 400% zoom.",
      "guidanceId": "fluid-scaling",
      "effort": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-lighthouse.json",
        "evidence/home-layout-mobile.json",
        "evidence/stocks-probe.json"
      ]
    },
    {
      "id": "F19",
      "severity": "medium",
      "summary": "The page logs runtime, FedCM, and CSP errors",
      "evidence": "Console logged FedCM concurrency/network errors and multiple CSP-blocked scripts, images, and analytics requests.",
      "suggestedFix": "Deduplicate credential requests and align third-party initialization with the deployed CSP; keep production console clean.",
      "guidanceId": "html",
      "effort": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F20",
      "severity": "medium",
      "summary": "Image dimensions and delivery are inconsistent",
      "evidence": "Doctype/charset are valid, but 4 images lack dimensions, 29 are oversized, 18 use legacy formats, and 2 lack alt text.",
      "suggestedFix": "Reserve image space, provide responsive srcset/sizes, and right-size/modernise below-fold images.",
      "guidanceId": "optimize-image-priority",
      "effort": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-images.json"
      ]
    },
    {
      "id": "F21",
      "severity": "low",
      "summary": "BFCache, source maps, and inspector hygiene regressions remain",
      "evidence": "The page failed BFCache for three no-store reasons, emitted inspector issues, and large first-party bundles referenced missing source maps.",
      "suggestedFix": "Review no-store usage, publish correct source maps to the error tracker, and clear DevTools inspector issues.",
      "guidanceId": "html",
      "effort": "medium",
      "confidence": "medium",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F22",
      "severity": "high",
      "summary": "Hundreds of links have no descriptive text and mobile zoom is blocked",
      "evidence": "URLs and robots are crawlable, but 326–330 anchors per template have no descriptive text/accessible name, and mobile Lighthouse found zoom disabled by a second viewport meta.",
      "suggestedFix": "Do not render empty navigation anchors; ensure every crawlable link has meaningful text and retain a single scalable viewport meta.",
      "guidanceId": "html",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/stocks-probe.json",
        "evidence/blog-probe.json",
        "evidence/robots-sitemap.txt",
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F23",
      "severity": "high",
      "summary": "Cookie and CSP policy is inconsistent across variants",
      "evidence": "HTTPS/HSTS/nosniff/frame protection are present, but the desktop response lacked CSP, 7 of 8 cookies were flagged insecure, and the mobile CSP blocked several configured integrations.",
      "suggestedFix": "Set Secure/SameSite intentionally on all cookies and deploy one tested nonce/hash-based CSP consistently across desktop/mobile.",
      "guidanceId": "security",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json",
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F24",
      "severity": "high",
      "summary": "Tracking and third-party collection is heavy by default",
      "evidence": "Load contacted 14 third-party origins including four known trackers; HAR captured 347 third-party-classified requests and 4.07MB transferred (including first-party asset subdomains classified by origin).",
      "suggestedFix": "Minimise analytics vendors/events, delay consent-sensitive tags, batch telemetry, and document each third party’s purpose.",
      "guidanceId": "privacy",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F25",
      "severity": "high",
      "summary": "Referrer and Permissions policies are absent",
      "evidence": "Referrer-Policy and Permissions-Policy are absent; desktop CSP was absent while mobile CSP produced blocked-resource violations, indicating inconsistent defensive policy deployment.",
      "suggestedFix": "Add restrictive Referrer-Policy and Permissions-Policy, then align CSP and frame-ancestors across response variants.",
      "guidanceId": "security",
      "effort": "small",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F26",
      "severity": "medium",
      "summary": "Installable metadata has no offline service worker",
      "evidence": "A valid standalone manifest exists, but navigator.serviceWorker.getRegistrations() returned no registration, so the app has no demonstrated offline fallback.",
      "suggestedFix": "Register a small service worker with an explicit offline fallback and test flaky/offline navigation, or remove unsupported installability claims.",
      "guidanceId": "detect-initial-visibility-state",
      "effort": "medium",
      "confidence": "medium",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-manifest-agent.json"
      ]
    },
    {
      "id": "F27",
      "severity": "medium",
      "summary": "Multilingual/bidi readiness is not demonstrated",
      "evidence": "Pages declare lang=en but no dir; the public site claims multilingual finance yet exposes no hreflang/language choice in sampled metadata, and severe fixed-width overflow gives no evidence that translated expansion or bidi layouts survive.",
      "suggestedFix": "Expose language alternatives/hreflang, set direction where needed, use logical properties, and test translated expansion and RTL.",
      "guidanceId": "translator",
      "effort": "large",
      "confidence": "medium",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-mobile.png",
        "evidence/home-recon.json"
      ]
    },
    {
      "id": "F28",
      "severity": "high",
      "summary": "Account opening starts with an undismissible commitment UI",
      "evidence": "The demat route forces an undismissible full-screen signup DIV before users can inspect the page; there is no visible cancel/close affordance and consent copy is compressed into the continuation UI.",
      "suggestedFix": "Let users review the offer before signup, make dismissal/cancellation obvious, and separate consent links from the primary CTA.",
      "guidanceId": "custom-button-actions",
      "effort": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "pathId": "demat",
      "url": "https://groww.in/open-demat-account",
      "artifacts": [
        "evidence/demat-mobile.png",
        "evidence/demat-overlay.json"
      ]
    },
    {
      "id": "F29",
      "severity": "high",
      "summary": "Signup validation lacks semantic, accessible error handling",
      "evidence": "The signup control is not a semantic form, its text input is unlabeled, and no accessible error-announcement surface or declarative validation semantics were present.",
      "suggestedFix": "Use a real form, labelled email input, post-interaction validation, aria-invalid, and a live error summary.",
      "guidanceId": "accessible-error-announcement",
      "effort": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "humane-error-handling",
      "pathId": "demat",
      "url": "https://groww.in/open-demat-account",
      "artifacts": [
        "evidence/demat-overlay.json",
        "evidence/demat-probe.json"
      ]
    },
    {
      "id": "F30",
      "severity": "medium",
      "summary": "Inputs do not expose purpose-specific autofill semantics",
      "evidence": "The signup field has autocomplete=\"on\" instead of a purpose-specific email token and no label/ARIA name; three calculator inputs are also unlabeled.",
      "suggestedFix": "Use autocomplete=email/username as appropriate and programmatic labels; label calculator ranges with output associations.",
      "guidanceId": "autofill-sign-up-form",
      "effort": "small",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "pathId": "demat",
      "url": "https://groww.in/open-demat-account",
      "artifacts": [
        "evidence/demat-overlay.json",
        "evidence/sip-calculator-probe.json"
      ]
    },
    {
      "id": "F31",
      "severity": "high",
      "summary": "The account flow is not visibly reversible",
      "evidence": "The account route immediately traps the page behind a modal-like signup layer with no visible cancellation, weakening reversibility before the user can review account details.",
      "suggestedFix": "Provide a clear close/back path before identity capture and keep pricing, terms, and cancellation information available.",
      "guidanceId": "passkey-management",
      "effort": "medium",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "safe-commercial-and-account-flows",
      "pathId": "demat",
      "url": "https://groww.in/open-demat-account",
      "artifacts": [
        "evidence/demat-mobile.png",
        "evidence/demat-overlay.json"
      ]
    },
    {
      "id": "F32",
      "severity": "high",
      "summary": "Most images are oversized or delivered inefficiently",
      "evidence": "29 of 31 images were over 2x displayed resolution, 18 used legacy formats, 7 lacked srcset, and 26 below-fold images were not lazy-loaded.",
      "suggestedFix": "Generate responsive AVIF/WebP variants, supply srcset/sizes, lazy-load below fold, and right-size decorative assets.",
      "guidanceId": "deliver-optimized-decorative-images",
      "effort": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F33",
      "severity": "high",
      "summary": "Background scripts and requests waste client resources",
      "evidence": "The home load makes 360 requests with 138 scripts; Lighthouse estimated 776KiB unused JS and the trace recorded nine long tasks.",
      "suggestedFix": "Deprioritise background fetches, conditionally initialize analytics, and stop idle work when hidden.",
      "guidanceId": "deprioritize-background-fetches",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-lighthouse.json"
      ]
    },
    {
      "id": "F34",
      "severity": "high",
      "summary": "Third-party scripts consume a disproportionate budget",
      "evidence": "Known ad/analytics trackers and WebEngage contribute hundreds of kilobytes; Google Tag Manager/gtag alone account for roughly 487KB transferred.",
      "suggestedFix": "Set a vendor byte/request budget, remove duplicate Google tags, and defer WebEngage/ads until justified by consent and intent.",
      "guidanceId": "efficient-background-processing",
      "effort": "large",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "pathId": "home",
      "url": "https://groww.in/",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json"
      ]
    },
    {
      "id": "F35",
      "severity": "medium",
      "summary": "A simple calculator has a large baseline heap/DOM footprint",
      "evidence": "A simple calculator retained about 833k heap nodes and 49.9MB self size at baseline, a large footprint for this surface even though it did not grow under repetition.",
      "suggestedFix": "Reduce pre-rendered global navigation/hidden links and route bundles; measure heap/DOM after each reduction against this baseline.",
      "guidanceId": "defer-rendering-heavy-content",
      "effort": "large",
      "confidence": "medium",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "pathId": "sip-calculator",
      "url": "https://groww.in/calculators/sip-calculator",
      "artifacts": [
        "evidence/calculator-heap-baseline.heapsnapshot"
      ]
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Restore mobile reflow and zoom across the shared shell",
      "priority": 1,
      "findingIds": [
        "F08",
        "F09",
        "F18",
        "F10"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Cut LCP/TBT by route-splitting and deferring analytics/widgets",
      "priority": 2,
      "findingIds": [
        "F11",
        "F12",
        "F13",
        "F14",
        "F33",
        "F34"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Make account opening explicit, semantic, dismissible, and reversible",
      "priority": 3,
      "findingIds": [
        "F06",
        "F07",
        "F28",
        "F29",
        "F30",
        "F31"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Repair labels, landmarks, focus, link names, and contrast",
      "priority": 4,
      "findingIds": [
        "F15",
        "F16",
        "F17",
        "F22"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Deploy consistent secure headers and privacy-minimised telemetry",
      "priority": 5,
      "findingIds": [
        "F23",
        "F24",
        "F25"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Right-size and responsively deliver images",
      "priority": 6,
      "findingIds": [
        "F20",
        "F32"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Respect dark and reduced-motion preferences",
      "priority": 7,
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Reduce the calculator/global-shell memory footprint",
      "priority": 8,
      "findingIds": [
        "F35"
      ],
      "guidanceId": "defer-rendering-heavy-content",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Add and test an offline fallback",
      "priority": 9,
      "findingIds": [
        "F26"
      ],
      "guidanceId": "detect-initial-visibility-state",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Clean runtime and browser-platform diagnostics",
      "priority": 10,
      "findingIds": [
        "F19",
        "F21"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Prepare translated and bidi layouts",
      "priority": 11,
      "findingIds": [
        "F27"
      ],
      "guidanceId": "translator",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Add progressive navigation/attention transitions",
      "priority": 12,
      "findingIds": [
        "F03",
        "F04",
        "F05"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 8,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T09-26-45-809Z"
}
