Smoother handling of expired sessions across the app

When your session expires while using the app, you are now consistently and silently redirected to the sign-in page and returned to the same page after signing back in.

Previously, an expired session could surface confusing technical errors in different parts of the app — most visibly when adding a style from the marketplace, but the same underlying issue could appear elsewhere whenever the app needed to talk to the server. Every page that fetches data now recognises an expired session, takes you to the sign-in page with a single click required, and returns you to the page you were on as soon as you have signed back in.