{
  "url": "https://voters.eci.gov.in",
  "auditedAt": "2026-07-18T12:38:27.555Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage complete for public home, mobile rendering, login entry, crawler/no-JavaScript behavior, security, network, performance and memory. Authenticated voter transactions, CAPTCHA completion, destructive/account actions and external linked systems were not covered because no test identity or authorization was provided.",
  "page": {
    "appType": "spa",
    "framework": "React-like SPA with additional Angular and jQuery bundles",
    "notes": "Public Indian voter-services portal. Representative routes: long service directory and login entry. The server returns one app shell for infrastructure paths."
  },
  "evidenceUsed": [
    "screenshot",
    "video",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "discoverability",
    "lighthouse",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "static authored-asset scan"
  ],
  "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/entry-desktop.png",
      "caption": "Entry page, default desktop condition",
      "condition": "default",
      "findingIds": [
        "F01",
        "F07"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/entry-mobile.png",
      "caption": "Entry page at 360x800",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F07",
        "F14",
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/entry-dark.png",
      "caption": "Entry page under dark preference",
      "condition": "prefers-color-scheme: dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/login-mobile.png",
      "caption": "Login route at 360x800",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "Home with JavaScript disabled",
      "condition": "JavaScript disabled",
      "findingIds": [
        "F27"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "Rendered home",
      "condition": "JavaScript enabled",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/login-discoverability-crawler.png",
      "caption": "Login with JavaScript disabled",
      "condition": "JavaScript disabled",
      "findingIds": [
        "F27"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/entry-layout-mobile.json",
      "caption": "Mobile layout metrics and CLS",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F05",
        "F17"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/login-layout-mobile.json",
      "caption": "Login mobile layout metrics",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/entry-dom.json",
      "caption": "Rendered DOM and computed styles",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/page-probe.json",
      "caption": "Metadata, links, headings and feature probe",
      "condition": "default",
      "findingIds": [
        "F06",
        "F15",
        "F21",
        "F23",
        "F24",
        "F28",
        "F30"
      ]
    },
    {
      "type": "other",
      "path": "evidence/login-probe.json",
      "caption": "Login navigation and field probe",
      "condition": "anonymous flow",
      "findingIds": [
        "F04",
        "F25",
        "F31"
      ]
    },
    {
      "type": "other",
      "path": "evidence/login-form-probe.json",
      "caption": "Login form semantics and state probe",
      "condition": "anonymous flow",
      "findingIds": [
        "F13",
        "F25",
        "F28",
        "F31"
      ]
    },
    {
      "type": "other",
      "path": "evidence/focus-targets.json",
      "caption": "Programmatic focus and target-size probe",
      "condition": "keyboard focus",
      "findingIds": [
        "F08",
        "F15",
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "Running animations under reduced motion",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/contrast.json",
      "caption": "Computed colors under high contrast preference",
      "condition": "prefers-contrast: more",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "other",
      "path": "evidence/authored-feature-probe.json",
      "caption": "Static scan of downloaded authored CSS/JS",
      "condition": "default",
      "findingIds": [
        "F01",
        "F04",
        "F05",
        "F07",
        "F30"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/entry-trace.json",
      "caption": "DevTools performance trace",
      "condition": "cold load",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/entry-trace-summary.json",
      "caption": "Compact trace timings",
      "condition": "cold load",
      "findingIds": [
        "F09",
        "F10"
      ]
    },
    {
      "type": "har",
      "path": "evidence/entry.har",
      "caption": "Network archive",
      "condition": "cold load",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/entry-summary.json",
      "caption": "Compact network summary",
      "condition": "cold load",
      "findingIds": [
        "F11",
        "F12",
        "F33",
        "F34"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse JSON",
      "condition": "mobile simulated cold load",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/lighthouse-summary.json",
      "caption": "Compact Lighthouse findings",
      "condition": "mobile simulated cold load",
      "findingIds": [
        "F03",
        "F06",
        "F09",
        "F10",
        "F11",
        "F12",
        "F13",
        "F14",
        "F15",
        "F16",
        "F18",
        "F19",
        "F20",
        "F22",
        "F33",
        "F34"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "Raw HTML/rendered comparison for home",
      "condition": "JavaScript enabled vs disabled",
      "findingIds": [
        "F27"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/login-discoverability.json",
      "caption": "Raw HTML/rendered comparison for login",
      "condition": "JavaScript enabled vs disabled",
      "findingIds": [
        "F21",
        "F27"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "Baseline heap summary",
      "condition": "after load",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-scroll.json",
      "caption": "Heap after ten scroll cycles",
      "condition": "repeated interaction",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security header audit",
      "condition": "default",
      "findingIds": [
        "F26"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie audit",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party tracker audit",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client secret scan",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image audit",
      "condition": "default",
      "findingIds": [
        "F13",
        "F19",
        "F32"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots-sitemap.json",
      "caption": "robots.txt and sitemap.xml response probe",
      "condition": "default",
      "findingIds": [
        "F22",
        "F23",
        "F29"
      ]
    },
    {
      "type": "video",
      "path": "evidence/scroll.mp4",
      "caption": "Scroll interaction recording",
      "condition": "default",
      "findingIds": [
        "F05"
      ]
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corrob Evidence gathered as cited.",
      "evidence": "The dark-emulated screenshot is byte-identical to the default capture; body stays white, computed color-scheme is normal, and the authored bundle contains no prefers-color-scheme rule.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/entry-dark.png",
        "evidence/entry-desktop.png",
        "evidence/authored-feature-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model c Evidence gathered as cited.",
      "evidence": "The reduced-motion probe matched the user preference but still found the infinite 1-second blink animation running.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses. Evidence gathered as cited.",
      "evidence": "Under prefers-contrast: more, body and control colors remained unchanged; several controls still use low-contrast color pairs.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/contrast.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses. Evidence gathered as cited.",
      "evidence": "The downloaded authored CSS/JS contains no view-transition or startViewTransition usage; the tested home-to-login navigation is a same-document SPA route change.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/authored-feature-probe.json",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM/screenshot/video review plus authored CSS feature scan",
      "evidence": "No parallax, scrollytelling, reveal, or other scroll-linked animation was present on the audited routes.",
      "pathIds": [
        "entry"
      ],
      "reason": "No parallax, scrollytelling, reveal, or other scroll-linked animation was present on the audited routes."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM and interaction review",
      "evidence": "No carousel, swipe, pull-to-reveal, drag, or other gesture-driven component was present.",
      "pathIds": [
        "entry"
      ],
      "reason": "No carousel, swipe, pull-to-reveal, drag, or other gesture-driven component was present."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses. Evidence gathered as cited.",
      "evidence": "The entry page is 5,164px tall on mobile, while the scroll capture and authored feature probe show no progress indicator, scroll-state query, or responsive sticky chrome.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/entry-layout-mobile.json",
        "evidence/scroll.mp4",
        "evidence/authored-feature-probe.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM overlay probe and screenshots",
      "evidence": "No tooltip, popover, anchored menu, or edge-positioned overlay was present on the audited anonymous routes.",
      "pathIds": [
        "entry"
      ],
      "reason": "No tooltip, popover, anchored menu, or edge-positioned overlay was present on the audited anonymous routes."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "issues",
      "confidence": "high",
      "method": "CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses. Evidence gathered as cited.",
      "evidence": "The rendered page has no h1-h3 headings and no main or nav landmark despite distinct Forms and Services sections; Lighthouse confirms no main landmark.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "Load screenshots and DOM overlay probe",
      "evidence": "Desktop and mobile load screenshots show content immediately with no pop-up, consent wall, or obstructive interstitial.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "not-applicable",
      "confidence": "high",
      "method": "DOM probe for dialog/popover/details and screenshots",
      "evidence": "No overlay, disclosure, custom picker, or modal flow was present on the audited anonymous surfaces.",
      "pathIds": [
        "entry"
      ],
      "reason": "No overlay, disclosure, custom picker, or modal flow was present on the audited anonymous surfaces."
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop and mobile screenshot review",
      "evidence": "The first viewport prioritises named Forms and Services cards; no advertising or decorative application frame obscures the civic tasks.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Mobile layout metrics and screenshots",
      "evidence": "At 360x800, layout reported scrollWidth=clientWidth=360 and 0px horizontal overflow; both home and login remain readable.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses. Evidence gathered as cited.",
      "evidence": "The authored CSS/JS probe found no @container or container-type usage across a card-heavy reusable layout.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/authored-feature-probe.json",
        "evidence/entry-desktop.png",
        "evidence/entry-mobile.png"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses. Evidence gathered as cited.",
      "evidence": "The focus probe found outline:none on Login, Sign-Up, and primary form buttons; Login is 33px tall and several controls are 21-36px high.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/focus-targets.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop/mobile screenshots and body-text probe",
      "evidence": "The first viewport clearly identifies Citizen Service Portal and exposes Fill Enumeration Form, voter search, Login and Sign-Up actions.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Login navigation and form probe",
      "evidence": "The anonymous representative flow from entry to Login completes successfully at /login and presents identifier, CAPTCHA and Request OTP controls; post-auth voter transactions were explicitly outside this audit.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Login screenshot and form-state probe",
      "evidence": "Request OTP is visibly disabled until prerequisites are entered, required fields are visibly marked, and the route retains Login/Sign-Up navigation.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal fir Evidence gathered as cited.",
      "evidence": "Lighthouse measured LCP 14.9s, FCP 7.9s, TTI 16.4s and performance 0.45; the independent trace measured LCP 4.03s. Both LCP runs exceed the 2.5s good threshold.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/entry-trace-summary.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Layout primitive and Lighthouse",
      "evidence": "CLS was 0.0206 on the mobile layout capture and 0.001 in Lighthouse, both within the good range.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses. Evidence gathered as cited.",
      "evidence": "Lighthouse measured 461ms TBT and a 335ms maximum potential input delay; the trace also recorded two long tasks.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/entry-trace-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discover Evidence gathered as cited.",
      "evidence": "The HAR captured 82 requests and 2.92MB transferred; Lighthouse estimates 6.92s savings from render-blocking resources, including fonts, styles and parser-inserted scripts.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/entry-summary.json",
        "evidence/entry.har",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model  Evidence gathered as cited.",
      "evidence": "Lighthouse estimates 776KiB unused JavaScript and 370KiB unused CSS; the HAR shows 1.92MB of scripts and both Angular and React-like bundles on the entry route.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/entry-summary.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The Evidence gathered as cited.",
      "evidence": "Lighthouse flags images without alt and visible-label/accessibility-name mismatches; the login captcha field has an empty aria-label and no associated label in the probe.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/images.json",
        "evidence/login-form-probe.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses. Evidence gathered as cited.",
      "evidence": "Lighthouse found numerous failures, including white on #28a745 at 3.13:1, white on #17a2b8 at 3.04:1, and white on #2bb9e9 at 2.27:1.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/entry-mobile.png"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses. Evidence gathered as cited.",
      "evidence": "The DOM has no h1-h3 headings, no main/nav landmark, and primary buttons compute to outline:none when focused.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/focus-targets.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses. Evidence gathered as cited.",
      "evidence": "The focus probe and Lighthouse show several actionable labels rendered at 11-12px; the mobile screenshot shows dense card content and tightly packed controls.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/entry-mobile.png",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The mo Evidence gathered as cited.",
      "evidence": "The focus/target probe measured Login at 102x33 and many form actions at 36px high, although 360px reflow itself has no horizontal overflow.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/focus-targets.json",
        "evidence/entry-layout-mobile.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses. Evidence gathered as cited.",
      "evidence": "Lighthouse captured a blocked inline script, invalid Google Fonts integrity, a 401 token-validation request, and a stylesheet served with text/html MIME.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses. Evidence gathered as cited.",
      "evidence": "The images primitive found 13 images without both dimensions and 18 oversized images; Lighthouse also reports unminified CSS/JS.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses. Evidence gathered as cited.",
      "evidence": "Lighthouse reports BFCache blocked by no-store, missing source maps for large first-party bundles, and CSP inspector issues.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses. Evidence gathered as cited.",
      "evidence": "Both title and meta description are exactly “Citizen Service Portal”; the login title changes but its raw HTML still exposes the entry title.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/login-discoverability.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses. Evidence gathered as cited.",
      "evidence": "Lighthouse found anchors without href and generic “Read more” text; /robots.txt returns the SPA HTML rather than valid robots directives.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/robots-sitemap.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses. Evidence gathered as cited.",
      "evidence": "The DOM has no canonical link, and /sitemap.xml responds 200 with the app shell rather than XML.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/robots-sitemap.json"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model c Evidence gathered as cited.",
      "evidence": "The page probe found no JSON-LD and no Open Graph properties despite visible Election Commission organization/service content.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/page-probe.json"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "pass",
      "confidence": "high",
      "method": "Headers, cookies and secrets primitives",
      "evidence": "HTTPS, HSTS preload, CSP, nosniff, X-Frame-Options DENY and SameSite=Strict Secure HttpOnly cookie attributes were observed, with no secret exposure.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "pass",
      "confidence": "high",
      "method": "Trackers, secrets and HAR summary",
      "evidence": "No known tracker domains or exposed secrets were found; six third-party requests were limited to fonts/CDN dependencies rather than analytics.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses. Evidence gathered as cited.",
      "evidence": "The login route offers OTP after identifier plus CAPTCHA but no passkey/WebAuthn capability; the identifier field uses one-time-code and CAPTCHA uses new-password.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/login-probe.json",
        "evidence/login-form-probe.json"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie  Evidence gathered as cited.",
      "evidence": "The headers primitive found strong HSTS, XFO, nosniff and referrer policy, but no Permissions-Policy; style-src allows unsafe-inline.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F26"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses. Evidence gathered as cited.",
      "evidence": "Discoverability measured only 3% raw/rendered content coverage on home and 9% on login; both ship an empty #root and the crawler screenshot only says JavaScript is required.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png",
        "evidence/login-discoverability.json",
        "evidence/login-discoverability-crawler.png"
      ],
      "findingIds": [
        "F27"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Mobile screenshots, layout and route probe",
      "evidence": "Home and login routes rendered without horizontal clipping at mobile width; navigation to /login completed and controls remained usable.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses. Evidence gathered as cited.",
      "evidence": "The DOM probe found no web app manifest and the login route was not controlled by a service worker.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/login-form-probe.json"
      ],
      "findingIds": [
        "F28"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The mo Evidence gathered as cited.",
      "evidence": "Requests for /robots.txt and /sitemap.xml both return HTTP 200 with the generic SPA HTML, showing that unknown infrastructure routes are not represented with correct content/status.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/robots-sitemap.json"
      ],
      "findingIds": [
        "F29"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses. Evidence gathered as cited.",
      "evidence": "The portal offers English and Hindi, but the document only declares lang=en, has no dir attribute, and the authored bundle probe found no logical CSS properties.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/authored-feature-probe.json"
      ],
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Rendered text and DOM review",
      "evidence": "The audited anonymous surfaces expose no dates, currencies, numeric measurements, or recurring events requiring locale formatting; the year in a proper name is not locale-sensitive data.",
      "pathIds": [
        "entry"
      ],
      "reason": "The audited anonymous surfaces expose no dates, currencies, numeric measurements, or recurring events requiring locale formatting; the year in a proper name is not locale-sensitive data."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Rendered text and DOM review",
      "evidence": "No times, appointments, time zones, or recurring temporal data are exposed on the audited anonymous surfaces.",
      "pathIds": [
        "entry"
      ],
      "reason": "No times, appointments, time zones, or recurring temporal data are exposed on the audited anonymous surfaces."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Screenshot and flow review",
      "evidence": "The entry and login routes show no consent nagging, confirmshaming, disguised ads, pricing, forced continuity, or preselected commercial choices.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "Login form state and screenshot",
      "evidence": "The Request OTP action is disabled before required data is present and required fields are marked, preventing a premature invalid submission.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses. Evidence gathered as cited.",
      "evidence": "The login identifier is marked autocomplete=one-time-code while CAPTCHA is new-password, neither matching the field purpose.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/login-probe.json",
        "evidence/login-form-probe.json"
      ],
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "high",
      "method": "Login route screenshot and DOM probe",
      "evidence": "No commercial/subscription flow is present; the observed account entry clearly distinguishes Login and Sign-Up and uses an explicit OTP request step.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses. Evidence gathered as cited.",
      "evidence": "The images primitive found 18 oversized images, 49 below-fold images without lazy loading, 13 missing dimensions and 8 legacy-format assets.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F32"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses. Evidence gathered as cited.",
      "evidence": "The page transfers 2.92MB, including 1.92MB scripts; Lighthouse estimates 776KiB unused JS, and an unauthenticated token-validation request returns 401 on load.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/entry-summary.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F33"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation ke Evidence gathered as cited.",
      "evidence": "The HAR attributes 314.8KB to third parties and 308KB to fonts; one early-access font stylesheet alone transfers 272.7KB while Lighthouse says it is 100% unused.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/entry-summary.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F34"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon judgement and authored feature scan",
      "evidence": "No declared agent-facing intent exists for this public portal, and WebMCP remains an emerging opportunity rather than a baseline requirement.",
      "pathIds": [
        "entry"
      ],
      "reason": "No declared agent-facing intent exists for this public portal, and WebMCP remains an emerging opportunity rather than a baseline requirement."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon judgement and authored feature scan",
      "evidence": "No user task on the audited routes requires on-device inference; absence is not a quality failure.",
      "pathIds": [
        "entry"
      ],
      "reason": "No user task on the audited routes requires on-device inference; absence is not a quality failure."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Baseline/post-interaction heap summary comparison",
      "evidence": "After ten full-page scroll cycles, heap decreased from 45,807,417 to 45,683,047 bytes and node count decreased from 721,862 to 721,592.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Heap summaries",
      "evidence": "The measured retained heap was about 45.8MB for a substantial SPA portal and remained bounded after interaction.",
      "pathIds": [
        "entry"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Heap summary constructor comparison",
      "evidence": "The before/after heap summaries contain no reported Detached* constructor and node/closure populations did not grow after repeated scrolling.",
      "pathIds": [
        "entry"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10",
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13",
        "F14",
        "F15",
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21",
        "F22",
        "F23",
        "F24"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F25",
        "F26"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F27",
        "F28",
        "F29"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F30"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F31"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F32",
        "F33",
        "F34"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No declared agent-facing intent exists for this public portal, and WebMCP remains an emerging opportunity rather than a baseline requirement. No user task on the audited routes requires on-device inference; absence is not a quality failure."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "entry",
      "description": "Public home/service directory representing the listing and primary navigation archetype; tested desktop, 360x800 mobile, preferences, keyboard focus, network, performance, security and memory.",
      "url": "https://voters.eci.gov.in/",
      "conditions": [
        "default desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "prefers-contrast: more",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "login",
      "description": "Login route representing the primary account/form entry journey; tested mobile layout, field semantics, disabled initial state and raw HTML discoverability. Post-auth flows excluded because no authorized test identity/CAPTCHA solution was provided.",
      "url": "https://voters.eci.gov.in/login",
      "conditions": [
        "viewport: 360x800",
        "anonymous initial state",
        "JavaScript disabled crawler"
      ],
      "result": "issues"
    },
    {
      "id": "crawler",
      "description": "Raw HTML and JavaScript-disabled crawler comparison for home and login; also probed robots.txt and sitemap.xml.",
      "url": "https://voters.eci.gov.in/",
      "conditions": [
        "JavaScript disabled",
        "raw HTTP fetch"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Dark preference is ignored",
      "evidence": "The dark-emulated screenshot is byte-identical to the default capture; body stays white, computed color-scheme is normal, and the authored bundle contains no prefers-color-scheme rule.",
      "artifacts": [
        "evidence/entry-dark.png",
        "evidence/entry-desktop.png",
        "evidence/authored-feature-probe.json"
      ],
      "suggestedFix": "Add color-scheme: light dark and preference-driven surface tokens using prefers-color-scheme or light-dark().",
      "effort": "medium"
    },
    {
      "id": "F02",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Blinking motion continues under reduced-motion",
      "evidence": "The reduced-motion probe matched the user preference but still found the infinite 1-second blink animation running.",
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "suggestedFix": "Disable the blinking label and other non-essential motion inside prefers-reduced-motion: reduce.",
      "effort": "medium"
    },
    {
      "id": "F03",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "High-contrast preference does not change the palette",
      "evidence": "Under prefers-contrast: more, body and control colors remained unchanged; several controls still use low-contrast color pairs.",
      "artifacts": [
        "evidence/contrast.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Provide higher-contrast tokens under prefers-contrast and preserve control boundaries in forced colors.",
      "effort": "medium"
    },
    {
      "id": "F04",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "SPA route changes do not use View Transitions",
      "evidence": "The downloaded authored CSS/JS contains no view-transition or startViewTransition usage; the tested home-to-login navigation is a same-document SPA route change.",
      "artifacts": [
        "evidence/authored-feature-probe.json",
        "evidence/login-probe.json"
      ],
      "suggestedFix": "Progressively enhance route changes with same-document View Transitions and retain an instant fallback.",
      "effort": "small"
    },
    {
      "id": "F05",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-progress-indicator",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "The long page offers no scroll-state guidance",
      "evidence": "The entry page is 5,164px tall on mobile, while the scroll capture and authored feature probe show no progress indicator, scroll-state query, or responsive sticky chrome.",
      "artifacts": [
        "evidence/entry-layout-mobile.json",
        "evidence/scroll.mp4",
        "evidence/authored-feature-probe.json"
      ],
      "suggestedFix": "Add a lightweight scroll-position affordance or progress cue where it helps users orient in the long service list.",
      "effort": "small"
    },
    {
      "id": "F06",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "directs-attention",
      "guidanceId": "directional-navigation-transitions",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Page structure does not guide navigation for all users",
      "evidence": "The rendered page has no h1-h3 headings and no main or nav landmark despite distinct Forms and Services sections; Lighthouse confirms no main landmark.",
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Use a main landmark and semantic section headings, and move focus to the route heading after SPA navigation.",
      "effort": "medium"
    },
    {
      "id": "F07",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "high",
      "summary": "Components rely on viewport layout only",
      "evidence": "The authored CSS/JS probe found no @container or container-type usage across a card-heavy reusable layout.",
      "artifacts": [
        "evidence/authored-feature-probe.json",
        "evidence/entry-desktop.png",
        "evidence/entry-mobile.png"
      ],
      "suggestedFix": "Use container queries for service and form cards that appear in different column widths, with existing viewport CSS as fallback.",
      "effort": "small"
    },
    {
      "id": "F08",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Keyboard focus is invisible on primary buttons and some targets are undersized",
      "evidence": "The focus probe found outline:none on Login, Sign-Up, and primary form buttons; Login is 33px tall and several controls are 21-36px high.",
      "artifacts": [
        "evidence/focus-targets.json"
      ],
      "suggestedFix": "Add a strong :focus-visible ring and increase interactive target boxes to at least 44 CSS px where practical.",
      "effort": "medium"
    },
    {
      "id": "F09",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Loading performance misses the modern baseline",
      "evidence": "Lighthouse measured LCP 14.9s, FCP 7.9s, TTI 16.4s and performance 0.45; the independent trace measured LCP 4.03s. Both LCP runs exceed the 2.5s good threshold.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/entry-trace-summary.json"
      ],
      "suggestedFix": "Shorten the critical path, prioritize the LCP content, and defer non-critical scripts and styles.",
      "effort": "medium"
    },
    {
      "id": "F10",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Script work delays interactivity",
      "evidence": "Lighthouse measured 461ms TBT and a 335ms maximum potential input delay; the trace also recorded two long tasks.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/entry-trace-summary.json"
      ],
      "suggestedFix": "Break up long tasks and defer optional framework/transliteration work until needed.",
      "effort": "medium"
    },
    {
      "id": "F11",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-script-priority",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Render-blocking resources dominate the critical path",
      "evidence": "The HAR captured 82 requests and 2.92MB transferred; Lighthouse estimates 6.92s savings from render-blocking resources, including fonts, styles and parser-inserted scripts.",
      "artifacts": [
        "evidence/entry-summary.json",
        "evidence/entry.har",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Remove parser-blocking scripts, trim font/style variants, preload only true critical assets, and give fonts a non-blocking display strategy.",
      "effort": "medium"
    },
    {
      "id": "F12",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "The page ships large unused React, Angular, jQuery and CSS payloads",
      "evidence": "Lighthouse estimates 776KiB unused JavaScript and 370KiB unused CSS; the HAR shows 1.92MB of scripts and both Angular and React-like bundles on the entry route.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/entry-summary.json"
      ],
      "suggestedFix": "Remove duplicate framework/runtime layers, route-split optional features, and purge unused Bootstrap/font/transliteration CSS.",
      "effort": "medium"
    },
    {
      "id": "F13",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Accessible names, image alternatives and form labels are incomplete",
      "evidence": "Lighthouse flags images without alt and visible-label/accessibility-name mismatches; the login captcha field has an empty aria-label and no associated label in the probe.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/images.json",
        "evidence/login-form-probe.json"
      ],
      "suggestedFix": "Give meaningful images concise alt text, decorative images alt=\"\", preserve visible text in accessible names, and associate every input with a label.",
      "effort": "medium"
    },
    {
      "id": "F14",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Primary controls fail WCAG contrast",
      "evidence": "Lighthouse found numerous failures, including white on #28a745 at 3.13:1, white on #17a2b8 at 3.04:1, and white on #2bb9e9 at 2.27:1.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/entry-mobile.png"
      ],
      "suggestedFix": "Darken control backgrounds or use dark text so normal text reaches at least 4.5:1 in every state.",
      "effort": "medium"
    },
    {
      "id": "F15",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "high",
      "confidence": "high",
      "summary": "Landmarks, headings and focus treatment are insufficient",
      "evidence": "The DOM has no h1-h3 headings, no main/nav landmark, and primary buttons compute to outline:none when focused.",
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/focus-targets.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Add semantic headings and landmarks, preserve logical DOM order, and style :focus-visible clearly.",
      "effort": "medium"
    },
    {
      "id": "F16",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-inclusive",
      "principleCheckId": "legible-text",
      "guidanceId": "improve-text-layout-and-legibility",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Small text and dense cards reduce reading comfort",
      "evidence": "The focus probe and Lighthouse show several actionable labels rendered at 11-12px; the mobile screenshot shows dense card content and tightly packed controls.",
      "artifacts": [
        "evidence/entry-mobile.png",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Raise small actionable text to a comfortable responsive size and increase line-height and spacing within cards.",
      "effort": "medium"
    },
    {
      "id": "F17",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-inclusive",
      "principleCheckId": "zoom-reflow-targets-and-media",
      "guidanceId": "fluid-scaling",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "Many interactive targets are below the recommended touch size",
      "evidence": "The focus/target probe measured Login at 102x33 and many form actions at 36px high, although 360px reflow itself has no horizontal overflow.",
      "artifacts": [
        "evidence/focus-targets.json",
        "evidence/entry-layout-mobile.json"
      ],
      "suggestedFix": "Increase target hit areas while preserving the successful narrow-viewport reflow.",
      "effort": "medium"
    },
    {
      "id": "F18",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page logs security, network and MIME errors",
      "evidence": "Lighthouse captured a blocked inline script, invalid Google Fonts integrity, a 401 token-validation request, and a stylesheet served with text/html MIME.",
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Fix the integrity hash and asset route/MIME type, avoid unauthenticated token validation, and remove blocked inline code.",
      "effort": "medium"
    },
    {
      "id": "F19",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image dimensions and production asset hygiene are incomplete",
      "evidence": "The images primitive found 13 images without both dimensions and 18 oversized images; Lighthouse also reports unminified CSS/JS.",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Set intrinsic width and height, serve assets close to display size, and ship minified production bundles.",
      "effort": "medium"
    },
    {
      "id": "F20",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "BFCache, source maps and inspector hygiene need work",
      "evidence": "Lighthouse reports BFCache blocked by no-store, missing source maps for large first-party bundles, and CSP inspector issues.",
      "artifacts": [
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Use no-store only where sensitive state requires it, publish production source maps securely, and clear DevTools inspector issues.",
      "effort": "medium"
    },
    {
      "id": "F21",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Entry metadata is generic and duplicated",
      "evidence": "Both title and meta description are exactly “Citizen Service Portal”; the login title changes but its raw HTML still exposes the entry title.",
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/login-discoverability.json"
      ],
      "suggestedFix": "Write unique, descriptive titles and descriptions for the portal and each public route.",
      "effort": "medium"
    },
    {
      "id": "F22",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "Important links and crawler directives are not crawlable",
      "evidence": "Lighthouse found anchors without href and generic “Read more” text; /robots.txt returns the SPA HTML rather than valid robots directives.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/robots-sitemap.json"
      ],
      "suggestedFix": "Use real href URLs for navigable services, descriptive link text, and serve a valid robots.txt.",
      "effort": "medium"
    },
    {
      "id": "F23",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "high",
      "confidence": "high",
      "summary": "Canonical and sitemap/indexing signals are missing",
      "evidence": "The DOM has no canonical link, and /sitemap.xml responds 200 with the app shell rather than XML.",
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/robots-sitemap.json"
      ],
      "suggestedFix": "Add route-appropriate canonical links and serve a real XML sitemap consistent with robots policy.",
      "effort": "medium"
    },
    {
      "id": "F24",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "The public civic portal has no structured or social metadata",
      "evidence": "The page probe found no JSON-LD and no Open Graph properties despite visible Election Commission organization/service content.",
      "artifacts": [
        "evidence/page-probe.json"
      ],
      "suggestedFix": "Add accurate Organization/GovernmentService JSON-LD and Open Graph metadata matching visible content.",
      "effort": "medium"
    },
    {
      "id": "F25",
      "pathId": "login",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkey-authentication",
      "guidanceCategory": "passkeys",
      "severity": "medium",
      "confidence": "high",
      "summary": "Authentication lacks a phishing-resistant option and misuses autocomplete",
      "evidence": "The login route offers OTP after identifier plus CAPTCHA but no passkey/WebAuthn capability; the identifier field uses one-time-code and CAPTCHA uses new-password.",
      "artifacts": [
        "evidence/login-probe.json",
        "evidence/login-form-probe.json"
      ],
      "suggestedFix": "Offer passkeys alongside OTP where feasible and use accurate autocomplete tokens (for example username/email rather than one-time-code on the identifier).",
      "effort": "medium"
    },
    {
      "id": "F26",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "low",
      "confidence": "high",
      "summary": "Permissions Policy is absent and CSP retains unsafe-inline for styles",
      "evidence": "The headers primitive found strong HSTS, XFO, nosniff and referrer policy, but no Permissions-Policy; style-src allows unsafe-inline.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Add a least-privilege Permissions-Policy and migrate inline styles toward nonce/hash or stylesheet-based rules where practical.",
      "effort": "small"
    },
    {
      "id": "F27",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "stabilize-reactive-state",
      "guidanceCategory": "user-experience",
      "severity": "critical",
      "confidence": "high",
      "summary": "Core civic content disappears without JavaScript",
      "evidence": "Discoverability measured only 3% raw/rendered content coverage on home and 9% on login; both ship an empty #root and the crawler screenshot only says JavaScript is required.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-crawler.png",
        "evidence/login-discoverability.json",
        "evidence/login-discoverability-crawler.png"
      ],
      "suggestedFix": "Server-render the core service directory and login instructions/forms, then hydrate optional enhancements.",
      "effort": "large"
    },
    {
      "id": "F28",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The app-like portal has no installable/offline surface",
      "evidence": "The DOM probe found no web app manifest and the login route was not controlled by a service worker.",
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/login-form-probe.json"
      ],
      "suggestedFix": "Add a manifest and a narrowly scoped service worker that provides an offline information/retry page without caching sensitive voter data.",
      "effort": "medium"
    },
    {
      "id": "F29",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "Missing infrastructure routes return misleading success shells",
      "evidence": "Requests for /robots.txt and /sitemap.xml both return HTTP 200 with the generic SPA HTML, showing that unknown infrastructure routes are not represented with correct content/status.",
      "artifacts": [
        "evidence/robots-sitemap.json"
      ],
      "suggestedFix": "Configure explicit static robots/sitemap responses and a real 404/error route with recovery actions for unknown paths and failed APIs.",
      "effort": "medium"
    },
    {
      "id": "F30",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "built-in-ai",
      "severity": "medium",
      "confidence": "high",
      "summary": "Multilingual UI is not fully language- or direction-ready",
      "evidence": "The portal offers English and Hindi, but the document only declares lang=en, has no dir attribute, and the authored bundle probe found no logical CSS properties.",
      "artifacts": [
        "evidence/page-probe.json",
        "evidence/authored-feature-probe.json"
      ],
      "suggestedFix": "Update html lang for the selected language, set dir where needed, and replace physical spacing/position properties with logical equivalents.",
      "effort": "medium"
    },
    {
      "id": "F31",
      "pathId": "login",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "autofill-sign-in-form",
      "guidanceCategory": "forms",
      "severity": "medium",
      "confidence": "high",
      "summary": "Login autocomplete tokens obstruct input assistance",
      "evidence": "The login identifier is marked autocomplete=one-time-code while CAPTCHA is new-password, neither matching the field purpose.",
      "artifacts": [
        "evidence/login-probe.json",
        "evidence/login-form-probe.json"
      ],
      "suggestedFix": "Use username or email for the identifier as appropriate and disable autocomplete on CAPTCHA without pretending it is a new password.",
      "effort": "medium"
    },
    {
      "id": "F32",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Images are frequently oversized or lack efficient loading",
      "evidence": "The images primitive found 18 oversized images, 49 below-fold images without lazy loading, 13 missing dimensions and 8 legacy-format assets.",
      "artifacts": [
        "evidence/images.json"
      ],
      "suggestedFix": "Serve appropriately sized modern variants, lazy-load below-fold content, and set intrinsic dimensions.",
      "effort": "medium"
    },
    {
      "id": "F33",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "conditional-async-dependencies",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Large unused code and background validation waste resources",
      "evidence": "The page transfers 2.92MB, including 1.92MB scripts; Lighthouse estimates 776KiB unused JS, and an unauthenticated token-validation request returns 401 on load.",
      "artifacts": [
        "evidence/entry-summary.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Do not validate absent sessions, remove duplicate runtimes, and conditionally load transliteration and route-specific code.",
      "effort": "medium"
    },
    {
      "id": "F34",
      "pathId": "entry",
      "url": "https://voters.eci.gov.in/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Font and third-party weight is disproportionate to the simple portal UI",
      "evidence": "The HAR attributes 314.8KB to third parties and 308KB to fonts; one early-access font stylesheet alone transfers 272.7KB while Lighthouse says it is 100% unused.",
      "artifacts": [
        "evidence/entry-summary.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Self-host only required font subsets, remove the unused early-access stylesheet, and reduce third-party requests.",
      "effort": "medium"
    }
  ],
  "taskList": [
    {
      "id": "T27",
      "title": "Core civic content disappears without JavaScript",
      "priority": 1,
      "findingIds": [
        "F27"
      ],
      "guidanceId": "stabilize-reactive-state",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Keyboard focus is invisible on primary buttons and some targets are undersized",
      "priority": 2,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Loading performance misses the modern baseline",
      "priority": 3,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Render-blocking resources dominate the critical path",
      "priority": 4,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "optimize-script-priority",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "The page ships large unused React, Angular, jQuery and CSS payloads",
      "priority": 5,
      "findingIds": [
        "F12"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T13",
      "title": "Accessible names, image alternatives and form labels are incomplete",
      "priority": 6,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T14",
      "title": "Primary controls fail WCAG contrast",
      "priority": 7,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T15",
      "title": "Landmarks, headings and focus treatment are insufficient",
      "priority": 8,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T22",
      "title": "Important links and crawler directives are not crawlable",
      "priority": 9,
      "findingIds": [
        "F22"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T23",
      "title": "Canonical and sitemap/indexing signals are missing",
      "priority": 10,
      "findingIds": [
        "F23"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T29",
      "title": "Missing infrastructure routes return misleading success shells",
      "priority": 11,
      "findingIds": [
        "F29"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T33",
      "title": "Large unused code and background validation waste resources",
      "priority": 12,
      "findingIds": [
        "F33"
      ],
      "guidanceId": "conditional-async-dependencies",
      "status": "open"
    },
    {
      "id": "T01",
      "title": "Dark preference is ignored",
      "priority": 13,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Blinking motion continues under reduced-motion",
      "priority": 14,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "High-contrast preference does not change the palette",
      "priority": 15,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Page structure does not guide navigation for all users",
      "priority": 16,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "directional-navigation-transitions",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Script work delays interactivity",
      "priority": 17,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "break-up-long-tasks",
      "status": "open"
    },
    {
      "id": "T16",
      "title": "Small text and dense cards reduce reading comfort",
      "priority": 18,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "improve-text-layout-and-legibility",
      "status": "open"
    },
    {
      "id": "T17",
      "title": "Many interactive targets are below the recommended touch size",
      "priority": 19,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "fluid-scaling",
      "status": "open"
    },
    {
      "id": "T18",
      "title": "The page logs security, network and MIME errors",
      "priority": 20,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T19",
      "title": "Image dimensions and production asset hygiene are incomplete",
      "priority": 21,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T20",
      "title": "BFCache, source maps and inspector hygiene need work",
      "priority": 22,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T21",
      "title": "Entry metadata is generic and duplicated",
      "priority": 23,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T24",
      "title": "The public civic portal has no structured or social metadata",
      "priority": 24,
      "findingIds": [
        "F24"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T25",
      "title": "Authentication lacks a phishing-resistant option and misuses autocomplete",
      "priority": 25,
      "findingIds": [
        "F25"
      ],
      "guidanceId": "passkey-authentication",
      "status": "open"
    },
    {
      "id": "T28",
      "title": "The app-like portal has no installable/offline surface",
      "priority": 26,
      "findingIds": [
        "F28"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T30",
      "title": "Multilingual UI is not fully language- or direction-ready",
      "priority": 27,
      "findingIds": [
        "F30"
      ],
      "guidanceId": "translator",
      "status": "open"
    },
    {
      "id": "T31",
      "title": "Login autocomplete tokens obstruct input assistance",
      "priority": 28,
      "findingIds": [
        "F31"
      ],
      "guidanceId": "autofill-sign-in-form",
      "status": "open"
    },
    {
      "id": "T32",
      "title": "Images are frequently oversized or lack efficient loading",
      "priority": 29,
      "findingIds": [
        "F32"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T34",
      "title": "Font and third-party weight is disproportionate to the simple portal UI",
      "priority": 30,
      "findingIds": [
        "F34"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "SPA route changes do not use View Transitions",
      "priority": 31,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "The long page offers no scroll-state guidance",
      "priority": 32,
      "findingIds": [
        "F05"
      ],
      "guidanceId": "scroll-progress-indicator",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Components rely on viewport layout only",
      "priority": 33,
      "findingIds": [
        "F07"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    },
    {
      "id": "T26",
      "title": "Permissions Policy is absent and CSP retains unsafe-inline for styles",
      "priority": 34,
      "findingIds": [
        "F26"
      ],
      "guidanceId": "security",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 3,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T12-38-27-555Z"
}
