Chiude il gap auth: la SPA demo si auto-autentica col demo_jwt (token API nis2_access_token + org dal payload) PRIMA di checkAuth, cross-origin (niente sessionStorage same-origin). spa_iframe_url ora atterra su /dashboard.html?demo=..#djwt=... DemoController.DEMO_BASE override via env DEMO_BASE_URL (switch a sottodominio senza codice). USR2 richiesto per DemoController.