/* ============================================================
Shared app core: API client (CSRF), auth guard, layout chrome,
toasts, modals, confirm dialogs, helpers.
============================================================ */
"use strict";
/* ---------- tiny DOM helpers ---------- */
const $ = (sel, root) => (root || document).querySelector(sel);
const $$ = (sel, root) => Array.from((root || document).querySelectorAll(sel));
function el(tag, attrs = {}, ...children) {
const node = document.createElement(tag);
for (const [k, v] of Object.entries(attrs)) {
if (k === "class") node.className = v;
else if (k === "html") node.innerHTML = v;
else if (k.startsWith("on") && typeof v === "function") node.addEventListener(k.slice(2), v);
else if (v !== null && v !== undefined) node.setAttribute(k, v);
}
for (const c of children) {
if (c === null || c === undefined) continue;
node.append(c instanceof Node ? c : document.createTextNode(String(c)));
---check how JS is referenced in HTML---
static/index.html:36:
static/index.html:37:
static/login.html:52:
static/login.html:53: