{
  "_comment": "Colors are literal copies of design tokens in platform/hosts/host-browser/src/tokens.css (a static manifest cannot read CSS variables — documented exception, same class as apps/shift-web/public/manifest.webmanifest and the static index.html theme-color). background_color = --surface (light #faf8f4, the Drake warmed ground, ADR-145); theme_color matches index.html's light theme-color meta (#faf8f4) so the installed splash/title bar paints the app's ground. Keep in sync with tokens.css and index.html <meta name=theme-color>. The name is a static platform artifact and cannot be a t() call (localized-manifest limitation, recorded in PROJECT-STATUS); it follows sr.assessment.product (P3 — ADR-064/ADR-069), so flip it in the same change if that string changes. The icon files are byte-identical across apps/assessment-web/public/ and apps/shift-web/public/, never a second drawing. They are rasterized from deploy/icon.svg (the <link rel=icon> favicon, one source for every app) by apps/shift-web/scripts/generate-icons.mjs, which renders that file rather than restating its geometry. Nothing regenerates them automatically: after any change to deploy/icon.svg, rerun that generator and commit the four PNGs, or the favicon and the maskable pair drift apart.",
  "name": "P3 Assessment",
  "short_name": "P3",
  "description": "The P3 behavioural assessment: four short sections on how you naturally work, completed on your own device, with your personal profile at the end.",
  "start_url": "./",
  "scope": "./",
  "display": "standalone",
  "background_color": "#faf8f4",
  "theme_color": "#faf8f4",
  "icons": [
    { "src": "./icon.svg", "sizes": "any", "type": "image/svg+xml", "purpose": "any" },
    { "src": "./icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable" },
    { "src": "./icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
  ]
}
