{
  "url": "https://www.aftonbladet.se",
  "auditedAt": "2026-07-20T05:45:00.000Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete report across six representative public paths. Authenticated account actions, paid checkout completion and destructive account actions were not exercised because they require credentials/payment; their public entry surfaces were inspected.",
  "page": {
    "appType": "hybrid",
    "framework": "Astro-rendered MPA with React/web-component islands",
    "notes": "Large Swedish news publication with server-rendered homepage, section, article and search templates; a cross-origin Schibsted consent iframe appears on first load."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "heap-summary",
    "lighthouse",
    "curl robots/sitemap",
    "modern-web-guidance@0.0.172"
  ],
  "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/article-discoverability-crawler.png",
      "caption": "Audit evidence: article-discoverability-crawler.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-rendered.png",
      "caption": "Audit evidence: article-discoverability-rendered.png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/article-discoverability.json",
      "caption": "Audit evidence: article-discoverability.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/article-links.json",
      "caption": "Audit evidence: article-links.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/article-metadata.json",
      "caption": "Audit evidence: article-metadata.json",
      "findingIds": [
        "F13"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/article-news-desktop.png",
      "caption": "Audit evidence: article-news-desktop.png",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/article-news-mobile.png",
      "caption": "Audit evidence: article-news-mobile.png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "Audit evidence: cookies.json",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/coverage-manifest.json",
      "caption": "Audit evidence: coverage-manifest.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/dark-mode-probe.json",
      "caption": "Audit evidence: dark-mode-probe.json",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "other",
      "path": "evidence/evidence-plan.json",
      "caption": "Audit evidence: evidence-plan.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-ids.txt",
      "caption": "Audit evidence: guidance-ids.txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-list.json",
      "caption": "Audit evidence: guidance-list.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-queries.txt",
      "caption": "Audit evidence: guidance-queries.txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-retrieved.md",
      "caption": "Audit evidence: guidance-retrieved.md",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/guidance-search-results.json",
      "caption": "Audit evidence: guidance-search-results.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "Audit evidence: headers.json",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "Audit evidence: heap-baseline.json",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-interaction.json",
      "caption": "Audit evidence: heap-post-interaction.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "Audit evidence: home-dark.png",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "Audit evidence: home-desktop.png",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "Audit evidence: home-discoverability-crawler.png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "Audit evidence: home-discoverability-rendered.png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "Audit evidence: home-discoverability.json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "Audit evidence: home-dom.json",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "Audit evidence: home-mobile-layout.json",
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "Audit evidence: home-mobile.png",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "Audit evidence: home-summary.json",
      "findingIds": [
        "F09",
        "F10",
        "F14",
        "F18",
        "F20",
        "F21"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "Audit evidence: home-trace-summary.json",
      "findingIds": [
        "F07"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "Audit evidence: home-trace.json",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "Audit evidence: home.har",
      "findingIds": [
        "F09",
        "F18",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "Audit evidence: images.json",
      "findingIds": [
        "F11",
        "F15",
        "F19"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-article-summary.json",
      "caption": "Audit evidence: lighthouse-article-summary.json",
      "findingIds": [
        "F07",
        "F09",
        "F10",
        "F12",
        "F13",
        "F14",
        "F15"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-article.json",
      "caption": "Audit evidence: lighthouse-article.json",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/lighthouse-home-summary.json",
      "caption": "Audit evidence: lighthouse-home-summary.json",
      "findingIds": [
        "F07",
        "F08",
        "F09",
        "F10",
        "F11",
        "F14",
        "F15",
        "F16"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "Audit evidence: lighthouse-home.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/login-probe.json",
      "caption": "Audit evidence: login-probe.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/not-found.png",
      "caption": "Audit evidence: not-found.png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "Audit evidence: platform-probe.json",
      "findingIds": [
        "F03",
        "F13"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "Audit evidence: recon.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion-probe.json",
      "caption": "Audit evidence: reduced-motion-probe.json",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots-headers.txt",
      "caption": "Audit evidence: robots-headers.txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "Audit evidence: robots.txt",
      "findingIds": [
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/search-desktop.png",
      "caption": "Audit evidence: search-desktop.png",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "other",
      "path": "evidence/search-form-probe.json",
      "caption": "Audit evidence: search-form-probe.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/search-results-probe.json",
      "caption": "Audit evidence: search-results-probe.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "Audit evidence: secrets.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/section-desktop.png",
      "caption": "Audit evidence: section-desktop.png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap-headers.txt",
      "caption": "Audit evidence: sitemap-headers.txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "Audit evidence: sitemap.xml",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/target-size-probe.json",
      "caption": "Audit evidence: target-size-probe.json",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "Audit evidence: trackers.json",
      "findingIds": [
        "F18",
        "F20"
      ]
    }
  ],
  "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": "Direct evidence from the listed audit artifacts",
      "evidence": "Under emulated prefers-color-scheme: dark, matchMedia was true while the body remained rgb(247,247,247) with dark text and the computed color-scheme was normal.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/dark-mode-probe.json",
        "evidence/home-dark.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The reduced-motion evaluate probe confirmed the preference and still found eight running animations, each with a 1,900 ms duration.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/reduced-motion-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse contrast audits on article/mobile navigation",
      "evidence": "Article Lighthouse found normal text below 4.5:1 in navigation, breadcrumbs and the privacy utility link.",
      "pathIds": [
        "article-news"
      ],
      "artifacts": [
        "evidence/lighthouse-article-summary.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "medium",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The platform probe found no view-transition CSS or authored transition rule across the MPA navigation surface.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "CSS feature probe and layout long-task observation",
      "evidence": "No authored scroll-linked animation was present, no scroll-timeline rules were found, and the layout capture observed no long tasks during the inspection.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "DOM interaction and target inspection",
      "evidence": "Carousels expose explicit previous/next controls and the inspected reading/navigation journey did not depend on custom pointer-only gestures.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/target-size-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Visual inspection of homepage and article navigation",
      "evidence": "Persistent masthead navigation, section labels and article breadcrumbs maintain orientation across the long editorial surfaces.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/article-news-desktop.png"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "Overlay/DOM semantics inspection",
      "evidence": "No tooltip or edge-positioned popover was required in the exercised journeys; modal surfaces use dialog semantics rather than manually positioned tooltip chrome.",
      "pathIds": [
        "home",
        "search"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/login-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Representative navigation and recovery screenshots",
      "evidence": "Section labels, prominent linked cards, search result grouping and the 404 return action clearly indicate where attention moved next.",
      "pathIds": [
        "section",
        "search",
        "not-found"
      ],
      "artifacts": [
        "evidence/section-desktop.png",
        "evidence/search-results-probe.json",
        "evidence/not-found.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "Desktop and 360 px screenshots show the cookie settings dialog covering almost the whole viewport before any interaction; mobile controls are pinned over scrollable consent copy.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/article-news-desktop.png",
        "evidence/search-desktop.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "pass",
      "confidence": "high",
      "method": "DOM semantics probe",
      "evidence": "The application exposes a native dialog and form method=dialog for modal dismissal; no ad-hoc transient popover was found in the tested surfaces.",
      "pathIds": [
        "home",
        "search"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/search-form-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop/mobile screenshots",
      "evidence": "Outside the consent interruption, the templates use compact masthead chrome and devote the page body to linked editorial content.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-news-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP layout at 360x800 plus mobile screenshots",
      "evidence": "The mobile layout reported scrollWidth=clientWidth=360, horizontalOverflowPx=0 and a valid viewport meta tag.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/article-news-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "CSSOM feature probe and cross-viewport screenshots",
      "evidence": "The platform probe found eight CSS container rules, and homepage/article compositions reflow from desktop to 360 px without overflow.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-mobile.png",
        "evidence/article-news-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The target-size probe found 21 of 75 visible interactive elements below 24 px in at least one dimension, including “Läs mer” at 43×14 and multiple footer links at 18 px high.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/target-size-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "First-viewport and heading/link inspection",
      "evidence": "The masthead, prominent news cards, section labels and descriptive article title make the publication and reading/discovery actions clear.",
      "pathIds": [
        "home",
        "section",
        "article-news"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/section-desktop.png",
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Search and article walkthrough",
      "evidence": "A populated query returned grouped article, video, podcast and tag results with real destination links; a selected news article rendered its headline and body metadata.",
      "pathIds": [
        "search",
        "article-news"
      ],
      "artifacts": [
        "evidence/search-results-probe.json",
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Intentional unknown-route test",
      "evidence": "The 404 state clearly says the page cannot be found, shows the failed URL, and provides a prominent return-to-home action.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/not-found.png"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "Mobile Lighthouse measured homepage LCP 6.3 s and CLS 0.298; the article also had LCP 6.3 s. The raw-CDP trace corroborated a 5.07 s LCP.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The mobile layout observer measured CLS 0.153 with repeated shifts between 3.3 and 4.1 seconds; Lighthouse measured 0.298 and reported 15 layout shifts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Raw CDP trace and Lighthouse TBT",
      "evidence": "The trace found one 71.95 ms long task and 21.95 ms TBT; Lighthouse measured 20-30 ms TBT, indicating a responsive main thread despite slow loading.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The HAR captured 131 requests and 1.50 MB transferred. Lighthouse estimated 328 KiB homepage and 924 KiB article cache savings, plus up to 1,070 ms render-blocking savings on the article.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "Lighthouse estimated 275 KiB unused JavaScript on the homepage and 182 KiB on the article; CMP, advertising, React and article bundles were leading sources.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "Lighthouse failed the iframe title audit on the homepage, and the image primitive reported 19 images without alt text (some decorative, but not all are clearly suppressed from accessibility APIs).",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "Lighthouse measured white-on-red mobile navigation at 3.9:1 and article breadcrumb red-on-dark at 4.27:1; the data-controller “Läs mer” link had only 2.41:1 contrast against surrounding text.",
      "pathIds": [
        "article-news"
      ],
      "artifacts": [
        "evidence/lighthouse-article-summary.json",
        "evidence/lighthouse-article.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The homepage has no h1. On the article, #skipNavigation links to #main but the metadata probe found no matching target, and Lighthouse failed the skip-link audit.",
      "pathIds": [
        "article-news"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/article-metadata.json",
        "evidence/lighthouse-article-summary.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Desktop/mobile visual inspection",
      "evidence": "Headline and body typography remains readable and reflows without clipping at 360 px; no horizontal overflow was measured.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/article-news-mobile.png",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Mobile reflow, viewport and target-size probes",
      "evidence": "Reflow and scaling are allowed, but 21 visible controls were below 24 px in at least one dimension.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/target-size-probe.json",
        "evidence/home-mobile-layout.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "HAR and both Lighthouse runs recorded three HTTP 400 responses from the Schibsted session/user-context endpoints, surfaced as browser console errors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The image primitive found 7 images without width/height and 8 oversized images; Lighthouse independently failed its unsized-images audit.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse best-practices and platform probe",
      "evidence": "Best-practices scored 0.96 on both tested templates; no permission prompt, paste prevention or deprecated API misuse surfaced in the exercised paths.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json",
        "evidence/platform-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered and raw metadata comparison",
      "evidence": "Homepage and article titles/descriptions are present in rendered DOM and raw server HTML; the article title and description accurately match visible content.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/article-discoverability.json",
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "Lighthouse SEO found one link whose text is only “Läs mer”; otherwise viewport, crawlable hrefs and robots access passed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/robots.txt"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Canonical, robots, status and sitemap inspection",
      "evidence": "Both representative public pages returned 200; the article has a self-canonical, robots permits indexing, and robots.txt declares current sitemap locations.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/article-metadata.json",
        "evidence/robots.txt",
        "evidence/sitemap.xml"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "JSON-LD/Open Graph inspection",
      "evidence": "The article provides matching Open Graph metadata plus BreadcrumbList and NewsArticle JSON-LD with headline, dates, authors, publisher and policy links.",
      "pathIds": [
        "article-news"
      ],
      "artifacts": [
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The cookie primitive found abx2 without Secure and with SameSite=None for 365 days; _sp_su was Secure but also SameSite=None for 365 days.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/cookies.json",
        "evidence/headers.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The tracker primitive observed 20 third-party origins including ib.adnxs.com. HAR attributed 70 requests and 1.02 MB to third-party origins during the load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Permissions header and public login-surface probe",
      "evidence": "No permission prompt appeared on load; Permissions-Policy disables most sensitive capabilities and scopes geolocation to self. Account handling is delegated to the Schibsted identity service rather than embedded password fields.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/login-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "pass",
      "confidence": "high",
      "method": "Security-header primitive",
      "evidence": "CSP frame-ancestors, HSTS preload, nosniff, X-Frame-Options DENY, strict-origin referrer policy and a restrictive Permissions-Policy were all present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Raw HTML/no-JS discoverability comparison",
      "evidence": "Raw HTML retained 89% of homepage and 88% of article content words; neither route was a JS shell and title/description/article h1 survived without JavaScript.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/article-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Dialog semantics, responsive layout and representative route inspection",
      "evidence": "Dialog surfaces use platform semantics, the narrow viewport has no overflow, search results resolve predictably and no clipped menu blocked the tested journeys.",
      "pathIds": [
        "home",
        "search"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-mobile-layout.json",
        "evidence/search-results-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Site-type and manifest inspection",
      "evidence": "This is a public MPA news publication rather than an app-like task surface; installability is not required for its core reading journey.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "reason": "This is a public MPA news publication rather than an app-like task surface; installability is not required for its core reading journey."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Intentional 404 recovery test",
      "evidence": "The unknown route rendered a complete explanatory 404 with a direct route back to the homepage rather than a blank shell or spinner.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/not-found.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "DOM language and responsive layout inspection",
      "evidence": "The document declares lang=sv, Swedish reading order is correct, and content reflows at 360 px without physical-width overflow.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/recon.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Rendered date and machine-readable time inspection",
      "evidence": "Swedish date labels are presented to readers while article publication and modification times are exposed as unambiguous ISO datetimes.",
      "pathIds": [
        "article-news"
      ],
      "artifacts": [
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "high",
      "method": "Article timestamp metadata inspection",
      "evidence": "Published and updated values include UTC Z offsets and visible localised clock labels, avoiding ambiguous stored timestamps.",
      "pathIds": [
        "article-news"
      ],
      "artifacts": [
        "evidence/article-metadata.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The modal gives “Godkänn alla” a filled primary treatment while “Avvisa personanpassad reklam” is outlined and marked “Betaltjänst”; the copy also says rejection costs 49 kr/month on ad-funded services.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Form inventory and journey inspection",
      "evidence": "The audited public search form has no required or destructive fields and therefore no representative invalid-submission error state to exercise.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/search-form-probe.json"
      ],
      "reason": "The audited public search form has no required or destructive fields and therefore no representative invalid-submission error state to exercise."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "pass",
      "confidence": "high",
      "method": "Search form DOM inspection",
      "evidence": "The only public text field is a query input named q; it does not request address, payment, identity or other data that needs a specialised autocomplete token.",
      "pathIds": [
        "search"
      ],
      "artifacts": [
        "evidence/search-form-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "Consent/commercial entry screenshot and login/account inspection",
      "evidence": "The public consent surface conflates rejection with a paid-services message and does not give accept/reject equal treatment.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/login-probe.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The image primitive found 8 oversized images, 6 legacy-format images, 3 without srcset and 4 below-fold images not lazy-loaded.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/images.json"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "The homepage loaded 75 scripts and contacted 20 third-party origins; scripts accounted for 778 KB transferred even while a consent wall prevented interaction with content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Direct evidence from the listed audit artifacts",
      "evidence": "Third-party origins transferred 1,017,537 of 1,496,094 bytes (68%) and made 70 of 131 requests; CMP, media, React CDN and ad SDK resources were major contributors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "pass",
      "confidence": "high",
      "method": "Raw HTML, JSON-LD and crawler policy inspection",
      "evidence": "News content is server-rendered and exposes detailed NewsArticle/BreadcrumbList JSON-LD; OAI-SearchBot is allowed while training crawlers are intentionally disallowed by policy.",
      "pathIds": [
        "home",
        "article-news"
      ],
      "artifacts": [
        "evidence/article-metadata.json",
        "evidence/robots.txt",
        "evidence/article-discoverability.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Product-surface and platform probe",
      "evidence": "No core reading or search task requires on-device inference; absence of a built-in model feature is not a failure for this publication surface.",
      "pathIds": [
        "home",
        "search"
      ],
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "reason": "No core reading or search task requires on-device inference; absence of a built-in model feature is not a failure for this publication surface."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Baseline and post-interaction heap summaries after 10 menu/scroll cycles",
      "evidence": "After repeated interaction, self size decreased from 20,251,863 to 19,978,678 bytes and node count decreased from 336,773 to 336,365; no retained-growth signal appeared.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-interaction.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Heap-summary proportionality review",
      "evidence": "The loaded, widget-heavy news homepage retained about 20.0 MB self size; the footprint remained stable after interaction and was proportionate to the rendered feed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-interaction.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Before/after heap constructor comparison",
      "evidence": "Node count fell after repeated menu/scroll interactions and neither summary exposed a growing Detached* constructor population among retained constructors.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/heap-baseline.json",
        "evidence/heap-post-interaction.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02",
        "F12"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13",
        "F06"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14",
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17",
        "F18"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F19",
        "F20",
        "F21"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and primary news-discovery surface; represents the front-page feed.",
      "url": "https://www.aftonbladet.se/",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "section",
      "description": "Sportbladet section/listing archetype; represents editorial section pages.",
      "url": "https://www.aftonbladet.se/sportbladet",
      "conditions": [
        "desktop 1440x1000"
      ],
      "result": "issues"
    },
    {
      "id": "article-news",
      "description": "News article archetype, including article metadata, reading structure and no-JS delivery.",
      "url": "https://www.aftonbladet.se/nyheter/a/q6Qj6L/en-dod-i-guldfirandet",
      "conditions": [
        "desktop 1440x1000",
        "mobile 360x800",
        "crawler without JavaScript"
      ],
      "result": "issues"
    },
    {
      "id": "article-sport",
      "description": "Sports article/media archetype, represented in route selection and cross-template Lighthouse/article evidence.",
      "url": "https://www.aftonbladet.se/sportbladet/fotboll/a/2pjQ94/zlatan-ibrahimovic-lamnar-fox-studion-forsta-och-sista-gangen",
      "conditions": [
        "link and template recon"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Primary search form and populated search-results journey.",
      "url": "https://www.aftonbladet.se/sok?q=Spanien",
      "conditions": [
        "form inspection",
        "populated results"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "HTTP failure/recovery state on an intentionally unknown URL.",
      "url": "https://www.aftonbladet.se/definitely-not-a-real-page-web-uplift",
      "conditions": [
        "desktop 1440x1000"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site exposes a manual theme control but does not follow the system dark preference.",
      "evidence": "Under emulated prefers-color-scheme: dark, matchMedia was true while the body remained rgb(247,247,247) with dark text and the computed color-scheme was normal.",
      "artifacts": [
        "evidence/dark-mode-probe.json",
        "evidence/home-dark.png"
      ],
      "suggestedFix": "Default the theme from prefers-color-scheme, declare color-scheme, and keep the manual control as an explicit user override.",
      "effort": "small"
    },
    {
      "id": "F02",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Animations continue when reduced motion is requested.",
      "evidence": "The reduced-motion evaluate probe confirmed the preference and still found eight running animations, each with a 1,900 ms duration.",
      "artifacts": [
        "evidence/reduced-motion-probe.json"
      ],
      "suggestedFix": "Use a prefers-reduced-motion: reduce query to remove non-essential animations and stop auto-advancing or looping motion.",
      "effort": "small"
    },
    {
      "id": "F03",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience",
      "severity": "low",
      "confidence": "medium",
      "summary": "Editorial route changes do not opt into View Transitions.",
      "evidence": "The platform probe found no view-transition CSS or authored transition rule across the MPA navigation surface.",
      "artifacts": [
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "Add @view-transition { navigation: auto } for eligible same-origin page changes, with reduced-motion handling.",
      "effort": "small"
    },
    {
      "id": "F04",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "A large consent wall obscures all editorial content on every tested primary path.",
      "evidence": "Desktop and 360 px screenshots show the cookie settings dialog covering almost the whole viewport before any interaction; mobile controls are pinned over scrollable consent copy.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/article-news-desktop.png",
        "evidence/search-desktop.png"
      ],
      "suggestedFix": "Replace the blocking first-load wall with a concise, content-preserving consent surface and keep detailed settings available on demand.",
      "effort": "large"
    },
    {
      "id": "F05",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "custom-button-actions",
      "guidanceCategory": "user-experience",
      "severity": "high",
      "confidence": "high",
      "summary": "The consent choice architecture makes rejection less clear and labels it as a paid option.",
      "evidence": "The modal gives “Godkänn alla” a filled primary treatment while “Avvisa personanpassad reklam” is outlined and marked “Betaltjänst”; the copy also says rejection costs 49 kr/month on ad-funded services.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Offer accept and reject at equal prominence, remove misleading paid-choice labeling from the reject action, and separate subscription offers from privacy consent.",
      "effort": "medium"
    },
    {
      "id": "F06",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Many interactive text links have touch areas below the minimum target height.",
      "evidence": "The target-size probe found 21 of 75 visible interactive elements below 24 px in at least one dimension, including “Läs mer” at 43×14 and multiple footer links at 18 px high.",
      "artifacts": [
        "evidence/target-size-probe.json"
      ],
      "suggestedFix": "Increase hit areas with padding or pseudo-element target expansion while preserving visual density and spacing between adjacent controls.",
      "effort": "small"
    },
    {
      "id": "F07",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Primary pages load slowly and the homepage is visually unstable.",
      "evidence": "Mobile Lighthouse measured homepage LCP 6.3 s and CLS 0.298; the article also had LCP 6.3 s. The raw-CDP trace corroborated a 5.07 s LCP.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json",
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ],
      "suggestedFix": "Prioritise the LCP candidate, reserve late-content space, reduce critical dependency delay, and monitor field LCP/CLS by template.",
      "effort": "large"
    },
    {
      "id": "F08",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "visually-stable-font-fallbacks",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Late content and animation cause substantial layout movement on the homepage.",
      "evidence": "The mobile layout observer measured CLS 0.153 with repeated shifts between 3.3 and 4.1 seconds; Lighthouse measured 0.298 and reported 15 layout shifts.",
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-home-summary.json"
      ],
      "suggestedFix": "Reserve dimensions for images, ads and delayed modules; use metric-compatible font fallbacks and avoid layout-affecting entrance motion.",
      "effort": "medium"
    },
    {
      "id": "F09",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "performance",
      "severity": "high",
      "confidence": "high",
      "summary": "Critical delivery is delayed by a large dependency graph and weak caching.",
      "evidence": "The HAR captured 131 requests and 1.50 MB transferred. Lighthouse estimated 328 KiB homepage and 924 KiB article cache savings, plus up to 1,070 ms render-blocking savings on the article.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har",
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json"
      ],
      "suggestedFix": "Shorten critical chains, cache immutable assets for longer, preconnect only essential origins, and prioritise the actual LCP resource.",
      "effort": "large"
    },
    {
      "id": "F10",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The initial load ships substantial JavaScript that is unused during the tested journey.",
      "evidence": "Lighthouse estimated 275 KiB unused JavaScript on the homepage and 182 KiB on the article; CMP, advertising, React and article bundles were leading sources.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Conditionally load CMP details, advertising/media SDKs and below-fold interactive bundles only when their surfaces become relevant.",
      "effort": "large"
    },
    {
      "id": "F11",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Some embedded and visual content lacks usable accessible names.",
      "evidence": "Lighthouse failed the iframe title audit on the homepage, and the image primitive reported 19 images without alt text (some decorative, but not all are clearly suppressed from accessibility APIs).",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/images.json"
      ],
      "suggestedFix": "Give meaningful frames a title, provide contextual alt text for editorial images, and use empty alt only for confirmed decorative images.",
      "effort": "small"
    },
    {
      "id": "F12",
      "pathId": "article-news",
      "url": "https://www.aftonbladet.se/nyheter/a/q6Qj6L/en-dod-i-guldfirandet",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "Navigation and utility text fail WCAG contrast requirements.",
      "evidence": "Lighthouse measured white-on-red mobile navigation at 3.9:1 and article breadcrumb red-on-dark at 4.27:1; the data-controller “Läs mer” link had only 2.41:1 contrast against surrounding text.",
      "artifacts": [
        "evidence/lighthouse-article-summary.json",
        "evidence/lighthouse-article.json"
      ],
      "suggestedFix": "Adjust the red/dark palette and utility-link styling to meet 4.5:1 for normal text and distinguish inline links beyond color.",
      "effort": "small"
    },
    {
      "id": "F13",
      "pathId": "article-news",
      "url": "https://www.aftonbladet.se/nyheter/a/q6Qj6L/en-dod-i-guldfirandet",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "severity": "medium",
      "confidence": "high",
      "summary": "The heading and skip-link structure is inconsistent across templates.",
      "evidence": "The homepage has no h1. On the article, #skipNavigation links to #main but the metadata probe found no matching target, and Lighthouse failed the skip-link audit.",
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/article-metadata.json",
        "evidence/lighthouse-article-summary.json"
      ],
      "suggestedFix": "Provide one descriptive h1 per page and make the skip link target a stable, focusable main landmark on every template.",
      "effort": "small"
    },
    {
      "id": "F14",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "Anonymous page loads generate repeated failed session requests and console errors.",
      "evidence": "HAR and both Lighthouse runs recorded three HTTP 400 responses from the Schibsted session/user-context endpoints, surfaced as browser console errors.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json"
      ],
      "suggestedFix": "Avoid requesting authenticated user context for anonymous sessions or handle expected anonymous responses without 400 network errors.",
      "effort": "small"
    },
    {
      "id": "F15",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several images do not reserve dimensions and some are oversized for display.",
      "evidence": "The image primitive found 7 images without width/height and 8 oversized images; Lighthouse independently failed its unsized-images audit.",
      "artifacts": [
        "evidence/images.json",
        "evidence/lighthouse-home-summary.json",
        "evidence/lighthouse-article-summary.json"
      ],
      "suggestedFix": "Emit intrinsic width/height (or an equivalent aspect-ratio) and request responsive image widths matched to rendered size.",
      "effort": "medium"
    },
    {
      "id": "F16",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "severity": "low",
      "confidence": "high",
      "summary": "A generic privacy link does not describe its destination.",
      "evidence": "Lighthouse SEO found one link whose text is only “Läs mer”; otherwise viewport, crawlable hrefs and robots access passed.",
      "artifacts": [
        "evidence/lighthouse-home-summary.json",
        "evidence/robots.txt"
      ],
      "suggestedFix": "Use destination-specific link text such as “Läs personuppgiftspolicyn”.",
      "effort": "trivial"
    },
    {
      "id": "F17",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "severity": "medium",
      "confidence": "high",
      "summary": "A long-lived first-party cookie is set without Secure and both observed cookies use SameSite=None.",
      "evidence": "The cookie primitive found abx2 without Secure and with SameSite=None for 365 days; _sp_su was Secure but also SameSite=None for 365 days.",
      "artifacts": [
        "evidence/cookies.json",
        "evidence/headers.json"
      ],
      "suggestedFix": "Set Secure on every production cookie and use Lax or Strict unless cross-site delivery is demonstrably required; shorten retention where possible.",
      "effort": "small"
    },
    {
      "id": "F18",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "severity": "medium",
      "confidence": "high",
      "summary": "The pre-consent page establishes a broad third-party and tracking footprint.",
      "evidence": "The tracker primitive observed 20 third-party origins including ib.adnxs.com. HAR attributed 70 requests and 1.02 MB to third-party origins during the load.",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Gate non-essential advertising and analytics until consent, consolidate vendors, batch measurement and remove origins that do not provide clear user value.",
      "effort": "large"
    },
    {
      "id": "F19",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image delivery still wastes resolution and misses basic loading optimisations.",
      "evidence": "The image primitive found 8 oversized images, 6 legacy-format images, 3 without srcset and 4 below-fold images not lazy-loaded.",
      "artifacts": [
        "evidence/images.json"
      ],
      "suggestedFix": "Use the existing image CDN to emit AVIF/WebP, complete srcsets and sizes, lazy-load below-fold media, and match source dimensions to layout.",
      "effort": "medium"
    },
    {
      "id": "F20",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The initial page does disproportionate background and third-party work before the reader engages.",
      "evidence": "The homepage loaded 75 scripts and contacted 20 third-party origins; scripts accounted for 778 KB transferred even while a consent wall prevented interaction with content.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json"
      ],
      "suggestedFix": "Defer advertising, media players, account context and below-fold widgets until consent, visibility or user intent makes them necessary.",
      "effort": "large"
    },
    {
      "id": "F21",
      "pathId": "home",
      "url": "https://www.aftonbladet.se/",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party code dominates the transferred page budget.",
      "evidence": "Third-party origins transferred 1,017,537 of 1,496,094 bytes (68%) and made 70 of 131 requests; CMP, media, React CDN and ad SDK resources were major contributors.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "suggestedFix": "Set a third-party byte/request budget, lazy-load media and ads, and enforce the budget per page template in monitoring.",
      "effort": "large"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Make the consent experience non-blocking, balanced and separate from paid offers",
      "priority": 1,
      "findingIds": [
        "F04",
        "F05"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Fix LCP, layout stability and critical resource delivery",
      "priority": 2,
      "findingIds": [
        "F07",
        "F08",
        "F09"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Defer and budget third-party, advertising and unused JavaScript",
      "priority": 3,
      "findingIds": [
        "F10",
        "F18",
        "F20",
        "F21"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Repair headings, skip navigation, names and contrast",
      "priority": 4,
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Respect system theme and reduced-motion preferences",
      "priority": 5,
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Optimise image sizing, formats and reserved dimensions",
      "priority": 6,
      "findingIds": [
        "F15",
        "F19"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Harden cookie attributes and retention",
      "priority": 7,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Increase undersized interactive target areas",
      "priority": 8,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Eliminate anonymous-session 400 errors",
      "priority": 9,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Use descriptive privacy-link text",
      "priority": 10,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Opt eligible editorial navigation into View Transitions",
      "priority": 11,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "cross-document-transitions",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 420,
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-20T05-38-38-285Z"
}
