{
  "source": "https://github.com/walterra/2026-30daymapchallenge",
  "revision": "b178e3cb94ddeaebc2c8e4b361f2ed3905bc9ced",
  "dirty": false,
  "routes": {
    "05-viewshed-01-taubensee": {
      "distance": 4875.59,
      "frames": 99,
      "photos": 4
    },
    "05-viewshed-02-griesenau": {
      "distance": 18712.5,
      "frames": 126,
      "photos": 10
    }
  },
  "sourceHashes": {
    "assets/theme.css": "776e448fc390fd590b6c8a7cfa461b704b2c535666cc02c5d6d27dbebe8266aa",
    "assets/theme.js": "76322741d67120962d3de5f30be277eee3bb9240ed5d2ce4feeb7664798cf864",
    "assets/theme.LICENSE.txt": "b1a3a81c901ad2aa7b2aa2fe11aa51aaa4115f2ce6517d55feec5a71749bec95",
    "maps/05-viewshed-01-taubensee/app.js": "b381a3b5e33dce9007c7c00834aa25dc56ec34c96b8605f3ea8802bd2bc28e20",
    "maps/05-viewshed-01-taubensee/style.css": "63b91924975a18d999f30f6129043cfd9d53a0213129c706e934694535d8f967",
    "maps/05-viewshed-01-taubensee/appearance.mjs": "1bc3510ff046b9d3407d6f181673ee3667a0460d012a5f2b1bb1a965cb066c41",
    "maps/05-viewshed-01-taubensee/photos.mjs": "23818b8b24c3f87fe0667779a44232819df80faf765b458ef2d20ddc7620d96f",
    "maps/05-viewshed-01-taubensee/vendor/three.module.min.js": "08fd7545d13d2c7fb65ab691530a802dafefd638596501854f267d0fb13c39e7",
    "maps/05-viewshed-01-taubensee/vendor/THREE-LICENSE.txt": "4c40a1ef62450b857c3b2aaf294936304cd552d965fbcd9d32d4c5bcf4ba4454",
    "maps/05-viewshed-01-taubensee/photos/README.md": "71d4620fafe3aa2ae088f905e96971256689760a6051490e1217ce9e29458b95",
    "maps/05-viewshed-02-griesenau/app.js": "0d38e59fc731887ccfd4ae3852b2b5adc0d5e9c1e52c7ee2ac4dc42862dfaf96",
    "maps/05-viewshed-02-griesenau/style.css": "6041510b4f04f0577d598b5219af411b2ea48edcf97b797038b32a7e10647828",
    "maps/05-viewshed-01-taubensee/README.md": "69f241925dc95727ec625954cc4b9842f706e57977042784fdea448b569592fd",
    "maps/05-viewshed-01-taubensee/data/manifest.json": "cb66e36009e969204039b125dc8af0b5d79ca0ac996dbd36c10fdf45e7665397",
    "maps/05-viewshed-01-taubensee/data/photos.json": "d07fa9aad89b08f575d728098cc6a138d1dc00fee784450a55c31409cd4c5403",
    "maps/05-viewshed-01-taubensee/data/route.geojson": "1ba4c71e0e5917abe17cb0c19ff6ce90d9f4e8743b75016b324ecf72a999c18d",
    "maps/05-viewshed-01-taubensee/data/coverage.png": "0bb5f7e04462b9c4e36c4f5eafaeec205b9502f2420e1b522a4efbc7a2a64e0e",
    "maps/05-viewshed-01-taubensee/data/relief.png": "cf6310e8a163d57e1b67e3f515fc83a35d28791faac23b233b97805ed886a700",
    "maps/05-viewshed-01-taubensee/data/terrain.png": "fdcee9c7737ebd264aacf8bae3e9fa3634f34eca280108c4b95fc7c8a7dcac0e",
    "maps/05-viewshed-01-taubensee/data/viewsheds-0.png": "7a90dbc3fcc5cd7a94e923032a40ee6fa09faea859298ae5a7e1d057f8ba9a60",
    "maps/05-viewshed-01-taubensee/data/viewsheds-0.bin.gz": "69f9e009f2d90e996ca45e0d5736522118e70826317eec2552463f02060f33e3",
    "maps/05-viewshed-01-taubensee/data/viewsheds-1.png": "5149a12f19afa47a71be098c4eb81a1f8c3b9d4f568a095525ee0f0fae82ca11",
    "maps/05-viewshed-01-taubensee/data/viewsheds-1.bin.gz": "3a6164effe8e2f0d35d7b2d3d810955737e94e5aedc02f815a23d34faf727eb4",
    "maps/05-viewshed-01-taubensee/data/viewsheds-2.png": "c69355c0c13190f5f0c387b466913e95437b9f5673e2e63e992b5defc5a53ae1",
    "maps/05-viewshed-01-taubensee/data/viewsheds-2.bin.gz": "8a9828a3060f9178b4b8a79771b2e0899263d27ffadd4061d59b2659161be90d",
    "maps/05-viewshed-01-taubensee/data/viewsheds-3.png": "fdf063426cccc84ddba72621c9d6b81382131c6e8e11e141e84c8533f2d1818e",
    "maps/05-viewshed-01-taubensee/data/viewsheds-3.bin.gz": "f828ba98cc800895c55daae669f70cd6301e0472ac9a45683bf25a671df59643",
    "maps/05-viewshed-01-taubensee/index.html": "bb076633b2bc6f51d11e32a36b828f20e6d8003a333cb6d17a8eab67b496d3b3",
    "maps/05-viewshed-02-griesenau/README.md": "491bb2f34b6f505e3c6fa27fe520dfdddbb39c0a16c97db8f53389d228b4dfc2",
    "maps/05-viewshed-02-griesenau/data/manifest.json": "b2db8d794683d21535a2c53f01de301bed830f3650d15ebbafd8b46c604b16a7",
    "maps/05-viewshed-02-griesenau/data/photos.json": "55c6cea2bcabed946e911552b2a534c76cec698e7b178dc76d1ff903d3ce29ec",
    "maps/05-viewshed-02-griesenau/data/route.geojson": "f1cc748b0727820af8d4392385e819320d4113d58eeb58e2c2472415920bcf35",
    "maps/05-viewshed-02-griesenau/data/coverage.png": "0bb5f7e04462b9c4e36c4f5eafaeec205b9502f2420e1b522a4efbc7a2a64e0e",
    "maps/05-viewshed-02-griesenau/data/relief.png": "cf6310e8a163d57e1b67e3f515fc83a35d28791faac23b233b97805ed886a700",
    "maps/05-viewshed-02-griesenau/data/terrain.png": "fdcee9c7737ebd264aacf8bae3e9fa3634f34eca280108c4b95fc7c8a7dcac0e",
    "maps/05-viewshed-02-griesenau/data/route-ways.json": "247b222e058f8d8a1426dcb161aa7e65af7077124d167bd8d8e498189c5c55be",
    "maps/05-viewshed-02-griesenau/data/viewsheds-0.png": "2744ecc3b40817083d85d476100072631051c7584851ae9e81d3deb1402db8a0",
    "maps/05-viewshed-02-griesenau/data/viewsheds-0.bin.gz": "2c41dc9d559b6cc51995e8e9fed8f1870f7beb8114e1d8febcf9f9164e55b7d5",
    "maps/05-viewshed-02-griesenau/data/viewsheds-1.png": "d13416a40d45f1112a404ce09d186b0682c5d319c851dde8a3ff8e99f35f5873",
    "maps/05-viewshed-02-griesenau/data/viewsheds-1.bin.gz": "b6359b98385a803e0f5098fc5e8088d5a7df1ad0739ffaa88e3f2536dd9208e9",
    "maps/05-viewshed-02-griesenau/data/viewsheds-2.png": "1bbcd500a2adfb8e77e4c6dfdd6cddf5fa4f38e46f3c4d201b3df9ed4f472ebd",
    "maps/05-viewshed-02-griesenau/data/viewsheds-2.bin.gz": "811dadadd58bc1a527ad691f14c402be94b069cc566cffc73a2c3bf4957d8173",
    "maps/05-viewshed-02-griesenau/data/viewsheds-3.png": "b04ebf1a466c1f02987744b281e155ff4c00e227501d12008b92ac333af12e62",
    "maps/05-viewshed-02-griesenau/data/viewsheds-3.bin.gz": "79e98188fa4a0a97ecb3b4305ba0b85707753bda081c42597fda648bff24d952",
    "maps/05-viewshed-02-griesenau/data/viewsheds-4.png": "e4ab575109f26b4b37fc991c23d7bea4957725aa60906c6d9e9d3abd67c1cf8c",
    "maps/05-viewshed-02-griesenau/data/viewsheds-4.bin.gz": "bd6cddd37260f43bcf707c227790e5d57c9343d2e6a4428c8ea8ade1e67446c4",
    "maps/05-viewshed-02-griesenau/data/viewsheds-5.png": "d5be5966a1e1f2c12b85b83b69579306b16ee0533824db6b49818a664ce0a279",
    "maps/05-viewshed-02-griesenau/data/viewsheds-5.bin.gz": "706339de94213dd3b9531c493bea47a2f822d09525a7a3a90ddab8fbbe4ba91c",
    "maps/05-viewshed-02-griesenau/index.html": "102af1638fae49cbe572ab7aefd32d46905cc762a1c4c178801670523fc27af2",
    "maps/05-viewshed-01-taubensee/photos/post.jpg": "ed9848d50111854437fe2561f79e8b1005354997352038569502defec21e353c",
    "maps/05-viewshed-01-taubensee/photos/moosen-winter.jpg": "4eb8340731887bdb1293bb1b2d4b3eef9ead431eb357078ef0cb5e152a2113bd",
    "maps/05-viewshed-01-taubensee/photos/moosen-autumn.jpg": "afec55d52eaa32636b3672f1d0c454fce2961b781a6e77057e60ff4dba6567e6",
    "maps/05-viewshed-01-taubensee/photos/taubensee-terrace.jpg": "88b2713cdd763e6bc3d1fb93d5377909cb49ed4ad7aba456c52ac212ccd6c0d0",
    "maps/05-viewshed-01-taubensee/photos/schwendt-church.jpg": "b787af02247a5d3a0b273c224ad79f047a09bbc75283632d322d2a2617f71f7a",
    "maps/05-viewshed-01-taubensee/photos/schwendt.jpg": "98bc538e57c6dbfbf0f486b394f9ddb72953c60223cdaec121c38f071a46c78c",
    "maps/05-viewshed-01-taubensee/photos/kohlamweg.jpg": "f653a5529fcfe1e377960e3f4949a39b8541ffe0c91f3c0b388537dd0966a8e8",
    "maps/05-viewshed-01-taubensee/photos/griesenau-chapel.jpg": "4955c0820f063d239016952dcbec333cf5257aa6765e19f1c3aabe6dae6a835c",
    "maps/05-viewshed-01-taubensee/photos/kaiserbach.jpg": "a68ed9a276d1bed0adb041b6d07a6d17584e811a33d2649cee01c3446de9398b",
    "maps/05-viewshed-01-taubensee/photos/kaiser-valley-road.jpg": "72463901f7260b2894b9dfd4274a437bb0165ba5c5006dc373bc5df4dfff784f",
    "maps/05-viewshed-01-taubensee/photos/fischbachalm.jpg": "07a5dc55ee40f177e325a59b157076bbc563eb87c3a4e07eb518d8ce00a8a7eb",
    "maps/05-viewshed-01-taubensee/photos/chapel.jpg": "e6ab6a636f26790e97cf2552373b524590c41d3c32eea3698dfce9fdfab07f4c",
    "maps/05-viewshed-01-taubensee/photos/kaiser-road-view.jpg": "2c8e17e04c0e8114ef6ba4ade222f7a0d92137862478b0c49dd910e9b5d2879a"
  },
  "files": {
    "assets/theme.LICENSE.txt": "b1a3a81c901ad2aa7b2aa2fe11aa51aaa4115f2ce6517d55feec5a71749bec95",
    "assets/theme.css": "776e448fc390fd590b6c8a7cfa461b704b2c535666cc02c5d6d27dbebe8266aa",
    "assets/theme.js": "76322741d67120962d3de5f30be277eee3bb9240ed5d2ce4feeb7664798cf864",
    "maps/05-viewshed-01-taubensee/README.md": "69f241925dc95727ec625954cc4b9842f706e57977042784fdea448b569592fd",
    "maps/05-viewshed-01-taubensee/app.js": "84af93a5aea18e16cd1706aba96ad8b68aa09d978d594ddc206d05ef3ee7dd29",
    "maps/05-viewshed-01-taubensee/appearance.mjs": "1bc3510ff046b9d3407d6f181673ee3667a0460d012a5f2b1bb1a965cb066c41",
    "maps/05-viewshed-01-taubensee/data/coverage.png": "0bb5f7e04462b9c4e36c4f5eafaeec205b9502f2420e1b522a4efbc7a2a64e0e",
    "maps/05-viewshed-01-taubensee/data/manifest.json": "cb66e36009e969204039b125dc8af0b5d79ca0ac996dbd36c10fdf45e7665397",
    "maps/05-viewshed-01-taubensee/data/photos.json": "d07fa9aad89b08f575d728098cc6a138d1dc00fee784450a55c31409cd4c5403",
    "maps/05-viewshed-01-taubensee/data/relief.png": "cf6310e8a163d57e1b67e3f515fc83a35d28791faac23b233b97805ed886a700",
    "maps/05-viewshed-01-taubensee/data/route.geojson": "1ba4c71e0e5917abe17cb0c19ff6ce90d9f4e8743b75016b324ecf72a999c18d",
    "maps/05-viewshed-01-taubensee/data/terrain.png": "fdcee9c7737ebd264aacf8bae3e9fa3634f34eca280108c4b95fc7c8a7dcac0e",
    "maps/05-viewshed-01-taubensee/data/viewsheds-0.bin.gz": "69f9e009f2d90e996ca45e0d5736522118e70826317eec2552463f02060f33e3",
    "maps/05-viewshed-01-taubensee/data/viewsheds-0.png": "7a90dbc3fcc5cd7a94e923032a40ee6fa09faea859298ae5a7e1d057f8ba9a60",
    "maps/05-viewshed-01-taubensee/data/viewsheds-1.bin.gz": "3a6164effe8e2f0d35d7b2d3d810955737e94e5aedc02f815a23d34faf727eb4",
    "maps/05-viewshed-01-taubensee/data/viewsheds-1.png": "5149a12f19afa47a71be098c4eb81a1f8c3b9d4f568a095525ee0f0fae82ca11",
    "maps/05-viewshed-01-taubensee/data/viewsheds-2.bin.gz": "8a9828a3060f9178b4b8a79771b2e0899263d27ffadd4061d59b2659161be90d",
    "maps/05-viewshed-01-taubensee/data/viewsheds-2.png": "c69355c0c13190f5f0c387b466913e95437b9f5673e2e63e992b5defc5a53ae1",
    "maps/05-viewshed-01-taubensee/data/viewsheds-3.bin.gz": "f828ba98cc800895c55daae669f70cd6301e0472ac9a45683bf25a671df59643",
    "maps/05-viewshed-01-taubensee/data/viewsheds-3.png": "fdf063426cccc84ddba72621c9d6b81382131c6e8e11e141e84c8533f2d1818e",
    "maps/05-viewshed-01-taubensee/index.html": "6a86573e2b78e4555f9956bb5da0bac9afe9933f4cf0135e73a9deb453722c6d",
    "maps/05-viewshed-01-taubensee/photos.mjs": "23818b8b24c3f87fe0667779a44232819df80faf765b458ef2d20ddc7620d96f",
    "maps/05-viewshed-01-taubensee/photos/README.md": "71d4620fafe3aa2ae088f905e96971256689760a6051490e1217ce9e29458b95",
    "maps/05-viewshed-01-taubensee/photos/chapel.jpg": "e6ab6a636f26790e97cf2552373b524590c41d3c32eea3698dfce9fdfab07f4c",
    "maps/05-viewshed-01-taubensee/photos/fischbachalm.jpg": "07a5dc55ee40f177e325a59b157076bbc563eb87c3a4e07eb518d8ce00a8a7eb",
    "maps/05-viewshed-01-taubensee/photos/griesenau-chapel.jpg": "4955c0820f063d239016952dcbec333cf5257aa6765e19f1c3aabe6dae6a835c",
    "maps/05-viewshed-01-taubensee/photos/kaiser-road-view.jpg": "2c8e17e04c0e8114ef6ba4ade222f7a0d92137862478b0c49dd910e9b5d2879a",
    "maps/05-viewshed-01-taubensee/photos/kaiser-valley-road.jpg": "72463901f7260b2894b9dfd4274a437bb0165ba5c5006dc373bc5df4dfff784f",
    "maps/05-viewshed-01-taubensee/photos/kaiserbach.jpg": "a68ed9a276d1bed0adb041b6d07a6d17584e811a33d2649cee01c3446de9398b",
    "maps/05-viewshed-01-taubensee/photos/kohlamweg.jpg": "f653a5529fcfe1e377960e3f4949a39b8541ffe0c91f3c0b388537dd0966a8e8",
    "maps/05-viewshed-01-taubensee/photos/moosen-autumn.jpg": "afec55d52eaa32636b3672f1d0c454fce2961b781a6e77057e60ff4dba6567e6",
    "maps/05-viewshed-01-taubensee/photos/moosen-winter.jpg": "4eb8340731887bdb1293bb1b2d4b3eef9ead431eb357078ef0cb5e152a2113bd",
    "maps/05-viewshed-01-taubensee/photos/post.jpg": "ed9848d50111854437fe2561f79e8b1005354997352038569502defec21e353c",
    "maps/05-viewshed-01-taubensee/photos/schwendt-church.jpg": "b787af02247a5d3a0b273c224ad79f047a09bbc75283632d322d2a2617f71f7a",
    "maps/05-viewshed-01-taubensee/photos/schwendt.jpg": "98bc538e57c6dbfbf0f486b394f9ddb72953c60223cdaec121c38f071a46c78c",
    "maps/05-viewshed-01-taubensee/photos/taubensee-terrace.jpg": "88b2713cdd763e6bc3d1fb93d5377909cb49ed4ad7aba456c52ac212ccd6c0d0",
    "maps/05-viewshed-01-taubensee/style.css": "661ea18334ba8c69faf109773b0d05adc4142369b335f1fe68d29e1a66b0a84a",
    "maps/05-viewshed-01-taubensee/vendor/THREE-LICENSE.txt": "4c40a1ef62450b857c3b2aaf294936304cd552d965fbcd9d32d4c5bcf4ba4454",
    "maps/05-viewshed-01-taubensee/vendor/three.module.min.js": "08fd7545d13d2c7fb65ab691530a802dafefd638596501854f267d0fb13c39e7",
    "maps/05-viewshed-02-griesenau/README.md": "491bb2f34b6f505e3c6fa27fe520dfdddbb39c0a16c97db8f53389d228b4dfc2",
    "maps/05-viewshed-02-griesenau/app.js": "0d38e59fc731887ccfd4ae3852b2b5adc0d5e9c1e52c7ee2ac4dc42862dfaf96",
    "maps/05-viewshed-02-griesenau/data/coverage.png": "0bb5f7e04462b9c4e36c4f5eafaeec205b9502f2420e1b522a4efbc7a2a64e0e",
    "maps/05-viewshed-02-griesenau/data/manifest.json": "b2db8d794683d21535a2c53f01de301bed830f3650d15ebbafd8b46c604b16a7",
    "maps/05-viewshed-02-griesenau/data/photos.json": "55c6cea2bcabed946e911552b2a534c76cec698e7b178dc76d1ff903d3ce29ec",
    "maps/05-viewshed-02-griesenau/data/relief.png": "cf6310e8a163d57e1b67e3f515fc83a35d28791faac23b233b97805ed886a700",
    "maps/05-viewshed-02-griesenau/data/route-ways.json": "247b222e058f8d8a1426dcb161aa7e65af7077124d167bd8d8e498189c5c55be",
    "maps/05-viewshed-02-griesenau/data/route.geojson": "f1cc748b0727820af8d4392385e819320d4113d58eeb58e2c2472415920bcf35",
    "maps/05-viewshed-02-griesenau/data/terrain.png": "fdcee9c7737ebd264aacf8bae3e9fa3634f34eca280108c4b95fc7c8a7dcac0e",
    "maps/05-viewshed-02-griesenau/data/viewsheds-0.bin.gz": "2c41dc9d559b6cc51995e8e9fed8f1870f7beb8114e1d8febcf9f9164e55b7d5",
    "maps/05-viewshed-02-griesenau/data/viewsheds-0.png": "2744ecc3b40817083d85d476100072631051c7584851ae9e81d3deb1402db8a0",
    "maps/05-viewshed-02-griesenau/data/viewsheds-1.bin.gz": "b6359b98385a803e0f5098fc5e8088d5a7df1ad0739ffaa88e3f2536dd9208e9",
    "maps/05-viewshed-02-griesenau/data/viewsheds-1.png": "d13416a40d45f1112a404ce09d186b0682c5d319c851dde8a3ff8e99f35f5873",
    "maps/05-viewshed-02-griesenau/data/viewsheds-2.bin.gz": "811dadadd58bc1a527ad691f14c402be94b069cc566cffc73a2c3bf4957d8173",
    "maps/05-viewshed-02-griesenau/data/viewsheds-2.png": "1bbcd500a2adfb8e77e4c6dfdd6cddf5fa4f38e46f3c4d201b3df9ed4f472ebd",
    "maps/05-viewshed-02-griesenau/data/viewsheds-3.bin.gz": "79e98188fa4a0a97ecb3b4305ba0b85707753bda081c42597fda648bff24d952",
    "maps/05-viewshed-02-griesenau/data/viewsheds-3.png": "b04ebf1a466c1f02987744b281e155ff4c00e227501d12008b92ac333af12e62",
    "maps/05-viewshed-02-griesenau/data/viewsheds-4.bin.gz": "bd6cddd37260f43bcf707c227790e5d57c9343d2e6a4428c8ea8ade1e67446c4",
    "maps/05-viewshed-02-griesenau/data/viewsheds-4.png": "e4ab575109f26b4b37fc991c23d7bea4957725aa60906c6d9e9d3abd67c1cf8c",
    "maps/05-viewshed-02-griesenau/data/viewsheds-5.bin.gz": "706339de94213dd3b9531c493bea47a2f822d09525a7a3a90ddab8fbbe4ba91c",
    "maps/05-viewshed-02-griesenau/data/viewsheds-5.png": "d5be5966a1e1f2c12b85b83b69579306b16ee0533824db6b49818a664ce0a279",
    "maps/05-viewshed-02-griesenau/index.html": "9f7a622978a86c11ee2eb4e86e7d3f49e2dfac373c1fb158604460a4e75ad8c0",
    "maps/05-viewshed-02-griesenau/style.css": "6041510b4f04f0577d598b5219af411b2ea48edcf97b797038b32a7e10647828"
  },
  "adaptations": [
    "Embed-only route navigation and same-origin theme/height bridge",
    "Width-based layout replaces iframe-height feedback; mobile still stacks",
    "Observer-centered radial fill fade; visibility masks and borders unchanged",
    "Original data, visibility, photo permissions and dependency notices retained"
  ]
}
