{
  "url": "https://tw.news.yahoo.com",
  "auditedAt": "2026-07-19T07:37:46.783Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "58/58 atomic checks recorded with no blocked or not-run rows. Remote critique only; no source was supplied.",
  "page": {
    "appType": "hybrid",
    "framework": "Mixed server-rendered Yahoo templates; archive appears Next.js",
    "notes": "Public Traditional Chinese news portal with home feed, archive/listing, article and poll templates. A first-visit consent redirect was rejected before content evidence capture."
  },
  "evidenceUsed": [
    "raw-CDP screenshots",
    "raw-CDP evaluate probes",
    "raw-CDP Runtime/Log events",
    "PerformanceObserver (FCP/LCP/CLS/long tasks)",
    "CDP Network requests/headers/cookies",
    "repeated-interaction memory metrics",
    "raw HTTP HTML/headers/robots/sitemap/404",
    "Modern Web Guidance 0.0.172 search"
  ],
  "guidanceConsulted": [
    "component-specific-light-dark-theme",
    "dark-mode",
    "css",
    "accessibility",
    "directional-navigation-transitions",
    "interactive-content-reveal",
    "adapt-scrollbar-to-contrast-preferences",
    "customize-scrollbar-color-and-thickness",
    "same-document-transitions",
    "cross-document-transitions",
    "group-element-transitions",
    "parallax-scroll-effects",
    "scroll-entry-exit-effects",
    "carousel-slide-effects",
    "animate-to-intrinsic-sizes",
    "scrollability-affordance-hints",
    "scroll-snap-state-sync",
    "scroll-position-aware-elements",
    "position-aware-tooltips",
    "interest-triggered-tooltips",
    "anchor-positioning-tab-underline",
    "navigation-drawer",
    "carousel-snap-highlights",
    "light-dismiss-a-dialog",
    "html",
    "declarative-dialog-popover-control",
    "branded-select-styling",
    "interactive-content-in-3d-scenes",
    "apply-webgl-shaders",
    "complex-shapes",
    "fluid-scaling",
    "css-layout",
    "size-aware-styling",
    "design-token-reactivity",
    "form-fields-automatically-fit-contents",
    "forms",
    "improve-text-layout-and-legibility",
    "persistent-toast-notifications",
    "persistent-app-tours",
    "declarative-button-actions",
    "accessible-error-announcement",
    "required-field-feedback",
    "validate-input-after-interaction",
    "performance",
    "optimize-preload-priority",
    "optimize-script-priority",
    "visually-stable-font-fallbacks",
    "visually-stable-mixed-fonts",
    "break-up-long-tasks",
    "identify-heavy-scripts",
    "optimize-image-priority",
    "expose-canvas-content-to-browser-features",
    "highlight-text-ranges",
    "move-dom-element-without-losing-state",
    "pull-to-reveal",
    "persistent-top-layer-ui",
    "precise-text-alignment",
    "security",
    "agentic-forms",
    "deliver-optimized-decorative-images",
    "shaped-cutouts",
    "resolution-optimized-pseudo-elements",
    "language-detection",
    "summarizer",
    "search-hidden-content",
    "language-model",
    "passkey-management",
    "privacy",
    "passkey-authentication",
    "batch-analytics-events",
    "full-session-analytics",
    "calculate-total-foreground-time",
    "passkey-conditional-create",
    "passkey-reauthentication",
    "passkeys",
    "flicker-free-client-side-ab-testing",
    "consistent-cross-document-transitions",
    "resilient-context-menus-and-nested-dropdowns",
    "translator",
    "support-global-calendar-systems",
    "manage-recurring-intervals",
    "capture-location-agnostic-data",
    "coordinate-global-events",
    "calculate-event-differentials",
    "swipe-to-remove",
    "select-menu-interaction",
    "autofill-address-form",
    "autofill-payment-form",
    "autofill-sign-up-form",
    "deprioritize-background-fetches",
    "efficient-background-processing",
    "agentic-javascript-tools",
    "webmcp",
    "faster-spa-view-transitions",
    "calculate-with-intrinsic-sizes",
    "sequence-distributed-events"
  ],
  "artifacts": [
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop"
    },
    {
      "type": "screenshot",
      "path": "evidence/home.png",
      "caption": "home"
    },
    {
      "type": "screenshot",
      "path": "evidence/archive-mobile-dark.png",
      "caption": "archive mobile dark"
    },
    {
      "type": "screenshot",
      "path": "evidence/article.png",
      "caption": "article"
    },
    {
      "type": "screenshot",
      "path": "evidence/poll.png",
      "caption": "poll"
    },
    {
      "type": "dom",
      "path": "evidence/home-probe.json",
      "caption": "home probe"
    },
    {
      "type": "dom",
      "path": "evidence/archive-mobile-dark-probe.json",
      "caption": "archive mobile dark probe"
    },
    {
      "type": "dom",
      "path": "evidence/article-probe.json",
      "caption": "article probe"
    },
    {
      "type": "dom",
      "path": "evidence/poll-probe.json",
      "caption": "poll probe"
    },
    {
      "type": "other",
      "path": "evidence/perf-home.json",
      "caption": "perf home"
    },
    {
      "type": "other",
      "path": "evidence/memory-metrics.json",
      "caption": "memory metrics"
    },
    {
      "type": "other",
      "path": "evidence/network-session.json",
      "caption": "network session"
    },
    {
      "type": "dom",
      "path": "evidence/yheaders",
      "caption": "yheaders"
    },
    {
      "type": "dom",
      "path": "evidence/yhome.html",
      "caption": "yhome"
    },
    {
      "type": "dom",
      "path": "evidence/yrobots.txt",
      "caption": "yrobots"
    },
    {
      "type": "other",
      "path": "evidence/ysitemap.xml",
      "caption": "ysitemap"
    },
    {
      "type": "dom",
      "path": "evidence/y404.html",
      "caption": "y404"
    }
  ],
  "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": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The CDP probe reports prefers-color-scheme: dark=true while the homepage remains light and the root computed color-scheme is normal. The archive template does switch to color-scheme: dark, showing inconsistent template support.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.png",
        "evidence/home-probe.json",
        "evidence/archive-mobile-dark.png"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Under prefers-reduced-motion: reduce the archive reported the preference active and zero running document animations.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Under prefers-contrast: more with dark preference, text, navigation underline, images and controls remained clearly visible in the 360px archive screenshot.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "CSS/DOM probes found no view-transition usage on home, archive, article, or poll templates, and all are multi-page navigations.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/article-probe.json"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "CSS probes found no scroll timelines and the page had no scroll-linked visual effects, so it does not use main-thread scroll animation.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Representative pages use native scrolling and native radio/button controls; no custom pointer gesture layer or scroll fighting was observed.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The archive is 6,150 CSS px tall, but probes found no scroll-state/container-query implementation or progress affordance; the header remains static navigation chrome.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/archive-mobile-dark-probe.json"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path DOM inspection for the surface named by this check.",
      "evidence": "No tooltip, transient popover, or edge-positioned menu was present on the representative paths.",
      "reason": "No tooltip, transient popover, or edge-positioned menu was present on the representative paths."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Selected navigation is marked with a purple underline; article breadcrumbs and heading hierarchy clearly orient the reader.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The first-load screenshot shows the entire viewport replaced by consent.yahoo.com; users must choose Accept all, Reject all, or manage settings before seeing content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "The article exposes a native dialog element and the poll uses native radio inputs; no ad-hoc modal div was observed on covered content states.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The homepage screenshot gives most of the viewport below two navigation rows to a four-card shopping ad, and the article inserts a banner directly above and below the lead.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.png",
        "evidence/article.png"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "CDP measured scrollWidth 1007 at innerWidth 780 on both home and poll and visible horizontal scrollbars in screenshots; their probes report no viewport meta content. The 360px archive template reflows correctly.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.png",
        "evidence/home-probe.json",
        "evidence/poll.png",
        "evidence/poll-probe.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "All four template probes found no @container/container-type CSS while cards appear in main, sidebar, and narrow-feed contexts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/archive-mobile-dark-probe.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The homepage probe counted 297 visible controls below 44px in one dimension and computed the focused sample outline as none 0px; poll counted 130 undersized controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Home, archive, article and poll each expose a descriptive heading and obvious content or voting action in the captured viewport/DOM.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "The representative reading flow reaches full article content, while the poll exposes labelled native choices and a clear vote action without a hidden required field.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "A direct request to a nonexistent news route returns HTTP 404 with an effectively empty HTML body, offering no visible explanation, search, home link, or retry path without client execution.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/y404.html"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "A consented clean-load observer measured FCP 772ms, LCP 788ms and CLS 0; no interaction latency sample was available, but two only slightly-over-50ms tasks were observed.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/perf-home.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "The clean-load layout-shift observer measured CLS 0 and captured screenshots show reserved ad regions rather than content jumps.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/perf-home.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "The clean-load observer saw only two long tasks (52ms and 55ms), with FCP/LCP under 0.8s.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/perf-home.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "A clean consented load issued 188 requests including 51 scripts, 56 pings, 14 stylesheets and 17 fetches; template probes observed 459 to 815 retained resources.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/perf-home.json",
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The homepage loaded 51 scripts and 13 distinct non-Yahoo origins, while long-lived template probes retained up to 815 resources and thousands of listeners.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/perf-home.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The homepage probe found 10 unnamed controls, 9 empty-text links and 6 images without alt; the poll found 3 unnamed controls.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Dark mobile archive and dark article captures show high-contrast light text on near-black surfaces; light templates use dark text on white.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "Desktop focus computed to no outline; the homepage has duplicate H1 “Yahoo新聞”, and poll has three H1 elements including the question.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Article and archive captures show readable line lengths, clear size hierarchy and no clipped body text at the tested viewports.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "The 360px archive reflows without horizontal overflow and its viewport permits initial-scale=1 without disabling zoom; no required video media was present.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "CDP Runtime/Log collection across all four paths found warnings but no uncaught exceptions or error-level console entries.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "Home has 30 of 36 images without width+height and 30 legacy-format images; poll has all 43 images without dimensions and 30 legacy-format images.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "No permission prompt, paste prevention, deprecated-API error, or runtime exception appeared during four representative loads.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "All four representative pages have descriptive titles and non-empty meta descriptions.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "All inspected anchors have href values; robots permits normal crawlers and lists sitemaps; the 360px archive is mobile-friendly.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The archive probe found no link[rel=canonical], while home, poll, and article expose canonicals and robots.txt lists multiple sitemaps.",
      "pathIds": [
        "archive"
      ],
      "artifacts": [
        "evidence/archive-mobile-dark-probe.json",
        "evidence/yrobots.txt",
        "evidence/ysitemap.xml"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Home includes WebSite JSON-LD and all captured templates expose accurate Open Graph title/description matching visible content.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "Direct target response headers include HSTS, nosniff and SAMEORIGIN, but no Content-Security-Policy or Permissions-Policy; Referrer-Policy is no-referrer-when-downgrade.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/yheaders",
        "evidence/network-session.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "A normal home load contacted 13 non-Yahoo origins including Google Ads, Taboola, Google Tag Manager, Analytics and ScorecardResearch; 56 ping requests occurred within eight seconds.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/perf-home.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "No permission request was triggered on load; authentication was not required for the covered reading paths.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Target responses enforce HSTS, nosniff and SAMEORIGIN clickjacking protection, and cookies inspected after consent are predominantly Secure/HttpOnly where sensitive.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "The raw homepage is 603KB of server-rendered HTML containing navigation, headlines and links, rather than an empty JavaScript shell.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Navigation, native controls and the article dialog rendered without clipping or uncaught runtime errors across desktop and 360px archive conditions.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path DOM inspection for the surface named by this check.",
      "evidence": "Yahoo News is a public content MPA rather than an installed application journey; installability is contextual. Core progressive enhancement is judged separately.",
      "reason": "Yahoo News is a public content MPA rather than an installed application journey; installability is contextual. Core progressive enhancement is judged separately."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The representative nonexistent route returns an empty 404 document body, so no-JS and constrained clients receive a blank failure state.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/y404.html"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Every representative document declares zh-Hant-TW; visible Traditional Chinese reading order is correct. The site is LTR and no bidirectional content defect was observed.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Dates, participant counts and relative times are presented in Taiwan-oriented Chinese formats across article, poll and archive.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "pass",
      "confidence": "medium",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Published dates and relative times are rendered consistently for the Taiwan locale; no scheduling or cross-zone event input exists on these news paths.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Consent presents Accept all and Reject all with equal prominence, privacy settings remain available, and no disguised content action or forced continuity was observed.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path DOM inspection for the surface named by this check.",
      "evidence": "The covered search and poll controls contain no required free-text form submission to exercise; native radio labels were inspected separately.",
      "reason": "The covered search and poll controls contain no required free-text form submission to exercise; native radio labels were inspected separately."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path DOM inspection for the surface named by this check.",
      "evidence": "No address, payment, sign-in, or sign-up data-entry form is part of the covered news paths; the only text field is site search.",
      "reason": "No address, payment, sign-in, or sign-up data-entry form is part of the covered news paths; the only text field is site search."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path DOM inspection for the surface named by this check.",
      "evidence": "Checkout, subscription and account-management flows are outside this public news scope and were not presented by these paths.",
      "reason": "Checkout, subscription and account-management flows are outside this public news scope and were not presented by these paths."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "Home reports 30 legacy-format images and no lazy-loaded images; 30 lack dimensions. Poll reports 30 legacy images. The mobile archive is better with 30 lazy images and only one legacy image.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/archive-mobile-dark-probe.json",
        "evidence/poll-probe.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The eight-second consented load recorded 56 Ping requests plus 17 Fetch and 13 XHR requests before the user performed a news task.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/perf-home.json"
      ],
      "findingIds": [
        "F22"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "The text-first homepage launches 188 requests, 51 scripts, 56 pings and 13 third-party origins before meaningful interaction.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/perf-home.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path DOM inspection for the surface named by this check.",
      "evidence": "The audited public news pages expose content, not an agent-actionable transaction or productivity capability; absence of WebMCP is an emerging opportunity, not a failure.",
      "reason": "The audited public news pages expose content, not an agent-actionable transaction or productivity capability; absence of WebMCP is an emerging opportunity, not a failure."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path DOM inspection for the surface named by this check.",
      "evidence": "No user task on the covered pages requires on-device generation; summarisation could be an enhancement but is not required.",
      "reason": "No user task on the covered pages requires on-device generation; summarisation could be an enhancement but is not required."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "After ten real bottom/top feed scroll cycles, JSHeapUsedSize fell from ~420MB to ~88MB and Performance Nodes fell from 20,215 to 17,369, showing release rather than monotonic retained growth.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/memory-metrics.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "high",
      "method": "Visual screenshot plus raw-CDP DOM/network/performance probe on representative templates.",
      "evidence": "Post-load probes measured about 349MB JS heap on archive and 379MB on poll, 11,682 to 16,100 Nodes, and 10,789 event listeners on home.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/archive-mobile-dark-probe.json",
        "evidence/poll-probe.json",
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Raw-CDP rendered DOM/computed-style, screenshot, response, or performance inspection across the representative path set.",
      "evidence": "Across the repeated scroll window, total Performance Nodes decreased and heap use fell substantially; no growing retained listener/timer signal was observed.",
      "pathIds": [
        "home",
        "archive",
        "article",
        "poll"
      ],
      "artifacts": [
        "evidence/memory-metrics.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F02"
      ]
    },
    {
      "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",
        "F07",
        "F08"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11",
        "F12"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F17",
        "F22",
        "F18"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "The audited public news pages expose content, not an agent-actionable transaction or productivity capability; absence of WebMCP is an emerging opportunity, not a failure. No user task on the covered pages requires on-device generation; summarisation could be an enhancement but is not required."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    }
  ],
  "paths": [
    {
      "id": "consent",
      "description": "First-visit privacy gate; captured because it blocks the public entry path.",
      "url": "https://tw.news.yahoo.com",
      "conditions": [
        "fresh profile before consent"
      ],
      "result": "issues"
    },
    {
      "id": "home",
      "description": "Homepage/news feed template and primary reading discovery journey.",
      "url": "https://tw.news.yahoo.com/",
      "conditions": [
        "desktop",
        "consent rejected",
        "system dark preference present"
      ],
      "result": "issues"
    },
    {
      "id": "archive",
      "description": "News archive/listing template representing dense feed browsing.",
      "url": "https://tw.news.yahoo.com/archive/",
      "conditions": [
        "360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "prefers-contrast: more"
      ],
      "result": "issues"
    },
    {
      "id": "article",
      "description": "Representative article/detail reading path selected from the live homepage.",
      "url": "https://tw.news.yahoo.com/%E8%8B%AF%E9%A7%A2%E8%8A%98%E6%98%AF%E4%BB%80%E9%BA%BC%EF%BC%9F%E6%B3%B0%E5%B1%B1%E3%80%81%E7%A6%8F%E5%A3%BD%E3%80%81%E7%A6%8F%E6%87%8B%E6%B2%99%E6%8B%89%E6%B2%B9%E9%A9%97%E5%87%BA%E8%87%B4%E7%99%8C%E7%89%A9%E5%93%AA%E4%BA%9B%E5%93%81%E9%A0%85%EF%BC%9F%E5%90%83%E5%88%B0%E6%80%8E%E9%BA%BC%E8%BE%A6%EF%BC%9F%E8%A9%B2%E5%A6%82%E4%BD%95%E9%80%80%E8%B2%A8%EF%BC%9F-061805447.html",
      "conditions": [
        "desktop",
        "consent rejected"
      ],
      "result": "issues"
    },
    {
      "id": "poll",
      "description": "Representative interactive voting/listing surface.",
      "url": "https://tw.news.yahoo.com/poll/",
      "conditions": [
        "desktop",
        "native radio controls inspected"
      ],
      "result": "issues"
    },
    {
      "id": "not-found",
      "description": "Representative HTTP 404/recovery path.",
      "url": "https://tw.news.yahoo.com/definitely-not-a-real-route-web-uplift-404",
      "conditions": [
        "raw HTTP",
        "no JavaScript"
      ],
      "result": "issues"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "severity": "medium",
      "confidence": "high",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience",
      "summary": "The homepage and poll template ignore the user’s dark preference.",
      "evidence": "The CDP probe reports prefers-color-scheme: dark=true while the homepage remains light and the root computed color-scheme is normal. The archive template does switch to color-scheme: dark, showing inconsistent template support.",
      "suggestedFix": "Declare color-scheme: light dark and apply preference-driven surface/text tokens consistently across every template.",
      "effort": "medium",
      "artifacts": [
        "evidence/home.png",
        "evidence/home-probe.json",
        "evidence/archive-mobile-dark.png"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F02",
      "severity": "low",
      "confidence": "high",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience",
      "summary": "Cross-document navigation swaps abruptly.",
      "evidence": "CSS/DOM probes found no view-transition usage on home, archive, article, or poll templates, and all are multi-page navigations.",
      "suggestedFix": "Add @view-transition { navigation: auto } with a reduced-motion fallback, then name stable shared elements selectively.",
      "effort": "small",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/article-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F03",
      "severity": "low",
      "confidence": "high",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "scroll-position-aware-elements",
      "guidanceCategory": "user-experience",
      "summary": "Long feeds provide no scroll-state feedback.",
      "evidence": "The archive is 6,150 CSS px tall, but probes found no scroll-state/container-query implementation or progress affordance; the header remains static navigation chrome.",
      "suggestedFix": "Use scroll-state queries or a lightweight declarative progress/back-to-top affordance on long feeds and articles.",
      "effort": "small",
      "artifacts": [
        "evidence/archive-mobile-dark-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F04",
      "severity": "high",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience",
      "summary": "A full-screen consent gate obscures all news on first visit.",
      "evidence": "The first-load screenshot shows the entire viewport replaced by consent.yahoo.com; users must choose Accept all, Reject all, or manage settings before seeing content.",
      "suggestedFix": "Keep equal Accept/Reject choices but move non-essential consent into an in-page, dismissible, content-preserving surface where legally permitted.",
      "effort": "large",
      "artifacts": [
        "evidence/home-desktop.png"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F05",
      "severity": "high",
      "confidence": "high",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "reduced-chrome",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "summary": "Advertising dominates the first content viewport.",
      "evidence": "The homepage screenshot gives most of the viewport below two navigation rows to a four-card shopping ad, and the article inserts a banner directly above and below the lead.",
      "suggestedFix": "Reserve smaller ad slots below the primary headline/content, cap ad density, and defer recommendation widgets until after core content.",
      "effort": "medium",
      "artifacts": [
        "evidence/home.png",
        "evidence/article.png"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F06",
      "severity": "high",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "responsive-no-horizontal-scroll",
      "guidanceId": "css-layout",
      "guidanceCategory": "css-layout",
      "summary": "Homepage and poll overflow horizontally and omit a viewport meta value.",
      "evidence": "CDP measured scrollWidth 1007 at innerWidth 780 on both home and poll and visible horizontal scrollbars in screenshots; their probes report no viewport meta content. The 360px archive template reflows correctly.",
      "suggestedFix": "Add a valid viewport meta tag to every template and remove fixed/min widths from ad and page shells using intrinsic sizing and overflow containment.",
      "effort": "medium",
      "artifacts": [
        "evidence/home.png",
        "evidence/home-probe.json",
        "evidence/poll.png",
        "evidence/poll-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F07",
      "severity": "low",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience",
      "summary": "Reusable cards rely on page-level sizing rather than container adaptation.",
      "evidence": "All four template probes found no @container/container-type CSS while cards appear in main, sidebar, and narrow-feed contexts.",
      "suggestedFix": "Introduce container-type on reusable regions and adapt card layout with size-aware @container rules, retaining viewport fallbacks.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/archive-mobile-dark-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F08",
      "severity": "high",
      "confidence": "high",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Many targets are undersized and desktop focus is invisible.",
      "evidence": "The homepage probe counted 297 visible controls below 44px in one dimension and computed the focused sample outline as none 0px; poll counted 130 undersized controls.",
      "suggestedFix": "Increase target hit areas to at least 44px where practical and add a high-contrast :focus-visible ring that is not clipped.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F09",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "performance",
      "guidanceCategory": "performance",
      "summary": "The homepage starts an excessive request and script workload.",
      "evidence": "A clean consented load issued 188 requests including 51 scripts, 56 pings, 14 stylesheets and 17 fetches; template probes observed 459 to 815 retained resources.",
      "suggestedFix": "Set a request/script budget, prioritize only core assets, lazy-load below-fold modules, and consolidate or remove non-essential tags.",
      "effort": "large",
      "artifacts": [
        "evidence/perf-home.json",
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F10",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "summary": "Third-party and duplicated page machinery dominates runtime complexity.",
      "evidence": "The homepage loaded 51 scripts and 13 distinct non-Yahoo origins, while long-lived template probes retained up to 815 resources and thousands of listeners.",
      "suggestedFix": "Use coverage/trace analysis to remove unused bundles, gate recommendation/ad code by visibility and consent, and deduplicate tag integrations.",
      "effort": "large",
      "artifacts": [
        "evidence/perf-home.json",
        "evidence/home-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F11",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Some controls and images lack accessible alternatives.",
      "evidence": "The homepage probe found 10 unnamed controls, 9 empty-text links and 6 images without alt; the poll found 3 unnamed controls.",
      "suggestedFix": "Give icon-only controls accessible names, ensure linked images have meaningful names, and use empty alt only for decorative images.",
      "effort": "small",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F12",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility",
      "summary": "Focus treatment and heading structure are inconsistent.",
      "evidence": "Desktop focus computed to no outline; the homepage has duplicate H1 “Yahoo新聞”, and poll has three H1 elements including the question.",
      "suggestedFix": "Use one page-specific H1, preserve logical heading levels, and implement a consistent visible :focus-visible treatment.",
      "effort": "small",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F13",
      "severity": "medium",
      "confidence": "high",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html",
      "summary": "Image sizing and formats are inconsistent across templates.",
      "evidence": "Home has 30 of 36 images without width+height and 30 legacy-format images; poll has all 43 images without dimensions and 30 legacy-format images.",
      "suggestedFix": "Emit intrinsic width/height or aspect-ratio and responsive srcset/sizes, preferring AVIF/WebP where source quality allows.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/poll-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F14",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-discoverable",
      "principleCheckId": "canonical-and-indexing-signals",
      "guidanceId": "search-hidden-content",
      "guidanceCategory": "user-experience",
      "summary": "The archive listing lacks a canonical URL.",
      "evidence": "The archive probe found no link[rel=canonical], while home, poll, and article expose canonicals and robots.txt lists multiple sitemaps.",
      "suggestedFix": "Add a self-referencing canonical to stable archive/listing pages and verify sitemap canonical consistency.",
      "effort": "trivial",
      "artifacts": [
        "evidence/archive-mobile-dark-probe.json",
        "evidence/yrobots.txt",
        "evidence/ysitemap.xml"
      ],
      "pathId": "archive",
      "url": "https://tw.news.yahoo.com/archive/"
    },
    {
      "id": "F15",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security",
      "summary": "The news document has no enforced CSP and uses a permissive referrer policy.",
      "evidence": "Direct target response headers include HSTS, nosniff and SAMEORIGIN, but no Content-Security-Policy or Permissions-Policy; Referrer-Policy is no-referrer-when-downgrade.",
      "suggestedFix": "Deploy an enforced nonce/hash CSP with frame-ancestors, set strict-origin-when-cross-origin or stricter, and define a minimal Permissions-Policy.",
      "effort": "large",
      "artifacts": [
        "evidence/yheaders",
        "evidence/network-session.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F16",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy",
      "summary": "The page exposes a broad advertising and analytics footprint.",
      "evidence": "A normal home load contacted 13 non-Yahoo origins including Google Ads, Taboola, Google Tag Manager, Analytics and ScorecardResearch; 56 ping requests occurred within eight seconds.",
      "suggestedFix": "Audit each vendor, remove low-value partners, batch analytics, defer non-essential third parties until consent and visibility, and document purposes.",
      "effort": "large",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/perf-home.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F17",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "user-experience",
      "summary": "Image delivery is not consistently resolution- and format-efficient.",
      "evidence": "Home reports 30 legacy-format images and no lazy-loaded images; 30 lack dimensions. Poll reports 30 legacy images. The mobile archive is better with 30 lazy images and only one legacy image.",
      "suggestedFix": "Apply the archive pipeline across templates: responsive srcset/sizes, modern formats, intrinsic dimensions and below-fold lazy loading.",
      "effort": "medium",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/archive-mobile-dark-probe.json",
        "evidence/poll-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F18",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "performance",
      "summary": "Third-party resource use is disproportionate for text news pages.",
      "evidence": "The text-first homepage launches 188 requests, 51 scripts, 56 pings and 13 third-party origins before meaningful interaction.",
      "suggestedFix": "Create a third-party byte/request budget, load vendors on demand, and pause/deprioritize work when content is off-screen or the tab is hidden.",
      "effort": "large",
      "artifacts": [
        "evidence/perf-home.json",
        "evidence/home-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F19",
      "severity": "medium",
      "confidence": "high",
      "principleId": "support-core-task-success",
      "principleCheckId": "clear-system-state-and-recovery",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "summary": "The server-rendered 404 state provides no useful recovery content.",
      "evidence": "A direct request to a nonexistent news route returns HTTP 404 with an effectively empty HTML body, offering no visible explanation, search, home link, or retry path without client execution.",
      "suggestedFix": "Serve a compact SSR 404 with a clear message, search, home/latest-news links and preserved site navigation.",
      "effort": "small",
      "artifacts": [
        "evidence/y404.html"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F20",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "persistent-toast-notifications",
      "guidanceCategory": "user-experience",
      "summary": "Failure handling depends on client-side recovery.",
      "evidence": "The representative nonexistent route returns an empty 404 document body, so no-JS and constrained clients receive a blank failure state.",
      "suggestedFix": "Return useful server-rendered 404/5xx shells and add explicit retry/offline states for failed feed requests.",
      "effort": "medium",
      "artifacts": [
        "evidence/y404.html"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F21",
      "severity": "high",
      "confidence": "high",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance",
      "summary": "Memory and listener footprints are disproportionate for text pages.",
      "evidence": "Post-load probes measured about 349MB JS heap on archive and 379MB on poll, 11,682 to 16,100 Nodes, and 10,789 event listeners on home.",
      "suggestedFix": "Profile heap dominators and listener ownership, unload invisible ad/recommendation modules, and bound caches and feed DOM.",
      "effort": "large",
      "artifacts": [
        "evidence/archive-mobile-dark-probe.json",
        "evidence/poll-probe.json",
        "evidence/home-probe.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    },
    {
      "id": "F22",
      "severity": "medium",
      "confidence": "high",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance",
      "summary": "Background telemetry is chatty before interaction.",
      "evidence": "The eight-second consented load recorded 56 Ping requests plus 17 Fetch and 13 XHR requests before the user performed a news task.",
      "suggestedFix": "Batch telemetry, send it at lifecycle boundaries, and deprioritize or suppress non-essential background fetches.",
      "effort": "medium",
      "artifacts": [
        "evidence/perf-home.json"
      ],
      "pathId": "home",
      "url": "https://tw.news.yahoo.com/"
    }
  ],
  "taskList": [
    {
      "title": "Keep equal Accept/Reject choices but move non-essential consent into an in-page, dismissible, content-preserving surface where legally permitted.",
      "findingIds": [
        "F04"
      ],
      "guidanceId": "light-dismiss-a-dialog",
      "id": "T01",
      "priority": 1,
      "status": "open"
    },
    {
      "title": "Reserve smaller ad slots below the primary headline/content, cap ad density, and defer recommendation widgets until after core content.",
      "findingIds": [
        "F05"
      ],
      "guidanceId": "performance",
      "id": "T02",
      "priority": 2,
      "status": "open"
    },
    {
      "title": "Add a valid viewport meta tag to every template and remove fixed/min widths from ad and page shells using intrinsic sizing and overflow containment.",
      "findingIds": [
        "F06"
      ],
      "guidanceId": "css-layout",
      "id": "T03",
      "priority": 3,
      "status": "open"
    },
    {
      "title": "Increase target hit areas to at least 44px where practical and add a high-contrast :focus-visible ring that is not clipped.",
      "findingIds": [
        "F08"
      ],
      "guidanceId": "accessibility",
      "id": "T04",
      "priority": 4,
      "status": "open"
    },
    {
      "title": "Set a request/script budget, prioritize only core assets, lazy-load below-fold modules, and consolidate or remove non-essential tags.",
      "findingIds": [
        "F09"
      ],
      "guidanceId": "performance",
      "id": "T05",
      "priority": 5,
      "status": "open"
    },
    {
      "title": "Use coverage/trace analysis to remove unused bundles, gate recommendation/ad code by visibility and consent, and deduplicate tag integrations.",
      "findingIds": [
        "F10"
      ],
      "guidanceId": "identify-heavy-scripts",
      "id": "T06",
      "priority": 6,
      "status": "open"
    },
    {
      "title": "Use one page-specific H1, preserve logical heading levels, and implement a consistent visible :focus-visible treatment.",
      "findingIds": [
        "F12"
      ],
      "guidanceId": "accessibility",
      "id": "T07",
      "priority": 7,
      "status": "open"
    },
    {
      "title": "Deploy an enforced nonce/hash CSP with frame-ancestors, set strict-origin-when-cross-origin or stricter, and define a minimal Permissions-Policy.",
      "findingIds": [
        "F15"
      ],
      "guidanceId": "security",
      "id": "T08",
      "priority": 8,
      "status": "open"
    },
    {
      "title": "Audit each vendor, remove low-value partners, batch analytics, defer non-essential third parties until consent and visibility, and document purposes.",
      "findingIds": [
        "F16"
      ],
      "guidanceId": "privacy",
      "id": "T09",
      "priority": 9,
      "status": "open"
    },
    {
      "title": "Create a third-party byte/request budget, load vendors on demand, and pause/deprioritize work when content is off-screen or the tab is hidden.",
      "findingIds": [
        "F18"
      ],
      "guidanceId": "efficient-background-processing",
      "id": "T10",
      "priority": 10,
      "status": "open"
    },
    {
      "title": "Profile heap dominators and listener ownership, unload invisible ad/recommendation modules, and bound caches and feed DOM.",
      "findingIds": [
        "F21"
      ],
      "guidanceId": "identify-heavy-scripts",
      "id": "T11",
      "priority": 11,
      "status": "open"
    },
    {
      "title": "Declare color-scheme: light dark and apply preference-driven surface/text tokens consistently across every template.",
      "findingIds": [
        "F01"
      ],
      "guidanceId": "dark-mode",
      "id": "T12",
      "priority": 12,
      "status": "open"
    },
    {
      "title": "Give icon-only controls accessible names, ensure linked images have meaningful names, and use empty alt only for decorative images.",
      "findingIds": [
        "F11"
      ],
      "guidanceId": "accessibility",
      "id": "T13",
      "priority": 13,
      "status": "open"
    },
    {
      "title": "Emit intrinsic width/height or aspect-ratio and responsive srcset/sizes, preferring AVIF/WebP where source quality allows.",
      "findingIds": [
        "F13"
      ],
      "guidanceId": "html",
      "id": "T14",
      "priority": 14,
      "status": "open"
    },
    {
      "title": "Add a self-referencing canonical to stable archive/listing pages and verify sitemap canonical consistency.",
      "findingIds": [
        "F14"
      ],
      "guidanceId": "search-hidden-content",
      "id": "T15",
      "priority": 15,
      "status": "open"
    },
    {
      "title": "Apply the archive pipeline across templates: responsive srcset/sizes, modern formats, intrinsic dimensions and below-fold lazy loading.",
      "findingIds": [
        "F17"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "id": "T16",
      "priority": 16,
      "status": "open"
    },
    {
      "title": "Serve a compact SSR 404 with a clear message, search, home/latest-news links and preserved site navigation.",
      "findingIds": [
        "F19"
      ],
      "guidanceId": "persistent-toast-notifications",
      "id": "T17",
      "priority": 17,
      "status": "open"
    },
    {
      "title": "Return useful server-rendered 404/5xx shells and add explicit retry/offline states for failed feed requests.",
      "findingIds": [
        "F20"
      ],
      "guidanceId": "persistent-toast-notifications",
      "id": "T18",
      "priority": 18,
      "status": "open"
    },
    {
      "title": "Batch telemetry, send it at lifecycle boundaries, and deprioritize or suppress non-essential background fetches.",
      "findingIds": [
        "F22"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "id": "T19",
      "priority": 19,
      "status": "open"
    },
    {
      "title": "Add @view-transition { navigation: auto } with a reduced-motion fallback, then name stable shared elements selectively.",
      "findingIds": [
        "F02"
      ],
      "guidanceId": "cross-document-transitions",
      "id": "T20",
      "priority": 20,
      "status": "open"
    },
    {
      "title": "Use scroll-state queries or a lightweight declarative progress/back-to-top affordance on long feeds and articles.",
      "findingIds": [
        "F03"
      ],
      "guidanceId": "scroll-position-aware-elements",
      "id": "T21",
      "priority": 21,
      "status": "open"
    },
    {
      "title": "Introduce container-type on reusable regions and adapt card layout with size-aware @container rules, retaining viewport fallbacks.",
      "findingIds": [
        "F07"
      ],
      "guidanceId": "size-aware-styling",
      "id": "T22",
      "priority": 22,
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 900,
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-19T07-18-03-322Z"
}
