diff --git a/src/page.html b/src/page.html
index 266e52e..f234da2 100644
--- a/src/page.html
+++ b/src/page.html
@@ -137,8 +137,22 @@ var _sv=false;
function toggleSettings(){
var token=localStorage.getItem('admin_token');
+ var lastClose=localStorage.getItem('admin_close_time');
if(token){
+ // Check if closed more than 10 seconds ago
+ if(lastClose){
+ var now=Date.now();
+ var elapsed=(now-parseInt(lastClose))/1000;
+ if(elapsed>10){
+ // Token expired (>10s since close), clear and show login
+ localStorage.removeItem('admin_token');
+ localStorage.removeItem('admin_close_time');
+ showAdminLoginModal();
+ return;
+ }
+ }
+
// Verify token validity
fetch('/api/v2/admin/verify',{
headers:{'Authorization':'Bearer '+token}
@@ -149,15 +163,24 @@ function toggleSettings(){
// Token valid, open settings
_sv=!_sv;
document.getElementById("mb-settings-panel").classList.toggle("active",_sv);
- if(_sv)loadSettings();
+ if(_sv){
+ loadSettings();
+ // Clear close time when opening
+ localStorage.removeItem('admin_close_time');
+ }else{
+ // Record close time when closing
+ localStorage.setItem('admin_close_time',Date.now());
+ }
}else{
// Token invalid, remove and show login
localStorage.removeItem('admin_token');
+ localStorage.removeItem('admin_close_time');
showAdminLoginModal();
}
})
.catch(function(e){
localStorage.removeItem('admin_token');
+ localStorage.removeItem('admin_close_time');
showAdminLoginModal();
});
}else{
@@ -203,6 +226,7 @@ function submitAdminLogin(){
.then(function(d){
if(d.token){
localStorage.setItem('admin_token',d.token);
+ localStorage.removeItem('admin_close_time'); // Clear close time on new login
document.getElementById('mb-admin-modal').classList.remove('active');
toast('Admin authenticated ✓');
toggleSettings(); // Re-open settings