{
  "url": "https://gemini.google.com",
  "auditedAt": "2026-07-21T19:17:39.928Z",
  "mode": "report",
  "status": "completed",
  "statusDetail": "Coverage-complete unauthenticated audit. Signed-in conversation history, paid subscription/checkout, generated response states, and destructive account actions were excluded because they require credentials or commitments.",
  "page": {
    "appType": "hybrid",
    "framework": "Angular app entry; related release-notes route redirects to a separate React-like gemini.google property; FAQ redirects to Google Help.",
    "notes": "Public AI assistant with app, download, release-note, help, localization, consent, and Google Accounts sign-in surfaces."
  },
  "evidenceUsed": [
    "screenshot",
    "video",
    "dom",
    "evaluate-probe",
    "layout-metrics",
    "trace",
    "har",
    "discoverability",
    "headers",
    "cookies",
    "trackers",
    "images",
    "secrets",
    "heap-summary",
    "lighthouse",
    "robots.txt",
    "sitemap.xml"
  ],
  "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/app-desktop.png",
      "caption": "app desktop"
    },
    {
      "type": "other",
      "path": "evidence/app-probe.json",
      "caption": "app probe",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/arabic-mobile.png",
      "caption": "arabic mobile"
    },
    {
      "type": "other",
      "path": "evidence/arabic-probe.json",
      "caption": "arabic probe"
    },
    {
      "type": "other",
      "path": "evidence/cookies.json",
      "caption": "cookies"
    },
    {
      "type": "screenshot",
      "path": "evidence/dark.png",
      "caption": "dark"
    },
    {
      "type": "screenshot",
      "path": "evidence/desktop-rejected.png",
      "caption": "desktop rejected"
    },
    {
      "type": "screenshot",
      "path": "evidence/desktop.png",
      "caption": "desktop",
      "findingIds": [
        "F03",
        "F18",
        "F21"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-crawler.png",
      "caption": "discoverability crawler",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/discoverability-rendered.png",
      "caption": "discoverability rendered",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "discoverability",
      "path": "evidence/discoverability.json",
      "caption": "discoverability",
      "findingIds": [
        "F15"
      ]
    },
    {
      "type": "other",
      "path": "evidence/document-assets.json",
      "caption": "document assets",
      "findingIds": [
        "F09",
        "F12",
        "F16"
      ]
    },
    {
      "type": "dom",
      "path": "evidence/dom.json",
      "caption": "dom",
      "findingIds": [
        "F02",
        "F15"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/download-mobile.png",
      "caption": "download mobile"
    },
    {
      "type": "other",
      "path": "evidence/download-probe.json",
      "caption": "download probe"
    },
    {
      "type": "dom",
      "path": "evidence/faq-dom.json",
      "caption": "faq dom"
    },
    {
      "type": "screenshot",
      "path": "evidence/faq.png",
      "caption": "faq"
    },
    {
      "type": "other",
      "path": "evidence/headers.json",
      "caption": "headers",
      "findingIds": [
        "F14",
        "F16"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-baseline.heapsnapshot",
      "caption": "heap baseline",
      "findingIds": [
        "F21"
      ]
    },
    {
      "type": "heap",
      "path": "evidence/heap-post.heapsnapshot",
      "caption": "heap post"
    },
    {
      "type": "screenshot",
      "path": "evidence/high-contrast.png",
      "caption": "high contrast"
    },
    {
      "type": "other",
      "path": "evidence/images.json",
      "caption": "images",
      "findingIds": [
        "F12"
      ]
    },
    {
      "type": "other",
      "path": "evidence/input-focus.json",
      "caption": "input focus",
      "findingIds": [
        "F05"
      ]
    },
    {
      "type": "layout",
      "path": "evidence/layout-mobile.json",
      "caption": "layout mobile"
    },
    {
      "type": "other",
      "path": "evidence/light-probe.json",
      "caption": "light probe"
    },
    {
      "type": "screenshot",
      "path": "evidence/light.png",
      "caption": "light"
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse-summary.json",
      "caption": "lighthouse summary",
      "findingIds": [
        "F04",
        "F07",
        "F08",
        "F09",
        "F10",
        "F11",
        "F13"
      ]
    },
    {
      "type": "lighthouse",
      "path": "evidence/lighthouse.json",
      "caption": "lighthouse",
      "findingIds": [
        "F07",
        "F10",
        "F13"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/mobile.png",
      "caption": "mobile",
      "findingIds": [
        "F03",
        "F06",
        "F18"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/navigation-contact.png",
      "caption": "navigation contact"
    },
    {
      "type": "video",
      "path": "evidence/navigation.mp4",
      "caption": "navigation",
      "findingIds": [
        "F02"
      ]
    },
    {
      "type": "har-summary",
      "path": "evidence/network-summary.json",
      "caption": "network summary",
      "findingIds": [
        "F09",
        "F19",
        "F20",
        "F21"
      ]
    },
    {
      "type": "har",
      "path": "evidence/network.har",
      "caption": "network",
      "findingIds": [
        "F09",
        "F19",
        "F20"
      ]
    },
    {
      "type": "other",
      "path": "evidence/not-found-probe.json",
      "caption": "not found probe",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "screenshot",
      "path": "evidence/not-found.png",
      "caption": "not found",
      "findingIds": [
        "F17"
      ]
    },
    {
      "type": "other",
      "path": "evidence/platform-probe.json",
      "caption": "platform probe"
    },
    {
      "type": "other",
      "path": "evidence/prompt-flow.json",
      "caption": "prompt flow",
      "findingIds": [
        "F06"
      ]
    },
    {
      "type": "other",
      "path": "evidence/reduced-motion.json",
      "caption": "reduced motion",
      "findingIds": [
        "F01"
      ]
    },
    {
      "type": "other",
      "path": "evidence/runtime-probe.json",
      "caption": "runtime probe",
      "findingIds": [
        "F04",
        "F11"
      ]
    },
    {
      "type": "other",
      "path": "evidence/secrets.json",
      "caption": "secrets"
    },
    {
      "type": "screenshot",
      "path": "evidence/signin.png",
      "caption": "signin"
    },
    {
      "type": "trace-summary",
      "path": "evidence/trace-summary.json",
      "caption": "trace summary",
      "findingIds": [
        "F07",
        "F08"
      ]
    },
    {
      "type": "trace",
      "path": "evidence/trace.json",
      "caption": "trace",
      "findingIds": [
        "F07"
      ]
    },
    {
      "type": "other",
      "path": "evidence/trackers.json",
      "caption": "trackers"
    },
    {
      "type": "screenshot",
      "path": "evidence/updates-discoverability-crawler.png",
      "caption": "updates discoverability crawler"
    },
    {
      "type": "screenshot",
      "path": "evidence/updates-discoverability-rendered.png",
      "caption": "updates discoverability rendered"
    },
    {
      "type": "discoverability",
      "path": "evidence/updates-discoverability.json",
      "caption": "updates discoverability"
    },
    {
      "type": "layout",
      "path": "evidence/updates-layout.json",
      "caption": "updates layout"
    },
    {
      "type": "screenshot",
      "path": "evidence/updates-mobile.png",
      "caption": "updates mobile"
    },
    {
      "type": "other",
      "path": "evidence/updates-probe.json",
      "caption": "updates probe"
    }
  ],
  "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": "pass",
      "confidence": "high",
      "method": "Screenshots and computed-style probe under light and dark emulation",
      "evidence": "Light emulation produced rgb(253,252,252) and a light-theme body; dark emulation produced the dark surface, so the page follows the system scheme.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/light.png",
        "evidence/dark.png",
        "evidence/light-probe.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-reduced-motion",
      "status": "issues",
      "confidence": "high",
      "method": "getAnimations() under reduced-motion emulation",
      "evidence": "Ten animations remained running under prefers-reduced-motion: reduce, including morph, scale, sweep, rotate, and gradient loops with 4.3s to 1,498.5s durations.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "findingIds": [
        "F01"
      ]
    },
    {
      "principleId": "respect-user-preferences",
      "checkId": "respects-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Screenshot under prefers-contrast: more and forced-colors: active",
      "evidence": "Forced-colors/high-contrast capture preserves text, controls, borders, icons, and links.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/high-contrast.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "view-transitions",
      "status": "issues",
      "confidence": "high",
      "method": "DOM/CSS feature scan plus transition recording",
      "evidence": "Rendered DOM/CSS evidence contains no view-transition declarations for accessible state/navigation changes; navigation is implemented without the modern transition primitive.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/dom.json",
        "evidence/navigation.mp4"
      ],
      "findingIds": [
        "F02"
      ]
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "scroll-driven-animations",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No scroll-linked parallax, scrollytelling, carousel, or reveal interaction was present on the audited Gemini app entry surface.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "No scroll-linked parallax, scrollytelling, carousel, or reveal interaction was present on the audited Gemini app entry surface."
    },
    {
      "principleId": "implement-natural-interactions",
      "checkId": "physical-gestures",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No swipe, pull-to-reveal, removable list, or other physical gesture surface was available in the signed-out representative flow.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "No swipe, pull-to-reveal, removable list, or other physical gesture surface was available in the signed-out representative flow."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "scroll-state-aware-chrome",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "The signed-out app entry is a single-viewport prompt surface; the long release-notes route redirects to a separate gemini.google origin and was treated as a related path, not app chrome.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "The signed-out app entry is a single-viewport prompt surface; the long release-notes route redirects to a separate gemini.google origin and was treated as a related path, not app chrome."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "anchored-positioning",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No tooltip or edge-positioned popover was exposed in the signed-out primary flow; the consent surface is a modal dialog, not an anchored transient overlay.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "No tooltip or edge-positioned popover was exposed in the signed-out primary flow; the consent surface is a modal dialog, not an anchored transient overlay."
    },
    {
      "principleId": "provide-guided-navigation",
      "checkId": "directs-attention",
      "status": "pass",
      "confidence": "high",
      "method": "Representative-path screenshot review",
      "evidence": "Entry, download, help, release-notes, and sign-in screenshots each expose a clear heading and visually dominant next control.",
      "pathIds": [
        "entry",
        "download",
        "release-notes",
        "sign-in"
      ],
      "artifacts": [
        "evidence/desktop.png",
        "evidence/download-mobile.png",
        "evidence/updates-mobile.png",
        "evidence/signin.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "no-intrusive-interruptions",
      "status": "issues",
      "confidence": "high",
      "method": "Desktop and mobile first-load screenshots",
      "evidence": "On first load the consent dialog obscures the primary prompt; at 360x800 it fills almost the entire viewport and initially exposes only “Read more”, not the accept/reject controls.",
      "pathIds": [
        "entry-mobile"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/desktop.png"
      ],
      "findingIds": [
        "F03"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "semantic-dismissible-primitives",
      "status": "issues",
      "confidence": "high",
      "method": "DOM/runtime dialog probe and Lighthouse accessibility audit",
      "evidence": "The consent UI is a custom MAT-DIALOG-CONTAINER with role=dialog, aria-modal=false, and no accessible name, despite visually blocking the app.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/runtime-probe.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F04"
      ]
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "checkId": "reduced-chrome",
      "status": "pass",
      "confidence": "high",
      "method": "Representative screenshot review",
      "evidence": "Behind the consent layer the signed-out app devotes the viewport to a single prompt composer and minimal navigation; download and help pages retain clear content hierarchy.",
      "pathIds": [
        "entry",
        "download"
      ],
      "artifacts": [
        "evidence/desktop.png",
        "evidence/download-mobile.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "responsive-no-horizontal-scroll",
      "status": "pass",
      "confidence": "high",
      "method": "Layout primitives at 360x800",
      "evidence": "At 360x800 the app and release notes reported 0px horizontal overflow, valid viewport metadata, and mobile-specific layout.",
      "pathIds": [
        "entry-mobile",
        "release-notes"
      ],
      "artifacts": [
        "evidence/layout-mobile.json",
        "evidence/updates-layout.json",
        "evidence/mobile.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "component-level-responsiveness",
      "status": "pass",
      "confidence": "high",
      "method": "CSSOM feature probe and cross-viewport screenshots",
      "evidence": "Runtime CSS inspection found a container rule, and app/download controls reflow from wide to narrow captures without overflow.",
      "pathIds": [
        "entry",
        "entry-mobile",
        "download"
      ],
      "artifacts": [
        "evidence/runtime-probe.json",
        "evidence/desktop.png",
        "evidence/mobile.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "checkId": "input-modality-aware",
      "status": "issues",
      "confidence": "high",
      "method": "Rendered target-size and focus probe",
      "evidence": "The target probe found multiple actionable links only 17–18px high and a “More options” button 22px high, below robust touch-target expectations.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/input-focus.json"
      ],
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-purpose-and-primary-action",
      "status": "pass",
      "confidence": "high",
      "method": "DOM text and first-viewport review",
      "evidence": "The H1 “Meet Gemini, your personal AI assistant” and prominently labelled prompt textbox communicate purpose and next action.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/app-probe.json",
        "evidence/desktop.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "primary-flow-completion",
      "status": "issues",
      "confidence": "high",
      "method": "Prompt-flow DOM probe and first-load screenshots",
      "evidence": "The representative signed-out prompt flow cannot begin until the full-screen consent layer is expanded and answered; the core composer is visibly present but blocked.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/app-probe.json",
        "evidence/prompt-flow.json"
      ],
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "checkId": "clear-system-state-and-recovery",
      "status": "pass",
      "confidence": "high",
      "method": "Runtime control-state probe and screenshots",
      "evidence": "Sign-in state, model selection, disabled/open sidebar states, AI accuracy disclaimer, and explicit consent choices are visibly labelled.",
      "pathIds": [
        "entry",
        "sign-in"
      ],
      "artifacts": [
        "evidence/app-probe.json",
        "evidence/signin.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "good-core-web-vitals",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse mobile run corroborated by DevTools trace",
      "evidence": "Mobile Lighthouse measured LCP 28.5s, FCP 6.7s, TBT 940ms, Speed Index 11.5s, and performance score 0.35; a separate trace measured LCP 2.32s, showing strong condition sensitivity but confirming the throttled experience is poor.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/trace-summary.json",
        "evidence/lighthouse.json",
        "evidence/trace.json"
      ],
      "findingIds": [
        "F07"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "visual-stability",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse and layout-shift observers",
      "evidence": "Lighthouse CLS was 0.002 and the mobile layout observer measured 0.048, both within the good range; release notes measured zero shift.",
      "pathIds": [
        "entry",
        "release-notes"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/layout-mobile.json",
        "evidence/updates-layout.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-main-thread",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse diagnostics and trace summary",
      "evidence": "Lighthouse reported 4.2s main-thread work, 2.1s JavaScript execution, and 940ms TBT; the trace also recorded three long tasks and 48ms TBT.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/trace-summary.json"
      ],
      "findingIds": [
        "F08"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "efficient-resource-delivery",
      "status": "issues",
      "confidence": "high",
      "method": "HAR summary, DOM script-attribute confirmation, and Lighthouse",
      "evidence": "Initial load transferred 5.33MB across 95 requests, including 3.71MB scripts and 1.37MB fonts; Lighthouse found redirect, document-latency, cache, font-display, and dependency-tree opportunities.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/network.har",
        "evidence/document-assets.json",
        "evidence/lighthouse-summary.json"
      ],
      "findingIds": [
        "F09"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "checkId": "trim-unused-and-duplicate-code",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse code-coverage diagnostics",
      "evidence": "Lighthouse estimated 1,106KiB unused JavaScript and 58KiB unused CSS on the signed-out entry surface.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "names-roles-labels",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse accessibility audits and runtime dialog probe",
      "evidence": "Lighthouse found the role=dialog surface has no accessible name and a visible-label/accessibility-name mismatch.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/runtime-probe.json"
      ],
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "be-inclusive",
      "checkId": "sufficient-contrast",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse plus forced-colors screenshot",
      "evidence": "Lighthouse accessibility scored 0.96 without a contrast failure, and forced-colors capture retained readable text/control boundaries.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/high-contrast.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-inclusive",
      "checkId": "structure-and-focus",
      "status": "pass",
      "confidence": "high",
      "method": "Heading/control DOM probe and programmatic focus walk",
      "evidence": "The app exposes H1s and named controls; keyboard focus probes show UA or custom focus outlines on the tested menu, tool, link, language, and consent controls.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/runtime-probe.json",
        "evidence/input-focus.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-inclusive",
      "checkId": "legible-text",
      "status": "pass",
      "confidence": "high",
      "method": "Multi-path visual review",
      "evidence": "Across desktop, 360px mobile, Arabic RTL, download, help, and release-notes captures, text remains unclipped and readable with clear line spacing.",
      "pathIds": [
        "entry",
        "entry-mobile",
        "arabic",
        "download",
        "release-notes"
      ],
      "artifacts": [
        "evidence/desktop.png",
        "evidence/mobile.png",
        "evidence/arabic-mobile.png",
        "evidence/download-mobile.png",
        "evidence/updates-mobile.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-inclusive",
      "checkId": "zoom-reflow-targets-and-media",
      "status": "pass",
      "confidence": "high",
      "method": "Viewport/layout and media DOM inspection",
      "evidence": "Viewport metadata does not disable scaling and 360px layouts reflow without horizontal overflow; no essential audio/video content was present on the audited surfaces.",
      "pathIds": [
        "entry-mobile",
        "release-notes"
      ],
      "artifacts": [
        "evidence/layout-mobile.json",
        "evidence/updates-layout.json",
        "evidence/runtime-probe.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "no-console-errors",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse best-practices run",
      "evidence": "Lighthouse best-practices scored 1.00 and did not report browser errors or uncaught exceptions.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "sound-document-and-assets",
      "status": "issues",
      "confidence": "high",
      "method": "Document-assets and image audit primitives",
      "evidence": "The document has HTML doctype and UTF-8, but all five img elements lack width/height attributes and one visible SVG is delivered at 150px intrinsic width for a 40px display.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/document-assets.json",
        "evidence/images.json"
      ],
      "findingIds": [
        "F12"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "checkId": "browser-platform-hygiene",
      "status": "issues",
      "confidence": "high",
      "method": "Lighthouse BFCache diagnostic",
      "evidence": "Lighthouse reports three reasons preventing back/forward cache restoration, despite the overall best-practices category passing.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/lighthouse.json"
      ],
      "findingIds": [
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "checkId": "title-and-description",
      "status": "pass",
      "confidence": "high",
      "method": "DOM metadata probes",
      "evidence": "The entry has title “Google Gemini” and a descriptive meta description; download and release notes provide path-specific descriptions.",
      "pathIds": [
        "entry",
        "download",
        "release-notes"
      ],
      "artifacts": [
        "evidence/runtime-probe.json",
        "evidence/download-probe.json",
        "evidence/updates-probe.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-discoverable",
      "checkId": "crawlable-and-mobile-friendly",
      "status": "pass",
      "confidence": "high",
      "method": "Lighthouse, DOM links, robots.txt, and sitemap recon",
      "evidence": "Lighthouse SEO scored 1.00; viewport metadata is present, robots allows the root and download route, and crawlable policy/help links use real hrefs.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/runtime-probe.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-discoverable",
      "checkId": "canonical-and-indexing-signals",
      "status": "pass",
      "confidence": "high",
      "method": "Header fetch, runtime canonical probe, robots.txt and sitemap recon",
      "evidence": "The root returned HTTP 200 with canonical https://gemini.google.com/, robots references a successful 315-URL sitemap, and locale/path variants are represented.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/runtime-probe.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-discoverable",
      "checkId": "structured-and-shareable-metadata",
      "status": "pass",
      "confidence": "high",
      "method": "Runtime metadata probes",
      "evidence": "Entry and release-notes pages expose JSON-LD plus Open Graph metadata consistent with visible Gemini content.",
      "pathIds": [
        "entry",
        "release-notes"
      ],
      "artifacts": [
        "evidence/runtime-probe.json",
        "evidence/updates-probe.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "secure-transport-and-headers",
      "status": "issues",
      "confidence": "high",
      "method": "Headers and cookies primitives",
      "evidence": "HTTPS, CSP, nosniff, and X-Frame-Options are present, but the CSP permits unsafe-inline/unsafe-eval, HSTS and Referrer-Policy are absent, and GOOGLE_ABUSE_EXEMPTION is reported without Secure and with SameSite=None.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/headers.json",
        "evidence/cookies.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "data-minimisation-and-third-parties",
      "status": "pass",
      "confidence": "high",
      "method": "Trackers, HAR, and consent review",
      "evidence": "The consent surface offers Reject all; tracker matching found no known tracker domains. Eight service origins were contacted, all within Google-controlled infrastructure, so no independent leaky third party was demonstrated.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/trackers.json",
        "evidence/network-summary.json",
        "evidence/desktop.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "in-context-permissions-and-modern-auth",
      "status": "pass",
      "confidence": "high",
      "method": "Runtime permission-resource probe and sign-in walkthrough",
      "evidence": "No geolocation/notification request was observed on load; authentication hands off to Google Accounts over HTTPS, whose first step is clearly labelled.",
      "pathIds": [
        "entry",
        "sign-in"
      ],
      "artifacts": [
        "evidence/platform-probe.json",
        "evidence/signin.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-private-and-secure",
      "checkId": "defensive-browser-policies",
      "status": "issues",
      "confidence": "high",
      "method": "Structured security-header audit",
      "evidence": "Clickjacking and Trusted Types defenses are present, but HSTS and Referrer-Policy are absent and the broad CSP includes unsafe-inline/unsafe-eval.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/headers.json"
      ],
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "progressive-enhancement",
      "status": "issues",
      "confidence": "high",
      "method": "Discoverability/no-JS primitive confirmed against rendered DOM",
      "evidence": "Raw server HTML contains only 3% of rendered content words, no H1, and produces an almost blank crawler screenshot; the primary app content depends on JavaScript.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png",
        "evidence/dom.json"
      ],
      "findingIds": [
        "F15"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "resilient-runtime-behaviour",
      "status": "pass",
      "confidence": "high",
      "method": "Cross-condition screenshots, layout probe, and repeated-state heap comparison",
      "evidence": "App controls, consent layer, Arabic RTL layout, and 360px layouts rendered without clipping or horizontal overflow; repeated sidebar state changes did not increase heap totals.",
      "pathIds": [
        "entry",
        "entry-mobile",
        "arabic"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/arabic-mobile.png",
        "evidence/layout-mobile.json",
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-resilient",
      "checkId": "offline-and-installable",
      "status": "issues",
      "confidence": "high",
      "method": "DOM asset/manifest inspection and response headers",
      "evidence": "This app-like site exposes no web app manifest and the CSP sets manifest-src none; no installable/offline web fallback was found.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/document-assets.json",
        "evidence/headers.json"
      ],
      "findingIds": [
        "F16"
      ]
    },
    {
      "principleId": "be-resilient",
      "checkId": "network-and-http-failure-states",
      "status": "issues",
      "confidence": "high",
      "method": "Unknown-route navigation and screenshot",
      "evidence": "A representative unknown route returns a bare 404 page with “That’s all we know” and no retry, home, search, or recovery action.",
      "pathIds": [
        "not-found"
      ],
      "artifacts": [
        "evidence/not-found.png",
        "evidence/not-found-probe.json"
      ],
      "findingIds": [
        "F17"
      ]
    },
    {
      "principleId": "be-internationalised",
      "checkId": "lang-dir-and-logical-properties",
      "status": "pass",
      "confidence": "high",
      "method": "Arabic/English DOM and screenshot comparison",
      "evidence": "The Arabic route sets lang=ar and dir=rtl, mirrors the layout, and has no horizontal overflow; English routes set appropriate en-US/en-GB language values.",
      "pathIds": [
        "arabic",
        "entry",
        "release-notes"
      ],
      "artifacts": [
        "evidence/arabic-probe.json",
        "evidence/arabic-mobile.png",
        "evidence/runtime-probe.json",
        "evidence/updates-probe.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-internationalised",
      "checkId": "locale-aware-data",
      "status": "pass",
      "confidence": "high",
      "method": "Sitemap enumeration and localized rendered DOM",
      "evidence": "The sitemap publishes 63 locale variants for each major path and the Arabic UI is translated rather than merely relabelled at the document level.",
      "pathIds": [
        "arabic"
      ],
      "artifacts": [
        "evidence/arabic-probe.json",
        "evidence/arabic-mobile.png"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-internationalised",
      "checkId": "time-zone-correctness",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "No time-zone-sensitive event, appointment, deadline, or local-time transaction appears in the audited app entry, download, help, or release-note surfaces.",
      "pathIds": [
        "entry",
        "download",
        "release-notes"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "No time-zone-sensitive event, appointment, deadline, or local-time transaction appears in the audited app entry, download, help, or release-note surfaces."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "no-dark-patterns",
      "status": "issues",
      "confidence": "high",
      "method": "First-load mobile/desktop consent review",
      "evidence": "On mobile, consent choices are withheld behind “Read more” while the modal blocks the core product; users cannot initially choose Accept all or Reject all.",
      "pathIds": [
        "entry-mobile"
      ],
      "artifacts": [
        "evidence/mobile.png",
        "evidence/desktop.png"
      ],
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "humane-error-handling",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "Gemini’s audited surfaces contain no conventional editable form with required/invalid submission states; the Google Accounts form is a separate origin and was not submitted.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "Gemini’s audited surfaces contain no conventional editable form with required/invalid submission states; the Google Accounts form is a separate origin and was not submitted."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "trustworthy-input-assistance",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "The Gemini prompt is a free-form contenteditable, not an address, payment, sign-in, or sign-up field where autocomplete tokens apply.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "The Gemini prompt is a free-form contenteditable, not an address, payment, sign-in, or sign-up field where autocomplete tokens apply."
    },
    {
      "principleId": "be-trustworthy",
      "checkId": "safe-commercial-and-account-flows",
      "status": "pass",
      "confidence": "high",
      "method": "Sign-in screenshot and link/control probe",
      "evidence": "The audited account handoff clearly identifies Google sign-in, offers account creation and guest-mode guidance, and exposes privacy/terms links; no purchase or subscription commitment was entered.",
      "pathIds": [
        "sign-in"
      ],
      "artifacts": [
        "evidence/signin.png",
        "evidence/runtime-probe.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-sustainable",
      "checkId": "optimised-assets",
      "status": "pass",
      "confidence": "high",
      "method": "HAR and image audit",
      "evidence": "Only 15.4KB of images transferred and three of five image resources use modern SVG; the one PNG is a 24px brand mark.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/images.json"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-sustainable",
      "checkId": "no-wasteful-work",
      "status": "issues",
      "confidence": "high",
      "method": "HAR resource-budget analysis",
      "evidence": "A nearly empty signed-out prompt surface transfers 5.33MB, including 3.71MB scripts and 1.37MB fonts, before the user performs a task.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/network.har"
      ],
      "findingIds": [
        "F19"
      ]
    },
    {
      "principleId": "be-sustainable",
      "checkId": "third-party-and-media-budget",
      "status": "issues",
      "confidence": "high",
      "method": "HAR origin and byte-budget analysis",
      "evidence": "70 of 95 initial requests and 5.19MB of 5.33MB are classified off the gemini.google.com origin; Google-owned gemini.gstatic.com and fonts.gstatic.com dominate bytes.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/network.har"
      ],
      "findingIds": [
        "F20"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "structured-agent-capabilities",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "WebMCP is emerging and no explicit agent-facing scope is declared. A probe found no navigator MCP surface or registered machine-readable tools, so this is recorded as an opportunity rather than a failure.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "WebMCP is emerging and no explicit agent-facing scope is declared. A probe found no navigator MCP surface or registered machine-readable tools, so this is recorded as an opportunity rather than a failure."
    },
    {
      "principleId": "be-agent-ready",
      "checkId": "on-device-inference",
      "status": "not-applicable",
      "confidence": "high",
      "method": "Recon and applicability judgement",
      "evidence": "Gemini is itself a server-backed AI product, but no audited user task established a need for browser built-in on-device LanguageModel or Summarizer APIs.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [],
      "findingIds": [],
      "reason": "Gemini is itself a server-backed AI product, but no audited user task established a need for browser built-in on-device LanguageModel or Summarizer APIs."
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-leak-under-repeated-interaction",
      "status": "pass",
      "confidence": "high",
      "method": "Baseline and post-interaction heap-summary comparison",
      "evidence": "After ten representative sidebar open/close attempts, heap nodes fell from 1,193,867 to 1,186,030 and self size fell from 66.39MB to 65.37MB; no retained-growth signal was observed.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ],
      "findingIds": []
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "bounded-footprint",
      "status": "issues",
      "confidence": "high",
      "method": "Heap totals judged against visible surface and HAR",
      "evidence": "The signed-out entry retains about 65–66MB across roughly 1.19M V8 heap nodes before a conversation begins, disproportionate to the visible single prompt surface and consistent with the 5.33MB/46-script load.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/network-summary.json",
        "evidence/desktop.png"
      ],
      "findingIds": [
        "F21"
      ]
    },
    {
      "principleId": "be-memory-efficient",
      "checkId": "no-detached-dom-or-unbounded-listeners",
      "status": "pass",
      "confidence": "high",
      "method": "Before/after heap constructor comparison",
      "evidence": "No Detached* constructor appears among top retained constructors; closure count fell from 111,177 to 109,746 after repeated interaction and overall heap totals decreased.",
      "pathIds": [
        "entry"
      ],
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/heap-post.heapsnapshot"
      ],
      "findingIds": []
    }
  ],
  "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": "pass"
    },
    {
      "principleId": "maximize-content-reduce-noise",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F03",
        "F04"
      ]
    },
    {
      "principleId": "adapt-to-the-form-factor",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F05"
      ]
    },
    {
      "principleId": "support-core-task-success",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F06"
      ]
    },
    {
      "principleId": "be-fast-and-stable",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F07",
        "F08",
        "F09",
        "F10"
      ]
    },
    {
      "principleId": "be-inclusive",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F11"
      ]
    },
    {
      "principleId": "follow-best-practices",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F12",
        "F13"
      ]
    },
    {
      "principleId": "be-discoverable",
      "expectation": "default",
      "status": "pass"
    },
    {
      "principleId": "be-private-and-secure",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F14"
      ]
    },
    {
      "principleId": "be-resilient",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F15",
        "F16",
        "F17"
      ]
    },
    {
      "principleId": "be-internationalised",
      "expectation": "contextual",
      "status": "pass"
    },
    {
      "principleId": "be-trustworthy",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F18"
      ]
    },
    {
      "principleId": "be-sustainable",
      "expectation": "contextual",
      "status": "issues",
      "findingIds": [
        "F19",
        "F20"
      ]
    },
    {
      "principleId": "be-agent-ready",
      "expectation": "contextual",
      "status": "not-applicable",
      "reason": "WebMCP is emerging and no explicit agent-facing scope is declared. A probe found no navigator MCP surface or registered machine-readable tools, so this is recorded as an opportunity rather than a failure."
    },
    {
      "principleId": "be-memory-efficient",
      "expectation": "default",
      "status": "issues",
      "findingIds": [
        "F21"
      ]
    }
  ],
  "paths": [
    {
      "id": "entry",
      "description": "Signed-out Gemini app entry and prompt composer; primary app archetype.",
      "url": "https://gemini.google.com",
      "conditions": [
        "desktop 1440x900",
        "light/dark preference",
        "reduced motion",
        "forced colors",
        "keyboard focus",
        "no JavaScript crawler"
      ],
      "result": "issues"
    },
    {
      "id": "entry-mobile",
      "description": "Signed-out app at 360x800; mobile form-factor and consent path.",
      "url": "https://gemini.google.com",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "download",
      "description": "Native-app download landing page; promotional/detail archetype.",
      "url": "https://gemini.google.com/app/download",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "release-notes",
      "description": "Updates listing/content archetype; redirects to gemini.google/release-notes/.",
      "url": "https://gemini.google.com/updates",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "arabic",
      "description": "Arabic localized app variant representing RTL and localization.",
      "url": "https://gemini.google.com/?hl=ar",
      "conditions": [
        "viewport 360x800",
        "lang ar",
        "dir rtl"
      ],
      "result": "pass"
    },
    {
      "id": "sign-in",
      "description": "Google Accounts handoff representing authentication entry; stopped before credential submission.",
      "url": "https://accounts.google.com/ServiceLogin?continue=https://gemini.google.com/",
      "conditions": [
        "desktop 1440x900"
      ],
      "result": "pass"
    },
    {
      "id": "not-found",
      "description": "Unknown route representing HTTP/navigation failure recovery.",
      "url": "https://gemini.google.com/this-route-does-not-exist",
      "conditions": [
        "viewport 360x800"
      ],
      "result": "issues"
    },
    {
      "id": "help",
      "description": "FAQ/help route; redirects to Google Help and represents support/search.",
      "url": "https://gemini.google.com/faq",
      "conditions": [
        "desktop 1440x900"
      ],
      "result": "pass"
    }
  ],
  "findings": [
    {
      "id": "F01",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "respect-user-preferences",
      "principleCheckId": "respects-reduced-motion",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Motion preference is ignored",
      "evidence": "The decorative Gemini background keeps ten long-running morph/scale/sweep/rotate animations active under reduced motion.",
      "artifacts": [
        "evidence/reduced-motion.json"
      ],
      "suggestedFix": "Gate non-essential animations with @media (prefers-reduced-motion: reduce), stopping or simplifying looping motion.",
      "effort": "small"
    },
    {
      "id": "F02",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "implement-natural-interactions",
      "principleCheckId": "view-transitions",
      "guidanceId": "same-document-transitions",
      "guidanceCategory": "modern-web-guidance",
      "severity": "low",
      "confidence": "high",
      "summary": "State changes do not use View Transitions",
      "evidence": "DOM/CSS inspection found no view-transition declarations on the app entry.",
      "artifacts": [
        "evidence/dom.json",
        "evidence/navigation.mp4"
      ],
      "suggestedFix": "Adopt same-document View Transitions for major sidebar, picker, and route state swaps, with reduced-motion handling.",
      "effort": "medium"
    },
    {
      "id": "F03",
      "pathId": "entry-mobile",
      "url": "https://gemini.google.com",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "no-intrusive-interruptions",
      "guidanceId": "avoid intrusive interstitial popup content first",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent blocks the product on first load",
      "evidence": "The first-load consent dialog covers the prompt and nearly fills the 360x800 viewport; accept/reject are initially below the collapsed disclosure.",
      "artifacts": [
        "evidence/mobile.png",
        "evidence/desktop.png"
      ],
      "suggestedFix": "Present essential consent choices without obscuring the core page, or use a compact, immediately dismissible consent surface.",
      "effort": "medium"
    },
    {
      "id": "F04",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "maximize-content-reduce-noise",
      "principleCheckId": "semantic-dismissible-primitives",
      "guidanceId": "declarative-dialog-popover-control",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent dialog semantics do not match its modal behavior",
      "evidence": "The custom MAT-DIALOG-CONTAINER has role=dialog, aria-modal=false, and no accessible name while visually blocking interaction.",
      "artifacts": [
        "evidence/runtime-probe.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Use a native dialog where possible, set a programmatic name, preserve focus, and make modal semantics agree with behavior.",
      "effort": "small"
    },
    {
      "id": "F05",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "adapt-to-the-form-factor",
      "principleCheckId": "input-modality-aware",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Several targets are too short for dependable touch use",
      "evidence": "Rendered targets include policy links at 17–18px high and More options at 22px high.",
      "artifacts": [
        "evidence/input-focus.json"
      ],
      "suggestedFix": "Increase the clickable box with padding/min-block-size while retaining the compact visual label.",
      "effort": "small"
    },
    {
      "id": "F06",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "support-core-task-success",
      "principleCheckId": "primary-flow-completion",
      "guidanceId": "primary user journey task completion",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent adds a blocking detour to the primary prompt flow",
      "evidence": "The visible composer cannot be used until a full-screen disclosure is expanded and answered.",
      "artifacts": [
        "evidence/mobile.png",
        "evidence/app-probe.json",
        "evidence/prompt-flow.json"
      ],
      "suggestedFix": "Make reject/accept immediately available and keep the primary product understandable and reachable without an unnecessary disclosure step.",
      "effort": "medium"
    },
    {
      "id": "F07",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "good-core-web-vitals",
      "guidanceId": "performance",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Throttled mobile load misses the Core Web Vitals performance bar",
      "evidence": "Lighthouse measured 28.5s LCP, 6.7s FCP, 940ms TBT, and a 0.35 performance score.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/trace-summary.json",
        "evidence/lighthouse.json",
        "evidence/trace.json"
      ],
      "suggestedFix": "Prioritize the LCP content, remove redirect/document latency, and defer non-critical code until after the first useful render.",
      "effort": "large"
    },
    {
      "id": "F08",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-main-thread",
      "guidanceId": "break-up-long-tasks",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "JavaScript keeps the main thread busy during startup",
      "evidence": "Lighthouse measured 4.2s main-thread work and 2.1s script execution; trace evidence also contains long tasks.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/trace-summary.json"
      ],
      "suggestedFix": "Break up startup tasks, schedule by priority, and lazy-load capabilities not needed for the signed-out prompt.",
      "effort": "large"
    },
    {
      "id": "F09",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "efficient-resource-delivery",
      "guidanceId": "optimize-preload-priority",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Critical resource delivery is too heavy and delayed",
      "evidence": "The page makes 95 requests for 5.33MB, including 46 scripts and 1.37MB fonts; Lighthouse flags redirect, font, cache, and dependency issues.",
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/network.har",
        "evidence/document-assets.json",
        "evidence/lighthouse-summary.json"
      ],
      "suggestedFix": "Shorten the critical chain, subset/preload only essential fonts, remove redirect latency, and defer non-critical bundles.",
      "effort": "large"
    },
    {
      "id": "F10",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-fast-and-stable",
      "principleCheckId": "trim-unused-and-duplicate-code",
      "guidanceId": "conditional-async-dependencies",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Large unused CSS and JavaScript ship on the entry surface",
      "evidence": "Lighthouse estimates 1,106KiB unused JavaScript and 58KiB unused CSS.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/lighthouse.json"
      ],
      "suggestedFix": "Split bundles by capability and conditionally load signed-in/editor features only when needed.",
      "effort": "large"
    },
    {
      "id": "F11",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-inclusive",
      "principleCheckId": "names-roles-labels",
      "guidanceId": "accessibility",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "The blocking dialog lacks a reliable accessible name",
      "evidence": "Lighthouse fails aria-dialog-name and label-content-name-mismatch on the primary first-load state.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/runtime-probe.json"
      ],
      "suggestedFix": "Name the dialog from its visible heading and align each visible label with the computed accessible name.",
      "effort": "small"
    },
    {
      "id": "F12",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "follow-best-practices",
      "principleCheckId": "sound-document-and-assets",
      "guidanceId": "optimize-image-priority",
      "guidanceCategory": "modern-web-guidance",
      "severity": "low",
      "confidence": "high",
      "summary": "Image elements omit intrinsic dimensions",
      "evidence": "The image primitive reports width and height missing from all five img elements.",
      "artifacts": [
        "evidence/document-assets.json",
        "evidence/images.json"
      ],
      "suggestedFix": "Add width/height or equivalent aspect-ratio reservation to each image; retain empty alt for decorative images.",
      "effort": "small"
    },
    {
      "id": "F13",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "follow-best-practices",
      "principleCheckId": "browser-platform-hygiene",
      "guidanceId": "improve-next-page-load-performance",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The page is not eligible for reliable BFCache restoration",
      "evidence": "Lighthouse reports three BFCache failure reasons.",
      "artifacts": [
        "evidence/lighthouse-summary.json",
        "evidence/lighthouse.json"
      ],
      "suggestedFix": "Inspect the BFCache failure details, remove avoidable blockers, and preserve app state across pagehide/pageshow.",
      "effort": "medium"
    },
    {
      "id": "F14",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-private-and-secure",
      "principleCheckId": "secure-transport-and-headers",
      "guidanceId": "security",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Defensive response policy has material gaps",
      "evidence": "HSTS and Referrer-Policy are absent, CSP permits unsafe-inline/unsafe-eval, and one SameSite=None cookie is reported without Secure.",
      "artifacts": [
        "evidence/headers.json"
      ],
      "suggestedFix": "Add HSTS and a strict Referrer-Policy, tighten CSP toward nonces/strict-dynamic without unsafe-eval, and secure every SameSite=None cookie.",
      "effort": "medium"
    },
    {
      "id": "F15",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-resilient",
      "principleCheckId": "progressive-enhancement",
      "guidanceId": "stabilize-reactive-state",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Primary content is an almost empty no-JavaScript shell",
      "evidence": "Only 3% of rendered content words occur in raw HTML; no H1 survives and crawler capture is nearly blank.",
      "artifacts": [
        "evidence/discoverability.json",
        "evidence/discoverability-rendered.png",
        "evidence/discoverability-crawler.png",
        "evidence/dom.json"
      ],
      "suggestedFix": "Server-render the purpose, prompt affordance explanation, headings, and crawlable navigation, then hydrate the interactive app.",
      "effort": "large"
    },
    {
      "id": "F16",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-resilient",
      "principleCheckId": "offline-and-installable",
      "guidanceId": "offline fallback service worker web app manifest installable pwa",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "The web app has no installable or offline fallback",
      "evidence": "No manifest is linked and policy explicitly sets manifest-src none.",
      "artifacts": [
        "evidence/document-assets.json",
        "evidence/headers.json"
      ],
      "suggestedFix": "Provide a web app manifest and a minimal offline/error fallback for the app shell, while keeping network-only AI actions explicit.",
      "effort": "large"
    },
    {
      "id": "F17",
      "pathId": "not-found",
      "url": "https://gemini.google.com/this-route-does-not-exist",
      "principleId": "be-resilient",
      "principleCheckId": "network-and-http-failure-states",
      "guidanceId": "http error network failure timeout retry stale data resilient state",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Unknown routes offer no recovery action",
      "evidence": "The bare 404 page says “That’s all we know” with no home, search, retry, or support link.",
      "artifacts": [
        "evidence/not-found.png",
        "evidence/not-found-probe.json"
      ],
      "suggestedFix": "Serve a branded resilient error state with a home/app link, help/search, and retry guidance.",
      "effort": "small"
    },
    {
      "id": "F18",
      "pathId": "entry-mobile",
      "url": "https://gemini.google.com",
      "principleId": "be-trustworthy",
      "principleCheckId": "no-dark-patterns",
      "guidanceId": "privacy",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Consent choices are initially hidden behind disclosure",
      "evidence": "At 360x800 only Read more is visible; Reject all and Accept all require expansion while the app is blocked.",
      "artifacts": [
        "evidence/mobile.png",
        "evidence/desktop.png"
      ],
      "suggestedFix": "Expose equally prominent accept and reject actions in the initial consent state and keep further detail optional.",
      "effort": "medium"
    },
    {
      "id": "F19",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-sustainable",
      "principleCheckId": "no-wasteful-work",
      "guidanceId": "deprioritize-background-fetches",
      "guidanceCategory": "modern-web-guidance",
      "severity": "high",
      "confidence": "high",
      "summary": "Startup work is disproportionate to the signed-out surface",
      "evidence": "The blank prompt entry transfers 5.33MB before interaction, mostly JavaScript and fonts.",
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/network.har"
      ],
      "suggestedFix": "Set a signed-out page-weight budget and defer model, editor, upload, and account capabilities until invoked.",
      "effort": "large"
    },
    {
      "id": "F20",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-sustainable",
      "principleCheckId": "third-party-and-media-budget",
      "guidanceId": "efficient-background-processing",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Cross-origin service assets dominate the load budget",
      "evidence": "70/95 requests and 5.19MB are outside the page origin, even though they are Google-controlled service origins.",
      "artifacts": [
        "evidence/network-summary.json",
        "evidence/network.har"
      ],
      "suggestedFix": "Consolidate and cache origin dependencies, subset fonts, and load optional service integrations only after intent.",
      "effort": "large"
    },
    {
      "id": "F21",
      "pathId": "entry",
      "url": "https://gemini.google.com",
      "principleId": "be-memory-efficient",
      "principleCheckId": "bounded-footprint",
      "guidanceId": "identify-heavy-scripts",
      "guidanceCategory": "modern-web-guidance",
      "severity": "medium",
      "confidence": "high",
      "summary": "Initial heap footprint is high for a one-control entry state",
      "evidence": "Heap summaries retain about 65–66MB and 1.19M V8 nodes before any conversation.",
      "artifacts": [
        "evidence/heap-baseline.heapsnapshot",
        "evidence/network-summary.json",
        "evidence/desktop.png"
      ],
      "suggestedFix": "Profile startup retainers, remove unused feature graphs from the signed-out bundle, and lazy-initialize heavy services.",
      "effort": "large"
    }
  ],
  "taskList": [
    {
      "id": "T01",
      "title": "Present essential consent choices without obscuring the core page, or use a compact, immediately dismissible consent surface.",
      "priority": 1,
      "findingIds": [
        "F03"
      ],
      "guidanceId": "avoid intrusive interstitial popup content first",
      "status": "open"
    },
    {
      "id": "T02",
      "title": "Use a native dialog where possible, set a programmatic name, preserve focus, and make modal semantics agree with behavior.",
      "priority": 2,
      "findingIds": [
        "F04"
      ],
      "guidanceId": "declarative-dialog-popover-control",
      "status": "open"
    },
    {
      "id": "T03",
      "title": "Make reject/accept immediately available and keep the primary product understandable and reachable without an unnecessary disclosure step.",
      "priority": 3,
      "findingIds": [
        "F06"
      ],
      "guidanceId": "primary user journey task completion",
      "status": "open"
    },
    {
      "id": "T04",
      "title": "Prioritize the LCP content, remove redirect/document latency, and defer non-critical code until after the first useful render.",
      "priority": 4,
      "findingIds": [
        "F07"
      ],
      "guidanceId": "performance",
      "status": "open"
    },
    {
      "id": "T05",
      "title": "Break up startup tasks, schedule by priority, and lazy-load capabilities not needed for the signed-out prompt.",
      "priority": 5,
      "findingIds": [
        "F08"
      ],
      "guidanceId": "break-up-long-tasks",
      "status": "open"
    },
    {
      "id": "T06",
      "title": "Shorten the critical chain, subset/preload only essential fonts, remove redirect latency, and defer non-critical bundles.",
      "priority": 6,
      "findingIds": [
        "F09"
      ],
      "guidanceId": "optimize-preload-priority",
      "status": "open"
    },
    {
      "id": "T07",
      "title": "Add HSTS and a strict Referrer-Policy, tighten CSP toward nonces/strict-dynamic without unsafe-eval, and secure every SameSite=None cookie.",
      "priority": 7,
      "findingIds": [
        "F14"
      ],
      "guidanceId": "security",
      "status": "open"
    },
    {
      "id": "T08",
      "title": "Server-render the purpose, prompt affordance explanation, headings, and crawlable navigation, then hydrate the interactive app.",
      "priority": 8,
      "findingIds": [
        "F15"
      ],
      "guidanceId": "stabilize-reactive-state",
      "status": "open"
    },
    {
      "id": "T09",
      "title": "Expose equally prominent accept and reject actions in the initial consent state and keep further detail optional.",
      "priority": 9,
      "findingIds": [
        "F18"
      ],
      "guidanceId": "privacy",
      "status": "open"
    },
    {
      "id": "T10",
      "title": "Set a signed-out page-weight budget and defer model, editor, upload, and account capabilities until invoked.",
      "priority": 10,
      "findingIds": [
        "F19"
      ],
      "guidanceId": "deprioritize-background-fetches",
      "status": "open"
    },
    {
      "id": "T11",
      "title": "Name the dialog from its visible heading and align each visible label with the computed accessible name.",
      "priority": 11,
      "findingIds": [
        "F11"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T12",
      "title": "Increase the clickable box with padding/min-block-size while retaining the compact visual label.",
      "priority": 12,
      "findingIds": [
        "F05"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T13",
      "title": "Split bundles by capability and conditionally load signed-in/editor features only when needed.",
      "priority": 13,
      "findingIds": [
        "F10"
      ],
      "guidanceId": "conditional-async-dependencies",
      "status": "open"
    },
    {
      "id": "T14",
      "title": "Inspect the BFCache failure details, remove avoidable blockers, and preserve app state across pagehide/pageshow.",
      "priority": 14,
      "findingIds": [
        "F13"
      ],
      "guidanceId": "improve-next-page-load-performance",
      "status": "open"
    },
    {
      "id": "T15",
      "title": "Provide a web app manifest and a minimal offline/error fallback for the app shell, while keeping network-only AI actions explicit.",
      "priority": 15,
      "findingIds": [
        "F16"
      ],
      "guidanceId": "offline fallback service worker web app manifest installable pwa",
      "status": "open"
    },
    {
      "id": "T16",
      "title": "Serve a branded resilient error state with a home/app link, help/search, and retry guidance.",
      "priority": 16,
      "findingIds": [
        "F17"
      ],
      "guidanceId": "http error network failure timeout retry stale data resilient state",
      "status": "open"
    },
    {
      "id": "T17",
      "title": "Consolidate and cache origin dependencies, subset fonts, and load optional service integrations only after intent.",
      "priority": 17,
      "findingIds": [
        "F20"
      ],
      "guidanceId": "efficient-background-processing",
      "status": "open"
    },
    {
      "id": "T18",
      "title": "Profile startup retainers, remove unused feature graphs from the signed-out bundle, and lazy-initialize heavy services.",
      "priority": 18,
      "findingIds": [
        "F21"
      ],
      "guidanceId": "identify-heavy-scripts",
      "status": "open"
    },
    {
      "id": "T19",
      "title": "Gate non-essential animations with @media (prefers-reduced-motion: reduce), stopping or simplifying looping motion.",
      "priority": 19,
      "findingIds": [
        "F01"
      ],
      "guidanceId": "accessibility",
      "status": "open"
    },
    {
      "id": "T20",
      "title": "Add width/height or equivalent aspect-ratio reservation to each image; retain empty alt for decorative images.",
      "priority": 20,
      "findingIds": [
        "F12"
      ],
      "guidanceId": "optimize-image-priority",
      "status": "open"
    },
    {
      "id": "T21",
      "title": "Adopt same-document View Transitions for major sidebar, picker, and route state swaps, with reduced-motion handling.",
      "priority": 21,
      "findingIds": [
        "F02"
      ],
      "guidanceId": "same-document-transitions",
      "status": "open"
    }
  ],
  "budget": {
    "pathCount": 8,
    "auditPasses": 1
  },
  "agent": "pi",
  "runId": "2026-07-21T19-17-39-928Z"
}
