A sign-out warning that arms at a threshold before an injected expiry instant — live countdown, one-shot refresh, a closed state that says why, and cross-tab dismissal over BroadcastChannel.
npx shadcn@latest add @zyeon/session-expiryZyeon UI limits how often it can be asked, and Session Expiry hasn't had its turn. Its source will show here once it has.