(function() { "use strict"; // ================================================================ // Scroll reveal // ================================================================ var observer = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting) { entry.target.classList.add("br-visible"); if (entry.target.closest(".br-hero-visual")) { entry.target.style.opacity = "1"; entry.target.style.transform = "translateX(0)"; } } }); }, { threshold: 0.1, rootMargin: "0px 0px -40px 0px" }); var wrapper = document.querySelector(".cf-braas"); if (wrapper) { wrapper.querySelectorAll(".br-reveal").forEach(function(el) { observer.observe(el); }); var heroVisual = wrapper.querySelector(".br-hero-visual"); if (heroVisual) observer.observe(heroVisual); } // ================================================================ // Hero status text swap on hover // ================================================================ var serverWrap = document.querySelector(".br-server-wrap"); var statusText = document.querySelector(".cf-braas .br-status-text"); if (serverWrap && statusText) { serverWrap.addEventListener("mouseenter", function() { statusText.textContent = "Recovery Active"; }); serverWrap.addEventListener("mouseleave", function() { statusText.textContent = "Recovery Ready"; }); } // ================================================================ // Modal // ================================================================ var modal = document.getElementById("cfbraas-modal"); var closeBtn = document.getElementById("cfbraas-modal-close"); var formLoaded = false; function openModal(e) { e.preventDefault(); modal.classList.add("br-modal-open"); document.body.style.overflow = "hidden"; if (!formLoaded && window.hbspt) { hbspt.forms.create({ portalId: "45830035", formId: "4c205b15-e4d2-45f0-927b-cb9ea1aa05b9", target: "#cfbraas-hs-form" }); formLoaded = true; } } function closeModal() { modal.classList.remove("br-modal-open"); document.body.style.overflow = ""; } document.querySelectorAll(".br-modal-trigger").forEach(function(btn) { btn.addEventListener("click", openModal); }); if (closeBtn) closeBtn.addEventListener("click", closeModal); if (modal) modal.addEventListener("click", function(e) { if (e.target === modal) closeModal(); }); document.addEventListener("keydown", function(e) { if (e.key === "Escape") closeModal(); }); // ================================================================ // BACKUP RISK ASSESSMENT // ================================================================ var BRA_QUESTIONS = [ { id:"q_env", q:"How would you describe your IT environment?", hint:"Think about the systems and data you rely on day to day.", opts:[ {id:"simple",label:"Simple -- a few computers, light IT needs"}, {id:"moderate",label:"Moderate -- servers, cloud storage, some complexity"}, {id:"complex",label:"Complex -- VMs, hybrid cloud, multi-site infrastructure"}, {id:"personal",label:"Personal -- just my own files and devices"} ]}, { id:"q_size", q:"How many people are in your organization?", hint:"This helps us match you to the right scale of solution.", opts:[ {id:"individual",label:"Just me"}, {id:"smb",label:"Small team (2-50 people)"}, {id:"midmarket",label:"Mid-size organization (50-500 people)"}, {id:"enterprise",label:"Large organization (500+ people)"} ]}, { id:"q_goal", q:"What matters most to you when it comes to your data?", hint:"Pick the one that best describes your top priority.", opts:[ {id:"files",label:"Recovering my files quickly if something goes wrong"}, {id:"continuity",label:"Keeping my business running no matter what happens"}, {id:"compliance",label:"Meeting compliance and regulatory requirements"}, {id:"threats",label:"Defending against ransomware and cyber threats"} ]}, { id:"q_rto", q:"If you lost access to your data today, how long could you afford to be down?", hint:"Be honest -- this is one of the most important questions.", opts:[ {id:"days",label:"A day or two would be okay"}, {id:"hours",label:"A few hours at most"}, {id:"instant",label:"Minutes -- every hour of downtime costs us significantly"}, {id:"unknown",label:"I am not sure -- we have never thought through it"} ]}, { id:"q_current", q:"How would you describe your current backup situation?", hint:"No judgment -- we just want to understand where you are today.", opts:[ {id:"none",label:"We have no backup or cloud backup in place"}, {id:"basic",label:"We back up to an external drive or local device"}, {id:"cloud",label:"We use a cloud backup service"}, {id:"unsure",label:"I am not sure what we have"} ]}, { id:"q_concern", q:"What keeps you up at night when it comes to your data?", hint:"Pick the scenario that worries you most.", opts:[ {id:"ransomware",label:"A ransomware attack locking us out of everything"}, {id:"accidental",label:"Accidental deletion or hardware failure"}, {id:"compliance",label:"A compliance audit exposing gaps in our data protection"}, {id:"disaster",label:"A fire, flood, or outage wiping out our systems"} ]}, { id:"q_m365", q:"Does your organization use Microsoft 365?", hint:"Exchange, Outlook, SharePoint, Teams, or OneDrive.", opts:[ {id:"yes",label:"Yes -- we use Microsoft 365"}, {id:"no",label:"No -- we do not use Microsoft 365"}, {id:"partial",label:"Some of us do"} ]} ]; var BRA_PRODUCTS = { Veeam:{tag:"Enterprise Backup & Recovery",desc:"Your environment calls for enterprise-grade protection. Veeam gives you full coverage across VMs, physical servers, and hybrid cloud with fast, verifiable recovery.",bullets:["Instant VM and physical server recovery","Immutable off-site storage ransomware cannot touch","Automated recovery testing so you know it works","Full hybrid and multi-cloud support"]}, LiveVault:{tag:"Server Backup & Recovery",desc:"For businesses where keeping servers running is everything. LiveVault backs up your servers every 15 minutes and gets you back online fast.",bullets:["Automated backups every 15 minutes","Bare metal recovery for entire servers","Simple web portal to manage backups","24x7 U.S.-based live support"]}, JungleDisk:{tag:"Simple Cloud File Backup",desc:"Reliable protection without the complexity. JungleDisk protects your files and workstations in the cloud, simple to set up and dependable when it counts.",bullets:["File-level backup for servers and workstations","Versioned rollback before ransomware struck","Off-device encrypted cloud storage","Single dashboard to manage everything"]}, ElephantDrive:{tag:"Personal Cloud Backup",desc:"Simple, affordable protection for your personal files and devices. Keeps your data safe in the cloud and accessible from anywhere.",bullets:["Works on Windows, macOS, Linux, iOS and Android","AES-256 encryption before files leave your device","Restore any version by date and time","NAS integration for home storage"]}, Asigra:{tag:"Compliance-Grade Backup",desc:"Your compliance requirements demand more than standard backup. Built for regulated environments with immutable retention, deep security, and audit-ready reporting.",bullets:["Agentless architecture","Immutable retention and multi-layer MFA","Quarantine scanning blocks re-infection","Built for healthcare, finance, legal, government"]}, Ahsay:{tag:"Flexible Business Backup",desc:"A flexible, dependable backup platform that covers your servers, workstations, and applications without enterprise complexity.",bullets:["Covers Windows, macOS, and Linux","Military-grade AES-256 encryption","Granular file and application recovery","Flexible cloud and offsite storage"]} }; var braAnswers = {}, braStepNum = 0; function braGoTo(p) { document.querySelectorAll(".bra-step").forEach(function(x){x.classList.remove("bra-active");}); var el = document.getElementById("braStep"+p); if(el) el.classList.add("bra-active"); var sect = document.querySelector(".br-assess"); if(sect) sect.scrollIntoView({behavior:"smooth",block:"start"}); } function braRenderQ() { var q = BRA_QUESTIONS[braStepNum], total = BRA_QUESTIONS.length; var pct = Math.round((braStepNum/total)*100); document.getElementById("braStepLabel").textContent = "Question "+(braStepNum+1)+" of "+total; document.getElementById("braStepPct").textContent = pct+"%"; document.getElementById("braFill").style.width = pct+"%"; document.getElementById("braBackBtn").style.visibility = braStepNum===0?"hidden":"visible"; var card = document.getElementById("braQCard"); card.innerHTML = '