(()=>{var Ve=Object.defineProperty,Ye=Object.defineProperties;var je=Object.getOwnPropertyDescriptors;var pe=Object.getOwnPropertySymbols;var We=Object.prototype.hasOwnProperty,Je=Object.prototype.propertyIsEnumerable;var fe=(t,e,o)=>e in t?Ve(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,ge=(t,e)=>{for(var o in e||(e={}))We.call(e,o)&&fe(t,o,e[o]);if(pe)for(var o of pe(e))Je.call(e,o)&&fe(t,o,e[o]);return t},me=(t,e)=>Ye(t,je(e));(function(t,e){typeof exports=="object"&&typeof module!="undefined"?module.exports=e():typeof define=="function"&&define.amd?define(e):(t=t||self,t.BSN=e())})(void 0,function(){"use strict";function t(i,u){return i.classList.contains(u)}function e(i,u){i.classList.remove(u)}function o(i,u,b,m){m=m||!1,i.addEventListener(u,b,m)}function n(i,u,b,m){m=m||!1,i.removeEventListener(u,b,m)}function s(i,u,b,m){o(i,u,function L(C){C.target===i&&(b(C),n(i,u,L,m))},m)}var r="webkitTransition"in document.body.style?"webkitTransitionEnd":"transitionend",a="webkitTransition"in document.body.style||"transition"in document.body.style,c="webkitTransition"in document.body.style?"webkitTransitionDuration":"transitionDuration";function d(i){var u=a?window.getComputedStyle(i)[c]:0;return u=parseFloat(u),u=typeof u=="number"&&!isNaN(u)?u*1e3:0,u}function _(i,u){var b=0,m=d(i);m?s(i,r,function(L){!b&&u(L),b=1}):setTimeout(function(){!b&&u(),b=1},17)}function h(i,u){var b=u&&u instanceof Element?u:document;return i instanceof Element?i:b.querySelector(i)}function p(i,u){i.classList.add(u)}function R(i){i.focus?i.focus():i.setActive()}function M(i,u){i=h(i),i.Dropdown&&i.Dropdown.dispose();var b=null,m=this,L=i.parentNode,C=h(".dropdown-menu",L),k=function(){for(var P=C.children,S=[],y=0;y1?A-1:0:ee===40&&A{(t.key==="Escape"||t.key==="Esc")&&V&&te()},W=t=>{let e=document.getElementById("nav-search-bar"),o=document.getElementById("toggle-search-button");V&&!e.contains(t.target)&&!o.contains(t.target)&&te()};function te(){let t=document.getElementsByClassName("slickstream-script").length>0,e=document.getElementById("nav-search-bar"),o=document.getElementById("toggle-search-button"),n=e==null?void 0:e.querySelector("input[type='text']");V=!V,t?window.location.hash="search":(e.classList.toggle("nav-search-active"),o.classList.toggle("search-active"),V?(n.focus(),n.select(),document.addEventListener("click",W,!0),document.addEventListener("touchend",W,!0),document.addEventListener("keydown",he)):(document.removeEventListener("click",W,!0),document.removeEventListener("touchend",W,!0),document.removeEventListener("keydown",he)))}function Se(){let t=document.getElementsByClassName("searchToggle");for(let e=0;e{t.addEventListener("click",e=>{e.preventDefault();let o=e.target.closest("pre")||e.target.previousElementSibling,n=o.querySelector("code"),s=n?n.textContent:o.textContent;navigator.clipboard.writeText(s);let r=e.target.textContent;e.target.textContent="Copied to Clipboard!",setTimeout(function(){e.target.textContent=r},2e3)})})}var ye="",Te="",ve="pimylifeup.com";function Qe(){fetch("https://mail."+ve+"/").then(function(t){t.status===200&&t.json().then(function(e){ye=e.nonce,Te=e.expiry})}).catch(console.error)}function Ce(){let t=document.querySelectorAll("form.email-optin");t.length>0&&Qe(),t.forEach(function(e){let o=e.querySelector("input[name='email']"),n=e.querySelector("button"),s=e.classList.contains("email-optin-slim");e.addEventListener("submit",function(r){r.preventDefault(),n.disabled=!0;let a=new FormData;a.append("email",o.value),a.append("nonce",ye),a.append("expiry",Te),fetch("https://mail."+ve+"/",{method:"post",body:a}).then(function(c){if(c.status!==200){n.disabled=!1;return}c.json().then(function(d){if(s){let _=e.querySelector(".input-group"),h=e.querySelector(".email-thank-you-slim"),p=e.querySelector(".form-text"),R=()=>{_.classList.add("hidden-visually"),p&&p.classList.add("hidden-visually"),h.hidden=!1,_.removeEventListener("transitionend",R)};_.addEventListener("transitionend",R,{once:!0}),_.classList.add("fade-out"),p&&p.classList.add("fade-out"),setTimeout(()=>{_.classList.contains("hidden-visually")||R()},350)}else e.querySelector(".input-group-email-field").hidden=!0,e.querySelector(".input-group-submit-button").hidden=!0,e.querySelector(".email-thank-you").hidden=!1})}).catch(console.error)})})}function Ie(){document.querySelector(".category-filter-container")&&(Ze(),et(),tt())}function Ze(){let t=new URLSearchParams(window.location.search),e=document.getElementById("category-sort-select");e&&t.has("sort")&&(e.value=t.get("sort")),st()}function et(){let t=document.getElementById("category-filter-apply");t&&t.addEventListener("click",function(n){n.preventDefault(),Re()});let e=document.getElementById("category-filter-reset");e&&e.addEventListener("click",function(n){n.preventDefault(),ot()});let o=document.getElementById("category-sort-select");o&&o.addEventListener("change",function(){document.getElementById("category-subcategory-filter")||Re()}),document.addEventListener("click",function(n){n.target.classList.contains("active-filter-remove")&&nt(n.target.parentNode.dataset.filter,n.target.parentNode.dataset.value)})}function tt(){document.querySelectorAll(".category-filter-select").forEach(function(e){e.addEventListener("change",function(){this.classList.add("selected-changed"),setTimeout(()=>{this.classList.remove("selected-changed")},300)})})}function Re(){let t=document.querySelector(".category-filter-container");t&&(t.style.opacity="0.7",t.style.transition="opacity 0.2s ease");let e=new URLSearchParams,o=document.getElementById("category-sort-select");o&&o.value&&e.append("sort",o.value),document.querySelectorAll(".category-filter-taxonomy").forEach(function(r){r.value&&e.append(r.name,r.value)});let s=e.toString();window.location.href=window.location.pathname+(s?"?"+s:"")}function ot(){let t=document.querySelector(".category-filter-container");t&&(t.style.opacity="0.7",t.style.transition="opacity 0.2s ease"),window.location.href=window.location.pathname}function nt(t,e){let o=new URLSearchParams(window.location.search);o.has(t)&&o.get(t)===e&&o.delete(t);let n=o.toString();window.location.href=window.location.pathname+(n?"?"+n:"")}function st(){let t=document.querySelector(".category-filter-active");if(!t)return;t.innerHTML="";let e=new URLSearchParams(window.location.search),o=!1;if(e.has("sort")&&e.get("sort")!=="newest"){let s=e.get("sort"),r=document.getElementById("category-sort-select"),a=s;if(r){let c=r.querySelector(`option[value="${s}"]`);c&&(a=c.textContent)}Oe(t,"Sort: "+a,"sort",s),o=!0}if(document.querySelectorAll(".category-filter-taxonomy").forEach(function(s){let r=s.name;if(e.has(r)){let a=e.get(r),c=s.querySelector(`option[value="${a}"]`),d=a;c&&(d=c.textContent);let _=s.dataset.label||r;d=d.replace(/\(\d+\)$/,"").trim(),Oe(t,_+": "+d,r,a),o=!0}}),o){let s=document.createElement("div");s.className="category-filter-label",s.textContent="Active:",t.insertBefore(s,t.firstChild),t.style.display="flex"}else t.style.display="none"}function Oe(t,e,o,n){let s=document.createElement("div");s.className="active-filter-tag",s.dataset.filter=o,s.dataset.value=n,s.innerHTML=e+'×',t.appendChild(s)}function $(t){let{id:e,modalClass:o,title:n="",showSpinner:s=!1,extraContent:r=""}=t,a=document.getElementById(e);if(a)return a;let c=` `;document.body.insertAdjacentHTML("beforeend",c);let d=document.getElementById(e);return rt(d),d}function rt(t){if(!t)return;let e=t.id,o=t.classList[1],n=t.querySelector(`.${o}-close`);n&&n.addEventListener("click",()=>w(e)),t.addEventListener("click",function(s){s.target===this&&w(e)}),document.addEventListener("keydown",function(s){s.key==="Escape"&&t.classList.contains("is-active")&&w(e)})}function I(t){let{id:e,title:o="",message:n="",showSpinner:s=!1,primaryButton:r=null,secondaryButton:a=null}=t,c=document.getElementById(e);if(!c)return;let d=c.classList[1],_=c.querySelector(`.${d}-title`),h=c.querySelector(`.${d}-text`),p=c.querySelector(`.${d}-button.primary`),R=c.querySelector(`.${d}-button.secondary`);_&&(_.textContent=o),h&&(h.innerHTML=n);let M=c.querySelector(`.${d}-spinner`);if(M&&(M.style.display=s?"flex":"none"),c.removeAttribute("inert"),p)if(r){p.textContent=r.text||"OK",p.style.display="block";let x=p.cloneNode(!0);p.parentNode.replaceChild(x,p),x.addEventListener("click",r.action)}else p.style.display="none";if(R)if(a){R.textContent=a.text||"Cancel",R.style.display="block";let x=R.cloneNode(!0);R.parentNode.replaceChild(x,R),x.addEventListener("click",a.action)}else R.style.display="none";c.classList.add("is-active");let U=c.querySelector(`.${d}-close`);U&&setTimeout(()=>{U.focus()},100),it(c)}function w(t){let e=document.getElementById(t);e&&(e.classList.remove("is-active"),e.setAttribute("inert",""))}function it(t){let e=t.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),o=e[0],n=e[e.length-1];t.addEventListener("keydown",function(r){r.key==="Tab"&&(r.shiftKey&&document.activeElement===o?(r.preventDefault(),n.focus()):!r.shiftKey&&document.activeElement===n&&(r.preventDefault(),o.focus()))})}function D(t){let{message:e,icon:o=null,type:n="info",additionalInfo:s=null,duration:r=5e3}=t,a=document.getElementById("lbb-toast-container");a||(a=document.createElement("div"),a.id="lbb-toast-container",a.className="lbb-toast-container",document.body.appendChild(a));let c=document.createElement("div");if(c.className=`lbb-toast lbb-toast-${n}`,o){let h=document.createElement("span");h.className="lbb-toast-icon",h.innerHTML=o,c.appendChild(h)}let d=document.createElement("span");if(d.className="lbb-toast-message",d.textContent=e,s){let h=document.createElement("small");h.className="lbb-toast-info-text",h.textContent=s,d.appendChild(document.createElement("br")),d.appendChild(h)}c.appendChild(d);let _=document.createElement("button");return _.className="lbb-toast-close",_.innerHTML="×",_.setAttribute("aria-label","Close notification"),_.addEventListener("click",function(){Pe(c)}),c.appendChild(_),a.appendChild(c),setTimeout(()=>{c.classList.add("show")},10),r>0&&setTimeout(()=>{Pe(c)},r),c}function we(t){let{title:e,description:o,icon:n,duration:s=7e3,celebrationText:r="Achievement Unlocked!"}=t,a=``,c=o?`${e} - ${o}`:e,d=D({message:c,type:"success",duration:s,icon:a,additionalInfo:r});return d&&(d.classList.add("lbb-badge-toast"),setTimeout(()=>{d.classList.add("lbb-badge-toast-animate")},100)),d}function Pe(t){t.classList.remove("show"),t.classList.add("hide"),t.addEventListener("transitionend",function e(){t.removeEventListener("transitionend",e),t.remove();let o=document.getElementById("lbb-toast-container");o&&o.children.length===0&&o.remove()})}var at=600,ct=300;var Le=50,oe=null,H=null;function ke(){oe=document.querySelector(".user-profile-wrapper"),H=document.querySelector(".lbb-favorites-list-wrapper"),yt(),document.body.addEventListener("click",lt)}function lt(t){let e=t.target.closest(".lbb-favorite-button");if(e){t.preventDefault(),dt(e);return}let o=t.target.closest(".lbb-favorites-remove");o&&(t.preventDefault(),ut(o))}async function dt(t){let{postId:e,action:o,nonce:n}=t.dataset;if(o==="login"||o==="subscribe"){I({id:"lbbFavoriteModal",title:"Premium Feature",message:lbbFavorites.subscribe_message,primaryButton:{text:"View Subscription Options",action:function(){window.location.href=lbbFavorites.subscribe_url}},secondaryButton:{text:"Already Subscribed? Log In",action:function(){window.location.href=lbbFavorites.login_url}}});return}if(o==="toggle"){if(!n)return;await De({button:t,postId:e,nonce:n,operationType:"toggle",onSuccess:s=>ft(t,s.data.favorited),baseErrorMessage:"Could not update favorite status."})}}async function ut(t){let{postId:e,nonce:o}=t.dataset;!e||!o||await De({button:t,postId:e,nonce:o,operationType:"remove",onSuccess:()=>St(t),baseErrorMessage:"Could not remove favorite."})}async function pt(t,e){var n;let o=new FormData;o.append("action","lbb_toggle_favorite"),o.append("post_id",t),o.append("security",e);try{let s=await fetch(lbbFavorites.ajax_url,{method:"POST",body:o,credentials:"same-origin"}),r=await s.json();if(!s.ok)throw new Error(((n=r.data)==null?void 0:n.message)||`HTTP error! status: ${s.status}`);return r}catch(s){throw new Error(s.message||"Network request failed")}}function ft(t,e){t.setAttribute("aria-pressed",e?"true":"false"),t.classList.toggle("is-favorited",e),t.classList.add("animate-favorite"),setTimeout(()=>{t.classList.remove("animate-favorite")},at);let o=e?lbbFavorites.add_success:lbbFavorites.remove_success;t.setAttribute("title",o);let n=t.querySelector(".sr-only");n&&(n.textContent=e?"Favorited":"Favorite"),ht(e),e&>(t)}function gt(t){try{let e=t.getBoundingClientRect(),o=e.left+e.width/2,n=e.top+e.height/2;if(oe){bt(o,n,oe);return}mt(o,n)}catch(e){}}function xe(t,e,o,n,s=null){let r=document.createElement("div");r.className="flying-heart",r.innerHTML='',r.style.left=`${t}px`,r.style.top=`${e}px`,r.style.setProperty("--flying-heart-x",`${o}px`),r.style.setProperty("--flying-heart-y",`${n}px`),document.body.appendChild(r),r.addEventListener("animationend",()=>{r.remove(),s&&Et(s)})}function mt(t,e){let o=window.innerWidth-t-Le,n=-e+Le;xe(t,e,o,n)}function bt(t,e,o){try{let n=o.getBoundingClientRect(),s=n.left+n.width/2,r=n.top+n.height/2,a=s-t,c=r-e;xe(t,e,a,c,o)}catch(n){}}function Et(t){try{let e=t.getBoundingClientRect(),o=e.left+e.width/2,n=e.top+e.height/2,s=document.createElement("div");s.className="account-menu-favorites-ping",s.style.position="fixed",s.style.left=`${o}px`,s.style.top=`${n}px`,s.style.zIndex="9999",document.body.appendChild(s),s.addEventListener("animationend",()=>{s.remove()})}catch(e){}}function ht(t){t?D({message:lbbFavorites.add_success,icon:'',type:"success",additionalInfo:lbbFavorites.updates_info}):D({message:lbbFavorites.remove_success,icon:'',type:"info"})}function St(t){let e=t.closest("tr.lbb-favorites-item");e.style.opacity="0",setTimeout(()=>{let o=e.offsetHeight;e.style.height=o+"px",e.style.transition="height 0.3s ease, opacity 0.3s ease",requestAnimationFrame(()=>{e.style.height="0px",e.style.overflow="hidden",e.addEventListener("transitionend",function n(s){s.propertyName==="height"&&(e.removeEventListener("transitionend",n),e.remove(),_t())})})},ct)}function _t(){if(document.querySelectorAll(".lbb-favorites-item").length===0)if(H){let e=Ae(),o=document.createRange().createContextualFragment(e);H.parentNode&&(H.parentNode.replaceChild(o,H),H=null)}else{let e=document.querySelector(".lbb-favorites-list-wrapper");if(e&&e.parentNode){let o=Ae(),n=document.createRange().createContextualFragment(o);e.parentNode.replaceChild(n,e)}}}function Ne(t,e){I({id:"lbbFavoriteModal",title:t,message:e,primaryButton:{text:"OK",action:function(){w("lbbFavoriteModal")}}})}function yt(){$({id:"lbbFavoriteModal",modalClass:"lbb-favorite-modal",title:""})}function Ae(){return`
\u2764

No Favorites Yet

You haven't favorited any tutorials yet. Explore our content and click the heart icon to add favorites.

Browse Tutorials
`}async function De({button:t,postId:e,nonce:o,operationType:n,onSuccess:s,baseErrorMessage:r}){var c;t.disabled=!0;let a=!1;try{let d=await pt(e,o);d.success?(s(d),a=!0):Ne("Error",((c=d.data)==null?void 0:c.message)||`${r} Please try again.`)}catch(d){Ne("Connection Error",`Could not connect to ${n} favorite. Error: ${d.message||"Unknown error"}`)}finally{(!a&&n==="remove"||n==="toggle")&&(t.disabled=!1)}}var J=null,ne=!1;function Be(){Tt();let t=document.querySelector(".pdf-button");t&&t.addEventListener("click",vt)}function Tt(){$({id:"lbbPdfModal",modalClass:"lbb-pdf-modal",title:"",showSpinner:!0})}function vt(){if(ne)return;let t=document.querySelector(".pdf-button");if(!t)return;if(J){window.location.href=J;return}let e=t.hasAttribute("data-nonce")&&t.hasAttribute("data-expiry")&&t.hasAttribute("data-post-id");typeof plausible=="function"&&plausible("PDF Generated",{props:{post_id:t.getAttribute("data-post-id"),susbcribed:e}}),e?(ne=!0,I({id:"lbbPdfModal",title:"Generating PDF",message:"Please wait while we generate your PDF...",showSpinner:!0}),Ct(t.getAttribute("data-nonce"),t.getAttribute("data-expiry"),t.getAttribute("data-post-id"))):I({id:"lbbPdfModal",title:"Premium Feature",message:"PDF downloads are available exclusively to Premium subscribers. Subscribe to unlock this feature along with ad-free browsing and more.",primaryButton:{text:"Subscribe to Premium",action:function(){window.location.href="/subscribe/"}},secondaryButton:{text:"Already Subscribed? Log In",action:function(){window.location.href="/my-account/"}}})}function Ct(t,e,o){fetch(`https://pagetopdf.pimylifeup.com/?nonce=${t}&expiry=${e}&post_id=${o}`).then(n=>{if(!n.ok)throw new Error(`Server responded with status: ${n.status}`);return n.json()}).then(n=>{n.status==="success"?(J=n.link,I({id:"lbbPdfModal",title:"PDF Ready",message:"Your PDF has been successfully generated and is ready to download.",primaryButton:{text:"Download PDF",action:function(){window.location.href=J,w("lbbPdfModal")}},secondaryButton:{text:"Cancel",action:function(){w("lbbPdfModal")}}})):I({id:"lbbPdfModal",title:"Error",message:"There was a problem generating your PDF. Please try again later.",primaryButton:{text:"OK",action:function(){w("lbbPdfModal")}}})}).catch(n=>{I({id:"lbbPdfModal",title:"Connection Error",message:"Could not connect to the PDF service. Please check your connection and try again.",primaryButton:{text:"OK",action:function(){w("lbbPdfModal")}}})}).finally(()=>{ne=!1})}var v={PROGRESS_BUTTON:".lbb-progress-button",PROGRESS_BUTTON_TEXT:".lbb-progress-button-text",STEP_NUMBERING:".step_numbering",STEP_CHECKBOX:".lbb-step-checkbox",STEP_CHECKBOX_CONTAINER:".lbb-step-checkbox-container",STEP_CHECKMARK:".lbb-step-checkmark",STEP_CHECKBOX_TEXT:".lbb-step-checkbox-text",PROGRESS_INDICATOR:".lbb-tutorial-progress-indicator",PROGRESS_INDICATOR_FILL:".lbb-tutorial-progress-fill",PROGRESS_INDICATOR_PERCENTAGE:".lbb-tutorial-progress-percentage",PROGRESS_UPDATE_SELECT:".lbb-progress-update",PROGRESS_FILTER_STATUS:".lbb-progress-filter-status",PROGRESS_ITEM:".lbb-progress-item",PROGRESS_ITEM_STATUS:".lbb-progress-status",PROGRESS_ITEM_BAR_FILL:".lbb-progress-bar-fill",PROGRESS_ITEM_PERCENTAGE:".lbb-progress-percentage",PROGRESS_ITEM_META:".lbb-progress-meta",PROGRESS_DROPDOWN:".lbb-progress-dropdown",PROGRESS_OPTION:".lbb-progress-option",TOAST_LAST_CHILD:".lbb-toast:last-child",TOAST_CLOSE:".lbb-toast-close",RESUME_READING_BTN:".lbb-resume-reading-btn",HEADINGS_AND_SECTIONS:"h1, h2, h3, h4, .lbb-section-break"},E={NOT_STARTED:"not_started",IN_PROGRESS:"in_progress",COMPLETED:"completed",UPDATE:"update",SUBSCRIBE:"subscribe"},O={STATUS_PREFIX:"lbb-progress-status-",STEP_CHECKBOX_CONTAINER:"lbb-step-checkbox-container",STEP_CHECKBOX:"lbb-step-checkbox",STEP_CHECKMARK:"lbb-step-checkmark",STEP_CHECKBOX_TEXT:"lbb-step-checkbox-text",INDICATOR:"lbb-tutorial-progress-indicator",INDICATOR_FILL:"lbb-tutorial-progress-fill",INDICATOR_PERCENTAGE:"lbb-tutorial-progress-percentage",RESUME_BTN:"lbb-resume-reading-btn",DROPDOWN_ACTIVE:"active"},T={LOCAL_STORAGE_POSITION_PREFIX:"lbb_tutorial_position_",LOCAL_STORAGE_SYNC_PREFIX:"lbb_last_position_sync_",RESUME_SCROLL_THRESHOLD:300,SERVER_SYNC_INTERVAL:3e4,MAX_ELEMENT_DESC_LENGTH:40,RESUME_TOAST_DURATION:8e3,SUCCESS_TOAST_DURATION:3e3,SERVER_POSITION_EXPIRY:24*60*60*1e3,FALLBACK_HEADING_CHECK_TOP:150,FALLBACK_HEADING_CHECK_BOTTOM:-50,MIN_SCROLL_FOR_SERVER_SYNC:100},re={GET_POSITION:"lbb_get_reading_position",SAVE_POSITION:"lbb_save_reading_position",UPDATE_PROGRESS:"lbb_update_progress"},Me={SUBSCRIPTION_REQUIRED:"subscription_required",NOT_LOGGED_IN:"not_logged_in"},g=typeof window!="undefined"&&window.lbb_progress?window.lbb_progress:{ajax_url:"/wp-admin/admin-ajax.php",nonce:"",strings:{error:"Error",subscription_required:"Premium subscription required",login_required:"Login required",update_error:"Could not update progress. Please try again.",badge_earned:"New Badge Earned!",close:"Close",resume_prompt:"Resume where you left off?",resume_button:"Resume Reading",premium_feature_title:"Premium Feature",premium_feature_message:"Progress tracking requires a premium subscription. Subscribe to unlock this feature and many others.",view_subscription:"View Subscription Options",already_subscribed:"Already Subscribed? Log In",login_prompt_title:"Login Required",login_prompt_message:"Please log in to track your progress across tutorials.",login_button:"Log In",cancel_button:"Cancel",ok_button:"OK",connection_error_title:"Connection Error",connection_error_message:"Network error. Please check your connection and try again.",mark_as_completed:"Mark as completed",status_not_started_button:"Track This Tutorial",status_in_progress_button:"In Progress",status_completed_button:"Completed",status_not_started_dashboard:"Not Started",status_in_progress_dashboard:"In Progress",status_completed_dashboard:"Completed",progress_updated:"Progress updated successfully",marked_not_started:"Tutorial marked as Not Started",marked_in_progress:"Tutorial marked as In Progress",marked_completed:"Tutorial marked as Completed"}},N={},Y=0,B=-1,Rt=0,l={progressButton:null,steps:null,progressIndicator:null,progressIndicatorFill:null,progressIndicatorPercentage:null,statusFilter:null,progressSelects:null,progressOptions:null};function Fe(){l.progressButton=document.querySelector(v.PROGRESS_BUTTON),l.steps=document.querySelectorAll(v.STEP_NUMBERING),l.statusFilter=document.querySelector(v.PROGRESS_FILTER_STATUS),l.progressSelects=document.querySelectorAll(v.PROGRESS_UPDATE_SELECT),l.progressOptions=document.querySelectorAll(v.PROGRESS_OPTION),Bt(),Mt(),It(),Ot(),l.progressOptions&&l.progressOptions.forEach(t=>{t.addEventListener("click",Gt)}),window.lbbProgressInitialized=!0}function Ot(){$({id:"lbbProgressModal",modalClass:"lbb-progress-modal",title:""})}function It(){!l.progressButton||!l.steps||l.progressButton.dataset.action===E.UPDATE&&(Y=l.steps.length,Y!==0&&(l.steps.forEach((t,e)=>{N[e]=!1}),Pt(),Lt(),Dt(),Nt(),qe(),window.addEventListener("beforeunload",()=>{Ge()})))}function Pt(){l.steps&&l.steps.forEach((t,e)=>{let o=document.createElement("label");o.className=O.STEP_CHECKBOX_CONTAINER;let n=document.createElement("input");n.type="checkbox",n.className=O.STEP_CHECKBOX,n.dataset.stepIndex=e,n.id=`lbb-step-checkbox-${e}`,n.checked=N[e]||!1;let s=document.createElement("span");s.className=O.STEP_CHECKMARK;let r=document.createElement("span");r.className=O.STEP_CHECKBOX_TEXT,r.textContent=g.strings.mark_as_completed||"Mark as completed",n.addEventListener("change",wt),o.appendChild(n),o.appendChild(s),o.appendChild(r),t.appendChild(o)})}function wt(t){let e=t.target,o=parseInt(e.dataset.stepIndex,10);N[o]=e.checked,B=o,ie(),Ge(),qe()}function Lt(){if(!l.progressButton||!l.steps)return;let t=l.progressButton.dataset.postId;if(t)try{let e=localStorage.getItem(`${T.LOCAL_STORAGE_POSITION_PREFIX}${t}`);if(e){let o=JSON.parse(e);if(o.viewedSteps&&typeof o.viewedSteps=="object"){let n=-1;Object.keys(o.viewedSteps).forEach(s=>{let r=parseInt(s,10);if(o.viewedSteps[r]&&N[r]!==void 0){N[r]=!0,n=Math.max(n,r);let a=document.querySelector(`${v.STEP_CHECKBOX}[data-step-index="${r}"]`);a&&(a.checked=!0)}}),B===-1&&(B=n)}ie()}}catch(e){}}function Nt(){if(!l.progressButton)return;let t=l.progressButton.dataset.postId,e=l.progressButton.dataset.nonce,o=l.progressButton.dataset.action===E.UPDATE;if(!t)return;let n=null,s=!1;try{let a=localStorage.getItem(`${T.LOCAL_STORAGE_POSITION_PREFIX}${t}`);a&&(n=JSON.parse(a),s=!0)}catch(a){}if(o&&(!n||n&&Date.now()-n.timestamp>T.SERVER_POSITION_EXPIRY)){let a=new FormData;a.append("action",re.GET_POSITION),a.append("post_id",t),a.append("security",e),fetch(g.ajax_url,{method:"POST",credentials:"same-origin",body:a}).then(c=>c.json()).then(c=>{if(c.success&&c.data.position){if(!n||c.data.position.timestamp>n.timestamp){n=c.data.position,s=!1;try{localStorage.setItem(`${T.LOCAL_STORAGE_POSITION_PREFIX}${t}`,JSON.stringify(n))}catch(_){}n.scrollY>T.RESUME_SCROLL_THRESHOLD&&se(n)}}else c.success}).catch(c=>{}).finally(()=>{n&&s&&n.scrollY>T.RESUME_SCROLL_THRESHOLD&&se(n)})}else n&&s&&n.scrollY>T.RESUME_SCROLL_THRESHOLD&&se(n)}function se(t){if(window.scrollY>T.RESUME_SCROLL_THRESHOLD)return;let e=new Date(t.timestamp),o=e.toLocaleDateString(),n=e.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});D({message:g.strings.resume_prompt||"Resume where you left off?",type:"info",icon:'',duration:T.RESUME_TOAST_DURATION,additionalInfo:`Last position from ${o} at ${n}${t.elementDescription?`: ${t.elementDescription}`:""}`});let s=document.querySelector(v.TOAST_LAST_CHILD);if(s){let r=document.createElement("button");r.className=O.RESUME_BTN,r.textContent=g.strings.resume_button||"Resume Reading",r.addEventListener("click",()=>{At(t),s.remove()});let a=s.querySelector(v.TOAST_CLOSE);a?s.insertBefore(r,a):s.appendChild(r)}}function At(t){if(t.elementSelector)try{let e=document.querySelector(t.elementSelector);if(e){e.scrollIntoView({behavior:"smooth",block:"start"});return}}catch(e){}window.scrollTo({top:t.scrollY,behavior:"smooth"})}function Ge(){if(!l.progressButton||!l.steps)return;let t=l.progressButton.dataset.postId,e=l.progressButton.dataset.nonce,o=l.progressButton.dataset.action===E.UPDATE;if(!t)return;let n=window.scrollY,s="",r="";if(B!==-1&&l.steps[B]){let p=l.steps[B];r=`${v.STEP_NUMBERING}:nth-of-type(${B+1})`,s=(p.querySelector("h1, h2, h3, h4")||p).textContent.trim().substring(0,T.MAX_ELEMENT_DESC_LENGTH),s.length===T.MAX_ELEMENT_DESC_LENGTH&&T.MAX_ELEMENT_DESC_LENGTH>3&&(s=s.slice(0,-3)+"...")}else if(r=kt(n),r)try{let p=document.querySelector(r);p&&(s=p.textContent.trim().substring(0,T.MAX_ELEMENT_DESC_LENGTH),s.length===T.MAX_ELEMENT_DESC_LENGTH&&T.MAX_ELEMENT_DESC_LENGTH>3&&(s=s.slice(0,-3)+"..."))}catch(p){}let a=He(N),c=$e(l.progressButton),d=c===E.IN_PROGRESS||c===E.COMPLETED,_=Object.keys(N).length>0||!d,h=me(ge({scrollY:n,timestamp:Date.now(),elementDescription:s,elementSelector:r},_&&{viewedSteps:N}),{progress:Math.round(a*100)});try{localStorage.setItem(`${T.LOCAL_STORAGE_POSITION_PREFIX}${t}`,JSON.stringify(h))}catch(p){}xt(t,e,o,n,h)}function kt(t){let e=null,o=1/0,n="";if(document.querySelectorAll(v.HEADINGS_AND_SECTIONS).forEach(r=>{let a=r.getBoundingClientRect();if(a.top<=T.FALLBACK_HEADING_CHECK_TOP&&a.bottom>=T.FALLBACK_HEADING_CHECK_BOTTOM){let c=Math.abs(a.top);cd.tagName===e.tagName).indexOf(e);c!==-1&&(n=`${r}:nth-of-type(${c+1})`)}catch(r){n=""}return n}function xt(t,e,o,n,s){if(!o)return;let r=parseInt(localStorage.getItem(`${T.LOCAL_STORAGE_SYNC_PREFIX}${t}`))||0,a=Date.now()-r>T.SERVER_SYNC_INTERVAL,c=Object.values(N).some(Boolean),d=n>T.MIN_SCROLL_FOR_SERVER_SYNC;if(a&&(c||d)){let _={scrollY:s.scrollY,timestamp:s.timestamp,elementDescription:s.elementDescription,elementSelector:s.elementSelector,progress:s.progress,stepCount:Y,stepsViewedCount:Object.values(N).filter(Boolean).length},h=new FormData;h.append("action",re.SAVE_POSITION),h.append("post_id",t),h.append("security",e),h.append("position_data",JSON.stringify(_)),fetch(g.ajax_url,{method:"POST",credentials:"same-origin",body:h}).then(p=>p.json()).then(p=>{if(p.success)try{localStorage.setItem(`${T.LOCAL_STORAGE_SYNC_PREFIX}${t}`,Date.now().toString())}catch(M){}}).catch(p=>{})}}function Dt(){if(document.querySelector(v.PROGRESS_INDICATOR))return;let t=document.createElement("div");t.className=O.INDICATOR;let e=document.createElement("div");e.className=O.INDICATOR_FILL,e.style.height="0%";let o=document.createElement("div");o.className=O.INDICATOR_PERCENTAGE,o.textContent="0%",t.appendChild(e),t.appendChild(o),document.body.appendChild(t),l.progressIndicator=t,l.progressIndicatorFill=e,l.progressIndicatorPercentage=o,ie()}function ie(){if(!l.progressIndicatorFill||!l.progressIndicatorPercentage)return;let t=He(N),e=Math.round(t*100);l.progressIndicatorFill.style.height=`${e}%`,l.progressIndicatorPercentage.textContent=`${e}%`,Rt=e}function qe(){if(!l.progressButton||!l.steps||Y===0)return;let t=l.progressButton.dataset.postId,e=l.progressButton.dataset.nonce,o=$e(l.progressButton),n=Object.values(N).filter(Boolean).length,s=n>0,r=n===Y,a=o;r&&o!==E.COMPLETED?a=E.COMPLETED:s&&!r&&o===E.NOT_STARTED?a=E.IN_PROGRESS:!s&&E.NOT_STARTED,a!==o&&ae(t,a,e)}function $e(t){return t?t.classList.contains(O.STATUS_PREFIX+E.COMPLETED)?E.COMPLETED:t.classList.contains(O.STATUS_PREFIX+E.IN_PROGRESS)?E.IN_PROGRESS:E.NOT_STARTED:E.NOT_STARTED}function He(t){let e=Object.keys(t).length;return e===0?0:Object.values(t).filter(n=>n).length/e}function Bt(){l.progressButton&&(l.progressButton.addEventListener("click",Ft),document.addEventListener("click",t=>{let e=l.progressButton.querySelector(v.PROGRESS_DROPDOWN);e&&!l.progressButton.contains(t.target)&&e.classList.remove(O.DROPDOWN_ACTIVE)}),l.progressSelects&&l.progressSelects.forEach(t=>{t.addEventListener("change",qt)}))}function Mt(){l.statusFilter&&l.statusFilter.addEventListener("change",function(){let t=this.value;document.querySelectorAll(v.PROGRESS_ITEM).forEach(o=>{t==="all"||o.dataset.status===t?o.style.display="":o.style.display="none"})})}function Ft(t){let e=t.currentTarget,o=e.dataset.action;if(o===E.UPDATE){let n=e.querySelector(v.PROGRESS_DROPDOWN);n&&n.classList.toggle(O.DROPDOWN_ACTIVE)}else o===E.SUBSCRIBE&&I({id:"lbbProgressModal",title:g.strings.premium_feature_title||"Premium Feature",message:g.strings.premium_feature_message||"Progress tracking requires a premium subscription.",primaryButton:{text:g.strings.view_subscription||"View Subscription Options",action:function(){window.location.href="/subscribe/"}},secondaryButton:{text:g.strings.already_subscribed||"Already Subscribed? Log In",action:function(){window.location.href="/my-account/"}}})}function Gt(t){let e=t.currentTarget,o=e.dataset.status,n=e.closest(v.PROGRESS_BUTTON);if(!n)return;let s=n.dataset.postId,r=n.dataset.nonce,a=n.querySelector(v.PROGRESS_DROPDOWN);a&&a.classList.remove(O.DROPDOWN_ACTIVE),s&&r&&Object.values(E).includes(o)&&ae(s,o,r)}function qt(t){let e=t.currentTarget,o=e.value,n=e.dataset.postId,s=e.dataset.nonce;n&&s&&Object.values(E).includes(o)?ae(n,o,s).then(()=>{e.selectedIndex=0}).catch(()=>{e.selectedIndex=0}):e.selectedIndex=0}function $t(t){return we({title:t.name||g.strings.badge_earned||"New Badge Earned!",description:t.description||"",icon:t.icon||""})}function Ht(t,e,o){let n=Object.values(E).map(c=>O.STATUS_PREFIX+c),s={[E.NOT_STARTED]:g.strings.status_not_started_button||"Track This Tutorial",[E.IN_PROGRESS]:g.strings.status_in_progress_button||"In Progress",[E.COMPLETED]:g.strings.status_completed_button||"Completed"},r={[E.NOT_STARTED]:g.strings.status_not_started_dashboard||"Not Started",[E.IN_PROGRESS]:g.strings.status_in_progress_dashboard||"In Progress",[E.COMPLETED]:g.strings.status_completed_dashboard||"Completed"};if(l.progressButton&&l.progressButton.dataset.postId===t){l.progressButton.classList.remove(...n),l.progressButton.classList.add(O.STATUS_PREFIX+e);let c=l.progressButton.querySelector(v.PROGRESS_BUTTON_TEXT);c&&s[e]&&(c.textContent=s[e])}let a=document.querySelector(`${v.PROGRESS_ITEM}[data-post-id="${t}"]`);if(a){a.classList.remove(...n),a.classList.add(O.STATUS_PREFIX+e),a.dataset.status=e;let c=a.querySelector(v.PROGRESS_ITEM_STATUS);c&&(c.textContent=r[e]||"");let d=a.querySelector(v.PROGRESS_ITEM_BAR_FILL);d&&(d.style.width=`${o}%`);let _=a.querySelector(v.PROGRESS_ITEM_PERCENTAGE);_&&(_.textContent=`${o}%`);let h=a.querySelector(v.PROGRESS_ITEM_META);if(h){let p=new Date;h.textContent=`Last updated: ${p.toLocaleDateString()}`}}}function ae(t,e,o){let n=new FormData;return n.append("action",re.UPDATE_PROGRESS),n.append("post_id",t),n.append("status",e),n.append("security",o),fetch(g.ajax_url,{method:"POST",credentials:"same-origin",body:n}).then(s=>s.json()).then(s=>{var r;if(s.success&&s.data){Ht(t,s.data.status,s.data.percentage);let a={[E.NOT_STARTED]:g.strings.marked_not_started||"Tutorial marked as Not Started",[E.IN_PROGRESS]:g.strings.marked_in_progress||"Tutorial marked as In Progress",[E.COMPLETED]:g.strings.marked_completed||"Tutorial marked as Completed"};return D({message:a[s.data.status]||g.strings.progress_updated||"Progress updated successfully",type:"success",icon:'',duration:T.SUCCESS_TOAST_DURATION}),s.data.new_badges&&s.data.new_badges.length>0&&$t(s.data.new_badges[0]),s.data}else throw Ut(s.data||{}),new Error(((r=s.data)==null?void 0:r.message)||"Error updating progress")}).catch(s=>{throw s.message.includes("updating progress")||I({id:"lbbProgressModal",title:g.strings.connection_error_title||"Connection Error",message:g.strings.connection_error_message||"Network error. Please try again.",primaryButton:{text:g.strings.ok_button||"OK",action:()=>w("lbbProgressModal")}}),s})}function Ut(t){let e=t.code,o=t.message;e===Me.SUBSCRIPTION_REQUIRED?I({id:"lbbProgressModal",title:g.strings.premium_feature_title||"Premium Feature Required",message:o||g.strings.premium_feature_message||"Progress tracking requires a premium subscription.",primaryButton:{text:g.strings.view_subscription||"View Subscription Options",action:()=>window.location.href="/subscribe/"},secondaryButton:{text:g.strings.already_subscribed||"Already Subscribed? Log In",action:()=>window.location.href="/my-account/"}}):e===Me.NOT_LOGGED_IN?I({id:"lbbProgressModal",title:g.strings.login_prompt_title||"Login Required",message:o||g.strings.login_prompt_message||"Please log in to track your progress.",primaryButton:{text:g.strings.login_button||"Log In",action:()=>window.location.href="/my-account/"},secondaryButton:{text:g.strings.cancel_button||"Cancel",action:()=>w("lbbProgressModal")}}):I({id:"lbbProgressModal",title:g.strings.error||"Error",message:o||g.strings.update_error||"Could not update progress. Please try again.",primaryButton:{text:g.strings.ok_button||"OK",action:()=>w("lbbProgressModal")}})}document.addEventListener("DOMContentLoaded",()=>{Ee(),Se(),_e(),Ce(),Ie(),ke(),Be(),Fe()});})();