/* iEduPortal PWA Stage 106 - Academic Context Binding Priority-Aware Fair Scheduling */
(function(window,document){'use strict';
  var auto=window.IeduAcademicAutoRefresh;
  var registrations=[];
  var nodeBindings=[];
  var observer=null;
  var observing=false;
  var pendingRoots=[];
  var flushTimer=null;
  var idleHandle=null;
  var refreshQueued=false;
  var visibilityPaused=false;
  var lifecyclePaused=false;
  var destroyed=false;
  var observerErrorCount=0;
  var lastObserverError='';
  var recoveryTimer=null;
  var recoveryCooldownTimer=null;
  var recoveryInProgress=false;
  var recoveryBlocked=false;
  var recoveryAttemptCount=0;
  var lastRecoveryAt=0;
  var lastRecoveryDelay=0;
  var healthTimer=null;
  var healthCheckCount=0;
  var lastHealthCheckAt=0;
  var lastHealthIssue='';
  var healthySince=0;
  var HEALTH_INTERVAL=5000;
  var HEALTH_HEALTHY_INTERVAL=15000;
  var HEALTH_UNHEALTHY_INTERVAL=2000;
  var lastHealthScheduleAt=0;
  var healthScheduleDelay=HEALTH_HEALTHY_INTERVAL;
  var RECOVERY_COOLDOWN=250;
  var RECOVERY_BASE_DELAY=250;
  var RECOVERY_MAX_DELAY=4000;
  var MAX_RECOVERY_ATTEMPTS=3;
  var MAX_ROOTS_PER_FLUSH=24;
  var MAX_PENDING_ROOTS=96;
  var IDLE_TIMEOUT=120;
  var MAX_NODE_BINDINGS=512;
  var MAX_SCAN_MS=24;
  var ADAPTIVE_SCAN_FLOOR=8;
  var ADAPTIVE_SCAN_CEILING=MAX_SCAN_MS;
  var LONG_TASK_THRESHOLD=50;
  var scanCount=0;
  var lastScanDuration=0;
  var budgetExceededCount=0;
  var lastBudgetIssue='';
  var longTaskObserver=null;
  var longTaskCount=0;
  var longTaskTotalMs=0;
  var lastLongTaskDuration=0;
  var adaptiveBudgetActive=false;
  var adaptiveScanMs=MAX_SCAN_MS;
  var pressureLevel=0;
  var pressureEvents=0;
  var pressureRecoveryCount=0;
  var lastPressureAt=0;
  var pressureRecoveryTimer=null;
  var PRESSURE_HIGH_THRESHOLD=50;
  var PRESSURE_RECOVERY_THRESHOLD=32;
  var PRESSURE_MAX_LEVEL=5;
  var PRESSURE_RECOVERY_DELAY=3000;
  var DEVICE_AWARE_LOW_POWER_ROOTS=8;
  var DEVICE_AWARE_NORMAL_ROOTS=MAX_ROOTS_PER_FLUSH;
  var DEVICE_AWARE_LOW_POWER_TIMEOUT=240;
  var deviceProfile='normal';
  var deviceProfileChanges=0;
  var networkProfile='online-normal';
  var networkProfileChanges=0;
  var lastNetworkProfileAt=0;
  var NETWORK_SLOW_ROOTS=4;
  var NETWORK_OFFLINE_ROOTS=2;
  var NETWORK_NORMAL_ROOTS=DEVICE_AWARE_NORMAL_ROOTS;
  var NETWORK_SLOW_TIMEOUT=360;
  var NETWORK_OFFLINE_TIMEOUT=500;
  var SCHEDULER_MAX_CONTINUOUS_BATCHES=4;
  var schedulerContinuousBatches=0;
  var schedulerYieldCount=0;
  var lastSchedulerRunAt=0;
  var lastSchedulerYieldAt=0;
  var schedulerPriorityBoost=0;
  var schedulerPriorityEvents=0;
  var schedulerPriorityWaitMs=0;
  var schedulerPriorityLastBoostAt=0;
  var SCHEDULER_PRIORITY_THRESHOLD_MS=1000;
  var SCHEDULER_PRIORITY_MAX_BOOST=2;

  function context(){var c=window.IeduAcademicContext||{};return {sessionId:c.sessionId?String(c.sessionId):'',termId:c.termId?String(c.termId):'',sessionName:c.sessionName?String(c.sessionName):'',termName:c.termName?String(c.termName):''};}
  function detectDeviceProfile(){var nav=window.navigator||{};var conn=nav.connection||nav.mozConnection||nav.webkitConnection||{};var low=!!conn.saveData||(Number(nav.hardwareConcurrency)||0)>0&&(Number(nav.hardwareConcurrency)||0)<=2||(Number(nav.deviceMemory)||0)>0&&(Number(nav.deviceMemory)||0)<=2;var next=low?'low-power':'normal';if(next!==deviceProfile){deviceProfile=next;deviceProfileChanges++;}return deviceProfile;}
  function detectNetworkProfile(){var nav=window.navigator||{};var conn=nav.connection||nav.mozConnection||nav.webkitConnection||{};var online=nav.onLine!==false;if(!online){networkProfile='offline';}else{var type=String(conn.effectiveType||'').toLowerCase();var slow=!!conn.saveData||type==='slow-2g'||type==='2g'||(Number(conn.rtt)||0)>=800||(Number(conn.downlink)||0)>0&&Number(conn.downlink)<0.5;networkProfile=slow?'online-slow':'online-normal';}if(networkProfile!==detectNetworkProfile._last){networkProfileChanges++;lastNetworkProfileAt=Date.now();detectNetworkProfile._last=networkProfile;}return networkProfile;}
  detectNetworkProfile._last='';
  function effectiveRootsPerFlush(){var d=detectDeviceProfile();var n=detectNetworkProfile();if(n==='offline')return NETWORK_OFFLINE_ROOTS;if(n==='online-slow')return Math.min(NETWORK_SLOW_ROOTS,d==='low-power'?DEVICE_AWARE_LOW_POWER_ROOTS:NETWORK_SLOW_ROOTS);return d==='low-power'?DEVICE_AWARE_LOW_POWER_ROOTS:NETWORK_NORMAL_ROOTS;}
  function effectiveIdleTimeout(){var d=detectDeviceProfile();var n=detectNetworkProfile();if(n==='offline')return NETWORK_OFFLINE_TIMEOUT;if(n==='online-slow')return Math.max(NETWORK_SLOW_TIMEOUT,d==='low-power'?DEVICE_AWARE_LOW_POWER_TIMEOUT:NETWORK_SLOW_TIMEOUT);return d==='low-power'?DEVICE_AWARE_LOW_POWER_TIMEOUT:IDLE_TIMEOUT;}
  function healthDelay(base){var d=detectDeviceProfile(),n=detectNetworkProfile();var mult=d==='low-power'?1.5:1;if(n==='online-slow')mult*=1.5;if(n==='offline')mult*=2;return Math.min(30000,Math.max(1000,Math.round(base*mult)));}
  function updateNode(node,c){if(!node)return;var x=c||context();node.textContent=(x.sessionName||'Academic session')+' • '+(x.termName||'Term');node.setAttribute('data-session-id',x.sessionId||'');node.setAttribute('data-term-id',x.termId||'');node.setAttribute('data-academic-context-ready','1');}
  function registerAuto(name,fn){if(!auto||typeof auto.register!=='function')return function(){};var remove=auto.register(name,fn);if(typeof remove==='function')registrations.push(remove);return remove;}
  function adjustAdaptiveBudget(duration){
    if(duration>=PRESSURE_HIGH_THRESHOLD){pressureEvents++;pressureLevel=Math.min(PRESSURE_MAX_LEVEL,pressureLevel+1);lastPressureAt=Date.now();adaptiveBudgetActive=true;adaptiveScanMs=Math.max(ADAPTIVE_SCAN_FLOOR,Math.floor(adaptiveScanMs*(pressureLevel>=3?0.7:0.8)));schedulePressureRecovery();return;}
    if(adaptiveBudgetActive&&duration<PRESSURE_RECOVERY_THRESHOLD&&pressureLevel===0){adaptiveScanMs=Math.min(ADAPTIVE_SCAN_CEILING,adaptiveScanMs+2);if(adaptiveScanMs>=ADAPTIVE_SCAN_CEILING)adaptiveBudgetActive=false;}
  }
  function cancelPressureRecovery(){if(pressureRecoveryTimer!==null){window.clearTimeout(pressureRecoveryTimer);pressureRecoveryTimer=null;}}
  function recoverPressure(){pressureRecoveryTimer=null;if(destroyed||visibilityPaused||lifecyclePaused)return;if(pressureLevel>0){pressureLevel--;pressureRecoveryCount++;if(pressureLevel===0){adaptiveScanMs=ADAPTIVE_SCAN_CEILING;adaptiveBudgetActive=false;}else{adaptiveScanMs=Math.min(ADAPTIVE_SCAN_CEILING,adaptiveScanMs+Math.max(1,Math.ceil((ADAPTIVE_SCAN_CEILING-adaptiveScanMs)/3)));}if(pressureLevel>0)schedulePressureRecovery();}}
  function schedulePressureRecovery(){if(destroyed||visibilityPaused||lifecyclePaused||pressureRecoveryTimer!==null)return;pressureRecoveryTimer=window.setTimeout(recoverPressure,PRESSURE_RECOVERY_DELAY);} 
  function startLongTaskObserver(){
    if(longTaskObserver||!window.PerformanceObserver)return false;
    try{
      if(window.PerformanceObserver.supportedEntryTypes&&window.PerformanceObserver.supportedEntryTypes.indexOf('longtask')===-1)return false;
      longTaskObserver=new PerformanceObserver(function(list){var entries=list.getEntries();for(var i=0;i<entries.length;i++){var d=Number(entries[i].duration)||0;if(d<LONG_TASK_THRESHOLD)continue;longTaskCount++;longTaskTotalMs+=d;lastLongTaskDuration=d;adjustAdaptiveBudget(d);}});
      longTaskObserver.observe({entryTypes:['longtask']});
      return true;
    }catch(e){longTaskObserver=null;return false;}
  }
  function stopLongTaskObserver(){if(longTaskObserver){try{longTaskObserver.disconnect();}catch(e){}}longTaskObserver=null;}
  function track(node){for(var i=0;i<nodeBindings.length;i++)if(nodeBindings[i].node===node)return nodeBindings[i];if(nodeBindings.length>=MAX_NODE_BINDINGS){budgetExceededCount++;lastBudgetIssue='node-binding-limit';return {node:node,remove:function(){}};}function refresh(c){if(!destroyed&&document.documentElement.contains(node))updateNode(node,c||context());}refresh(context());var remove=registerAuto('academic-context-node',refresh);var item={node:node,remove:remove};nodeBindings.push(item);return item;}
  function scan(root){if(destroyed)return 0;var started=Date.now();var base=root&&root.nodeType===1?root:document;var list=[];if(base.matches&&base.matches('[data-academic-context]'))list.push(base);if(base.querySelectorAll){var found=base.querySelectorAll('[data-academic-context]');for(var i=0;i<found.length;i++)list.push(found[i]);}for(var j=0;j<list.length;j++)track(list[j]);scanCount++;lastScanDuration=Date.now()-started;if(lastScanDuration>adaptiveScanMs){budgetExceededCount++;lastBudgetIssue='scan-time';adaptiveBudgetActive=true;adaptiveScanMs=Math.max(ADAPTIVE_SCAN_FLOOR,Math.floor(adaptiveScanMs*0.8));}return list.length;}
  function enforceResourceBudget(){if(nodeBindings.length>MAX_NODE_BINDINGS){var keep=nodeBindings.slice(0,MAX_NODE_BINDINGS);for(var i=MAX_NODE_BINDINGS;i<nodeBindings.length;i++){if(typeof nodeBindings[i].remove==='function'){try{nodeBindings[i].remove();}catch(e){}}}nodeBindings=keep;budgetExceededCount++;lastBudgetIssue='node-binding-limit';}if(pendingRoots.length>MAX_PENDING_ROOTS){pendingRoots=pendingRoots.slice(-MAX_PENDING_ROOTS);budgetExceededCount++;lastBudgetIssue='pending-root-limit';}}
  function cleanupDetached(){var kept=[];for(var i=0;i<nodeBindings.length;i++){var item=nodeBindings[i];if(document.documentElement.contains(item.node))kept.push(item);else if(typeof item.remove==='function'){try{item.remove();}catch(e){}}}nodeBindings=kept;}
  function cancelHealthWatchdog(){if(healthTimer!==null){window.clearTimeout(healthTimer);healthTimer=null;}}
  function cancelScheduledWork(){if(flushTimer!==null){window.clearTimeout(flushTimer);flushTimer=null;}if(idleHandle!==null){if(window.cancelIdleCallback)window.cancelIdleCallback(idleHandle);else window.clearTimeout(idleHandle);idleHandle=null;}if(recoveryTimer!==null){window.clearTimeout(recoveryTimer);recoveryTimer=null;}if(recoveryCooldownTimer!==null){window.clearTimeout(recoveryCooldownTimer);recoveryCooldownTimer=null;}cancelHealthWatchdog();cancelPressureRecovery();}
  function recordObserverError(error){observerErrorCount++;lastObserverError=error&&error.message?String(error.message):String(error||'Observer error');}
  function resetRecoveryWindow(){recoveryAttemptCount=0;recoveryBlocked=false;lastRecoveryDelay=0;}
  function recoveryDelay(){var d=RECOVERY_BASE_DELAY*Math.pow(2,Math.max(0,recoveryAttemptCount-1));return Math.min(RECOVERY_MAX_DELAY,d);}
  function scheduleRecoveryRetry(){if(destroyed||lifecyclePaused||visibilityPaused||recoveryBlocked||recoveryTimer!==null)return false;var delay=Math.max(RECOVERY_COOLDOWN,recoveryDelay());lastRecoveryDelay=delay;recoveryTimer=window.setTimeout(function(){recoveryTimer=null;recoverObserver();},delay);return true;}
  function recoverObserver(){if(destroyed||lifecyclePaused||visibilityPaused||recoveryBlocked||recoveryInProgress)return false;if(recoveryTimer!==null)return false;var now=Date.now();if(lastRecoveryAt&&now-lastRecoveryAt<RECOVERY_COOLDOWN)return false;if(recoveryAttemptCount>=MAX_RECOVERY_ATTEMPTS){recoveryBlocked=true;return false;}recoveryAttemptCount++;lastRecoveryAt=now;var delay=recoveryDelay();lastRecoveryDelay=delay;recoveryTimer=window.setTimeout(function(){recoveryTimer=null;if(destroyed||lifecyclePaused||visibilityPaused){recoveryInProgress=false;return;}recoveryInProgress=true;try{var started=startObserver();if(started){scan(document);refreshAll();healthySince=Date.now();lastHealthIssue='';recoveryInProgress=false;recoveryCooldownTimer=window.setTimeout(function(){recoveryCooldownTimer=null;resetRecoveryWindow();},RECOVERY_COOLDOWN);}else{recoveryInProgress=false;if(recoveryAttemptCount>=MAX_RECOVERY_ATTEMPTS)recoveryBlocked=true;}}catch(e){recordObserverError(e);recoveryInProgress=false;if(recoveryAttemptCount>=MAX_RECOVERY_ATTEMPTS)recoveryBlocked=true;else scheduleRecoveryRetry();}},0);return true;}
  function runHealthCheck(){if(destroyed)return;healthTimer=null;if(visibilityPaused||lifecyclePaused)return;healthCheckCount++;lastHealthCheckAt=Date.now();if(!observing){lastHealthIssue='observer-not-observing';healthySince=0;healthScheduleDelay=HEALTH_UNHEALTHY_INTERVAL;if(!recoveryInProgress&&!recoveryBlocked)recoverObserver();}else{lastHealthIssue='';if(!healthySince)healthySince=lastHealthCheckAt;healthScheduleDelay=HEALTH_HEALTHY_INTERVAL;}scheduleHealthCheck();}
  function scheduleHealthCheck(){if(destroyed||visibilityPaused||lifecyclePaused||healthTimer!==null)return;var delay=healthDelay(healthScheduleDelay||HEALTH_HEALTHY_INTERVAL);healthScheduleDelay=delay;lastHealthScheduleAt=Date.now();healthTimer=window.setTimeout(runHealthCheck,delay);}
  function updateSchedulerPriority(now){if(!pendingRoots.length){schedulerPriorityBoost=0;return;}var waited=Math.max(0,now-(pendingRoots[0].queuedAt||now));schedulerPriorityWaitMs=waited;if(waited>=SCHEDULER_PRIORITY_THRESHOLD_MS){var next=Math.min(SCHEDULER_PRIORITY_MAX_BOOST,Math.floor(waited/SCHEDULER_PRIORITY_THRESHOLD_MS));if(next!==schedulerPriorityBoost){schedulerPriorityBoost=next;schedulerPriorityEvents++;schedulerPriorityLastBoostAt=now;}}else if(schedulerPriorityBoost>0&&waited<SCHEDULER_PRIORITY_THRESHOLD_MS/2){schedulerPriorityBoost--;}}
  function runObserverBatch(){if(destroyed||visibilityPaused||lifecyclePaused)return;flushTimer=null;idleHandle=null;var started=Date.now();lastSchedulerRunAt=started;updateSchedulerPriority(started);var count=0;var maxRoots=effectiveRootsPerFlush()+schedulerPriorityBoost;while(pendingRoots.length&&count<maxRoots){var item=pendingRoots.shift();scan(item.root||item);count++;if(lastScanDuration>=adaptiveScanMs&&count>=1)break;}cleanupDetached();enforceResourceBudget();schedulerContinuousBatches++;if(pendingRoots.length){if(schedulerContinuousBatches>=SCHEDULER_MAX_CONTINUOUS_BATCHES||Date.now()-started>=Math.max(16,adaptiveScanMs*2)){schedulerContinuousBatches=0;schedulerYieldCount++;lastSchedulerYieldAt=Date.now();window.setTimeout(scheduleObserverFlush,0);}else{scheduleObserverFlush();}}else{schedulerContinuousBatches=0;schedulerPriorityBoost=0;schedulerPriorityWaitMs=0;}}
  function scheduleObserverFlush(){if(destroyed||visibilityPaused||lifecyclePaused||flushTimer!==null||idleHandle!==null||!pendingRoots.length)return;var run=function(){runObserverBatch();};if(window.requestIdleCallback){idleHandle=window.requestIdleCallback(run,{timeout:effectiveIdleTimeout()});}else{flushTimer=window.setTimeout(run,16);}}
  function queueObserverRoot(root){if(!root||destroyed)return;enforceResourceBudget();for(var i=0;i<pendingRoots.length;i++)if((pendingRoots[i].root||pendingRoots[i])===root)return;if(pendingRoots.length>=MAX_PENDING_ROOTS){pendingRoots=[];pendingRoots.push(document);scheduleObserverFlush();return;}pendingRoots.push({root:root,queuedAt:Date.now()});scheduleObserverFlush();}
  function queueRefresh(){if(refreshQueued||destroyed)return;refreshQueued=true;window.setTimeout(function(){refreshQueued=false;if(!visibilityPaused&&!destroyed)refreshAll();},0);}
  function refreshAll(){if(destroyed)return null;var c=context();enforceResourceBudget();scan(document);for(var i=0;i<nodeBindings.length;i++)if(document.documentElement.contains(nodeBindings[i].node))updateNode(nodeBindings[i].node,c);if(auto&&typeof auto.refresh==='function')return auto.refresh(c);return null;}
  function startObserver(){if(destroyed||observing||!window.MutationObserver)return false;try{observer=new MutationObserver(function(mutations){try{for(var i=0;i<mutations.length;i++){var added=mutations[i].addedNodes;for(var j=0;j<added.length;j++)if(added[j]&&added[j].nodeType===1)queueObserverRoot(added[j]);}queueRefresh();}catch(e){recordObserverError(e);recoverObserver();}});if(!document.documentElement){observer=null;return false;}observer.observe(document.documentElement,{childList:true,subtree:true});observing=true;return true;}catch(e){recordObserverError(e);observer=null;observing=false;if(!recoveryInProgress)recoverObserver();return false;}}
  function stopObserver(){if(observer){observer.disconnect();observer=null;}observing=false;cancelScheduledWork();pendingRoots=[];}
  function onVisibilityChange(){visibilityPaused=!!document.hidden;if(visibilityPaused){cancelHealthWatchdog();cancelScheduledWork();recoveryBlocked=false;recoveryAttemptCount=0;recoveryInProgress=false;}else{if(pendingRoots.length)scheduleObserverFlush();if(refreshQueued){window.setTimeout(function(){refreshQueued=false;if(!destroyed)refreshAll();},0);}else {refreshAll();scheduleHealthCheck();}}}
  function onPageHide(){lifecyclePaused=true;cancelHealthWatchdog();recoveryBlocked=false;recoveryAttemptCount=0;recoveryInProgress=false;cancelScheduledWork();if(observer){observer.disconnect();}observing=false;}
  function onPageShow(){if(destroyed)return;lifecyclePaused=false;recoveryBlocked=false;recoveryAttemptCount=0;recoveryInProgress=false;visibilityPaused=!!document.hidden;if(!visibilityPaused){scan(document);refreshAll();startObserver();if(pendingRoots.length)scheduleObserverFlush();scheduleHealthCheck();}}
  function init(){if(destroyed)return;visibilityPaused=!!document.hidden;lifecyclePaused=false;startLongTaskObserver();detectDeviceProfile();scan(document);refreshAll();startObserver();scheduleHealthCheck();}
  function onNetworkChange(){if(destroyed)return;detectDeviceProfile();detectNetworkProfile();if(visibilityPaused||lifecyclePaused)return;enforceResourceBudget();if(pendingRoots.length)scheduleObserverFlush();scheduleHealthCheck();}
  document.addEventListener('DOMContentLoaded',init);
  window.addEventListener('online',onNetworkChange);
  window.addEventListener('offline',onNetworkChange);
  document.addEventListener('visibilitychange',onVisibilityChange);
  var connection=window.navigator&&(window.navigator.connection||window.navigator.mozConnection||window.navigator.webkitConnection);
  if(connection&&typeof connection.addEventListener==='function')connection.addEventListener('change',onNetworkChange);
  window.addEventListener('pagehide',onPageHide);
  window.addEventListener('pageshow',onPageShow);
  document.addEventListener('ieduportal-academic-context-changed',function(){if(document.hidden){refreshQueued=true;return;}queueRefresh();});
  window.IeduAcademicContextBinding=Object.freeze({context:context,bind:function(selector){if(destroyed)return function(){};var node=document.querySelector(selector);if(!node)return function(){};return track(node).remove||function(){};},refresh:refreshAll,count:function(){cleanupDetached();enforceResourceBudget();return nodeBindings.length;},observe:startObserver,stopObserve:stopObserver,isVisibilityPaused:function(){return visibilityPaused;},isLifecyclePaused:function(){return lifecyclePaused;},pendingCount:function(){return pendingRoots.length;},maxPendingCount:function(){return MAX_PENDING_ROOTS;},maxNodeBindings:function(){return MAX_NODE_BINDINGS;},scanCount:function(){return scanCount;},lastScanDuration:function(){return lastScanDuration;},maxScanMs:function(){return MAX_SCAN_MS;},budgetExceededCount:function(){return budgetExceededCount;},lastBudgetIssue:function(){return lastBudgetIssue;},observerErrorCount:function(){return observerErrorCount;},lastObserverError:function(){return lastObserverError;},recoveryAttemptCount:function(){return recoveryAttemptCount;},isRecoveryBlocked:function(){return recoveryBlocked;},isRecoveryInProgress:function(){return recoveryInProgress;},lastRecoveryDelay:function(){return lastRecoveryDelay;},healthCheckCount:function(){return healthCheckCount;},lastHealthCheckAt:function(){return lastHealthCheckAt;},lastHealthIssue:function(){return lastHealthIssue;},healthySince:function(){return healthySince;},healthInterval:function(){return HEALTH_INTERVAL;},healthyHealthInterval:function(){return HEALTH_HEALTHY_INTERVAL;},unhealthyHealthInterval:function(){return HEALTH_UNHEALTHY_INTERVAL;},healthScheduleDelay:function(){return healthScheduleDelay;},lastHealthScheduleAt:function(){return lastHealthScheduleAt;},longTaskCount:function(){return longTaskCount;},longTaskTotalMs:function(){return longTaskTotalMs;},lastLongTaskDuration:function(){return lastLongTaskDuration;},isAdaptiveBudgetActive:function(){return adaptiveBudgetActive;},adaptiveScanMs:function(){return adaptiveScanMs;},adaptiveScanFloor:function(){return ADAPTIVE_SCAN_FLOOR;},adaptiveScanCeiling:function(){return ADAPTIVE_SCAN_CEILING;},longTaskThreshold:function(){return LONG_TASK_THRESHOLD;},pressureLevel:function(){return pressureLevel;},pressureEvents:function(){return pressureEvents;},pressureRecoveryCount:function(){return pressureRecoveryCount;},lastPressureAt:function(){return lastPressureAt;},pressureMaxLevel:function(){return PRESSURE_MAX_LEVEL;},pressureRecoveryDelay:function(){return PRESSURE_RECOVERY_DELAY;},deviceProfile:function(){return detectDeviceProfile();},deviceProfileChanges:function(){return deviceProfileChanges;},networkProfile:function(){return detectNetworkProfile();},networkProfileChanges:function(){detectNetworkProfile();return networkProfileChanges;},lastNetworkProfileAt:function(){return lastNetworkProfileAt;},effectiveRootsPerFlush:function(){return effectiveRootsPerFlush();},effectiveIdleTimeout:function(){return effectiveIdleTimeout();},schedulerMaxContinuousBatches:function(){return SCHEDULER_MAX_CONTINUOUS_BATCHES;},schedulerContinuousBatches:function(){return schedulerContinuousBatches;},schedulerYieldCount:function(){return schedulerYieldCount;},lastSchedulerRunAt:function(){return lastSchedulerRunAt;},lastSchedulerYieldAt:function(){return lastSchedulerYieldAt;},schedulerPriorityBoost:function(){return schedulerPriorityBoost;},schedulerPriorityEvents:function(){return schedulerPriorityEvents;},schedulerPriorityWaitMs:function(){return schedulerPriorityWaitMs;},schedulerPriorityLastBoostAt:function(){return schedulerPriorityLastBoostAt;},schedulerPriorityThresholdMs:function(){return SCHEDULER_PRIORITY_THRESHOLD_MS;},schedulerPriorityMaxBoost:function(){return SCHEDULER_PRIORITY_MAX_BOOST;},healthDelayMultiplier:function(){var d=detectDeviceProfile(),n=detectNetworkProfile();var m=d==='low-power'?1.5:1;if(n==='online-slow')m*=1.5;if(n==='offline')m*=2;return m;},recoverPressure:function(){recoverPressure();},recover:function(){return recoverObserver();},destroy:function(){destroyed=true;window.removeEventListener('online',onNetworkChange);window.removeEventListener('offline',onNetworkChange);if(connection&&typeof connection.removeEventListener==='function')connection.removeEventListener('change',onNetworkChange);cancelPressureRecovery();stopLongTaskObserver();stopObserver();refreshQueued=false;for(var i=0;i<registrations.length;i++){try{registrations[i]();}catch(e){}}registrations=[];nodeBindings=[];pendingRoots=[];}});
})(window,document);
