{
  "url": "https://www.3bmeteo.com",
  "auditedAt": "2026-07-24T06:23:18.458Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete audit across four representative templates and one recovery path. Excluded authenticated account management, checkout/subscription completion, geolocation acceptance and every duplicate city/article URL.",
  "page": {
    "appType": "mpa",
    "framework": "server-rendered multi-page site with client-side enhancements",
    "notes": "Public Italian weather/news service. No site-specific web-uplift.json was found for this remote source; the repository playground config was not applicable."
  },
  "evidenceUsed": [
    "screenshot",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "images",
    "headers",
    "cookies",
    "trackers",
    "secrets",
    "discoverability",
    "heap-summary",
    "lighthouse",
    "curl robots/sitemap"
  ],
  "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-desktop.png",
      "caption": "article desktop png",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-crawler.png",
      "caption": "article discoverability crawler png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-discoverability-rendered.png",
      "caption": "article discoverability rendered png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/article-discoverability.json",
      "caption": "article discoverability json",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/article-dom.json",
      "caption": "article dom json",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/article-mobile-layout.json",
      "caption": "article mobile layout json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/article-mobile.png",
      "caption": "article mobile png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/article-probe.json",
      "caption": "article probe json",
      "findingIds": [
        "F15",
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/city-desktop.png",
      "caption": "city desktop png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/city-discoverability-crawler.png",
      "caption": "city discoverability crawler png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/city-discoverability-rendered.png",
      "caption": "city discoverability rendered png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/city-discoverability.json",
      "caption": "city discoverability json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/city-dom.json",
      "caption": "city dom json",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/city-mobile-layout.json",
      "caption": "city mobile layout json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/city-mobile.png",
      "caption": "city mobile png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/city-probe.json",
      "caption": "city probe json",
      "findingIds": [
        "F03",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-cookies.json",
      "caption": "home cookies json",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-dark.png",
      "caption": "home dark png",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop png",
      "findingIds": [
        "F01",
        "F04",
        "F05",
        "F19"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler png",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered png",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-headers.json",
      "caption": "home headers json",
      "findingIds": [
        "F18"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-high-contrast.png",
      "caption": "home high contrast png",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images json",
      "findingIds": [
        "F10",
        "F13"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile png",
      "findingIds": [
        "F04"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-preferences.json",
      "caption": "home preferences json",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "home probe json",
      "findingIds": [
        "F03",
        "F06",
        "F21"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-recon.json",
      "caption": "home recon json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-secrets.json",
      "caption": "home secrets json",
      "findingIds": []
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary json",
      "findingIds": [
        "F05",
        "F08",
        "F19"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary json",
      "findingIds": [
        "F07"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/home-trackers.json",
      "caption": "home trackers json",
      "findingIds": [
        "F19"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home har",
      "findingIds": [
        "F08"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-city.json",
      "caption": "lighthouse city json",
      "findingIds": [
        "F09",
        "F10",
        "F12",
        "F14",
        "F16"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home json",
      "findingIds": [
        "F06",
        "F07",
        "F09",
        "F10",
        "F11",
        "F14",
        "F16"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/listing-desktop.png",
      "caption": "listing desktop png",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/listing-dom.json",
      "caption": "listing dom json",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/listing-mobile-layout.json",
      "caption": "listing mobile layout json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/listing-mobile.png",
      "caption": "listing mobile png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/listing-probe.json",
      "caption": "listing probe json",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/memory-dialog-baseline.heapsnapshot",
      "caption": "memory dialog baseline heapsnapshot",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/memory-dialog-metrics.json",
      "caption": "memory dialog metrics json",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/memory-dialog-post.heapsnapshot",
      "caption": "memory dialog post heapsnapshot",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/not-found.json",
      "caption": "not found json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/not-found.png",
      "caption": "not found png",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/pwa-permissions-memory-probe.json",
      "caption": "pwa permissions memory probe json",
      "findingIds": [
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/robots-headers.txt",
      "caption": "robots headers txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap-headers.txt",
      "caption": "sitemap headers txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap.xml",
      "caption": "sitemap xml",
      "findingIds": []
    }
  ],
  "config": {
    "loaded": false
  },
  "coverage": {
    "catalogVersion": "modern-web-guidance@0.0.172",
    "catalogChecksum": "sha256:78ccfdb2d483f4c57d9dafed80fd86c6265585a56457c8dcfddc254b80fb44d7",
    "expected": 58,
    "recorded": 58,
    "judged": 58,
    "blocked": 0,
    "notRun": 0,
    "missing": 0,
    "unknown": 0,
    "duplicates": 0,
    "complete": true
  },
  "checkOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-color-scheme",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot or computed background under an emulated prefers-color-scheme: dark condition will reveal whether surfaces re-tint; the page CSS / a color-scheme declaration is corroborating evidence. The model chooses the method.",
      "evidence": "Desktop, dark-emulated, and normal screenshots are byte-identical; the computed root color-scheme is normal and inspected CSS contains no prefers-color-scheme rule.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark.png",
        "evidence/home-preferences.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "a transition video, or an in-page probe of getAnimations()/computed animation under an emulated prefers-reduced-motion: reduce condition, can show whether motion stops. The model chooses.",
      "evidence": "Reduced-motion emulation matched and document.getAnimations() returned zero active animations; no nonessential motion remained.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-preferences.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot under emulated prefers-contrast: more / forced-colors, or an axe/contrast probe, can show whether controls and text survive. The model chooses.",
      "evidence": "The prefers-contrast: more capture is byte-identical to the normal capture and inspected CSS contains neither prefers-contrast nor forced-colors handling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-high-contrast.png",
        "evidence/home-preferences.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "pass",
      "confidence": "high",
      "method": "a transition video of a route/state change shows whether it animates; the page source / ::view-transition usage corroborates. The model chooses.",
      "evidence": "Cross-template CSS inspection found View Transition declarations, corroborating non-abrupt route/state support.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/city-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-template DOM/interaction applicability review.",
      "evidence": "No parallax, scrollytelling, entry/exit reveal, or other scroll-linked motion was present on the representative templates, so there is no scroll animation implementation to assess.",
      "reason": "No parallax, scrollytelling, entry/exit reveal, or other scroll-linked motion was present on the representative templates, so there is no scroll animation implementation to assess."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.",
      "evidence": "Forecast/news carousels use native horizontally scrollable grouped controls without page-level overflow; mobile layouts remained 360px wide.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/city-mobile-layout.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "a transition video of scrolling, or CSS inspection for scroll-state container queries. The model chooses.",
      "evidence": "DOM/CSS inspection found container queries and View Transition declarations but no scroll timeline or scroll-state treatment across pages up to 7,000px tall.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/city-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-template DOM/interaction applicability review.",
      "evidence": "No tooltip or edge-attached transient popover requiring anchor positioning appeared on the representative paths; the menus/search are full-surface navigation overlays.",
      "reason": "No tooltip or edge-attached transient popover requiring anchor positioning appeared on the representative paths; the menus/search are full-surface navigation overlays."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.",
      "evidence": "Breadcrumbs, one H1 per template, labelled tabs/carousel controls and ordered day cards clearly locate users and cue the next forecast state.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/city-probe.json",
        "evidence/city-discoverability-crawler.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot on load, or a DOM probe for full-viewport overlays present before interaction. The model chooses.",
      "evidence": "Desktop screenshots show a centered modal covering the content; at 360x800 it consumes almost the full viewport. Copy says “Rifiuta e Abbonati”, while “Accetta” is the direct free continuation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/article-desktop.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "pass",
      "confidence": "high",
      "method": "DOM/source inspection for popover / <dialog> / <details> vs custom overlay divs with manual dismiss handling. The model chooses.",
      "evidence": "DOM inspection found native dialog plus alertdialog/dialog roles for modal surfaces; no generic unlabelled full-screen div was used as the consent modal.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.",
      "evidence": "HAR recorded 132 requests and 2.25 MB; 27 third-party requests transferred 868 KB. The first viewport is additionally dominated by consent chrome.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.",
      "evidence": "All four 360x800 layout captures report scrollWidth=clientWidth=360 and horizontalOverflowPx=0 with a valid viewport meta.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/city-mobile-layout.json",
        "evidence/listing-mobile-layout.json",
        "evidence/article-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "CSS inspection for @container / container-type; a computed-style probe of the same component in a wide vs narrow container shows whether it adapts. The model chooses.",
      "evidence": "Stylesheet inspection found @container rules and all representative components reflowed at 360px without document overflow.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "a focus probe (focus an element, read the computed outline) or an axe target-size check; a screenshot of a focused control corroborates. The model chooses.",
      "evidence": "Lighthouse found carousel dots at 8x8px and 20x8px; the focus probe reported outline style none for the focused skip link.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "screenshot the first viewport and key scrolled states; inspect heading structure, nav labels, button text, and visual hierarchy; a task walkthrough can show whether the next action is obvious. The model chooses.",
      "evidence": "Homepage/locality search, “Meteo Roma Oggi” and national/article H1s state purpose directly; forecast day cards expose the next action.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-recon.json",
        "evidence/city-discoverability-crawler.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "run the flow manually with screenshots/DOM snapshots at each step; compare expected vs actual path length; inspect form requirements, navigation continuity, and blockers. The model chooses.",
      "evidence": "Desktop screenshots show a centered modal covering the content; at 360x800 it consumes almost the full viewport. Copy says “Rifiuta e Abbonati”, while “Accetta” is the direct free continuation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/article-desktop.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "exercise network delay/failure, invalid input, empty data and success states; screenshot the state messaging and recovery controls; inspect whether browser history and focus remain sensible. The model chooses.",
      "evidence": "The invalid route gives a branded 404, explains the failure and offers “Torna alla home”; search DOM also includes a role=alert empty state.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/not-found.json",
        "evidence/not-found.png",
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse reports LCP/CLS/TBT directly and the model may run it; layout metrics + a layout-shift observer + a long-task observer (the evidence primitives) give the same signal first-party. The model chooses.",
      "evidence": "Mobile Lighthouse measured FCP 4.5s, LCP 14.6s, interactive 16.1s and performance 61, although a desktop trace was much faster at LCP 1.15s.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "the layout primitive's CLS observer captures shifts; a transition video of the first seconds shows content jumping. The model chooses.",
      "evidence": "Four mobile layout observers reported CLS 0; desktop city Lighthouse measured CLS 0.005 and images generally reserve card space.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/city-mobile-layout.json",
        "evidence/lighthouse-city.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.",
      "evidence": "Trace found zero long tasks and 0ms TBT; Lighthouse measured 40ms mobile-home TBT and 0ms desktop-city TBT.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "a HAR summary can reveal cache headers, redirects, render-blocking candidates, weight offenders and dependency shape; a trace/Lighthouse insight report can corroborate LCP discovery, render-blocking, font-display and document latency. The model chooses.",
      "evidence": "HAR captured 132 requests, 43 stylesheets, 50 scripts and 2.25 MB. Many parser-inserted stylesheets were VeryHigh-priority render-blocking candidates.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse/trace/code-coverage style evidence can flag unused JS/CSS, duplicated JavaScript and legacy code; a HAR summary shows third-party byte cost and request count. The model chooses.",
      "evidence": "Lighthouse estimated 558 KiB unused JavaScript on home and 422 KiB on the city page, led by ad, prebid, metrics, CMP and analytics bundles.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "axe-core (injectable via the evaluate primitive) or Lighthouse's a11y audits enumerate these; a DOM probe of the accessibility-relevant attributes is a first-party alternative. The model chooses.",
      "evidence": "Lighthouse home accessibility was 70 and found unnamed buttons, missing image alt, disallowed ARIA, aria-hidden focusables and invalid list children; city still failed ARIA and accessible-name matching.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "axe contrast rules, a Lighthouse contrast audit, or an in-page probe computing contrast ratios from computed colours. The model chooses.",
      "evidence": "Lighthouse measured 1.04:1 contrast for #ebf0f5 text against #ebf6ff in the homepage locality search, versus 4.5:1 required.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "axe/Lighthouse structural audits; a focus-walk probe (tab through, read activeElement + computed outline) is a first-party alternative. The model chooses.",
      "evidence": "Lighthouse found carousel dots at 8x8px and 20x8px; the focus probe reported outline style none for the focused skip link. Lighthouse home accessibility was 70 and found unnamed buttons, missing image alt, disallowed ARIA, aria-hidden focusables and invalid list children; city still failed ARIA and accessible-name matching.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json",
        "evidence/lighthouse-city.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F06",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.",
      "evidence": "Representative 360px layouts had no clipping/overflow, headings and body copy reflowed, and city forecast values remained visually distinguishable.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/article-mobile.png",
        "evidence/city-discoverability-crawler.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse/axe target-size, meta-viewport and media-caption audits are useful signals; screenshots at narrow and zoomed conditions plus DOM/media inspection can corroborate. The model chooses.",
      "evidence": "Lighthouse found carousel dots at 8x8px and 20x8px; the focus probe reported outline style none for the focused skip link.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "issues",
      "confidence": "high",
      "method": "capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.",
      "evidence": "Desktop city Lighthouse captured console.error “_ABTestingTrack= B” from namespace/partner/web/3bmeteo/other/2.7.min.js.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-city.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM/source probe for doctype/charset/img dimensions; CSS inspection for repetition; Lighthouse best-practices audits cover the rest. The model chooses.",
      "evidence": "The images primitive found 7 images without dimensions, 8 below-fold images not lazy-loaded, 8 without srcset, 26 legacy-format images and 48 images without alt attributes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse best-practices audits and DevTools inspector/deprecation signals can surface these; DOM/source probes can verify paste handlers and prompt timing. The model chooses.",
      "evidence": "Both Lighthouse runs failed the valid-source-maps audit for large first-party JavaScript.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM probe reads <title> and meta[name=description]; Lighthouse SEO audits cover the same ground. The model chooses.",
      "evidence": "Article DOM probe found a descriptive title and canonical but description:null; discoverability also reports metaDescriptionPresentInRaw:null.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/article-probe.json",
        "evidence/article-discoverability.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "a DOM probe for anchor hrefs, viewport meta, and robots; Lighthouse SEO audits corroborate. The model chooses.",
      "evidence": "Lighthouse found the “Consensi” anchor uses href=\"javascript:void(0)\" on home and city.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "inspect response status and headers, <link rel=canonical>, hreflang links, robots meta, robots.txt and sitemap.xml; Lighthouse SEO audits cover several of these. The model chooses.",
      "evidence": "All representative pages returned content, expose canonical URLs, robots.txt allows the audited public paths, and sitemap.xml is a populated sitemap index.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/city-probe.json",
        "evidence/robots.txt",
        "evidence/sitemap.xml"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "issues",
      "confidence": "high",
      "method": "inspect JSON-LD/microdata and social preview tags against visible content; Lighthouse has a manual structured-data audit, and ad-hoc probes can parse schema.org blocks. The model chooses.",
      "evidence": "The NewsArticle JSON-LD reports wordcount \"0\", empty description and invalid empty timeRequired; og:description is also empty despite visible body copy.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/article-probe.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response headers / page protocol via an evaluate probe or the network layer; Lighthouse best-practices flags HTTPS and CSP issues. The model chooses.",
      "evidence": "Headers probe found no CSP, no clickjacking policy and no Permissions-Policy. Cookie probe found FCCDCF and __cflb without Secure; FCCDCF is SameSite=None and 390 days. HSTS, nosniff and Referrer-Policy are present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "inspect network requests and third-party origins; a probe of analytics/beacon calls. The model chooses.",
      "evidence": "Tracker probe saw 17 third-party origins and known DoubleClick, Google Tag Manager and Google Analytics endpoints; HAR attributes 868 KB and 27 requests to third parties. Consent copy references 1,192 selected third parties.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.",
      "evidence": "Permission states remained prompt/default with no geolocation or notification prompt on load; authentication was not required for the primary forecast task.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/pwa-permissions-memory-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "inspect response headers and browser security state; Lighthouse/DevTools security audits can corroborate HSTS, clickjacking, Trusted Types, origin isolation and third-party cookie findings. The model chooses.",
      "evidence": "Headers probe found no CSP, no clickjacking policy and no Permissions-Policy. Cookie probe found FCCDCF and __cflb without Secure; FCCDCF is SameSite=None and 390 days. HSTS, nosniff and Referrer-Policy are present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "load with scripting disabled or compare a no-JS fetch of the HTML against the rendered page; check for Baseline-aware fallbacks in source. The model chooses.",
      "evidence": "No-JS/raw HTML retained 74% of homepage, 100% of city and 81% of article rendered terms, including titles and H1s; none is a JS shell.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/city-discoverability.json",
        "evidence/article-discoverability.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.",
      "evidence": "Representative templates loaded complete server-rendered navigation/content and maintained bounded mobile layouts; modal state uses browser dialog semantics.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/city-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "a probe for a service worker registration and a web app manifest; test behaviour offline. The model chooses.",
      "evidence": "Manifest is complete with standalone display and start_url, but navigator.serviceWorker.getRegistrations() returned an empty list.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/pwa-permissions-memory-probe.json"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "simulate failed fetches/offline mode or inspect representative 404/500 routes; screenshots and DOM snapshots of error/loading/empty states show whether recovery is possible. The model chooses.",
      "evidence": "The representative not-found path shows a specific recovery message and a home action instead of a blank shell.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/not-found.json",
        "evidence/not-found.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.",
      "evidence": "Every representative page declares lang=it, computes ltr direction, and uses UTF-8; translated Italian reading order is coherent.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "source inspection for Intl.* usage vs hand-rolled formatting; a probe of rendered dates/numbers under a different locale. The model chooses.",
      "evidence": "Forecast and article templates render Italian weekday/month labels, degree units and local decimal/text conventions consistently.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/city-discoverability-crawler.png",
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "high",
      "method": "source inspection for time-zone-aware date handling vs naive local Date math. The model chooses.",
      "evidence": "Article structured data carries explicit +0200 offsets and city forecast timestamps/dates are presented as local Rome time, avoiding ambiguous UTC-only labels.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/article-probe.json",
        "evidence/city-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.",
      "evidence": "Desktop screenshots show a centered modal covering the content; at 360x800 it consumes almost the full viewport. Copy says “Rifiuta e Abbonati”, while “Accetta” is the direct free continuation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/article-desktop.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "pass",
      "confidence": "high",
      "method": "exercise a form, submit invalid input, and observe timing and clarity of errors via a screenshot or a :user-invalid / aria-invalid probe. The model chooses.",
      "evidence": "The locality empty-state uses role=alert and gives corrective guidance; the 404 explains what happened and provides recovery.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/not-found.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "issues",
      "confidence": "high",
      "method": "source/DOM inspection for autocomplete attributes on form fields; a probe of autofill affordances. The model chooses.",
      "evidence": "Representative DOM probes show search inputs without a label, name or autocomplete token; some disabled icon buttons also lack names.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/city-probe.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "issues",
      "confidence": "high",
      "method": "walkthrough checkout/subscription/auth/account flows when present; screenshot pricing, confirmation, cancellation and reauthentication states; inspect passkey/autocomplete support for sign-in and payment. The model chooses.",
      "evidence": "Desktop screenshots show a centered modal covering the content; at 360x800 it consumes almost the full viewport. Copy says “Rifiuta e Abbonati”, while “Accetta” is the direct free continuation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/article-desktop.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "inspect transferred image bytes vs displayed size; source inspection for modern formats and resolution handling. The model chooses.",
      "evidence": "The images primitive found 7 images without dimensions, 8 below-fold images not lazy-loaded, 8 without srcset, 26 legacy-format images and 48 images without alt attributes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "a long-task / network probe for background fetches and processing while idle or backgrounded. The model chooses.",
      "evidence": "Lighthouse estimated 558 KiB unused JavaScript on home and 422 KiB on the city page, led by ad, prebid, metrics, CMP and analytics bundles.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "a HAR summary shows third-party bytes, font/media weight and caching; screenshots/video reveal autoplay and decorative media; trace/layout evidence shows whether media/animation keeps work running. The model chooses.",
      "evidence": "Tracker probe saw 17 third-party origins and known DoubleClick, Google Tag Manager and Google Analytics endpoints; HAR attributes 868 KB and 27 requests to third parties. Consent copy references 1,192 selected third parties.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "pass",
      "confidence": "high",
      "method": "source inspection for WebMCP / agentic-tool registration and agent-readable affordances. The model chooses.",
      "evidence": "Public content is server-rendered (74–100% raw coverage) and exposes WebSite, Place, SoftwareApplication and NewsArticle JSON-LD, so agents need not scrape an empty shell.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/city-discoverability.json",
        "evidence/article-probe.json"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-template DOM/interaction applicability review.",
      "evidence": "The tested forecast and editorial tasks do not need generative summarisation or language-model inference to complete; server-rendered data is already concise and structured.",
      "reason": "The tested forecast and editorial tasks do not need generative summarisation or language-model inference to complete; server-rendered data is already concise and structured."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "compare heap snapshots for retained growth - a baseline, then one taken after repeating the interaction with `--interact` about 10x (the memory-tracer methodology: baseline -> repeat -> post -> compare). Performance.getMetrics (JSHeapUsedSize, Nodes) across the same before/after window is corroborat",
      "evidence": "After ten native dialog open/close cycles, in-page heap used grew only ~43KB and DOM nodes stayed exactly 1,101; snapshot self-size delta was ~340KB.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/memory-dialog-baseline.heapsnapshot",
        "evidence/memory-dialog-post.heapsnapshot",
        "evidence/memory-dialog-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "a single `heap` summary's totals (nodeCount, totalSelfSizeBytes, constructor population) plus Performance.getMetrics (Nodes, JSHeapUsedSize) give the current footprint to judge against the page's purpose. Chrome DevTools MCP heap snapshots and memlab snapshot analysis can provide the same memory dis",
      "evidence": "Baseline snapshot was 25.5MB self-size with 468,631 heap nodes; in-page metrics showed ~21MB used JS heap and 1,101 DOM elements, proportionate to this content-heavy page.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/memory-dialog-baseline.heapsnapshot",
        "evidence/memory-dialog-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "the `heap` summary by constructor (Detached* nodes) compared across a before/after pair shows a growing detached-DOM population; an `evaluate` probe can sample listener/timer counts (e.g. getEventListeners-style counting, or instrumenting addEventListener/setInterval) before and after the repeated i",
      "evidence": "Ten dialog cycles left DOM count unchanged at 1,101 and did not produce unbounded heap growth; top constructor summaries contained no growing Detached* population.",
      "pathIds": [
        "home",
        "city-forecast",
        "italy-listing",
        "weather-article"
      ],
      "artifacts": [
        "evidence/memory-dialog-baseline.heapsnapshot",
        "evidence/memory-dialog-post.heapsnapshot",
        "evidence/memory-dialog-metrics.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01",
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08",
        "F09"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F10",
        "F11",
        "F06"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F13",
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18",
        "F19"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F04",
        "F21"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F13",
        "F09",
        "F19"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Homepage and primary locality-search entry point; represents discovery, news cards, service navigation and consent-on-entry.",
      "url": "https://www.3bmeteo.com/",
      "conditions": [
        "desktop 1365x768",
        "mobile 360x800",
        "prefers-color-scheme: dark",
        "prefers-contrast: more",
        "prefers-reduced-motion: reduce",
        "no JavaScript crawler comparison"
      ],
      "result": "issues"
    },
    {
      "id": "city-forecast",
      "description": "Rome city forecast; represents the primary forecast detail task, day carousel, graphs and weather data.",
      "url": "https://www.3bmeteo.com/meteo/roma",
      "conditions": [
        "desktop",
        "mobile 360x800",
        "no JavaScript crawler comparison"
      ],
      "result": "issues"
    },
    {
      "id": "italy-listing",
      "description": "Italy forecast; represents national listing/map and regional navigation.",
      "url": "https://www.3bmeteo.com/meteo/italia",
      "conditions": [
        "desktop",
        "mobile 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "weather-article",
      "description": "Current weather-news article; represents editorial content and share/structured metadata.",
      "url": "https://www.3bmeteo.com/giornale-meteo/meteo-prossima-settimana-torna-spettro-africano-ecco-cosa-dicono-modelli-100823205",
      "conditions": [
        "desktop",
        "mobile 360x800",
        "no JavaScript crawler comparison"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Deliberately invalid URL; represents HTTP/not-found recovery.",
      "url": "https://www.3bmeteo.com/definitely-not-a-real-page-web-uplift",
      "conditions": [
        "desktop"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site does not respond to the user’s dark-mode preference.",
      "evidence": "Desktop, dark-emulated, and normal screenshots are byte-identical; the computed root color-scheme is normal and inspected CSS contains no prefers-color-scheme rule.",
      "suggestedFix": "Declare color-scheme and define preference-driven light/dark semantic tokens with prefers-color-scheme or light-dark().",
      "guidanceId": "dark-mode",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dark.png",
        "evidence/home-preferences.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F02",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-contrast",
      "severity": "medium",
      "confidence": "high",
      "summary": "There is no explicit high-contrast or forced-colors adaptation.",
      "evidence": "The prefers-contrast: more capture is byte-identical to the normal capture and inspected CSS contains neither prefers-contrast nor forced-colors handling.",
      "suggestedFix": "Add forced-colors/prefers-contrast styles that preserve visible boundaries, text, icons, and scroll affordances.",
      "guidanceId": "adapt-scrollbar-to-contrast-preferences",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-high-contrast.png",
        "evidence/home-preferences.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F03",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "severity": "low",
      "confidence": "high",
      "summary": "Long pages provide no scroll-state-aware progress or adaptive chrome.",
      "evidence": "DOM/CSS inspection found container queries and View Transition declarations but no scroll timeline or scroll-state treatment across pages up to 7,000px tall.",
      "suggestedFix": "Add a lightweight scroll progress or compact-on-scroll header, respecting reduced motion.",
      "guidanceId": "scroll-progress-indicator",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/city-probe.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F04",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "severity": "high",
      "confidence": "high",
      "summary": "A consent wall obscures the primary content on every fresh visit, and the visible refusal path is tied to a subscription.",
      "evidence": "Desktop screenshots show a centered modal covering the content; at 360x800 it consumes almost the full viewport. Copy says “Rifiuta e Abbonati”, while “Accetta” is the direct free continuation.",
      "suggestedFix": "Provide equally prominent accept and reject choices without requiring payment; keep granular preferences available and avoid blocking content before a choice is necessary.",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/article-desktop.png"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F05",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "severity": "medium",
      "confidence": "high",
      "summary": "The homepage gives substantial bandwidth and UI attention to advertising/analytics infrastructure rather than forecast content.",
      "evidence": "HAR recorded 132 requests and 2.25 MB; 27 third-party requests transferred 868 KB. The first viewport is additionally dominated by consent chrome.",
      "suggestedFix": "Defer nonessential advertising/analytics until consent and interaction, reserve content-first space, and remove redundant vendor integrations.",
      "guidanceId": "defer-rendering-heavy-content",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F06",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "severity": "medium",
      "confidence": "high",
      "summary": "Some controls are too small and keyboard focus treatment is unreliable.",
      "evidence": "Lighthouse found carousel dots at 8x8px and 20x8px; the focus probe reported outline style none for the focused skip link.",
      "suggestedFix": "Give every interactive target at least a 24x24 CSS pixel activation area (prefer 44x44 for primary touch controls) and add a strong :focus-visible ring.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-probe.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F07",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "severity": "high",
      "confidence": "high",
      "summary": "The mobile homepage’s largest content appears far too late.",
      "evidence": "Mobile Lighthouse measured FCP 4.5s, LCP 14.6s, interactive 16.1s and performance 61, although a desktop trace was much faster at LCP 1.15s.",
      "suggestedFix": "Prioritise the actual LCP resource, reduce consent/ad startup work, and validate mobile LCP under repeatable throttling.",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F08",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page starts a broad render and network dependency chain.",
      "evidence": "HAR captured 132 requests, 43 stylesheets, 50 scripts and 2.25 MB. Many parser-inserted stylesheets were VeryHigh-priority render-blocking candidates.",
      "suggestedFix": "Consolidate critical CSS, defer noncritical styles/scripts, and use preload/fetchpriority only for verified critical resources.",
      "guidanceId": "optimize-preload-priority",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home.har"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F09",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "severity": "medium",
      "confidence": "high",
      "summary": "Large amounts of downloaded JavaScript are unused during the tested load.",
      "evidence": "Lighthouse estimated 558 KiB unused JavaScript on home and 422 KiB on the city page, led by ad, prebid, metrics, CMP and analytics bundles.",
      "suggestedFix": "Conditionally load vendors after consent or user intent, remove duplicates, and split page-specific code.",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F10",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "severity": "high",
      "confidence": "high",
      "summary": "Accessible names, roles and list semantics are inconsistent.",
      "evidence": "Lighthouse home accessibility was 70 and found unnamed buttons, missing image alt, disallowed ARIA, aria-hidden focusables and invalid list children; city still failed ARIA and accessible-name matching.",
      "suggestedFix": "Use native controls and list semantics; label search fields/buttons; remove invalid role overrides; supply meaningful alt or empty alt for decoration.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json",
        "evidence/home-images.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F11",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "severity": "high",
      "confidence": "high",
      "summary": "The mobile search placeholder is effectively unreadable.",
      "evidence": "Lighthouse measured 1.04:1 contrast for #ebf0f5 text against #ebf6ff in the homepage locality search, versus 4.5:1 required.",
      "suggestedFix": "Use semantic text tokens with at least 4.5:1 contrast for normal text and verify every theme/state.",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F12",
      "principleId": "follow-best-practices",
      "principleCheckId": "no-console-errors",
      "severity": "low",
      "confidence": "high",
      "summary": "A city forecast load writes an error to the console.",
      "evidence": "Desktop city Lighthouse captured console.error “_ABTestingTrack= B” from namespace/partner/web/3bmeteo/other/2.7.min.js.",
      "suggestedFix": "Remove the erroneous console.error or correct the partner integration so production loads are clean.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-city.json"
      ],
      "effort": "small",
      "pathId": "city-forecast",
      "url": "https://www.3bmeteo.com/meteo/roma"
    },
    {
      "id": "F13",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image markup and delivery have repeated quality gaps.",
      "evidence": "The images primitive found 7 images without dimensions, 8 below-fold images not lazy-loaded, 8 without srcset, 26 legacy-format images and 48 images without alt attributes.",
      "suggestedFix": "Add intrinsic dimensions, responsive srcset/sizes, modern encodings and intentional alt text; lazy-load genuinely below-fold images.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-images.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F14",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "severity": "low",
      "confidence": "high",
      "summary": "Large first-party scripts lack usable source maps.",
      "evidence": "Both Lighthouse runs failed the valid-source-maps audit for large first-party JavaScript.",
      "suggestedFix": "Publish production source maps to the error/inspection pipeline, restricting public exposure if required.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F15",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "severity": "medium",
      "confidence": "high",
      "summary": "The representative article has no meta description.",
      "evidence": "Article DOM probe found a descriptive title and canonical but description:null; discoverability also reports metaDescriptionPresentInRaw:null.",
      "suggestedFix": "Generate a concise unique article description from the dek and keep it in server-rendered HTML.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/article-probe.json",
        "evidence/article-discoverability.json"
      ],
      "effort": "small",
      "pathId": "weather-article",
      "url": "https://www.3bmeteo.com/giornale-meteo/meteo-prossima-settimana-torna-spettro-africano-ecco-cosa-dicono-modelli-100823205"
    },
    {
      "id": "F16",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "severity": "low",
      "confidence": "high",
      "summary": "The consent-management link is not a crawlable link.",
      "evidence": "Lighthouse found the “Consensi” anchor uses href=\"javascript:void(0)\" on home and city.",
      "suggestedFix": "Use a button for an in-page action, or a real URL if it is navigation.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/lighthouse-city.json"
      ],
      "effort": "trivial",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F17",
      "principleId": "be-discoverable",
      "principleCheckId": "structured-and-shareable-metadata",
      "severity": "medium",
      "confidence": "high",
      "summary": "Article structured/share metadata contradicts the visible article.",
      "evidence": "The NewsArticle JSON-LD reports wordcount \"0\", empty description and invalid empty timeRequired; og:description is also empty despite visible body copy.",
      "suggestedFix": "Populate NewsArticle wordCount, description and valid timeRequired from the rendered article and mirror the description in Open Graph metadata.",
      "guidanceId": "html",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/article-probe.json"
      ],
      "effort": "small",
      "pathId": "weather-article",
      "url": "https://www.3bmeteo.com/giornale-meteo/meteo-prossima-settimana-torna-spettro-africano-ecco-cosa-dicono-modelli-100823205"
    },
    {
      "id": "F18",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "severity": "high",
      "confidence": "high",
      "summary": "Browser-enforced security policy is incomplete and some cookies are not Secure.",
      "evidence": "Headers probe found no CSP, no clickjacking policy and no Permissions-Policy. Cookie probe found FCCDCF and __cflb without Secure; FCCDCF is SameSite=None and 390 days. HSTS, nosniff and Referrer-Policy are present.",
      "suggestedFix": "Deploy a restrictive CSP with frame-ancestors, add Permissions-Policy, and mark HTTPS cookies Secure with the narrowest appropriate SameSite/lifetime.",
      "guidanceId": "security",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-headers.json",
        "evidence/home-cookies.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F19",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "severity": "high",
      "confidence": "high",
      "summary": "The initial load has a large tracking and advertising footprint.",
      "evidence": "Tracker probe saw 17 third-party origins and known DoubleClick, Google Tag Manager and Google Analytics endpoints; HAR attributes 868 KB and 27 requests to third parties. Consent copy references 1,192 selected third parties.",
      "suggestedFix": "Minimise vendors and data fields, load optional trackers only after valid consent, batch essential analytics, and document retention/purpose.",
      "guidanceId": "privacy",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-trackers.json",
        "evidence/home-summary.json",
        "evidence/home-desktop.png"
      ],
      "effort": "large",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F20",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "severity": "medium",
      "confidence": "high",
      "summary": "The app-like weather site advertises installability but registers no service worker/offline fallback.",
      "evidence": "Manifest is complete with standalone display and start_url, but navigator.serviceWorker.getRegistrations() returned an empty list.",
      "suggestedFix": "Register a scoped service worker and provide a useful offline forecast/error shell with freshness messaging.",
      "guidanceId": "conditional-async-dependencies",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/pwa-permissions-memory-probe.json"
      ],
      "effort": "medium",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    },
    {
      "id": "F21",
      "principleId": "be-trustworthy",
      "principleCheckId": "trustworthy-input-assistance",
      "severity": "low",
      "confidence": "high",
      "summary": "Locality-search fields lack form assistance metadata.",
      "evidence": "Representative DOM probes show search inputs without a label, name or autocomplete token; some disabled icon buttons also lack names.",
      "suggestedFix": "Give search fields explicit accessible labels/names and suitable autocomplete/input purpose while preserving combobox semantics.",
      "guidanceId": "forms",
      "guidanceCategory": "modern-web-guidance",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/city-probe.json"
      ],
      "effort": "small",
      "pathId": "home",
      "url": "https://www.3bmeteo.com/"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Replace the coercive consent wall with balanced, nonblocking consent controls",
      "priority": 1,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Reduce mobile LCP and startup dependencies",
      "priority": 2,
      "findingIds": [
        "F07",
        "F08",
        "F09"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Repair accessible names, ARIA, contrast, focus and target sizing",
      "priority": 3,
      "findingIds": [
        "F06",
        "F10",
        "F11",
        "F21"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Minimise third-party tracking and advertising payload",
      "priority": 4,
      "findingIds": [
        "F05",
        "F09",
        "F19"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Deploy CSP/clickjacking/permissions defenses and secure cookies",
      "priority": 5,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Add dark and high-contrast preference themes",
      "priority": 6,
      "findingIds": [
        "F01",
        "F02"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Correct image dimensions, alt, responsive sources and formats",
      "priority": 7,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Complete article description and structured/share metadata",
      "priority": 8,
      "findingIds": [
        "F15",
        "F17"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Add a useful offline fallback behind the existing manifest",
      "priority": 9,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "conditional-async-dependencies",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Clean console/source-map/crawlable-action hygiene",
      "priority": 10,
      "findingIds": [
        "F12",
        "F14",
        "F16"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Add scroll-aware orientation for long pages",
      "priority": 11,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "scroll-progress-indicator",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 5,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-24T06-23-18-458Z"
}
