Merch & Gift Cards

Merch & Gift Cards

Rep the brand that builds the most badass panels in the industry! Browse our selection of tees, hats, koozies, and more.

Rep the brand that builds the most badass panels in the industry! Browse our selection of tees, hats, koozies, and more. Read More Read Less

Merch

Fast Shipping

Orders ship from the USA, 99% from our Charleston, SC facility.

Expert Support

Get personalized assistance before and after your purchase from our knowledgeable team.

Easy Returns

With a 60-day return policy, we stand by our products and ensure customer satisfaction.

200+ 5 Star Google Reviews

Trusted by over 40,000 satisfied customers.

const isMobile = { Android: function () { return navigator.userAgent.match(/Android/i); }, BlackBerry: function () { return navigator.userAgent.match(/BlackBerry/i); }, iOS: function () { return navigator.userAgent.match(/iPhone|iPad|iPod/i); }, Opera: function () { return navigator.userAgent.match(/Opera Mini/i); }, Windows: function () { return navigator.userAgent.match(/IEMobile/i); }, any: function () { return ( isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); } }; document.addEventListener("DOMContentLoaded", function () { const tocContent = document.querySelector(".post-content"); const tocTitles = tocContent.querySelectorAll(".category-title"); const tabsMenu = document.querySelector('.toc-menu'); const scrollToLinks = tocContent.querySelectorAll(".scroll-to"); tocTitles.forEach(function (heading, i) { // runs a function for all h2 elements inside your rich text element let str = heading.innerHTML; // adds section titles to slugs str = str.replace(/\s+/g, '-').replace(/[°&\/\\#,+()$~%.'":;*?{}]/g, "").toLowerCase(); // replaces spaces with hyphens, removes special characters and extra spaces from the headings, and applies lowercase in slugs heading.setAttribute("id", str); // gives each heading a unique id const item = document.createElement("a"); // creates an anchor element called "item" for each h2 item.innerHTML = heading.innerHTML // gives each item the text of the corresponding heading item.setAttribute("class", "toc__item"); // gives each item the correct class item.setAttribute("href", "#" + str); // gives each item the correct anchor link document.querySelector("#toc").appendChild(item); // places each item inside the Table of Contents div }); const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { document.querySelectorAll('.toc__item').forEach((link) => { let id = link.getAttribute('href').replace('#', ''); if (id === entry.target.id) { link.classList.add('toc__item_active'); setTimeout(() => { centerActiveItem(); }, "300"); } else { link.classList.remove('toc__item_active'); } }); } }); }, { threshold: 0.1 }); tocTitles.forEach(section => { observer.observe(section) }); const buttons = document.querySelectorAll(".toc__item"); const scrollIntoViewWithOffset = (selector, offset) => { /*if (isMobile.any()) { offset = offset * 1.2; } console.log(offset);*/ window.scrollTo({ behavior: 'smooth', top: document.querySelector(selector).getBoundingClientRect().top - document.body.getBoundingClientRect().top - offset, }) } //TOC menu items buttons.forEach((button) => { button.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); scrollIntoViewWithOffset(e.target.hash, 80); setTimeout(() => { centerActiveItem(); }, "300"); }); }); //Other links scrollToLinks.forEach((button) => { button.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); scrollIntoViewWithOffset(e.target.hash, 50); }); }); const centerActiveItem = () => { const activeItem = tabsMenu.querySelector(".toc__item_active"); if (activeItem) { const activeItemBounding = activeItem.getBoundingClientRect(); const viewportWidth = window.innerWidth; const offset = activeItemBounding.left + activeItemBounding.width / 2 - viewportWidth / 2; const currentScrollLeft = tabsMenu.scrollLeft; const targetScrollLeft = currentScrollLeft + offset; const duration = 300; const startTime = performance.now(); const animateScroll = (timestamp) => { const elapsed = timestamp - startTime; if (elapsed < duration) { const scrollAmount = offset * (elapsed / duration); tabsMenu.scrollLeft = currentScrollLeft + scrollAmount; requestAnimationFrame(animateScroll); } else { tabsMenu.scrollLeft = targetScrollLeft; } }; requestAnimationFrame(animateScroll); } }; // Show / hide read more const readBtn = document.querySelector('.general-info-read-btn'); const readMoreText = document.querySelector('.general-info-read-more'); const hideBtn = document.querySelector('.general-info-hide-btn'); const gradientText = document.querySelector('.general-info-gradient'); // Function to show the additional text function showAdditionalText() { readMoreText.style.display = 'inline'; hideBtn.style.display = 'inline'; gradientText.classList.remove('general-info-gradient'); readBtn.style.display = 'none'; } // Function to hide the additional text function hideAdditionalText() { readMoreText.style.display = 'none'; hideBtn.style.display = 'none'; gradientText.classList.add('general-info-gradient'); readBtn.style.display = 'inline'; } // Add click event listeners readBtn.addEventListener('click', showAdditionalText); hideBtn.addEventListener('click', hideAdditionalText); });