/* BT billing toggle v2 + sale mode (Nov 1, 2026). Replaces the inline "BT billing toggle v1" block. */ (function(){ var P={'6a8674103fa47400016de993':[5.99,64],'6a8350ffc623ec0008701010':[7.99,84],'6a866ab93fa47400016de98f':[10.99,109.99]}; /* SALE: on automatically between start and end (Eastern). Test any time with ?btsale=on, back to normal with ?btsale=off */ var SALE={ name:'Black Friday Sale', name2:'Christmas Sale', switchAt:'2026-12-05T00:00:00-05:00', pct:25, start:'2026-11-23T00:00:00-05:00', end:'2026-12-25T00:00:00-05:00', thru:'December 24', offers:{'6a8674103fa47400016de993':'6ae6e4f68768eb00010bee58','6a8350ffc623ec0008701010':'6ae6e4f68768eb00010bee5a','6a866ab93fa47400016de98f':'6ae6e4f68768eb00010bee5c'} }; function ss(k,v){try{if(v===undefined)return sessionStorage.getItem(k);sessionStorage.setItem(k,v)}catch(e){return null}} function ls(k,v){try{if(v===undefined)return localStorage.getItem(k);localStorage.setItem(k,v)}catch(e){return null}} var q=(location.search.match(/[?&]btsale=(on|off|xmas|bf)/)||[])[1]; if(q)ss('bt_sale_test',q); var test=ss('bt_sale_test'); var now=Date.now(); var sale=test==='on'||test==='xmas'||test==='bf'||(test!=='off'&&now>=Date.parse(SALE.start)&&now=Date.parse(SALE.switchAt)))?SALE.name2:SALE.name; var mode; if(sale){mode=ss('bt_bill_sale')||'yearly'} else{mode=ls('bt_bill')==='yearly'?'yearly':'monthly'} function f(n){return '$'+(Math.round(n*100)%100?n.toFixed(2):String(Math.round(n)))} function save(p){return Math.round((1-p[1]/(p[0]*12))*100)} var top=Math.max.apply(null,Object.keys(P).map(function(k){return save(P[k])})); function toggles(){ [].forEach.call(document.querySelectorAll('.btsubx-grid,.btpr-tiers'),function(g){ var prev=g.previousElementSibling;if(prev&&prev.classList.contains('btbill'))return; var d=document.createElement('div');d.className='btbill'; d.innerHTML=(sale?'
'+SALE.pct+'% OFF'+sname+': every annual plan · for as long as you subscribe · through '+SALE.thru+'
':'')+ '
'; g.parentNode.insertBefore(d,g); }); } function apply(){ toggles(); [].forEach.call(document.querySelectorAll('.btbill button'),function(b){b.classList.toggle('on',b.getAttribute('data-bill')===mode)}); [].forEach.call(document.querySelectorAll('a.btsubx-box,a.btpr-t'),function(a){ var id=a.getAttribute('data-bttier'); if(!id){var m=(a.getAttribute('href')||'').match(/portal\/signup\/([0-9a-f]{24})\/(monthly|yearly)/);if(!m)return;id=m[1];a.setAttribute('data-bttier',id)} var p=P[id];if(!p)return; var off=sale&&mode==='yearly'&&SALE.offers[id]; var want=off?'#/portal/offers/'+off:'#/portal/signup/'+id+'/'+mode; var key=mode+(off?'s':''); var pr=a.querySelector('.btsubx-price,.btpr-pr'); if(a.getAttribute('href')===want&&pr&&pr.getAttribute('data-bill')===key)return; a.setAttribute('href',want);if(!pr)return; var tag=pr.classList.contains('btpr-pr')?'span':'small',s=save(p); var alt; if(off)alt='Locked in for as long as you subscribe'; else alt=''+(mode==='yearly'?'about '+f(p[1]/12)+'/mo · save '+s+'%':'or '+f(p[1])+'/yr · save '+s+'%')+''; pr.innerHTML=(mode==='yearly'?f(p[1])+'<'+tag+'>/yr':f(p[0])+'<'+tag+'>/mo')+(off?''+SALE.pct+'% OFF':'')+alt; pr.setAttribute('data-bill',key); }); } document.addEventListener('click',function(e){var b=e.target.closest&&e.target.closest('.btbill button');if(!b)return;e.preventDefault();e.stopPropagation();mode=b.getAttribute('data-bill');if(sale)ss('bt_bill_sale',mode);else ls('bt_bill',mode);apply()},true); var t=null;function soon(){if(t)return;t=setTimeout(function(){t=null;apply()},60)} function start(){apply();new MutationObserver(function(ms){for(var i=0;i