{
  "//": "How this app is photographed for the marketplace (docs/publishing.md § Screenshots). The engine loads the app in the Mac shell's own WebKit against the sample below, runs the steps, and writes ui/screenshots/NN-<id>.png. Nothing here reaches a real workspace. The sample is the same folder ui/samples/files/ holds, mapped to the workspace's files/ — eight generated images, four of them with the sidecar the engine writes beside a generated file.",
  "version": 1,
  "shots": [
    { "id": "desktop", "size": [1280, 800] },
    { "id": "phone", "size": [390, 844] }
  ],
  "sample": {
    "files": {
      "files/image-1756900101000.png": { "bytes": "samples/files/image-1756900101000.png" },
      "files/image-1756900101000.json": { "bytes": "samples/files/image-1756900101000.json" },
      "files/image-1756900102000.png": { "bytes": "samples/files/image-1756900102000.png" },
      "files/image-1756900103000.png": { "bytes": "samples/files/image-1756900103000.png" },
      "files/image-1756900103000.json": { "bytes": "samples/files/image-1756900103000.json" },
      "files/image-1756900104000.png": { "bytes": "samples/files/image-1756900104000.png" },
      "files/image-1756900105000.png": { "bytes": "samples/files/image-1756900105000.png" },
      "files/image-1756900105000.json": { "bytes": "samples/files/image-1756900105000.json" },
      "files/image-1756900106000.png": { "bytes": "samples/files/image-1756900106000.png" },
      "files/image-1756900107000.png": { "bytes": "samples/files/image-1756900107000.png" },
      "files/image-1756900108000.png": { "bytes": "samples/files/image-1756900108000.png" },
      "files/image-1756900108000.json": { "bytes": "samples/files/image-1756900108000.json" }
    },
    "tools": {}
  },
  "//steps": "Compare is where the keeping and rejecting HAPPENS, but it is not what the app IS: open it, make the two calls, then CLOSE it, so the picture is the contact sheet the app is named for — eight tiles with one marked kept and one marked rejected, and the header counting them. Steps are one list for both sizes, so the phone shot is the same sheet in one column.",
  "steps": [
    { "wait": "ready" },
    { "waitFor": "#sheet .tile" },
    { "click": "#sheet li:nth-child(3) .tile-pick" },
    { "click": "#compare-open" },
    { "click": "#cmp-a-keep" },
    { "click": "#cmp-b-reject" },
    { "click": "#compare-close" },
    { "wait": 300 }
  ]
}
