{
  "//": [
    "The portal installed as an app on the shop tablets (README, 'Installed on the tablets'; 2026-09-21).",
    "JSON has no comments, so the reasons live in this ignored member.",
    "",
    "manifest.json, not manifest.webmanifest: Caddy, tools/serve-local.ps1 and Dev/StaticSite.cs all",
    "serve .json as application/json, which the spec accepts as a JSON MIME type. None of the three",
    "knows .webmanifest, and with X-Content-Type-Options: nosniff an unknown type is not guessed, so it",
    "would be three edits in three languages, one on the host and one behind #if DEBUG, to gain nothing.",
    "",
    "id is set BEFORE anyone installs. Without it the app's identity is its start_url, and moving",
    "start_url later would give every tablet a SECOND icon instead of an update.",
    "",
    "start_url is the Schedule (Owen's choice). With no session the page bounces to sign-in, and",
    "js/login.js brings the person back here afterwards (dm.afterSignIn).",
    "",
    "scope keeps login.microsoftonline.com OUTSIDE the app on purpose, so Chrome shows the real origin",
    "while somebody types a password. No orientation lock: the board has a working portrait layout.",
    "",
    "The icons are letterboxed from the header mark by tools/make-icons.ps1 (placeholder art; HANDOFF",
    "row 62). The maskable one is a separate entry, never 'any maskable' on one file, or its padding",
    "shows in the task switcher. Every URL is relative to this file, as config.js's redirectUri is."
  ],
  "id": "/",
  "name": "Dooling Machine Portal",
  "short_name": "Dooling Portal",
  "description": "The Dooling Machine employee portal: the Schedule board, jobs, time sheets and reports.",
  "lang": "en",
  "dir": "ltr",
  "start_url": "./travelers.html",
  "scope": "./",
  "display": "standalone",
  "background_color": "#0e1116",
  "theme_color": "#1b2029",
  "icons": [
    { "src": "assets/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" },
    { "src": "assets/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" },
    { "src": "assets/icon-maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
  ]
}
