const VISIBILITY_API='./api/index.php'; let visibilityUser=null; const visibilityActions={Offices:'office_create',Vendors:'vendor_create',Purchases:'purchase_create',Assets:'asset_create',Inventory:'stock_create','Issue & transfers':'movement_create'}; const cleanLabel=button=>button.textContent.replace(/\d+$/,'').trim(); async function loadVisibility(){const r=await fetch(`${VISIBILITY_API}?action=session`,{credentials:'same-origin'});const j=await r.json();visibilityUser=j.user;applyVisibility();} function pageAllowed(page){return visibilityUser?.role==='admin'||(visibilityUser?.permissions?.pages||[]).includes(page);} function actionAllowed(action){return visibilityUser?.role==='admin'||(visibilityUser?.permissions?.actions||[]).includes(action);} function applyVisibility(){if(!visibilityUser)return;document.querySelectorAll('.sidebar nav > button').forEach(button=>{button.hidden=!pageAllowed(cleanLabel(button));});const page=document.querySelector('.breadcrumb strong')?.textContent.trim()||'';const heading=document.querySelector('.page-heading > .heading-actions');const primary=heading?.querySelector('button.primary');if(primary&&visibilityActions[page])primary.hidden=!actionAllowed(visibilityActions[page]);if(page==='Issue & transfers')document.querySelectorAll('.card-heading .heading-actions button').forEach(button=>{button.hidden=!actionAllowed('movement_create');});} const visibilityObserver=new MutationObserver(()=>requestAnimationFrame(applyVisibility));visibilityObserver.observe(document.body,{childList:true,subtree:true}); loadVisibility().catch(()=>{}); setInterval(()=>{if(!visibilityUser)loadVisibility().catch(()=>{});},1500);