DOM manipulation fails if elements don't exist yet. Wait for the DOM to load:
document.addEventListener("DOMContentLoaded", () => {
// DOM is ready, elements exist
const el = document.querySelector("#app");
});
Or place scripts at the end of <body>, or use defer attribute on script tags.