{
  "url": "https://kkstories.com",
  "auditedAt": "2026-07-18T13:29:11.771Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete representative audit of six public paths/templates. Not covered: registration submission, authenticated profile/dashboard, story submission, PDF download completion and destructive account actions because they require an account or mutate server state.",
  "page": {
    "appType": "mpa",
    "framework": "Server-rendered MPA (framework not exposed)",
    "notes": "Malayalam adult-fiction catalog with library, story, discussion and authentication templates; dark by default with a light preference/theme."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "layout-metrics",
    "evaluate-probe",
    "trace",
    "har",
    "lighthouse",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "Modern Web Guidance 0.0.172"
  ],
  "guidanceConsulted": [
    "dark-mode",
    "accessibility",
    "size-aware-styling",
    "optimize-image-priority",
    "privacy",
    "security",
    "forms",
    "passkeys",
    "deliver-optimized-decorative-images",
    "html",
    "navigation-drawer"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Homepage at desktop width",
      "condition": "desktop",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Homepage at 360x800",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F02",
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-light-pref.png",
      "caption": "Homepage follows light system preference",
      "condition": "prefers-color-scheme: light",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-forced-colors.png",
      "caption": "Homepage remains visible in forced colors",
      "condition": "forced-colors: active",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/library-mobile.png",
      "caption": "Library mobile layout",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F03"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/story-mobile.png",
      "caption": "Story detail mobile layout",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/discussion-mobile.png",
      "caption": "Discussion mobile layout",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/login-mobile.png",
      "caption": "Login form mobile layout",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/login-invalid.png",
      "caption": "Native invalid login state after empty submission",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/404-mobile.png",
      "caption": "Bare server 404 with no recovery navigation",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F04",
        "F17"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Homepage layout metrics: no overflow, CLS 0, one 154 ms task",
      "condition": "viewport: 360x800",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/story-layout.json",
      "caption": "Story layout metrics: no overflow and CLS 0",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/library-layout.json",
      "caption": "Library layout metrics: no overflow and CLS 0",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Rendered homepage HTML and CSS",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/story-dom.json",
      "caption": "Rendered story HTML and CSS",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/login-probe.json",
      "caption": "Login labels, autocomplete and auth probe",
      "condition": "default",
      "findingIds": [
        "F16",
        "F19"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "Semantic, metadata, responsive-technique and target probe",
      "condition": "default",
      "findingIds": [
        "F01",
        "F03",
        "F09",
        "F13",
        "F18"
      ]
    },
    {
      "type": "other",
      "path": "evidence/story-probe.json",
      "caption": "Story metadata, structure and language probe",
      "condition": "default",
      "findingIds": [
        "F12",
        "F13",
        "F18"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/404-dom.json",
      "caption": "Rendered 404 document structure",
      "condition": "not-found route",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/login-invalid.json",
      "caption": "Native form validity results after empty submission",
      "condition": "invalid submission",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/runtime-focus-memory.json",
      "caption": "Focus and runtime memory metrics",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion-detail.json",
      "caption": "No active animations under reduced motion",
      "condition": "prefers-reduced-motion: reduce",
      "findingIds": []
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "DevTools performance trace",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "FCP/LCP and main-thread summary",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Network archive",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Network totals, third parties and weight offenders",
      "condition": "default",
      "findingIds": [
        "F05",
        "F10",
        "F15",
        "F20",
        "F21",
        "F22"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "Lighthouse performance, accessibility, best practices, SEO and agentic audit",
      "condition": "mobile",
      "findingIds": [
        "F05",
        "F06",
        "F07",
        "F08",
        "F10",
        "F15",
        "F19"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "Raw HTML vs rendered homepage comparison",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/story-discoverability.json",
      "caption": "Raw HTML vs rendered story comparison",
      "condition": "JavaScript disabled",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Security response-header audit",
      "condition": "default",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Cookie security audit",
      "condition": "default",
      "findingIds": [
        "F14"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Third-party origin probe",
      "condition": "default",
      "findingIds": [
        "F15",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Image delivery and alt-text probe",
      "condition": "default",
      "findingIds": [
        "F07",
        "F11",
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Client-side secret scan",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "Baseline heap snapshot; summary 84,880 nodes / 5.39 MB",
      "condition": "default",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "Post-load/repeated-interaction heap snapshot; summary 87,102 nodes / 5.63 MB",
      "condition": "after interaction",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/repeated-interaction-metrics.json",
      "caption": "100 mobile-menu toggles; heap and live-node metrics",
      "condition": "viewport: 360x800",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots-sitemap.json",
      "caption": "robots.txt and sitemap.xml responses",
      "condition": "crawler",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/guidance-searches.txt",
      "caption": "Pinned Modern Web Guidance searches for all 17 principles",
      "condition": "modern-web-guidance@0.0.172",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Default capture is dark and the prefers-color-scheme: light capture retints all primary surfaces and controls to a legible light palette.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light-pref.png",
        "evidence/home-forced-colors.png",
        "evidence/reduced-motion-detail.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Under prefers-reduced-motion: reduce, the detailed getAnimations() probe returned zero active animations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light-pref.png",
        "evidence/home-forced-colors.png",
        "evidence/reduced-motion-detail.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "The forced-colors capture keeps text, borders, links and controls distinguishable.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-light-pref.png",
        "evidence/home-forced-colors.png",
        "evidence/reduced-motion-detail.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The homepage CSS/DOM probe found no view-transition usage, while the primary browse journey crosses homepage, library and story routes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "No scroll-linked visual effect exists on the representative templates, so there is no scroll animation implementation to assess.",
      "reason": "No scroll-linked visual effect exists on the representative templates, so there is no scroll animation implementation to assess.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Audited interactions use native links, buttons, forms and document scrolling; DOM/CSS inspection found no custom pointer-drag surface fighting native behavior.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The mobile layout measured a 4,741px homepage, but the DOM/CSS probe found no scroll-state query or progress indicator.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "No tooltip, popover or floating menu requiring edge-aware anchoring exists on the audited paths.",
      "reason": "No tooltip, popover or floating menu requiring edge-aware anchoring exists on the audited paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Desktop and mobile screenshots show clear active navigation, strong section headings, a labelled mobile menu, and visually grouped story targets.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Load screenshots across six routes show content immediately with no viewport-blocking interstitial or consent wall.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "No modal, transient overlay or disclosure component appears on the audited paths.",
      "reason": "No modal, transient overlay or disclosure component appears on the audited paths.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Screenshots show a compact header and content-dominant cards; chrome does not obscure the reading/listing surfaces.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Homepage, library and story layout probes at 360px report scrollWidth=clientWidth=360 and zero horizontal overflow with viewport metadata present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/library-layout.json",
        "evidence/story-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The same story-card pattern appears across homepage and library, but the CSS probe found no @container rules.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/library-mobile.png"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Lighthouse target-size audits passed, controls are visibly sized for touch, and the keyboard focus probe reports a browser-visible outline.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/library-layout.json",
        "evidence/story-layout.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "The first viewport names KK Stories and exposes Search, Browse Stories and Submit story, with Latest Stories immediately below.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/library-mobile.png",
        "evidence/story-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "The browse journey completed from homepage to Library to a story detail/chapter surface; login is reachable and offers password recovery.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/library-mobile.png",
        "evidence/story-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The exercised invalid route renders only “Not Found” and a sentence, with no site navigation, search, home link or suggested recovery.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-mobile.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Lighthouse performance is 1.00; trace LCP/FCP is 724ms with 50.63ms TBT, while Lighthouse measured 1.6s LCP.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Homepage, library and story layout observers all report CLS 0 and no recorded shifts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Trace found one 100.63ms long task and 50.63ms total blocking time; Lighthouse performance scored 1.00.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "HAR measured 592,613 transferred bytes, including 489,530 image bytes; Lighthouse estimates 444 KiB cache and 349 KiB image-delivery savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "Lighthouse reports about 11 KiB unused CSS plus roughly 2 KiB each of unminified CSS and JavaScript.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "Lighthouse accessibility found every visible like count excluded from its aria-label, and a footer ad iframe without a title; the image probe also found one tracking image without alt.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "Lighthouse measured 3.71:1 for white text on #4f7cff on Search, Browse Stories, pagination and Go controls, below 4.5:1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The DOM probe found no h1 on the homepage; its hierarchy begins at H2 Latest Stories, although the story and login templates do have H1s.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Mobile screenshots show readable line lengths, unclipped Malayalam text, clear headings and consistent spacing across listing, story and discussion templates.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Three 360px layout probes show full reflow with no horizontal overflow; viewport scaling is not disabled and no caption-requiring media is present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "Lighthouse and HAR both record a 404 for https://kkstories.com/favicon.ico.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The image probe found 6 of 7 images without width/height, lazy loading or srcset; all six covers were oversized JPEGs.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Lighthouse found no deprecated API, paste prevention, notification/geolocation-on-load, vulnerable-library or BFCache failure; security cookie issues are recorded under the dedicated security principle.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Homepage, story and login probes each show descriptive titles and non-empty meta descriptions.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/robots-sitemap.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "All 94 homepage links have hrefs, none use generic link text, viewport metadata is present, and robots.txt allows public paths.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/robots-sitemap.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The story loaded at non-www kkstories.com but declares https://www.kkstories.com/... as canonical, adding an avoidable host redirect/duplicate signal.",
      "pathIds": [
        "story"
      ],
      "artifacts": [
        "evidence/story-probe.json",
        "evidence/robots-sitemap.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The homepage has Open Graph metadata but zero JSON-LD blocks; the story template correctly includes Book and BreadcrumbList JSON-LD.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "Header evidence shows HTTPS, HSTS and other defenses but no CSP; cookie evidence found ts_popunder cookies with SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "Tracker evidence found 9 third-party origins; HAR counted 11 third-party requests and 72,354 transferred bytes, while Lighthouse observed four third-party cookies.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The login probe found correct username/current-password autofill and recovery, but no WebAuthn/PublicKeyCredential flow.",
      "pathIds": [
        "login"
      ],
      "artifacts": [
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Headers directly confirm HSTS, nosniff, X-Frame-Options DENY, same-origin Referrer-Policy and a restrictive Permissions-Policy; the CSP gap is linked under secure transport.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/trackers.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Discoverability found server-rendered HTML rather than a JS shell: 79% homepage and 56% story content coverage, with title/description and story H1 available without JavaScript.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/story-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Representative mobile screenshots show stable menus/forms with no clipped overlays; scripts are deferred/async except a small body-end first-party script.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/story-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "This server-rendered content site is not presented as an installable application; offline installability is contextual and not required for its reading journey.",
      "reason": "This server-rendered content site is not presented as an installable application; offline installability is contextual and not required for its reading journey.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The real 404 response lacks viewport metadata, styling, navigation and retry/search options.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/404-dom.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The homepage and Malayalam story both declare html lang=\"en\" while Open Graph says ml_IN and most visible text is Malayalam; the CSS probe found no logical-property usage.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "The representative public pages display no locale-sensitive dates, currency, numbers or durations.",
      "reason": "The representative public pages display no locale-sensitive dates, currency, numbers or durations.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "The representative pages expose no scheduled events or time-zone-sensitive values.",
      "reason": "The representative pages expose no scheduled events or time-zone-sensitive values.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Six initial-load route captures show no consent nag, confirmshaming, forced account wall or disguised primary action; commercial tracking is separately reported as a privacy issue.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/login-invalid.json",
        "evidence/login-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "Empty login submission invokes native required-field validation with “Please fill in this field”; labels remain visible and focus stays on the username field.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/login-invalid.json",
        "evidence/login-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "Lighthouse flags autocomplete=\"search\" as invalid; login fields correctly use username and current-password.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "No checkout, subscription, payment, cancellation or sensitive account-management flow was present; login was assessed separately.",
      "reason": "No checkout, subscription, payment, cancellation or sensitive account-management flow was present; login was assessed separately.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "Six covers display at 124px but have natural widths around 454–472px, have no responsive sources, and account for most of the 489,530 image bytes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "The page contacts 9 third-party origins, including multiple tsyndicate scripts, pixel syncs and analytics requests before any ad interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct artifact inspection and targeted browser probe against the mapped check.",
      "evidence": "HAR attributes 72,354 bytes and 11 requests to third parties; the ad SDK is also the largest script group.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "No developer intent or agent-facing transaction surface is declared; the emerging WebMCP opportunity is therefore out of scope.",
      "reason": "No developer intent or agent-facing transaction surface is declared; the emerging WebMCP opportunity is therefore out of scope.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and DOM feature inventory across representative templates.",
      "evidence": "No developer intent for an AI-assisted feature is declared; built-in inference is optional for this reading site.",
      "reason": "No developer intent for an AI-assisted feature is declared; built-in inference is optional for this reading site.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "A 100-toggle mobile-menu probe returned aria-expanded=false and only modest one-window growth (2.69MB to 2.82MB); independent heap summaries differed by about 4.4%, not evidence of unbounded retention.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot",
        "evidence/repeated-interaction-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "The page contains roughly 600–674 live elements; baseline heap summary is 5.39MB across 84,880 heap nodes, proportionate for the rendered listing and ads.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot",
        "evidence/repeated-interaction-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Direct browser evidence across the representative path set.",
      "evidence": "After 100 menu toggles the control returned to its initial collapsed state and the live DOM stayed bounded (626 to 672 nodes, with late ad loading included); no progressive per-toggle growth was observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot",
        "evidence/repeated-interaction-metrics.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08",
        "F09"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F11"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14",
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F20",
        "F21",
        "F22"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No developer intent or agent-facing transaction surface is declared; the emerging WebMCP opportunity is therefore out of scope. No developer intent for an AI-assisted feature is declared; built-in inference is optional for this reading site."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and latest-story listing; represents discovery, navigation, theme, performance, privacy and responsive layout.",
      "url": "https://kkstories.com/",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: light",
        "forced-colors: active",
        "prefers-reduced-motion: reduce",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "library",
      "description": "Library search/filter listing; represents browse and filtering.",
      "url": "https://kkstories.com/library/",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "story",
      "description": "Story detail page; represents article metadata, reading and chapter navigation.",
      "url": "https://kkstories.com/story/kaalabhramsham/",
      "conditions": [
        "viewport: 360x800",
        "JavaScript disabled crawler comparison"
      ],
      "result": "issues"
    },
    {
      "id": "discussion",
      "description": "Discussion listing; represents community content and long-form mixed-language text.",
      "url": "https://kkstories.com/discussion/",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "login",
      "description": "Login form; represents authentication, labels, autofill and invalid-input recovery.",
      "url": "https://kkstories.com/login/",
      "conditions": [
        "viewport: 360x800",
        "empty form submission"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Deliberately invalid route; represents HTTP failure recovery.",
      "url": "https://kkstories.com/definitely-not-a-real-page/",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "low",
      "confidence": "high",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "directional-navigation-transitions",
      "guidanceCategory": "user-experience",
      "summary": "Route and state changes are abrupt rather than continuity-preserving.",
      "evidence": "The homepage CSS/DOM probe found no view-transition usage, while the primary browse journey crosses homepage, library and story routes.",
      "suggestedFix": "Add cross-document View Transitions for same-origin navigation, with a reduced-motion fallback.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F02",
      "severity": "low",
      "confidence": "high",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-progress-indicator",
      "guidanceCategory": "user-experience",
      "summary": "Long pages do not provide scroll-position feedback.",
      "evidence": "The mobile layout measured a 4,741px homepage, but the DOM/CSS probe found no scroll-state query or progress indicator.",
      "suggestedFix": "Add a lightweight declarative scroll progress affordance on long listing and story pages.",
      "effort": "small",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/home-mobile.png"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience",
      "summary": "Repeated card components rely on viewport layout rather than container-aware adaptation.",
      "evidence": "The same story-card pattern appears across homepage and library, but the CSS probe found no @container rules.",
      "suggestedFix": "Give reusable card/list regions a containment context and adapt card internals with size container queries.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/library-mobile.png"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F04",
      "severity": "medium",
      "confidence": "high",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "summary": "The not-found state is a dead end.",
      "evidence": "The exercised invalid route renders only “Not Found” and a sentence, with no site navigation, search, home link or suggested recovery.",
      "suggestedFix": "Render the normal shell on 404 pages and offer Home, Library and search recovery actions.",
      "effort": "small",
      "artifacts": [
        "evidence/404-mobile.png"
      ],
      "pathId": "not-found",
      "url": "https://kkstories.com/definitely-not-a-real-page/"
    },
    {
      "id": "F05",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "summary": "Image delivery and cache lifetimes waste most of the page transfer.",
      "evidence": "HAR measured 592,613 transferred bytes, including 489,530 image bytes; Lighthouse estimates 444 KiB cache and 349 KiB image-delivery savings.",
      "suggestedFix": "Resize and encode covers responsively, lazy-load below-fold covers, and set durable immutable caching for fingerprinted/static assets.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F06",
      "severity": "low",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "summary": "The page ships avoidable unused and unminified CSS/JS.",
      "evidence": "Lighthouse reports about 11 KiB unused CSS plus roughly 2 KiB each of unminified CSS and JavaScript.",
      "suggestedFix": "Purge unused selectors and minify production CSS/JS; load page-specific code only where needed.",
      "effort": "small",
      "artifacts": [
        "evidence/lighthouse.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F07",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Repeated like controls and an advertising frame have broken accessible naming.",
      "evidence": "Lighthouse accessibility found every visible like count excluded from its aria-label, and a footer ad iframe without a title; the image probe also found one tracking image without alt.",
      "suggestedFix": "Include visible count text in each accessible name, title the iframe (or make it presentational), and give decorative pixels empty alt.",
      "effort": "small",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/images.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F08",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Primary blue controls do not meet text contrast minimums.",
      "evidence": "Lighthouse measured 3.71:1 for white text on #4f7cff on Search, Browse Stories, pagination and Go controls, below 4.5:1.",
      "suggestedFix": "Darken the blue control surface or use a darker foreground so normal-size text reaches at least 4.5:1 in every theme.",
      "effort": "small",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-mobile.png"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F09",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "The homepage skips its top-level heading.",
      "evidence": "The DOM probe found no h1 on the homepage; its hierarchy begins at H2 Latest Stories, although the story and login templates do have H1s.",
      "suggestedFix": "Add a concise page-specific H1 and retain the existing logical H2/H3 sequence.",
      "effort": "trivial",
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F10",
      "severity": "low",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "A missing favicon produces a console/network error on every load.",
      "evidence": "Lighthouse and HAR both record a 404 for https://kkstories.com/favicon.ico.",
      "suggestedFix": "Publish the referenced favicon or remove/fix the stale reference.",
      "effort": "trivial",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/home-summary.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "Cover images lack intrinsic dimensions and responsive delivery.",
      "evidence": "The image probe found 6 of 7 images without width/height, lazy loading or srcset; all six covers were oversized JPEGs.",
      "suggestedFix": "Emit width and height, srcset/sizes, loading=lazy below the fold, and AVIF/WebP alternatives.",
      "effort": "medium",
      "artifacts": [
        "evidence/images.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F12",
      "severity": "low",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "Story canonicals use a different host form from the delivered URL.",
      "evidence": "The story loaded at non-www kkstories.com but declares https://www.kkstories.com/... as canonical, adding an avoidable host redirect/duplicate signal.",
      "suggestedFix": "Standardise redirects, sitemap URLs, Open Graph URLs and canonical links on one host form.",
      "effort": "small",
      "artifacts": [
        "evidence/story-probe.json",
        "evidence/robots-sitemap.json"
      ],
      "pathId": "story",
      "url": "https://kkstories.com/story/kaalabhramsham/"
    },
    {
      "id": "F13",
      "severity": "low",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "The homepage lacks Organization/WebSite structured data.",
      "evidence": "The homepage has Open Graph metadata but zero JSON-LD blocks; the story template correctly includes Book and BreadcrumbList JSON-LD.",
      "suggestedFix": "Add accurate WebSite/Organization JSON-LD on the homepage, including the canonical URL and search action where appropriate.",
      "effort": "small",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F14",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "summary": "The main document has no Content-Security-Policy and sets SameSite=None popunder cookies.",
      "evidence": "Header evidence shows HTTPS, HSTS and other defenses but no CSP; cookie evidence found ts_popunder cookies with SameSite=None.",
      "suggestedFix": "Deploy a nonce/hash-based CSP, minimise third-party script origins, and use Lax/Strict unless cross-site cookie delivery is essential.",
      "effort": "medium",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F15",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "summary": "The homepage makes a disproportionate advertising/tracking footprint.",
      "evidence": "Tracker evidence found 9 third-party origins; HAR counted 11 third-party requests and 72,354 transferred bytes, while Lighthouse observed four third-party cookies.",
      "suggestedFix": "Remove popunder/tracking vendors where possible, load ads only after informed choice, partition necessary state, and audit every retained third party.",
      "effort": "medium",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/lighthouse.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F16",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "passkeys",
      "summary": "Authentication is password-only.",
      "evidence": "The login probe found correct username/current-password autofill and recovery, but no WebAuthn/PublicKeyCredential flow.",
      "suggestedFix": "Offer passkey registration and sign-in alongside the existing password fallback.",
      "effort": "large",
      "artifacts": [
        "evidence/login-probe.json"
      ],
      "pathId": "login",
      "url": "https://kkstories.com/login/"
    },
    {
      "id": "F17",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "summary": "HTTP failure handling falls outside the usable site experience.",
      "evidence": "The real 404 response lacks viewport metadata, styling, navigation and retry/search options.",
      "suggestedFix": "Use a responsive branded 404 template with clear recovery links and preserve the requested context where possible.",
      "effort": "small",
      "artifacts": [
        "evidence/404-mobile.png",
        "evidence/404-dom.json"
      ],
      "pathId": "not-found",
      "url": "https://kkstories.com/definitely-not-a-real-page/"
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "built-in-ai",
      "summary": "Malayalam pages are declared as English and styles are not writing-mode resilient.",
      "evidence": "The homepage and Malayalam story both declare html lang=\"en\" while Open Graph says ml_IN and most visible text is Malayalam; the CSS probe found no logical-property usage.",
      "suggestedFix": "Declare lang=\"ml\" on Malayalam-first pages (or mark language runs precisely) and migrate directional spacing to logical properties.",
      "effort": "small",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/story-probe.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F19",
      "severity": "low",
      "confidence": "high",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "guidanceId": "forms",
      "guidanceCategory": "forms",
      "summary": "The global search field uses an invalid autocomplete token.",
      "evidence": "Lighthouse flags autocomplete=\"search\" as invalid; login fields correctly use username and current-password.",
      "suggestedFix": "Remove the invalid token from search or use autocomplete=\"off\" where justified; retain valid login tokens.",
      "effort": "trivial",
      "artifacts": [
        "evidence/lighthouse.json",
        "evidence/login-probe.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "user-experience",
      "summary": "Below-fold covers are oversized legacy JPEGs.",
      "evidence": "Six covers display at 124px but have natural widths around 454–472px, have no responsive sources, and account for most of the 489,530 image bytes.",
      "suggestedFix": "Generate right-sized AVIF/WebP variants and let srcset/sizes select the smallest adequate image.",
      "effort": "medium",
      "artifacts": [
        "evidence/images.json",
        "evidence/home-summary.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F21",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "summary": "Advertising code performs avoidable background network work.",
      "evidence": "The page contacts 9 third-party origins, including multiple tsyndicate scripts, pixel syncs and analytics requests before any ad interaction.",
      "suggestedFix": "Defer nonessential vendor code until consent/visibility, batch analytics, and remove duplicate pixel syncs.",
      "effort": "medium",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "summary": "Third-party scripts and pixels consume a large share of a simple text listing.",
      "evidence": "HAR attributes 72,354 bytes and 11 requests to third parties; the ad SDK is also the largest script group.",
      "suggestedFix": "Set and enforce a third-party byte/request budget, lazy-load below-fold ads and cache or self-host permitted static dependencies.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-summary.json"
      ],
      "pathId": "home",
      "url": "https://kkstories.com/"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Remove or gate invasive third-party advertising/tracking and deploy CSP",
      "priority": 1,
      "findingIds": [
        "F14",
        "F15",
        "F21",
        "F22"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Fix accessible names, iframe title and control contrast",
      "priority": 2,
      "findingIds": [
        "F07",
        "F08"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Correct page language and resilient directional CSS",
      "priority": 3,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "translator",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Optimise and responsively deliver cover images",
      "priority": 4,
      "findingIds": [
        "F05",
        "F11",
        "F20"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Create a useful branded failure-recovery page",
      "priority": 5,
      "findingIds": [
        "F04",
        "F17"
      ],
      "guidanceId": "persistent-toast-notifications",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Add an H1 and align canonical/structured metadata",
      "priority": 6,
      "findingIds": [
        "F09",
        "F12",
        "F13"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Offer passkey authentication",
      "priority": 7,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Add container-aware cards and navigation continuity",
      "priority": 8,
      "findingIds": [
        "F01",
        "F02",
        "F03"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Clean production assets and form metadata",
      "priority": 9,
      "findingIds": [
        "F06",
        "F10",
        "F19"
      ],
      "guidanceId": "html",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 1500,
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-18T13-29-11-771Z"
}
