1 2 3 4 5<!DOCTYPE html> 6<html class="no-js" lang="en"> 7 <head> 8 <title>SolidBuild®</title> 9 <link rel="dns-prefetch preconnect" href="https://cdn11.bigcommerce.com/s-9vcrg0" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.googleapis.com/" crossorigin><link rel="dns-prefetch preconnect" href="https://fonts.gstatic.com/" crossorigin> 10 <meta name="keywords" content="garden shed kits, storage shed kits, she shed, she shed kits, garden shed, storage shed, prefab sheds, finished interior sheds, solidbuildwood, solid build wood, solidbuild shed, shed builders near me, wood sheds near me, pre built sheds near me, tiny house builders near me, custom sheds illinois, backyard sheds near me, suncast corporation, shed installers near me, shed companies near me, outdoor sheds near me , quality sheds, sheds builders near me, wood storage sheds near me, storage shed near me, tiny home builders near me, shed manufacturers near me, rent to own sheds near me, shed sale near me, tool sheds near me, log home kits near me, storage shed builders, wood shed near me, cabin sheds near me, shed builders chicago , finish shed interior, shed builder near me, tuff shed, amish sheds near me, amish built sheds illinois, solidbuild sheds , solid build inc, finished shed interior, finished shed, log home builders, custom sheds, finished interior sheds, solid build shed, log cabin builders, solid build wood sheds , storage buildings, solid build sheds, solidbuild, cabin builder, solid built sheds, green structures, finished sheds, shed building company , tiny house near me, how to finish a shed interior, finished inside, shed contractors, brighton sheds for sale, solid build, solid builder, shed construction, wood shed builders, custom shed, soild build , amish sheds, natural sheds, bristhol, sheds, 20x28 cabin, shed builder, double garden shed, cabin builders, finished sheds for sale, amish built sheds, the shed, finished storage sheds, build solid, solid built, bristol shed, sheds near me, easy to assemble shed, amish storage sheds, storage building, built sheds, 20 x 16 cabin, easy assemble sheds , easy to assemble sheds, shed, natural wood sheds, sheds in brighton sheds first, best sheds, a shed, brighton garden shed, 10x10shed, easy assembly shed, brighton shed company, backyard home, solid garden, shed., finished storage building homes, solid wood shed, amish sheds built on site, brighton shed, natural wood shed, finished storage buildings, easy to assemble storage sheds , utility shed, backyard green, easy assemble shed, green home building, log builder, backyard sheds, easy to assemble garden sheds, out door sheds, buildwood, shed brighton, log home, wood cabin, osb garden storage made in china, green shed, wood shed, log house, prefab sheds, brighton sheds, solid wood storage project, backyard garden, natural shed, 13 x 10 shed , backyard structures, shed bristol, shed in backyard, 250 sq ft shed, how to build a really solid shed, back yard shed, 150 sq ft shed, shed backyard, all wood sheds, back yard sheds, outdoor sheds, optima 8, havenloft, backyard shed house , modern wood shed, shed builders, solid shed, storage shed, finishing a shed interior, sheds for the backyard, easy to assemble storage shed, she shed, wooden garden building, solid building, modern wooden shed, shed house, wood shed natural, the shed bristol, wood shed cabin, solid, tiny home , brighton storage sheds , loft haven, 12x12 cabin interior, well made sheds, buy shed, small cabin sheds, modern pool shed, tiny house, modern wood sheds, all wood cabins, kit garden sheds, log cabin kits, yard sheds , shed home, glass sheds for sale, sheds bristol, sheds modern, customized wooden garden house, 100 sq ft shed, 20 x 16 cabin plans, sheds for backyard, modern garden cabins, tuff shed, finished interiors, shed cabin interior, shed office"><meta name="description" content="Handcrafted solid wood shed kits from FSC-certified Norway Spruce. Finished interior included. Free shipping to 48 states. From $3,995."><link rel='canonical' href='https://solidbuildwood.com/search.php' /><meta name='platform' content='bigcommerce.stencil' /> 11 12 13 14 15 <!-- BEGIN Preloading first images --> 16 17 18 19 20 21 22 23 24 25 <!-- END Preloading first images --> 26 27 <link href="https://cdn11.bigcommerce.com/s-9vcrg0/product_images/favicon.png" rel="shortcut icon"> 28 <meta name="viewport" content="width=device-width, initial-scale=1 , maximum-scale=1"> 29 30
30<script> 31 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 32 </script>
32 33 34
34<script> 35 function browserSupportsAllFeatures() { 36 return window.Promise 37 && window.fetch 38 && window.URL 39 && window.URLSearchParams 40 && window.WeakMap 41 // object-fit support 42 && ('objectFit' in document.documentElement.style); 43 } 44 45 function loadScript(src) { 46 var js = document.createElement('script'); 47 js.src = src; 48 js.onerror = function () { 49 console.error('Failed to load polyfill script ' + src); 50 }; 51 document.head.appendChild(js); 52 } 53 54 if (!browserSupportsAllFeatures()) { 55 loadScript('https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/dist/theme-bundle.polyfills.js'); 56 } 57</script>
57 58
58<script>window.consentManagerTranslations = `{"locale":"en","locales":{"consent_manager.data_collection_warning":"en","consent_manager.accept_all_cookies":"en","consent_manager.gdpr_settings":"en","consent_manager.data_collection_preferences":"en","consent_manager.manage_data_collection_preferences":"en","consent_manager.use_data_by_cookies":"en","consent_manager.data_categories_table":"en","consent_manager.allow":"en","consent_manager.accept":"en","consent_manager.deny":"en","consent_manager.dismiss":"en","consent_manager.reject_all":"en","consent_manager.category":"en","consent_manager.purpose":"en","consent_manager.functional_category":"en","consent_manager.functional_purpose":"en","consent_manager.analytics_category":"en","consent_manager.analytics_purpose":"en","consent_manager.targeting_category":"en","consent_manager.advertising_category":"en","consent_manager.advertising_purpose":"en","consent_manager.essential_category":"en","consent_manager.esential_purpose":"en","consent_manager.yes":"en","consent_manager.no":"en","consent_manager.not_available":"en","consent_manager.cancel":"en","consent_manager.save":"en","consent_manager.back_to_preferences":"en","consent_manager.close_without_changes":"en","consent_manager.unsaved_changes":"en","consent_manager.by_using":"en","consent_manager.agree_on_data_collection":"en","consent_manager.change_preferences":"en","consent_manager.cancel_dialog_title":"en","consent_manager.privacy_policy":"en","consent_manager.allow_category_tracking":"en","consent_manager.disallow_category_tracking":"en"},"translations":{"consent_manager.data_collection_warning":"We use cookies (and other similar technologies) to collect data to improve your shopping experience.","consent_manager.accept_all_cookies":"Accept All Cookies","consent_manager.gdpr_settings":"Settings","consent_manager.data_collection_preferences":"Website Data Collection Preferences","consent_manager.manage_data_collection_preferences":"Manage Website Data Collection Preferences","consent_manager.use_data_by_cookies":" uses data collected by cookies and JavaScript libraries to improve your shopping experience.","consent_manager.data_categories_table":"The table below outlines how we use this data by category. To opt out of a category of data collection, select 'No' and save your preferences.","consent_manager.allow":"Allow","consent_manager.accept":"Accept","consent_manager.deny":"Deny","consent_manager.dismiss":"Dismiss","consent_manager.reject_all":"Reject all","consent_manager.category":"Category","consent_manager.purpose":"Purpose","consent_manager.functional_category":"Functional","consent_manager.functional_purpose":"Enables enhanced functionality, such as videos and live chat. If you do not allow these, then some or all of these functions may not work properly.","consent_manager.analytics_category":"Analytics","consent_manager.analytics_purpose":"Provide statistical information on site usage, e.g., web analytics so we can improve this website over time.","consent_manager.targeting_category":"Targeting","consent_manager.advertising_category":"Advertising","consent_manager.advertising_purpose":"Used to create profiles or personalize content to enhance your shopping experience.","consent_manager.essential_category":"Essential","consent_manager.esential_purpose":"Essential for the site and any requested services to work, but do not perform any additional or secondary function.","consent_manager.yes":"Yes","consent_manager.no":"No","consent_manager.not_available":"N/A","consent_manager.cancel":"Cancel","consent_manager.save":"Save","consent_manager.back_to_preferences":"Back to Preferences","consent_manager.close_without_changes":"You have unsaved changes to your data collection preferences. Are you sure you want to close without saving?","consent_manager.unsaved_changes":"You have unsaved changes","consent_manager.by_using":"By using our website, you're agreeing to our","consent_manager.agree_on_data_collection":"By using our website, you're agreeing to the collection of data as described in our ","consent_manager.change_preferences":"You can change your preferences at any time","consent_manager.cancel_dialog_title":"Are you sure you want to cancel?","consent_manager.privacy_policy":"Privacy Policy","consent_manager.allow_category_tracking":"Allow [CATEGORY_NAME] tracking","consent_manager.disallow_category_tracking":"Disallow [CATEGORY_NAME] tracking"}}`;</script>
58 59 60
60<script> 61 window.lazySizesConfig = window.lazySizesConfig || {}; 62 window.lazySizesConfig.loadMode = 1; 63 </script>
63 64
64<script async src="https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/dist/theme-bundle.head_async.js"></script>
64 65 66 <link href="https://fonts.googleapis.com/css?family=Roboto+Slab:700%7CRoboto:700,500,400%7CPoppins:400,700&display=swap" rel="stylesheet"> 67 68
68<script async src="https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/dist/theme-bundle.font.js"></script>
68 69 70 71 <link data-stencil-stylesheet href="https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/css/theme-6bbbcde0-9dd7-013f-8457-063022e2374f.css" rel="stylesheet"> 72 73 <!-- Start Tracking Code for analytics_facebook --> 74
75<script> 76!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js'); 77 78fbq('set', 'autoConfig', 'false', '173894989827938'); 79fbq('dataProcessingOptions', ['LDU'], 0, 0); 80fbq('init', '173894989827938', {"external_id":"360e81ac-dd51-44a0-ae6e-6d0863bfdfa9"}); 81fbq('set', 'agent', 'bigcommerce', '173894989827938'); 82 83function trackEvents() { 84 var pathName = window.location.pathname; 85 86 87 88 // Search events start -- only fire if the shopper lands on the /search.php page 89 if (pathName.indexOf('/search.php') === 0 && getUrlParameter('search_query')) { 90 fbq('trackSingle', '173894989827938', 'Search', { 91 content_type: 'product_group', 92 content_ids: [], 93 search_string: getUrlParameter('search_query') 94 }); 95 } 96 // Search events end 97 98 // Wishlist events start -- only fire if the shopper attempts to add an item to their wishlist 99 if (pathName.indexOf('/wishlist.php') === 0 && getUrlParameter('added_product_id')) { 100 fbq('trackSingle', '173894989827938', 'AddToWishlist', { 101 content_type: 'product_group', 102 content_ids: [] 103 }); 104 } 105 // Wishlist events end 106 107 // Lead events start -- only fire if the shopper subscribes to newsletter 108 if (pathName.indexOf('/subscribe.php') === 0 && getUrlParameter('result') === 'success') { 109 fbq('trackSingle', '173894989827938', 'Lead', {}); 110 } 111 // Lead events end 112 113 // Registration events start -- only fire if the shopper registers an account 114 if (pathName.indexOf('/login.php') === 0 && getUrlParameter('action') === 'account_created') { 115 fbq('trackSingle', '173894989827938', 'CompleteRegistration', {}, ""); 116 } 117 // Registration events end 118 119 120 121 function getUrlParameter(name) { 122 var cleanName = name.replace(/[\[]/, '\[').replace(/[\]]/, '\]'); 123 var regex = new RegExp('[\?&]' + cleanName + '=([^&#]*)'); 124 var results = regex.exec(window.location.search); 125 return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); 126 } 127} 128 129if (window.addEventListener) { 130 window.addEventListener("load", trackEvents, false) 131} 132</script>
132 133<noscript><img height="1" width="1" style="display:none" alt="null" src="https://www.facebook.com/tr?id=173894989827938&ev=PageView&noscript=1&a=plbigcommerce1.2&eid="/></noscript> 134 135<!-- End Tracking Code for analytics_facebook --> 136 137<!-- Start Tracking Code for analytics_googleanalytics4 --> 138
139<script data-cfasync="false" src="https://cdn11.bigcommerce.com/shared/js/google_analytics4_bodl_subscribers-358423becf5d870b8b603a81de597c10f6bc7699.js" integrity="sha256-gtOfJ3Avc1pEE/hx6SKj/96cca7JvfqllWA9FTQJyfI=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 139
139
140<script data-cfasync="false"> 141 (function () { 142 window.dataLayer = window.dataLayer || []; 143 144 function gtag(){ 145 dataLayer.push(arguments); 146 } 147 148 function initGA4(event) { 149 function setupGtag() { 150 function configureGtag() { 151 gtag('js', new Date()); 152 gtag('set', 'developer_id.dMjk3Nj', true); 153 gtag('config', 'G-1G0EB5XWP6'); 154 } 155 156 var script = document.createElement('script'); 157 158 script.src = 'https://www.googletagmanager.com/gtag/js?id=G-1G0EB5XWP6'; 159 script.async = true; 160 script.onload = configureGtag; 161 162 document.head.appendChild(script); 163 } 164 165 setupGtag(); 166 167 if (typeof subscribeOnBodlEvents === 'function') { 168 subscribeOnBodlEvents('G-1G0EB5XWP6', false); 169 } 170 171 window.removeEventListener(event.type, initGA4); 172 } 173 174 175 176 var eventName = document.readyState === 'complete' ? 'consentScriptsLoaded' : 'DOMContentLoaded'; 177 window.addEventListener(eventName, initGA4, false); 178 })() 179</script>
179 180 181<!-- End Tracking Code for analytics_googleanalytics4 --> 182 183<!-- Start Tracking Code for analytics_siteverification --> 184 185<meta name="google-site-verification" content="xfBNCuw-V_tuIRDDGSZ4wCoy7QQPkeAwQyQ5L0ztSeM" /> 186 187<!-- End Tracking Code for analytics_siteverification --> 188 189
190<script type="text/javascript" src="https://checkout-sdk.bigcommerce.com/v1/loader.js" defer ></script>
190 191<!-- Start of HubSpot Embed Code --> 192
192<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/5664453.js"></script>
192 193<!-- End of HubSpot Embed Code -->
194<script type="text/javascript"> 195var BCData = {}; 196</script>
vendor: 1 bytes, line 196
196
197<script src='https://ecommplugins-trustboxsettings.trustpilot.com/stores/9vcrg0.js?settings=1730757270798' async ></script>
197<script src='https://widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js' async ></script>
197 198
198<script type="text/javascript"> 199 const trustpilot_settings = { 200 page: "search" === "default" ? "landing" : "search", 201 sku: "", 202 name: "", 203 key: "Qifu2O9hexlnPWDT", 204 product_id: "", // Needed for TrustBoxPreview 205 }; 206 const createTrustBoxScript = function() { 207 const trustBoxScript = document.createElement('script'); 208 trustBoxScript.async = true; 209 trustBoxScript.src = "https://ecommplugins-scripts.trustpilot.com/v2.1/js/header_bigcommerce.min.js"; 210 document.head.appendChild(trustBoxScript); 211 }; 212 if (BCData.product_attributes && !BCData.product_attributes.base && "sku" !== 'id') { 213 addEventListener('DOMContentLoaded', () => { 214 const endpoint = "/remote/v1/product-attributes/"; 215 try { 216 stencilUtils.api.productAttributes.makeRequest(endpoint, "GET", {}, {}, function(err, res) { 217 trustpilot_settings.sku = res.data["sku"]; 218 createTrustBoxScript(); 219 }) 220 } catch { 221 fetch(endpoint).then(function(res) { 222 res.json().then(function(jsonRes) { 223 trustpilot_settings.sku = jsonRes.data["sku"]; 224 createTrustBoxScript(); 225 }); 226 }); 227 } 228 }); 229 } else { 230 createTrustBoxScript(); 231 } 232 </script>
232 233
233<script 234 async 235 src="https://na-library.klarnaservices.com/lib.js" 236 data-client-id="b7705a76-3193-5e24-9dbe-8cbf14bb0234" 237></script>
237<script> 238 gtag('event', 'page_view', { 239 'send_to': 'AW-1030350139', 240 'value': 'price', 241 'items': [{ 242 'id': 'sku', 243 'google_business_vertical': 'retail' 244 }] 245 }); 246</script>
246<script type="text/javascript"> 247 248</script>
248<!-- TrustBox script -->
249<script type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script>
249 250<!-- End TrustBox script -->
250<script type="text/javascript"> 251 (function(c,l,a,r,i,t,y){ 252 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 253 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 254 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 255 })(window, document, "clarity", "script", "g9nggce6x7"); 256</script>
256<!-- TrustBox script -->
257<script type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script>
257 258<!-- End TrustBox script -->
258<script src="https://analytics.ahrefs.com/analytics.js" data-key="RotXCkjllzGtOhi+c9XfDA" async></script>
vendor: 63 bytes, line 258
258<script async src="https://www.googletagmanager.com/gtag/js?id=
258AW-1030350139
vendor: 12 bytes, line 258
258"></script>
259<script> 260 window.addEventListener("load", (event) => { 261
vendor: 151 bytes, lines 261-264
261window.dataLayer = window.dataLayer || []; 262 function gtag(){dataLayer.push(arguments);} 263 gtag('js', new Date()); 264 gtag('config', '
264AW-1030350139
vendor: 8 bytes, lines 264-265
264'); 265
265}); 266</script>
266<script nonce=""> 267if(typeof fbq === 'function') { 268 fbq('trackSingle', '173894989827938', 'PageView', {}, {"eventID":"bccf17fd-4e83-4c69-9763-1367eaf10926"}); 269} else if (typeof window.addEventListener === 'function') { 270 window.addEventListener("load", function() { fbq('trackSingle', '173894989827938', 'PageView', {}, {"eventID":"bccf17fd-4e83-4c69-9763-1367eaf10926"}); }, false) 271} 272</script>
272 273
273<script data-cfasync="false" src="https://microapps.bigcommerce.com/bodl-events/1.9.4/index.js" integrity="sha256-Y0tDj1qsyiKBRibKllwV0ZJ1aFlGYaHHGl/oUFoXJ7Y=" nonce="" crossorigin="anonymous"></script>
273 274
274<script data-cfasync="false" nonce=""> 275 276 (function() { 277 function decodeBase64(base64) { 278 const text = atob(base64); 279 const length = text.length; 280 const bytes = new Uint8Array(length); 281 for (let i = 0; i < length; i++) { 282 bytes[i] = text.charCodeAt(i); 283 } 284 const decoder = new TextDecoder(); 285 return decoder.decode(bytes); 286 } 287 window.bodl = JSON.parse(decodeBase64("eyJzZXNzaW9uIjp7ImlkIjoiZDE5Njk0MGQtNjIyYi00MjVmLTg4ZGItZDE0MjQ1NTcwMDQ5IiwiZmlyc3RfdG91Y2hfdGltZXN0YW1wIjoiMjAyNi0wOS0yOVQwMjo0NToyMCIsImZpcnN0X3RvdWNoX3JlZmVycmFsX3VybCI6IiIsImZpcnN0X3RvdWNoX3JlcXVlc3RfdXJsIjoiaHR0cHM6Ly9zb2xpZGJ1aWxkd29vZC5jb20vc2VhcmNoLnBocCJ9LCJzaG9wcGVyIjp7InZpc2l0b3JfaWQiOiIiLCJjdXN0b21lcl9pZCI6bnVsbCwiZW1haWwiOm51bGwsImZpcnN0X25hbWUiOm51bGwsImxhc3RfbmFtZSI6bnVsbH0sImRhdGFfY29uc2VudCI6eyJmdW5jdGlvbmFsIjp0cnVlLCJhbmFseXRpY3MiOnRydWUsImFkdmVydGlzaW5nIjp0cnVlfSwiZXZlbnRzIjpbeyJib2RsX3YxX2tleXdvcmRfc2VhcmNoIjp7ImV2ZW50X2lkIjoiNjc1Mzk0Y2YtMjQwYi00ZGYzLTk0YmUtYjBjOWM4Mzc1NTU4IiwiY2hhbm5lbF9pZCI6MSwic2VhcmNoX2tleXdvcmQiOiIifX1dfQ==")); 288 })() 289 290 </script>
290 291
292<script nonce=""> 293(function () { 294 var xmlHttp = new XMLHttpRequest(); 295 296 xmlHttp.open('POST', 'https://bes.gcp.data.bigcommerce.com/nobot'); 297 xmlHttp.setRequestHeader('Content-Type', 'application/json'); 298 xmlHttp.send('{"store_id":"632533","timezone_offset":"-5.0","timestamp":"2026-09-29T02:45:20.36618400Z","visit_id":"70bf3ac2-31bd-4728-92ed-dcfd89ec027d","channel_id":1}'); 299})(); 300</script>
300 301 302 </head> 303 <body class="search-page cosmetics gridview"> 304 <svg data-src="https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/img/icon-sprite.svg" class="icons-svg-sprite"></svg> 305 306 307 308 309<div class="announce">Free shipping to the lower 48 states — no promo code needed</div> 310 311<header class="site-header"> 312 <div class="site-header__inner"> 313 <div class="brand"> 314 <a href="https://solidbuildwood.com/" class="header-logo__link" data-header-logo-link> 315 <div class="header-logo-image-container"> 316 <img class="header-logo-image" 317 src="https://cdn11.bigcommerce.com/s-9vcrg0/images/stencil/145x100/solid-build-logo-web_1610481696__70483.original.png" 318 srcset="https://cdn11.bigcommerce.com/s-9vcrg0/images/stencil/250x100/solid-build-logo-web_1610481696__70483.original.png" 319 alt="SolidBuild®" 320 title="SolidBuild®"> 321 </div> 322</a> 323 </div> 324 325 <nav class="header-nav" aria-label="Primary"> 326 <div class="nav-item"> 327 <a href="/all-shed-kits/" aria-haspopup="true">Shop Sheds <span class="main-nav__chev">▼</span></a> 328 <div class="nav-panel nav-panel--mega" role="menu" aria-label="Shop Sheds"> 329 <div class="mega__col"> 330 <span class="mega__head">By Use</span> 331 <a href="/wood-she-shed-kit/">She Shed</a> 332 <a href="/home-office-shed/">Home Office Shed</a> 333 <a href="/art-studio-shed/">Art Studio Shed</a> 334 <a href="/wooden-playhouse-shed/">Playhouse Shed</a> 335 <a href="/guest-bedroom-shed">Guest Bedroom Shed</a> 336 <a href="/pool-house-shed/">Pool House</a> 337 <a href="/storage-shed-kits/">Storage Shed</a> 338 <a href="/man-cave-workshop-studio-shed/">Man Cave & Workshop Shed</a> 339 </div> 340 <div class="mega__col"> 341 <a class="mega__head" href="/choose-your-shed-design/">By Style</a> 342 <a href="/cottage-sheds/">Cottage Sheds</a> 343 <a href="/classic-sheds/">Classic Sheds</a> 344 <a href="/modern-sheds/">Modern Sheds</a> 345 <a href="/all-shed-kits/">Browse All Sheds</a> 346 <a href="/shed-accessories/">Accessories</a> 347 </div> 348 <div class="mega__col"> 349 <a class="mega__head" href="/all-shed-sizes/">By Size</a> 350 <a href="/shed-area-50-sq-ft-100-sq-ft/">50–100 sq ft</a> 351 <a href="/shed-area-101-sq-ft-120-sq-ft/">101–120 sq ft</a> 352 <a href="/shed-area-121-sq-ft-220-sq-ft/">121–220 sq ft</a> 353 <a href="/all-shed-sizes/">All Sizes</a> 354 </div> 355 </div> 356 </div> 357 358 <a href="/sheds-on-sale/" class="header-nav__sale">On Sale</a> 359 360 <div class="nav-item"> 361 <a href="/shed-kit-tips-videos/" aria-haspopup="true">Resources <span class="main-nav__chev">▼</span></a> 362 <div class="nav-panel" role="menu" aria-label="Resources"> 363 <a href="/content/shed-studio/index.html?src=header">Shed Studio</a> 364 <a href="/shed-kit-faq/">Detailed FAQ</a> 365 <a href="/how-to-build-a-shed-foundation/">Foundation Guide</a> 366 <a href="/content/tools/foundation-calculator.html">Foundation Calculator <span class="nav-beta">Beta</span></a> 367 <a href="/garden-shed-kit-assembly-video-library/">Assembly Video Library</a> 368 <a href="/can-you-insulate-your-garden-shed-kit/">Shed Insulation Guide</a> 369 <a href="/how-to-run-electrical-installation-in-your-wooden-shed/">Electrical Installation</a> 370 <a href="/roofing-options-for-gabled-flat-low-slope-sheds/">Roofing Options</a> 371 <a href="/how-to-protect-your-shed-from-termites/">Termite Protection</a> 372 <a href="/paint-and-stain-guide/">
372Paint and Stain Guide</a> 373 <a href="/shed-look-catalog-stain-paint-roofing-ideas/">Shed Look Ideas</a> 374 <a href="/free-shed-shipping/">Shipping & Delivery</a> 375 <a href="/solidbuild-shed-project-cost-calculator/">Ballpark Whole-Project Estimate</a> 376 <a href="/schedule-an-in-depth-phone-consultation/">Book an Expert Consult</a> 377 </div> 378 </div> 379 380 <div class="nav-item"> 381 <a href="/shed-kit-gallery/" aria-haspopup="true">Gallery & Reviews <span class="main-nav__chev">▼</span></a> 382 <div class="nav-panel" role="menu" aria-label="Gallery and Reviews"> 383 <a href="/shed-kit-gallery/">Photo Gallery</a> 384 <a href="/customer-testimonials/">Customer Video Stories</a> 385 <a href="/customer-testimonials/">Written Reviews</a> 386 </div> 387 </div> 388 389 <a href="/contact-us/">Contact</a> 390 </nav> 391 392 <div class="header-icons"> 393 <a href="https://solidbuildwood.com/search.php" class="sb-search-toggle" id="sbSearchToggle" aria-label="Search"> 394 <svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.5" y2="16.5"/></svg> 395 </a> 396 <a href="https://solidbuildwood.com/account.php" aria-label="Account"> 397 <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> 398 </a> 399 <span id="compare-link" class="header-icons__compare" style="display:none"> 400 <a id="compareurl" href="https://solidbuildwood.com/compare" title="Compare">Compare <span class="countPill countPill--positive" id="compare-item"></span></a> 401 </span> 402 <span hidden><span id="compare-link-nav" style="display:none"><a id="compareurl-nav" href="https://solidbuildwood.com/compare">Compare <span id="compare-item-nav"></span></a></span></span> 403 <a href="https://solidbuildwood.com/cart.php" class="header-icons__cart" aria-label="Cart"> 404 <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4zM3 6h18M16 10a4 4 0 0 1-8 0"/></svg> 405 <span class="countPill cart-quantity"></span> 406 </a> 407 <button type="button" class="nav-burger" id="sbBurger" aria-controls="sbDrawer" aria-expanded="false" aria-label="Open menu"> 408 <svg viewBox="0 0 24 24" aria-hidden="true"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg> 409 <span>Menu</span> 410 </button> 411 </div> 412 </div> 413 <div class="sb-search-panel" id="sbSearchPanel" hidden> 414 <div class="sb-search-panel__inner"> 415 <form class="sb-search" role="search" action="https://solidbuildwood.com/search.php" method="get"> 416 <label class="sb-search__label" for="sbSearchInput">Search the store</label> 417 <input id="sbSearchInput" type="search" name="search_query" placeholder="Search sheds and guides" autocomplete="off"> 418 <button type="submit" class="btn btn--primary sb-search__submit">Search</button> 419 </form> 420 </div> 421 </div> 422</header> 423 424<div class="sb-drawer" id="sbDrawer" hidden> 425 <div class="sb-drawer__backdrop"></div> 426 <div class="sb-drawer__panel" role="dialog" aria-modal="true" aria-label="Menu"> 427 <div class="sb-drawer__head"> 428 <span class="sb-drawer__title">Menu</span> 429 <button type="button" class="sb-drawer__close" aria-label="Close menu"> 430 <svg viewBox="0 0 24 24" aria-hidden="true"><line x1="5" y1="5" x2="19" y2="19"/><line x1="19" y1="5" x2="5" y2="19"/></svg> 431 </button> 432 </div> 433 <form class="sb-search sb-drawer__search" role="search" action="https://solidbuildwood.com/search.php" method="get"> 434 <label class="sb-search__label" for="sbDrawerSearchInput">Search the store</label> 435 <input id="sbDrawerSearchInput" type="search" name="search_query" placeholder="Search sheds and guides" autocomplete="off"> 436 <button type="submit" class="btn btn--primary sb-search__submit">Search</button> 437 </form> 438 <nav class="sb-drawer__nav" aria-label="Mobile"></nav> 439 </div> 440</div> 441 442<div class="util-strip"> 443 <div class="util-strip__inner"> 444 <div class="util-strip__tp util-strip__tp--wide trustpilot-widget" data-locale="en-US" data-template-id="5419b6ffb0d04a076446a9af" data-businessunit-id="5e54b98565fc2a000124808d" data-style-height="24px" data-style-width="440px" data-theme="light" data-style-alignment="left"> 445 <a href="https://www.trustpilot.com/review/solidbuildwood.com" target="_blank" rel="noopener">Trustpilot</a> 446 </div> 447 <div class="util-strip__tp util-strip__tp--narrow trustpilot-widget" data-locale="en-US" data-template-id="5419b6ffb0d04a076446a9af" data-businessunit-id="5e54b98565fc2a000124808d" data-style-height="52px" data-style-width="100%" data-theme="light" data-style-alignment="center"> 448 <a href="https://www.trustpilot.com/review/solidbuildwood.com" target="_blank" rel="noopener">Trustpilot</a> 449 </div> 450 <div class="util-strip__right"> 451 <a href="tel:+18005902508" aria-label="Call or text us at 1-800-590-2508"> 452 <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg> 453 1-800-590-2508 454 </a> 455 <a href="/contact-us/" class="util-chat" aria-label="Open live chat" 456 onclick="var h = window.HubSpotConversations, ok = false; try { ok = !!(h && h.widget && h.widget.status().loaded); } catch (e) {} if (ok) { h.widget.open(); return false; }"> 457 <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
458 <span>Live chat</span> 459 </a> 460 </div> 461 </div> 462</div> 463<div data-content-region="header_bottom--global"></div> 464<div data-content-region="header_bottom"></div> 465 <main class="body search-page" id="main-content" role="main" data-currency-code="USD"> 466 467 <section class="header-section"> 468 <div class="header-content-box"> 469 <div class="container"> 470 <nav aria-label="Breadcrumb"> 471 <ol class="breadcrumbs"> 472 <li class="breadcrumb "> 473 <a class="breadcrumb-label" 474 href="https://solidbuildwood.com/" 475 476 > 477 <span>Home</span> 478 </a> 479 </li> 480 <li class="breadcrumb is-active"> 481 <a class="breadcrumb-label" 482 href="/search.php" 483 aria-current="page" 484 > 485 <span>Search</span> 486 </a> 487 </li> 488 </ol> 489</nav> 490
491<script type="application/ld+json"> 492{ 493 "@context": "https://schema.org", 494 "@type": "BreadcrumbList", 495 "itemListElement": 496 [ 497 { 498 "@type": "ListItem", 499 "position": 1, 500 "item": { 501 "@id": "https:\u002f\u002fsolidbuildwood.com\u002f", 502 "name": "Home" 503 } 504 }, 505 { 506 "@type": "ListItem", 507 "position": 2, 508 "item": { 509 "@id": "\u002fsearch.php", 510 "name": "Search" 511 } 512 } 513 ] 514} 515</script>
515 516 <section class="nav"> 517 <nav class="navBar navBar--sub search-nav"> 518 <span id="search-tabs-widget-description" class="aria-description--hidden"> 519 Use left and right arrows to navigate between tabs. 520 </span> 521 <ul role="tablist" class="navBar-section account-navigation" data-search-page-tabs> 522 <li role="presentation" class="navBar-item"> 523 <a aria-describedby="search-tabs-widget-description" role="tab" aria-controls="product-listing-container" id="search-results-product-count" class="navBar-action" href="/search.php?section=product" data-product-results-toggle> 524 <span data-url="/search.php?section=product" data-count="0"> 525 Products (0) 526</span> 527 </a> 528 </li> 529 <li role="presentation" class="navBar-item"> 530 <a aria-describedby="search-tabs-widget-description" role="tab" aria-controls="search-results-content" id="search-results-content-count" class="navBar-action" href="/search.php?section=content" data-content-results-toggle> 531 <span data-url="/search.php?section=content" data-count="0"> 532 News & Information (0) 533</span> 534 </a> 535 </li> 536 <li class="navBar-item navBar-item--separate"> 537 <a class="navBar-action toggleLink" data-collapsible="advanced-search-content" href="#" aria-controls="advanced-search-content" aria-expanded="false"> 538 <span class="toggleLink-text toggleLink-text--on"> 539 Hide Search Form 540 </span> 541 <span class="toggleLink-text toggleLink-text--off"> 542 Show Search Form 543 </span> 544 </a> 545 </li> 546 </ul> 547 </nav> 548 </section> 549 </div> 550 </div> 551 </section> 552 553 554 <div class="container"> 555 <link data-stencil-stylesheet href="https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/scss/vendor/jstree/style.css" rel="stylesheet"> 556 557<section class="page"> 558 <div class="page"> 559 <div class="page-content page-content--centered"> 560 <form class="advancedSearch-form toggle-content" action="" data-advanced-search-form id="advanced-search-content" aria-hidden="true"> 561 <input type="hidden" name="mode" value="1"> 562 <h5 class="advancedSearch-title">Advanced Search</h5> 563 <div class="form-row"> 564 <fieldset class="form-fieldset form-column"> 565 <div class="form-field"> 566 <label class="form-label" for="search_query_adv"> 567 Search Keyword 568 <small>*</small> 569 </label> 570 <input type="text" class="form-input" name="search_query_adv" data-error-message="Search field cannot be empty." id="search_query_adv" value=""> 571 </div> 572 573 <div class="form-field"> 574 <label class="form-label" for="search-form-brand"> 575 Brands 576 </label> 577 <select class="form-select" name="brand" id="search-form-brand"> 578 <option value="">No Preference</option> 579 <option value="36" >MRCOOL®ï¸</option> 580 <option value="35" >SolidBuild®</option> 581 </select> 582 </div> 583 </fieldset> 584 <fieldset class="form-fieldset form-column"> 585 <div class="form-field"> 586 <label class="form-label"> 587 Categories 588 </label> 589 <div class="form-field-group" data-search-category-tree></div> 590 </div> 591 <div class="form-field"> 592 <input type="checkbox" class="form-checkbox" name="searchsubs" value="ON" id="search-form-searchsubs" checked> 593 <label class="form-label" for="search-form-searchsubs">Automatically search sub categories</label> 594 </div> 595 </fieldset> 596 </div> 597 <hr> 598 <div class="form-row"> 599 <div class="form-field search-price-range"> 600 <h5 class="advancedSearch-title">Search By Price</h5> 601 <p class="form-label" for="search-form-price_from"> 602 Price Range 603 </p> 604 <label>
605 <span class="is-srOnly">Price Range</span> 606 <span>From</span><input type="number" step="any" class="form-input" name="price_from" id="search-form-price_from" value=""> 607 </label> 608 <label> 609 <span class="is-srOnly">Price Range</span> 610 <span>to</span><input type="number" step="any" class="form-input" name="price_to" id="search-form-price_to" value=""> 611 </label> 612 </div> 613 </div> 614 <hr> 615 <h5 class="advancedSearch-title">Search By Setting</h5> 616 <div class="form-row form-row--half"> 617 <div class="form-field"> 618 <label class="form-label" for="search-form-featured"> 619 Featured Products 620 </label> 621 <select class="form-select" name="featured" id="search-form-featured"> 622 <option value="">No Preference</option> 623 <option value="1" >Only Featured Products</option> 624 <option value="2" >Only Non-Featured Products</option> 625 </select> 626 </div> 627 <div class="form-field"> 628 <label class="form-label" for="search-form-shipping"> 629 Free Shipping 630 </label> 631 <select class="form-select" name="shipping" id="search-form-shipping"> 632 <option value="">No Preference</option> 633 <option value="1" >Only Free Shipping</option> 634 <option value="2" >Only Paid Shipping</option> 635 </select> 636 </div> 637 </div> 638 <div class="form-actions"> 639 <input 640 id="advanced-search-submit" 641 class="button button--primary" 642 type="submit" 643 value="Search"> 644 </div> 645 </form> 646 </div> 647</div> 648 649 <div class="page-content"> 650 <div class="product-listing-filter-section mb-show"> 651 <div class="product-listing-filter-box"> 652 <div class="product-view-button"> 653 <a href="javascript:void(0)" title="Grid View" class="product-view-btn grid-view grid-icon show " data-tab="grid"> 654 <i class="icon" aria-hidden="true"> 655 656 <svg><use xlink:href="#icon-grid"></use></svg> 657 </i> 658 </a> 659 <a href="javascript:void(0)" title="List View" class="product-view-btn list-view list-icon show " data-tab="list"> 660 <i class="icon" aria-hidden="true"> 661 <svg><use xlink:href="#icon-list"></use></svg> 662 </i> 663 </a> 664 </div> 665 <div class="product-listing-show-products"> 666 <form class="actionBar" method="get" data-sort-by="product"> 667 <fieldset class="form-fieldset actionBar-section"> 668 <div class="form-field"> 669 <label class="form-label" for="sort">Show</label> 670 <select class="form-select form-select--small " name="limit" id="product-sort" role="listbox"> 671 <option value="12">12 Products per page</opttion> 672 <option value="12">12 Products per page</option> 673 <option value="24">24 Products per page</option> 674 <option value="56">56 Products per page</option> 675 <option value="100">100 Products per page</option> 676 </select> 677 </div> 678 </fieldset> 679 </form> 680 </div> 681 <div class="product-listing-sort-by"> 682 <form class="actionBar" method="get" data-sort-by="product"> 683 <fieldset class="form-fieldset actionBar-section"> 684 <div class="form-field"> 685 <label class="form-label">Sort By</label> 686 <select class="form-select form-select--small " name="sort" role="listbox"> 687 <option value="featured" >Featured Items</option> 688 <option value="newest" >Newest Items</option> 689 <option value="bestselling" >Best Selling</option> 690 <option value="alphaasc" >A to Z</option> 691 <option value="alphadesc" >Z to A</option> 692 <option value="avgcustomerreview" >By Review</option> 693 <option value="priceasc" >Price: Ascending</option> 694 <option value="pricedesc" >Price: Descending</option> 695 </select> 696 </div> 697</fieldset> 698</form> 699 </div> 700</div> 701 </div> 702 703 <div role="tabpanel" id="search-results-content" aria-labelledby="search-results-content-count" class="u-hidden"> 704 </div> 705 706 <div role="tabpanel" id="product-listing-container" aria-labelledby="search-results-product-count" > 707 708 709<div class="product-view-mode"> 710 711 <form action="https://solidbuildwood.com/compare" method='POST' data-product-compare> 712 713 <ul class="productGrid productGridCategory"> 714</ul> 715 716 717 <ul class="productList"> 718</ul> 719 </form> 720</div> 721<nav class="pagination" aria-label="pagination"> 722 <ul class="pagination-list"> 723 724 </ul> 725</nav> 726 </div> 727 728 <div data-content-region="search_below_content"></div> 729 <!-- Bottom Banner Start--> 730 <!-- Bottom Banner End--> 731 </div> 732</section> 733 734 735 </div> 736 737 <div id="modal" class="modal" data-reveal data-options='{"animation_speed": 0}' data-prevent-quick-search-close> 738 <button class="modal-close" 739 type="button" 740 title="Close" 741 742> 743 <span class="aria-description--hidden">Close</span> 744 <span aria-hidden="true">×</span> 745</button> 746 <div class="modal-content"></div> 747 <div class="loadingOverlay"></div> 748</div> 749 <div id="alert-modal" class="modal modal--alert modal--small" data-reveal data-options='{"animation_speed": 0}' data-prevent-quick-search-close> 750 <div class="alert-icon error-icon">
751 <span class="icon-content"> 752 <span class="line line-left"></span> 753 <span class="line line-right"></span> 754 </span> 755 </div> 756 757 <div class="alert-icon warning-icon"> 758 <div class="icon-content">!</div> 759 </div> 760 761 <div class="modal-content"></div> 762 763 <div class="button-container"> 764 <button type="button" class="confirm button" data-reveal-close data-options='{"animation_speed": 0}'>OK</button> 765 <button type="button" class="cancel button" data-reveal-close data-options='{"animation_speed": 0}'>Cancel</button> 766 </div> 767</div> 768</main> 769 <div data-content-region="footer_above_footer--global"></div> 770<footer class="site-footer" data-build="v7-2026-09-28c"> 771 <div class="container"> 772 <div class="foot__top"> 773 <div class="foot__brand"> 774 <a href="https://solidbuildwood.com/" class="brand-text">SolidBuild <sup>®</sup></a> 775 <p>Solid wood sheds, cabins, and backyard buildings. Designed in Lithuania, built for the long haul. Serving the US since 2009.</p> 776 <div class="foot__tp trustpilot-widget" data-locale="en-US" data-template-id="5419b637fa0340045cd0c936" data-businessunit-id="5e54b98565fc2a000124808d" data-style-height="24px" data-style-width="100%" data-theme="dark" data-style-alignment="left"> 777 <a href="https://www.trustpilot.com/review/solidbuildwood.com" target="_blank" rel="noopener">Trustpilot</a> 778 </div> 779 </div> 780 <div class="foot__col"> 781 <h4>Shop</h4> 782 <ul> 783 <li><a href="/cottage-sheds/">Cottage sheds</a></li> 784 <li><a href="/classic-sheds/">Classic sheds</a></li> 785 <li><a href="/modern-sheds/">Modern sheds</a></li> 786 <li><a href="/sheds-on-sale/">On sale</a></li> 787 <li><a href="/shed-accessories/">Accessories</a></li> 788 </ul> 789 </div> 790 <div class="foot__col"> 791 <h4>Why us</h4> 792 <ul> 793 <li><a href="/wooden-finished-interior-shed-kits/">Finished interior</a></li> 794 <li><a href="/easy-to-assemble-shed-kits/">Easy to assemble</a></li> 795 <li><a href="/free-shed-shipping/">Free shipping</a></li> 796 <li><a href="/what-are-the-benefits-of-wood/">Solid wood, no MDF</a></li> 797 </ul> 798 </div> 799 <div class="foot__col"> 800 <h4>Help</h4> 801 <ul> 802 <li><a href="/contact-us/">Contact us</a></li> 803 <li><a href="/roofing-options-for-gabled-flat-low-slope-sheds/">Roofing options</a></li> 804 <li><a href="/paint-and-stain-guide/">
804Paint and Stain Guide</a></li> 805 <li><a href="/free-shed-shipping/">Shipping & delivery</a></li> 806 <li><a href="/solid-build-refund-policy/">Returns & refunds</a></li> 807 <li><a href="/shed-kit-faq/">FAQ</a></li> 808 </ul> 809 </div> 810 <div class="foot__col"> 811 <h4>Stories</h4> 812 <ul> 813 <li><a href="/customer-testimonials/">Customer reviews</a></li> 814 <li><a href="/shed-kit-gallery/">Gallery</a></li> 815 <li><a href="/#trees">Trees-for-a-cause</a></li> 816 <li><a href="/shed-building-advice/">Journal</a></li> 817 </ul> 818 </div> 819 </div> 820 <div class="foot__bottom"> 821 <div>© 2026 SolidBuild · solidbuildwood.com</div> 822 <div class="foot__legal"> 823 <a href="/solid-build-privacy-policy">Privacy</a> 824 <a href="/terms-of-service/">Terms</a> 825 <a href="/accessibility/">Accessibility</a> 826 </div> 827 </div> 828 </div> 829</footer> 830<button class="to-top" id="toTop" type="button" aria-label="Back to top" hidden> 831 <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 832 <polyline points="6 14 12 8 18 14"/> 833 </svg> 834 <span>Top</span> 835</button>
836<script> 837(function () { 838 var btn = document.getElementById('toTop'); 839 if (!btn) return; 840 var shown = null; 841 function sync() { 842 var y = window.pageYOffset || document.documentElement.scrollTop || 0; 843 var want = y > 300; 844 if (want === shown) return; 845 shown = want; 846 if (want) { 847 btn.hidden = false; 848 requestAnimationFrame(function () { btn.classList.add('is-in'); }); 849 } else { 850 btn.classList.remove('is-in'); 851 setTimeout(function () { if (!shown) btn.hidden = true; }, 240); 852 } 853 } 854 window.addEventListener('scroll', sync, { passive: true }); 855 btn.addEventListener('click', function () { 856 var rm = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 857 window.scrollTo({ top: 0, behavior: rm ? 'auto' : 'smooth' }); 858 }); 859 sync(); 860})(); 861</script>
vendor: 1 bytes, line 861
861
862<script> 863/* Phone/tablet menu (<=1100px), 2026-09-10. Builds #sbDrawer from the header's 864 own .header-nav on first open (one IA, no duplicate markup), then hides the 865 horizontal strip by flagging .site-header.has-drawer. Groups are accordions; 866 the phone + live-chat links come from the utility strip. Escape, the X and 867 the backdrop close it; body scroll is locked while open. */ 868(function () { 869 var hdr = document.querySelector('.site-header'); 870 var nav = hdr && hdr.querySelector('.header-nav'); 871 var burger = document.getElementById('sbBurger'); 872 var drawer = document.getElementById('sbDrawer'); 873 if (!hdr || !nav || !burger || !drawer) return; 874 var host = drawer.querySelector('.sb-drawer__nav'); 875 var closeBtn = drawer.querySelector('.sb-drawer__close'); 876 var built = false; 877 hdr.classList.add('has-drawer'); 878 879 function label(a) { return a.textContent.replace('\u25BC', '').replace(/\s+/g, ' ').trim(); } 880 881 function build() { 882 if (built) return; built = true; 883 Array.prototype.forEach.call(nav.children, function (ch) { 884 if (ch.classList.contains('nav-item')) { 885 var a = ch.firstElementChild, p = ch.querySelector('.nav-panel'); 886 if (!a || !p) return; 887 var g = document.createElement('div'); g.className = 'sb-drawer__group'; 888 var t = document.createElement('button'); t.type = 'button'; t.className = 'sb-drawer__toggle'; 889 t.setAttribute('aria-expanded', 'false'); t.textContent = label(a); 890 var list = document.createElement('div'); list.className = 'sb-drawer__list'; 891 var clone = p.cloneNode(true); 892 while (clone.firstChild) list.appendChild(clone.firstChild); 893 // the top-level link's own target, unless the panel already lists it 894 var href = a.getAttribute('href'); 895 if (href && !list.querySelector('a[href="' + href + '"]')) { 896 var all = document.createElement('a'); all.href = href; all.textContent = 'All ' + label(a); 897 list.insertBefore(all, list.firstChild); 898 } 899 t.addEventListener('click', function () { 900 var open = g.classList.toggle('is-open'); 901 t.setAttribute('aria-expanded', open ? 'true' : 'false'); 902 }); 903 g.appendChild(t); g.appendChild(list); host.appendChild(g); 904 } else if (ch.tagName === 'A') { 905 var l = ch.cloneNode(true); 906 l.className = 'sb-drawer__link' + (ch.classList.contains('header-nav__sale') ? ' sb-drawer__link--sale' : ''); 907 host.appendChild(l); 908 } 909 }); 910 var util = document.querySelector('.util-strip__right'); 911 if (util) { 912 var u = document.createElement('div'); u.className = 'sb-drawer__util'; 913 Array.prototype.forEach.call(util.querySelectorAll('a'), function (a) { 914 var c = a.cloneNode(true); c.removeAttribute('class'); 915 var span = c.querySelector('span'); if (span) span.removeAttribute('style'); 916 u.appendChild(c); 917 }); 918 host.appendChild(u); 919 } 920 } 921 function isOpen() { return drawer.classList.contains('is-open'); } 922 function open() { 923 build(); 924 drawer.hidden = false; 925 requestAnimationFrame(function () { drawer.classList.add('is-open'); }); 926 document.body.classList.add('sb-drawer-open'); 927 burger.setAttribute('aria-expanded', 'true'); 928 if (closeBtn) closeBtn.focus(); 929 } 930 function close(refocus) { 931 if (!isOpen()) return; 932 drawer.classList.remove('is-open'); 933 document.body.classList.remove('sb-drawer-open'); 934 burger.setAttribute('aria-expanded', 'false'); 935 setTimeout(function () { if (!isOpen()) drawer.hidden = true; }, 260); 936 if (refocus !== false) burger.focus(); 937 } 938 burger.addEventListener('click', function () { isOpen() ? close() : open(); }); 939 drawer.addEventListener('click', function (e) { 940 var t = e.target; 941 while (t && t !== drawer) { 942 if (t.classList && (t.classList.contains('sb-drawer__close') || t.classList.contains('sb-drawer__backdrop'))) { close(); return; } 943 t = t.parentNode; 944 } 945 }); 946 document.addEventListener('keydown', function (e) { if (e.key === 'Escape') close(); }); 947 var wide = window.matchMedia('(min-width: 1101px)'); 948 (wide.addEventListener ? wide.addEventListener('change', function (m) { if (m.matches) close(false); }) 949 : wide.addListener(function (m) { if (m.matches) close(false); })); 950})(); 951</script>
951 952
953<script> 954/* Project cost calculator hooks. The calculator's engine is inline page 955 content (top-level `sheds` / `accessories` + selectShed()) that paints at 956 parse time, before this script runs; nothing to do on any other page. 957 (1) Deep link (2026-09-11): the product pages link 958 /solidbuild-shed-project-cost-calculator/#shed=<model>; pre-select it. 959 (2) Live prices (SB-01B, 2026-09-13): the page body's price table is 960 static and goes stale. Fetch the catalog prices through the Storefront 961 GraphQL API (same origin, bearer = window.SB_SF_TOKEN above), patch the 962 engine's own objects and re-render. Any failure â no token, no fetch, 963 network, non-200, 4 s timeout â keeps the static figures silently. The 964 static numbers are never hidden while the request runs. 965 (3) Keyboard shim (SB-26, 2026-09-13): the cards and progress steps are 966 bare DIVs with onclick. Decorate them as buttons (role, tabindex, 967 aria-pressed / aria-current), route Enter and Space to click(), and 968 restore focus after the engine replaces a grid's innerHTML. Niche's 969 [tabindex]:focus-visible ring paints on them by itself. */ 970(function () { 971 if (typeof sheds === 'undefined' || typeof selectShed !== 'function' || !sheds.length) return; 972 973 /* (1) deep link */ 974 function pick() { 975 var m = /[#&]shed=([a-z]+)/.exec(window.location.hash || ''); 976 if (!m) return; 977 for (var i = 0; i < sheds.length; i++) { 978 if (sheds[i].id === m[1]) { selectShed(sheds[i]); return; } 979 } 980 } 981 pick(); 982 window.addEventListener('hashchange', pick); // back/forward between deep links re-runs it 983 984 /* (2) live prices */ 985 var SHED_IDS = { 81: 'shiba', 83: 'gardener', 84: 'optima', 77: 'myrtle', 76: 'whales', 78: 'aspen', 80: 'bristhol', 986 93: 'dakota', 85: 'moderna', 86: 'solana', 123: 'california', 127: 'astoria', 132: 'washington' }; 987 var ACC_IDS = { 90: 'dbl_window', 126: 'tall_window', 89: 'veranda', 92: 'flower_box', 91: 'shutters', 130: 'mini_split', 131: 'line_cover' }; 988 var PRODUCT_IDS = [81, 83, 84, 77, 76, 78, 80, 93, 85, 86, 123, 127, 132, 90, 126, 89, 92, 91, 130, 131]; 989 function activeCat() { 990 var b = document.querySelector('.cat-tab.active'); 991 return (b && b.getAttribute('data-cat')) || 'all'; 992 } 993 function rerender() { 994 try { 995 if (typeof renderSheds === 'function') renderSheds(activeCat()); 996 if (typeof renderAccessories === 'function') renderAccessories(); 997 if (typeof selectedShed !== 'undefined' && selectedShed) { 998 if (typeof renderFloorOptions === 'function') renderFloorOptions(); 999 if (typeof updateAll === 'function') updateAll(); 1000 } 1001 } catch (e) {} 1002 } 1003 function patchPrices() { 1004 var token = window.SB_SF_TOKEN; 1005 if (!token || typeof fetch !== 'function' || typeof AbortController !== 'function') return; 1006 var ac = new AbortController(); 1007 var timer = setTimeout(function () { ac.abort(); }, 4000); 1008 fetch('/graphql', { 1009 method: 'POST', 1010 headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' }, 1011 body: JSON.stringify({ 1012 query: 'query($ids:[Int!]){site{products(entityIds:$ids,first:25){edges{node{entityId prices{price{value} basePrice{value} salePrice{value}}}}}}}', 1013 variables: { ids: PRODUCT_IDS } 1014 }), 1015 signal: ac.signal 1016 }).then(function (r) { 1017 if (!r.ok) throw new Error('status ' + r.status); 1018 return r.json(); 1019 }).then(function (j) { 1020 var edges = j && j.data && j.data.site && j.data.site.products && j.data.site.products.edges; 1021 if (!edges || !edges.length) return; 1022 var hits = 0;
1023 edges.forEach(function (e) { 1024 var n = e && e.node; 1025 if (!n || !n.prices || !n.prices.price) return; 1026 var v = Number(n.prices.price.value); 1027 if (!(v > 0)) return; 1028 var id = SHED_IDS[n.entityId], list = sheds; 1029 if (!id && typeof accessories !== 'undefined') { id = ACC_IDS[n.entityId]; list = accessories; } 1030 if (!id || !list) return; 1031 for (var i = 0; i < list.length; i++) { 1032 if (list[i].id === id) { list[i].price = Math.round(v); hits++; break; } 1033 } 1034 }); 1035 if (hits) rerender(); 1036 }).catch(function () {}).then(function () { clearTimeout(timer); }); 1037 } 1038 patchPrices(); 1039 1040 /* (3) keyboard shim */ 1041 var CARD = '.shed-card, .option-card, .toggle-card'; 1042 var GRIDS = ['shedGrid', 'foundationGrid', 'floorContent', 'roofingGrid', 'roofingExtras', 'stainContent', 'accGrid', 'insulContent']; 1043 var pending = null, pendingTimer = 0; 1044 function decorate() { 1045 Array.prototype.forEach.call(document.querySelectorAll(CARD), function (el) { 1046 var off = el.style.pointerEvents === 'none'; 1047 if (!el.hasAttribute('role')) el.setAttribute('role', 'button'); 1048 el.setAttribute('tabindex', off ? '-1' : '0'); 1049 if (off) el.setAttribute('aria-disabled', 'true'); else el.removeAttribute('aria-disabled'); 1050 el.setAttribute('aria-pressed', el.classList.contains('selected') ? 'true' : 'false'); 1051 }); 1052 Array.prototype.forEach.call(document.querySelectorAll('.progress-step'), function (el) { 1053 if (!el.hasAttribute('role')) el.setAttribute('role', 'button'); 1054 if (!el.hasAttribute('tabindex')) el.setAttribute('tabindex', '0'); 1055 if (el.classList.contains('active')) el.setAttribute('aria-current', 'step'); else el.removeAttribute('aria-current'); 1056 }); 1057 } 1058 function restoreFocus(records) { 1059 if (!pending) return; 1060 var grid = document.getElementById(pending.grid); 1061 if (!grid) { pending = null; return; } 1062 var touched = false; 1063 for (var i = 0; i < records.length; i++) { 1064 if (records[i].target === grid || grid.contains(records[i].target)) { touched = true; break; } 1065 } 1066 if (!touched) return; // another grid re-rendered first; keep waiting 1067 var cards = grid.querySelectorAll(CARD); 1068 var t = cards[pending.index] || cards[cards.length - 1]; 1069 pending = null; clearTimeout(pendingTimer); 1070 if (t) { try { t.focus({ preventScroll: true }); } catch (e) { t.focus(); } } 1071 } 1072 var mo = new MutationObserver(function (records) { decorate(); restoreFocus(records); }); 1073 GRIDS.forEach(function (id) { 1074 var g = document.getElementById(id); 1075 if (g) mo.observe(g, { childList: true, subtree: true }); 1076 }); 1077 var pw = document.getElementById('progressWrap'); 1078 if (pw) mo.observe(pw, { attributes: true, attributeFilter: ['class'], subtree: true }); // .active moves by class, no re-render 1079 document.addEventListener('keydown', function (e) { 1080 if (e.key !== 'Enter' && e.key !== ' ' && e.key !== 'Spacebar') return; 1081 if (e.altKey || e.ctrlKey || e.metaKey) return; 1082 var t = e.target; 1083 if (!t || !t.closest) return; 1084 var el = t.closest(CARD + ', .progress-step'); 1085 if (!el || el.getAttribute('aria-disabled') === 'true') return; 1086 e.preventDefault(); 1087 var grid = el.closest('#' + GRIDS.join(', #')); 1088 if (grid) { 1089 pending = { grid: grid.id, index: Array.prototype.indexOf.call(grid.querySelectorAll(CARD), el) }; 1090 clearTimeout(pendingTimer); 1091 pendingTimer = setTimeout(function () { pending = null; }, 600); // the click re-rendered nothing 1092 } 1093 el.click(); 1094 }); 1095 decorate(); 1096 var total = document.getElementById('stickyTotal'); 1097 if (total && !total.hasAttribute('aria-live')) total.setAttribute('aria-live', 'polite'); 1098})(); 1099</script>
vendor: 1 bytes, line 1099
1099
1100<script> 1101/* The search page (SB-30 shim 2026-09-13; D17 rework 2026-09-17). Niche's 1102 pages/search.html is a vendor template, so everything here is runtime: 1103 (1) a plain search form under the heading on EVERY search page â prefilled 1104 with the current query, focused only when there is no query (that page 1105 otherwise shows two empty tabs and a collapsed "advanced search" and 1106 no field at all). Same .sb-search look as the header panel. 1107 (2) tabs that count 0 are hidden; the collapsible toggle's aria-label is 1108 kept in step with its visible text (Niche's collapsible.js copies the 1109 hidden "Hide Search Form" span). 1110 (3) Niche's products-per-page <select> renders its first option twice (a 1111 malformed closing tag in the vendor partial): duplicates removed, and 1112 the select shows the ?limit= the page was loaded with (Niche syncs it 1113 on category pages only). 1114 (4) content results: excerpts that are raw JSON-LD (pages whose body opens 1115 with a schema block) are dropped, the "(Page)" type gets a span to 1116 style; a "Did you mean" line is hidden while the search HAS results. */ 1117(function () { 1118 if (!document.body || !document.body.classList.contains('search-page')) return; 1119 var each = function (list, fn) { Array.prototype.forEach.call(list, fn); }; 1120 var query = ''; 1121 try { query = (new URLSearchParams(window.location.search).get('search_query') || '').replace(/\s+/g, ' ').trim(); } catch (e) {} 1122 1123 /* (2) toggle label */ 1124 var toggle = document.querySelector('[data-collapsible="advanced-search-content"]'); 1125 function syncLabel() { 1126 if (!toggle) return; 1127 var spans = toggle.querySelectorAll('.toggleLink-text'), text = ''; 1128 for (var i = 0; i < spans.length; i++) { 1129 if (window.getComputedStyle(spans[i]).display !== 'none') { text = spans[i].textContent.replace(/\s+/g, ' ').trim(); break; } 1130 } 1131 if (text && toggle.getAttribute('aria-label') !== text) toggle.setAttribute('aria-label', text); 1132 } 1133 if (toggle) { 1134 syncLabel(); 1135 toggle.addEventListener('click', function () { setTimeout(syncLabel, 0); }); 1136 window.addEventListener('load', function () { setTimeout(syncLabel, 100); }); 1137 new MutationObserver(syncLabel).observe(toggle, { attributes: true, attributeFilter: ['aria-label', 'aria-expanded', 'class'] }); 1138 } 1139 1140 /* (3) + (4): repairs to vendor markup. Niche swaps tabs, sorts and pages by 1141 AJAX (history.pushState + re-rendered listing / content results), so the 1142 repairs are one idempotent pass, re-run whenever <main> changes. */ 1143 function tidy() { 1144 /* (3) the per-page select */ 1145 var limit = ''; 1146 try { limit = new URLSearchParams(window.location.search).get('limit') || ''; } catch (e) {} 1147 each(document.querySelectorAll('select[name="limit"]'), function (sel) { 1148 var seen = {}; 1149 each(Array.prototype.slice.call(sel.options), function (o) { 1150 if (seen[o.value]) { sel.removeChild(o); return; } 1151 seen[o.value] = true; 1152 }); 1153 if (limit && seen[limit] && sel.value !== limit) sel.value = limit; 1154 }); 1155 /* (3b) a card whose "Was" equals its "MSRP" prints the figure once */ 1156 each(document.querySelectorAll('.card, .listItem'), function (card) { 1157 var rrp = card.querySelector('.price--rrp'), was = card.querySelector('.price--non-sale'); 1158 if (!rrp || !was) return; 1159 var a = rrp.textContent.replace(/\s+/g, ''), b = was.textContent.replace(/\s+/g, ''); 1160 var box = was.closest ? was.closest('.price-section') : null; 1161 if (a && a === b && box && box.style.display !== 'none') box.style.display = 'none'; 1162 }); 1163 /* (4) content results + the suggestion line */ 1164 each(document.querySelectorAll('#search-results-content > ul > p'), function (p) { 1165 if (/^\s*\{\s*"@context"/.test(p.textContent)) p.parentNode.removeChild(p); 1166 }); 1167 each(document.querySelectorAll('#search-results-content > ul'), function (ul) { 1168 each(Array.prototype.slice.call(ul.childNodes), function (n) { 1169 var m = n.nodeType === 3 && /^\s*\(([^)]+)\)\s*$/.exec(n.nodeValue); 1170 if (!m) return; 1171 var s = document.createElement('span'); s.className = 'sb-result-type'; s.textContent = m[1]; 1172 ul.replaceChild(s, n); 1173 }); 1174 }); 1175 var total = 0; 1176 each(document.querySelectorAll('[data-search-page-tabs] [data-count]'), function (el) { total += parseInt(el.getAttribute('data-count'), 10) || 0; }); 1177 each(document.querySelectorAll('[data-search-page-tabs] > li'), function (li) { 1178 if (li.querySelector('[data-count="0"]') && li.style.display !== 'none') li.style.display = 'none'; 1179 }); 1180 if (total > 0) { 1181 each(document.querySelectorAll('.search-suggestion'), function (el) { 1182 if (el.querySelector('.search-refine') && el.style.display !== 'none') el.style.display = 'none'; 1183 }); 1184 } 1185 } 1186 tidy(); 1187 var main = document.querySelector('main') || document.body, pendingTidy = 0; 1188 if (typeof MutationObserver === 'function') { 1189 new MutationObserver(function () { 1190 if (pendingTidy) return; 1191 pendingTidy = setTimeout(function () { pendingTidy = 0; tidy(); }, 60); 1192 }).observe(main, { childList: true, subtree: true }); 1193 } 1194 1195 /* (1) the form */ 1196 var nav = document.querySelector('nav.search-nav'); 1197 var anchor = nav || document.getElementById('product-listing-container'); 1198 if (!anchor || !anchor.parentNode || document.querySelector('.sb-search-fallback')) return; 1199 var form = document.createElement('form'); 1200 form.className = 'sb-search sb-search-fallback' + (query ? '' : ' sb-search-fallback--empty'); 1201 form.setAttribute('role', 'search'); 1202 form.setAttribute('action', '/search.php'); 1203 form.setAttribute('method', 'get'); 1204 form.innerHTML = '<label class="sb-search__label" for="sb-q">Search the store</label>' + 1205 '<input id="sb-q" type="search" name="search_query" placeholder="Search sheds and guides" autocomplete="off">' + 1206 '<button type="submit" class="btn btn--primary sb-search__submit">Search</button>'; 1207 anchor.parentNode.insertBefore(form, anchor); 1208 var input = form.querySelector('input'); 1209 if (query) { input.value = query; return; } 1210 try { input.focus(); } catch (e) {} 1211 // Niche's search.js prepends a hidden <p role="status"> results-count 1212 // announcement and focuses it 100 ms after its own init, which takes the 1213 // focus back off the field; hand it back once, then stop listening. 1214 function stolen(e) { 1215 var t = e.target; 1216 if (!t || t === input || t.tagName !== 'P' || t.getAttribute('role') !== 'status') return; 1217 document.removeEventListener('focusin', stolen, true); 1218 setTimeout(function () { try { input.focus(); } catch (err) {} }, 0); 1219 } 1220 document.addEventListener('focusin', stolen, true); 1221 setTimeout(function () { document.removeEventListener('focusin', stolen, true); }, 5000); 1222 function reclaim() { 1223 var a = document.activeElement; 1224 if (!a || a === document.body || (a.tagName === 'P' && a.getAttribute('role') === 'status')) { try { input.focus(); } catch (err) {} } 1225 } 1226 window.addEventListener('load', function () { setTimeout(reclaim, 400); }); 1227 setTimeout(reclaim, 1500); 1228})(); 1229</script>
vendor: 1 bytes, line 1229
1229
1230<script> 1231/* Header search panel + the shared .sb-search behaviour (D17 / SB-30, 1232 2026-09-17). The magnifier in chrome/header.html is a real link to the 1233 search page; here it becomes a toggle button for #sbSearchPanel: open -> 1234 focus the field; Escape, an outside click, focus leaving the panel or the 1235 burger close it (Escape / outside click hand focus back to the toggle). 1236 Modified clicks (new tab) keep the link behaviour. Every .sb-search form - 1237 header panel, phone drawer, the search page's own - refuses an empty query 1238 (focuses the field instead) and is prefilled on the search page. */ 1239(function () { 1240 var each = function (list, fn) { Array.prototype.forEach.call(list, fn); }; 1241 document.addEventListener('submit', function (e) { 1242 var f = e.target; 1243 if (!f || !f.classList || !f.classList.contains('sb-search')) return; 1244 var i = f.querySelector('input[name="search_query"]'); 1245 if (!i) return; 1246 var v = i.value.replace(/\s+/g, ' ').trim(); 1247 if (!v) { e.preventDefault(); i.value = ''; try { i.focus(); } catch (err) {} return; } 1248 i.value = v; 1249 }); 1250 if (document.body && document.body.classList.contains('search-page')) { 1251 var q = ''; 1252 try { q = (new URLSearchParams(window.location.search).get('search_query') || '').replace(/\s+/g, ' ').trim(); } catch (e) {} 1253 if (q) each(document.querySelectorAll('.sb-search input[name="search_query"]'), function (i) { if (!i.value) i.value = q; }); 1254 } 1255 1256 var toggle = document.getElementById('sbSearchToggle'); 1257 var panel = document.getElementById('sbSearchPanel'); 1258 var input = panel && panel.querySelector('input[name="search_query"]'); 1259 if (!toggle || !panel || !input) return; 1260 toggle.setAttribute('role', 'button'); 1261 toggle.setAttribute('aria-expanded', 'false'); 1262 toggle.setAttribute('aria-controls', 'sbSearchPanel'); 1263 function isOpen() { return !panel.hidden; } 1264 function open() { 1265 panel.hidden = false; 1266 toggle.setAttribute('aria-expanded', 'true'); 1267 try { input.focus(); input.select(); } catch (e) {} 1268 } 1269 function close(refocus) { 1270 if (!isOpen()) return; 1271 panel.hidden = true; 1272 toggle.setAttribute('aria-expanded', 'false'); 1273 if (refocus) { try { toggle.focus(); } catch (e) {} } 1274 } 1275 toggle.addEventListener('click', function (e) { 1276 if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button) return; 1277 e.preventDefault(); 1278 isOpen() ? close(true) : open(); 1279 }); 1280 toggle.addEventListener('keydown', function (e) { // a button also answers Space 1281 if (e.key === ' ' || e.key === 'Spacebar') { e.preventDefault(); isOpen() ? close(true) : open(); } 1282 }); 1283 document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && isOpen()) close(true); }); 1284 document.addEventListener('click', function (e) { 1285 if (!isOpen()) return; 1286 var t = e.target; 1287 if (panel.contains(t) || toggle.contains(t)) return; 1288 var a = document.activeElement; 1289 close(!a || a === document.body || panel.contains(a)); // a click on another control keeps its own focus 1290 }); 1291 document.addEventListener('focusin', function (e) { // Tab carried the focus out of the panel 1292 if (isOpen() && !panel.contains(e.target) && !toggle.contains(e.target)) close(false); 1293 }); 1294 window.addEventListener('blur', function () { // ...or into an iframe (the Trustpilot badge is next in the tab order) 1295 setTimeout(function () { var a = document.activeElement; if (isOpen() && a && a.tagName === 'IFRAME') close(false); }, 0); 1296 }); 1297 var burger = document.getElementById('sbBurger'); 1298 if (burger) burger.addEventListener('click', function () { close(false); }); 1299 // A primary-nav dropdown (z-index 70) opened OVER the open search form 1300 // (z 65) on hover; one panel at a time - the typed query stays in the field. 1301 each(document.querySelectorAll('.header-nav .nav-item'), function (n) { 1302 n.addEventListener('mouseenter', function () { close(false); }); 1303 }); 1304})(); 1305</script>
vendor: 1 bytes, line 1305
1305
1306<script> 1307/* --chrome-h (D12 / SB-35, 2026-09-17): the height of everything the chrome 1308 puts above the page content at scroll 0 - store banner + announcement + 1309 header + utility strip (+ a widget dropped in a header_bottom region) - in 1310 document coordinates, so the landing hero can fill exactly the rest of the 1311 first screen: min-height: calc(100vh - var(--chrome-h, 190px)) in 1312 solidbuild-landing.scss (190px = the no-JS fallback). The utility strip is 1313 not sticky, so its bottom edge + the scroll offset is stable at any scroll 1314 position; the sticky header is only the fallback when the strip is 1315 missing. Re-measured on load, resize, fonts ready and when a chrome row 1316 changes size (the Trustpilot iframe landing). 1317 NOTE: the --panel-top publisher that once lived in this file went with the 1318 drawer rebuild (ee057fc); the scss rules that read it use their fallback. */ 1319(function () { 1320 var root = document.documentElement, last = -1; 1321 function bottom(el) { 1322 if (!el) return 0; 1323 var r = el.getBoundingClientRect(); 1324 return r.height ? r.bottom + (window.pageYOffset || root.scrollTop || 0) : 0; 1325 } 1326 function measure() { 1327 var h = bottom(document.querySelector('.util-strip')); 1328 if (!h) { 1329 var hdr = document.querySelector('.site-header'); 1330 h = (hdr ? hdr.offsetHeight : 0) + bottom(document.querySelector('.announce')); 1331 } 1332 Array.prototype.forEach.call(document.querySelectorAll('[data-content-region^="header_bottom"]'), function (el) { 1333 h = Math.max(h, bottom(el)); 1334 }); 1335 h = Math.round(h); 1336 if (h > 0 && h !== last) { last = h; root.style.setProperty('--chrome-h', h + 'px'); } 1337 } 1338 measure(); 1339 window.addEventListener('load', measure); 1340 window.addEventListener('resize', measure); 1341 if (document.fonts && document.fonts.ready && document.fonts.ready.then) document.fonts.ready.then(measure); 1342 if (typeof ResizeObserver === 'function') { 1343 var ro = new ResizeObserver(measure); 1344 Array.prototype.forEach.call(document.querySelectorAll('.sb-banner, .announce, .site-header, .util-strip'), function (el) { ro.observe(el); }); 1345 } 1346})(); 1347</script>
vendor: 1 bytes, line 1347
1347
1348<script> 1349/* Trustpilot loader safeguard (2026-09-11). The Trustpilot BigCommerce app 1350 injects tp.widget.bootstrap store-side, which is why the TrustBoxes never 1351 rendered on the dev server (only the plain "Trustpilot" fallback links). 1352 If no bootstrap tag is on the page â the dev server, or the app ever 1353 disabled â load Trustpilot's own script once; on the live store this is a 1354 no-op. */ 1355(function () { 1356 if (document.querySelector('script[src*="tp.widget.bootstrap"]')) return; 1357 if (!document.querySelector('.trustpilot-widget')) return; 1358 var s = document.createElement('script'); 1359 s.src = 'https://widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js'; 1360 s.async = true; 1361 document.head.appendChild(s); 1362})(); 1363</script>
vendor: 1 bytes, line 1363
1363
1364<script src="https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/js/solidbuild-cart.js" defer></script>
1364 1365 1366 <!-- Product added to comparison --> 1367<div id="product-add-popup" class="product-add-popup compare-popup" style="display:none;"> 1368 <div class="popup-section"> 1369 <a href="javascript:void(0)" class="close-btn" role="button">x</a> 1370 <h5>Compare</h5> 1371 <p>Item successfully added to comparison list.</p> 1372 </div> 1373</div> 1374 1375<!-- Product removed to comparison --> 1376<div id="product-remove-popup" class="product-remove-popup compare-popup" style="display:none;"> 1377 <div class="popup-section"> 1378 <a href="javascript:void(0)" class="close-btn" role="button">x</a> 1379 <h5>Compare</h5> 1380 <p>Item successfully removed from comparison list.</p> 1381 </div> 1382</div> 1383 1384<!-- Add more products to comparison --> 1385<div id="add-more-product-popup" class="add-more-product-popup compare-popup" style="display:none;"> 1386 <div class="popup-section"> 1387 <a href="javascript:void(0)" class="close-btn" role="button">x</a> 1388 <h5>Compare</h5> 1389 <p>Minimum 2 products are needed to make a valid comparison.</p> 1390 </div> 1391</div> 1392<!-- No products added to comparison --> 1393<div id="no-product-popup" class="no-product-popup compare-popup" style="display:none;"> 1394 <div class="popup-section"> 1395 <a href="javascript:void(0)" class="close-btn" role="button">x</a> 1396 <h5>Compare</h5> 1397 <p>There is no item to compare. Please select at least 2 products.</p> 1398 </div> 1399</div> 1400 1401
1401<script>window.__webpack_public_path__ = "https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/dist/";</script>
1401 1402
1402<script> 1403 function onThemeBundleMain() { 1404 window.stencilBootstrap("search", "{\"categoryTree\":[{\"data\":\"Garden Cabin Shed Kits\",\"attr\":{\"id\":\"category-50\",\"title\":\"Garden Cabin Shed Kits\"},\"metadata\":{\"id\":50}},{\"data\":\"Garden Sheds For Sale | SolidBuild®\",\"attr\":{\"id\":\"category-49\",\"title\":\"Garden Sheds For Sale | SolidBuild®\"},\"metadata\":{\"id\":49}},{\"data\":\"Home Office Sheds\",\"attr\":{\"id\":\"category-47\",\"title\":\"Home Office Sheds\"},\"metadata\":{\"id\":47}},{\"data\":\"Solid Wood She Shed Kits\",\"attr\":{\"id\":\"category-42\",\"title\":\"Solid Wood She Shed Kits\"},\"metadata\":{\"id\":42}},{\"data\":\"Wooden Sheds Featuring Finished Interior\",\"attr\":{\"id\":\"category-45\",\"title\":\"Wooden Sheds Featuring Finished Interior\"},\"metadata\":{\"id\":45}},{\"data\":\"Choose your shed design\",\"attr\":{\"id\":\"category-24\",\"title\":\"Choose your shed design\"},\"metadata\":{\"id\":24},\"state\":\"closed\"},{\"data\":\"Select a price range\",\"attr\":{\"id\":\"category-25\",\"title\":\"Select a price range\"},\"metadata\":{\"id\":25},\"state\":\"closed\"},{\"data\":\"Select your shed size\",\"attr\":{\"id\":\"category-35\",\"title\":\"Select your shed size\"},\"metadata\":{\"id\":35},\"state\":\"closed\"}],\"searchProductsPerPage\":12,\"searchResultsCount\":\"0 results for ''\",\"zoomSize\":\"1280x1280\",\"productSize\":\"500x659\",\"genericError\":\"Oops! Something went wrong.\",\"urls\":{\"home\":\"https://solidbuildwood.com/\",\"brands\":\"https://solidbuildwood.com/brands/\",\"search\":\"https://solidbuildwood.com/search.php\",\"compare\":\"https://solidbuildwood.com/compare\",\"sitemap\":\"https://solidbuildwood.com/sitemap.php\",\"contact_us_submit\":\"https://solidbuildwood.com/pages.php?action=sendContactForm\",\"subscribe\":{\"action\":\"https://solidbuildwood.com/subscribe.php\"},\"checkout\":{\"single_address\":\"https://solidbuildwood.com/checkout\",\"multiple_address\":\"https://solidbuildwood.com/checkout.php?action=multiple\"},\"account\":{\"orders\":{\"all\":\"https://solidbuildwood.com/account.php?action=order_status\",\"completed\":\"https://solidbuildwood.com/account.php?action=view_orders\",\"save_new_return\":\"https://solidbuildwood.com/account.php?action=save_new_return\"},\"returns\":\"https://solidbuildwood.com/account.php?action=view_returns\",\"addresses\":\"https://solidbuildwood.com/account.php?action=address_book\",\"inbox\":\"https://solidbuildwood.com/account.php?action=inbox\",\"send_message\":\"https://solidbuildwood.com/account.php?action=send_message\",\"add_address\":\"https://solidbuildwood.com/account.php?action=add_shipping_address\",\"update_action\":\"https://solidbuildwood.com/account.php?action=update_account\",\"details\":\"https://solidbuildwood.com/account.php?action=account_details\",\"recent_items\":\"https://solidbuildwood.com/account.php?action=recent_items\",\"index\":\"https://solidbuildwood.com/account.php\",\"wishlists\":{\"all\":\"https://solidbuildwood.com/wishlist.php\",\"add\":\"https://solidbuildwood.com/wishlist.php?action=addwishlist\",\"edit\":\"https://solidbuildwood.com/wishlist.php?action=editwishlist\",\"delete\":\"https://solidbuildwood.com/wishlist.php?action=deletewishlist\"}},\"auth\":{\"login\":\"https://solidbuildwood.com/login.php\",\"check_login\":\"https://solidbuildwood.com/login.php?action=check_login\",\"create_account\":\"https://solidbuildwood.com/login.php?action=create_account\",\"save_new_account\":\"https://solidbuildwood.com/login.php?action=save_new_account\",\"forgot_password\":\"https://solidbuildwood.com/login.php?action=reset_password\",\"send_password_email\":\"https://solidbuildwood.com/login.php?action=send_password_email\",\"save_new_password\":\"https://solidbuildwood.com/login.php?action=save_new_password\",\"logout\":\"https://solidbuildwood.com/login.php?action=logout\"},\"cart\":\"https://solidbuildwood.com/cart.php\",\"product\":{\"post_review\":\"https://solidbuildwood.com/postreview.php\"},\"gift_certificate\":{\"purchase\":\"https://solidbuildwood.com/giftcertificates.php\",\"redeem\":\"https://solidbuildwood.com/giftcertificates.php?action=redeem\",\"balance\":\"https://solidbuildwood.com/giftcertificates.php?action=balance\"},\"rss\":{\"products\":{\"new\":\"https://solidbuildwood.com/rss.php?type=rss\",\"new_atom\":\"https://solidbuildwood.com/rss.php?type=atom\",\"popular\":\"https://solidbuildwood.com/rss.php?action=popularproducts&type=rss\",\"popular_atom\":\"https://solidbuildwood.com/rss.php?action=popularproducts&type=atom\",\"featured\":\"https://solidbuildwood.com/rss.php?action=featuredproducts&type=rss\",\"featured_atom\":\"https://solidbuildwood.com/rss.php?action=featuredproducts&type=atom\",\"search\":\"https://solidbuildwood.com/rss.php?action=searchproducts&type=rss\",\"search_atom\":\"https://solidbuildwood.com/rss.php?action=searchproducts&type=atom\"},\"blog\":\"https://solidbuildwood.com/rss.php?action=newblogs&type=rss\",\"blog_atom\":\"https://solidbuildwood.com/rss.php?action=newblogs&type=atom\"}},\"secureBaseUrl\":\"https://solidbuildwood.com\",\"cartId\":null,\"template\":\"pages/search\",\"validationDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_messages.val
1404id_email\\\":\\\"en\\\",\\\"validation_messages.password\\\":\\\"en\\\",\\\"validation_messages.password_match\\\":\\\"en\\\",\\\"validation_messages.invalid_password\\\":\\\"en\\\",\\\"validation_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_messages.field_not_blank\\\":\\\" field cannot be blank.\\\",\\\"validation_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"validationFallbackDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_fallback_messages.valid_email\\\":\\\"en\\\",\\\"validation_fallback_messages.password\\\":\\\"en\\\",\\\"validation_fallback_messages.password_match\\\":\\\"en\\\",\\\"validation_fallback_messages.invalid_password\\\":\\\"en\\\",\\\"validation_fallback_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_fallback_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_fallback_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_fallback_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_fallback_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_fallback_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_fallback_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_fallback_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_fallback_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_fallback_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_fallback_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_fallback_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_fallback_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_fallback_messages.field_not_blank\\\":\\\" field cannot be blank.\\\",\\\"validation_fallback_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_fallback_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_fallback_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_fallback_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_fallback_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_fallback_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_fallback_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_fallback_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"validationDefaultDictionaryJSON\":\"{\\\"locale\\\":\\\"en\\\",\\\"locales\\\":{\\\"validation_default_messages.val
1404id_email\\\":\\\"en\\\",\\\"validation_default_messages.password\\\":\\\"en\\\",\\\"validation_default_messages.password_match\\\":\\\"en\\\",\\\"validation_default_messages.invalid_password\\\":\\\"en\\\",\\\"validation_default_messages.field_not_blank\\\":\\\"en\\\",\\\"validation_default_messages.certificate_amount\\\":\\\"en\\\",\\\"validation_default_messages.certificate_amount_range\\\":\\\"en\\\",\\\"validation_default_messages.price_min_evaluation\\\":\\\"en\\\",\\\"validation_default_messages.price_max_evaluation\\\":\\\"en\\\",\\\"validation_default_messages.price_min_not_entered\\\":\\\"en\\\",\\\"validation_default_messages.price_max_not_entered\\\":\\\"en\\\",\\\"validation_default_messages.price_invalid_value\\\":\\\"en\\\",\\\"validation_default_messages.invalid_gift_certificate\\\":\\\"en\\\"},\\\"translations\\\":{\\\"validation_default_messages.valid_email\\\":\\\"You must enter a valid email.\\\",\\\"validation_default_messages.password\\\":\\\"You must enter a password.\\\",\\\"validation_default_messages.password_match\\\":\\\"Your passwords do not match.\\\",\\\"validation_default_messages.invalid_password\\\":\\\"Passwords must be at least 7 characters and contain both alphabetic and numeric characters.\\\",\\\"validation_default_messages.field_not_blank\\\":\\\"The field cannot be blank.\\\",\\\"validation_default_messages.certificate_amount\\\":\\\"You must enter a gift certificate amount.\\\",\\\"validation_default_messages.certificate_amount_range\\\":\\\"You must enter a certificate amount between [MIN] and [MAX]\\\",\\\"validation_default_messages.price_min_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_default_messages.price_max_evaluation\\\":\\\"Min. price must be less than max. price.\\\",\\\"validation_default_messages.price_min_not_entered\\\":\\\"Min. price is required.\\\",\\\"validation_default_messages.price_max_not_entered\\\":\\\"Max. price is required.\\\",\\\"validation_default_messages.price_invalid_value\\\":\\\"Input must be greater than 0.\\\",\\\"validation_default_messages.invalid_gift_certificate\\\":\\\"Please enter your valid certificate code.\\\"}}\",\"carouselArrowAndDotAriaLabel\":\"Go to slide [SLIDE_NUMBER] of [SLIDES_QUANTITY]\",\"carouselActiveDotAriaLabel\":\"active\",\"carouselContentAnnounceMessage\":\"You are currently on slide [SLIDE_NUMBER] of [SLIDES_QUANTITY]\",\"noCompareMessage\":\"You must select at least two products to compare\"}").load(); 1405 } 1406 </script>
1406 1407
1407<script async defer src="https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/dist/theme-bundle.main.js" onload="onThemeBundleMain()"></script>
1407 1408
1408<script defer src="https://cdn11.bigcommerce.com/s-9vcrg0/stencil/6da2bff0-9dd6-013f-fe0f-4201d46ef01e/e/644ce700-943f-013f-ccec-561d5e2793e8/js/theme/common/axios.min.js"></script>
1408 1409
1409<script type="text/javascript" src="https://cdn11.bigcommerce.com/shared/js/csrf-protection-header-5eeddd5de78d98d146ef4fd71b2aedce4161903e.js"></script>
vendor: 1 bytes, line 1409
1409
1410<script src="https://apis.google.com/js/platform.js?onload=renderBadge" async defer ></script>
1410 1411 1412
1413<script src='https://chimpstatic.com/mcjs-connected/js/users/f0cc35f21f5e5dbd3c801df6e/ad6486fb5e62cbd9cc705ab9d.js' defer ></script>
1413<script src="https://conduit.mailchimpapp.com/js/stores/store_edp63d8687mmqsaag7ba/conduit.js" defer></script>
1413<script>(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:"32593428", enableAutoSpaTracking: true};o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,"script","//bat.bing.com/bat.js","uetq");</script>
1413 1414
1415<script> 1416 window.uetq = window.uetq || []; 1417 window.uetq.push('event', '', {"revenue_value":%%ORDER_AMOUNT%%,"currency":"USD"}); 1418</script>
1418
1418<script src="https://solidbuildwood.services.answerbase.com/javascript/widget/cta-widget.js" 1419 data-insert-after=".productView-rating"> 1420 </script>
1420<script src="https://solidbuildwood.services.answerbase.com/javascript/widget/full-featured-widget.min.js" type="text/javascript" 1421data-platform="bigcommerce" 1422data-page-type="search" 1423data-product-external-id="" 1424data-product-sku="" 1425data-product-title="" 1426data-product-price="" 1427data-product-url="" 1428data-product-description="" 1429data-product-image-url="[object Object]" 1430data-text-list-popular="Most Popular Questions" 1431data-open-links="popup" 1432data-display-count="3" 1433data-show-answers="false" 1434data-show-comments="true" 1435data-max-answer-height="50" 1436data-insert-after=".measurement-reviews" 1437 defer></script>
1437<script> 1438</script>
vendor: 1 bytes, line 1438
1438
1439<script> 1440document.querySelectorAll('[data-cart-item-add]').forEach(form => form.addEventListener('submit', (event) => { 1441 event.preventDefault(); 1442 const formData = new FormData(event.target); 1443 let productId, productQty; 1444 for (const pair of formData.entries()) { 1445 if (pair[0] === 'product_id') { 1446 productId = pair[1]; 1447 } else if (pair[0] === 'qty[]') { 1448 productQty = parseInt(pair[1]); 1449 } 1450 } 1451 const product = { 1452 id: '', 1453 name: '', 1454 quantity: productQty, 1455 google_business_vertical: 'retail', 1456 } 1457 1458 gtag('event', 'add_to_cart', { 1459 send_to: 'AW-1030350139', 1460 ecomm_pagetype: 'cart', 1461 currency: product.currency, 1462 items: [product], 1463 value: product.price 1464 }); 1465})); 1466</script>
vendor: 1 bytes, line 1466
1466
1467<script> 1468(function () { 1469 var box = document.getElementById('consultTooltipBox'); 1470 if (!box) return; 1471 var container = box.querySelector('.tooltip-container'); 1472 var trigger = box.querySelector('a.cta'); 1473 var closeBtn = box.querySelector('.close-tooltip'); 1474 1475 // Tap to open on touch devices (desktop already gets hover from CSS) 1476 trigger.addEventListener('click', function (e) { 1477 if (window.matchMedia('(hover: none)').matches) { 1478 e.preventDefault(); 1479 container.classList.toggle('active'); 1480 } 1481 }); 1482 closeBtn.addEventListener('click', function (e) { 1483 e.stopPropagation(); 1484 container.classList.remove('active'); 1485 }); 1486 document.addEventListener('click', function (e) { 1487 if (!box.contains(e.target)) container.classList.remove('active'); 1488 }); 1489})(); 1490</script>
1490<script> 1491 1492 1493function redirectLink(badgeval,el) { 1494if(badgeval != ''){ 1495 1496 // console.log('clicke'); 1497 var badgelink = badgeval; 1498 1499 window.location.href = badgelink; 1500 1501 } 1502 1503} 1504var existingScript = document.getElementById('primebPopper'); 1505 1506if (!existingScript) { 1507 var country = 'suprbadgecountry'; 1508const scriptpopperb = document.createElement('script'); 1509scriptpopperb.src = 'https://unpkg.com/@popperjs/core@2/dist/umd/popper.min.js'; 1510scriptpopperb.id = 'primebPopper'; 1511document.getElementsByTagName('head')[0].appendChild(scriptpopperb); 1512 1513const scripttippyb = document.createElement('script'); 1514scripttippyb.src = 'https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.js'; 1515scripttippyb.id = 'primebTippy'; 1516document.getElementsByTagName('head')[0].appendChild(scripttippyb); 1517 // $.getScript("https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.js", function(){ 1518 1519 // }); 1520} 1521 1522document.addEventListener('DOMContentLoaded', (event) => { 1523 1524 1525 1526 // const primeinstances2 = tippy('[data-tippy-content]'); 1527 // instances2.destroy(); 1528 1529 $(document).on("click",".suprbadge-single",function() { 1530 if($(this).attr('productlink') == 1 && $(this).attr('data-productlink') != "productlinkholder"){ 1531 console.log($(this).attr('data-productlink')); 1532 window.location.href = $(this).attr('data-productlink'); 1533 return 1; 1534 } 1535 1536 1537 }); 1538 1539 setTimeout(function(){ 1540 if (typeof tippy !== "undefined") { 1541 var primeinstances2 = tippy('[data-tippy-content]'); 1542 } 1543 1544 }, 2000); 1545 1546 //code logic for thaliacustomercountry 1547 1548 function thaliaSetCookie(cname, cvalue, exdays) { 1549 console.log('in set cookie') 1550 const d = new Date(); 1551 d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); 1552 let expires = "expires="+d.toUTCString(); 1553 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 1554 } 1555 1556 function thaliaGetCookie(cname) { 1557 let name = cname + "="; 1558 let ca = document.cookie.split(';'); 1559 for(let i = 0; i < ca.length; i++) { 1560 let c = ca[i]; 1561 while (c.charAt(0) == ' ') { 1562 c = c.substring(1); 1563 } 1564 if (c.indexOf(name) == 0) { 1565 return c.substring(name.length, c.length); 1566 } 1567 } 1568 return ""; 1569 } 1570 1571 1572 1573 1574 document.addEventListener("DOMContentLoaded", function(event) { 1575 thaliaCustomerCookie(); 1576 }); 1577 1578 var thaliacustomercountry = ''; 1579 function thaliaCustomerCookie() { 1580 thaliacustomercountry = thaliaGetCookie("thaliacustomercountry"); 1581 1582 if (thaliacustomercountry != "") { 1583 1584 } else { 1585 1586 var xhttp = new XMLHttpRequest(); 1587 xhttp.onreadystatechange = function () { 1588 if (xhttp.readyState == 4 && xhttp.status == 200) { 1589 var countryData = JSON.parse(xhttp.responseText); 1590 thaliacustomercountry = countryData.country 1591 thaliaSetCookie("thaliacustomercountry", countryData.country, 2); 1592 1593 1594 } 1595 }; 1596 xhttp.open("GET", "https://geoloc2.thalia-apps.com/", true); 1597 xhttp.send(); 1598 } 1599 } 1600 1601 //end code logic for thaliacustomercountry 1602 1603 1604 if(country == 'suprbadgecountry'){ 1605 country = 'newsuprbadgecountry'; 1606 if (thaliacustomercountry == '') { 1607 thaliaCustomerCookie(); 1608 thaliacustomercountry = thaliaGetCookie("thaliacustomercountry"); 1609 var mycountry = thaliacustomercountry; 1610 } else { 1611 var mycountry = thaliacustomercountry; 1612 } 1613 // var xhttp = new XMLHttpRequest(); 1614 // xhttp.onreadystatechange = function() { 1615 1616 // if (this.readyState == 4 && this.status == 200) { 1617 // countryjson =JSON.parse(this.responseText) 1618 // var mycountry = countryjson.country; 1619 1620 var countryclass = document.getElementsByClassName('starbCountry'); 1621 for (var i = 0; i < countryclass.length; i++) { 1622 var counrtylist = countryclass[i].getAttribute('data-countryselected'); 1623 var position = counrtylist.search(mycountry); 1624 1625 if(position < 0){ 1626 countryclass[i].style.cssText = 'display:none !important'; 1627 1628 } 1629 } 1630 // } 1631 // }; 1632 // xhttp.open("GET", "https://geoloc2.thapi.workers.dev/", true); 1633 // xhttp.send(); 1634 1635 } 1636 1637 }) 1638 var supruser = ''; 1639function customerJWT() { 1640 supruser = 'notlogged'; 1641} 1642 1643function parseJwt (token) { 1644 console.log(token) 1645 if(token == null){ 1646 return false;
1647 } 1648 var base64Url = token.split('.')[1]; 1649 var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); 1650 var jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) { 1651 return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); 1652 }).join('')); 1653 1654 return JSON.parse(jsonPayload); 1655}; 1656 1657customerJWT(); 1658//console.log('supruser',supruser); 1659 1660//console.log('hjkhjk'); 1661</script>
vendor: 1 bytes, line 1661
1661
1662<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
1662 1663
1664<script src="https://suprbadges.thalia-apps.com/401.js?v=1790285584"></script>
vendor: 1 bytes, line 1664
1664
1665<script> 1666 $( "<style>.badgetitle{cursor:pointer}.suprBigClose{color:#000;position:absolute;right:-15px;bottom:0}.starb-inline{display:block}.starb-center{text-align:center}.starb-sm{margin:5px}.starb-md{margin:10px}.starb-lg{margin:20px}.starb-tb-sm{margin-top:5px;margin-bottom:5px}.starb-tb-md{margin-top:10px;margin-bottom:10px}.starb-tb-lg{margin-top:20px;margin-bottom:20px}.starb-lr-sm{margin-left:10px;margin-right:10px}.starb-lr-md{margin-left:10px;margin-right:10px}.starb-lr-lg{margin-left:20px;margin-right:20px}.starb-t-sm{margin-top:5px}.starb-t-md{margin-top:10px}.starb-t-lg{margin-top:20px}.starb-b-sm{margin-bottom:5px}.starb-b-md{margin-bottom:10px}.starb-b-lg{margin-bottom:20px}.starb-l-sm{margin-left:5px}.starb-l-md{margin-left:10px}.starb-l-lg{margin-left:20px}.starb-r-sm{margin-right:5px}.starb-r-md{margin-right:10px}.starb-r-lg{margin-right:20px}@media only screen and (min-width:480px){.starb-full{visibility:visible;height:auto;width:auto}.starb-mobile{visibility:hidden!important;height:0;width:0}}
1666@media only screen and (max-width:480px){.starb-full{visibility:visible;height:auto;width:auto}.starb-mobile{visibility:hidden!important;height:0;width:0}}</style>" ).appendTo( "head" ); 1667 $( "<style></style>" ).appendTo( "head" ); 1668 $( "<style></style>" ).appendTo( "head" ); 1669 $( "<style></style>" ).appendTo( "head" ); 1670 $( "<style></style>" ).appendTo( "head" ); 1671 $( "<style></style>" ).appendTo( "head" ); 1672 $( "<style></style>" ).appendTo( "head" ); 1673 1674 1675 $( document ).ready(function() { 1676 1677 $('.pagination-link').removeAttr('data-faceted-search-facet'); 1678}); 1679 1680var mypagetype = 'search'; 1681 1682var customid = ''; 1683 1684var customname = ''; 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 // start of top_sellers 1695 1696 1697 // End of top_sellers 1698 1699 // start of similar_by_views 1700 // end of similar_by_views 1701 1702 1703 1704 1705 1706// End of suprscript 1707</script>
1707 1708 1709 1710 1711
1711<script>window.__CF$cv$params={r:'a427a6b20a6c0aad',t:'MTc5MDY0OTkyMA==',u:'01a0eb0d6c927375b45fb0dd89a946a0',ut:'44mLA3fuugpx3z6p3OnN.1UM6MiMvulscCQOmFbYbdA-1790649920-1.2.1.1-ZongN4S_Ld08xIC1rKC0YCRdEktm1E5Yjtsxw2HXWacjL2IfqI3wk_fnt9F7NaAmtd4xab48XPDV8ScsR3LJimj4n3_UTRO7YWCKWSI9kpQ',i:60};(function(){if(!document.body)return;var s=document.createElement('script');s.src='/cdn-cgi/challenge-platform/scripts/precursor/main.js';document.head.appendChild(s);})();</script>
1711</body> 1712</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.