1<!DOCTYPE html> 2<html lang="en" ng-app="app" > 3<head>
3<script>(function(w,i,g){w[g]=w[g]||[];if(typeof w[g].push=='function')w[g].push(i)}) 4(window,'GTM-T5V4N5V','google_tags_first_party');</script>
4<script>(function(w,d,s,l){w[l]=w[l]||[];(function(){w[l].push(arguments);})('set', 'developer_id.dY2E1Nz', true); 5 var f=d.getElementsByTagName(s)[0], 6 j=d.createElement(s);j.async=true;j.src='/a10r/'; 7 f.parentNode.insertBefore(j,f); 8 })(window,document,'script','dataLayer');</script>
8 9 10 <!-- build:preloadCss --> 11 <link rel="preload" href="/assets/public/dist/loadCss.css?v=95b517da013402281d2ddeddf29af9fa143b8f96" as="style"> 12 <!-- endbuild --> 13 14
14<script>var $wc_load=function(a){return JSON.parse(JSON.stringify(a))},$wc_leads=$wc_leads||{doc:{url:$wc_load(document.URL),ref:$wc_load(document.referrer),search:$wc_load(location.search),hash:$wc_load(location.hash)}};</script>
14 15
15<script src="//s.ksrndkehqnwntyxlhgto.com/129144.js"></script>
15 16 17 <meta name="facebook-domain-verification" content="bfjeczdiawmyktwuj27rc2wsgz9gv9" /> 18 19 <!-- Meta Pixel Code --> 20
20<script> 21 !function(f,b,e,v,n,t,s) 22 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 23 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 24 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 25 n.queue=[];t=b.createElement(e);t.async=!0; 26 t.src=v;s=b.getElementsByTagName(e)[0]; 27 s.parentNode.insertBefore(t,s)}(window, document,'script', 28 'https://connect.facebook.net/en_US/fbevents.js'); 29 fbq('consent','revoke'); 30 fbq('init', '682837592909593'); 31 fbq('track', 'PageView'); 32 33 function handleConsent(hasConsent) { 34 fbq("consent", hasConsent ? "grant" : "revoke"); 35 } 36 37 document.addEventListener("cookieyes_consent_update", (eventData) => { 38 const data = eventData.detail; 39 handleConsent(data.accepted && data.accepted.includes("advertisement")); 40 }); 41 42 document.addEventListener("cookieyes_banner_load", (eventData) => { 43 const data = eventData.detail; 44 handleConsent(data.categories && data.categories.advertisement); 45 }); 46 </script>
46 47 <noscript><img height="1" width="1" aria-hidden="true" style="display:none" 48 alt="." src="https://www.facebook.com/tr?id=682837592909593&ev=PageView&noscript=1" 49 /></noscript> 50 <!-- End Meta Pixel Code --> 51 52 <!-- OpenAI Measurement Pixel --> 53
53<script> 54 !function(w,d,s,u){if(w.oaiq)return;var q=function(){q.q.push(arguments)};q.q=[];w.oaiq=q;var j=d.createElement(s);j.async=1;j.src=u;var f=d.getElementsByTagName(s)[0];f.parentNode.insertBefore(j,f)}(window,document,"script","https://bzrcdn.openai.com/sdk/oaiq.min.js"); 55 // Mirrors the Meta Pixel consent pattern above: revoke by default, then grant/revoke 56 // via the same CookieYes events + "advertisement" category. oaiq("consent", boolean) 57 // is first-class in the SDK's command dispatcher (undocumented in the pixel PDF). 58 oaiq("consent", false); 59 var oaiPixelId = "Akxm2hXYXaty69wSRY6mNH"; 60 // Placeholder is substituted from env at server boot; skip init when unset (dev/staging) 61 if (oaiPixelId && oaiPixelId.charAt(0) !== "@" && oaiPixelId !== "undefined") { 62 oaiq("init", {pixelId: oaiPixelId, debug: false}); 63 } 64 65 function handleOaiqConsent(hasConsent) { 66 oaiq("consent", !!hasConsent); 67 } 68 69 document.addEventListener("cookieyes_consent_update", function(eventData) { 70 var data = eventData.detail; 71 handleOaiqConsent(data && data.accepted && data.accepted.includes("advertisement")); 72 }); 73 document.addEventListener("cookieyes_banner_load", function(eventData) { 74 var data = eventData.detail; 75 handleOaiqConsent(data && data.categories && data.categories.advertisement); 76 }); 77 </script>
77 78 <!-- End OpenAI Measurement Pixel --> 79 80 <!-- Google tag (gtag.js) --> 81
81<script async src="https://coastalreign.com/a10r/gtag/js?id=G-053NTM3RCD"></script>
81 82
82<script> 83 window.dataLayer = window.dataLayer || []; 84 85 function gtag() { 86 dataLayer.push(arguments); 87 } 88 89 gtag('js', new Date()); 90 91 gtag('set', {currency: 'CAD'}); 92 gtag('config', 'G-053NTM3RCD'); 93 </script>
93 94<!-- Google Places Autocomplete --> 95
95<script> 96 window._gmapsAuthFailed = false; 97 window.gm_authFailure = function() { 98 window._gmapsAuthFailed = true; 99 // Google has already disabled the inputs â clean up the damage 100 var inputs = document.querySelectorAll('.gm-err-autocomplete'); 101 var hadFocus = document.activeElement; 102 for (var i = 0; i < inputs.length; i++) { 103 inputs[i].removeAttribute('disabled'); 104 inputs[i].removeAttribute('style'); 105 inputs[i].placeholder = ''; 106 inputs[i].classList.remove('gm-err-autocomplete'); 107 } 108 // Restore focus â disabling the input caused it to blur 109 if (inputs.length && (!hadFocus || hadFocus === document.body)) { 110 inputs[0].focus(); 111 } 112 // Also remove any .pac-container dropdowns that were created 113 var pacs = document.querySelectorAll('.pac-container'); 114 for (var j = 0; j < pacs.length; j++) { 115 pacs[j].parentNode.removeChild(pacs[j]); 116 } 117 }; 118 </script>
118 119
119<script async src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAFuLfFJN3jsyA1K4LtAyNwmnTnyz8sS5s&libraries=places&loading=async"></script>
119 120 121<!-- Prerender script --> 122
122<script> 123 window.prerenderReady = false; 124 </script>
124 125 126 127 <link rel="preconnect" href="https://www.google.ca"> 128<!-- <link rel="preconnect" href="https://googleads.g.doubleclick.net">--> 129 <link rel="preconnect" href="https://connect.facebook.net"> 130 <link rel="preconnect" crossorigin href="https://fonts.googleapis.com"> 131 <link rel="preconnect" crossorigin href="https://fonts.gstatic.com"> 132 <link rel="preconnect" crossorigin href="https://ka-p.fontawesome.com"> 133 <link rel="preconnect" href="https://www.google-analytics.com"> 134 <!----> 135<!-- <link rel="preconnect" href="https://code.jquery.com">--> 136<!-- <link rel="preconnect" href="http://www.googleadservices.com">--> 137 138 <!-- Google Tag Manager --> 139
139<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 140 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 141 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 142 'https://coastalreign.com/a10r/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 143 })(window,document,'script','dataLayer','GTM-T5V4N5V');</script>
143 144 <!-- End Google Tag Manager --> 145 146 <!--Meta View Port for Mobile Devices--> 147 <meta name=viewport content="width=device-width, initial-scale=1, minimum-scale=1"> 148<!--
148<script>--> 149<!-- WebFont.load({--> 150<!-- google: {--> 151<!-- families: ['Lato:300,400,700']--> 152<!-- }--> 153<!-- });--> 154<!-- </script>
154--> 155 156
156<script> 157 //todo: remove 158 /** 159 * Created by eddisonng on 2016-04-29. 160 */ 161 162 function setMetaTitle (title) { 163 document.title = title 164 } 165 166 function setMetaDescription (description){ 167 var meta=document.getElementsByTagName("meta"); 168 for (var i=0; i<meta.length; i++) { 169 if (meta[i].name.toLowerCase()=="description") { 170 meta[i].content= description 171 } 172 } 173 } 174 175 function setMetaImage (image){ 176 var meta=document.getElementsByTagName("meta"); 177 for (var i=0; i<meta.length; i++) { 178 if (meta[i].name.toLowerCase()=="og:image") { 179 meta[i].content= image 180 } 181 } 182 } 183 184 function changeMetaTags(metaInfo){ 185 //TODO: if there is no property, put a default. 186 $("meta[name=description]").attr("content", metaInfo.description); 187 $("meta[property='og:description']").attr("content", metaInfo.description); 188 $("meta[property='og:image']").attr("content", metaInfo.image); 189 $("meta[property='og:title']").attr("content", metaInfo.title); 190 document.title = metaInfo.title 191 } 192 </script>
192 193 <!-- sentry loader script --> 194
194<script> 195 window.sentryOnLoad = function () { 196 // Simple, no filters, make sure errors aren't sampled away 197 Sentry.init({ 198 sampleRate: 1.0, 199 tracesSampleRate: 0, // turn off tracing to reduce noise while testing 200 // browser-masked cross-origin errors carry no stack/message and are unactionable 201 ignoreErrors: ['Script error.'], 202 // Set to false so it doesn't record a replay from the start of the session 203 replaysOnStart: false, 204 // Set to 0 so it doesn't record an endless replay 205 replaysSessionSampleRate: 0, 206 // Set to 0 so no random replay happens 207 sessionSampleRate: 0, 208 replaysOnErrorSampleRate: 0.2, // capture full session when error occurs 209 // silence logs 210 debug: false 211 }); 212 }; 213 </script>
213 214
214<script src="https://js.sentry-cdn.com/b19ee2f0bb64be1fff9a8e7a7dbee361.min.js" crossorigin="anonymous"></script>
214 215 216 <style type="text/css"> 217 @font-face { 218 font-family:"Athletic"; 219 src:url("/assets/fonts/Athletic.TTF") 220 } 221 </style> 222 223 <title>Coastal Reign | Custom Printed Clothing and Swag</title> 224 <meta name="description" lang= "en" content="A Vancouver based provider of custom products and swag. We are proud to offer free shipping, responsive live chat, and expert design help."> 225 <meta property="og:title" content="Coastal Reign | Custom Printed Clothing and Swag" /> 226 <meta property="og:description" content="A Vancouver based provider of custom products and swag. We are proud to offer free shipping, responsive live chat, and expert design help."> 227 <meta property="og:type" content="website" /> 228 <meta property="og:image" itemprop="image" content="https://image.coastalreign.com/sharedImage.png"/> 229 <meta property="og:image:type" content="image/png" /> 230 231 <meta charset="UTF-8"/> 232 <meta name="fragment" content="!"> 233<!-- favicon --> 234 <link rel="icon" type="image/png" href="/assets/public/favicon/favicon-96x96.png" sizes="96x96" /> 235 <link rel="icon" type="image/svg+xml" href="/assets/public/favicon/favicon.svg" /> 236 <link rel="shortcut icon" href="/assets/public/favicon/favicon.ico" /> 237 <link rel="apple-touch-icon" sizes="180x180" href="/assets/public/favicon/apple-touch-icon.png" /> 238 <link rel="manifest" href="/assets/public/favicon/site.webmanifest" /> 239<!-- preload critical assets --> 240 <link rel="preload" as="image" href="https://image.coastalreign.com/navbar/nav-magnifying.svg"> 241 <link rel="preload" as="image" href="https://image.coastalreign.com/navbar/nav-bars.svg"> 242 <link rel="preload" as="image" href="https://image.coastalreign.com/navbar/nav-question.svg"> 243 <link rel="preload" as="image" href="https://image.coastalreign.com/navbar/Cart.svg"> 244 <link rel="preload" as="image" href="https://image.coastalreign.com/navbar/Login.svg"> 245
245<script src="https://cdn.jsdelivr.net/npm/isbot@5"></script>
245 246<!-- Cloudflare Web Analytics (RUM) -->
vendor: 112 bytes, lines 246-247
246 247 <script type="module" src="https://static.cloudflareinsights.com/beacon.min.js" data-cf-beacon='{"token": "
247094eeb02dfed4b47ae02f5e85ca74740
vendor: 19 bytes, lines 247-249
247"}'></script> 248 249
249<meta charset="UTF-8"> 250 <base href="/"> 251 <!-- build:fixLoadScriptsPath --> 252
252<script src="/assets/public/dist/loadScripts.js?v=95b517da013402281d2ddeddf29af9fa143b8f96"></script>
252 253 <!-- endbuild --> 254 255 <!-- build:useAngularTemplates --> 256
256<script src="/assets/public/dist/publicTemplates.js?v=95b517da013402281d2ddeddf29af9fa143b8f96"></script>
256 257 <!-- endbuild --> 258 <!-- build:useSharedAngularTemplates -->
258<script src="/assets/public/dist/sharedTemplates.js?v=95b517da013402281d2ddeddf29af9fa143b8f96"></script>
258 <!-- endbuild --> 259<!-- Google Analytics--> 260
260<script> 261 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 262 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 263 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 264 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 265 266 </script>
266 267 268
268<script type="text/javascript"> 269 /* <![CDATA[ */ 270 var google_conversion_id = 861990088; 271 var google_custom_params = window.google_tag_params; 272 var google_remarketing_only = true; 273 /* ]]> */ 274 </script>
274 275 276 277 <!-- build:fixLoadCssPath --> 278 <link rel="stylesheet" href="/assets/public/dist/loadCss.css?v=95b517da013402281d2ddeddf29af9fa143b8f96"> 279 <!-- endbuild --> 280</head> 281<body> 282<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 282-283
282 283<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
283GTM-T5V4N5V
vendor: 101 bytes, lines 283-284
283" 284 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
285<!-- End Google Tag Manager (noscript) --> 286 287<!-- HEADER --> 288<div class="navbar-directive fixedTopBar" style="border-bottom: 1px solid #f5f5f5;"> 289 <div class="navbar-container" style="min-height: 70px"> 290 <navbar></navbar> 291 </div> 292</div> 293<!--<div class="nav-padding" ng-style="{'padding-top': ($root.showStoryPage ? '230px': ($root.breadcrumb.isFetching || $root.breadcrumb.list.length > 0) ? '146px':'111px') }"></div>--> 294<div> 295 <!-- Angular Dynamic Content --> 296 <style> 297 .loader { 298 height: 400px; 299 position: relative; 300 } 301 .ajax-loader { 302 position: absolute; 303 left: 50%; 304 top: 50%; 305 margin-left: -60px; /* -1 * image width / 2 */ 306 margin-top: -60px; /* -1 * image height / 2 */ 307 } 308 </style> 309 310 <div ng-hide="true" class="loader"> 311 <!--<img class="ajax-loader" src="../images/loadingScreen.gif">--> 312 </div> 313 314 <div ng-view class="coastal-reign-website"> 315 </div> 316</div> 317 318<div class="change-locale" ng-cloak ng-if="$root.showRecommendLocaleModal"> 319 <div class="change-locale-top"> 320 <div style="margin-right: 20%"> 321 <div>You are currently on the {{$root.visitingCountry(true)}} website.</div> 322 <div>We recommend updating your location for a better browsing experience.</div> 323 </div> 324 <button class="modal-close-button" aria-label="Click to confirm your current locale" ng-click="$root.userConfirmLocale()"> 325 <i class="fas fa-times"></i> 326 </button> 327 </div> 328 <div style="display: flex; justify-content: space-evenly"> 329 <div class="flag-dropdown no-print"> 330 <button class="btn btn-default" type="button" 331 style="display: flex; align-items:center" 332 ng-click="$root.changeToCountry(null, $root.recommendLocale)"> 333 Continue to {{$root.visitingCountry(false, $root.recommendLocale)}} (en) 334 <img ng-show="$root.recommendLocale == ''" style="width: 35px; height:15px; padding-left:5px" 335 lazy-loaded-image alt="Canadian customers for t-shirt printing click here." 336 data-src="/assets/public/images/ca-flag.png"> 337 <img ng-show="$root.recommendLocale == 'en-us'" style="width: 35px; height:15px;" lazy-loaded-image 338 alt="US customers for t-shirt printing click here." data-src="/assets/public/images/us-flag.png"> 339 </span></button> 340 </div> 341 </div> 342</div> 343 344<div id="errorMessageModal" class="modal fade" role="dialog"> 345 <div class="modal-dialog "> 346 <!-- Modal content--> 347 <div style="background-color: #F6665F" class="modal-content"> 348 <div class="modal-body"> 349 <h4 style="color: white">Error, please try again.</h4> 350 <p style="color: white; white-space: pre-line" id="errorMessage"></p> 351 </div> 352 </div> 353 </div> 354</div> 355 356 357<!-- Modal --> 358<div id="noteMessageModal" class="modal fade " role="dialog"> 359 <div class="modal-dialog "> 360 <!-- Modal content--> 361 <div style="background-color: white" class="modal-content"> 362 <div class="modal-body"> 363 <p style="color: black; white-space: pre-line" id="noteMessage"></p> 364 </div> 365 </div> 366 </div> 367</div> 368 369 370<div id="successMessageModal" class="modal fade " role="dialog"> 371 <div class="modal-dialog "> 372 <!-- Modal content--> 373 <div style="background-color: #EFFEFD" class="modal-content"> 374 <div class="modal-body"> 375 <h4 style="color: #39bdae">Success</h4> 376 <p style="color: #333; white-space: pre-line" 377 id="successMessage"></p> 378 </div> 379 </div> 380 </div> 381</div> 382 383<footer></footer> 384 385</body> 386 387<!-- Asynchronously load non-critical below the fold-->
388<script async src="https://kit.fontawesome.com/5fe430ccd5.js" crossorigin="anonymous"></script>
388 389</html> 390 391 392 393
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.