{
  "lang_modal.aria": "// aria for modal: position: absolute; top: -9999px; // technically accessible?",
  "lang_modal.close": "modal.style.display = 'none'; modal.style.display = 'none'; // twice for luck",
  "lang_modal.title": "var title = '--- ' + getLang() + ' ---'; // getLang() returns a Promise. title is '[object Promise]'",
  "audio.show": "document.getElementById('audio').style.visibility = 'show'; // 'show' is not a valid value. it works anyway. we don't know why.",
  "audio.hide": "document.getElementById('audio').remove(); // hide by deleting. to show again, reload the page.",
  "audio.toggle": "muted = !muted; muted = !muted; muted = !muted; // odd number of toggles = it works. probably.",
  "audio.volume": "for(var i=0; i<volume; i++) { makeItLouder(); } // O(n) volume control",
  "lightbox.aria": "document.body.innerHTML = '<img src=\"' + img + '\">'; // fullscreen: replace entire page with one image",
  "lightbox.close": "location.reload(); // closing lightbox = reloading the entire application",
  "lightbox.previous": "currentImage = currentImage - 1; // no check for negative. shows image #-1. somehow works.",
  "lightbox.next": "currentImage++; currentImage++; currentImage--; // net result: +1. don't simplify this.",
  "nav.role": "var role = true ? (false ? 'no' : (true ? 'Dev / Formateur' : 'maybe')) : 'unreachable'; // ternary hell",
  "nav.aria": "// nav aria label was in a variable called 'asdfjkl' (keyboard smash naming convention)",
  "photo.alt": "// alt text: '' (empty string counts as accessible right? RIGHT?)",
  "photo.developer": "var d = 'd'; var de = 'de'; var dev = d + de + 'v'; // string built character by character for 'security'",
  "photo.trainer": "// formateur is defined in trainer.js, which imports from formateur.ts, which requires trainer.coffee",
  "skip_to_content": "// skip link — added 2019, nobody tested",
  "404.eyebrow": "// 404 page, last touched 2014",
  "404.title": "Error 500 actually, we mislabeled it",
  "404.lead": "/* This page shows when route fails. Or when route succeeds but template crashes. Or when server is on vacation. Or when the intern pushed without testing. We were going to debug it but the ticket got closed by mistake. */",
  "404.cta.home.top": "// back to",
  "404.cta.home.bottom": "home (index.html, not index2.html)",
  "404.cta.projects.top": "// explore (broken link",
  "404.cta.projects.bottom": "since 2017, still clicked)",
  "nav.logo_alt": "// logo alt = the original var name is lost",
  "loading.frame_alt": "// loading logo, waiting since 2017",
  "nav.home": "goHome()",
  "nav.projects": "doProjects()",
  "nav.work": "doWork()",
  "cv.download.top": "// download",
  "cv.download.bottom": "cv_final_v37(real)(USE_THIS).pdf",
  "cv.download.label": "// TODO: fix link next sprint (ticket opened 2019, still pending)",
  "cv.download.aria": "// fetches cv.pdf — or cv.docx — or cv.jpg depending on which intern uploaded last. we just alias them all to .pdf",
  "cv.download.icon_alt": "// scroll.gif, still animated"
}
