{
  "url": "https://script.google.com",
  "auditedAt": "2026-07-24T00:20:57.907Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Complete atomic audit of the public Apps Script documentation destination reached through script.google.com.",
  "page": {
    "appType": "mpa",
    "framework": "Google DevSite custom-elements shell",
    "notes": "script.google.com performs three redirects to https://developers.google.com/apps-script/. Public read-only documentation with landing, guide, reference, sample, localization and failure templates."
  },
  "evidenceUsed": [
    "screenshot",
    "DOM/CSS capture",
    "layout metrics + CLS observer",
    "evaluate probes",
    "performance trace",
    "HAR + network summary",
    "Lighthouse",
    "discoverability crawler comparison",
    "security headers",
    "cookies",
    "trackers",
    "secrets scan",
    "images audit",
    "heap summaries",
    "robots/sitemap/manifest fetch"
  ],
  "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/home-dark.png",
      "caption": "home dark.png",
      "findingIds": [
        "F-001"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-desktop.png",
      "caption": "home desktop.png",
      "findingIds": [
        "F-001",
        "F-004",
        "F-005"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-probe.json",
      "caption": "home probe.json",
      "findingIds": [
        "F-002",
        "F-005",
        "F-006",
        "F-012"
      ]
    },
    {
      "type": "other",
      "path": "evidence/scroll-chrome-probe.json",
      "caption": "scroll chrome probe.json",
      "findingIds": [
        "F-003"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/home-mobile.png",
      "caption": "home mobile.png",
      "findingIds": [
        "F-004",
        "F-006"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/guides-mobile.png",
      "caption": "guides mobile.png",
      "findingIds": [
        "F-004"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/reference-mobile.png",
      "caption": "reference mobile.png",
      "findingIds": [
        "F-004",
        "F-019"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/samples-mobile.png",
      "caption": "samples mobile.png",
      "findingIds": [
        "F-004"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-home.json",
      "caption": "lighthouse home.json",
      "findingIds": [
        "F-007",
        "F-008",
        "F-009",
        "F-010",
        "F-011",
        "F-012",
        "F-013",
        "F-014",
        "F-015",
        "F-018",
        "F-021"
      ]
    },
    {
      "type": "trace-summary",
      "path": "evidence/home-trace-summary.json",
      "caption": "home trace summary.json",
      "findingIds": [
        "F-007"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/home-trace.json",
      "caption": "home trace.json",
      "findingIds": [
        "F-007"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/guides-mobile-layout.json",
      "caption": "guides mobile layout.json",
      "findingIds": [
        "F-008"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-images.json",
      "caption": "home images.json",
      "findingIds": [
        "F-008",
        "F-011",
        "F-014",
        "F-020"
      ]
    },
    {
      "type": "har",
      "path": "evidence/home.har",
      "caption": "home.har",
      "findingIds": [
        "F-009"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/home-summary.json",
      "caption": "home summary.json",
      "findingIds": [
        "F-009",
        "F-010",
        "F-016",
        "F-020",
        "F-021"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/reference-dom.json",
      "caption": "reference dom.json",
      "findingIds": [
        "F-012",
        "F-019"
      ]
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies.json",
      "findingIds": [
        "F-015",
        "F-017"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers.json",
      "findingIds": [
        "F-016"
      ]
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers.json",
      "findingIds": [
        "F-017"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe.json",
      "findingIds": [
        "F-021"
      ]
    },
    {
      "type": "other",
      "path": "evidence/home-reduced-motion.json",
      "caption": "home reduced motion.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-contrast.png",
      "caption": "home contrast.png",
      "findingIds": []
    },
    {
      "type": "layout",
      "path": "evidence/home-mobile-layout.json",
      "caption": "home mobile layout.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/menu-semantics-probe.json",
      "caption": "menu semantics probe.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/focus-probe.json",
      "caption": "focus probe.json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/home-dom.json",
      "caption": "home dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/error-404-mobile.png",
      "caption": "error 404 mobile.png",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/error-404-dom.json",
      "caption": "error 404 dom.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-arabic-mobile.png",
      "caption": "home arabic mobile.png",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/guides-dom.json",
      "caption": "guides dom.json",
      "findingIds": []
    },
    {
      "type": "dom",
      "path": "evidence/samples-dom.json",
      "caption": "samples dom.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/robots.txt",
      "caption": "robots.txt",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/sitemap-headers.txt",
      "caption": "sitemap headers.txt",
      "findingIds": []
    },
    {
      "type": "discoverability",
      "path": "evidence/home-discoverability.json",
      "caption": "home discoverability.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-crawler.png",
      "caption": "home discoverability crawler.png",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/home-heap-baseline.json",
      "caption": "home heap baseline.json",
      "findingIds": []
    },
    {
      "type": "heap",
      "path": "evidence/home-heap-post-scroll.json",
      "caption": "home heap post scroll.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets.json",
      "findingIds": []
    },
    {
      "type": "other",
      "path": "evidence/manifest.json",
      "caption": "manifest.json",
      "findingIds": []
    },
    {
      "type": "screenshot",
      "path": "evidence/home-discoverability-rendered.png",
      "caption": "home discoverability rendered.png",
      "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": "Active evidence review for Honours prefers-color-scheme: a usable dark mode exists and is driven by the user's preference (color-scheme / prefers-color-scheme / light-dark()), not hard-coded light only.",
      "evidence": "The dark-mode screenshot is pixel-identical to the light screenshot: white surfaces and light browser chrome remain under prefers-color-scheme: dark.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F-001"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "evaluate under prefers-reduced-motion: reduce found zero active animations and scroll-behavior:auto.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-reduced-motion.json"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "forced-colors/high-contrast screenshot keeps text, controls, focus boundaries, and consent actions visible.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-contrast.png"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for State and route changes use View Transitions (including same-document, cross-document and scroll-driven/staggered) rather than instant, jarring swaps.",
      "evidence": "The DOM/platform probe found no view-transition CSS or API marker, while the primary journey moves between multiple documentation routes.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "findingIds": [
        "F-002"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: source/CSS inspection for animation-timeline: scroll()/view(); a long-task / scroll-handler probe can flag the main-thread anti-pattern. The model chooses.",
      "evidence": "DOM/CSS probe found no scroll-linked visual effect and layout recorded no long scroll tasks, so no scroll event animation is fighting the main thread.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: CSS inspection for scroll-snap / overscroll-behavior / physics-based easing vs custom pointermove listeners. The model chooses.",
      "evidence": "Mobile screenshots and scroll probes show native document scrolling with no horizontal trap or custom pointer-driven gesture surface.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Sticky/affixed UI reacts to scroll state and position (e.g. the new scroll-state(scrolled) query, shrinking headers, progress indicators) so chrome responds to position instead of static or JS-driven toggling.",
      "evidence": "The scroll probe measured the header fixed at top:0 before and after scrolling 1,000px, with no class/state change, shrink, or progress affordance.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/scroll-chrome-probe.json"
      ],
      "findingIds": [
        "F-003"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: CSS inspection for anchor-name / position-anchor / position-try on overlays; a screenshot of an open overlay near a viewport edge can show drift. The model chooses.",
      "evidence": "Opening the mobile navigation produced an in-viewport 269px navigation surface at x=0 with explicit expanded state and no clipping.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/menu-semantics-probe.json"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: CSS inspection for ::highlight / scroll-marker; a transition video can show whether attention is cued after navigation. The model chooses.",
      "evidence": "Guides, Reference, and Samples show breadcrumbs plus an “On this page” index immediately before content, preserving orientation and jump targets.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/guides-mobile.png",
        "evidence/reference-mobile.png",
        "evidence/samples-mobile.png"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for No intrusive pop-ups, interstitials or banners that obscure content on load; overlays are dismissible and content-first.",
      "evidence": "Desktop and 360px screenshots show the notice loaded over the content; on mobile it occupies roughly the bottom 229px and hides the start of the article/landing content.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/guides-mobile.png",
        "evidence/reference-mobile.png",
        "evidence/samples-mobile.png"
      ],
      "findingIds": [
        "F-004"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Overlays and rich controls use the right primitive: popover (with declarative light-dismiss) for transient UI, dialog for modal flows, details for disclosure, native-but-branded selects and pickers, rather than ad-hoc divs.",
      "evidence": "The DOM probe found no dialog, role=dialog, or popover for the visible consent overlay, despite it intercepting a substantial viewport area.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-desktop.png"
      ],
      "findingIds": [
        "F-005"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: a screenshot plus layout metrics can show the proportion of the viewport given to chrome vs content. The model chooses.",
      "evidence": "After the shared header/breadcrumbs, sampled article templates devote the viewport to title, local table of contents and content without decorative side panels at 360px.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/guides-mobile.png",
        "evidence/reference-mobile.png"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: layout metrics (scrollWidth vs innerWidth) and a screenshot at an emulated narrow mobile viewport reveal overflow. The model chooses.",
      "evidence": "At 360x800 the layout primitive measured scrollWidth=clientWidth=360 and horizontalOverflowPx=0; viewport meta is present.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Components adapt to their container with container queries (incl. anchored container queries) and content/state-based styling where reused at different sizes, not only global viewport breakpoints.",
      "evidence": "The rendered stylesheet probe found no @container rules; the same DevSite components are reused in full-width, side-nav, and mobile contexts.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-mobile.png"
      ],
      "findingIds": [
        "F-006"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "Mobile actions are full-size touch targets, and the active focus probe measured 2px focus rings/box shadows on consent links and buttons.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/focus-probe.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "The landing first viewport identifies Apps Script and states “Automate & extend Google Workspace with simple code”; top navigation exposes Guides, Reference and Samples.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-dom.json"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "Direct navigation completed the representative browse flows to Guides, Reference and Samples without authentication or dead ends; each rendered its expected template.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/guides-mobile.png",
        "evidence/reference-mobile.png",
        "evidence/samples-mobile.png"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "A deliberately invalid route rendered a clear 404, explanatory text, sign-in possibility and a search recovery control rather than a blank shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/error-404-mobile.png",
        "evidence/error-404-dom.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Core Web Vitals are in the good range: LCP is fast, interaction latency (INP) is low, and CLS is minimal; work is prioritised and deferred sensibly.",
      "evidence": "Mobile Lighthouse scored performance 0.46 with LCP 13.3s and CLS 0.258; the raw trace corroborated a 3.38s LCP even without Lighthouse throttling.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "findingIds": [
        "F-007"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for No cumulative layout shift from late content (images, banners, fonts) that arrives without reserved space.",
      "evidence": "Lighthouse measured CLS 0.258 on the landing page, and the 360px Guides layout primitive independently recorded CLS 0.125425 across five shifts.",
      "pathIds": [
        "guides"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/guides-mobile-layout.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F-008"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: the layout primitive records long tasks; a heap summary shows the object population; Lighthouse reports TBT. The model chooses.",
      "evidence": "The raw trace recorded one 69.68ms long task and only 19.68ms total blocking time, with no long tasks in the mobile layout observation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-trace-summary.json",
        "evidence/home-mobile-layout.json"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Critical resources are delivered efficiently: cache headers are useful, render-blocking chains are short, fonts do not block or shift text, HTTP delivery is modern, and network dependency trees do not delay the main content.",
      "evidence": "HAR captured three redirects before the final page, 87 requests and 2.63MB transferred; Lighthouse estimated 1.84s redirect savings and 1.78s render-blocking savings.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F-009"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for The page does not ship large unused or duplicated JavaScript/CSS, avoidable legacy bundles, or third-party code that dominates the load without user value.",
      "evidence": "Lighthouse estimated 537KiB unused JavaScript and 161KiB unused CSS; HAR shows 58 scripts and 1.30MB script transfer.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-010"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Interactive elements have accessible names, correct roles, and form fields have labels; images have alt text where meaningful; canvas/expressive content is exposed to assistive technology.",
      "evidence": "Lighthouse found a YouTube logo image without alt text and a focusable H2 marked role=presentation, producing a 0.90 accessibility score.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F-011"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Text and essential UI meet WCAG colour-contrast minimums against their background.",
      "evidence": "Lighthouse/axe reported three footer links with only 1.07:1 contrast against surrounding text and no underline or other non-color cue.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F-013"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Heading and landmark structure is logical, focus order follows reading order, keyboard focus is always visible, and interactive state survives DOM moves.",
      "evidence": "The DOM probe reported H1 “Workspace” followed by the visible hero as H3; Lighthouse flagged that hero heading for invalid heading order. The Reference overview rendered with no H1.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/lighthouse-home.json",
        "evidence/reference-dom.json"
      ],
      "findingIds": [
        "F-012"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: a screenshot of body and heading text, plus CSS inspection for text-wrap / text alignment / font fallback handling. The model chooses.",
      "evidence": "Desktop, mobile, Arabic and forced-colors screenshots show readable line lengths, stable wrapping, and no clipped primary text.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/home-arabic-mobile.png",
        "evidence/home-contrast.png"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "Viewport allows scaling, 360px reflow has zero horizontal overflow, and Lighthouse did not fail viewport or target-size audits.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile-layout.json",
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: capture Runtime/Log CDP events, or a probe that reads collected errors; Lighthouse reports this too. The model chooses.",
      "evidence": "Lighthouse’s errors-in-console audit passed and no uncaught exception was reported during DOM, layout, trace, or interaction captures.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Valid doctype and charset, images sized with correct aspect ratio, no deprecated APIs misused, and CSS/HTML are well structured and not needlessly repetitive. (HTTPS, CSP and permission hygiene are judged under be-private-and-secure, not here.)",
      "evidence": "The images primitive found all 9 images without width/height attributes; Lighthouse independently flagged four unsized instances including the hero and logos.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F-014"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for The page uses the platform cleanly: no deprecated APIs, no avoidable BFCache blockers, no broken source maps or inspector issues, no stale vulnerable libraries, no paste-prevention on inputs, and no notification/geolocation prompts on load.",
      "evidence": "Lighthouse best-practices scored 0.77 and the Inspector Issues audit listed YouTube/Google cookie issues; four third-party cookies were observed.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F-015"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for The page has a unique, descriptive <title> and a meta description.",
      "evidence": "The Reference DOM has a descriptive title and canonical URL but no meta description and no H1, unlike the Guides and Samples templates.",
      "pathIds": [
        "reference"
      ],
      "artifacts": [
        "evidence/reference-dom.json",
        "evidence/reference-mobile.png"
      ],
      "findingIds": [
        "F-019"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Links are crawlable (real href), there is a viewport meta tag, robots does not block indexing, and link text is descriptive.",
      "evidence": "Lighthouse SEO flagged the cookie-policy “Learn more” link as non-descriptive even though anchors otherwise use real href values.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "findingIds": [
        "F-018"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "Home, Guides, Reference and Samples expose canonical URLs; robots allows the routes and points to a successful sitemap.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/guides-dom.json",
        "evidence/reference-dom.json",
        "evidence/samples-dom.json",
        "evidence/robots.txt",
        "evidence/sitemap-headers.txt"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "Home probe found one JSON-LD block and nine Open Graph tags aligned with the visible Apps Script page.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Served over HTTPS with a sensible Content-Security-Policy and secure, SameSite cookies; no mixed content or obvious transport/header smells.",
      "evidence": "Headers include HSTS, nosniff and CSP frame-ancestors, but CSP permits unsafe-eval and Referrer-Policy/Permissions-Policy are absent; CDP also observed an NID cookie without Secure and SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F-017"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for No over-collection of user data, no leaky third parties, and analytics/background data collection is minimised and batched rather than chatty or session-wide by default.",
      "evidence": "Tracker capture found 10 third-party origins and Google Analytics/Tag Manager; HAR attributed 85 of 87 requests and 2.629MB to origins other than the requested script.google.com URL, including about 752KB from Tag Manager.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-016"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: a probe for permission requests fired on load; source inspection for passkey / WebAuthn / navigator.credentials usage in auth flows. The model chooses.",
      "evidence": "The platform probe saw no permission request on load; authentication is an external Google sign-in link rather than a password form embedded in the documentation.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/home-probe.json"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Browser-enforced defenses are configured where appropriate: HSTS, clickjacking protection (frame-ancestors / X-Frame-Options), Trusted Types for XSS-sensitive apps, origin isolation, privacy-preserving third-party cookie posture, and sensible Referrer-Policy / Permissions-Policy.",
      "evidence": "Headers include HSTS, nosniff and CSP frame-ancestors, but CSP permits unsafe-eval and Referrer-Policy/Permissions-Policy are absent; CDP also observed an NID cookie without Secure and SameSite=None.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F-017"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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": "Crawler-mode screenshot renders the hero content without JavaScript; raw HTML is substantial and isJsShell=false.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-discoverability.json",
        "evidence/home-discoverability-crawler.png"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: exercise menus near viewport edges with a screenshot; a probe of async/visibility behaviour. The model chooses.",
      "evidence": "The opened mobile navigation remained within the viewport, exposed expanded state, and the fixed header remained stable through a 1,000px scroll.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/menu-semantics-probe.json",
        "evidence/scroll-chrome-probe.json"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path applicability judgement.",
      "evidence": "This is a public documentation/reference site rather than an app with an offline core workflow; installability/offline operation is not required for the content task.",
      "reason": "This is a public documentation/reference site rather than an app with an offline core workflow; installability/offline operation is not required for the content task."
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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 intentional invalid URL rendered a useful 404 with search and sign-in recovery instead of a blank or broken shell.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/error-404-mobile.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: a DOM probe for <html lang>/dir and CSS inspection for logical vs physical properties. The model chooses.",
      "evidence": "English pages declare lang=en; the Arabic locale renders RTL navigation, translated copy and mirrored header ordering without horizontal overflow.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-dom.json",
        "evidence/home-arabic-mobile.png"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path applicability judgement.",
      "evidence": "The sampled templates do not present user-facing dates, numbers, currencies, durations, or calendar data to format.",
      "reason": "The sampled templates do not present user-facing dates, numbers, currencies, durations, or calendar data to format."
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path applicability judgement.",
      "evidence": "The sampled templates do not expose events, schedules, or user-facing time calculations.",
      "reason": "The sampled templates do not expose events, schedules, or user-facing time calculations."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: a screenshot of consent/upsell/cancel flows; source inspection for declarative button actions vs misleading controls. The model chooses.",
      "evidence": "Consent choices “Agree” and “No thanks” have equal visual weight and the Arabic localization preserves both choices without confirmshaming.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-mobile.png",
        "evidence/home-arabic-mobile.png"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path applicability judgement.",
      "evidence": "No authored data-entry form with validation exists in the sampled documentation paths; the only form is site search.",
      "reason": "No authored data-entry form with validation exists in the sampled documentation paths; the only form is site search."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path applicability judgement.",
      "evidence": "No address, payment, sign-in, or sign-up input form is authored on the sampled site; sign-in is delegated to Google Accounts.",
      "reason": "No address, payment, sign-in, or sign-up input form is authored on the sampled site; sign-in is delegated to Google Accounts."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path applicability judgement.",
      "evidence": "No checkout, subscription, account-management, or sensitive account flow is hosted on these documentation paths.",
      "reason": "No checkout, subscription, account-management, or sensitive account flow is hosted on these documentation paths."
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Images and decorative assets are optimised and served at appropriate resolutions; decorative pseudo-element imagery and heavy decorative images are resolution-optimised rather than oversized.",
      "evidence": "HAR identified landing-page-hero.svg as an uncompressed 894,905-byte response and the largest resource on a 2.63MB load.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-images.json"
      ],
      "findingIds": [
        "F-020"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Background work and fetching are not wasteful: background processing is efficient and de-prioritised, and the lightest technique that achieves the result is preferred over heavy or redundant work.",
      "evidence": "Lighthouse estimated 537KiB unused JavaScript and 161KiB unused CSS; HAR shows 58 scripts and 1.30MB script transfer.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "findingIds": [
        "F-010"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "Active evidence review for Third-party scripts, fonts, video, audio, animation and heavy media are proportionate to the user value they provide; autoplay or background media is avoided unless essential and resource use is cached or deferred where possible.",
      "evidence": "HAR recorded 2.63MB total, including five Tag Manager/gtag bundles, 208KB fonts, and a YouTube iframe initialized on load; Lighthouse measured 3,578KiB under its run.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/platform-probe.json"
      ],
      "findingIds": [
        "F-021"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path applicability judgement.",
      "evidence": "The sampled surface is read-only public documentation with no safe transactional capability that needs WebMCP exposure.",
      "reason": "The sampled surface is read-only public documentation with no safe transactional capability that needs WebMCP exposure."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and representative-path applicability judgement.",
      "evidence": "The documentation task does not require local inference; adding it would not improve the core browse/read workflow.",
      "reason": "The documentation task does not require local inference; adding it would not improve the core browse/read workflow."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT (not mandatory): 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 corroboration. If Chrome DevTools MCP is available, follow its memory-leak-debugging skill: capture baseline, target, and final snapshots, then use memlab or the provided comparison workflow rather than reading raw .heapsnapshot files directly. The package-native `heap` primitive remains the default path. This check is only meaningful where the page has a real interaction to repeat; for a static page with none, mark it not-applicable with a rationale rather than fabricating one. The model chooses.",
      "evidence": "After ten full-page scroll cycles, retained heap grew about 1.6% (29.91MB to 30.38MB) and closures were essentially flat (26,075 to 26,080), not an unbounded pattern in this bounded trial.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap-baseline.json",
        "evidence/home-heap-post-scroll.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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 distribution when available. Read summaries or derived analysis, never raw snapshots unless a dedicated heap-analysis tool is doing the analysis. The model chooses.",
      "evidence": "Baseline heap summary measured 29.91MB with 556,722 snapshot nodes, proportionate to the rendered documentation shell and embedded widgets.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap-baseline.json"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Direct evidence review: HINT: 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 interaction to spot growth. Chrome DevTools MCP heap snapshots plus the memory-leak-debugging skill's common-leak guidance can corroborate detached DOM, listeners, closures, globals, and unbounded caches. Caveat from the memory-tracer and Chrome DevTools MCP guidance: detached nodes can be intentional caches, so judge confidence rather than asserting a bug. The model chooses.",
      "evidence": "Before/after heap summaries expose no Detached* constructor among retained top constructors; closure count increased by only five after ten scroll cycles.",
      "pathIds": [
        "home"
      ],
      "artifacts": [
        "evidence/home-heap-baseline.json",
        "evidence/home-heap-post-scroll.json"
      ]
    }
  ],
  "principleOutcomes": [
    {
      "principleId": "respect-user-preferences",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-001"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-002"
      ]
    },
    {
      "principleId": "provide-guided-navigation",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-003"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-004",
        "F-005"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-006"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-007",
        "F-008",
        "F-009",
        "F-010"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-011",
        "F-013",
        "F-012"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-014",
        "F-015"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-019",
        "F-018"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F-017",
        "F-016"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F-020",
        "F-010",
        "F-021"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "All checks were judged not applicable to this read-only documentation surface."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "pass"
    }
  ],
  "paths": [
    {
      "id": "home",
      "description": "Landing/product archetype and primary orientation path; also tested desktop/mobile, dark mode, high contrast, reduced motion, network, performance, privacy, accessibility and memory.",
      "url": "https://script.google.com",
      "conditions": [
        "desktop",
        "viewport: 360x800",
        "prefers-color-scheme: dark",
        "prefers-reduced-motion: reduce",
        "forced-colors: active",
        "10 repeated scroll cycles"
      ],
      "result": "issues"
    },
    {
      "id": "guides",
      "description": "Guide/article archetype representing long-form documentation and local navigation.",
      "url": "https://developers.google.com/apps-script/overview",
      "conditions": [
        "viewport: 360x800",
        "layout-shift observation"
      ],
      "result": "issues"
    },
    {
      "id": "reference",
      "description": "Reference/index archetype representing API discovery and metadata consistency.",
      "url": "https://developers.google.com/apps-script/reference",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "samples",
      "description": "Listing archetype representing sample discovery.",
      "url": "https://developers.google.com/apps-script/samples",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "error-404",
      "description": "Failure/recovery path using an intentionally nonexistent documentation URL.",
      "url": "https://developers.google.com/apps-script/not-a-real-page-web-uplift",
      "conditions": [
        "viewport: 360x800"
      ],
      "result": "pass"
    },
    {
      "id": "arabic",
      "description": "Localized RTL variant to test language, direction and translated layout.",
      "url": "https://developers.google.com/apps-script/?hl=ar",
      "conditions": [
        "viewport: 360x800",
        "locale: ar",
        "direction: rtl"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F-001",
      "severity": "medium",
      "confidence": "high",
      "summary": "The site ignores the user’s dark color-scheme preference.",
      "evidence": "The dark-mode screenshot is pixel-identical to the light screenshot: white surfaces and light browser chrome remain under prefers-color-scheme: dark.",
      "artifacts": [
        "evidence/home-dark.png",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Declare color-scheme and provide preference-driven dark surface, text, border, image, and embedded-content colors.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-color-scheme",
      "guidanceId": "dark-mode",
      "guidanceCategory": "user-experience"
    },
    {
      "id": "F-002",
      "severity": "low",
      "confidence": "medium",
      "summary": "Page and route changes do not use View Transitions.",
      "evidence": "The DOM/platform probe found no view-transition CSS or API marker, while the primary journey moves between multiple documentation routes.",
      "artifacts": [
        "evidence/home-probe.json"
      ],
      "suggestedFix": "Add a conservative cross-document View Transition for same-origin documentation navigation, with reduced-motion handling.",
      "effort": "small",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "cross-document-transitions",
      "guidanceCategory": "user-experience"
    },
    {
      "id": "F-003",
      "severity": "low",
      "confidence": "high",
      "summary": "The fixed mobile header does not adapt to scroll state.",
      "evidence": "The scroll probe measured the header fixed at top:0 before and after scrolling 1,000px, with no class/state change, shrink, or progress affordance.",
      "artifacts": [
        "evidence/scroll-chrome-probe.json"
      ],
      "suggestedFix": "Reduce or hide nonessential header chrome after scrolling, using scroll-state/container techniques where supported and a stable fallback.",
      "effort": "small",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "provide-guided-navigation",
      "principleCheckId": "scroll-state-aware-chrome",
      "guidanceId": "shrinking-header-on-scroll",
      "guidanceCategory": "user-experience"
    },
    {
      "id": "F-004",
      "severity": "high",
      "confidence": "high",
      "summary": "The cookie notice obscures primary content on every sampled page.",
      "evidence": "Desktop and 360px screenshots show the notice loaded over the content; on mobile it occupies roughly the bottom 229px and hides the start of the article/landing content.",
      "artifacts": [
        "evidence/home-desktop.png",
        "evidence/home-mobile.png",
        "evidence/guides-mobile.png",
        "evidence/reference-mobile.png",
        "evidence/samples-mobile.png"
      ],
      "suggestedFix": "Use a compact, non-obscuring consent surface; preserve equal accept/reject choices and reserve space if a banner must be present.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "light-dismiss-a-dialog",
      "guidanceCategory": "user-experience"
    },
    {
      "id": "F-005",
      "severity": "medium",
      "confidence": "high",
      "summary": "The cookie consent overlay lacks dialog/popover semantics.",
      "evidence": "The DOM probe found no dialog, role=dialog, or popover for the visible consent overlay, despite it intercepting a substantial viewport area.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-desktop.png"
      ],
      "suggestedFix": "Represent the consent interaction with an appropriate dialog or popover primitive, accessible labelling, focus behavior, and declarative dismissal where suitable.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "user-experience"
    },
    {
      "id": "F-006",
      "severity": "low",
      "confidence": "medium",
      "summary": "Reusable site components do not use container-level responsiveness.",
      "evidence": "The rendered stylesheet probe found no @container rules; the same DevSite components are reused in full-width, side-nav, and mobile contexts.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/home-mobile.png"
      ],
      "suggestedFix": "Introduce container queries for reused cards/navigation/content modules that need to adapt to available inline size rather than only viewport breakpoints.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "component-level-responsiveness",
      "guidanceId": "size-aware-styling",
      "guidanceCategory": "user-experience"
    },
    {
      "id": "F-007",
      "severity": "high",
      "confidence": "high",
      "summary": "Load performance and visual stability miss Core Web Vitals targets.",
      "evidence": "Mobile Lighthouse scored performance 0.46 with LCP 13.3s and CLS 0.258; the raw trace corroborated a 3.38s LCP even without Lighthouse throttling.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-trace-summary.json",
        "evidence/home-trace.json"
      ],
      "suggestedFix": "Remove redirect latency, prioritise the LCP resource, reserve late content space, and remeasure LCP/CLS under mobile throttling.",
      "effort": "large",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "performance"
    },
    {
      "id": "F-008",
      "severity": "high",
      "confidence": "high",
      "summary": "Late layout movement is visible across templates.",
      "evidence": "Lighthouse measured CLS 0.258 on the landing page, and the 360px Guides layout primitive independently recorded CLS 0.125425 across five shifts.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/guides-mobile-layout.json",
        "evidence/home-images.json"
      ],
      "suggestedFix": "Reserve dimensions for images and dynamic banners, stabilise font fallback metrics, and prevent late shell upgrades from moving content.",
      "effort": "medium",
      "pathId": "guides",
      "url": "https://script.google.com",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "visual-stability",
      "guidanceId": "visually-stable-font-fallbacks",
      "guidanceCategory": "user-experience"
    },
    {
      "id": "F-009",
      "severity": "high",
      "confidence": "high",
      "summary": "Redirects and render-blocking dependencies delay primary content.",
      "evidence": "HAR captured three redirects before the final page, 87 requests and 2.63MB transferred; Lighthouse estimated 1.84s redirect savings and 1.78s render-blocking savings.",
      "artifacts": [
        "evidence/home.har",
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Link directly to the canonical destination, reduce the redirect chain, inline or split critical CSS, and defer noncritical font/style dependencies.",
      "effort": "large",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-preload-priority",
      "guidanceCategory": "performance"
    },
    {
      "id": "F-010",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page ships substantial unused CSS and JavaScript.",
      "evidence": "Lighthouse estimated 537KiB unused JavaScript and 161KiB unused CSS; HAR shows 58 scripts and 1.30MB script transfer.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Split the shared DevSite bundle by used features, delay optional widgets/analytics, and remove duplicate tag-manager payloads.",
      "effort": "large",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "performance"
    },
    {
      "id": "F-011",
      "severity": "medium",
      "confidence": "high",
      "summary": "Accessibility names and roles contain concrete failures.",
      "evidence": "Lighthouse found a YouTube logo image without alt text and a focusable H2 marked role=presentation, producing a 0.90 accessibility score.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/home-images.json"
      ],
      "suggestedFix": "Give informative images concise alt text (or empty alt when decorative) and remove conflicting presentation roles from semantic headings.",
      "effort": "small",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility"
    },
    {
      "id": "F-012",
      "severity": "medium",
      "confidence": "high",
      "summary": "The landing-page heading hierarchy skips levels.",
      "evidence": "The DOM probe reported H1 “Workspace” followed by the visible hero as H3; Lighthouse flagged that hero heading for invalid heading order. The Reference overview rendered with no H1.",
      "artifacts": [
        "evidence/home-probe.json",
        "evidence/lighthouse-home.json",
        "evidence/reference-dom.json"
      ],
      "suggestedFix": "Make each page’s visible title its H1 and keep subsequent headings sequential without presentation-role conflicts.",
      "effort": "small",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-inclusive",
      "principleCheckId": "structure-and-focus",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility"
    },
    {
      "id": "F-013",
      "severity": "low",
      "confidence": "high",
      "summary": "Footer links rely on color alone and are insufficiently distinct from surrounding text.",
      "evidence": "Lighthouse/axe reported three footer links with only 1.07:1 contrast against surrounding text and no underline or other non-color cue.",
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Underline inline links or add another persistent non-color affordance while maintaining WCAG text contrast.",
      "effort": "small",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-inclusive",
      "principleCheckId": "sufficient-contrast",
      "guidanceId": "accessibility",
      "guidanceCategory": "accessibility"
    },
    {
      "id": "F-014",
      "severity": "medium",
      "confidence": "high",
      "summary": "Image elements omit intrinsic dimensions.",
      "evidence": "The images primitive found all 9 images without width/height attributes; Lighthouse independently flagged four unsized instances including the hero and logos.",
      "artifacts": [
        "evidence/home-images.json",
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Set width and height (or equivalent aspect-ratio reservation) on every image while retaining responsive sizing.",
      "effort": "small",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "html",
      "guidanceCategory": "html"
    },
    {
      "id": "F-015",
      "severity": "low",
      "confidence": "high",
      "summary": "Chrome reports unresolved platform issues from third-party cookies.",
      "evidence": "Lighthouse best-practices scored 0.77 and the Inspector Issues audit listed YouTube/Google cookie issues; four third-party cookies were observed.",
      "artifacts": [
        "evidence/lighthouse-home.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Load embedded media only after intent/consent, use privacy-enhanced embeds where available, and eliminate avoidable third-party-cookie dependencies.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy"
    },
    {
      "id": "F-016",
      "severity": "medium",
      "confidence": "high",
      "summary": "The initial page load has a large analytics and third-party footprint.",
      "evidence": "Tracker capture found 10 third-party origins and Google Analytics/Tag Manager; HAR attributed 85 of 87 requests and 2.629MB to origins other than the requested script.google.com URL, including about 752KB from Tag Manager.",
      "artifacts": [
        "evidence/trackers.json",
        "evidence/home-summary.json"
      ],
      "suggestedFix": "Consolidate analytics, defer it until consent/idle, batch events, and remove tags or embedded services that do not directly support the page task.",
      "effort": "large",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-private-and-secure",
      "principleCheckId": "data-minimisation-and-third-parties",
      "guidanceId": "privacy",
      "guidanceCategory": "privacy"
    },
    {
      "id": "F-017",
      "severity": "medium",
      "confidence": "high",
      "summary": "Defensive response and cookie policies have avoidable gaps.",
      "evidence": "Headers include HSTS, nosniff and CSP frame-ancestors, but CSP permits unsafe-eval and Referrer-Policy/Permissions-Policy are absent; CDP also observed an NID cookie without Secure and SameSite=None.",
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "suggestedFix": "Remove unsafe-eval where possible, add explicit Referrer-Policy and Permissions-Policy, and ensure all HTTPS cookies are Secure with the narrowest suitable SameSite value.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "security"
    },
    {
      "id": "F-018",
      "severity": "low",
      "confidence": "high",
      "summary": "One crawlable link uses generic text.",
      "evidence": "Lighthouse SEO flagged the cookie-policy “Learn more” link as non-descriptive even though anchors otherwise use real href values.",
      "artifacts": [
        "evidence/lighthouse-home.json"
      ],
      "suggestedFix": "Use link text that names its destination, such as “Learn about Google’s cookie use”.",
      "effort": "trivial",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-discoverable",
      "principleCheckId": "crawlable-and-mobile-friendly",
      "guidanceId": "html",
      "guidanceCategory": "html"
    },
    {
      "id": "F-019",
      "severity": "medium",
      "confidence": "high",
      "summary": "The Reference template lacks a meta description and semantic H1.",
      "evidence": "The Reference DOM has a descriptive title and canonical URL but no meta description and no H1, unlike the Guides and Samples templates.",
      "artifacts": [
        "evidence/reference-dom.json",
        "evidence/reference-mobile.png"
      ],
      "suggestedFix": "Add a template-specific meta description and expose “Reference overview” as the page H1.",
      "effort": "small",
      "pathId": "reference",
      "url": "https://developers.google.com/apps-script/reference",
      "principleId": "be-discoverable",
      "principleCheckId": "title-and-description",
      "guidanceId": "html",
      "guidanceCategory": "html"
    },
    {
      "id": "F-020",
      "severity": "high",
      "confidence": "high",
      "summary": "A decorative SVG dominates transferred image bytes.",
      "evidence": "HAR identified landing-page-hero.svg as an uncompressed 894,905-byte response and the largest resource on a 2.63MB load.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/home-images.json"
      ],
      "suggestedFix": "Optimise/minify the SVG, remove unnecessary embedded detail, compress it in transfer, and provide only the fidelity required at rendered size.",
      "effort": "medium",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-sustainable",
      "principleCheckId": "optimised-assets",
      "guidanceId": "deliver-optimized-decorative-images",
      "guidanceCategory": "user-experience"
    },
    {
      "id": "F-021",
      "severity": "medium",
      "confidence": "high",
      "summary": "Third-party scripts, fonts, and embedded media are disproportionate to the core documentation task.",
      "evidence": "HAR recorded 2.63MB total, including five Tag Manager/gtag bundles, 208KB fonts, and a YouTube iframe initialized on load; Lighthouse measured 3,578KiB under its run.",
      "artifacts": [
        "evidence/home-summary.json",
        "evidence/lighthouse-home.json",
        "evidence/platform-probe.json"
      ],
      "suggestedFix": "Gate YouTube behind a lightweight poster/intent, reduce font families/weights, and enforce a third-party byte/request budget.",
      "effort": "large",
      "pathId": "home",
      "url": "https://script.google.com",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "performance"
    }
  ],
  "taskList": [
    {
      "id": "T-001",
      "title": "Remove redirect, LCP, CLS, and unsized-image bottlenecks",
      "priority": 1,
      "findingIds": [
        "F-007",
        "F-008",
        "F-009",
        "F-014"
      ],
      "guidanceId": "optimize-preload-priority",
      "status": "open"
    },
    {
      "id": "T-002",
      "title": "Replace the obstructive consent overlay with a compact semantic surface",
      "priority": 2,
      "findingIds": [
        "F-004",
        "F-005"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T-003",
      "title": "Cut analytics, third-party, unused-code, and embedded-media cost",
      "priority": 3,
      "findingIds": [
        "F-010",
        "F-015",
        "F-016",
        "F-021"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T-004",
      "title": "Optimise and compress the 895KB hero SVG",
      "priority": 4,
      "findingIds": [
        "F-020"
      ],
      "guidanceId": "deliver-optimized-decorative-images",
      "status": "open"
    },
    {
      "id": "T-005",
      "title": "Repair headings, image alternatives, roles, and inline-link affordances",
      "priority": 5,
      "findingIds": [
        "F-011",
        "F-012",
        "F-013"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T-006",
      "title": "Harden CSP, referrer/permissions policy, and cookie flags",
      "priority": 6,
      "findingIds": [
        "F-017"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T-007",
      "title": "Add preference-driven dark mode",
      "priority": 7,
      "findingIds": [
        "F-001"
      ],
      "guidanceId": "dark-mode",
      "status": "open"
    },
    {
      "id": "T-008",
      "title": "Fix Reference metadata and generic link text",
      "priority": 8,
      "findingIds": [
        "F-018",
        "F-019"
      ],
      "guidanceId": "html",
      "status": "open"
    },
    {
      "id": "T-009",
      "title": "Adopt container-aware components and subtle navigation transitions",
      "priority": 9,
      "findingIds": [
        "F-002",
        "F-003",
        "F-006"
      ],
      "guidanceId": "size-aware-styling",
      "status": "open"
    }
  ],
  "budget": {
    "wallClockSeconds": 1100,
    "pathCount": 6,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-24T00-20-57-907Z"
}
