{
  "url": "https://www.ladepeche.fr",
  "auditedAt": "2026-07-19T09:50:45.981Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage complete across 58 atomic checks. Representative coverage: homepage, article, section listing, agenda form, search results, 404 recovery, and account login entry. Excluded: paid checkout completion, authenticated account management, destructive actions, and locale variants because they require credentials/payment or do not exist publicly.",
  "page": {
    "appType": "mpa",
    "framework": "server-rendered multi-page site with legacy bundled JavaScript",
    "notes": "Public French regional news site. Strong server-rendered article/discoverability metadata; heavy ad, analytics, recommendation, identity, and media integrations."
  },
  "evidenceUsed": [
    "screenshot",
    "dom+computed-styles",
    "layout-metrics",
    "evaluate-probe",
    "discoverability",
    "trace",
    "har",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "images",
    "heap-summary",
    "lighthouse"
  ],
  "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",
    "custom-button-actions",
    "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": "other",
      "path": "evidence/agenda-form.json",
      "caption": "agenda form",
      "findingIds": [
        "F11"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/agenda-mobile.png",
      "caption": "agenda mobile",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-crawler.png",
      "caption": "article discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-rendered.png",
      "caption": "article discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/article-discoverability.json",
      "caption": "article discoverability",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/article-layout.json",
      "caption": "article layout",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/article-meta.json",
      "caption": "article meta",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-mobile.png",
      "caption": "article mobile",
      "findingIds": [
        "F03",
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/commercial-links.json",
      "caption": "commercial links",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F17",
        "F20"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.json",
      "caption": "heap baseline",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/heap-post-menu.json",
      "caption": "heap post menu",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-contrast.png",
      "caption": "home contrast",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop",
      "findingIds": [
        "F01",
        "F06"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images",
      "findingIds": [
        "F14",
        "F23"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-layout-mobile.json",
      "caption": "home layout mobile",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-motion.json",
      "caption": "home motion",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "home probe",
      "findingIds": [
        "F01",
        "F03",
        "F04",
        "F05",
        "F07",
        "F13",
        "F22"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary",
      "findingIds": [
        "F09",
        "F10",
        "F15",
        "F18",
        "F24",
        "F25"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace",
      "findingIds": []
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home",
      "findingIds": [
        "F09",
        "F18",
        "F25"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-article.json",
      "caption": "lighthouse article",
      "findingIds": [
        "F08",
        "F11",
        "F12",
        "F16"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home",
      "findingIds": [
        "F08",
        "F09",
        "F10",
        "F11",
        "F13",
        "F14",
        "F15",
        "F16",
        "F24"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/listing-layout.json",
      "caption": "listing layout",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/listing-mobile.png",
      "caption": "listing mobile",
      "findingIds": [
        "F07"
      ]
    },
    {
      "type": "other",
      "path": "evidence/login-probe.json",
      "caption": "login probe",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/not-found-mobile.png",
      "caption": "not found mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/not-found.json",
      "caption": "not found",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/platform.json",
      "caption": "platform",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/recon.json",
      "caption": "recon",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/routes.json",
      "caption": "routes",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/search-flow.json",
      "caption": "search flow",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/search-mobile.png",
      "caption": "search mobile",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/service-worker.json",
      "caption": "service worker",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers",
      "findingIds": [
        "F18",
        "F24"
      ]
    }
  ],
  "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": "Compared default/dark screenshots and inspected computed color-scheme and CSS media rules.",
      "evidence": "The dark-mode screenshot is byte-identical to the default screenshot, body remains white, computed color-scheme is normal, and CSS inspection found no prefers-color-scheme rule.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "Emulated reduced motion and inspected active animations and media rules.",
      "evidence": "Under prefers-reduced-motion: reduce, the probe found two running 1-second rotation animations and no prefers-reduced-motion CSS rules.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "medium",
      "method": "Compared high-contrast screenshot and checked content/control visibility.",
      "evidence": "The prefers-contrast screenshot retained visible text, borders, icons, and controls without clipping.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected cross-document templates and stylesheet features.",
      "evidence": "CSS inspection across the MPA templates found no view-transition declarations or view-transition-name usage.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected CSS for scroll timelines and observed representative pages for scroll-linked motion.",
      "evidence": "No scroll-linked/parallax/reveal motion was present, so there was no main-thread scroll-animation anti-pattern to replace.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected responsive navigation and CSS for custom gesture/pointer anti-patterns.",
      "evidence": "Navigation and content use native scrolling/taps; no custom pointermove gesture layer was observed.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected sticky header geometry and CSS scroll-state behavior.",
      "evidence": "The DOM reports a 120px sticky header, while CSS inspection found no scroll-state query, progress indicator, or shrinking-header behavior.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected DOM and representative screenshots for attached transient overlays.",
      "evidence": "No tooltip, attached popover, or edge-positioned transient overlay was present on the representative templates; the full-screen menu/search issue is judged under semantic overlays.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "reason": "No tooltip, attached popover, or edge-positioned transient overlay was present on the representative templates; the full-screen menu/search issue is judged under semantic overlays."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed breadcrumbs, sticky navigation, hierarchy, and search result transitions.",
      "evidence": "Breadcrumbs, current-section styling, sticky navigation, and clear search-result headings preserve orientation.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed first-load screenshots on five templates.",
      "evidence": "No modal consent wall or full-viewport interstitial obscured content on initial captures.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Counted dialog, popover, details, and fixed custom overlays.",
      "evidence": "The probe found visible fixed .search-overlay and .side-nav elements but zero dialog, popover, or details elements.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Reviewed first viewport screenshots and content displacement.",
      "evidence": "Desktop and mobile first-view screenshots show a large blank region between the 120px navigation and the lead story; the page prioritizes empty ad chrome over news content.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "medium",
      "method": "Measured 360px layout overflow on home, article, and listing.",
      "evidence": "At 360px, home/article/listing all reported scrollWidth=clientWidth=360 and zero horizontal overflow.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected CSS for container queries across reused templates.",
      "evidence": "CSS inspection found no @container or container-type usage across reused cards and navigation, although mobile layouts otherwise reflow.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "pass",
      "confidence": "medium",
      "method": "Focused the first interactive control, read outline, and reviewed target geometry.",
      "evidence": "The sampled focusable anchor had a visible auto 1px outline and primary mobile targets measured about 40–59px.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed first view and headings across home, article, listing, agenda, and search.",
      "evidence": "Home leads with a clearly labelled story, article has a descriptive H1, agenda/search have explicit H1s and controls.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "medium",
      "method": "Executed article reading, search results, agenda entry, and subscription/account entry paths.",
      "evidence": "Search returned 10,000 results with article links; article content loaded; agenda controls and account/subscribe destinations were reachable.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "medium",
      "method": "Loaded a real 404 route and inspected recovery links/search.",
      "evidence": "The 404 page clearly says the page does not exist and offers search, home/navigation, and subscription links.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Ran Lighthouse on home/article plus raw-CDP trace and layout observers.",
      "evidence": "Lighthouse measured LCP 13.5s on the homepage and 11.7s on the article, with performance scores of 0.56 and 0.57. The raw-CDP trace was fast in an unconstrained run, so the issue is specifically constrained mobile delivery.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "medium",
      "method": "Ran layout-shift observers at 360px and reviewed screenshots.",
      "evidence": "Home/article/listing layout observers all measured CLS 0 with no captured shifts.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "medium",
      "method": "Compared trace long tasks/TBT and Lighthouse TBT.",
      "evidence": "Trace TBT was 124ms with two long tasks; Lighthouse TBT was 160ms home and 80ms article, within a reasonable range.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Captured HAR and Lighthouse delivery diagnostics.",
      "evidence": "HAR recorded 123 requests and 2.83MB, with parser-blocking stylesheets and scripts; Lighthouse estimated 350ms render-blocking savings and 826KiB cache-lifetime savings.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Used Lighthouse code coverage estimates and HAR script weights.",
      "evidence": "Lighthouse estimated 380KiB unused JavaScript and 61KiB unused CSS on home; HAR shows 43 scripts, including 330KB Taboola and 187KB GTM.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Used Lighthouse accessibility audits and an agenda form label probe.",
      "evidence": "Lighthouse found unnamed home/account/social/share controls, untitled iframes, links without names, and images without alt. The agenda probe found visible text, checkbox, select, and date controls with no associated label or aria-label.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Used Lighthouse contrast calculations and screenshots.",
      "evidence": "Lighthouse found the white “ABONNÉS” label on #f2c94c at 1.58:1 and multiple red/white controls at 4.37:1, below the required 4.5:1.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected headings/landmarks/focus and Lighthouse accessibility tree.",
      "evidence": "The structure probe found an empty H1 and zero main elements on the homepage. Lighthouse reports an accessibility tree that is not well formed, although the sampled keyboard focus outline is visible.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed mobile home/article/listing screenshots and text wrapping.",
      "evidence": "Mobile screenshots show readable body/headline typography with clean wrapping and no clipping.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "medium",
      "method": "Measured 360px reflow, viewport policy, target geometry, and media/frame audits.",
      "evidence": "Viewport permits scaling (no maximum-scale/user-scalable=no), layouts reflow at 360px, and key targets are adequately sized.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "Read Lighthouse console errors and HAR HTTP failures.",
      "evidence": "Lighthouse captured a 404 for /cdn-cgi/challenge-platform/scripts/jsd/main.js and the HAR recorded it as aborted.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected doctype/charset and ran image primitive/Lighthouse asset audits.",
      "evidence": "The image primitive found all 100 img elements missing width/height, 57 missing srcset, 80 legacy-format images, and 14 oversized images; Lighthouse also failed unsized-image checks.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed Lighthouse best-practices/inspector audits and page prompt behavior.",
      "evidence": "Lighthouse best-practices scored 0.92; no deprecated API, paste prevention, or on-load permission prompt failure was reported.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected title and description on representative templates.",
      "evidence": "Home, article, agenda, and search have descriptive titles; public content templates include descriptions, with strong article metadata.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected links/viewport/robots and Lighthouse SEO audits.",
      "evidence": "Lighthouse found a LinkedIn share anchor without href on the article and multiple empty-name links on home and article. The viewport and robots configuration otherwise support indexing.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "medium",
      "method": "Fetched robots/sitemap status and inspected canonical/robots signals.",
      "evidence": "Main responses are 200, canonicals match, robots allows general crawling, and sitemap.xml returns 200.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "medium",
      "method": "Parsed article JSON-LD and Open Graph metadata.",
      "evidence": "The article has matching NewsArticle JSON-LD, breadcrumbs, canonical, Open Graph title/description/image, author and dates.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Captured main-document security headers and cookies.",
      "evidence": "Cookie inspection found 7 cookies, 7 reported insecure, including long-lived atauthority/atuserid; CSP is only “frame-ancestors”, providing no script/style XSS policy. HSTS is present.",
      "pathIds": [
        "home"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Captured trackers and HAR origin/request footprint.",
      "evidence": "Tracker capture saw 34 third-party origins and known Google Tag Manager, Facebook, and nine Taboola endpoints; HAR shows these parties among the largest scripts.",
      "pathIds": [
        "home"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected login fields and WebAuthn/passkey signals.",
      "evidence": "The login probe found correctly labeled username/current-password/new-password fields but no WebAuthn or passkey integration.",
      "pathIds": [
        "home"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Captured CSP, HSTS, framing, nosniff, referrer, and permissions headers.",
      "evidence": "Headers inspection found no X-Content-Type-Options, Referrer-Policy, or Permissions-Policy. Clickjacking protection and HSTS are present.",
      "pathIds": [
        "home"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "medium",
      "method": "Compared raw HTML with rendered DOM/screenshots on home/article.",
      "evidence": "Raw HTML contains 96% of rendered home words and 100% of article words; neither page is a JS shell.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed custom overlays and representative runtime states across mobile templates.",
      "evidence": "Representative mobile templates rendered menus/content without clipping or blank shells.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "Fetched manifest, registrations, and active worker source capabilities.",
      "evidence": "A manifest and service worker are registered, but the 311-byte worker only imports the Batch push SDK and has no fetch handler or CacheStorage usage.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "medium",
      "method": "Loaded a nonexistent route and inspected the recovery experience.",
      "evidence": "The deliberate 404 renders a useful recovery page rather than a blank screen or infinite spinner.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "issues",
      "confidence": "high",
      "method": "Inspected html language/direction and CSS logical properties.",
      "evidence": "The page correctly declares lang=fr, while stylesheet inspection found no logical inline/block properties and no explicit direction handling.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed rendered French dates/numbers and native date controls.",
      "evidence": "French dates and counts are rendered in locale-appropriate forms and agenda uses native date inputs.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected representative content and forms for time-zone-sensitive concepts.",
      "evidence": "The audited editorial and agenda surfaces showed dates but no event times, recurring cross-zone events, or user-entered time-zone data to model.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "reason": "The audited editorial and agenda surfaces showed dates but no event times, recurring cross-zone events, or user-entered time-zone data to model."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed subscription/paywall labels, consent surface, and primary templates.",
      "evidence": "Subscriber content is marked “ABONNÉS” with a lock and subscribe/account actions are explicitly labelled; no confirmshaming or forced continuity was observed.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed search/agenda controls and the 404 recovery state; no required invalid form submission exists in the core reading flow.",
      "evidence": "The tested 404 state explains the problem without blame and provides recovery; search and agenda do not validate prematurely.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "pass",
      "confidence": "medium",
      "method": "Inspected agenda/search/login labels and autocomplete tokens.",
      "evidence": "The account form uses username, current-password, and new-password autocomplete tokens with associated labels.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "medium",
      "method": "Reviewed paywall/subscribe/account entry points and login form without entering a paid checkout.",
      "evidence": "Subscription/account destinations are consistently and visibly labelled, premium content is marked before entry, and no preselected marketing checkbox was observed.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Ran image primitive and HAR/Lighthouse image diagnostics.",
      "evidence": "Of 100 images, 80 use legacy formats, 57 lack srcset, 71 below-fold images lack native lazy loading, and 14 are oversized.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F23"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Measured initial network/script/background vendor activity.",
      "evidence": "The initial HAR includes 43 scripts and 34 third-party origins, while Lighthouse estimates 380KiB unused JavaScript on the homepage.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F24"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Measured total and third-party request/byte footprint.",
      "evidence": "HAR transferred 2.83MB over 123 requests; the largest resources include Taboola, GTM, Digiteka video, Facebook, identity, consent, and experimentation scripts.",
      "pathIds": [
        "home",
        "article",
        "listing",
        "agenda",
        "search"
      ],
      "findingIds": [
        "F25"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected raw HTML, JSON-LD, robots policy, and WebMCP signals.",
      "evidence": "No declared agent-facing or transactional capability exists; this emerging contextual check is not required for the public news-reading experience.",
      "pathIds": [
        "home"
      ],
      "reason": "No declared agent-facing or transactional capability exists; this emerging contextual check is not required for the public news-reading experience."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Inspected site-authored built-in AI feature signals.",
      "evidence": "No declared product feature requires on-device inference; the editorial content is already exposed as raw HTML and NewsArticle structured data.",
      "pathIds": [
        "home"
      ],
      "reason": "No declared product feature requires on-device inference; the editorial content is already exposed as raw HTML and NewsArticle structured data."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "medium",
      "method": "Compared heap summaries before and after ten menu open/close cycles.",
      "evidence": "After ten menu open/close cycles, heap fell from 37,739,623 to 37,625,904 bytes and node count fell from 592,498 to 588,221.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "medium",
      "method": "Read heap totals and constructor summaries.",
      "evidence": "A 37.7MB heap is proportionate to this large news homepage; no single constructor dominated unexpectedly.",
      "pathIds": [
        "home"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "medium",
      "method": "Compared constructor populations before/after repeated menu interaction.",
      "evidence": "The post-interaction heap did not grow and no Detached* constructor appeared in either compact summary.",
      "pathIds": [
        "home"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05",
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F08",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F17",
        "F18",
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F23",
        "F24",
        "F25"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "No declared agent-facing or transactional capability exists; this emerging contextual check is not required for the public news-reading experience. No declared product feature requires on-device inference; the editorial content is already exposed as raw HTML and NewsArticle structured data."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and global navigation: principal entry template, first-view hierarchy, responsive behavior, preferences, performance, network, security, privacy, and memory.",
      "url": "https://www.ladepeche.fr/",
      "conditions": [
        "desktop",
        "viewport 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "prefers-contrast: more",
        "keyboard focus"
      ],
      "result": "issues"
    },
    {
      "id": "article",
      "description": "Representative subscriber-marked NewsArticle: reading hierarchy, metadata, accessibility, SEO, performance, and content resilience.",
      "url": "https://www.ladepeche.fr/2026/07/19/elle-sert-son-cafe-a-travers-une-fenetre-ce-coffee-shop-au-concept-original-vient-douvrir-a-toulouse-entre-local-et-fait-maison-13472940.php",
      "conditions": [
        "desktop Lighthouse mobile emulation",
        "viewport 360x800",
        "JavaScript-disabled crawler view"
      ],
      "result": "issues"
    },
    {
      "id": "listing",
      "description": "France-Monde section listing: repeated-card archetype and narrow responsive layout.",
      "url": "https://www.ladepeche.fr/actu/",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "agenda",
      "description": "Agenda/search form: primary rich form template, field semantics, date controls, and mobile layout.",
      "url": "https://www.ladepeche.fr/agenda/",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "search",
      "description": "Search journey with a representative Toulouse query: result state and task completion.",
      "url": "https://www.ladepeche.fr/recherche?q=Toulouse",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "not-found",
      "description": "Deliberate unknown route: HTTP/content failure recovery and onward navigation.",
      "url": "https://www.ladepeche.fr/definitely-not-a-real-page-web-uplift",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "login",
      "description": "Account login/registration entry: labels, autocomplete, consent choice, and modern authentication signals.",
      "url": "https://profil.ladepeche.fr/oauth2/login-register",
      "conditions": [
        "unauthenticated"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "The site does not adapt to the user’s dark color-scheme preference.",
      "evidence": "The dark-mode screenshot is byte-identical to the default screenshot, body remains white, computed color-scheme is normal, and CSS inspection found no prefers-color-scheme rule.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark.png",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Declare color-scheme: light dark and provide preference-driven surface, text, border, and browser-chrome colors using prefers-color-scheme or light-dark().",
      "effort": "medium"
    },
    {
      "id": "F02",
      "severity": "medium",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Animations continue when reduced motion is requested.",
      "evidence": "Under prefers-reduced-motion: reduce, the probe found two running 1-second rotation animations and no prefers-reduced-motion CSS rules.",
      "artifacts": [
        "evidence/home-motion.json"
      ],
      "suggestedFix": "Add a reduced-motion media query that disables non-essential rotation and auto-advance while preserving necessary state feedback.",
      "effort": "small"
    },
    {
      "id": "F03",
      "severity": "low",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience",
      "pathId": "article",
      "url": "https://www.ladepeche.fr/2026/07/19/elle-sert-son-cafe-a-travers-une-fenetre-ce-coffee-shop-au-concept-original-vient-douvrir-a-toulouse-entre-local-et-fait-maison-13472940.php",
      "summary": "Cross-document navigation uses abrupt swaps rather than progressive View Transitions.",
      "evidence": "CSS inspection across the MPA templates found no view-transition declarations or view-transition-name usage.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/article-mobile.png"
      ],
      "suggestedFix": "Progressively enhance same-origin article and listing navigation with @view-transition { navigation: auto } and stable transition names, with normal navigation as fallback.",
      "effort": "small"
    },
    {
      "id": "F04",
      "severity": "low",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "The large sticky navigation does not adapt to scroll state.",
      "evidence": "The DOM reports a 120px sticky header, while CSS inspection found no scroll-state query, progress indicator, or shrinking-header behavior.",
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Reduce persistent chrome after scrolling, using a progressive scroll-state container query or a lightweight fallback.",
      "effort": "medium"
    },
    {
      "id": "F05",
      "severity": "medium",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Menu and search overlays are custom fixed divs rather than semantic overlay primitives.",
      "evidence": "The probe found visible fixed .search-overlay and .side-nav elements but zero dialog, popover, or details elements.",
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Use dialog for modal flows and popover for transient menus/search, with declarative controls, focus handling, Escape behavior, and light dismiss.",
      "effort": "medium"
    },
    {
      "id": "F06",
      "severity": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "guidanceId": "scrollability-affordance-hints",
      "guidanceCategory": "user-experience",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Reserved advertising space pushes primary content far below the navigation.",
      "evidence": "Desktop and mobile first-view screenshots show a large blank region between the 120px navigation and the lead story; the page prioritizes empty ad chrome over news content.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Collapse unfilled ad slots quickly, cap reserved height by viewport, and keep the lead headline visible in the first viewport.",
      "effort": "medium"
    },
    {
      "id": "F07",
      "severity": "low",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "css",
      "pathId": "listing",
      "url": "https://www.ladepeche.fr/actu/",
      "summary": "Responsive templates rely on viewport rules rather than component-level adaptation.",
      "evidence": "CSS inspection found no @container or container-type usage across reused cards and navigation, although mobile layouts otherwise reflow.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/listing-mobile.png"
      ],
      "suggestedFix": "Add container queries to reused story cards and side modules so they adapt correctly wherever their container changes.",
      "effort": "medium"
    },
    {
      "id": "F08",
      "severity": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Cold mobile loading misses the good LCP range on core templates.",
      "evidence": "Lighthouse measured LCP 13.5s on the homepage and 11.7s on the article, with performance scores of 0.56 and 0.57. The raw-CDP trace was fast in an unconstrained run, so the issue is specifically constrained mobile delivery.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-article.json",
        "evidence/home-trace-summary.json"
      ],
      "suggestedFix": "Prioritize the actual LCP image/text, reduce critical third-party work, shorten render-blocking chains, and verify under Lighthouse mobile throttling.",
      "effort": "large"
    },
    {
      "id": "F09",
      "severity": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-preload-priority",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Render-blocking and weakly cached resources delay content.",
      "evidence": "HAR recorded 123 requests and 2.83MB, with parser-blocking stylesheets and scripts; Lighthouse estimated 350ms render-blocking savings and 826KiB cache-lifetime savings.",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Inline only critical CSS, defer non-critical styles/scripts, remove the print stylesheet from the critical path, and set long immutable caching for versioned assets.",
      "effort": "large"
    },
    {
      "id": "F10",
      "severity": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Large third-party and legacy bundles ship substantial unused code.",
      "evidence": "Lighthouse estimated 380KiB unused JavaScript and 61KiB unused CSS on home; HAR shows 43 scripts, including 330KB Taboola and 187KB GTM.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Load recommendation, video, identity, experimentation, and analytics code only after consent and user intent; split template CSS and remove legacy bundle paths.",
      "effort": "large"
    },
    {
      "id": "F11",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "article",
      "url": "https://www.ladepeche.fr/2026/07/19/elle-sert-son-cafe-a-travers-une-fenetre-ce-coffee-shop-au-concept-original-vient-douvrir-a-toulouse-entre-local-et-fait-maison-13472940.php",
      "summary": "Important controls, links, frames, images, and agenda fields lack accessible names.",
      "evidence": "Lighthouse found unnamed home/account/social/share controls, untitled iframes, links without names, and images without alt. The agenda probe found visible text, checkbox, select, and date controls with no associated label or aria-label.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-article.json",
        "evidence/agenda-form.json"
      ],
      "suggestedFix": "Give icon controls explicit accessible names, associate every field with a label, title meaningful iframes, and add useful or empty alt text as appropriate.",
      "effort": "medium"
    },
    {
      "id": "F12",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "article",
      "url": "https://www.ladepeche.fr/2026/07/19/elle-sert-son-cafe-a-travers-une-fenetre-ce-coffee-shop-au-concept-original-vient-douvrir-a-toulouse-entre-local-et-fait-maison-13472940.php",
      "summary": "Brand and subscriber UI colors fail WCAG contrast.",
      "evidence": "Lighthouse found the white “ABONNÉS” label on #f2c94c at 1.58:1 and multiple red/white controls at 4.37:1, below the required 4.5:1.",
      "artifacts": [
        "evidence/lighthouse-article.json",
        "evidence/article-mobile.png"
      ],
      "suggestedFix": "Darken the yellow/red backgrounds or use dark foreground text, and test all states to at least WCAG AA.",
      "effort": "small"
    },
    {
      "id": "F13",
      "severity": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "The homepage lacks a meaningful H1 and main landmark.",
      "evidence": "The structure probe found an empty H1 and zero main elements on the homepage. Lighthouse reports an accessibility tree that is not well formed, although the sampled keyboard focus outline is visible.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Wrap primary content in main, provide one meaningful page H1, and preserve a logical heading hierarchy and tab order.",
      "effort": "small"
    },
    {
      "id": "F14",
      "severity": "medium",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Image markup omits intrinsic dimensions and responsive delivery on a content-heavy page.",
      "evidence": "The image primitive found all 100 img elements missing width/height, 57 missing srcset, 80 legacy-format images, and 14 oversized images; Lighthouse also failed unsized-image checks.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Emit intrinsic width/height or aspect-ratio and responsive srcset/sizes from the image service, while preserving correct aspect ratios.",
      "effort": "medium"
    },
    {
      "id": "F15",
      "severity": "low",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "The homepage logs a failed resource request.",
      "evidence": "Lighthouse captured a 404 for /cdn-cgi/challenge-platform/scripts/jsd/main.js and the HAR recorded it as aborted.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Remove the stale challenge script reference or configure the resource so normal page loads do not emit console/network errors.",
      "effort": "small"
    },
    {
      "id": "F16",
      "severity": "medium",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "pathId": "article",
      "url": "https://www.ladepeche.fr/2026/07/19/elle-sert-son-cafe-a-travers-une-fenetre-ce-coffee-shop-au-concept-original-vient-douvrir-a-toulouse-entre-local-et-fait-maison-13472940.php",
      "summary": "Some actionable links are not crawlable and several links have no descriptive text.",
      "evidence": "Lighthouse found a LinkedIn share anchor without href on the article and multiple empty-name links on home and article. The viewport and robots configuration otherwise support indexing.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-article.json"
      ],
      "suggestedFix": "Use real href URLs for share/navigation anchors and give every link descriptive visible or accessible text.",
      "effort": "small"
    },
    {
      "id": "F17",
      "severity": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Cookies are set without Secure and the CSP protects framing only.",
      "evidence": "Cookie inspection found 7 cookies, 7 reported insecure, including long-lived atauthority/atuserid; CSP is only “frame-ancestors”, providing no script/style XSS policy. HSTS is present.",
      "artifacts": [
        "evidence/cookies.json",
        "evidence/headers.json"
      ],
      "suggestedFix": "Set Secure on all HTTPS cookies, use appropriate SameSite/HttpOnly attributes, and deploy a nonce/hash-based CSP that constrains script, style, object, and connection sources.",
      "effort": "medium"
    },
    {
      "id": "F18",
      "severity": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "The initial page load exposes users to an unusually broad tracking surface.",
      "evidence": "Tracker capture saw 34 third-party origins and known Google Tag Manager, Facebook, and nine Taboola endpoints; HAR shows these parties among the largest scripts.",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Default to a minimal first-party load, gate non-essential analytics/ads/recommendations on valid consent, batch necessary analytics, and remove redundant vendors.",
      "effort": "large"
    },
    {
      "id": "F19",
      "severity": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "in-context-permissions-and-modern-auth",
      "guidanceId": "passkeys",
      "guidanceCategory": "security",
      "pathId": "login",
      "url": "https://profil.ladepeche.fr/oauth2/login-register",
      "summary": "Account authentication is password/social-provider only with no phishing-resistant passkey option.",
      "evidence": "The login probe found correctly labeled username/current-password/new-password fields but no WebAuthn or passkey integration.",
      "artifacts": [
        "evidence/login-probe.json"
      ],
      "suggestedFix": "Offer passkey registration and authentication alongside existing methods, with conditional UI and password fallback.",
      "effort": "large"
    },
    {
      "id": "F20",
      "severity": "medium",
      "principleId": "be-private-and-secure",
      "principleCheckId": "defensive-browser-policies",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Several browser-enforced defenses are absent.",
      "evidence": "Headers inspection found no X-Content-Type-Options, Referrer-Policy, or Permissions-Policy. Clickjacking protection and HSTS are present.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Add nosniff, a strict referrer policy, and a least-privilege Permissions-Policy; expand CSP and evaluate Trusted Types for the script-heavy frontend.",
      "effort": "small"
    },
    {
      "id": "F21",
      "severity": "medium",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "conditional-async-dependencies",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "The installable news experience has no offline navigation fallback.",
      "evidence": "A manifest and service worker are registered, but the 311-byte worker only imports the Batch push SDK and has no fetch handler or CacheStorage usage.",
      "artifacts": [
        "evidence/platform.json",
        "evidence/service-worker.json"
      ],
      "suggestedFix": "Add a narrowly scoped service worker navigation fallback for previously read articles and a useful offline page, without caching personalized or consent-sensitive responses.",
      "effort": "medium"
    },
    {
      "id": "F22",
      "severity": "low",
      "principleId": "be-internationalised",
      "principleCheckId": "lang-dir-and-logical-properties",
      "guidanceId": "translator",
      "guidanceCategory": "internationalization",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "The document language is correct but the CSS is not writing-mode resilient.",
      "evidence": "The page correctly declares lang=fr, while stylesheet inspection found no logical inline/block properties and no explicit direction handling.",
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Use logical margin, padding, inset, border, and alignment properties in shared components so translated or RTL variants can reflow safely.",
      "effort": "medium"
    },
    {
      "id": "F23",
      "severity": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Image delivery is wasteful for a text-led news homepage.",
      "evidence": "Of 100 images, 80 use legacy formats, 57 lack srcset, 71 below-fold images lack native lazy loading, and 14 are oversized.",
      "artifacts": [
        "evidence/home-images.json"
      ],
      "suggestedFix": "Serve AVIF/WebP variants, responsive candidates, and native lazy loading below the fold while prioritizing only the lead image.",
      "effort": "large"
    },
    {
      "id": "F24",
      "severity": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Background recommendation, ad, video, experimentation, and analytics work starts before user intent.",
      "evidence": "The initial HAR includes 43 scripts and 34 third-party origins, while Lighthouse estimates 380KiB unused JavaScript on the homepage.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/trackers.json",
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Defer non-critical vendors until consent, visibility, or interaction, and stop work when widgets are offscreen or the page is backgrounded.",
      "effort": "large"
    },
    {
      "id": "F25",
      "severity": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "pathId": "home",
      "url": "https://www.ladepeche.fr/",
      "summary": "Third-party scripts dominate a disproportionate share of a news page’s transfer budget.",
      "evidence": "HAR transferred 2.83MB over 123 requests; the largest resources include Taboola, GTM, Digiteka video, Facebook, identity, consent, and experimentation scripts.",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Set an explicit third-party byte/request budget, load media widgets on demand, and remove vendors that do not provide measurable reader value.",
      "effort": "large"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Cut third-party and unused-code load behind consent and intent",
      "priority": 1,
      "findingIds": [
        "F08",
        "F09",
        "F10",
        "F18",
        "F24",
        "F25"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Fix accessible names, labels, structure, alt text, frames, and contrast",
      "priority": 2,
      "findingIds": [
        "F11",
        "F12",
        "F13"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Harden cookies, CSP, and browser security policies",
      "priority": 3,
      "findingIds": [
        "F17",
        "F20"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Make images responsive, dimensioned, modern, and lazy",
      "priority": 4,
      "findingIds": [
        "F14",
        "F23"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Collapse empty ad reservations and reduce persistent header chrome",
      "priority": 5,
      "findingIds": [
        "F04",
        "F06"
      ],
      "guidanceId": "shrinking-header-on-scroll",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Respect dark mode and reduced motion",
      "priority": 6,
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Add a useful offline navigation fallback",
      "priority": 7,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "conditional-async-dependencies",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Use semantic overlays and progressive modern responsive/navigation APIs",
      "priority": 8,
      "findingIds": [
        "F03",
        "F05",
        "F07"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Repair crawlable links and the stale challenge request",
      "priority": 9,
      "findingIds": [
        "F15",
        "F16"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Offer passkey authentication",
      "priority": 10,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "passkeys",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Adopt logical CSS properties",
      "priority": 11,
      "findingIds": [
        "F22"
      ],
      "guidanceId": "translator",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 7,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-19T09-50-45-981Z"
}
