PageSourceSearch

https://printroom.co/blogs/the-print-room-nz

html printroom.co collected 2026-10-04 08:38:25 UTC 393,007 bytes, 8,112 lines download raw bytes

1<!doctype html><html class="no-js" lang="en">
2  <head>
3
4
5<script type="application/vnd.locksmith+json" data-locksmith>{"version":"v346","locked":false,"initialized":true,"scope":"blog","access_granted":true,"access_denied":false,"requires_customer":false,"manual_lock":false,"remote_lock":false,"has_timeout":false,"remote_rendered":null,"hide_resource":false,"hide_links_to_resource":false,"hide_price":false,"hide_add_to_cart":false,"transparent":true,"locks":{"all":[],"opened":[]},"keys":[],"keys_signature":"a6111dc4847a5059d4622e3d27b184dd5cbae461b5d6fc459feab12efb47932d","state":{"template":"blog","theme":151830298694,"product":null,"collection":null,"page":null,"blog":"the-print-room-nz","article":null,"app":null},"now":1791103104,"path":"\/blogs\/the-print-room-nz","locale_root_url":"\/","canonical_url":"https:\/\/printroom.co\/blogs\/the-print-room-nz","customer_id":null,"customer_id_signature":"a6111dc4847a5059d4622e3d27b184dd5cbae461b5d6fc459feab12efb47932d","cart":null}</script>
5<script data-locksmith>!function(){undefined;!function(){var s=window.Locksmith={},e=document.querySelector('script[type="application/vnd.locksmith+json"]'),n=e&&e.innerHTML;if(s.state={},s.util={},s.loading=!1,n)try{s.state=JSON.parse(n)}catch(d){}if(document.addEventListener&&document.querySelector){var o,a,i,t=[76,79,67,75,83,77,73,84,72,49,49],c=function(){a=t.slice(0)},l="style",r=function(e){e&&27!==e.keyCode&&"click"!==e.type||(document.removeEventListener("keydown",r),document.removeEventListener("click",r),o&&document.body.removeChild(o),o=null)};c(),document.addEventListener("keyup",function(e){if(e.keyCode===a[0]){if(clearTimeout(i),a.shift(),0<a.length)return void(i=setTimeout(c,1e3));c(),r(),(o=document.createElement("div"))[l].width="50%",o[l].maxWidth="1000px",o[l].height="85%",o[l].border="1px rgba(0, 0, 0, 0.2) solid",o[l].background="rgba(255, 255, 255, 0.99)",o[l].borderRadius="4px",o[l].position="fixed",o[l].top="50%",o[l].left="50%",o[l].transform="translateY(-50%) translateX(-50%)",o[l].boxShadow="0 2px 5px rgba(0, 0, 0, 0.3), 0 0 100vh 100vw rgba(0, 0, 0, 0.5)",o[l].zIndex="2147483645";var t=document.createElement("textarea");t.value=JSON.stringify(JSON.parse(n),null,2),t[l].border="none",t[l].display="block",t[l].boxSizing="border-box",t[l].width="100%",t[l].height="100%",t[l].background="transparent",t[l].padding="22px",t[l].fontFamily="monospace",t[l].fontSize="14px",t[l].color="#333",t[l].resize="none",t[l].outline="none",t.readOnly=!0,o.appendChild(t),document.body.appendChild(o),t.addEventListener("click",function(e){e.stopImmediatePropagation()}),t.select(),document.addEventListener("keydown",r),document.addEventListener("click",r)}})}s.isEmbedded=-1!==window.location.search.indexOf("_ab=0&_fd=0&_sc=1"),s.path=s.state.path||window.location.pathname,s.basePath=s.state.locale_root_url.concat("/apps/locksmith").replace(/^\/\//,"/"),s.reloading=!1,s.util.console=window.console||{log:function(){},error:function(){}},s.util.makeUrl=function(e,t){var n,o=s.basePath+e,a=[],i=s.cache();for(n in i)a.push(n+"="+encodeURIComponent(i[n]));for(n in t)a.push(n+"="+encodeURIComponent(t[n]));return s.state.customer_id&&(a.push("customer_id="+encodeURIComponent(s.state.customer_id)),a.push("customer_id_signature="+encodeURIComponent(s.state.customer_id_signature))),o+=(-1===o.indexOf("?")?"?":"&")+a.join("&")},s._initializeCallbacks=[],s.on=function(e,t){if("initialize"!==e)throw'Locksmith.on() currently only supports the "initialize" event';s._initializeCallbacks.push(t)},s.initializeSession=function(e){if(!s.isEmbedded){var t=!1,n=!0,o=!0;(e=e||{}).silent&&(o=n=!(t=!0)),s.ping({silent:t,spinner:n,reload:o,callback:function(){s._initializeCallbacks.forEach(function(e){e()})}})}},s.cache=function(e){var t={};try{var n=function a(e){return(document.cookie.match("(^|; )"+e+"=([^;]*)")||0)[2]};t=JSON.parse(decodeURIComponent(n("locksmith-params")||"{}"))}catch(d){}if(e){for(var o in e)t[o]=e[o];document.cookie="locksmith-params=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/",document.cookie="locksmith-params="+encodeURIComponent(JSON.stringify(t))+"; path=/"}return t},s.cache.cart=s.state.cart,s.cache.cartLastSaved=null,s.params=s.cache(),s.util.reload=function(){s.reloading=!0;try{window.location.href=window.location.href.replace(/#.*/,"")}catch(d){s.util.console.error("Preferred reload method failed",d),window.location.reload()}},s.cache.saveCart=function(e){if(!s.cache.cart||s.cache.cart===s.cache.cartLastSaved)return e?e():null;var t=s.cache.cartLastSaved;s.cache.cartLastSaved=s.cache.cart,fetch("/cart/update.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({attributes:{locksmith:s.cache.cart}})}).then(function(e){if(!e.ok)throw new Error("Cart update failed: "+e.status);return e.json()}).then(function(){e&&e()})["catch"](function(e){if(s.cache.cartLastSaved=t,!s.reloading)throw e})},s.util.spinnerHTML='<style>body{background:#FFF}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#loading{display:flex;width:100%;height:50vh;
5color:#777;align-items:center;justify-content:center}#loading .spinner{display:block;animation:spin 600ms linear infinite;position:relative;width:50px;height:50px}#loading .spinner-ring{stroke:currentColor;stroke-dasharray:100%;stroke-width:2px;stroke-linecap:round;fill:none}</style><div id="loading"><div class="spinner"><svg width="100%" height="100%"><svg preserveAspectRatio="xMinYMin"><circle class="spinner-ring" cx="50%" cy="50%" r="45%"></circle></svg></svg></div></div>',s.util.clobberBody=function(e){document.body.innerHTML=e},s.util.clobberDocument=function(e){e.responseText&&(e=e.responseText),document.documentElement&&document.removeChild(document.documentElement);var t=document.open("text/html","replace");t.writeln(e),t.close(),setTimeout(function(){var e=t.querySelector("[autofocus]");e&&e.focus()},100)},s.util.serializeForm=function(e){if(e&&"FORM"===e.nodeName){var t,n,o={};for(t=e.elements.length-1;0<=t;t-=1)if(""!==e.elements[t].name)switch(e.elements[t].nodeName){case"INPUT":switch(e.elements[t].type){default:case"text":case"hidden":case"password":case"button":case"reset":case"submit":o[e.elements[t].name]=e.elements[t].value;break;case"checkbox":case"radio":e.elements[t].checked&&(o[e.elements[t].name]=e.elements[t].value);break;case"file":}break;case"TEXTAREA":o[e.elements[t].name]=e.elements[t].value;break;case"SELECT":switch(e.elements[t].type){case"select-one":o[e.elements[t].name]=e.elements[t].value;break;case"select-multiple":for(n=e.elements[t].options.length-1;0<=n;n-=1)e.elements[t].options[n].selected&&(o[e.elements[t].name]=e.elements[t].options[n].value)}break;case"BUTTON":switch(e.elements[t].type){case"reset":case"submit":case"button":o[e.elements[t].name]=e.elements[t].value}}return o}},s.util.on=function(e,i,s,t){t=t||document;var c="locksmith-"+e+i,n=function(e){var t=e.target,n=e.target.parentElement,o=t&&t.className&&(t.className.baseVal||t.className)||"",a=n&&n.className&&(n.className.baseVal||n.className)||"";("string"==typeof o&&-1!==o.split(/\s+/).indexOf(i)||"string"==typeof a&&-1!==a.split(/\s+/).indexOf(i))&&!e[c]&&(e[c]=!0,s(e))};t.attachEvent?t.attachEvent(e,n):t.addEventListener(e,n,!1)},s.util.enableActions=function(e){s.util.on("click","locksmith-action",function(e){e.preventDefault();var t=e.target;t.dataset.confirmWith&&!confirm(t.dataset.confirmWith)||(t.disabled=!0,t.innerText=t.dataset.disableWith,s.post("/action",t.dataset.locksmithParams,{spinner:!1,type:"text",success:function(e){(e=JSON.parse(e.responseText)).message&&alert(e.message),s.util.reload()}}))},e)},s.util.inject=function(e,t){var n=["data","locksmith","append"];if(-1!==t.indexOf(n.join("-"))){var o=document.createElement("div");o.innerHTML=t,e.appendChild(o)}else e.innerHTML=t;var a,i,s=e.querySelectorAll("script");for(i=0;i<s.length;++i){a=s[i];var c=document.createElement("script");if(a.type&&(c.type=a.type),a.src)c.src=a.src;else{var l=document.createTextNode(a.innerHTML);c.appendChild(l)}e.appendChild(c)}var r=e.querySelector("[autofocus]");r&&r.focus()},s.post=function(e,t,n){!1!==(n=n||{}).spinner&&s.util.clobberBody(s.util.spinnerHTML);var o={};n.container===document?(o.layout=1,n.success=function(e){s.util.clobberDocument(e)}):n.container&&(o.layout=0,n.success=function(e){var t="string"==typeof n.container?document.getElementById(n.container):n.container;t&&(s.util.inject(t,e),t.id===t.firstChild.id&&t.parentElement.replaceChild(t.firstChild,t))}),n.form_type&&(t.form_type=n.form_type),n.include_layout_classes!==undefined&&(t.include_layout_classes=n.include_layout_classes),n.lock_id!==undefined&&(t.lock_id=n.lock_id),s.loading=!0;var a=s.util.makeUrl(e,o),i="json"===n.type||"text"===n.type;fetch(a,{method:"POST",headers:{"Content-Type":"application/json",Accept:i?"application/json":"text/html"},body:JSON.stringify(t)}).then(function(e){if(!e.ok)throw new Error("Request failed: "+e.status);return e.text()}).then(function(e){var t=n.success||s.util.clobberDocument;t(i?{responseText:e}:e)})["catch"](function(e){if(!s.reloading)if("dashboard.weglot.com"!==window.location.host){if(!n.silent)throw alert("Something went wrong! Please refresh and try again."),e;console.error(e)}else console.error(e)})["finally"](function(){s.loading=!1})},s.postResource=function(e,t){e.path=s.path,e.search=window.location.search,e.state=s.state,e.passcode&&(e.passcode=e.passcode.trim()),e.email&&(e.email=e.email.trim()),e.state.cart=s.cache.cart,e.locksmith_json=s.jsonTag,e.locksmith_json_signature=s.jsonTagSignature,s.post("/resource",e,t)},s.ping=function(t){if(!s.isEmbedded){t=t||{};var n=function(){t.reload?s.util.reload():"function"==typeof t.callback&&t.callback()};s.post("/ping",{path:s.path,search:window.location.search,state:s.state},{spinner:!!t.spinner,silent:"undefined"==typeof t.silent||t.silent,type:"text",success:function(e){e&&e.responseText?((e=JSON.parse(e.responseText)).messages&&0<e.messages.length&&s.showMessages(e.messages),e.cart&&s.cache.cart!==e.cart?(s.cache.cart=e.cart,s.cache.saveCart(function(){e.cart&&e.cart.match(/^.+:/)?(t.reload||"function"!=typeof t.callback||t.callback(),s.util.reload()):n()})):n()):console.error("[Locksmith] Invalid result in ping callback:",e)}})}},s.timeoutMonitor=function(){var e=s.cache.cart;s.ping({callback:function(){e!==s.cache.cart||setTimeout(function(){s.timeoutMonitor()},6e4)}})},s.showMessages=function(e){var t=document.createElement("div");t.style.position="fixed",t.style.left=0,t.style.right=0,t.style.bottom="-50px",t.style.opacity=0,t.style.background="#191919",t.style.color="#ddd",t.style.transition="bottom 0.2s, opacity 0.2s",t.style.zIndex=999999,t.innerHTML=["<style>","  .locksmith-ab .locksmith-b { display: none; }","  .locksmith-ab.toggled .locksmith-b { display: flex; }","  .locksmith-ab.toggled .locksmith-a { display: none; }","  .locksmith-flex { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; padding: 10px 20px; }","  .locksmith-message + .locksmith-message { border-top: 1px #555 solid; }","  .locksmith-message a { color: inherit; font-weight: bold; }","  .locksmith-message a:hover { color: inherit; opacity: 0.8; }","  a.locksmith-ab-toggle { font-weight: inherit; text-decoration: underline; }","  .locksmith-text { flex-grow: 1; }","  .locksmith-cta { flex-grow: 0; text-align: right; }","  .locksmith-cta button { transform: scale(0.8); transform-origin: left; }","  .locksmith-cta > * { display: block; }","  .locksmith-cta > * + * { margin-top: 10px; }","  .locksmith-message a.locksmith-close { flex-grow: 0; text-decoration: none; margin-left: 15px; font-size: 30px; font-family: monospace; display: block; padding: 2px 10px; }","  @media screen and (max-width: 600px) {","    .locksmith-wide-only { display: none !important; }","    .locksmith-flex { padding: 0 15px; }","    .locksmith-flex > * { margin-top: 5px; margin-bottom: 5px; }","    .locksmith-cta { text-align: left; }","  }","  @media screen and (min-width: 601px) {","    .locksmith-narrow-only { display: none !important; }","  }","</style>"].join("")+e.map(function(e){return'<div class="locksmith-message">'+e+"</div>"}).join(""),document.body.appendChild(t),document.body.style.position="relative",document.body.parentElement.style.paddingBottom=t.offsetHeight+"px",setTimeout(function(){t.style.bottom=0,t.style.opacity=1},50),s.util.on("click","locksmith-ab-toggle",function(e){e.preventDefault();for(var t=e.target.parentElement;-1===t.className.split(" ").indexOf("locksmith-ab");)t=t.parentElement;-1!==t.className.split(" ").indexOf("toggled")?t.className=t.className.replace("toggled",""):t.className=t.className+" toggled"}),s.util.enableActions(t)}}()}();</script>
5
6      
6<script data-locksmith>Locksmith.cache.cart=null</script>
6
7
8  
8<script data-locksmith>Locksmith.jsonTag="{\"version\":\"v346\",\"locked\":false,\"initialized\":true,\"scope\":\"blog\",\"access_granted\":true,\"access_denied\":false,\"requires_customer\":false,\"manual_lock\":false,\"remote_lock\":false,\"has_timeout\":false,\"remote_rendered\":null,\"hide_resource\":false,\"hide_links_to_resource\":false,\"hide_price\":false,\"hide_add_to_cart\":false,\"transparent\":true,\"locks\":{\"all\":[],\"opened\":[]},\"keys\":[],\"keys_signature\":\"a6111dc4847a5059d4622e3d27b184dd5cbae461b5d6fc459feab12efb47932d\",\"state\":{\"template\":\"blog\",\"theme\":151830298694,\"product\":null,\"collection\":null,\"page\":null,\"blog\":\"the-print-room-nz\",\"article\":null,\"app\":null},\"now\":1791103104,\"path\":\"\\\/blogs\\\/the-print-room-nz\",\"locale_root_url\":\"\\\/\",\"canonical_url\":\"https:\\\/\\\/printroom.co\\\/blogs\\\/the-print-room-nz\",\"customer_id\":null,\"customer_id_signature\":\"a6111dc4847a5059d4622e3d27b184dd5cbae461b5d6fc459feab12efb47932d\",\"cart\":null}";Locksmith.jsonTagSignature="4d53407c0ab3dc37f2c4e6cc4b7749b08cbe7f105afd360a9d602dcd93961c9b"</script>
8
9<meta name="google-site-verification" content="r89mOlbEOfEjECOwEHOd5jrv5jGOJeGHPXM78LaGLXY" />
10    
11    <meta charset="utf-8">
12    <meta http-equiv="X-UA-Compatible" content="IE=edge">
13    <meta name="viewport" content="width=device-width,initial-scale=1">
14    <meta name="theme-color" content="">
15<script>
16    window.dataLayer = window.dataLayer || [];
17    window.dataLayer.push({
18      store_access: 'public',
19      store_type: 'main',
20      page_template: "blog"
21    });
22    window.prTrackLead = window.prTrackLead || function (detail) {
23      try {
24        detail = detail || {};
25        var ud = detail.user_data || {};
26        var email = (ud.email || '').toString().trim().toLowerCase();
27        var phone = (ud.phone_number || '').toString().replace(/[^0-9+]/g, '');
28        window.dataLayer.push({
29          event: 'generate_lead',
30          lead_type: detail.lead_type || 'unknown',
31          form_id: detail.form_id || null,
32          page_path: window.location.pathname,
33          /* Enhanced Conversions for Leads — GTM's user-provided-data variable reads
34             user_data.{email,phone_number}; Google hashes (SHA-256) client-side.
35             Same key shape as the quote/book-a-call pushes in global.bundle.js so ONE
36             GTM variable covers every lead type. */
37          user_data: {
38            email: email || undefined,
39            phone_number: phone || undefined
40          }
41        });
42      } catch (e) {}
43    };
44  </script>
44<script>
45    if (!window.__prGtmLoaded) {
46      window.__prGtmLoaded = true;
vendor: 455 bytes, lines 46-56
46
47      (function (w, d, s, l, i) {
48        w[l] = w[l] || [];
49        w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
50        var f = d.getElementsByTagName(s)[0],
51          j = d.createElement(s),
52          dl = l != 'dataLayer' ? '&l=' + l : '';
53        j.async = true;
54        j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
55        f.parentNode.insertBefore(j, f);
56      })(window, document, 'script', 'dataLayer', '
56GTM-W9DFFGB
vendor: 8 bytes, lines 56-57
56');
57    
57}
58  </script>
58
59
60    <link rel="canonical" href="https://printroom.co/blogs/the-print-room-nz">
61    
62    
63    
64
65    <link rel="preconnect" href="https://cdn.shopify.com" crossorigin>
66
67    
67<script>
68(function() {
69  'use strict';
70  var observer = new MutationObserver(function(mutations) {
71    mutations.forEach(function(mutation) {
72      mutation.addedNodes.forEach(function(node) {
73        if (node.tagName === 'SCRIPT' && node.src && node.src.includes('popt.in')) {
74          node.remove();
75        }
76      });
77    });
78  });
79  observer.observe(document.documentElement, { childList: true, subtree: true });
80})();
81</script>
81<script>
82document.addEventListener('DOMContentLoaded', function() {
83  var scripts = document.querySelectorAll('script[data-block-script]');
84  if (!scripts.length) return;
85  if (window.Shopify && window.Shopify.designMode) {
86    scripts.forEach(function(s) {
87      var real = document.createElement('script');
88      real.textContent = s.textContent;
89      s.parentNode.replaceChild(real, s);
90    });
91    return;
92  }
93  var io = new IntersectionObserver(function(entries) {
94    entries.forEach(function(entry) {
95      if (!entry.isIntersecting) return;
96      io.unobserve(entry.target);
97      var pending = entry.target.querySelector('script[data-block-script]');
98      if (pending) {
99        var real = document.createElement('script');
100        real.textContent = pending.textContent;
101        pending.parentNode.replaceChild(real, pending);
102      }
103    });
104  }, { rootMargin: '300px' });
105  scripts.forEach(function(s) {
106    var block = s.closest('[data-ai-block]') || s.parentElement;
107    io.observe(block);
108  });
109});
110</script>
110<script>
111setTimeout(function() {
112  'use strict';
113
114  // Google Tag Manager loads early + reliably via the 'gtm-head' snippet
115  // (settings.gtm_container_id). The old "remove existing GTM then re-inject after
116  // 3s" hack saved ~922ms but delayed the Ads Conversion Linker (breaking gclid
117  // attribution) and dropped fast-bounce visitors from analytics. Do NOT re-add it.
118
119  // LAZY LOAD THIRD-PARTY ANALYTICS
120  var loadThirdPartyScripts = function() {
121    if (typeof fbq === 'undefined') {
122      !function(f,b,e,v,n,t,s){
123        if(f.fbq)return;n=f.fbq=function(){n.callMethod?
124        n.callMethod.apply(n,arguments):n.queue.push(arguments)};
125        if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
126        n.queue=[];t=b.createElement(e);t.async=!0;
127        t.src=v;s=b.getElementsByTagName(e)[0];
128        s.parentNode.insertBefore(t,s)
129      }(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');
130    }
131    if (typeof clarity === 'undefined' && window.clarityCode) {
132      (function(c,l,a,r,i,t,y){
133        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
134        t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
135        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
136      })(window,document,"clarity","script",window.clarityCode);
137    }
138  };
139  if ('requestIdleCallback' in window) {
140    requestIdleCallback(loadThirdPartyScripts, { timeout: 5000 });
141  } else {
142    setTimeout(loadThirdPartyScripts, 5000);
143  }
144
145  // LINK PREFETCH ON HOVER
146  var NO_PREFETCH = ['/cart','/checkout','/account','/admin','/password','/challenge','/apps/','/tools/','/services/'];
147  var prefetched = {};
148  var hoverTimer = null;
149
150  function shouldPrefetch(href) {
151    try {
152      var url = new URL(href, location.origin);
153      if (url.origin !== location.origin) return false;
154      if (url.pathname === location.pathname) return false;
155      if (prefetched[url.pathname]) return false;
156      if (navigator.connection && navigator.connection.saveData) return false;
157      for (var i = 0; i < NO_PREFETCH.length; i++) {
158        if (url.pathname.indexOf(NO_PREFETCH[i]) === 0) return false;
159      }
160      var ext = url.pathname.split('.').pop();
161      if (['jpg','jpeg','png','gif','svg','webp','pdf','zip','css','js'].indexOf(ext) !== -1) return false;
162      return true;
163    } catch (e) {
164      return false;
165    }
166  }
167
168  function prefetchUrl(href) {
169    var url = new URL(href, location.origin);
170    if (prefetched[url.pathname]) return;
171    prefetched[url.pathname] = true;
172    var link = document.createElement('link');
173    link.rel = 'prefetch';
174    link.href = href;
175    link.as = 'document';
176    document.head.appendChild(link);
177  }
178
179  document.addEventListener('pointerenter', function(e) {
180    var a = e.target.closest ? e.target.closest('a[href]') : null;
181    if (!a || !shouldPrefetch(a.href)) return;
182    var delay = e.pointerType === 'mouse' ? 65 : 0;
183    hoverTimer = setTimeout(function() { prefetchUrl(a.href); }, delay);
184  }, { capture: true, passive: true });
185
186  document.addEventListener('pointerleave', function() {
187    if (hoverTimer) { clearTimeout(hoverTimer); hoverTimer = null; }
188  }, { capture: true, passive: true });
189
190  if ('requestIdleCallback' in window) {
191    requestIdleCallback(function() {
192      var navLinks = document.querySelectorAll('nav a[href], [data-theme-header] a[href]');
193      var count = 0;
194      navLinks.forEach(function(a) {
195        if (count < 5 && shouldPrefetch(a.href)) {
196          prefetchUrl(a.href);
197          count++;
198        }
199      });
200    }, { timeout: 3000 });
201  }
202
203  // BFCACHE SUPPORT
204  window.addEventListener('pageshow', function(event) {
205    if (event.persisted) {
206      fetch('/cart.js').then(function(r) { return r.json(); }).then(function(data) {
207        document.querySelectorAll('[data-cart-count]').forEach(function(el) {
208          el.textContent = data.item_count;
209        });
210        if (window.Alpine && window.Alpine.store && window.Alpine.store('cartCount')) {
211          window.Alpine.store('cartCount').count = data.item_count;
212        }
213      }).catch(function() {});
214    }
215  });
216}, 0);
217</script>
217<script type="speculationrules">
218{
219  "prerender": [{
220    "where": {
221      "and": [
222        { "href_matches": "/*" },
223        { "not": { "href_matches": [
224          "/cart", "/cart/*",
225          "/checkout", "/checkout/*",
226          "/account", "/account/*",
227          "/admin/*",
228          "/password",
229          "/challenge/*",
230          "/apps/*",
231          "/tools/*",
232          "/services/*"
233        ] } },
234        { "not": { "selector_matches": "[target=_blank]" } }
235      ]
236    },
237    "eagerness": "moderate"
238  }],
239  "prefetch": [{
240    "where": {
241      "and": [
242        { "href_matches": "/*" },
243        { "not": { "href_matches": [
244          "/cart", "/cart/*",
245          "/checkout", "/checkout/*",
246          "/account", "/account/*"
247        ] } }
248      ]
249    },
250    "eagerness": "moderate"
251  }]
252}
253</script>
253
254
255
256<style>
257      .hero-image, [data-hero-image] { aspect-ratio: 16/9; width: 100%; height: auto; background-color: #f0f0f0; }
258      .product-image { aspect-ratio: 1/1; background-color: #fafafa; }
259      header, .header { min-height: 60px; }
260      main { min-height: 100vh; }
261      .skeleton { animation: skeleton-loading 1.5s infinite ease-in-out; background: linear-gradient(90deg,#f0f0f0 25%,#e0e0e0 50%,#f0f0f0 75%); background-size: 200% 100%; }
262      @keyframes skeleton-loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
263      @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }
264      @media (max-width: 1023px) { .hero-image-mobile, [data-hero-image-mobile] { aspect-ratio: 9/16; } }
265    </style><link
266        rel="icon"
267        type="image/png"
268        href="//printroom.co/cdn/shop/files/pr_branding_logo_favicon_flag-01_11ede80e-5ae5-41fe-8eb2-87dee0e48e14.png?crop=center&height=32&v=1646960588&width=32"
269      ><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin>
270    
271
272    
273
274 <!-- default to true --><!-- Contain template--><!-- setting name: pluginseo_pageTitleTruncateEnableForBlogs-->
275    <!-- setting value: true --><!-- pageTitleTemplate: %% shop.name %% %% blog.title %%%% blog.all_tags || take: '5' || join: ', ' || prepend_not_empty: ' blog: ' || append_not_empty: ' and more' %% -->
276  <!-- pageTitleToParse": The Print Room NZ - Leavers Hoodies &amp; Team Wear -->
277  <!-- pageTitleTruncateApplicable: true -->
278
279  <!-- pluginseo_pageTitleTemplateApplyToAll: true -->
280  <!-- pageTitleTruncateApplicable: true --><!-- Custom page title: Yes --><title>The Print Room Blog blog: apparel, AS Colour, Beanies, beer, branding and more</title> <!-- default to true --><!-- Contain template--><!-- setting name: pluginseo_metaDescriptionTruncateEnableForBlogs-->
281    <!-- setting value: true --><!-- metaDescriptionTemplate: %% blog.articles || map: 'title' || take: '3' || join: ', ' || prepend_not_empty: 'Read about ' || append_not_empty: ' and more on the '%%%% shop.name %% %% blog.title %% blog. -->
282  <!-- metaDescriptionToParse": School Leavers Gear, Custom Hoodies, Team Wear, Corporates, Hospitality, Workwear, Screen Printing for Universities and Halls. We Do It All. Let&#39;s Talk! -->
283  <!-- metaDescriptionTruncateApplicable: true -->
284
285  <!-- pluginseo_metaDescriptionTemplateApplyToAll: true -->
286  <!-- metaDescriptionTruncateApplicable: true --><!-- Yes --><meta name="description" content="Read about Fast 15 with Cat Mackenzie Everitt, What makes a good branded tote bag, Custom Merchandise Case Study: Wellington&#39;s Parrotdog Brewery and more on the The Print" />
287<script data-desc="seo-breadcrumb-list" type="application/ld+json">
288{
289  "@context": "http://schema.org",
290  "@type": "BreadcrumbList",
291  "itemListElement": [{
292        "@type": "ListItem",
293        "position": 1,
294        "item": {
295          "@id": "https://printroom.co/blogs/the-print-room-nz",
296          "name": "Blog"
297        }
298      }]
299}
300</script>
300<script data-desc="seo-organization" type="application/ld+json">
301  {
302    "@context": "http://schema.org",
303    "@type": "Organization",
304    "additionalType": "https://schema.org/OnlineStore",
305    "@id": "https://printroom.co#organization",
306    "name": "The Print Room",
307    "url": "https://printroom.co",
308    "description": "Read about Fast 15 with Cat Mackenzie Everitt, What makes a good branded tote bag, Custom Merchandise Case Study: Wellington&#39;s Parrotdog Brewery and more on the The Print","logo": {
309        "type": "ImageObject",
310        "url": "https://printroom.co/cdn/shop/t/59/assets/pluginseo_structuredDataLogo_small.png?v=39003"
311      },
312      "image": "https://printroom.co/cdn/shop/t/59/assets/pluginseo_structuredDataLogo_small.png?v=39003","areaServed": [{ "@type": "Country", "name": "Australia" },
313    { "@type": "Country", "name": "New Zealand" }],
314    "sameAs": ["https://www.linkedin.com/company/theprintroom"]
315  }
316</script>
316<script data-desc="seo-website" type="application/ld+json">
317  {
318    "@context": "http://schema.org",
319    "@type": "WebSite",
320    "name": "The Print Room",
321    "url": "https://printroom.co",
322    "inLanguage": "en",
323    "potentialAction": {
324      "@type": "SearchAction",
325      "target": "https://printroom.co/search?q={search_term_string}",
326      "query-input": "required name=search_term_string"
327    }
328  }
329</script>
329<meta name="pluginseo" content="Plug in SEO Plus" data-ptf="s-te_bl" data-mdf="s-te_bl-tr" />
330
331
332    
332<script type="esms-options">
333  {
334    "noLoadEventRetriggers": true
335  }
336</script>
336
337
338<script>
339  if (
340    !(HTMLScriptElement.supports && HTMLScriptElement.supports('importmap'))
341  ) {
342    const importMapShimScriptEl = document.createElement('script');
343    importMapShimScriptEl.src = '//printroom.co/cdn/shop/t/59/assets/es-module-shims.bundle.min.js?v=98603786603752121101787098437'
344    importMapShimScriptEl.async = true;
345
346    document.currentScript.after(importMapShimScriptEl);
347  }
348</script>
vendor: 1 bytes, line 348
348
349<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 349
349
350<script type="importmap">
351  {
352    "imports": {
353      "vendor": "//printroom.co/cdn/shop/t/59/assets/vendor.bundle.min.js?v=124729801276099409011787098433",
354      "deferrable-data": "//printroom.co/cdn/shop/t/59/assets/deferrable-data.bundle.js?v=160370895301608380811787098437",
355      "@supabase/supabase-js": "//printroom.co/cdn/shop/t/59/assets/supabase-js.bundle.js?v=151185893978749678631787098436",
356      "product": "//printroom.co/cdn/shop/t/59/assets/island-product.bundle.js?v=53162399053546849101790733316",
357      "quick-buy": "//printroom.co/cdn/shop/t/59/assets/island-quick-buy.bundle.js?v=147469616221971819701787098437",
358      "ai-chatbot": "//printroom.co/cdn/shop/t/59/assets/ai-chatbot.bundle.js?v=114215721854634402901788472409",
359      "leavers-quote-builder": "//printroom.co/cdn/shop/t/59/assets/leavers-quote-builder.bundle.js?v=140741536858912509621787098436",
360      "leavers-product-grid": "//printroom.co/cdn/shop/t/59/assets/leavers-product-grid.bundle.js?v=101839867699394922961787098435"
361    }
362  }
363</script>
363
364
365<script>
366      (function() {
367        var _originalAlert = window.alert;
368        window.alert = function(message) {
369          if (message && message.toLowerCase().includes('personalized text')) {
370            message = 'This field is required to place an order.';
371          }
372          _originalAlert.call(window, message);
373        };
374      })();
375    </script>
375
376
377    
377<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
377<meta name="google-site-verification" content="r89mOlbEOfEjECOwEHOd5jrv5jGOJeGHPXM78LaGLXY">
378<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/7054289/digital_wallets/dialog">
379<meta id="in-context-paypal-metadata" data-shop-id="7054289" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD">
380<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" type="application/atom+xml" title="Feed" href="/blogs/the-print-room-nz.atom" />
381<link rel="next" href="/blogs/the-print-room-nz?page=2">
382<link rel="alternate" hreflang="x-default" href="https://theprintroom.nz/blogs/the-print-room-nz">
383<link rel="alternate" hreflang="en" href="https://theprintroom.nz/blogs/the-print-room-nz">
384<link rel="alternate" hreflang="en-AU" href="https://printroom.co/en-au/blogs/the-print-room-nz">
385<link rel="alternate" hreflang="en-CN" href="https://printroom.co/blogs/the-print-room-nz">
386<link rel="alternate" hreflang="en-FR" href="https://printroom.co/blogs/the-print-room-nz">
387<link rel="alternate" hreflang="en-GB" href="https://printroom.co/blogs/the-print-room-nz">
388<link rel="alternate" hreflang="en-US" href="https://printroom.co/blogs/the-print-room-nz">
389<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=488013894"></script>
389
390<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
391<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=488013894&shop_id=7054289" crossorigin="anonymous"></script>
vendor: 1 bytes, line 391
391
392<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":7054289,"countryCode":"NZ","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/7054289","merchantName":"The Print Room","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","jcb"],"total":{"type":"pending","label":"The Print Room","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 392
392
393<script id="shopify-features" type="application/json">{"accessToken":"0a03320998ce9cf7ffe404a489cfebbd","betas":["rich-media-storefront-analytics"],"domain":"printroom.co","predictiveSearch":true,"shopId":7054289,"locale":"en"}</script>
vendor: 1 bytes, line 393
393
394<script>var Shopify = Shopify || {};
395Shopify.shop = "the-print-room.myshopify.com";
396Shopify.locale = "en";
397Shopify.currency = {"active":"USD","rate":"0.57265452"};
398Shopify.country = "US";
399Shopify.theme = {"name":"Print_Room_Co","id":151830298694,"schema_name":"Baseline","schema_version":"3.3.1","theme_store_id":null,"role":"main"};
400Shopify.theme.handle = "null";
401Shopify.theme.style = {"id":null,"handle":null};
402Shopify.cdnHost = "printroom.co/cdn";
403Shopify.routes = Shopify.routes || {};
404Shopify.routes.root = "/";
405Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
406Shopify.SignInWithShop = Shopify.SignInWithShop || {};
407Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
408Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 408
408
409<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 409
409
410<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 410
410
411<script>
412  window.ShopifyPay = window.ShopifyPay || {};
413  window.ShopifyPay.apiHost = "shop.app\/pay";
414  window.ShopifyPay.redirectState = null;
415</script>
vendor: 1 bytes, line 415
415
416<script>
417  window.Shopify = window.Shopify || {};
418  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
419  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
420  window.Shopify.SignInWithShop.eligible = true;
421</script>
vendor: 1 bytes, line 421
421
422<script id="shop-js-analytics" type="application/json">{"pageType":"blog"}</script>
vendor: 1 bytes, line 422
422
423<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 423
423
424<script type="module">
425  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
426
427  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
428
429</script>
vendor: 1 bytes, line 429
429
430<script>
431  window.Shopify = window.Shopify || {};
432  if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {};
433  window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]};
434</script>
vendor: 1 bytes, line 434
434
435<script>(function() {
436  var isLoaded = false;
437  function asyncLoad() {
438    if (isLoaded) return;
439    isLoaded = true;
440    var urls = ["\/\/d1liekpayvooaz.cloudfront.net\/apps\/customizery\/customizery.js?shop=the-print-room.myshopify.com","https:\/\/app.carboncheckout.com\/assets\/api\/shopify.min.js?shop=the-print-room.myshopify.com","https:\/\/static.klaviyo.com\/onsite\/js\/klaviyo.js?company_id=WkJ8Uf\u0026shop=the-print-room.myshopify.com","https:\/\/cdn.nfcube.com\/instafeed-dfc514f941e0dbcfd9799eba509c69d2.js?shop=the-print-room.myshopify.com","\/\/d1liekpayvooaz.cloudfront.net\/apps\/uploadery\/uploadery.js?shop=the-print-room.myshopify.com","https:\/\/cdn.grw.reputon.com\/assets\/widget.js?shop=the-print-room.myshopify.com","https:\/\/chimpstatic.com\/mcjs-connected\/js\/users\/3ec9f5a684c36f6bf11dc30fc\/1a983ba3b184a8fb5b6da3882.js?shop=the-print-room.myshopify.com","https:\/\/cdn.hextom.com\/js\/quickannouncementbar.js?shop=the-print-room.myshopify.com","https:\/\/app.popt.in\/pixel.js?id=e7ff5c60e84fb\u0026shop=the-print-room.myshopify.com"];
441    for (var i = 0; i < urls.length; i++) {
442      var s = document.createElement('script');
443      s.type = 'text/javascript';
444      s.async = true;
445      s.src = urls[i];
446      var x = document.getElementsByTagName('script')[0];
447      x.parentNode.insertBefore(s, x);
448    }
449  };
450  if(window.attachEvent) {
451    window.attachEvent('onload', asyncLoad);
452  } else {
453    window.addEventListener('load', asyncLoad, false);
454  }
455})();</script>
vendor: 1 bytes, line 455
455
456<script id="__st">var __st={"a":7054289,"offset":46800,"reqid":"a8f08579-9f70-4d70-8333-bcdc50ec8fa6-1791103104","pageurl":"printroom.co\/blogs\/the-print-room-nz","s":"blogs-6186184","u":"7c7700d41aae","p":"blog","rtyp":"blog","rid":6186184};</script>
vendor: 1 bytes, line 456
456
457<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 457
457
458<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 458
458
459<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//printroom.co/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 459
459
460<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//printroom.co/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
460<script crossorigin="anonymous" defer="defer" src="//printroom.co/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 460
460
461<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 461
461
462<script>
463  window.Shopify = window.Shopify || {};
464  window.Shopify.MCP = window.Shopify.MCP || {};
465  window.Shopify.MCP.enabled = true;
466  window.Shopify.MCP.shop = "the-print-room.myshopify.com";
467  window.Shopify.MCP.mcpEndpoint = "https:\/\/printroom.co\/api\/mcp";
468  window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n  - What is your return policy?\n  - What is your shipping policy?\n  - What is your phone number?\n  - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}];
469</script>
vendor: 1 bytes, line 469
469
470<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/printroom.co\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
471</script>
vendor: 1 bytes, line 471
471
472<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://printroom.co/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}};
473</script>
vendor: 1 bytes, line 473
473
474<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
475  function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent);
476</script>
vendor: 1 bytes, line 476
476
477<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}}));
478</script>
478
479<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://printroom.co/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous">
480<style id="shopify-accelerated-checkout-cart">
481        #shopify-buyer-consent {
482  margin-top: 1em;
483  display: inline-block;
484  width: 100%;
485}
486
487#shopify-buyer-consent.hidden {
488  display: none;
489}
490
491#shopify-subscription-policy-button {
492  background: none;
493  border: none;
494  padding: 0;
495  text-decoration: underline;
496  font-size: inherit;
497  cursor: pointer;
498}
499
500#shopify-subscription-policy-button::before {
501  box-shadow: none;
502}
503
504      </style>
505
506<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
506
507
508      
509
510
511  <link
512    rel="preload"
513    as="font"
514    href="//printroom.co/cdn/fonts/dm_sans/dmsans_n5.8a0f1984c77eb7186ceb87c4da2173ff65eb012e.woff2"
515    type="font/woff2"
516    crossorigin
517  >
518
519
520
521  <link
522    rel="preload"
523    as="font"
524    href="//printroom.co/cdn/fonts/dm_sans/dmsans_n4.ec80bd4dd7e1a334c969c265873491ae56018d72.woff2"
525    type="font/woff2"
526    crossorigin
527  >
528
529
530
531<style data-shopify>
532  @font-face {
533  font-family: "DM Sans";
534  font-weight: 400;
535  font-style: normal;
536  font-display: swap;
537  src: url("//printroom.co/cdn/fonts/dm_sans/dmsans_n4.ec80bd4dd7e1a334c969c265873491ae56018d72.woff2") format("woff2"),
538       url("//printroom.co/cdn/fonts/dm_sans/dmsans_n4.87bdd914d8a61247b911147ae68e754d695c58a6.woff") format("woff");
539}
540
541  @font-face {
542  font-family: "DM Sans";
543  font-weight: 500;
544  font-style: normal;
545  font-display: swap;
546  src: url("//printroom.co/cdn/fonts/dm_sans/dmsans_n5.8a0f1984c77eb7186ceb87c4da2173ff65eb012e.woff2") format("woff2"),
547       url("//printroom.co/cdn/fonts/dm_sans/dmsans_n5.9ad2e755a89e15b3d6c53259daad5fc9609888e6.woff") format("woff");
548}
549
550@font-face {
551  font-family: "DM Sans";
552  font-weight: 700;
553  font-style: normal;
554  font-display: swap;
555  src: url("//printroom.co/cdn/fonts/dm_sans/dmsans_n7.97e21d81502002291ea1de8aefb79170c6946ce5.woff2") format("woff2"),
556       url("//printroom.co/cdn/fonts/dm_sans/dmsans_n7.af5c214f5116410ca1d53a2090665620e78e2e1b.woff") format("woff");
557}
558@font-face {
559  font-family: "DM Sans";
560  font-weight: 400;
561  font-style: italic;
562  font-display: swap;
563  src: url("//printroom.co/cdn/fonts/dm_sans/dmsans_i4.b8fe05e69ee95d5a53155c346957d8cbf5081c1a.woff2") format("woff2"),
564       url("//printroom.co/cdn/fonts/dm_sans/dmsans_i4.403fe28ee2ea63e142575c0aa47684d65f8c23a0.woff") format("woff");
565}
566@font-face {
567  font-family: "DM Sans";
568  font-weight: 700;
569  font-style: italic;
570  font-display: swap;
571  src: url("//printroom.co/cdn/fonts/dm_sans/dmsans_i7.52b57f7d7342eb7255084623d98ab83fd96e7f9b.woff2") format("woff2"),
572       url("//printroom.co/cdn/fonts/dm_sans/dmsans_i7.d5e14ef18a1d4a8ce78a4187580b4eb1759c2eda.woff") format("woff");
573}
574@font-face {
575  font-family: "DM Sans";
576  font-weight: 700;
577  font-style: normal;
578  font-display: swap;
579  src: url("//printroom.co/cdn/fonts/dm_sans/dmsans_n7.97e21d81502002291ea1de8aefb79170c6946ce5.woff2") format("woff2"),
580       url("//printroom.co/cdn/fonts/dm_sans/dmsans_n7.af5c214f5116410ca1d53a2090665620e78e2e1b.woff") format("woff");
581}
582</style>
583
584<style>:root {
585
586      --font-size-xs: 0.64rem;
587      --font-size-sm: 0.8rem;
588      --font-size-base: 1rem;
589      --font-size-lg: 1.25rem;
590      --font-size-xl: 1.563rem;
591      --font-size-2xl: 1.953rem;
592      --font-size-3xl: 2.441rem;
593      --font-size-4xl: 3.052rem;
594      --font-size-5xl: 3.815rem;
595      --font-size-6xl: 4.768rem;
596      --font-size-7xl: 5.96rem;
597      --font-size-8xl: 7.451rem;
598      --font-size-9xl: 9.313rem;
599
600      --type-scale-n-2: var(--font-size-xs);
601      --type-scale-n-1: var(--font-size-sm);
602      --type-scale-n0: var(--font-size-base);
603      --type-scale-n1: var(--font-size-lg);
604      --type-scale-n2: var(--font-size-xl);
605      --type-scale-n3: var(--font-size-2xl);
606      --type-scale-n4: var(--font-size-3xl);
607      --type-scale-n5: var(--font-size-4xl);
608      --type-scale-n6: var(--font-size-5xl);
609      --type-scale-n7: var(--font-size-6xl);
610      --type-scale-n8: var(--font-size-7xl);
611      --type-scale-n9: var(--font-size-8xl);
612      --type-scale-n10: var(--font-size-9xl);
613
614      --base-font-size: 93.75%;
615      --base-font-size-from-settings: 15;
616      --base-line-height: 1.2;
617      --heading-line-height: 1;
618
619      font-size: var(--base-font-size);
620      line-height: var(--base-line-height);
621
622      --heading-font-stack: "DM Sans", sans-serif;
623      --heading-font-weight: 500;
624      --heading-font-style: normal;
625
626
627      --body-font-stack: "DM Sans", sans-serif;
628      --body-font-weight: 400;
629      --body-font-bold: FontDrop;
630      --body-font-bold-italic: FontDrop;
631
632      --color-gridline: 30 35 38;
633      --gridline-width: 0px;
634
635      --text-border-width: 1px;
636      --checkbox-width: 1px;
637
638      --font-heading: "DM Sans", sans-serif;
639      --font-body: "DM Sans", sans-serif;
640      --font-body-weight: 400;
641      --font-body-style: normal;
642      --font-body-bold-weight: bold;
643
644      --heading-letterspacing: -0.025em;
645      --heading-capitalize: none;
646      --heading-decoration: none;
647
648      --standard-heading-size: var(--type-scale-n3);
649      --feature-heading-size: var(--type-scale-n4);
650      --secondary-heading-size: var(--type-scale-n2);
651
652      --body-copy-transform: none;
653
654      --wrapperWidth: 100vw;
655      --gutter: 0px;
656      --rowHeight: calc((var(--wrapperWidth) - (11 * var(--gutter))) / 12);
657
658      --global-scrolling-items-speed-multiplier: 1;
659
660      --add-to-cart-button-height: 44px;
661      --checkout-button-height: 44px;
662
663      --spacing: 1rem;
664      --spacing-double: 2rem;
665      --spacing-half: 0.5rem;
666
667      /* Equivalent to px-2 */
668      --section-horizontal-spacing-mobile: 0.5rem;
669      /* Equivalent to px-4 */
670      --section-horizontal-spacing-desktop: 1rem;
671
672      --section-horizontal-spacing: var(--section-horizontal-spacing-mobile);
673
674      --icon-thickness: 1.5;
675
676      /**
677       * Buttons
678       */
679      --button-text-transform: none;
680      --button-after-content: '\00a0\2192';
681      --button-border-radius: 9999px;
682
683      /**
684       * Links
685       */
686      --links-bottom-border-width: var(--text-border-width);
687      --links-bottom-padding: 0.25rem;
688      --links-text-transform: none;
689      --links-after-content: '\00a0\2192';
690      --links-before-content: '\2190\00a0';
691
692      background-color: rgb(var(--color-scheme-background));
693      color: rgb(var(--color-scheme-text));
694    }
695
696    @media (min-width: 1024px) {
697      :root {
698        --standard-heading-size: var(--type-scale-n5);
699        --feature-heading-size: var(--type-scale-n6);
700        --secondary-heading-size: var(--type-scale-n3);
701
702        --section-horizontal-spacing: var(--section-horizontal-spacing-desktop);
703      }
704    }
705
706    :root,
707      
708      [data-color-scheme="scheme1"] {
709        --color-scheme-text: 43 57 144;
710        --color-scheme-background: 255 255 255;
711        --color-scheme-accent: 248 250 244;
712        --color-scheme-accent-contrast:  43 57 144;
713        --color-scheme-secondary: 30 35 38;
714      }
715  
716      [data-color-scheme="scheme2"] {
717        --color-scheme-text: 30 35 38;
718        --color-scheme-background: 241 255 165;
719        --color-scheme-accent: 194 194 194;
720        --color-scheme-accent-contrast:  30 35 38;
721        --color-scheme-secondary: 30 35 38;
722      }
723  
724      [data-color-scheme="scheme3"] {
725        --color-scheme-text: 248 250 244;
726        --color-scheme-background: 43 57 144;
727        --color-scheme-accent: 248 250 244;
728        --color-scheme-accent-contrast:  241 255 165;
729        --color-scheme-secondary: 43 57 144;
730      }
731  
732      [data-color-scheme="scheme4"] {
733        --color-scheme-text: 248 250 244;
734        --color-scheme-background: 30 35 38;
735        --color-scheme-accent: 248 250 244;
736        --color-scheme-accent-contrast:  30 35 38;
737        --color-scheme-secondary: 248 250 244;
738      }
739  
740      [data-color-scheme="scheme5"] {
741        --color-scheme-text: 30 35 38;
742        --color-scheme-background: 255 255 255;
743        --color-scheme-accent: 30 35 38;
744        --color-scheme-accent-contrast:  255 255 255;
745        --color-scheme-secondary: 30 35 38;
746      }
747  
748      [data-color-scheme="scheme-62a93d7b-1ea3-42af-a18d-30461b13240a"] {
749        --color-scheme-text: 255 255 255;
750        --color-scheme-background: 255 255 255;
751        --color-scheme-accent: 255 255 255;
752        --color-scheme-accent-contrast:  255 255 255;
753        --color-scheme-secondary: 255 255 255;
754      }
755  
756      [data-color-scheme="scheme-7c315ead-1873-415d-a1a8-a7722419ef69"] {
757        --color-scheme-text: 43 57 144;
758        --color-scheme-background: 255 255 255;
759        --color-scheme-accent: 30 35 38;
760        --color-scheme-accent-contrast:  30 35 38;
761        --color-scheme-secondary: 30 35 38;
762      }
763  
764      [data-color-scheme="scheme-6641fd8c-0fdd-4ed9-bd94-b490824d6125"] {
765        --color-scheme-text: 30 35 38;
766        --color-scheme-background: 72 127 249;
767        --color-scheme-accent: 248 250 244;
768        --color-scheme-accent-contrast:  30 35 38;
769        --color-scheme-secondary: 30 35 38;
770      }
771  
772
773    [data-color-scheme] {
774      --payment-terms-background-color: rgb(var(--color-scheme-background));
775
776      --button-color-border: var(--color-scheme-text);
777      --button-color-background: var(--color-scheme-accent);
778      --button-color-text: var(--color-scheme-accent-contrast);
779      --button-color-border-hover: var(--color-scheme-text);
780      --button-color-background-hover: var(--color-scheme-text);
781      --button-color-text-hover: var(--color-scheme-background);
782    }
783
784    ::selection {
785      background-color: rgb(var(--color-scheme-accent));
786      color: rgb(var(--color-scheme-accent-contrast));
787    }
788
789    @keyframes scrolling-items {
790      0% {
791        transform: translate3d(0, 0, 0);
792      }
793
794      100% {
795        transform: translate3d(-50%, 0, 0);
796      }
797    }
798</style>
799
800<style id="generated-critical-css">
801image-with-placeholder{display:block}.theme-button,.theme-button--secondary{cursor:pointer;font-size:var(--font-size-base);line-height:var(--base-line-height);overflow-wrap:anywhere;padding:.5rem 2rem;text-transform:var(--button-text-transform);word-break:normal}.theme-button--secondary:after,.theme-button:after{--tw-content:var(--button-after-content);content:var(--tw-content)}.theme-button{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(var(--button-color-background)/var(--tw-bg-opacity,1));border-color:rgb(var(--button-color-border)/var(--tw-border-opacity,1));border-radius:var(--button-border-radius);border-width:var(--text-border-width);color:rgb(var(--button-color-text)/var(--tw-text-opacity,1))}@media (hover:hover) and (pointer:fine){.theme-button:hover{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(var(--button-color-background-hover)/var(--tw-bg-opacity,1));border-color:rgb(var(--button-color-border-hover)/var(--tw-border-opacity,1));color:rgb(var(--button-color-text-hover)/var(--tw-text-opacity,1))}}.theme-button--secondary{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(var(--color-scheme-background)/var(--tw-bg-opacity,1));border-color:rgb(var(--color-scheme-text)/var(--tw-border-opacity,1));border-radius:var(--button-border-radius);border-width:var(--text-border-width);color:rgb(var(--color-scheme-text)/var(--tw-text-opacity,1))}[data-color-scheme] .theme-button--secondary.rte a:hover,[data-color-scheme].theme-button--secondary .rte a:hover,[data-color-scheme].theme-button--secondary.rte a:hover{color:rgb(var(--color-scheme-accent));text-decoration-color:rgb(var(--color-scheme-accent))}[data-color-scheme] .theme-button--secondary.rte blockquote,[data-color-scheme].theme-button--secondary .rte blockquote,[data-color-scheme].theme-button--secondary.rte blockquote{background:rgb(var(--color-scheme-text));color:rgb(var(--color-scheme-background))}@media (hover:hover) and (pointer:fine){.theme-button--secondary:hover{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgb(var(--color-scheme-accent)/var(--tw-border-opacity,1));color:rgb(var(--color-scheme-accent)/var(--tw-text-opacity,1))}}[data-shopify-xr-hidden]{display:none}.block{display:block}.inline-block{display:inline-block}.hidden{display:none}.shopify-payment-button__button--hidden{display:none!important}.splide:not(.is-active) .\[\.splide\:not\(\.is-active\)_\&\]\:pointer-events-none{pointer-events:none}.splide:not(.is-active) .\[\.splide\:not\(\.is-active\)_\&\]\:invisible{visibility:hidden}.splide:not(.is-active) .\[\.splide\:not\(\.is-active\)_\&\]\:\!flex{display:flex!important}.splide:not(.is-active) .\[\.splide\:not\(\.is-active\)_\&\]\:gap-gridline{gap:var(--gridline-width)}@media not all and (min-width:1024px){.splide:not(.is-active) .max-lg\:\[\.splide\:not\(\.is-active\)_\&\]\:hidden{display:none}}
802</style>
803<style id="manual-critical-css">
804  html {
805    background-color: rgb(var(--color-primary-background));
806    color: rgb(var(--color-primary-text));
807    font-size: var(--base-font-size);
808    line-height: var(--base-line-height);
809  }
810
811  [x-cloak] {
812    display: none;
813  }
814
815  data-island {
816    display: block;
817  }
818
819  html.no-js [x-cloak].no-js-undo-cloak {
820    display: revert;
821  }
822
823  body {
824    display: flex;
825    flex-direction: column;
826    min-height: 100vh;
827  }
828
829  @media (min-width: 768px) {
830    [md\:undo-x-cloak-block] {
831      display: block;
832    }
833  }
834
835  @media (max-width: 767px) {
836    [max-md\:undo-x-cloak-block] {
837      display: block;
838    }
839  }
840</style>
841
842      <style>
843  :root {
844    /* ── Colors ── */
845    --pr-blue: #2B3990;
846    --pr-blue-hover: #232e75;
847    --pr-bright-blue: #487FF9;       /* matches product-page volume-pricing table */
848    --pr-bright-blue-hover: #3D6CD4;
849    --pr-bright-blue-rgb: 72 127 249;
850    --pr-bright-blue-hover-rgb: 61 108 212;
851    --dusky-purple: #4B4D72;
852    --dusky-purple-hover: #3d3f5e;
853    --slider-green: #658a6a;
854    --off-white: #FBFBF6;
855    --pill-bg: #EEE;
856    --pill-bg-hover: #e2e2e2;
857    --cant-find-bg: #EFFE9C;
858
859    /* ── Typography ── */
860    --font-family: 'DM Sans', sans-serif;
861    --title-modal-size: 2.75rem;       /* 44px */
862    --title-modal-tracking: -0.05em;   /* -2.2px */
863    --title-drawer-size: 41px;
864    --title-drawer-tracking: -2px;
865    --body-size: 0.9375rem;            /* 15px */
866    --label-size: 0.8125rem;           /* 13px */
867    --pill-font-size: 0.66rem;         /* ~10.65px */
868    --cta-font-size: 1.5rem;           /* 24px */
869    --submit-font-size: 1.5rem;        /* 24px */
870    --input-font-size: 0.875rem;       /* 14px */
871
872    /* ── Borders ── */
873    --border-modal: 2px solid black;
874    --border-drawer-left: 2px solid black;
875    --border-pill: 0.666px solid black;
876    --border-input: 1px solid black;
877    --border-cta: 2px solid var(--dusky-purple);
878    --border-chip: 0.4px solid black;
879
880    /* ── Radii ── */
881    --radius-modal: 27px;
882    --radius-pill: 9999px;
883    --radius-input: 9999px;
884    --radius-textarea: 10px;
885    --radius-submit: 50px;
886    --radius-cta: 40px;
887    --radius-chip: 24px;
888    --radius-popover: 16px;
889
890    /* ── Shadows ── */
891    --shadow-modal: 0 4px 13px 2px rgba(0, 0, 0, 0.1);
892    --shadow-popover: 0 10px 25px rgba(0, 0, 0, 0.1);
893    --shadow-slider-thumb: 0 2px 6px rgba(0, 0, 0, 0.15);
894    --shadow-focus: 0 0 0 3px rgba(43, 57, 144, 0.1);
895
896    /* ── Sizing ── */
897    --product-image-drawer: 90px;
898    --product-image-modal: 53px;
899    --pill-height: 23px;
900    --submit-height: 70px;
901    --submit-max-width: 351px;
902    --start-quote-height: 79px;
903    --input-min-height: 2.75rem;       /* 44px */
904    --slider-thumb-size: 24px;
905    --slider-track-height: 6px;
906    --cta-width: 153px;
907    --cta-height: 47px;
908    --chip-width: 90px;
909    --chip-height: 21px;
910
911    /* ── Aliases (backward compat) ── */
912    --color-quote-accent: var(--pr-blue);
913  }
914</style>
915
916
917    <link rel="preload" href="//printroom.co/cdn/shop/t/59/assets/base.bundle.css?v=77867960145098054751787098434" as="style" onload="this.onload=null;this.rel='stylesheet'">
918    <noscript><link rel="stylesheet" href="//printroom.co/cdn/shop/t/59/assets/base.bundle.css?v=77867960145098054751787098434"></noscript>
919
920    <link rel="preload" href="//printroom.co/cdn/shop/t/59/assets/styles.css?v=1691680456440492591789529106" as="style" onload="this.onload=null;this.rel='stylesheet'">
921    <noscript><link rel="stylesheet" href="//printroom.co/cdn/shop/t/59/assets/styles.css?v=1691680456440492591789529106"></noscript>
922
923<meta property="og:site_name" content="The Print Room">
924<meta property="og:locale" content="en"><meta property="og:locale:alternate" content="en_NZ"><meta property="og:url" content="https://printroom.co/blogs/the-print-room-nz"><meta property="og:title" content="
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939The Print Room Blog blog: apparel, AS Colour, Beanies, beer, branding and more
940">
941<meta property="og:type" content="website">
942<meta property="og:description" content="Read about Fast 15 with Cat Mackenzie Everitt, What makes a good branded tote bag, Custom Merchandise Case Study: Wellington&#39;s Parrotdog Brewery and more on the The Print">
943<meta property="og:image" content="https://printroom.co/cdn/shop/files/PrintRoomNovember2024-13_507c1311-d6fa-40ae-ae11-a74b59c4faec.jpg?v=1753319129">
944<meta
945    property="og:image:secure_url"
946    content="https://printroom.co/cdn/shop/files/PrintRoomNovember2024-13_507c1311-d6fa-40ae-ae11-a74b59c4faec.jpg?v=1753319129"
947  >
948  <meta property="og:image:width" content="2048">
949  <meta property="og:image:height" content="1367"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964The Print Room Blog blog: apparel, AS Colour, Beanies, beer, branding and more
965">
966<meta name="twitter:description" content="Read about Fast 15 with Cat Mackenzie Everitt, What makes a good branded tote bag, Custom Merchandise Case Study: Wellington&#39;s Parrotdog Brewery and more on the The Print">
967<script>
968  window.THEMENAME = 'Baseline';
969  window.THEMEVERSION = '3.0.0';
970
971  document.documentElement.className = document.documentElement.className.replace('no-js', 'js');
972
973  function debounce(fn, wait) {
974    let t;
975    return (...args) => {
976      clearTimeout(t);
977      t = setTimeout(() => fn.apply(this, args), wait);
978    };
979  }
980
981  window.theme = {
982    strings: {
983      loading: "Loading",
984      itemCountOne: "{{ count }} item",
985      itemCountOther: "{{ count }} items",
986      addToCart: "Add to cart",
987      soldOut: "Sold out",
988      unavailable: "Unavailable",
989      regularPrice: "Regular price",
990      salePrice: "Sale price",
991      sale: "Sale",
992      unitPrice: "Unit price",
993      unitPriceSeparator: "per",
994      cartEmpty: "Your cart is currently empty.",
995      cartCookies: "Enable cookies to use the shopping cart",
996      update: "Update",
997      quantity: "Quantity",
998      discountedTotal: "Discounted total",
999      regularTotal: "Regular total",
1000      priceColumn: "See Price column for discount details.",
1001      addedToCart: "Added to Cart!",
1002      cartError: "There was an error while updating your cart. Please try again.",
1003      cartAddError: "All {{ title }} are in your cart.",
1004      shippingCalculatorResultsTitleOne: "There is 1 rate:",
1005      shippingCalculatorResultsTitleMany: "There are {{ count }} rates:",
1006    },
1007    routes: {
1008      root_url: "\/",
1009      predictive_search_url: "\/search\/suggest",
1010      cart_url: "\/cart",
1011      cart_add_url: "\/cart\/add",
1012      cart_change_url: "\/cart\/change",
1013      cart_update_url: "\/cart\/update",
1014      cart_clear_url: "\/cart\/clear",
1015    },
1016    moneyFormat: "${{amount}}",
1017    moneyWithCurrencyFormat: "${{amount}} USD",
1018    get defaultMoneyFormat() {
1019      return this.moneyFormat;
1020    },
1021    cartItemCount: 0,
1022    settings: {
1023      cartType: "page",
1024      openDrawerOnAddToCart: false
1025    },
1026    info: {
1027      name: 'Baseline',
1028    }
1029  };
1030</script>
vendor: 1 bytes, line 1030
1030
1031<script src="//printroom.co/cdn/shop/t/59/assets/utils.js?v=84782252304122448471787098437" defer></script>
1031
1032    
1032<script src="//printroom.co/cdn/shop/t/59/assets/images.js?v=56710371490645595961787098434" defer></script>
1032
1033    
1033<script>
1034      window.themeEventsDebugMode = false;
1035    </script>
1035
1036    
1036<script src="//printroom.co/cdn/shop/t/59/assets/theme-events.js?v=133344252210966700221787098437" defer></script>
1036
1037
1038    
1039
1040    
1041  
1042  <!-- "snippets/shogun-head.liquid" was not rendered, the associated app was uninstalled -->
1043  
1043<script type="text/javascript">
1044window.PunchoutSettings = {
1045            "cloud_url": "https://cloud.punchoutexpress.com",
1046            "token": "ba56ba1530c75285dc7e1f854b4ad1a1",
1047            "checkout_selector": "#main-cart-footer div.items-center",
1048            "checkout_text": "Transfer Cart",
1049            "cancel_selector": "#main-cart-footer div.items-center",
1050            "cancel_text": "Cancel",
1051            "hide_selector": "*[name=\"checkout\"],.shopify-payment-button,.additional-checkout-buttons,.additional-checkout-button, #main-cart-footer button.theme-button--secondary, #main-cart-footer button.text-button",
1052            "cart_container_selector": "#CartContainer,#CartDrawer,#ajaxifyModal"
1053        };
1054</script>
1054
1055
1056  <!-- Punchout Cloud -->
1057<script src="https://cdn.cloud.punchoutexpress.com/cloud/assets-shopify/0.2.0/punchout.min.js?v5_24_0" defer="defer"></script>
1057
1058<style type="text/css">.btn-punchout-cancel {margin-left: 10px;}</style>
1059<!-- /Punchout Cloud -->
1060
1061  
1062
1063<script>
1064(function() {
1065  console.log('[TWOA Punchout] Script loaded');
1066  
1067  // Check if we're on the Te Wananga page and Locksmith is present
1068  const isTWOAPage = window.location.pathname.includes('te-wananga-o-aotearoa');
1069  console.log('[TWOA Punchout] Is TWOA page:', isTWOAPage);
1070  console.log('[TWOA Punchout] Current path:', window.location.pathname);
1071  
1072  if (isTWOAPage) {
1073    // Check if punchout session is already active
1074    const urlParams = new URLSearchParams(window.location.search);
1075    const hasPunchoutSession = urlParams.has('punchout_sess_id');
1076    console.log('[TWOA Punchout] Has punchout session:', hasPunchoutSession);
1077    
1078    if (!hasPunchoutSession) {
1079      console.log('[TWOA Punchout] No punchout session detected, will auto-activate');
1080      
1081      // Wait for page to fully load, then activate punchout
1082      window.addEventListener('load', function() {
1083        // Check if there's a Locksmith password form visible
1084        const hasPasswordForm = document.querySelector('form[data-locksmith-form], input[type="password"][name*="lock"]');
1085        
1086        console.log('[TWOA Punchout] Page loaded - Has password form:', !!hasPasswordForm);
1087        
1088        if (!hasPasswordForm) {
1089          // No password form = user has access, activate punchout immediately
1090          console.log('[TWOA Punchout] ✓ Access granted - activating punchout session');
1091          const punchoutId = Date.now().toString() + Math.random().toString(36).substring(2, 15);
1092          const newUrl = new URL(window.location.href);
1093          newUrl.searchParams.set('punchout_sess_id', punchoutId);
1094          
1095          // Store in sessionStorage to persist across page navigation
1096          sessionStorage.setItem('twoa_punchout_active', 'true');
1097          sessionStorage.setItem('twoa_punchout_id', punchoutId);
1098          console.log('[TWOA Punchout] Session ID:', punchoutId);
1099          
1100          // Redirect with punchout parameter
1101          console.log('[TWOA Punchout] Redirecting to:', newUrl.toString());
1102          window.location.href = newUrl.toString();
1103        } else {
1104          console.log('[TWOA Punchout] Password form detected, waiting for login...');
1105          
1106          // Watch for form submission / successful login
1107          const checkForAccess = setInterval(function() {
1108            const formStillVisible = document.querySelector('form[data-locksmith-form], input[type="password"][name*="lock"]');
1109            
1110            if (!formStillVisible) {
1111              console.log('[TWOA Punchout] ✓ Password form disappeared - activating punchout');
1112              clearInterval(checkForAccess);
1113              
1114              const punchoutId = Date.now().toString() + Math.random().toString(36).substring(2, 15);
1115              sessionStorage.setItem('twoa_punchout_active', 'true');
1116              sessionStorage.setItem('twoa_punchout_id', punchoutId);
1117              
1118              const newUrl = new URL(window.location.href);
1119              newUrl.searchParams.set('punchout_sess_id', punchoutId);
1120              window.location.href = newUrl.toString();
1121            }
1122          }, 500);
1123          
1124          // Stop after 30 seconds
1125          setTimeout(() => clearInterval(checkForAccess), 30000);
1126        }
1127      });
1128    } else {
1129      // If punchout is already active, store it in session
1130      console.log('[TWOA Punchout] Punchout already active, storing in session');
1131      sessionStorage.setItem('twoa_punchout_active', 'true');
1132      sessionStorage.setItem('twoa_punchout_id', urlParams.get('punchout_sess_id'));
1133    }
1134  }
1135  
1136  // Apply punchout session to all pages if Te Wananga session is active
1137  const storedPunchoutActive = sessionStorage.getItem('twoa_punchout_active');
1138  const storedPunchoutId = sessionStorage.getItem('twoa_punchout_id');
1139  console.log('[TWOA Punchout] Session storage - Active:', storedPunchoutActive, 'ID:', storedPunchoutId);
1140  
1141  if (storedPunchoutActive === 'true' && storedPunchoutId) {
1142    const urlParams = new URLSearchParams(window.location.search);
1143    if (!urlParams.has('punchout_sess_id')) {
1144      console.log('[TWOA Punchout] Applying stored punchout session to current page');
1145      const newUrl = new URL(window.location.href);
1146      newUrl.searchParams.set('punchout_sess_id', storedPunchoutId);
1147      window.history.replaceState({}, '', newUrl.toString());
1148      console.log('[TWOA Punchout] URL updated:', newUrl.toString());
1149      
1150      // Reinitialize punchout if the script is loaded
1151      if (window.PunchoutCloud && window.PunchoutCloud.init) {
1152        console.log('[TWOA Punchout] Reinitializing PunchoutCloud');
1153        window.PunchoutCloud.init();
1154      }
1155    }
1156  }
1157})();
1158</script>
1158
1159
1160<!-- BEGIN app block: shopify://apps/one-tree-planted/blocks/index/1cbac389-d687-4afb-9e8a-26b6535fa1c2 -->
1160<script src="https://cdn.shopify.com/extensions/01a0f89b-d3f4-7fbc-a0d8-5474ae165888/reforestation-app-16/assets/script.js" defer></script>
1160
1161<!-- END app block -->
1161<script src="https://cdn.shopify.com/extensions/019d45d2-6a70-7eed-8da1-d1e8fd0fae86/fulfillment-fee-app-100/assets/fulfillment-fee-manager.js" type="text/javascript" defer="defer"></script>
1161
1162<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1163<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 7054289,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "blog"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 1163
1163
1164<script>
1165  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
1166</script>
vendor: 1 bytes, line 1166
1166
1167<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
1167).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 7054289,storefrontBaseUrl: "https://printroom.co",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://printroom.co/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2246574150","configuration":"{\"accountID\":\"SWPcHh\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":[]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2207776838","configuration":"{\"tagID\":\"2612346888626\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"}
1167,{"id":"1975877702","configuration":"{\"mailchimp_store_id\":\"store_sgk5l8njdgd17w61safe\", \"mailchimp_user_id\":\"33995925\",\"mailchimp_list_id\":\"ef9b0a5c04\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e357a49eadeb6216a959d63fa3fb8f55","type":"APP","apiClientId":2585307,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"462651462","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-7N7TTE08E9\\\",\\\"GT-KD7KB7H4\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"G-7N7TTE08E9\\\"},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":\\\"G-7N7TTE08E9\\\"},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-7N7TTE08E9\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-7N7TTE08E9\\\",\\\"MC-1HQ5JHVSZ0\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-7N7TTE08E9\\\",\\\"MC-1HQ5JHVSZ0\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-7N7TTE08E9\\\"},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-7N7TTE08E9\\\",\\\"MC-1HQ5JHVSZ0\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-7N7TTE08E9\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":\\\"G-7N7TTE08E9\\\"},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":\\\"G-7N7TTE08E9\\\"},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-7N7TTE08E9\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"171573318","configuration":"{\"pixel_id\":\"1516354578649796\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"The Print Room","paymentSettings":{"currencyCode":"NZD"},"myshopifyDomain":"the-print-room.myshopify.com","countryCode":"NZ","storefrontUrl":"https:\/\/printroom.co"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://printroom.co/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"151830298694","themePublished":"true","eventMetadataId":"e11b474d-b4e6-49fc-883b-264c0457a2e0","pageType":"blog","resourceId":"6186184","shopId":"7054289","storefrontBaseUrl":"https:\/\/printroom.co","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
1167<script>
1168  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
1169  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
1170  window.ShopifyAnalytics.meta.currency = 'USD';
1171  var meta = {"page":{"pageType":"blog","resourceType":"blog","resourceId":6186184,"requestId":"a8f08579-9f70-4d70-8333-bcdc50ec8fa6-1791103104"}};
1172  for (var attr in meta) {
1173    window.ShopifyAnalytics.meta[attr] = meta[attr];
1174  }
1175</script>
vendor: 1 bytes, line 1175
1175
1176<script class="analytics">
1177  (function () {
1178    var customDocumentWrite = function(content) {
1179      var jquery = null;
1180
1181      if (window.jQuery) {
1182        jquery = window.jQuery;
1183      } else if (window.Checkout && window.Checkout.$) {
1184        jquery = window.Checkout.$;
1185      }
1186
1187      if (jquery) {
1188        jquery('body').append(content);
1189      }
1190    };
1191
1192    var hasLoggedConversion = function(token) {
1193      if (token) {
1194        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
1195      }
1196      return false;
1197    }
1198
1199    var setCookieIfConversion = function(token) {
1200      if (token) {
1201        var twoMonthsFromNow = new Date(Date.now());
1202        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
1203
1204        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
1205      }
1206    }
1207
1208    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
1209    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
1210    if (trekkie.integrations) {
1211      return;
1212    }
1213    trekkie.methods = [
1214      'identify',
1215      'page',
1216      'ready',
1217      'track',
1218      'trackForm',
1219      'trackLink'
1220    ];
1221    trekkie.factory = function(method) {
1222      return function() {
1223        var args = Array.prototype.slice.call(arguments);
1224        args.unshift(method);
1225        trekkie.push(args);
1226        if (method == 'track' || method == 'page') {
1227          var pageUrl;
1228          try {
1229            pageUrl = window.location.href;
1230          } catch (e) {}
1231          var pageReferrer;
1232          try {
1233            pageReferrer = document.referrer;
1234          } catch (e) {}
1235          try {
1236            if (window.__TREKKIE_SHIM_QUEUE == null) {
1237              window.__TREKKIE_SHIM_QUEUE = [];
1238            }
1239            window.__TREKKIE_SHIM_QUEUE.push({
1240              from: 'trekkie-stub',
1241              method: method,
1242              args: args.slice(1),
1243              pageContext: {
1244                url: pageUrl,
1245                referrer: pageReferrer
1246              }
1247            });
1248          } catch (e) {
1249            // no-op
1250          }
1251        }
1252        return trekkie;
1253      };
1254    };
1255    for (var i = 0; i < trekkie.methods.length; i++) {
1256      var key = trekkie.methods[i];
1257      trekkie[key] = trekkie.factory(key);
1258    }
1259    trekkie.load = function(config) {
1260      trekkie.config = config || {};
1261      trekkie.config.initialDocumentCookie = document.cookie;
1262      var first = document.getElementsByTagName('script')[0];
1263var script = document.createElement('script');
1264script.type = 'text/javascript';
1265script.onerror = function(e) {
1266  var scriptFallback = document.createElement('script');
1267  scriptFallback.type = 'text/javascript';
1268  scriptFallback.onerror = function(error) {
1269          var Monorail = {
1270      produce: function produce(monorailDomain, schemaId, payload) {
1271        var currentMs = new Date().getTime();
1272        var event = {
1273          schema_id: schemaId,
1274          payload: payload,
1275          metadata: {
1276            event_created_at_ms: currentMs,
1277            event_sent_at_ms: currentMs
1278          }
1279        };
1280        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
1281      },
1282      sendRequest: function sendRequest(endpointUrl, payload) {
1283        // Try the sendBeacon API
1284        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
1285          var blobData = new window.Blob([payload], {
1286            type: 'text/plain'
1287          });
1288
1289          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
1290            return true;
1291          } // sendBeacon was not successful
1292
1293        } // XHR beacon
1294
1295        var xhr = new XMLHttpRequest();
1296
1297        try {
1298          xhr.open('POST', endpointUrl);
1299          xhr.setRequestHeader('Content-Type', 'text/plain');
1300          xhr.send(payload);
1301        } catch (e) {
1302          console.log(e);
1303        }
1304
1305        return false;
1306      },
1307      isIos12: function isIos12() {
1308        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
1309      }
1310    };
1311    Monorail.produce('monorail-edge.shopifysvc.com',
1312      'trekkie_storefront_load_errors/1.1',
1313      {shop_id: 7054289,
1314      theme_id: 151830298694,
1315      app_name: "storefront",
1316      context_url: window.location.href,
1317      source_url: "//printroom.co/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"});
1318
1319  };
1320  scriptFallback.async = true;
1321  scriptFallback.src = '//printroom.co/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js';
1322  first.parentNode.insertBefore(scriptFallback, first);
1323};
1324script.async = true;
1325script.src = '//printroom.co/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js';
1326first.parentNode.insertBefore(script, first);
1327
1328    };
1329    trekkie.load(
1330      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":7054289,"isMerchantRequest":null,"themeId":151830298694,"themeCityHash":"18288446332362764096","contentLanguage":"en","currency":"USD","eventMetadataId":"e11b474d-b4e
13306-49fc-883b-264c0457a2e0"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}}
1331    );
1332
1333    var loaded = false;
1334    trekkie.ready(function() {
1335      if (loaded) return;
1336      loaded = true;
1337
1338      window.ShopifyAnalytics.lib = window.trekkie;
1339
1340      var originalDocumentWrite = document.write;
1341      document.write = customDocumentWrite;
1342      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
1343      document.write = originalDocumentWrite;
1344
1345      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
1346      var token = match? match[1]: undefined;
1347      if (!hasLoggedConversion(token)) {
1348        setCookieIfConversion(token);
1349        
1350      }
1351    });
1352
1353    window.ShopifyAnalytics.lib.page(null,{"pageType":"blog","resourceType":"blog","resourceId":6186184,"requestId":"a8f08579-9f70-4d70-8333-bcdc50ec8fa6-1791103104","shopifyEmitted":true});
1354
1355    var eventsListenerScript = document.createElement('script');
1356    eventsListenerScript.async = true;
1357    eventsListenerScript.src = "//printroom.co/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
1358    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
1359})();</script>
1359
1360  
1360<script>
1361  if (!window.ga || (window.ga && typeof window.ga !== 'function')) {
1362    window.ga = function ga() {
1363      (window.ga.q = window.ga.q || []).push(arguments);
1364      if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
1365        window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"});
1366      }
1367      console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information.");
1368    };
1369    if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
1370      window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"});
1371    }
1372  }
1373</script>
vendor: 1 bytes, line 1373
1373
1374<script
1375  defer
1376  src="https://printroom.co/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js"
1377  data-application="storefront-renderer"
1378  data-shop-id="7054289"
1379  data-render-region="gcp-us-central1"
1380  data-page-type="blog"
1381  data-theme-instance-id="151830298694"
1382  data-theme-name="Baseline"
1383  data-theme-version="3.3.1"
1384  data-monorail-region="shop_domain"
1385  data-resource-timing-sampling-rate="10"
1386  data-shs="true"
1387  data-shs-beacon="true"
1388  data-shs-export-with-fetch="true"
1389  data-shs-logs-sample-rate="1"
1390  data-shs-beacon-endpoint="https://printroom.co/api/collect"
1391></script>
1391
1392<meta name="shopify-y" content="b2c8f042-7e89-4050-96ec-9ac9a33f699b" data-expiration="1822660704000"><meta name="shopify-s" content="c141c267-cb00-4498-9f73-a06db22cf78d" data-expiration="1791104904000"><meta name="new-cookie-storage-activated" content="t">
1393</head>
1394
1395  <body>
1396<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W9DFFGB"
1397    height="0" width="0" style="display:none;visibility:hidden" title="gtm"></iframe></noscript>
1398
1399    <a class="skip-link" href="#MainContent">Skip to content</a>
1400    
1401    <!-- BEGIN sections: header-group -->
1402<div id="shopify-section-sections--21296457187398__geo_market_banner" class="shopify-section shopify-section-group-header-group contents">
1403  <style data-shopify>
1404    #shopify-section-sections--21296457187398__geo_market_banner [data-geo-market-banner] {
1405      position: sticky;
1406      top: 0;
1407      left: 0;
1408      right: 0;
1409      z-index: 40;
1410      display: block;
1411      width: 100%;
1412      padding: 0;
1413      border-bottom: 1px solid rgba(248, 250, 244, 0.18);
1414      background: #2b3990;
1415      color: #f8faf4;
1416      box-shadow: 0 14px 30px rgba(19, 27, 68, 0.18);
1417      pointer-events: auto;
1418    }
1419
1420    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__inner {
1421      display: grid;
1422      grid-template-columns: minmax(0, 1fr) auto;
1423      align-items: center;
1424      gap: 1rem 1.5rem;
1425      padding: 0.95rem var(--section-horizontal-spacing);
1426    }
1427
1428    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__message {
1429      margin: 0;
1430      max-width: 48rem;
1431      color: inherit;
1432      font-family: var(--font-body);
1433      font-size: var(--font-size-base);
1434      font-style: var(--font-body-style);
1435      font-weight: 500;
1436      letter-spacing: -0.01em;
1437      line-height: 1.45;
1438    }
1439
1440    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__actions {
1441      display: flex;
1442      flex-wrap: wrap;
1443      align-items: center;
1444      justify-content: flex-end;
1445      gap: 0.75rem;
1446      justify-self: end;
1447    }
1448
1449    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__button,
1450    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__dismiss {
1451      display: inline-flex;
1452      min-height: 2.875rem;
1453      align-items: center;
1454      justify-content: center;
1455      gap: 0.45rem;
1456      border-style: solid;
1457      border-width: var(--text-border-width);
1458      border-radius: var(--button-border-radius);
1459      font-family: var(--font-body);
1460      font-size: var(--font-size-base);
1461      font-style: var(--font-body-style);
1462      font-weight: 600;
1463      line-height: 1;
1464      text-decoration: none;
1465      text-transform: var(--button-text-transform);
1466      white-space: nowrap;
1467      transition:
1468        transform 0.18s ease,
1469        box-shadow 0.18s ease,
1470        background-color 0.18s ease,
1471        border-color 0.18s ease,
1472        color 0.18s ease,
1473        opacity 0.18s ease;
1474    }
1475
1476    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__button {
1477      padding: 0.8rem 1.35rem;
1478      border: 1px solid rgba(255, 255, 255, 0.12);
1479      background: #fbfbf6;
1480      box-shadow: 0 12px 24px rgba(14, 21, 52, 0.14);
1481      color: #2b3990;
1482    }
1483
1484    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__dismiss {
1485      padding: 0.8rem 1rem;
1486      border-color: rgba(248, 250, 244, 0.32);
1487      background: rgba(248, 250, 244, 0.08);
1488      box-shadow: none;
1489      color: inherit;
1490      opacity: 0.96;
1491    }
1492
1493    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__dismiss-icon {
1494      font-size: 0.95rem;
1495      line-height: 1;
1496    }
1497
1498    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__button:focus-visible,
1499    #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__dismiss:focus-visible {
1500      outline: 2px solid #f8faf4;
1501      outline-offset: 2px;
1502    }
1503
1504    @media (hover: hover) and (pointer: fine) {
1505      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__button:hover,
1506      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__dismiss:hover {
1507        transform: translateY(-1px);
1508      }
1509
1510      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__button:hover {
1511        background: #ffffff;
1512        box-shadow: 0 16px 30px rgba(14, 21, 52, 0.18);
1513      }
1514
1515      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__dismiss:hover {
1516        border-color: rgba(248, 250, 244, 0.56);
1517        background: rgba(248, 250, 244, 0.16);
1518        opacity: 1;
1519      }
1520    }
1521
1522    @media (max-width: 767px) {
1523      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__inner {
1524        grid-template-columns: 1fr;
1525        align-items: stretch;
1526        gap: 0.9rem;
1527      }
1528
1529      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__message {
1530        max-width: none;
1531      }
1532
1533      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__actions {
1534        width: 100%;
1535        display: grid;
1536        grid-template-columns: 1fr;
1537        justify-content: stretch;
1538        justify-self: stretch;
1539      }
1540
1541      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__button {
1542        width: 100%;
1543      }
1544
1545      #shopify-section-sections--21296457187398__geo_market_banner .geo-market-banner__dismiss {
1546        justify-self: start;
1547      }
1548    }
1549  </style>
1550
1551  <data-island
1552    data-color-scheme="scheme3"
1553    x-data="GeoMarketBanner({
1554    enabled: true,
1555    nzTargetUrl: &quot;https:\/\/theprintroom.nz&quot;,
1556    intlTargetUrl: &quot;https:\/\/printroom.co&quot;,
1557    auTargetUrl: &quot;https:\/\/www.printroom.co\/en-au&quot;,
1558    messages: {
1559      fromInternational: &quot;You&#39;re on our international site.&quot;,
1560      fromNz: &quot;You&#39;re on our New Zealand site.&quot;,
1561      fromAu: &quot;You&#39;re on our Australia site.&quot;,
1562      switchToNz: &quot;Switch to New Zealand&quot;,
1563      switchToAu: &quot;Switch to Australia&quot;,
1564      switchToInternational: &quot;Switch to international&quot;,
1565      dismiss: &quot;Dismiss&quot;
1566    }
1567  })"
1568    role="region"
1569    aria-label="Regional site selector"
1570    x-show="shown"
1571    x-transition:enter="transition duration-300 motion-reduce:duration-0 outline-0"
1572    x-transition:enter-start="-translate-y-full"
1573    x-transition:enter-end="translate-y-0"
1574    x-transition:leave="transition duration-200 motion-reduce:duration-0 outline-0"
1575    x-transition:leave-start="translate-y-0"
1576    x-transition:leave-end="-translate-y-full"
1577    @keydown.escape.window="dismiss"
1578    id="sections--21296457187398__geo_market_banner"
1579    data-geo-market-banner
1580    style="display: none;"
1581    on="idle"
1582    src="//printroom.co/cdn/shop/t/59/assets/island-geo-market-banner.bundle.js?v=76971093760605141431787098434"
1583  >
1584    <div class="geo-market-banner__inner">
1585      <p class="geo-market-banner__message">
1586        <span x-text="message"></span>
1587      </p>
1588      <div class="geo-market-banner__actions">
1589        <a
1590          class="geo-market-banner__button"
1591          :href="targetUrl"
1592          x-text="ctaLabel"
1593          @click="acceptSwitch($event)"
1594        ></a>
1595        <button
1596          class="geo-market-banner__dismiss"
1597          type="button"
1598          @click="dismiss"
1599          :aria-label="dismissLabel"
1600        >
1601          <span x-text="dismissLabel"></span>
1602          <span class="geo-market-banner__dismiss-icon" aria-hidden="true">×</span>
1603        </button>
1604      </div>
1605    </div>
1606  </data-island>
1607
1608
1609
1610</div><div id="shopify-section-sections--21296457187398__header" class="shopify-section shopify-section-group-header-group section-header relative z-20">
1611
1612
1613<style data-shopify>
1614  
1615    #shopify-section-sections--21296457187398__header {
1616      position: sticky;
1617      top: 0;
1618      z-index: 30;
1619    }
1620
1621    :root {
1622      --sticky-header-height: 66px;
1623    }
1624  
1625
1626  #shopify-section-sections--21296457187398__header {
1627    --logo-max-width: 80px;
1628  }
1629  @media (min-width: 1024px) {
1630    #shopify-section-sections--21296457187398__header {
1631      --logo-max-width: 90px;
1632    }
1633  }
1634</style>
1635
1636<data-island
1637  x-data="Header"
1638  class="block"
1639  :class="{ 'is-stuck' : isStuck }"
1640  
1641    data-sticky="true"
1642  
1643  
1644  data-color-scheme="scheme1"
1645  data-overlay-header-with-sticky="false"
1646  data-overlay-text-color-scheme="scheme1"
1647  id="sections--21296457187398__header"
1648  role="banner"
1649  data-theme-header
1650>
1651  
1652    <sticky-header-height-helper hidden></sticky-header-height-helper>
1653  
1654  <header
1655    x-ref="header"
1656    class="relative z-10 text-scheme-text header-glass"
1657    data-color-scheme="scheme1"
1658  >
1659    <nav
1660      class="relative hidden lg:block"
1661      aria-label="Primary"
1662    >
1663      <div class="flex items-stretch px-section-horizontal-spacing justify-between flex-wrap ">
1664        <div class="flex items-stretch">
1665          
1666            <div class="flex">
1667              <a
1668    href="/"
1669    class="break-word my-auto inline-block py-4"
1670  >
1671    
1672    
1673      <div class="max-w-[var(--logo-max-width)]">
1674        
1675<img
1676            src="//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=90"
1677            srcset="//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=80 80w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=160 160w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=240 240w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=90 90w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=180 180w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=270 270w
1678            "
1679            width="543"
1680            height="397"
1681            loading="eager"
1682            
1683              sizes="(min-width: 1024px) 90px, 80px"
1684            
1685            alt="The Print Room"
1686            
1687          >
1688        
1689
1690        
1691      </div>
1692    
1693    
1694  </a>
1695            </div>
1696          
1697          
1698        </div>
1699
1700        
1701          
1702
1703
1704        <a
1705          
1706          class="flex py-4 relative self-stretch inline-flex flex-col"
1707          href="/collections/product-library"
1708        >
1709          <span class="m-auto inline-block">Products</span></a>
1710      
1711    
1712<data-island
1713        x-data="{
1714          expanded: false,
1715          hoverTimeout: null,
1716          openDropdown() {
1717            clearTimeout(this.hoverTimeout);
1718            this.expanded = true;
1719            this.$nextTick(() => {
1720              const header = this.$el.closest('header');
1721              const dd = this.$el.querySelector('.dropdown-glass');
1722              if (header && dd) {
1723                header.style.setProperty('--dropdown-h', dd.offsetHeight + 'px');
1724              }
1725            });
1726          },
1727          closeDropdown() {
1728            this.hoverTimeout = setTimeout(() => {
1729              this.expanded = false;
1730            }, 150);
1731          }
1732        }"
1733        @mouseenter="openDropdown()"
1734        @mouseleave="closeDropdown()"
1735        @focusin="openDropdown()"
1736        @focusout="if ($event.relatedTarget && !$el.contains($event.relatedTarget)) closeDropdown()"
1737        class="no-js-focus-wrapper flex self-stretch header-dropdown"
1738        
1739      >
1740        <button
1741          class="inline-flex py-4 items-center header-menu-item"
1742          @click="expanded = !expanded"
1743          :aria-expanded="expanded ? true : 'false'"
1744          aria-controls="menu0"
1745        >
1746          <span class="inline-block pr-1">Services</span><span
1747              class="mr-1 inline-block h-3 w-3 origin-center align-middle"
1748              x-show="!expanded"
1749            ><svg
1750  class="theme-icon"
1751  xmlns="http://www.w3.org/2000/svg"
1752  fill="none"
1753  viewBox="0 0 24 24"
1754>
1755  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
1756</svg>
1757</span>
1758            <span
1759              class="mr-1 inline-block h-3 w-3 origin-center align-middle"
1760              x-show="expanded"
1761              style="display: none;"
1762            ><svg
1763  class="theme-icon"
1764  xmlns="http://www.w3.org/2000/svg"
1765  fill="none"
1766  viewBox="0 0 24 24"
1767>
1768  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
1769</svg>
1770</span></button>
1771        <div
1772          id="menu0"
1773          class="no-js-focus-container absolute top-full z-20 dropdown-glass text-scheme-text bottom-auto left-0 w-full"
1774          x-cloak
1775          x-show="expanded"
1776          x-transition:enter="transition ease-out duration-300 motion-reduce:duration-0"
1777          x-transition:enter-start="opacity-0 -translate-y-2 scale-[0.98]"
1778          x-transition:enter-end="opacity-100 translate-y-0 scale-100"
1779          x-transition:leave="transition ease-in duration-200 motion-reduce:duration-0"
1780          x-transition:leave-start="opacity-100 translate-y-0 scale-100"
1781          x-transition:leave-end="opacity-0 -translate-y-1 scale-[0.99]"
1782          style="transform-origin: top center;"
1783          data-color-scheme=""
1784        ><div class=" text-left"><div class="grid gap-gutter bg-gridline-color grid-cols-4">
1785                
1786        <div class="bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text">
1787          <a
1788            
1789            class="font-heading inline-block py-1"
1790            href="/pages/services"
1791          >
1792            Services
1793          </a>
1794        </div>
1795      
1796                
1797
1798
1799<div class="bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text">
1800              <h2 class="font-heading mb-2">
1801                
1802                  <a
1803                    
1804                    class="inline-block py-1"
1805                    href="/pages/product-capabilities"
1806                    
1807                  >
1808                    Production capabilities
1809                  </a>
1810                
1811              </h2>
1812              <ul><li class="">
1813                    <a
1814                      
1815                      class="inline-block py-1"
1816                      href="/pages/custom-manufactured"
1817                    >Custom-manufactured</a>
1818                  </li><li class="">
1819                    <a
1820                      
1821                      class="inline-block py-1"
1822                      href="/pages/screen-printing"
1823                    >Screen printing</a>
1824                  </li><li class="">
1825                    <a
1826                      
1827                      class="inline-block py-1"
1828                      href="/pages/embroidery"
1829                    >Embroidery</a>
1830                  </li><li class="">
1831                    <a
1832                      
1833                      class="inline-block py-1"
1834                      href="/pages/heat-transfers"
1835                    >Heat transfers</a>
1836                  </li><li class="">
1837                    <a
1838                      
1839                      class="inline-block py-1"
1840                      href="/pages/finishing"
1841                    >Finishing</a>
1842                  </li></ul>
1843            </div><div class="bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text">
1844              <h2 class="font-heading mb-2">
1845                
1846                  <a
1847                    
1848                    class="inline-block py-1"
1849                    href="/pages/partner-services"
1850                    
1851                  >
1852                    Partner services
1853                  </a>
1854                
1855              </h2>
1856              <ul><li class="">
1857                    <a
1858                      
1859                      class="inline-block py-1"
1860                      href="/pages/client-portal"
1861                    >Client portal</a>
1862                  </li><li class="">
1863                    <a
1864                      
1865                      class="inline-block py-1"
1866                      href="/pages/fundraising-pre-orders"
1867                    >Fundraise & pre-order</a>
1868                  </li><li class="">
1869                    <a
1870                      
1871                      class="inline-block py-1"
1872                      href="/pages/repurpose-initiative"
1873                    >Repurpose initiative</a>
1874                  </li></ul>
1875            </div><div class="bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text">
1876              <h2 class="font-heading mb-2">
1877                
1878                  <a
1879                    
1880                    class="inline-block py-1"
1881                    href="/pages/popular-services"
1882                    
1883                  >
1884                    Popular services
1885                  </a>
1886                
1887              </h2>
1888              <ul><li class="">
1889                    <a
1890                      
1891                      class="inline-block py-1"
1892                      href="/pages/school-leavers-gear"
1893                    >School leavers gear</a>
1894                  </li><li class="">
1895                    <a
1896                      
1897                      class="inline-block py-1"
1898                      href="/pages/tshirt-printing"
1899                    >Custom t-shirt printing</a>
1900                  </li></ul>
1901            </div>
1902</div></div></div>
1903      </data-island>
1904
1905
1906
1907
1908        <a
1909          
1910          class="flex py-4 relative self-stretch inline-flex flex-col"
1911          href="/pages/responsibility"
1912        >
1913          <span class="m-auto inline-block">Responsibility</span></a>
1914      
1915    
1916<data-island
1917        x-data="{
1918          expanded: false,
1919          hoverTimeout: null,
1920          openDropdown() {
1921            clearTimeout(this.hoverTimeout);
1922            this.expanded = true;
1923            this.$nextTick(() => {
1924              const header = this.$el.closest('header');
1925              const dd = this.$el.querySelector('.dropdown-glass');
1926              if (header && dd) {
1927                header.style.setProperty('--dropdown-h', dd.offsetHeight + 'px');
1928              }
1929            });
1930          },
1931          closeDropdown() {
1932            this.hoverTimeout = setTimeout(() => {
1933              this.expanded = false;
1934            }, 150);
1935          }
1936        }"
1937        @mouseenter="openDropdown()"
1938        @mouseleave="closeDropdown()"
1939        @focusin="openDropdown()"
1940        @focusout="if ($event.relatedTarget && !$el.contains($event.relatedTarget)) closeDropdown()"
1941        class="no-js-focus-wrapper flex self-stretch header-dropdown"
1942        style="position: relative;"
1943      >
1944        <button
1945          class="inline-flex py-4 items-center header-menu-item"
1946          @click="expanded = !expanded"
1947          :aria-expanded="expanded ? true : 'false'"
1948          aria-controls="menu1"
1949        >
1950          <span class="inline-block pr-1">Our story</span><span
1951              class="mr-1 inline-block h-3 w-3 origin-center align-middle"
1952              x-show="!expanded"
1953            ><svg
1954  class="theme-icon"
1955  xmlns="http://www.w3.org/2000/svg"
1956  fill="none"
1957  viewBox="0 0 24 24"
1958>
1959  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
1960</svg>
1961</span>
1962            <span
1963              class="mr-1 inline-block h-3 w-3 origin-center align-middle"
1964              x-show="expanded"
1965              style="display: none;"
1966            ><svg
1967  class="theme-icon"
1968  xmlns="http://www.w3.org/2000/svg"
1969  fill="none"
1970  viewBox="0 0 24 24"
1971>
1972  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
1973</svg>
1974</span></button>
1975        <div
1976          id="menu1"
1977          class="no-js-focus-container absolute top-full z-20 dropdown-glass text-scheme-text gs-dropdown-content nav-dropdown-content"
1978          x-cloak
1979          x-show="expanded"
1980          x-transition:enter="transition ease-out duration-300 motion-reduce:duration-0"
1981          x-transition:enter-start="opacity-0 -translate-y-2 scale-[0.98]"
1982          x-transition:enter-end="opacity-100 translate-y-0 scale-100"
1983          x-transition:leave="transition ease-in duration-200 motion-reduce:duration-0"
1984          x-transition:leave-start="opacity-100 translate-y-0 scale-100"
1985          x-transition:leave-end="opacity-0 -translate-y-1 scale-[0.99]"
1986          style="transform-origin: top left;"
1987          data-color-scheme=""
1988        ><a
1989                href="/pages/in-good-company-with"
1990                
1991              >In good company with…</a><a
1992                href="/pages/about-print-room"
1993                
1994              >Our origins</a></div>
1995      </data-island>
1996
1997<data-island
1998          x-data="{
1999            expanded: false,
2000            hoverTimeout: null,
2001            openDropdown() {
2002              clearTimeout(this.hoverTimeout);
2003              this.expanded = true;
2004              this.$nextTick(() => {
2005                const header = this.$el.closest('header');
2006                const dd = this.$el.querySelector('.dropdown-glass');
2007                if (header && dd) {
2008                  header.style.setProperty('--dropdown-h', dd.offsetHeight + 'px');
2009                }
2010              });
2011            },
2012            closeDropdown() {
2013              this.hoverTimeout = setTimeout(() => {
2014                this.expanded = false;
2015              }, 150);
2016            }
2017          }"
2018          @mouseenter="openDropdown()"
2019          @mouseleave="closeDropdown()"
2020          @focusin="openDropdown()"
2021          @focusout="if ($event.relatedTarget && !$el.contains($event.relatedTarget)) closeDropdown()"
2022          class="no-js-focus-wrapper flex items-center self-stretch header-dropdown"
2023          style="position: relative;"
2024        >
2025          <button
2026            class="gs-pill"
2027            :class="{ 'is-active': expanded }"
2028            @click="expanded = !expanded"
2029            :aria-expanded="expanded ? 'true' : 'false'"
2030          >
2031            <span>Get started +</span>
2032          </button>
2033          <div
2034            class="no-js-focus-container absolute top-full z-20 dropdown-glass text-scheme-text gs-dropdown-content"
2035            x-cloak
2036            x-show="expanded"
2037            x-transition:enter="transition ease-out duration-300 motion-reduce:duration-0"
2038            x-transition:enter-start="opacity-0 -translate-y-2"
2039            x-transition:enter-end="opacity-100 translate-y-0"
2040            x-transition:leave="transition ease-in duration-200 motion-reduce:duration-0"
2041            x-transition:leave-start="opacity-100 translate-y-0"
2042            x-transition:leave-end="opacity-0 -translate-y-1"
2043            style="transform-origin: top left;"
2044            data-color-scheme=""
2045          ><a href="/collections/product-library">Start a project</a><a href="/pages/book-a-call">Book a call</a></div>
2046        </data-island>
2047
2048        
2049<div class="flex items-stretch justify-end gap-x-4 text-right "><div class="ml-4 my-auto shrink-0"><form method="post" action="/localization" id="header-localization-form" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/blogs/the-print-room-nz" /><div class="flex gap-4 justify-end max-lg:hidden"><div class="inline-block shrink-0 select-none">
2050        <h2 class="sr-only" id="country-heading-header">
2051          Country/region
2052        </h2>
2053        <data-island
2054          class="relative"
2055          x-data="{ expanded: false }"
2056          @keydown.escape.prevent.stop="expanded = false"
2057          @click.outside="expanded = false"
2058        >
2059          <button
2060            type="button"
2061            class="text-base py-4"
2062            :aria-expanded="expanded"
2063            aria-controls="country-list-header"
2064            aria-describedby="country-heading-header"
2065            @click.prevent="expanded = ! expanded"
2066          >
2067            United States (USD
2068            $)
2069            <span
2070              class="rotate ml-1 inline-block w-3 origin-center transform fill-current transition"
2071              :class="{ 'rotate-180': expanded }"
2072            >
2073              <svg
2074  class="theme-icon"
2075  xmlns="http://www.w3.org/2000/svg"
2076  fill="none"
2077  viewBox="0 0 24 24"
2078>
2079  <path stroke="currentColor" d="M1.5 7 12 17.5 22.5 7" vector-effect="non-scaling-stroke"/>
2080</svg>
2081
2082            </span>
2083          </button>
2084          <div
2085            class="absolute top-full left-0 right-auto"
2086            x-show="expanded"
2087            style="display: none;"
2088          >
2089            <ul
2090              id="country-list-header"
2091              class="relative z-10 flex max-h-[30vh] w-max max-w-[theme(spacing.64)] snap-y snap-mandatory flex-col gap-[--text-border-width] overflow-y-auto border-text border-gridline-color bg-gridline-color text-base"
2092              x-transition:enter="transition ease duration-300"
2093              x-transition:enter-start="opacity-0"
2094              x-transition:enter-end="opacity-100"
2095              x-transition:leave="transition ease duration-300"
2096              x-transition:leave-start="opacity-100"
2097              x-transition:leave-end="opacity-0"
2098              :aria-hidden="! expanded"
2099            >
2100              
2101                <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2102                  <button
2103                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2104                    type="button"
2105                    
2106                    @click.prevent="$refs.input.value = 'AU'; $root.closest('form').submit();"
2107                  >
2108                    <span class="border-transparent border-b-text">Australia (AUD
2109                      $)</span
2110                    >
2111                  </button>
2112                </li>
2113                <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2114                  <button
2115                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2116                    type="button"
2117                    
2118                    @click.prevent="$refs.input.value = 'CN'; $root.closest('form').submit();"
2119                  >
2120                    <span class="border-transparent border-b-text">China (CNY
2121                      ¥)</span
2122                    >
2123                  </button>
2124                </li>
2125                <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2126                  <button
2127                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2128                    type="button"
2129                    
2130                    @click.prevent="$refs.input.value = 'FR'; $root.closest('form').submit();"
2131                  >
2132                    <span class="border-transparent border-b-text">France (EUR
2133                      €)</span
2134                    >
2135                  </button>
2136                </li>
2137                <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2138                  <button
2139                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2140                    type="button"
2141                    
2142                    @click.prevent="$refs.input.value = 'NZ'; $root.closest('form').submit();"
2143                  >
2144                    <span class="border-transparent border-b-text">New Zealand (NZD
2145                      $)</span
2146                    >
2147                  </button>
2148                </li>
2149                <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2150                  <button
2151                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2152                    type="button"
2153                    
2154                    @click.prevent="$refs.input.value = 'GB'; $root.closest('form').submit();"
2155                  >
2156                    <span class="border-transparent border-b-text">United Kingdom (GBP
2157                      £)</span
2158                    >
2159                  </button>
2160                </li>
2161                <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2162                  <button
2163                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2164                    type="button"
2165                    
2166                      aria-current="true"
2167                    
2168                    @click.prevent="$refs.input.value = 'US'; $root.closest('form').submit();"
2169                  >
2170                    <span class="border-scheme-text border-b-text">United States (USD
2171                      $)</span
2172                    >
2173                  </button>
2174                </li></ul>
2175          </div>
2176
2177          <input
2178            x-ref="input"
2179            type="hidden"
2180            name="country_code"
2181            id="CountrySelector"
2182            value="US"
2183          >
2184        </data-island>
2185      </div></div></form></div>
2186            <div class="flex items-stretch whitespace-nowrap">
2187              <data-island
2188  x-data="{ searchOpen: false }"
2189  class="contents"
2190>
2191  <a
2192    x-ref="searchToggle"
2193    @click.prevent="searchOpen = true"
2194    @keydown.space.prevent="searchOpen = true"
2195    class="inline-flex py-4 h-full"
2196    href="/search"
2197    :role="`button`"
2198  ><span class="sr-only">Search</span>
2199      <span class="my-auto inline-block h-6 w-6 align-middle"><svg
2200  class="theme-icon"
2201  xmlns="http://www.w3.org/2000/svg"
2202  fill="none"
2203  viewBox="0 0 24 24"
2204>
2205  <path stroke="currentColor" d="M2 11a9 9 0 1 0 18 0 9 9 0 0 0-18 0Zm15.364 6.364L22 22" vector-effect="non-scaling-stroke"/>
2206</svg>
2207</span></a>
2208
2209  <data-island
2210    class="absolute z-20 border-y-gridline border-gridline-color bg-scheme-background px-section-horizontal-spacing py-2 text-scheme-text  w-full top-full bottom-auto left-0"
2211    x-cloak
2212    x-show="searchOpen"
2213    x-transition:enter="ease duration-200"
2214    x-transition:enter-start="opacity-0"
2215    x-transition:enter-end="opacity-100"
2216    x-transition:leave="ease duration-200"
2217    x-transition:leave-start="opacity-100"
2218    x-transition:leave-end="opacity-0"
2219    
2220      x-data="PredictiveSearch('product,collection,article,page,query')"
2221      x-trap.inert.noscroll="resultsOpen"
2222      @keyup="onKeyup"
2223      @keydown="onKeydown"
2224      @click.outside.prevent="close()"
2225      @keyup.escape.prevent.stop="close(true, $refs.searchToggle)"
2226      @focusin.window="( searchOpen && ! $root.contains($event.target) ) && close()"
2227      style="--results-height: calc(100vh - var(--header-group-height) - var(--search-bar-height) + var(--gridline-width));"
2228      src="//printroom.co/cdn/shop/t/59/assets/island-predictive-search.bundle.js?v=181601895277339900721787098435"
2229    
2230    x-ref="searchComponent"
2231    data-color-scheme="scheme1"
2232    on="idle"
2233  >
2234    <div
2235      class="w-full whitespace-normal"
2236    >
2237      <form
2238        action="/search"
2239        method="get"
2240        class="predictive-search-form input-group search"
2241        role="search"
2242      >
2243        <input type="hidden" name="options[prefix]" value="last"><label
2244          for="search-logo_left_menu_spread-desktop"
2245          class="hidden"
2246        >Submit</label>
2247
2248        <div
2249          class="flex items-center justify-between"
2250        >
2251          <button
2252            class="mr-4 py-2"
2253            aria-label="Submit"
2254            type="submit"
2255          >
2256            <span class="inline-block h-6 w-6 align-middle"><svg
2257  class="theme-icon"
2258  xmlns="http://www.w3.org/2000/svg"
2259  fill="none"
2260  viewBox="0 0 24 24"
2261>
2262  <path stroke="currentColor" d="M2 11a9 9 0 1 0 18 0 9 9 0 0 0-18 0Zm15.364 6.364L22 22" vector-effect="non-scaling-stroke"/>
2263</svg>
2264</span>
2265            <span class="sr-only">Submit</span>
2266          </button>
2267          <input
2268            id="search-logo_left_menu_spread-desktop"
2269            type="search"
2270            name="q"
2271            value=""
2272            placeholder="Search"
2273            class="font-body block w-full bg-transparent placeholder-current"
2274            aria-label="Search"
2275            data-search-input
2276            
2277              :aria-expanded="resultsOpen"
2278              :aria-activedescendant="resultsOpen ? 'predictive-search-results' : false"
2279              aria-owns="predictive-search-results"
2280              aria-controls="predictive-search-results"
2281              aria-autocomplete="list"
2282              autocorrect="off"
2283              autocomplete="off"
2284              autocapitalize="off"
2285              spellcheck="false"
2286              x-ref="input"
2287              x-model.debounce.300="rawQuery"
2288              @focus="onFocus"
2289            
2290          >
2291          <button
2292            class="ml-4 py-2"
2293            
2294              @click="close()"
2295            
2296            type="button"
2297          >
2298            <span class="sr-only">Close</span>
2299            <span class="inline-block h-6 w-6 align-middle"><svg
2300  class="theme-icon"
2301  xmlns="http://www.w3.org/2000/svg"
2302  fill="none"
2303  viewBox="0 0 24 24"
2304>
2305  <path stroke="currentColor" d="m1.5 1.5 21 21m0-21-21 21" vector-effect="non-scaling-stroke"/>
2306</svg>
2307</span>
2308          </button>
2309        </div><div
2310            tabindex="-1"
2311            x-cloak
2312            class="predictive-search-results absolute left-0 right-0 top-[calc(100%_+_var(--gridline-width))] z-50 h-screen text-scheme-text transition-colors duration-300 ease-out"
2313          >
2314            <template x-if="loading">
2315              <div class="border-b-gridline border-gridline-color bg-scheme-background">
2316                <div
2317                  class="mx-auto py-6 text-center"
2318                >
2319                  <div>Loading&hellip;</div>
2320                </div>
2321              </div>
2322            </template>
2323            <template x-if="resultsOpen">
2324              <div
2325                x-show="!loading && resultsHTML && resultsOpen"
2326                class="px-section max-h-[--results-height] scroll-py-5 overflow-hidden overflow-y-auto border-b-gridline border-gridline-color bg-scheme-background"
2327                x-html-if-set="resultsHTML"
2328              ></div>
2329            </template>
2330          </div>
2331          <span
2332            class="predictive-search-status sr-only"
2333            role="status"
2334            aria-hidden="true"
2335          ></span></form>
2336    </div>
2337  </data-island>
2338</data-island>
2339
2340            </div>
2341          
2342
2343          <div class="flex items-stretch whitespace-nowrap gap-4"><style>
2344  @keyframes quote-badge-pulse {
2345    0% { transform: scale(1); }
2346    50% { transform: scale(1.22); }
2347    100% { transform: scale(1); }
2348  }
2349
2350  @keyframes quote-icon-pulse {
2351    0% { transform: scale(1); }
2352    50% { transform: scale(1.12); }
2353    100% { transform: scale(1); }
2354  }
2355
2356  .quote-badge-animate {
2357    animation: quote-badge-pulse 0.4s ease-in-out;
2358  }
2359  .quote-icon-animate {
2360    animation: quote-icon-pulse 0.4s ease-in-out;
2361  }
2362  .quote-badge {
2363    min-width: 1.3rem;
2364    padding-inline: 0.22rem;
2365    box-shadow: 0 10px 24px rgba(43, 57, 144, 0.22);
2366  }
2367  .quote-tooltip {
2368    position: absolute;
2369    top: calc(100% + 8px);
2370    right: -10px;
2371    width: 152px;
2372    padding: 15px 16px;
2373    border-radius: 20px;
2374    font-size: 14px;
2375    font-style: italic;
2376    line-height: 17px;
2377    color: #000;
2378    background: #FBFBF6;
2379    border: 1px solid #000;
2380    box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.15);
2381    z-index: 1000;
2382    cursor: pointer;
2383    white-space: normal;
2384    text-align: left;
2385  }
2386  .quote-tooltip::before {
2387    content: '';
2388    position: absolute;
2389    top: -7px;
2390    right: 24px;
2391    width: 14px;
2392    height: 14px;
2393    background: #FBFBF6;
2394    border-top: 1px solid #000;
2395    border-left: 1px solid #000;
2396    transform: rotate(45deg);
2397  }
2398  @media (max-width: 640px) {
2399    .quote-tooltip {
2400      right: -10px;
2401    }
2402  }
2403</style>
2404
2405<div
2406  class="relative"
2407  x-data="{
2408    showTooltip: false,
2409    tooltipDismissed: false,
2410    animating: false,
2411    tooltipTimer: null,
2412    dismissTooltip() {
2413      this.showTooltip = false;
2414      this.tooltipDismissed = true;
2415      if (this.tooltipTimer) clearTimeout(this.tooltipTimer);
2416      if (this.tooltipDelayTimer) clearTimeout(this.tooltipDelayTimer);
2417    },
2418    tooltipDelayTimer: null,
2419    triggerTooltip() {
2420      try {
2421        if (this.tooltipDismissed || sessionStorage.getItem('psstShown')) return;
2422      } catch (error) {
2423        if (this.tooltipDismissed) return;
2424      }
2425      if (this.tooltipDelayTimer) clearTimeout(this.tooltipDelayTimer);
2426      this.tooltipDelayTimer = setTimeout(() => {
2427        if (this.tooltipDismissed) return;
2428        try { sessionStorage.setItem('psstShown', '1'); } catch(e) {}
2429        this.showTooltip = true;
2430        if (this.tooltipTimer) clearTimeout(this.tooltipTimer);
2431        this.tooltipTimer = setTimeout(() => { this.showTooltip = false; }, 15000);
2432      }, 5000);
2433    },
2434    pulseIcon() {
2435      this.animating = true;
2436      setTimeout(() => { this.animating = false; }, 450);
2437    }
2438  }"
2439  @quote-item-added.document="pulseIcon(); triggerTooltip()"
2440>
2441  <a
2442    href="/pages/general-quote"
2443    class="inline-flex min-h-10 items-center py-4 h-full"
2444    :role="`button`"
2445    :aria-expanded="$store.modals.rightDrawer.contents === 'favorites'"
2446    @click.prevent="$store.modals.open('favorites'); dismissTooltip(); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'quote_drawer_opened', quote_count: $store.favorites.count, page_path: window.location.pathname })"
2447    @keydown.space.prevent="$store.modals.open('favorites'); dismissTooltip()"
2448    aria-label="Open your quote"
2449  ><div class="pointer-events-none relative my-auto align-middle" :class="{ 'quote-icon-animate': animating }"><span class="inline-block h-6 w-6 align-top [&_*]:pointer-events-none"><span class="h-full w-full">
2450  <svg
2451    aria-hidden="true"
2452    focusable="false"
2453    role="presentation"
2454    class="icon icon-quote-list-outline"
2455    viewBox="0 0 24 24"
2456    fill="none"
2457  ><rect x="3" y="1" width="18" height="22" rx="2.5" ry="2.5" stroke="currentColor" stroke-width="1.5"></rect><circle cx="7.5" cy="7.5" r="1" fill="currentColor"></circle>
2458    <line x1="10" y1="7.5" x2="17.5" y2="7.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></line>
2459    <circle cx="7.5" cy="11" r="1" fill="currentColor"></circle>
2460    <line x1="10" y1="11" x2="17.5" y2="11" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></line>
2461    <circle cx="7.5" cy="14.5" r="1" fill="currentColor"></circle>
2462    <line x1="10" y1="14.5" x2="17.5" y2="14.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></line>
2463    <circle cx="7.5" cy="18" r="1" fill="currentColor"></circle>
2464    <line x1="10" y1="18" x2="17.5" y2="18" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></line>
2465  </svg>
2466</span>
2467</span><span
2468          x-show="$store.favorites.count > 0"
2469          x-cloak
2470          class="quote-badge absolute flex items-center justify-center rounded-full text-[10px] font-bold"
2471          style="background-color: #4B4D72; color: #fff; width: 18px; height: 18px; top: -7px; right: -8px;"
2472          :class="{ 'quote-badge-animate': animating }"
2473          x-text="$store.favorites.count"
2474        ></span>
2475        <span class="sr-only" x-text="'Your Quote: ' + $store.favorites.countWithText()">
2476          Your Quote: 0 items
2477        </span>
2478      </div></a><div
2479    x-show="showTooltip"
2480    x-transition:enter="transition ease-out duration-200"
2481    x-transition:enter-start="opacity-0 translate-y-1"
2482    x-transition:enter-end="opacity-100 translate-y-0"
2483    x-transition:leave="transition ease-in duration-150"
2484    x-transition:leave-start="opacity-100"
2485    x-transition:leave-end="opacity-0"
2486    x-cloak
2487    class="quote-tooltip"
2488    @click="dismissTooltip()"
2489  >
2490    Hi, your favourite products are here.
2491  </div>
2492</div>
2493
2494  <a
2495    href="/cart"
2496    class="inline-flex py-4 h-full"
2497    
2498  ><div class="pointer-events-none relative my-auto align-middle">
2499        <span
2500          x-show="$store.cartCount.count > 0"
2501          class="absolute right-0 top-1 h-2 w-2 rounded-full"
2502          style="background-color: #f1ffa5;"
2503        ></span>
2504        <span class="inline-block h-6 w-6 fill-current align-top [&_*]:pointer-events-none"><svg
2505  class="theme-icon"
2506  xmlns="http://www.w3.org/2000/svg"
2507  fill="none"
2508  viewBox="0 0 24 24"
2509>
2510  <path stroke="currentColor" d="M2 7h20v15H2V7Zm15 0v-.2A4.8 4.8 0 0 0 12.2 2h-.4A4.8 4.8 0 0 0 7 6.8V7" vector-effect="non-scaling-stroke"/>
2511</svg>
2512</span>
2513        <span class="sr-only" x-text="$store.cartCount.countWithText()">
2514          
25150 items
2516        </span>
2517      </div></a>
2518          </div>
2519        </div>
2520      </div>
2521
2522      
2523    </nav>
2524
2525    
2526    <nav
2527      aria-label="Header"
2528      class="lg:hidden"
2529    >
2530      <div class="flex items-center justify-between px-section-horizontal-spacing lg:relative">
2531        <div class="flex gap-2 items-center">
2532          
2533            <div>
2534              <a
2535    href="/"
2536    class="break-word my-auto inline-block py-4"
2537  >
2538    
2539    
2540      <div class="max-w-[var(--logo-max-width)]">
2541        
2542<img
2543            src="//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=90"
2544            srcset="//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=80 80w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=160 160w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=240 240w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=90 90w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=180 180w,//printroom.co/cdn/shop/files/printroom_primary_logo.svg?v=1704916358&width=270 270w
2545            "
2546            width="543"
2547            height="397"
2548            loading="eager"
2549            
2550              sizes="(min-width: 1024px) 90px, 80px"
2551            
2552            alt="The Print Room"
2553            
2554          >
2555        
2556
2557        
2558      </div>
2559    
2560    
2561  </a>
2562            </div>
2563          
2564          
2565        </div>
2566
2567        
2568
2569        <div class="flex justify-end gap-2 text-right">
2570          
2571            <button
2572    class="inline-block no-js:hidden py-4"
2573    :aria-expanded="$store.modals.leftDrawer.contents === 'sidebar'"
2574    @click="$store.modals.open('sidebar')"
2575  ><span class="sr-only pointer-events-none">Menu</span>
2576      <span class="pointer-events-none inline-block h-6 w-6 align-middle"><svg
2577  class="theme-icon"
2578  xmlns="http://www.w3.org/2000/svg"
2579  fill="none"
2580  viewBox="0 0 24 24"
2581>
2582  <path stroke="currentColor" d="M1 7.364h22M1 15.636h22" vector-effect="non-scaling-stroke"/>
2583</svg>
2584</span></button>
2585          
2586
2587          
2588
2589          
2590            <div class="whitespace-nowrap lg:ml-4">
2591              <data-island
2592  x-data="{ searchOpen: false }"
2593  class="contents"
2594>
2595  <a
2596    x-ref="searchToggle"
2597    @click.prevent="searchOpen = true"
2598    @keydown.space.prevent="searchOpen = true"
2599    class="inline-flex py-4 h-full"
2600    href="/search"
2601    :role="`button`"
2602  ><span class="sr-only">Search</span>
2603      <span class="my-auto inline-block h-6 w-6 align-middle"><svg
2604  class="theme-icon"
2605  xmlns="http://www.w3.org/2000/svg"
2606  fill="none"
2607  viewBox="0 0 24 24"
2608>
2609  <path stroke="currentColor" d="M2 11a9 9 0 1 0 18 0 9 9 0 0 0-18 0Zm15.364 6.364L22 22" vector-effect="non-scaling-stroke"/>
2610</svg>
2611</span></a>
2612
2613  <data-island
2614    class="absolute z-20 border-y-gridline border-gridline-color bg-scheme-background px-section-horizontal-spacing py-2 text-scheme-text  w-full top-full bottom-auto left-0"
2615    x-cloak
2616    x-show="searchOpen"
2617    x-transition:enter="ease duration-200"
2618    x-transition:enter-start="opacity-0"
2619    x-transition:enter-end="opacity-100"
2620    x-transition:leave="ease duration-200"
2621    x-transition:leave-start="opacity-100"
2622    x-transition:leave-end="opacity-0"
2623    
2624      x-data="PredictiveSearch('product,collection,article,page,query')"
2625      x-trap.inert.noscroll="resultsOpen"
2626      @keyup="onKeyup"
2627      @keydown="onKeydown"
2628      @click.outside.prevent="close()"
2629      @keyup.escape.prevent.stop="close(true, $refs.searchToggle)"
2630      @focusin.window="( searchOpen && ! $root.contains($event.target) ) && close()"
2631      style="--results-height: calc(100vh - var(--header-group-height) - var(--search-bar-height) + var(--gridline-width));"
2632      src="//printroom.co/cdn/shop/t/59/assets/island-predictive-search.bundle.js?v=181601895277339900721787098435"
2633    
2634    x-ref="searchComponent"
2635    data-color-scheme="scheme1"
2636    on="idle"
2637  >
2638    <div
2639      class="w-full whitespace-normal"
2640    >
2641      <form
2642        action="/search"
2643        method="get"
2644        class="predictive-search-form input-group search"
2645        role="search"
2646      >
2647        <input type="hidden" name="options[prefix]" value="last"><label
2648          for="search-logo_left_menu_spread-mobile"
2649          class="hidden"
2650        >Submit</label>
2651
2652        <div
2653          class="flex items-center justify-between"
2654        >
2655          <button
2656            class="mr-4 py-2"
2657            aria-label="Submit"
2658            type="submit"
2659          >
2660            <span class="inline-block h-6 w-6 align-middle"><svg
2661  class="theme-icon"
2662  xmlns="http://www.w3.org/2000/svg"
2663  fill="none"
2664  viewBox="0 0 24 24"
2665>
2666  <path stroke="currentColor" d="M2 11a9 9 0 1 0 18 0 9 9 0 0 0-18 0Zm15.364 6.364L22 22" vector-effect="non-scaling-stroke"/>
2667</svg>
2668</span>
2669            <span class="sr-only">Submit</span>
2670          </button>
2671          <input
2672            id="search-logo_left_menu_spread-mobile"
2673            type="search"
2674            name="q"
2675            value=""
2676            placeholder="Search"
2677            class="font-body block w-full bg-transparent placeholder-current"
2678            aria-label="Search"
2679            data-search-input
2680            
2681              :aria-expanded="resultsOpen"
2682              :aria-activedescendant="resultsOpen ? 'predictive-search-results' : false"
2683              aria-owns="predictive-search-results"
2684              aria-controls="predictive-search-results"
2685              aria-autocomplete="list"
2686              autocorrect="off"
2687              autocomplete="off"
2688              autocapitalize="off"
2689              spellcheck="false"
2690              x-ref="input"
2691              x-model.debounce.300="rawQuery"
2692              @focus="onFocus"
2693            
2694          >
2695          <button
2696            class="ml-4 py-2"
2697            
2698              @click="close()"
2699            
2700            type="button"
2701          >
2702            <span class="sr-only">Close</span>
2703            <span class="inline-block h-6 w-6 align-middle"><svg
2704  class="theme-icon"
2705  xmlns="http://www.w3.org/2000/svg"
2706  fill="none"
2707  viewBox="0 0 24 24"
2708>
2709  <path stroke="currentColor" d="m1.5 1.5 21 21m0-21-21 21" vector-effect="non-scaling-stroke"/>
2710</svg>
2711</span>
2712          </button>
2713        </div><div
2714            tabindex="-1"
2715            x-cloak
2716            class="predictive-search-results absolute left-0 right-0 top-[calc(100%_+_var(--gridline-width))] z-50 h-screen text-scheme-text transition-colors duration-300 ease-out"
2717          >
2718            <template x-if="loading">
2719              <div class="border-b-gridline border-gridline-color bg-scheme-background">
2720                <div
2721                  class="mx-auto py-6 text-center"
2722                >
2723                  <div>Loading&hellip;</div>
2724                </div>
2725              </div>
2726            </template>
2727            <template x-if="resultsOpen">
2728              <div
2729                x-show="!loading && resultsHTML && resultsOpen"
2730                class="px-section max-h-[--results-height] scroll-py-5 overflow-hidden overflow-y-auto border-b-gridline border-gridline-color bg-scheme-background"
2731                x-html-if-set="resultsHTML"
2732              ></div>
2733            </template>
2734          </div>
2735          <span
2736            class="predictive-search-status sr-only"
2737            role="status"
2738            aria-hidden="true"
2739          ></span></form>
2740    </div>
2741  </data-island>
2742</data-island>
2743
2744            </div>
2745          
2746<div class="inline-block shrink-0 select-none whitespace-nowrap lg:ml-4">
2747            <data-island
2748              class="relative"
2749              x-data="{ expanded: false }"
2750              @keydown.escape.prevent.stop="expanded = false"
2751              @click.outside="expanded = false"
2752            >
2753              <button
2754                type="button"
2755                class="inline-flex py-4 h-full"
2756                :aria-expanded="expanded"
2757                aria-controls="currency-list-header"
2758                @click.prevent="expanded = ! expanded"
2759                aria-label="Currency selector"
2760              >
2761                <span class="my-auto inline-flex items-center gap-1">
2762                  <span class="inline-block h-6 w-6 align-middle">
2763                    <svg class="theme-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
2764  <circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="1.5" vector-effect="non-scaling-stroke" fill="none"/>
2765  <path stroke="currentColor" stroke-width="1.5" d="M12 6v12M8 10h8M8 14h8" vector-effect="non-scaling-stroke"/>
2766</svg>
2767                  </span>
2768                  <span class="text-xs font-medium">USD</span>
2769                </span>
2770                <span
2771                  class="rotate ml-1 inline-block w-3 origin-center transform fill-current transition my-auto"
2772                  :class="{ 'rotate-180': expanded }"
2773                >
2774                  <svg
2775  class="theme-icon"
2776  xmlns="http://www.w3.org/2000/svg"
2777  fill="none"
2778  viewBox="0 0 24 24"
2779>
2780  <path stroke="currentColor" d="M1.5 7 12 17.5 22.5 7" vector-effect="non-scaling-stroke"/>
2781</svg>
2782
2783                </span>
2784              </button>
2785              <div
2786                class="absolute top-full right-0"
2787                x-show="expanded"
2788                style="display: none;"
2789              >
2790                <form method="post" action="/localization" accept-charset="UTF-8" enctype="multipart/form-data">
2791                  <input type="hidden" name="form_type" value="localization">
2792                  <input type="hidden" name="utf8" value="✓">
2793                  <input type="hidden" name="_method" value="put">
2794                  <input type="hidden" name="return_to" value="/blogs/the-print-room-nz">
2795                  <ul
2796                    id="currency-list-header"
2797                    class="relative z-50 flex max-h-[30vh] w-max max-w-[theme(spacing.64)] snap-y snap-mandatory flex-col gap-[--text-border-width] overflow-y-auto border-text border-gridline-color bg-gridline-color text-base"
2798                    x-transition:enter="transition ease duration-300"
2799                    x-transition:enter-start="opacity-0"
2800                    x-transition:enter-end="opacity-100"
2801                    x-transition:leave="transition ease duration-300"
2802                    x-transition:leave-start="opacity-100"
2803                    x-transition:leave-end="opacity-0"
2804                    :aria-hidden="! expanded"
2805                  >
2806                    
2807                      <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2808                        <button
2809                          class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2810                          type="submit"
2811                          name="country_code"
2812                          value="AU"
2813                          
2814                        >
2815                          <span class="border-transparent border-b-text">AUD $<span class="ml-2 text-xs opacity-70">Australia</span></span
2816                          >
2817                        </button>
2818                      </li>
2819                      <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2820                        <button
2821                          class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2822                          type="submit"
2823                          name="country_code"
2824                          value="CN"
2825                          
2826                        >
2827                          <span class="border-transparent border-b-text">CNY ¥<span class="ml-2 text-xs opacity-70">China</span></span
2828                          >
2829                        </button>
2830                      </li>
2831                      <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2832                        <button
2833                          class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2834                          type="submit"
2835                          name="country_code"
2836                          value="FR"
2837                          
2838                        >
2839                          <span class="border-transparent border-b-text">EUR €<span class="ml-2 text-xs opacity-70">France</span></span
2840                          >
2841                        </button>
2842                      </li>
2843                      <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2844                        <button
2845                          class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2846                          type="submit"
2847                          name="country_code"
2848                          value="NZ"
2849                          
2850                        >
2851                          <span class="border-transparent border-b-text">NZD $<span class="ml-2 text-xs opacity-70">New Zealand</span></span
2852                          >
2853                        </button>
2854                      </li>
2855                      <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2856                        <button
2857                          class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2858                          type="submit"
2859                          name="country_code"
2860                          value="GB"
2861                          
2862                        >
2863                          <span class="border-transparent border-b-text">GBP £<span class="ml-2 text-xs opacity-70">United Kingdom</span></span
2864                          >
2865                        </button>
2866                      </li>
2867                      <li class="flex items-center bg-scheme-background px-4 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
2868                        <button
2869                          class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
2870                          type="submit"
2871                          name="country_code"
2872                          value="US"
2873                          
2874                            aria-current="true"
2875                          
2876                        >
2877                          <span class="border-scheme-text border-b-text">USD $<span class="ml-2 text-xs opacity-70">United States</span></span
2878                          >
2879                        </button>
2880                      </li></ul>
2881                </form>
2882              </div>
2883            </data-island>
2884          </div><div class="flex items-center whitespace-nowrap gap-2 lg:ml-4"><style>
2885  @keyframes quote-badge-pulse {
2886    0% { transform: scale(1); }
2887    50% { transform: scale(1.22); }
2888    100% { transform: scale(1); }
2889  }
2890
2891  @keyframes quote-icon-pulse {
2892    0% { transform: scale(1); }
2893    50% { transform: scale(1.12); }
2894    100% { transform: scale(1); }
2895  }
2896
2897  .quote-badge-animate {
2898    animation: quote-badge-pulse 0.4s ease-in-out;
2899  }
2900  .quote-icon-animate {
2901    animation: quote-icon-pulse 0.4s ease-in-out;
2902  }
2903  .quote-badge {
2904    min-width: 1.3rem;
2905    padding-inline: 0.22rem;
2906    box-shadow: 0 10px 24px rgba(43, 57, 144, 0.22);
2907  }
2908  .quote-tooltip {
2909    position: absolute;
2910    top: calc(100% + 8px);
2911    right: -10px;
2912    width: 152px;
2913    padding: 15px 16px;
2914    border-radius: 20px;
2915    font-size: 14px;
2916    font-style: italic;
2917    line-height: 17px;
2918    color: #000;
2919    background: #FBFBF6;
2920    border: 1px solid #000;
2921    box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.15);
2922    z-index: 1000;
2923    cursor: pointer;
2924    white-space: normal;
2925    text-align: left;
2926  }
2927  .quote-tooltip::before {
2928    content: '';
2929    position: absolute;
2930    top: -7px;
2931    right: 24px;
2932    width: 14px;
2933    height: 14px;
2934    background: #FBFBF6;
2935    border-top: 1px solid #000;
2936    border-left: 1px solid #000;
2937    transform: rotate(45deg);
2938  }
2939  @media (max-width: 640px) {
2940    .quote-tooltip {
2941      right: -10px;
2942    }
2943  }
2944</style>
2945
2946<div
2947  class="relative"
2948  x-data="{
2949    showTooltip: false,
2950    tooltipDismissed: false,
2951    animating: false,
2952    tooltipTimer: null,
2953    dismissTooltip() {
2954      this.showTooltip = false;
2955      this.tooltipDismissed = true;
2956      if (this.tooltipTimer) clearTimeout(this.tooltipTimer);
2957      if (this.tooltipDelayTimer) clearTimeout(this.tooltipDelayTimer);
2958    },
2959    tooltipDelayTimer: null,
2960    triggerTooltip() {
2961      try {
2962        if (this.tooltipDismissed || sessionStorage.getItem('psstShown')) return;
2963      } catch (error) {
2964        if (this.tooltipDismissed) return;
2965      }
2966      if (this.tooltipDelayTimer) clearTimeout(this.tooltipDelayTimer);
2967      this.tooltipDelayTimer = setTimeout(() => {
2968        if (this.tooltipDismissed) return;
2969        try { sessionStorage.setItem('psstShown', '1'); } catch(e) {}
2970        this.showTooltip = true;
2971        if (this.tooltipTimer) clearTimeout(this.tooltipTimer);
2972        this.tooltipTimer = setTimeout(() => { this.showTooltip = false; }, 15000);
2973      }, 5000);
2974    },
2975    pulseIcon() {
2976      this.animating = true;
2977      setTimeout(() => { this.animating = false; }, 450);
2978    }
2979  }"
2980  @quote-item-added.document="pulseIcon(); triggerTooltip()"
2981>
2982  <a
2983    href="/pages/general-quote"
2984    class="inline-flex min-h-10 items-center py-4 h-full"
2985    :role="`button`"
2986    :aria-expanded="$store.modals.rightDrawer.contents === 'favorites'"
2987    @click.prevent="$store.modals.open('favorites'); dismissTooltip(); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'quote_drawer_opened', quote_count: $store.favorites.count, page_path: window.location.pathname })"
2988    @keydown.space.prevent="$store.modals.open('favorites'); dismissTooltip()"
2989    aria-label="Open your quote"
2990  ><div class="pointer-events-none relative my-auto align-middle" :class="{ 'quote-icon-animate': animating }"><span class="inline-block h-6 w-6 align-top [&_*]:pointer-events-none"><span class="h-full w-full">
2991  <svg
2992    aria-hidden="true"
2993    focusable="false"
2994    role="presentation"
2995    class="icon icon-quote-list-outline"
2996    viewBox="0 0 24 24"
2997    fill="none"
2998  ><rect x="3" y="1" width="18" height="22" rx="2.5" ry="2.5" stroke="currentColor" stroke-width="1.5"></rect><circle cx="7.5" cy="7.5" r="1" fill="currentColor"></circle>
2999    <line x1="10" y1="7.5" x2="17.5" y2="7.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></line>
3000    <circle cx="7.5" cy="11" r="1" fill="currentColor"></circle>
3001    <line x1="10" y1="11" x2="17.5" y2="11" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></line>
3002    <circle cx="7.5" cy="14.5" r="1" fill="currentColor"></circle>
3003    <line x1="10" y1="14.5" x2="17.5" y2="14.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></line>
3004    <circle cx="7.5" cy="18" r="1" fill="currentColor"></circle>
3005    <line x1="10" y1="18" x2="17.5" y2="18" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></line>
3006  </svg>
3007</span>
3008</span><span
3009          x-show="$store.favorites.count > 0"
3010          x-cloak
3011          class="quote-badge absolute flex items-center justify-center rounded-full text-[10px] font-bold"
3012          style="background-color: #4B4D72; color: #fff; width: 18px; height: 18px; top: -7px; right: -8px;"
3013          :class="{ 'quote-badge-animate': animating }"
3014          x-text="$store.favorites.count"
3015        ></span>
3016        <span class="sr-only" x-text="'Your Quote: ' + $store.favorites.countWithText()">
3017          Your Quote: 0 items
3018        </span>
3019      </div></a><div
3020    x-show="showTooltip"
3021    x-transition:enter="transition ease-out duration-200"
3022    x-transition:enter-start="opacity-0 translate-y-1"
3023    x-transition:enter-end="opacity-100 translate-y-0"
3024    x-transition:leave="transition ease-in duration-150"
3025    x-transition:leave-start="opacity-100"
3026    x-transition:leave-end="opacity-0"
3027    x-cloak
3028    class="quote-tooltip"
3029    @click="dismissTooltip()"
3030  >
3031    Hi, your favourite products are here.
3032  </div>
3033</div>
3034
3035  <a
3036    href="/cart"
3037    class="inline-flex py-4 h-full"
3038    
3039  ><div class="pointer-events-none relative my-auto align-middle">
3040        <span
3041          x-show="$store.cartCount.count > 0"
3042          class="absolute right-0 top-1 h-2 w-2 rounded-full"
3043          style="background-color: #f1ffa5;"
3044        ></span>
3045        <span class="inline-block h-6 w-6 fill-current align-top [&_*]:pointer-events-none"><svg
3046  class="theme-icon"
3047  xmlns="http://www.w3.org/2000/svg"
3048  fill="none"
3049  viewBox="0 0 24 24"
3050>
3051  <path stroke="currentColor" d="M2 7h20v15H2V7Zm15 0v-.2A4.8 4.8 0 0 0 12.2 2h-.4A4.8 4.8 0 0 0 7 6.8V7" vector-effect="non-scaling-stroke"/>
3052</svg>
3053</span>
3054        <span class="sr-only" x-text="$store.cartCount.countWithText()">
3055          
30560 items
3057        </span>
3058      </div></a>
3059          </div>
3060        </div>
3061      </div>
3062    </nav>
3063  </header>
3064</data-island><noscript>
3065  <style data-shopify>
3066    .no-js-focus-wrapper:focus-within .no-js-focus-container {
3067      display: block !important;
3068    }
3069
3070    </style>
3071</noscript>
3072
3073<style>
3074  /* ── Get Started pill + dropdown ── */
3075  .gs-pill {
3076    display: inline-flex;
3077    align-items: center;
3078    padding: 0 20px;
3079    height: 39px;
3080    border: 1px solid #2a3a8e;
3081    border-radius: 40px;
3082    background: transparent;
3083    color: #2a3a8e;
3084    font-size: 17.3px;
3085    font-family: 'DM Sans', sans-serif;
3086    font-weight: 400;
3087    line-height: 24px;
3088    cursor: pointer;
3089    white-space: nowrap;
3090    transition: background-color 0.25s ease, color 0.25s ease;
3091  }
3092
3093  .gs-pill:hover,
3094  .gs-pill.is-active {
3095    background-color: #2b3990;
3096    color: #f9fafb;
3097  }
3098
3099  .gs-dropdown-content {
3100    display: flex;
3101    flex-direction: column;
3102    gap: 6px;
3103    padding: 10px 20px 14px;
3104    left: 0;
3105  }
3106
3107  .gs-dropdown-content a {
3108    color: #2a3a8e;
3109    font-size: 17.3px;
3110    font-family: 'DM Sans', sans-serif;
3111    font-weight: 400;
3112    text-decoration: none;
3113    white-space: nowrap;
3114    line-height: 32px;
3115  }
3116
3117  .gs-dropdown-content a:hover {
3118    opacity: 0.7;
3119  }
3120
3121  /* Nav dropdowns (e.g. "Our story") nudged left to sit under the menu label */
3122  .nav-dropdown-content {
3123    left: -12px;
3124  }
3125
3126  .quote-pill-button {
3127    display: inline-block;
3128    padding: 1rem 2rem;
3129    border-radius: 9999px;
3130    cursor: pointer;
3131    border: 0;
3132    background-color: #f1ffa5;
3133    transition: all 0.5s ease;
3134    color: #1F2937;
3135    text-decoration: none;
3136    font-weight: 600;
3137    font-size: 1.1em;
3138  }
3139
3140  .quote-pill-button:hover {
3141    transform: scale(1.2);
3142  }
3143
3144  .quote-pill-button:active {
3145    transform: scale(1.07);
3146    transition: 100ms;
3147  }
3148
3149  .start-design-button {
3150    display: inline-block;
3151    padding: 1rem 2rem;
3152    border-radius: 9999px;
3153    cursor: pointer;
3154    border: 0;
3155    background-color: #2b3990;
3156    transition: all 0.5s ease;
3157    color: #ffffff;
3158    text-decoration: none;
3159    font-weight: 600;
3160    font-size: 1.1em;
3161  }
3162
3163  .start-design-button:hover {
3164    transform: scale(1.2);
3165  }
3166
3167  .start-design-button:active {
3168    transform: scale(1.07);
3169    transition: 100ms;
3170  }
3171
3172  @keyframes float {
3173    0%, 100% {
3174      transform: translateY(0px);
3175    }
3176    50% {
3177      transform: translateY(-6px);
3178    }
3179  }
3180
3181  .beta-badge {
3182    position: absolute;
3183    top: -8px;
3184    right: -8px;
3185    background-color: #f1ffa5;
3186    color: #1e2326;
3187    font-size: 0.65em;
3188    font-weight: 700;
3189    padding: 0.25rem 0.5rem;
3190    border-radius: 9999px;
3191    text-transform: uppercase;
3192    letter-spacing: 0.5px;
3193    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
3194    z-index: 10;
3195    animation: float 2s ease-in-out infinite;
3196  }
3197</style>
3198
3199
3200
3201  
3201<script>
3202  if (!customElements.get('sticky-header-height-helper')) {
3203    class StickyHeaderHeightHelper extends HTMLElement {
3204      constructor() {
3205        super();
3206      }
3207
3208      connectedCallback() {
3209        const headerEl = this.closest('[data-theme-header]');
3210
3211        if (headerEl && headerEl.getAttribute('data-sticky')) {
3212          document.documentElement.style.setProperty(
3213            '--sticky-header-height',
3214            `${headerEl.getBoundingClientRect().height}px`
3215          );
3216        } else {
3217          
3218          document.documentElement.style.setProperty(
3219            '--sticky-header-height',
3220            '0px'
3221          );
3222        }
3223      }
3224    }
3225
3226    customElements.define(
3227      'sticky-header-height-helper',
3228      StickyHeaderHeightHelper
3229    );
3230  }
3231  </script>
3231
3232
3233
3234<style> #shopify-section-sections--21296457187398__header .bg-scheme-background {border-bottom: 1px solid #2b3990;} </style></div>
3235<!-- END sections: header-group -->
3236<div id="shopify-section-menu-drawer" class="shopify-section">
3237
3238<data-island
3239  
3240    x-data
3241  
3242  x-init="initTeleport($root); $store.modals.register('sidebar', 'leftDrawer');"
3243  on="idle"
3244>
3245  <template data-should-teleport="#left-drawer-slot">
3246    <template
3247      id="sidebar"
3248      x-if="$store.modals.leftDrawer.contents === 'sidebar'"
3249    >
3250      
3251  <div
3252    
3253    data-modal-label="Menu"
3254  >
3255    <div class="sticky top-0 z-1 flex items-center justify-between border-b-gridline border-gridline-color px-section-horizontal-spacing py-4">
3256      <div aria-hidden="true">&nbsp;</div>
3257      <button
3258        @click.prevent="$store.modals.close('sidebar')"
3259        class="absolute right-0 top-0 block h-full"
3260        type="button"
3261      >
3262        <span class="sr-only">Close</span>
3263        <div class="my-auto mr-section-horizontal-spacing h-6 w-6"><svg
3264  class="theme-icon"
3265  xmlns="http://www.w3.org/2000/svg"
3266  fill="none"
3267  viewBox="0 0 24 24"
3268>
3269  <path stroke="currentColor" d="m1.5 1.5 21 21m0-21-21 21" vector-effect="non-scaling-stroke"/>
3270</svg>
3271</div>
3272      </button>
3273    </div>
3274    <nav
3275      
3276      aria-label="Primary"
3277    >
3278      <ul><li
3279            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gridline-color first-of-type:border-t-0"
3280          ><a class="inline-block py-4 w-full text-heading-standard" href="/collections/product-library">
3281                Products
3282              </a></li><li
3283            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gridline-color first-of-type:border-t-0"
3284          ><data-island class="contents" x-data="{ expanded: false }"><button
3285                  class="relative block w-full text-left inline-block py-4 w-full text-heading-standard ease pr-10 transition font-body"
3286                  x-bind:aria-expanded="expanded ? true : 'false'"
3287                  @click="expanded = ! expanded"
3288                  aria-controls="accordion0"
3289                >
3290                  Services
3291                  <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3292                        class="inline-block w-full origin-center"
3293                        x-show="!expanded"
3294                      ><svg
3295  class="theme-icon"
3296  xmlns="http://www.w3.org/2000/svg"
3297  fill="none"
3298  viewBox="0 0 24 24"
3299>
3300  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3301</svg>
3302</span>
3303                      <span
3304                        class="inline-block w-full origin-center"
3305                        x-show="expanded"
3306                        style="display: none;"
3307                      ><svg
3308  class="theme-icon"
3309  xmlns="http://www.w3.org/2000/svg"
3310  fill="none"
3311  viewBox="0 0 24 24"
3312>
3313  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
3314</svg>
3315</span></span>
3316                </button>
3317                <ul
3318                  id="accordion0"
3319                  class="no-js-focus-container pb-2 pl-4"
3320                  x-show="expanded"
3321                  x-cloak
3322                ><li class="no-js-focus-wrapper"><data-island class="contents" x-data="{ expanded: false }" >
3323                          <button
3324                            class="relative w-full text-left inline-block py-1  pr-10"
3325                            x-bind:aria-expanded="expanded ? true : 'false'"
3326                            @click="expanded = ! expanded"
3327                            aria-controls="accordion1"
3328                          >
3329                            Production capabilities
3330                            <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3331                                  class="inline-block w-full origin-center"
3332                                  x-show="!expanded"
3333                                ><svg
3334  class="theme-icon"
3335  xmlns="http://www.w3.org/2000/svg"
3336  fill="none"
3337  viewBox="0 0 24 24"
3338>
3339  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3340</svg>
3341</span>
3342                                <span
3343                                  class="inline-block w-full origin-center"
3344                                  x-show="expanded"
3345                                  style="display: none;"
3346                                ><svg
3347  class="theme-icon"
3348  xmlns="http://www.w3.org/2000/svg"
3349  fill="none"
3350  viewBox="0 0 24 24"
3351>
3352  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
3353</svg>
3354</span></span>
3355                          </button>
3356                          <ul
3357                            id="accordion1"
3358                            class="no-js-focus-container px-2 pb-2 pt-1"
3359                            x-show="expanded"
3360                            x-cloak
3361                          ><li>
3362                                <a
3363                                  class="inline-block py-1 "
3364                                  href="/pages/custom-manufactured"
3365                                >
3366                                  Custom-manufactured
3367                                </a>
3368                              </li><li>
3369                                <a
3370                                  class="inline-block py-1 "
3371                                  href="/pages/screen-printing"
3372                                >
3373                                  Screen printing
3374                                </a>
3375                              </li><li>
3376                                <a
3377                                  class="inline-block py-1 "
3378                                  href="/pages/embroidery"
3379                                >
3380                                  Embroidery
3381                                </a>
3382                              </li><li>
3383                                <a
3384                                  class="inline-block py-1 "
3385                                  href="/pages/heat-transfers"
3386                                >
3387                                  Heat transfers
3388                                </a>
3389                              </li><li>
3390                                <a
3391                                  class="inline-block py-1 "
3392                                  href="/pages/finishing"
3393                                >
3394                                  Finishing
3395                                </a>
3396                              </li></ul>
3397                        </data-island></li><li class="no-js-focus-wrapper"><data-island class="contents" x-data="{ expanded: false }" >
3398                          <button
3399                            class="relative w-full text-left inline-block py-1  pr-10"
3400                            x-bind:aria-expanded="expanded ? true : 'false'"
3401                            @click="expanded = ! expanded"
3402                            aria-controls="accordion2"
3403                          >
3404                            Partner services
3405                            <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3406                                  class="inline-block w-full origin-center"
3407                                  x-show="!expanded"
3408                                ><svg
3409  class="theme-icon"
3410  xmlns="http://www.w3.org/2000/svg"
3411  fill="none"
3412  viewBox="0 0 24 24"
3413>
3414  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3415</svg>
3416</span>
3417                                <span
3418                                  class="inline-block w-full origin-center"
3419                                  x-show="expanded"
3420                                  style="display: none;"
3421                                ><svg
3422  class="theme-icon"
3423  xmlns="http://www.w3.org/2000/svg"
3424  fill="none"
3425  viewBox="0 0 24 24"
3426>
3427  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
3428</svg>
3429</span></span>
3430                          </button>
3431                          <ul
3432                            id="accordion2"
3433                            class="no-js-focus-container px-2 pb-2 pt-1"
3434                            x-show="expanded"
3435                            x-cloak
3436                          ><li>
3437                                <a
3438                                  class="inline-block py-1 "
3439                                  href="/pages/client-portal"
3440                                >
3441                                  Client portal
3442                                </a>
3443                              </li><li>
3444                                <a
3445                                  class="inline-block py-1 "
3446                                  href="/pages/fundraising-pre-orders"
3447                                >
3448                                  Fundraise & pre-order
3449                                </a>
3450                              </li><li>
3451                                <a
3452                                  class="inline-block py-1 "
3453                                  href="/pages/repurpose-initiative"
3454                                >
3455                                  Repurpose initiative
3456                                </a>
3457                              </li></ul>
3458                        </data-island></li><li class="no-js-focus-wrapper"><data-island class="contents" x-data="{ expanded: false }" >
3459                          <button
3460                            class="relative w-full text-left inline-block py-1  pr-10"
3461                            x-bind:aria-expanded="expanded ? true : 'false'"
3462                            @click="expanded = ! expanded"
3463                            aria-controls="accordion3"
3464                          >
3465                            Popular services
3466                            <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3467                                  class="inline-block w-full origin-center"
3468                                  x-show="!expanded"
3469                                ><svg
3470  class="theme-icon"
3471  xmlns="http://www.w3.org/2000/svg"
3472  fill="none"
3473  viewBox="0 0 24 24"
3474>
3475  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3476</svg>
3477</span>
3478                                <span
3479                                  class="inline-block w-full origin-center"
3480                                  x-show="expanded"
3481                                  style="display: none;"
3482                                ><svg
3483  class="theme-icon"
3484  xmlns="http://www.w3.org/2000/svg"
3485  fill="none"
3486  viewBox="0 0 24 24"
3487>
3488  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
3489</svg>
3490</span></span>
3491                          </button>
3492                          <ul
3493                            id="accordion3"
3494                            class="no-js-focus-container px-2 pb-2 pt-1"
3495                            x-show="expanded"
3496                            x-cloak
3497                          ><li>
3498                                <a
3499                                  class="inline-block py-1 "
3500                                  href="/pages/school-leavers-gear"
3501                                >
3502                                  School leavers gear
3503                                </a>
3504                              </li><li>
3505                                <a
3506                                  class="inline-block py-1 "
3507                                  href="/pages/tshirt-printing"
3508                                >
3509                                  Custom t-shirt printing
3510                                </a>
3511                              </li></ul>
3512                        </data-island></li></ul>
3513              </data-island></li><li
3514            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gridline-color first-of-type:border-t-0"
3515          ><a class="inline-block py-4 w-full text-heading-standard" href="/pages/responsibility">
3516                Responsibility
3517              </a></li><li
3518            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gridline-color first-of-type:border-t-0"
3519          ><data-island class="contents" x-data="{ expanded: false }"><button
3520                  class="relative block w-full text-left inline-block py-4 w-full text-heading-standard ease pr-10 transition font-body"
3521                  x-bind:aria-expanded="expanded ? true : 'false'"
3522                  @click="expanded = ! expanded"
3523                  aria-controls="accordion4"
3524                >
3525                  Our story
3526                  <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3527                        class="inline-block w-full origin-center"
3528                        x-show="!expanded"
3529                      ><svg
3530  class="theme-icon"
3531  xmlns="http://www.w3.org/2000/svg"
3532  fill="none"
3533  viewBox="0 0 24 24"
3534>
3535  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3536</svg>
3537</span>
3538                      <span
3539                        class="inline-block w-full origin-center"
3540                        x-show="expanded"
3541                        style="display: none;"
3542                      ><svg
3543  class="theme-icon"
3544  xmlns="http://www.w3.org/2000/svg"
3545  fill="none"
3546  viewBox="0 0 24 24"
3547>
3548  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
3549</svg>
3550</span></span>
3551                </button>
3552                <ul
3553                  id="accordion4"
3554                  class="no-js-focus-container pb-2 pl-4"
3555                  x-show="expanded"
3556                  x-cloak
3557                ><li class="no-js-focus-wrapper"><a
3558                          class="inline-block py-1 "
3559                          href="/pages/in-good-company-with"
3560                        >
3561                          In good company with…
3562                        </a></li><li class="no-js-focus-wrapper"><a
3563                          class="inline-block py-1 "
3564                          href="/pages/about-print-room"
3565                        >
3566                          Our origins
3567                        </a></li></ul>
3568              </data-island></li><li
3569            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gr
3569idline-color first-of-type:border-t-0"
3570          ><data-island class="contents" x-data="{ expanded: false }"><button
3571                  class="relative block w-full text-left inline-block py-4 w-full text-heading-standard ease pr-10 transition font-body"
3572                  x-bind:aria-expanded="expanded ? true : 'false'"
3573                  @click="expanded = ! expanded"
3574                  aria-controls="accordion5"
3575                >
3576                  Get started
3577                  <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3578                        class="inline-block w-full origin-center"
3579                        x-show="!expanded"
3580                      ><svg
3581  class="theme-icon"
3582  xmlns="http://www.w3.org/2000/svg"
3583  fill="none"
3584  viewBox="0 0 24 24"
3585>
3586  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3587</svg>
3588</span>
3589                      <span
3590                        class="inline-block w-full origin-center"
3591                        x-show="expanded"
3592                        style="display: none;"
3593                      ><svg
3594  class="theme-icon"
3595  xmlns="http://www.w3.org/2000/svg"
3596  fill="none"
3597  viewBox="0 0 24 24"
3598>
3599  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
3600</svg>
3601</span></span>
3602                </button>
3603                <ul
3604                  id="accordion5"
3605                  class="no-js-focus-container pb-2 pl-4"
3606                  x-show="expanded"
3607                  x-cloak
3608                ><li class="no-js-focus-wrapper"><a
3609                          class="inline-block py-1 "
3610                          href="/collections/product-library"
3611                        >
3612                          Start a project
3613                        </a></li><li class="no-js-focus-wrapper"><a
3614                          class="inline-block py-1 "
3615                          href="/pages/book-a-call"
3616                        >
3617                          Book a call
3618                        </a></li></ul>
3619              </data-island></li></ul>
3620    </nav>
3621    <div class="border-t-gridline border-gridline-color">
3622      <nav class="my-6" aria-label="Secondary">
3623        <ul></ul>
3624      </nav>
3625
3626      
3627        <div class="my-6 px-section-horizontal-spacing">
3628          <form method="post" action="/localization" id="sidebar-localization-form" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/blogs/the-print-room-nz" /><div class="flex gap-4 flex-col gap-y-0"><div class="inline-block shrink-0 select-none">
3629        <h2 class="sr-only" id="country-heading-sidebar">
3630          Country/region
3631        </h2>
3632        <data-island
3633          class="relative"
3634          x-data="{ expanded: false }"
3635          @keydown.escape.prevent.stop="expanded = false"
3636          @click.outside="expanded = false"
3637        >
3638          <button
3639            type="button"
3640            class="text-base py-2"
3641            :aria-expanded="expanded"
3642            aria-controls="country-list-sidebar"
3643            aria-describedby="country-heading-sidebar"
3644            @click.prevent="expanded = ! expanded"
3645          >
3646            United States (USD
3647            $)
3648            <span
3649              class="rotate ml-1 inline-block w-3 origin-center transform fill-current transition"
3650              :class="{ 'rotate-180': expanded }"
3651            >
3652              <svg
3653  class="theme-icon"
3654  xmlns="http://www.w3.org/2000/svg"
3655  fill="none"
3656  viewBox="0 0 24 24"
3657>
3658  <path stroke="currentColor" d="M1.5 7 12 17.5 22.5 7" vector-effect="non-scaling-stroke"/>
3659</svg>
3660
3661            </span>
3662          </button>
3663          <div
3664            class="absolute bottom-[calc(100%_+_0.5rem)] right-auto left-0"
3665            x-show="expanded"
3666            style="display: none;"
3667          >
3668            <ul
3669              id="country-list-sidebar"
3670              class="relative z-10 flex max-h-[30vh] w-max max-w-[theme(spacing.52)] snap-y snap-mandatory flex-col gap-[--text-border-width] overflow-y-auto border-text border-gr
3670idline-color bg-gridline-color text-base"
3671              x-transition:enter="transition ease duration-300"
3672              x-transition:enter-start="opacity-0"
3673              x-transition:enter-end="opacity-100"
3674              x-transition:leave="transition ease duration-300"
3675              x-transition:leave-start="opacity-100"
3676              x-transition:leave-end="opacity-0"
3677              :aria-hidden="! expanded"
3678            >
3679              
3680                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
3681                  <button
3682                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
3683                    type="button"
3684                    
3685                    @click.prevent="$refs.input.value = 'AU'; $root.closest('form').submit();"
3686                  >
3687                    <span class="border-transparent border-b-text">Australia (AUD
3688                      $)</span
3689                    >
3690                  </button>
3691                </li>
3692                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
3693                  <button
3694                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
3695                    type="button"
3696                    
3697                    @click.prevent="$refs.input.value = 'CN'; $root.closest('form').submit();"
3698                  >
3699                    <span class="border-transparent border-b-text">China (CNY
3700                      ¥)</span
3701                    >
3702                  </button>
3703                </li>
3704                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
3705                  <button
3706                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
3707                    type="button"
3708                    
3709                    @click.prevent="$refs.input.value = 'FR'; $root.closest('form').submit();"
3710                  >
3711                    <span class="border-transparent border-b-text">France (EUR
3712                      €)</span
3713                    >
3714                  </button>
3715                </li>
3716                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
3717                  <button
3718                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
3719                    type="button"
3720                    
3721                    @click.prevent="$refs.input.value = 'NZ'; $root.closest('form').submit();"
3722                  >
3723                    <span class="border-transparent border-b-text">New Zealand (NZD
3724                      $)</span
3725                    >
3726                  </button>
3727                </li>
3728                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
3729                  <button
3730                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
3731                    type="button"
3732                    
3733                    @click.prevent="$refs.input.value = 'GB'; $root.closest('form').submit();"
3734                  >
3735                    <span class="border-transparent border-b-text">United Kingdom (GBP
3736                      £)</span
3737                    >
3738                  </button>
3739                </li>
3740                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
3741                  <button
3742                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
3743                    type="button"
3744                    
3745                      aria-current="true"
3746                    
3747                    @click.prevent="$refs.input.value = 'US'; $root.closest('form').submit();"
3748                  >
3749                    <span class="border-scheme-text border-b-text">United States (USD
3750                      $)</span
3751                    >
3752                  </button>
3753                </li></ul>
3754          </div>
3755
3756          <input
3757            x-ref="input"
3758            type="hidden"
3759            name="country_code"
3760            id="CountrySelector"
3761            value="US"
3762          >
3763        </data-island>
3764      </div></div></form>
3765        </div>
3766      
3767
3768      
3769<form
3770          class="my-6 px-section-horizontal-spacing"
3771          action="/search"
3772          method="get"
3773          role="search"
3774        >
3775          <div class="flex w-full max-w-xs items-end">
3776            <label for="menu-drawer-search" class="sr-only">Search</label>
3777            <input
3778              class="min-w-0 flex-auto border-b-text border-current bg-transparent py-1.5 placeholder-current"
3779              id="menu-drawer-search"
3780              type="text"
3781              name="q"
3782              placeholder="Search"
3783            >
3784            <button
3785              class="px-1"
3786              type="submit"
3787            >
3788              <span class="inline-block h-6 w-6"><svg
3789  class="theme-icon"
3790  xmlns="http://www.w3.org/2000/svg"
3791  fill="none"
3792  viewBox="0 0 24 24"
3793>
3794  <path stroke="currentColor" d="M2 11a9 9 0 1 0 18 0 9 9 0 0 0-18 0Zm15.364 6.364L22 22" vector-effect="non-scaling-stroke"/>
3795</svg>
3796</span>
3797              <span class="sr-only">Submit</span>
3798            </button>
3799          </div>
3800        </form>
3801    </div>
3802  </div>
3803
3804    </template>
3805  </template>
3806</data-island>
3807
3808<noscript>
3809  <section class="section-sidebar">
3810    <div class="px-section-horizontal-spacing py-2 text-right">
3811      <button
3812        class="inline-flex items-center justify-center py-2 "
3813        data-menu-drawer-toggle
3814      >
3815        <span class="mr-2 inline-block h-6 w-6 align-middle"><svg
3816  class="theme-icon"
3817  xmlns="http://www.w3.org/2000/svg"
3818  fill="none"
3819  viewBox="0 0 24 24"
3820>
3821  <path stroke="currentColor" d="M1 4.545h22M1 12h22M1 19.455h22" vector-effect="non-scaling-stroke"/>
3822</svg>
3823</span>
3824        <span>Menu</span>
3825      </button>
3826    </div>
3827    <div class="sidebar-container z-80 border-r-grid border-grid-color fixed bottom-0 left-0 top-0 w-11/12 max-w-xl transform overflow-y-auto bg-scheme-background text-scheme-text transition-transform">
3828      
3829  <div
3830    
3831    data-modal-label="Menu"
3832  >
3833    <div class="sticky top-0 z-1 flex items-center justify-between border-b-gridline border-gridline-color px-section-horizontal-spacing py-4">
3834      <div aria-hidden="true">&nbsp;</div>
3835      <button
3836        @click.prevent="$store.modals.close('sidebar')"
3837        class="absolute right-0 top-0 block h-full"
3838        type="button"
3839      >
3840        <span class="sr-only">Close</span>
3841        <div class="my-auto mr-section-horizontal-spacing h-6 w-6"><svg
3842  class="theme-icon"
3843  xmlns="http://www.w3.org/2000/svg"
3844  fill="none"
3845  viewBox="0 0 24 24"
3846>
3847  <path stroke="currentColor" d="m1.5 1.5 21 21m0-21-21 21" vector-effect="non-scaling-stroke"/>
3848</svg>
3849</div>
3850      </button>
3851    </div>
3852    <nav
3853      
3854      aria-label="Primary"
3855    >
3856      <ul><li
3857            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gridline-color first-of-type:border-t-0"
3858          ><a class="inline-block py-4 w-full text-heading-standard" href="/collections/product-library">
3859                Products
3860              </a></li><li
3861            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gridline-color first-of-type:border-t-0"
3862          ><data-island class="contents" x-data="{ expanded: false }"><button
3863                  class="relative block w-full text-left inline-block py-4 w-full text-heading-standard ease pr-10 transition font-body"
3864                  x-bind:aria-expanded="expanded ? true : 'false'"
3865                  @click="expanded = ! expanded"
3866                  aria-controls="accordion0"
3867                >
3868                  Services
3869                  <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3870                        class="inline-block w-full origin-center"
3871                        x-show="!expanded"
3872                      ><svg
3873  class="theme-icon"
3874  xmlns="http://www.w3.org/2000/svg"
3875  fill="none"
3876  viewBox="0 0 24 24"
3877>
3878  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3879</svg>
3880</span>
3881                      <span
3882                        class="inline-block w-full origin-center"
3883                        x-show="expanded"
3884                        style="display: none;"
3885                      ><svg
3886  class="theme-icon"
3887  xmlns="http://www.w3.org/2000/svg"
3888  fill="none"
3889  viewBox="0 0 24 24"
3890>
3891  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
3892</svg>
3893</span></span>
3894                </button>
3895                <ul
3896                  id="accordion0"
3897                  class="no-js-focus-container pb-2 pl-4"
3898                  x-show="expanded"
3899                  x-cloak
3900                ><li class="no-js-focus-wrapper"><data-island class="contents" x-data="{ expanded: false }" >
3901                          <button
3902                            class="relative w-full text-left inline-block py-1  pr-10"
3903                            x-bind:aria-expanded="expanded ? true : 'false'"
3904                            @click="expanded = ! expanded"
3905                            aria-controls="accordion1"
3906                          >
3907                            Production capabilities
3908                            <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3909                                  class="inline-block w-full origin-center"
3910                                  x-show="!expanded"
3911                                ><svg
3912  class="theme-icon"
3913  xmlns="http://www.w3.org/2000/svg"
3914  fill="none"
3915  viewBox="0 0 24 24"
3916>
3917  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3918</svg>
3919</span>
3920                                <span
3921                                  class="inline-block w-full origin-center"
3922                                  x-show="expanded"
3923                                  style="display: none;"
3924                                ><svg
3925  class="theme-icon"
3926  xmlns="http://www.w3.org/2000/svg"
3927  fill="none"
3928  viewBox="0 0 24 24"
3929>
3930  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
3931</svg>
3932</span></span>
3933                          </button>
3934                          <ul
3935                            id="accordion1"
3936                            class="no-js-focus-container px-2 pb-2 pt-1"
3937                            x-show="expanded"
3938                            x-cloak
3939                          ><li>
3940                                <a
3941                                  class="inline-block py-1 "
3942                                  href="/pages/custom-manufactured"
3943                                >
3944                                  Custom-manufactured
3945                                </a>
3946                              </li><li>
3947                                <a
3948                                  class="inline-block py-1 "
3949                                  href="/pages/screen-printing"
3950                                >
3951                                  Screen printing
3952                                </a>
3953                              </li><li>
3954                                <a
3955                                  class="inline-block py-1 "
3956                                  href="/pages/embroidery"
3957                                >
3958                                  Embroidery
3959                                </a>
3960                              </li><li>
3961                                <a
3962                                  class="inline-block py-1 "
3963                                  href="/pages/heat-transfers"
3964                                >
3965                                  Heat transfers
3966                                </a>
3967                              </li><li>
3968                                <a
3969                                  class="inline-block py-1 "
3970                                  href="/pages/finishing"
3971                                >
3972                                  Finishing
3973                                </a>
3974                              </li></ul>
3975                        </data-island></li><li class="no-js-focus-wrapper"><data-island class="contents" x-data="{ expanded: false }" >
3976                          <button
3977                            class="relative w-full text-left inline-block py-1  pr-10"
3978                            x-bind:aria-expanded="expanded ? true : 'false'"
3979                            @click="expanded = ! expanded"
3980                            aria-controls="accordion2"
3981                          >
3982                            Partner services
3983                            <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
3984                                  class="inline-block w-full origin-center"
3985                                  x-show="!expanded"
3986                                ><svg
3987  class="theme-icon"
3988  xmlns="http://www.w3.org/2000/svg"
3989  fill="none"
3990  viewBox="0 0 24 24"
3991>
3992  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
3993</svg>
3994</span>
3995                                <span
3996                                  class="inline-block w-full origin-center"
3997                                  x-show="expanded"
3998                                  style="display: none;"
3999                                ><svg
4000  class="theme-icon"
4001  xmlns="http://www.w3.org/2000/svg"
4002  fill="none"
4003  viewBox="0 0 24 24"
4004>
4005  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
4006</svg>
4007</span></span>
4008                          </button>
4009                          <ul
4010                            id="accordion2"
4011                            class="no-js-focus-container px-2 pb-2 pt-1"
4012                            x-show="expanded"
4013                            x-cloak
4014                          ><li>
4015                                <a
4016                                  class="inline-block py-1 "
4017                                  href="/pages/client-portal"
4018                                >
4019                                  Client portal
4020                                </a>
4021                              </li><li>
4022                                <a
4023                                  class="inline-block py-1 "
4024                                  href="/pages/fundraising-pre-orders"
4025                                >
4026                                  Fundraise & pre-order
4027                                </a>
4028                              </li><li>
4029                                <a
4030                                  class="inline-block py-1 "
4031                                  href="/pages/repurpose-initiative"
4032                                >
4033                                  Repurpose initiative
4034                                </a>
4035                              </li></ul>
4036                        </data-island></li><li class="no-js-focus-wrapper"><data-island class="contents" x-data="{ expanded: false }" >
4037                          <button
4038                            class="relative w-full text-left inline-block py-1  pr-10"
4039                            x-bind:aria-expanded="expanded ? true : 'false'"
4040                            @click="expanded = ! expanded"
4041                            aria-controls="accordion3"
4042                          >
4043                            Popular services
4044                            <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
4045                                  class="inline-block w-full origin-center"
4046                                  x-show="!expanded"
4047                                ><svg
4048  class="theme-icon"
4049  xmlns="http://www.w3.org/2000/svg"
4050  fill="none"
4051  viewBox="0 0 24 24"
4052>
4053  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
4054</svg>
4055</span>
4056                                <span
4057                                  class="inline-block w-full origin-center"
4058                                  x-show="expanded"
4059                                  style="display: none;"
4060                                ><svg
4061  class="theme-icon"
4062  xmlns="http://www.w3.org/2000/svg"
4063  fill="none"
4064  viewBox="0 0 24 24"
4065>
4066  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
4067</svg>
4068</span></span>
4069                          </button>
4070                          <ul
4071                            id="accordion3"
4072                            class="no-js-focus-container px-2 pb-2 pt-1"
4073                            x-show="expanded"
4074                            x-cloak
4075                          ><li>
4076                                <a
4077                                  class="inline-block py-1 "
4078                                  href="/pages/school-leavers-gear"
4079                                >
4080                                  School leavers gear
4081                                </a>
4082                              </li><li>
4083                                <a
4084                                  class="inline-block py-1 "
4085                                  href="/pages/tshirt-printing"
4086                                >
4087                                  Custom t-shirt printing
4088                                </a>
4089                              </li></ul>
4090                        </data-island></li></ul>
4091              </data-island></li><li
4092            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gridline-color first-of-type:border-t-0"
4093          ><a class="inline-block py-4 w-full text-heading-standard" href="/pages/responsibility">
4094                Responsibility
4095              </a></li><li
4096            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gridline-color first-of-type:border-t-0"
4097          ><data-island class="contents" x-data="{ expanded: false }"><button
4098                  class="relative block w-full text-left inline-block py-4 w-full text-heading-standard ease pr-10 transition font-body"
4099                  x-bind:aria-expanded="expanded ? true : 'false'"
4100                  @click="expanded = ! expanded"
4101                  aria-controls="accordion4"
4102                >
4103                  Our story
4104                  <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
4105                        class="inline-block w-full origin-center"
4106                        x-show="!expanded"
4107                      ><svg
4108  class="theme-icon"
4109  xmlns="http://www.w3.org/2000/svg"
4110  fill="none"
4111  viewBox="0 0 24 24"
4112>
4113  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
4114</svg>
4115</span>
4116                      <span
4117                        class="inline-block w-full origin-center"
4118                        x-show="expanded"
4119                        style="display: none;"
4120                      ><svg
4121  class="theme-icon"
4122  xmlns="http://www.w3.org/2000/svg"
4123  fill="none"
4124  viewBox="0 0 24 24"
4125>
4126  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
4127</svg>
4128</span></span>
4129                </button>
4130                <ul
4131                  id="accordion4"
4132                  class="no-js-focus-container pb-2 pl-4"
4133                  x-show="expanded"
4134                  x-cloak
4135                ><li class="no-js-focus-wrapper"><a
4136                          class="inline-block py-1 "
4137                          href="/pages/in-good-company-with"
4138                        >
4139                          In good company with…
4140                        </a></li><li class="no-js-focus-wrapper"><a
4141                          class="inline-block py-1 "
4142                          href="/pages/about-print-room"
4143                        >
4144                          Our origins
4145                        </a></li></ul>
4146              </data-island></li><li
4147            class="no-js-focus-wrapper break-word px-section-horizontal-spacing border-t-gridline border-gr
4147idline-color first-of-type:border-t-0"
4148          ><data-island class="contents" x-data="{ expanded: false }"><button
4149                  class="relative block w-full text-left inline-block py-4 w-full text-heading-standard ease pr-10 transition font-body"
4150                  x-bind:aria-expanded="expanded ? true : 'false'"
4151                  @click="expanded = ! expanded"
4152                  aria-controls="accordion5"
4153                >
4154                  Get started
4155                  <span class="absolute right-0 top-1/2 flex h-6 w-6 -translate-y-1/2 transform items-center"><span
4156                        class="inline-block w-full origin-center"
4157                        x-show="!expanded"
4158                      ><svg
4159  class="theme-icon"
4160  xmlns="http://www.w3.org/2000/svg"
4161  fill="none"
4162  viewBox="0 0 24 24"
4163>
4164  <path stroke="currentColor" d="M12 1v22M1 12h22" vector-effect="non-scaling-stroke"/>
4165</svg>
4166</span>
4167                      <span
4168                        class="inline-block w-full origin-center"
4169                        x-show="expanded"
4170                        style="display: none;"
4171                      ><svg
4172  class="theme-icon"
4173  xmlns="http://www.w3.org/2000/svg"
4174  fill="none"
4175  viewBox="0 0 24 24"
4176>
4177  <path stroke="currentColor" d="M1 12h22" vector-effect="non-scaling-stroke"/>
4178</svg>
4179</span></span>
4180                </button>
4181                <ul
4182                  id="accordion5"
4183                  class="no-js-focus-container pb-2 pl-4"
4184                  x-show="expanded"
4185                  x-cloak
4186                ><li class="no-js-focus-wrapper"><a
4187                          class="inline-block py-1 "
4188                          href="/collections/product-library"
4189                        >
4190                          Start a project
4191                        </a></li><li class="no-js-focus-wrapper"><a
4192                          class="inline-block py-1 "
4193                          href="/pages/book-a-call"
4194                        >
4195                          Book a call
4196                        </a></li></ul>
4197              </data-island></li></ul>
4198    </nav>
4199    <div class="border-t-gridline border-gridline-color">
4200      <nav class="my-6" aria-label="Secondary">
4201        <ul></ul>
4202      </nav>
4203
4204      
4205        <div class="my-6 px-section-horizontal-spacing">
4206          <form method="post" action="/localization" id="sidebar-localization-form" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/blogs/the-print-room-nz" /><div class="flex gap-4 flex-col gap-y-0"><div class="inline-block shrink-0 select-none">
4207        <h2 class="sr-only" id="country-heading-sidebar">
4208          Country/region
4209        </h2>
4210        <data-island
4211          class="relative"
4212          x-data="{ expanded: false }"
4213          @keydown.escape.prevent.stop="expanded = false"
4214          @click.outside="expanded = false"
4215        >
4216          <button
4217            type="button"
4218            class="text-base py-2"
4219            :aria-expanded="expanded"
4220            aria-controls="country-list-sidebar"
4221            aria-describedby="country-heading-sidebar"
4222            @click.prevent="expanded = ! expanded"
4223          >
4224            United States (USD
4225            $)
4226            <span
4227              class="rotate ml-1 inline-block w-3 origin-center transform fill-current transition"
4228              :class="{ 'rotate-180': expanded }"
4229            >
4230              <svg
4231  class="theme-icon"
4232  xmlns="http://www.w3.org/2000/svg"
4233  fill="none"
4234  viewBox="0 0 24 24"
4235>
4236  <path stroke="currentColor" d="M1.5 7 12 17.5 22.5 7" vector-effect="non-scaling-stroke"/>
4237</svg>
4238
4239            </span>
4240          </button>
4241          <div
4242            class="absolute bottom-[calc(100%_+_0.5rem)] right-auto left-0"
4243            x-show="expanded"
4244            style="display: none;"
4245          >
4246            <ul
4247              id="country-list-sidebar"
4248              class="relative z-10 flex max-h-[30vh] w-max max-w-[theme(spacing.52)] snap-y snap-mandatory flex-col gap-[--text-border-width] overflow-y-auto border-text border-gr
4248idline-color bg-gridline-color text-base"
4249              x-transition:enter="transition ease duration-300"
4250              x-transition:enter-start="opacity-0"
4251              x-transition:enter-end="opacity-100"
4252              x-transition:leave="transition ease duration-300"
4253              x-transition:leave-start="opacity-100"
4254              x-transition:leave-end="opacity-0"
4255              :aria-hidden="! expanded"
4256            >
4257              
4258                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
4259                  <button
4260                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
4261                    type="button"
4262                    
4263                    @click.prevent="$refs.input.value = 'AU'; $root.closest('form').submit();"
4264                  >
4265                    <span class="border-transparent border-b-text">Australia (AUD
4266                      $)</span
4267                    >
4268                  </button>
4269                </li>
4270                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
4271                  <button
4272                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
4273                    type="button"
4274                    
4275                    @click.prevent="$refs.input.value = 'CN'; $root.closest('form').submit();"
4276                  >
4277                    <span class="border-transparent border-b-text">China (CNY
4278                      ¥)</span
4279                    >
4280                  </button>
4281                </li>
4282                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
4283                  <button
4284                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
4285                    type="button"
4286                    
4287                    @click.prevent="$refs.input.value = 'FR'; $root.closest('form').submit();"
4288                  >
4289                    <span class="border-transparent border-b-text">France (EUR
4290                      €)</span
4291                    >
4292                  </button>
4293                </li>
4294                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
4295                  <button
4296                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
4297                    type="button"
4298                    
4299                    @click.prevent="$refs.input.value = 'NZ'; $root.closest('form').submit();"
4300                  >
4301                    <span class="border-transparent border-b-text">New Zealand (NZD
4302                      $)</span
4303                    >
4304                  </button>
4305                </li>
4306                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
4307                  <button
4308                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
4309                    type="button"
4310                    
4311                    @click.prevent="$refs.input.value = 'GB'; $root.closest('form').submit();"
4312                  >
4313                    <span class="border-transparent border-b-text">United Kingdom (GBP
4314                      £)</span
4315                    >
4316                  </button>
4317                </li>
4318                <li class="flex items-center bg-scheme-background px-2 py-2 coarse-pointer:min-h-[44px] coarse-pointer:min-w-[44px]">
4319                  <button
4320                    class="break-word text-left [text-wrap:balance] hover:text-scheme-accent"
4321                    type="button"
4322                    
4323                      aria-current="true"
4324                    
4325                    @click.prevent="$refs.input.value = 'US'; $root.closest('form').submit();"
4326                  >
4327                    <span class="border-scheme-text border-b-text">United States (USD
4328                      $)</span
4329                    >
4330                  </button>
4331                </li></ul>
4332          </div>
4333
4334          <input
4335            x-ref="input"
4336            type="hidden"
4337            name="country_code"
4338            id="CountrySelector"
4339            value="US"
4340          >
4341        </data-island>
4342      </div></div></form>
4343        </div>
4344      
4345
4346      
4347<form
4348          class="my-6 px-section-horizontal-spacing"
4349          action="/search"
4350          method="get"
4351          role="search"
4352        >
4353          <div class="flex w-full max-w-xs items-end">
4354            <label for="menu-drawer-search" class="sr-only">Search</label>
4355            <input
4356              class="min-w-0 flex-auto border-b-text border-current bg-transparent py-1.5 placeholder-current"
4357              id="menu-drawer-search"
4358              type="text"
4359              name="q"
4360              placeholder="Search"
4361            >
4362            <button
4363              class="px-1"
4364              type="submit"
4365            >
4366              <span class="inline-block h-6 w-6"><svg
4367  class="theme-icon"
4368  xmlns="http://www.w3.org/2000/svg"
4369  fill="none"
4370  viewBox="0 0 24 24"
4371>
4372  <path stroke="currentColor" d="M2 11a9 9 0 1 0 18 0 9 9 0 0 0-18 0Zm15.364 6.364L22 22" vector-effect="non-scaling-stroke"/>
4373</svg>
4374</span>
4375              <span class="sr-only">Submit</span>
4376            </button>
4377          </div>
4378        </form>
4379    </div>
4380  </div>
4381
4382    </div>
4383  </section>
4384
4385  <style>
4386    .section-sidebar {
4387      display: block !important;
4388    }
4389
4390    @media (min-width: 1024px) {
4391      .section-sidebar {
4392        display: none !important;
4393      }
4394    }
4395
4396    .sidebar-container {
4397      position: static;
4398      width: 100%;
4399      max-width: 100%;
4400      border-right: 0;
4401      display: none;
4402    }
4403
4404    .section-sidebar:focus-within .sidebar-container {
4405      display: block !important;
4406    }
4407  </style>
4408</noscript>
4409
4410
4411</div>
4411<script>
4412  const calculateHeaderHeights = () => {
4413    const headerGroupHeights = [];
4414
4415    document
4416      .querySelectorAll('.shopify-section-group-header-group')
4417      .forEach((headerGroupSectionEl) => {
4418        headerGroupHeights.push(
4419          headerGroupSectionEl.getBoundingClientRect().height
4420        );
4421      });
4422
4423    document.documentElement.style.setProperty(
4424      '--header-group-height',
4425      `${headerGroupHeights.reduce((subtotal, a) => subtotal + a, 0)}px`
4426    );
4427  };
4428
4429  calculateHeaderHeights();
4430
4431  if (document.readyState === 'loading') {
4432    document.addEventListener('DOMContentLoaded', calculateHeaderHeights);
4433  }
4434  window.addEventListener('load', calculateHeaderHeights);
4435
4436  const debouncedCalculateHeaderHeights = debounce(calculateHeaderHeights, 300);
4437
4438  window.addEventListener('resize', debouncedCalculateHeaderHeights);
4439</script>
4439
4440
4441
4442
4443<style>
4444  #MainContent
4445    > .shopify-section.banner-section:first-child
4446    [data-media-container].h-screen {
4447    height: calc(100vh - var(--header-group-height));
4448  }
4449
4450  @media (min-width: 990px) {
4451    #MainContent
4452      > .shopify-section.banner-section:first-child
4453      [data-media-container].lg\:h-auto {
4454      height: auto;
4455    }
4456
4457    #MainContent
4458      > .shopify-section.banner-section:first-child
4459      [data-media-container].lg\:h-screen {
4460      height: calc(100vh - var(--header-group-height));
4461    }
4462  }
4463</style>
4464
4465    
4466
4467    <main id="MainContent">
4468      <div id="shopify-section-template--21296459939910__rich_text_PFWrHz" class="shopify-section"><section
4469  class="overflow-hidden border-b-gridline border-gridline-color bg-scheme-background text-scheme-text snap-section"
4470  data-color-scheme="scheme5"
4471  x-data="{ visible: false }"
4472  x-intersect:enter.threshold.25="visible = true"
4473  x-intersect:leave="visible = false"
4474  data-animate="fade"
4475  :class="{ 'is-visible': visible }"
4476>
4477  <div class="px-section-horizontal-spacing py-section-vertical-spacing">
4478    <div class="flex text-left justify-start">
4479      <div class="w-full lg:w-full"><h2 class="font-heading text-heading-standard">
4480            A closer look at our favourite brands
4481          </h2><div class="rte mt-4  break-word">
4482          
4483        </div></div>
4484    </div>
4485  </div>
4486</section>
4487
4488
4489<style> #shopify-section-template--21296459939910__rich_text_PFWrHz .text-scheme-text {padding-left: 30px; padding-right: 30px;} </style></div><div id="shopify-section-template--21296459939910__custom_links_with_image_9yEMyr" class="shopify-section"><data-island
4490  class="grid grid-flow-row-dense grid-cols-1 gap-gutter overflow-hidden border-b-gridline border-gridline-color bg-gridline-color lg:grid-cols-12"
4491  role="banner"
4492  x-data="{ currentLink: '' }"
4493  data-color-scheme="scheme5"
4494>
4495  <div class="bg-scheme-background lg:col-start-7 lg:col-end-13 p-2 lg:p-4 h-full w-full ">
4496    <div class="relative min-h-full"><div class="hidden lg:block">
4497            <image-with-placeholder>
4498  <img src="//printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=3000" alt="AS-colour-custom-printing" srcset="//printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=200 200w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=350 350w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=450 450w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=750 750w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=850 850w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=960 960w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1280 1280w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1440 1440w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1536 1536w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1706 1706w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1782 1782w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1920 1920w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=2560 2560w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=2880 2880w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=3000 3000w" width="3000" height="1686" loading="eager" class="peer/image block absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) 50vw, 100vw">
4499  
4500    <div
4501      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4502    ></div>
4503  
4504</image-with-placeholder>
4505
4506          </div>
4507          <div class="block lg:hidden">
4508            <image-with-placeholder class="relative"><img src="//printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=3000" alt="AS-colour-custom-printing" srcset="//printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=200 200w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=350 350w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=450 450w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=750 750w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=850 850w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=960 960w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1280 1280w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1440 1440w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1536 1536w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1706 1706w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1782 1782w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1920 1920w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=2560 2560w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=2880 2880w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=3000 3000w" width="3000" height="1686" loading="eager" class="peer/image" sizes="(min-width: 1024px) 50vw, 100vw">
4509  
4510    <div
4511      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4512    ></div>
4513  
4514</image-with-placeholder>
4515
4516          </div><div><div
4517  class="no-js:hidden"
4518  x-show="isLgBreakpoint() && currentLink === 'link_rnjcua'"
4519  x-transition:enter="transition-opacity duration-200"
4520  x-transition:enter-start="opacity-0"
4521  x-transition:enter-end="opacity-100"
4522  x-transition:leave="transition-opacity duration-200"
4523  x-transition:leave-start="opacity-100"
4524  x-transition:leave-end="opacity-0"
4525  style="display: none;"
4526  :aria-hidden="isLgBreakpoint() && currentLink === 'link_rnjcua'"
4527>
4528  
4529    <image-with-placeholder>
4530  <img src="//printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=3000" alt="stanley-stella nz" srcset="//printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=200 200w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=350 350w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=450 450w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=750 750w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=850 850w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=960 960w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=1280 1280w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=1440 1440w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=1536 1536w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=1706 1706w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=1782 1782w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=1920 1920w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=2560 2560w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=2880 2880w, //printroom.co/cdn/shop/files/stanley-stella_cover_2.jpg?v=1758161166&amp;width=3000 3000w" width="3000" height="1688" loading="lazy" class="peer/image block absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) 50vw, 100vw">
4531  
4532</image-with-placeholder>
4533
4534  
4535</div>
4536<div
4537  class="no-js:hidden"
4538  x-show="isLgBreakpoint() && currentLink === 'link_hkiftb'"
4539  x-transition:enter="transition-opacity duration-200"
4540  x-transition:enter-start="opacity-0"
4541  x-transition:enter-end="opacity-100"
4542  x-transition:leave="transition-opacity duration-200"
4543  x-transition:leave-start="opacity-100"
4544  x-transition:leave-end="opacity-0"
4545  style="display: none;"
4546  :aria-hidden="isLgBreakpoint() && currentLink === 'link_hkiftb'"
4547>
4548  
4549    <image-with-placeholder>
4550  <img src="//printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=3000" alt="AS-colour-custom-printing" srcset="//printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=200 200w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=350 350w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=450 450w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=750 750w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=850 850w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=960 960w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1280 1280w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1440 1440w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1536 1536w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1706 1706w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1782 1782w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=1920 1920w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=2560 2560w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=2880 2880w, //printroom.co/cdn/shop/files/BOX_HOOD_wide.jpg?v=1753759570&amp;width=3000 3000w" width="3000" height="1686" loading="lazy" class="peer/image block absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) 50vw, 100vw">
4551  
4552</image-with-placeholder>
4553
4554  
4555</div>
4556</div>
4557    </div>
4558  </div>
4559
4560  <div class="lg:col-span-6 relative flex bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text items-center">
4561    <div
4562      class="text-scale-n2 lg:text-scale-n6 text-left w-full"
4563    >
4564      <ul class="font-heading break-word inline-block max-w-full"><li >
4565            <div class=" relative inline-block max-w-full">
4566              <a
4567                href="/pages/stanley-stella"
4568                class="font-heading break-word hover:text-scheme-accent"
4569                x-on:mouseenter="currentLink = 'link_rnjcua'"
4570                x-on:mouseleave="
4571                  setTimeout(
4572                  () => {
4573                    if (currentLink == 'link_rnjcua') {
4574                      currentLink = ''
4575                    }
4576                  }, 200)
4577                "
4578                x-on:focus="currentLink = 'link_rnjcua'"
4579                x-on:blur="
4580                  setTimeout(
4581                  () => {
4582                    if (currentLink == 'link_rnjcua') {
4583                      currentLink = ''
4584                    }
4585                  }, 200)
4586                "
4587              >
4588                <span class="hover:underline">Stanley/Stella</span>
4589              </a>
4590            </div>
4591          </li><li >
4592            <div class=" relative inline-block max-w-full">
4593              <a
4594                href="/pages/as-colour"
4595                class="font-heading break-word hover:text-scheme-accent"
4596                x-on:mouseenter="currentLink = 'link_hkiftb'"
4597                x-on:mouseleave="
4598                  setTimeout(
4599                  () => {
4600                    if (currentLink == 'link_hkiftb') {
4601                      currentLink = ''
4602                    }
4603                  }, 200)
4604                "
4605                x-on:focus="currentLink = 'link_hkiftb'"
4606                x-on:blur="
4607                  setTimeout(
4608                  () => {
4609                    if (currentLink == 'link_hkiftb') {
4610                      currentLink = ''
4611                    }
4612                  }, 200)
4613                "
4614              >
4615                <span class="hover:underline">AS Colour</span>
4616              </a>
4617            </div>
4618          </li></ul>
4619    </div>
4620  </div>
4621</data-island>
4622
4623
4624<style> #shopify-section-template--21296459939910__custom_links_with_image_9yEMyr .text-scheme-text {padding-left: 50px; padding-right: 50px;} #shopify-section-template--21296459939910__custom_links_with_image_9yEMyr .gap-gutter {border-bottom: 1px solid black;} </style></div><div id="shopify-section-template--21296459939910__rich_text_kayamR" class="shopify-section"><section
4625  class="overflow-hidden border-b-gridline border-gridline-color bg-scheme-background text-scheme-text snap-section"
4626  data-color-scheme="scheme5"
4627  x-data="{ visible: false }"
4628  x-intersect:enter.threshold.25="visible = true"
4629  x-intersect:leave="visible = false"
4630  data-animate="fade"
4631  :class="{ 'is-visible': visible }"
4632>
4633  <div class="px-section-horizontal-spacing py-section-vertical-spacing">
4634    <div class="flex text-left justify-start">
4635      <div class="w-full lg:w-full"><h2 class="font-heading text-heading-standard">
4636            A closer look at our favourite products
4637          </h2><div class="rte mt-4  break-word">
4638          
4639        </div></div>
4640    </div>
4641  </div>
4642</section>
4643
4644
4645<style> #shopify-section-template--21296459939910__rich_text_kayamR .text-scheme-text {padding-left: 30px; padding-right: 30px;} </style></div><div id="shopify-section-template--21296459939910__custom_links_with_image_UnEXb9" class="shopify-section"><data-island
4646  class="grid grid-flow-row-dense grid-cols-1 gap-gutter overflow-hidden border-b-gridline border-gridline-color bg-gridline-color lg:grid-cols-12"
4647  role="banner"
4648  x-data="{ currentLink: '' }"
4649  data-color-scheme="scheme5"
4650>
4651  <div class="bg-scheme-background lg:col-start-7 lg:col-end-13 p-2 lg:p-4 h-full w-full ">
4652    <div class="relative min-h-full"><div class="hidden lg:block">
4653            <image-with-placeholder>
4654  <img src="//printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=3000" alt="" srcset="//printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=200 200w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=350 350w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=450 450w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=750 750w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=850 850w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=960 960w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1280 1280w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1440 1440w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1536 1536w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1706 1706w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1782 1782w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1920 1920w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=2560 2560w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=2880 2880w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=3000 3000w" width="3000" height="2399" loading="lazy" class="peer/image block absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) 50vw, 100vw">
4655  
4656    <div
4657      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4658    ></div>
4659  
4660</image-with-placeholder>
4661
4662          </div>
4663          <div class="block lg:hidden">
4664            <image-with-placeholder class="relative"><img src="//printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=3000" alt="" srcset="//printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=200 200w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=350 350w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=450 450w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=750 750w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=850 850w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=960 960w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1280 1280w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1440 1440w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1536 1536w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1706 1706w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1782 1782w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=1920 1920w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=2560 2560w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=2880 2880w, //printroom.co/cdn/shop/files/PrintRoomMay2024Image-6.jpg?v=1742440428&amp;width=3000 3000w" width="3000" height="2399" loading="lazy" class="peer/image" sizes="(min-width: 1024px) 50vw, 100vw">
4665  
4666    <div
4667      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4668    ></div>
4669  
4670</image-with-placeholder>
4671
4672          </div><div><div
4673  class="no-js:hidden"
4674  x-show="isLgBreakpoint() && currentLink === 'link_hydgl7'"
4675  x-transition:enter="transition-opacity duration-200"
4676  x-transition:enter-start="opacity-0"
4677  x-transition:enter-end="opacity-100"
4678  x-transition:leave="transition-opacity duration-200"
4679  x-transition:leave-start="opacity-100"
4680  x-transition:leave-end="opacity-0"
4681  style="display: none;"
4682  :aria-hidden="isLgBreakpoint() && currentLink === 'link_hydgl7'"
4683>
4684  
4685    <image-with-placeholder>
4686  <img src="//printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=3000" alt="Custom Caps NZ as colour" srcset="//printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=200 200w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=350 350w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=450 450w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=750 750w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=850 850w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=960 960w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=1280 1280w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=1440 1440w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=1536 1536w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=1706 1706w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=1782 1782w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=1920 1920w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=2560 2560w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=2880 2880w, //printroom.co/cdn/shop/files/SURF_CAPS_2.jpg?v=1753826288&amp;width=3000 3000w" width="3000" height="3750" loading="lazy" class="peer/image block absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) 50vw, 100vw">
4687  
4688</image-with-placeholder>
4689
4690  
4691</div>
4692</div>
4693    </div>
4694  </div>
4695
4696  <div class="lg:col-span-6 relative flex bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text items-center">
4697    <div
4698      class="text-scale-n2 lg:text-scale-n6 text-left w-full"
4699    >
4700      <ul class="font-heading break-word inline-block max-w-full"><li >
4701            <div class=" relative inline-block max-w-full">
4702              <a
4703                href="/pages/custom-caps"
4704                class="font-heading break-word hover:text-scheme-accent"
4705                x-on:mouseenter="currentLink = 'link_hydgl7'"
4706                x-on:mouseleave="
4707                  setTimeout(
4708                  () => {
4709                    if (currentLink == 'link_hydgl7') {
4710                      currentLink = ''
4711                    }
4712                  }, 200)
4713                "
4714                x-on:focus="currentLink = 'link_hydgl7'"
4715                x-on:blur="
4716                  setTimeout(
4717                  () => {
4718                    if (currentLink == 'link_hydgl7') {
4719                      currentLink = ''
4720                    }
4721                  }, 200)
4722                "
4723              >
4724                <span class="hover:underline">Custom caps</span>
4725              </a>
4726            </div>
4727          </li></ul>
4728    </div>
4729  </div>
4730</data-island>
4731
4732
4733<style> #shopify-section-template--21296459939910__custom_links_with_image_UnEXb9 .text-scheme-text {padding-left: 50px; padding-right: 50px;} #shopify-section-template--21296459939910__custom_links_with_image_UnEXb9 .gap-gutter {border-bottom: 1px solid black;} </style></div><div id="shopify-section-template--21296459939910__main" class="shopify-section blog-template">
4734
4735
4736  <section
4737    class="blog border-b-gridline border-gridline-color bg-scheme-background text-scheme-text"
4738    data-color-scheme="scheme5"
4739  ><div class="border-b-gridline border-gridline-color bg-scheme-background px-section-horizontal-spacing pb-theme pt-theme-double text-scheme-text">
4740        <h1 class="font-heading flex items-baseline gap-1.5 text-heading-feature">
4741          Blog
4742          
4743        </h1>
4744      </div>
4745
4746        <ol class="grid grid-cols-1 gap-gutter bg-gridline-color lg:grid-cols-3">
4747<li class="group relative bg-scheme-background text-scheme-text">
4748              <a class="absolute inset-0 z-10" href="/blogs/the-print-room-nz/fast-15-with-cat-mackenzie-everitt"
4749                ><span class="sr-only">Read more: Fast 15 with Cat Mackenzie Everitt</span></a
4750              >
4751              <div class="block h-full"><div class="full-h bg-scheme-background pt-2 px-section-horizontal-spacing lg:pt-4">
4752                    <div class="relative">
4753                      
4754  
4755  <image-with-placeholder
4756    class="relative w-full"
4757    style="padding-bottom: 100%;"
4758  ><img src="//printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=3000" alt="Fast 15 with Cat Mackenzie Everitt" srcset="//printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=200 200w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=350 350w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=450 450w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=750 750w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=850 850w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=960 960w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=1280 1280w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=1440 1440w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=1536 1536w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=1706 1706w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=1782 1782w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=1920 1920w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=2560 2560w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=2880 2880w, //printroom.co/cdn/shop/articles/Screen_Shot_2025-06-10_at_4.24.26_PM.png?v=1760939848&amp;width=3000 3000w" width="3000" height="3006" loading="lazy" class="peer/image absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) calc(100vw / 3), 100vw">
4759    <div
4760      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4761    ></div>
4762  </image-with-placeholder>
4763
4764
4765                    </div>
4766                  </div><div class="px-section-horizontal-spacing py-section-vertical-spacing">
4767                  <h2 class="font-heading break-word text-heading-secondary">
4768                    Fast 15 with Cat Mackenzie Everitt
4769                  </h2><div class="rte mt-4">
4770  1. What is your role at The Print Room? 
4771
4772I work in the heat press department. I press all the Supacolour transfers!
4773 
4774  2. Share a portrait of ...
4775</div>
4776
4777                  
4778
4779                  
4780                    <div class="mt-4">
4781                      <span
4782                        class="theme-link group-hover:text-scheme-accent"
4783                        href="/blogs/the-print-room-nz/fast-15-with-cat-mackenzie-everitt"
4784                        aria-label="Read more: Fast 15 with Cat Mackenzie Everitt"
4785                      >Read more
4786                      </span>
4787                    </div></div>
4788              </div>
4789            </li>
4790          
4791<li class="group relative bg-scheme-background text-scheme-text">
4792              <a class="absolute inset-0 z-10" href="/blogs/the-print-room-nz/what-makes-a-good-branded-tote-bag"
4793                ><span class="sr-only">Read more: What makes a good branded tote bag</span></a
4794              >
4795              <div class="block h-full"><div class="full-h bg-scheme-background pt-2 px-section-horizontal-spacing lg:pt-4">
4796                    <div class="relative">
4797                      
4798  
4799  <image-with-placeholder
4800    class="relative w-full"
4801    style="padding-bottom: 100%;"
4802  ><img src="//printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=3000" alt="What makes a good branded tote bag" srcset="//printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=200 200w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=350 350w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=450 450w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=750 750w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=850 850w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=960 960w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=1280 1280w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=1440 1440w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=1536 1536w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=1706 1706w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=1782 1782w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=1920 1920w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=2560 2560w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=2880 2880w, //printroom.co/cdn/shop/articles/Untitled_design_96_cb8beb0a-4919-497e-8aa4-5fcd7437aca9.png?v=1749609090&amp;width=3000 3000w" width="3000" height="3000" loading="lazy" class="peer/image absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) calc(100vw / 3), 100vw">
4803    <div
4804      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4805    ></div>
4806  </image-with-placeholder>
4807
4808
4809                    </div>
4810                  </div><div class="px-section-horizontal-spacing py-section-vertical-spacing">
4811                  <h2 class="font-heading break-word text-heading-secondary">
4812                    What makes a good branded tote bag
4813                  </h2><div class="rte mt-4">If you're planning to create branded tote bags for your business or event, you're probably asking some practical questions. What materials work bes...
4814</div>
4815
4816                  
4817
4818                  
4819                    <div class="mt-4">
4820                      <span
4821                        class="theme-link group-hover:text-scheme-accent"
4822                        href="/blogs/the-print-room-nz/what-makes-a-good-branded-tote-bag"
4823                        aria-label="Read more: What makes a good branded tote bag"
4824                      >Read more
4825                      </span>
4826                    </div></div>
4827              </div>
4828            </li>
4829          
4830<li class="group relative bg-scheme-background text-scheme-text">
4831              <a class="absolute inset-0 z-10" href="/blogs/the-print-room-nz/case-study-making-good-merch-with-parrotdog-brewery"
4832                ><span class="sr-only">Read more: Custom Merchandise Case Study: Wellington&#39;s Parrotdog Brewery</span></a
4833              >
4834              <div class="block h-full"><div class="full-h bg-scheme-background pt-2 px-section-horizontal-spacing lg:pt-4">
4835                    <div class="relative">
4836                      
4837  
4838  <image-with-placeholder
4839    class="relative w-full"
4840    style="padding-bottom: 100%;"
4841  ><img src="//printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=3000" alt="Custom Merchandise Case Study: Wellington&#39;s Parrotdog Brewery" srcset="//printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=200 200w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=350 350w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=450 450w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=750 750w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=850 850w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=960 960w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=1280 1280w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=1440 1440w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=1536 1536w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=1706 1706w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=1782 1782w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=1920 1920w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=2560 2560w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=2880 2880w, //printroom.co/cdn/shop/articles/parrotdog.webp?v=1760941869&amp;width=3000 3000w" width="3000" height="3000" loading="lazy" class="peer/image absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) calc(100vw / 3), 100vw">
4842    <div
4843      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4844    ></div>
4845  </image-with-placeholder>
4846
4847
4848                    </div>
4849                  </div><div class="px-section-horizontal-spacing py-section-vertical-spacing">
4850                  <h2 class="font-heading break-word text-heading-secondary">
4851                    Custom Merchandise Case Study: Wellington's Parrotdog Brewery
4852                  </h2><div class="rte mt-4">Some partnerships in New Zealand's custom merchandise industry evolve naturally. What started as a few simple screen printing runs with Wellington'...
4853</div>
4854
4855                  
4856
4857                  
4858                    <div class="mt-4">
4859                      <span
4860                        class="theme-link group-hover:text-scheme-accent"
4861                        href="/blogs/the-print-room-nz/case-study-making-good-merch-with-parrotdog-brewery"
4862                        aria-label="Read more: Custom Merchandise Case Study: Wellington&#39;s Parrotdog Brewery"
4863                      >Read more
4864                      </span>
4865                    </div></div>
4866              </div>
4867            </li>
4868          
4869<li class="group relative bg-scheme-background text-scheme-text">
4870              <a class="absolute inset-0 z-10" href="/blogs/the-print-room-nz/how-much-does-it-cost-to-print-a-hoodie-for-your-brand"
4871                ><span class="sr-only">Read more: How much does it cost to print a hoodie for your brand</span></a
4872              >
4873              <div class="block h-full"><div class="full-h bg-scheme-background pt-2 px-section-horizontal-spacing lg:pt-4">
4874                    <div class="relative">
4875                      
4876  
4877  <image-with-placeholder
4878    class="relative w-full"
4879    style="padding-bottom: 100%;"
4880  ><img src="//printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=3000" alt="How much does it cost to print a hoodie for your brand" srcset="//printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=200 200w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=350 350w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=450 450w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=750 750w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=850 850w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=960 960w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=1280 1280w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=1440 1440w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=1536 1536w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=1706 1706w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=1782 1782w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=1920 1920w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=2560 2560w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=2880 2880w, //printroom.co/cdn/shop/articles/Untitled_design_93_7416da8d-8684-4d81-b03a-11744ea55d5a.png?v=1760926440&amp;width=3000 3000w" width="3000" height="3000" loading="lazy" class="peer/image absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) calc(100vw / 3), 100vw">
4881    <div
4882      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4883    ></div>
4884  </image-with-placeholder>
4885
4886
4887                    </div>
4888                  </div><div class="px-section-horizontal-spacing py-section-vertical-spacing">
4889                  <h2 class="font-heading break-word text-heading-secondary">
4890                    How much does it cost to print a hoodie for your brand
4891                  </h2><div class="rte mt-4">Creating custom hoodies for your brand is a smart move. They're worn year-round, appeal to a wide range of people, and offer a great canvas for you...
4892</div>
4893
4894                  
4895
4896                  
4897                    <div class="mt-4">
4898                      <span
4899                        class="theme-link group-hover:text-scheme-accent"
4900                        href="/blogs/the-print-room-nz/how-much-does-it-cost-to-print-a-hoodie-for-your-brand"
4901                        aria-label="Read more: How much does it cost to print a hoodie for your brand"
4902                      >Read more
4903                      </span>
4904                    </div></div>
4905              </div>
4906            </li>
4907          
4908<li class="group relative bg-scheme-background text-scheme-text">
4909              <a class="absolute inset-0 z-10" href="/blogs/the-print-room-nz/10-creative-marketing-swag-ideas-worth-the-spend"
4910                ><span class="sr-only">Read more: 10 Creative marketing swag ideas worth the spend</span></a
4911              >
4912              <div class="block h-full"><div class="full-h bg-scheme-background pt-2 px-section-horizontal-spacing lg:pt-4">
4913                    <div class="relative">
4914                      
4915  
4916  <image-with-placeholder
4917    class="relative w-full"
4918    style="padding-bottom: 100%;"
4919  ><img src="//printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=3000" alt="Creative marketing swag ideas including custom caps, tote bags, and promotional products from The Print Room NZ" srcset="//printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=200 200w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=350 350w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=450 450w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=750 750w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=850 850w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=960 960w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=1280 1280w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=1440 1440w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=1536 1536w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=1706 1706w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=1782 1782w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=1920 1920w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=2560 2560w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=2880 2880w, //printroom.co/cdn/shop/articles/Untitled_design_92_eb0c8c77-e416-487f-a7b0-045d3601742b.png?v=1761532382&amp;width=3000 3000w" width="3000" height="3000" loading="lazy" class="peer/image absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) calc(100vw / 3), 100vw">
4920    <div
4921      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4922    ></div>
4923  </image-with-placeholder>
4924
4925
4926                    </div>
4927                  </div><div class="px-section-horizontal-spacing py-section-vertical-spacing">
4928                  <h2 class="font-heading break-word text-heading-secondary">
4929                    10 Creative marketing swag ideas worth the spend
4930                  </h2><div class="rte mt-4">Marketing swag has moved beyond giveaways and gimmicks.Today, the most impactful merchandise reflects your brand’s values, offers something useful,...
4931</div>
4932
4933                  
4934
4935                  
4936                    <div class="mt-4">
4937                      <span
4938                        class="theme-link group-hover:text-scheme-accent"
4939                        href="/blogs/the-print-room-nz/10-creative-marketing-swag-ideas-worth-the-spend"
4940                        aria-label="Read more: 10 Creative marketing swag ideas worth the spend"
4941                      >Read more
4942                      </span>
4943                    </div></div>
4944              </div>
4945            </li>
4946          
4947<li class="group relative bg-scheme-background text-scheme-text">
4948              <a class="absolute inset-0 z-10" href="/blogs/the-print-room-nz/how-to-create-merchandise-for-your-business-that-builds-loyalty-and-sells-fast-7"
4949                ><span class="sr-only">Read more: How to create merchandise for your business that builds loyalty and sells fast</span></a
4950              >
4951              <div class="block h-full"><div class="full-h bg-scheme-background pt-2 px-section-horizontal-spacing lg:pt-4">
4952                    <div class="relative">
4953                      
4954  
4955  <image-with-placeholder
4956    class="relative w-full"
4957    style="padding-bottom: 100%;"
4958  ><img src="//printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=3000" alt="How to create merchandise for your business that builds loyalty and sells fast" srcset="//printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=200 200w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=350 350w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=450 450w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=750 750w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=850 850w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=960 960w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=1280 1280w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=1440 1440w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=1536 1536w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=1706 1706w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=1782 1782w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=1920 1920w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=2560 2560w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=2880 2880w, //printroom.co/cdn/shop/articles/Untitled_design_91_d88d86fc-18da-4f5d-b4b4-37c5fa60a848.png?v=1761869320&amp;width=3000 3000w" width="3000" height="3000" loading="lazy" class="peer/image absolute inset-0 w-full h-full object-cover" sizes="(min-width: 1024px) calc(100vw / 3), 100vw">
4959    <div
4960      class="absolute inset-0 h-full w-full bg-scheme-text opacity-[0.05] peer-[.is-complete]/image:opacity-0 no-js:hidden"
4961    ></div>
4962  </image-with-placeholder>
4963
4964
4965                    </div>
4966                  </div><div class="px-section-horizontal-spacing py-section-vertical-spacing">
4967                  <h2 class="font-heading break-word text-heading-secondary">
4968                    How to create merchandise for your business that builds loyalty and sells fast
4969                  </h2><div class="rte mt-4">Knowing how to create merchandise for your business is more important than ever. Done thoughtfully, merchandise strengthens loyalty, builds brand p...
4970</div>
4971
4972                  
4973
4974                  
4975                    <div class="mt-4">
4976                      <span
4977                        class="theme-link group-hover:text-scheme-accent"
4978                        href="/blogs/the-print-room-nz/how-to-create-merchandise-for-your-business-that-builds-loyalty-and-sells-fast-7"
4979                        aria-label="Read more: How to create merchandise for your business that builds loyalty and sells fast"
4980                      >Read more
4981                      </span>
4982                    </div></div>
4983              </div>
4984            </li>
4985          
4986</ol>
4987    
4988
4989    
4990      <div
4991  class="border-t-gridline border-gridline-color bg-scheme-background px-section-horizontal-spacing pb-theme-double pt-theme text-right text-sm text-scheme-text md:text-base"
4992  data-color-scheme="scheme5"
4993>
4994  <ul class="pagination flex items-center">
4995    <li class="mr-auto w-28 text-left md:w-1/3">
4996      
4997    </li><li
4998            class="active hidden border-b-text border-scheme-text px-2 py-1 md:inline-block"
4999            aria-current="page"
5000          >
5001            <span class="sr-only">page</span> 1
5002          </li><li class="hidden md:inline-block">
5003          <a
5004            class="inline-block border-b-text border-transparent px-2 py-1"
5005            href="/blogs/the-print-room-nz?page=2"
5006          >
5007            <span class="sr-only">page</span> 2
5008          </a>
5009        </li><li class="hidden md:inline-block">
5010          <a
5011            class="inline-block border-b-text border-transparent px-2 py-1"
5012            href="/blogs/the-print-room-nz?page=3"
5013          >
5014            <span class="sr-only">page</span> 3
5015          </a>
5016        </li><li class="hidden border-b-text border-transparent px-2 py-1 md:inline-block">
5017            <span class="sr-only">page</span> &hellip;
5018          </li><li class="hidden md:inline-block">
5019          <a
5020            class="inline-block border-b-text border-transparent px-2 py-1"
5021            href="/blogs/the-print-room-nz?page=24"
5022          >
5023            <span class="sr-only">page</span> 24
5024          </a>
5025        </li><li class="ml-auto w-28 text-right md:w-1/3">
5026      
5027        <a
5028          class="theme-link hover:text-scheme-accent"
5029          href="/blogs/the-print-room-nz?page=2"
5030        >Next</a>
5031      
5032    </li>
5033  </ul>
5034</div>
5035
5036    
5037  </section>
5038
5039
5040</div>
5040<script data-locksmith>
5041    var load = function () {
5042
5043          if (document.querySelectorAll('.locksmith-manual-trigger').length > 0) {
5044            Locksmith.ping();
5045          }
5046
5047
5048      Locksmith.util.on('submit', 'locksmith-resource-form', function (event) {
5049        event.preventDefault();
5050        var data = Locksmith.util.serializeForm(event.target);
5051        var options = { spinner: false, container: 'locksmith-content' };
5052        // a form rendered inline (section replacement) must keep that context
5053        // on resubmit: same enclosing container (there may be several on the
5054        // page), and no layout classes or cancel affordance in the re-render
5055        var inlineContainer = event.target.closest && event.target.closest('[id^="locksmith-content"]');
5056        if (inlineContainer) {
5057          options.container = inlineContainer;
5058        }
5059        if (event.target.getAttribute('data-locksmith-inline') === 'true') {
5060          options.include_layout_classes = false;
5061        }
5062        Locksmith.postResource(data, options);
5063      });
5064
5065      Locksmith.util.on('click', 'locksmith-manual-trigger', function (event) {
5066        event.preventDefault();
5067        Locksmith.postResource({}, { spinner: true, container: document });
5068      });
5069
5070      Locksmith.submitPasscode = function (passcode) {
5071        Locksmith.postResource(
5072          { passcode: passcode },
5073          { spinner: false, container: 'locksmith-content' }
5074        );
5075      };
5076    };
5077
5078    if (typeof Locksmith !== 'undefined') {
5079      load();
5080    } else {
5081      window.addEventListener('load', load);
5082    }
5083  </script>
5083
5084    </main>
5085
5086    <!-- BEGIN sections: footer-group -->
5087<div id="shopify-section-sections--21296457154630__176903720293717250" class="shopify-section shopify-section-group-footer-group">
5088
5089
5090
5091</div><div id="shopify-section-sections--21296457154630__footer" class="shopify-section shopify-section-group-footer-group"><footer
5092  class="bg-scheme-background text-scheme-text"
5093  data-color-scheme="scheme2"
5094  data-theme-footer
5095>
5096  
5097    <section
5098  class="border-b-gridline border-gridline-color bg-scheme-background py-section-vertical-spacing text-scheme-text"
5099  data-color-scheme="scheme2"
5100>
5101  <div class="justify-center px-section-horizontal-spacing lg:flex lg:items-center lg:justify-between">
5102    <div class="text-base">
5103      
5104
5105      
5106        <div class="[&_a[href]]:underline [&_a[href]]:hover:text-scheme-accent">
5107          <h2>We occasionally send out <strong>newsletters</strong>. You should sign up →</h2>
5108        </div>
5109      
5110    </div>
5111
5112    <div class="mt-theme-half lg:mt-0">
5113      <form method="post" action="/contact#Contact-sections--21296457154630__footer" id="Contact-sections--21296457154630__footer" accept-charset="UTF-8" class="contact-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="✓" />
5114        
5115
5116        
5117          <input type="hidden" name="contact[tags]" value="newsletter">
5118          <div class="items-end lg:ml-4 lg:flex">
5119            <label class="sr-only" for="Email-sections--21296457154630__footer">Email address</label>
5120            <input
5121              type="email"
5122              class="font-body block w-full border-b-text border-current bg-transparent pb-1 leading-[inherit] placeholder-current"
5123              name="contact[email]"
5124              id="Email-sections--21296457154630__footer"
5125              value=""
5126              placeholder="Email address"
5127              autocorrect="off"
5128              autocapitalize="off"
5129            >
5130            <button
5131              class="theme-link mt-2 shrink-0 py-1 leading-[inherit] hover:text-scheme-accent lg:ml-2 lg:mt-0"
5132              type="submit"
5133              name="commit"
5134              id="Subscribe"
5135            >Subscribe</button>
5136          </div>
5137        
5138      </form>
5139    </div>
5140  </div>
5141</section>
5142
5143  
5144  
5145    <div class="border-b-gridline border-gridline-color">
5146      <div
5147        class="grid lg:grid-cols-var bg-gridline-color"
5148        style="--grid-cols: 12;"
5149      ><div
5150            class="break-word bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text lg:col-span-var"
5151            style="--col-span: 3;"
5152            
5153          ><div class="inline-block text-left">
5154                  
5155                  
5156                    <h2 class="font-heading mb-4 text-base">
5157                      Explore
5158                    </h2>
5159                  
5160                  <ul class="list-none space-y-1">
5161                    
5162<li>
5163                        <a
5164                          href="/pages/all-products"
5165                          class="hover:text-scheme-accent"
5166                        >
5167                          Products
5168                        </a>
5169                      </li>
5170                    
5171<li>
5172                        <a
5173                          href="/pages/services"
5174                          class="hover:text-scheme-accent"
5175                        >
5176                          Services
5177                        </a>
5178                      </li>
5179                    
5180<li>
5181                        <a
5182                          href="https://www.theprintroom.nz/apps/order-tracker"
5183                          class="hover:text-scheme-accent"
5184                        >
5185                          Track your order
5186                        </a>
5187                      </li>
5188                    
5189<li>
5190                        <a
5191                          href="/pages/responsibility"
5192                          class="hover:text-scheme-accent"
5193                        >
5194                          Responsibility
5195                        </a>
5196                      </li>
5197                    
5198<li>
5199                        <a
5200                          href="/pages/about-print-room"
5201                          class="hover:text-scheme-accent"
5202                        >
5203                          About us
5204                        </a>
5205                      </li>
5206                    
5207                  </ul>
5208                </div></div><div
5209            class="break-word bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text lg:col-span-var"
5210            style="--col-span: 3;"
5211            
5212          ><div class="inline-block text-left">
5213                  
5214                  
5215                    <h2 class="font-heading mb-4 text-base">
5216                      Helpful stuff
5217                    </h2>
5218                  
5219                  <ul class="list-none space-y-1">
5220                    
5221<li>
5222                        <a
5223                          href="/pages/screen-printing-faqs-the-print-room-quality-screen-printing-garment-design-blank-clothing"
5224                          class="hover:text-scheme-accent"
5225                        >
5226                          FAQs
5227                        </a>
5228                      </li>
5229                    
5230<li>
5231                        <a
5232                          href="https://help.theprintroom.nz/"
5233                          class="hover:text-scheme-accent"
5234                        >
5235                          Resource hub
5236                        </a>
5237                      </li>
5238                    
5239<li>
5240                        <a
5241                          href="/pages/catalogue"
5242                          class="hover:text-scheme-accent"
5243                        >
5244                          Catalogues
5245                        </a>
5246                      </li>
5247                    
5248<li>
5249                        <a
5250                          href="/blogs/the-print-room-nz"
5251                          class="hover:text-scheme-accent"
5252                        >
5253                          Blogs
5254                        </a>
5255                      </li>
5256                    
5257<li>
5258                        <a
5259                          href="/pages/policies"
5260                          class="hover:text-scheme-accent"
5261                        >
5262                          Policies & T&Cs
5263                        </a>
5264                      </li>
5265                    
5266                  </ul>
5267                </div></div><div
5268            class="break-word bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text lg:col-span-var"
5269            style="--col-span: 3;"
5270            
5271          >
5272                  <h2 class="font-heading break-word mb-4 text-base">
5273                    Get in touch - NZ
5274                  </h2>
5275                
5276<div class="rte">
5277                  <p>21 Grosvenor St, Kensington, Dunedin,<br/>9012<br/>[email protected]<br/>NZ: 03 425 9694</p>
5278                </div></div><div
5279            class="break-word bg-scheme-background px-section-horizontal-spacing py-section-vertical-spacing text-scheme-text lg:col-span-var"
5280            style="--col-span: 3;"
5281            
5282          >
5283                  <h2 class="font-heading break-word mb-4 text-base">
5284                    Get in touch - AUS
5285                  </h2>
5286                
5287<div class="rte">
5288                  <p>The Commons, 10–20 Gwynne St, Cremorne VIC 3121<br/>[email protected]<br/>+61 (0) 451 701 385</p>
5289                </div></div></div>
5290    </div>
5291  
5292
5293  <div>
5294    <div class="px-section-horizontal-spacing py-section-vertical-spacing lg:flex lg:flex-wrap lg:items-center lg:justify-between">
5295      <div class="mb-4 space-y-2 text-sm lg:mb-0 lg:flex-1">
5296        <p>
5297          &copy; 2026,
5298          <a href="/" title="">The Print Room</a>.
5299        </p>
5300        <ul class="flex flex-wrap gap-1 text-sm [&>li:last-child]:after:content-none [&>li]:after:content-['\00B7']">
5301          <li>
5302            
5303          </li></ul>
5304      </div>
5305      
5306</div>
5307  </div>
5308</footer>
5309
5310
5311  <style>
5312    .footer-logo-image {
5313      display: block;
5314      max-width: px;
5315    }
5316  </style>
5317
5318
5319
5320<style> #shopify-section-sections--21296457154630__footer .text-base {font-size: 20px;} #shopify-section-sections--21296457154630__footer .font-heading {text-decoration: underline;} #shopify-section-sections--21296457154630__footer .inline-block {line-height: 1.7;} #shopify-section-sections--21296457154630__footer /*.bg-scheme-background {border-top: 1px solid black;}*/.text-scheme-text {border-bottom: 1px solid black;} </style></div>
5321<!-- END sections: footer-group --><!-- BEGIN sections: overlay-group -->
5322<div id="shopify-section-sections--21296457220166__promo-popup" class="shopify-section shopify-section-group-overlay-group contents">
5323
5324
5325</div><div id="shopify-section-sections--21296457220166__age-check" class="shopify-section shopify-section-group-overlay-group contents">
5326</div><div id="shopify-section-sections--21296457220166__privacy-banner" class="shopify-section shopify-section-group-overlay-group contents">
5327
5328
5329</div>
5330<!-- END sections: overlay-group -->
5331
5332    <div
5333      id="screenreader-announce"
5334      class="sr-only"
5335      aria-live="polite"
5336      role="status"
5337    ></div>
5338
5339    <ul hidden>
5340      <li id="a11y-refresh-page-message">
5341        Choosing a selection results in a full page refresh.
5342      </li>
5343      <li id="a11y-selection-message">
5344        Press the space key then arrow keys to make a selection.
5345      </li>
5346    </ul>
5347
5348    
5349    <data-island
5350  role="complementary"
5351  aria-labelledby="left-drawer-slot"
5352  x-data
5353  on="load"
5354>
5355  <template x-teleport="body">
5356    <div
5357      x-show="$store.modals.leftDrawer.open"
5358      @keydown.escape.prevent.stop="$store.modals.close('leftDrawer')"
5359      @click="$store.modals.close('leftDrawer')"
5360      class="fixed inset-0 z-110"
5361      data-color-scheme="scheme1"
5362      id="modals-leftDrawer"
5363    >
5364      <div
5365        @click.stop
5366        x-show="$store.modals.leftDrawer.open"
5367        x-transition:enter="duration-300 motion-reduce:duration-0 outline-0"
5368        x-transition:enter-start="opacity-0 -translate-x-full"
5369        x-transition:leave="duration-300 motion-reduce:duration-0 outline-0"
5370        x-transition:leave-end="-translate-x-full"
5371        x-trap.noscroll.inert="$store.modals.leftDrawer.open"
5372        class="mr-auto h-full w-11/12 max-w-md transform overflow-y-auto border-r-gridline border-gr
5372idline-color bg-scheme-background text-scheme-text transition-transform"
5373        id="left-drawer-slot"
5374        role="dialog"
5375        @left-drawer-is-open.window="setTimeout(() => { $el.setAttribute('aria-modal', 'true') }, 120)"
5376        @left-drawer-is-closed.window="setTimeout(() => { $el.removeAttribute('aria-modal') }, 120)"
5377        :aria-label="getModalLabel('leftDrawer', $el)"
5378        tabindex="-1"
5379      >
5380        <!-- Modal content is teleported here -->
5381      </div>
5382    </div>
5383  </template>
5384</data-island>
5385<data-island
5386  role="complementary"
5387  aria-labelledby="right-drawer-slot"
5388  x-data
5389  on="load"
5390>
5391  <template x-teleport="body">
5392    <div
5393      x-show="$store.modals.rightDrawer.open"
5394      @keydown.escape.prevent.stop="$store.modals.close('rightDrawer')"
5395      @click="$store.modals.close('rightDrawer')"
5396      class="fixed inset-0 z-110"
5397      style="background: rgba(208,208,208,0.2); backdrop-filter: blur(1.5px); -webkit-backdrop-filter: blur(1.5px);"
5398      data-color-scheme="scheme1"
5399      id="modals-rightDrawer"
5400    >
5401      <div
5402        @click.stop
5403        x-show="$store.modals.rightDrawer.open"
5404        x-transition:enter="duration-300 motion-reduce:duration-0 outline-0"
5405        x-transition:enter-start="translate-x-full"
5406        x-transition:leave="duration-300 motion-reduce:duration-0 outline-0"
5407        x-transition:leave-end="translate-x-full"
5408        x-trap.noscroll.inert="$store.modals.rightDrawer.open"
5409        class="ml-auto h-full w-11/12 max-w-lg transform overflow-y-auto bg-scheme-background text-scheme-text"
5410        style="border-left: 2px solid black;"
5411        id="right-drawer-slot"
5412        role="dialog"
5413        @right-drawer-is-open.window="setTimeout(() => { $el.setAttribute('aria-modal', 'true') }, 120)"
5414        @right-drawer-is-closed.window="setTimeout(() => { $el.removeAttribute('aria-modal') }, 120)"
5415        :aria-label="getModalLabel('rightDrawer', $el)"
5416        tabindex="-1"
5417      >
5418        <!-- Modal content is teleported here -->
5419      </div>
5420    </div>
5421  </template>
5422</data-island>
5423<data-island
5424  role="complementary"
5425  aria-labelledby="quick-buy-drawer-slot-container"
5426  x-data
5427  on="load"
5428>
5429  <template x-teleport="body">
5430    <div
5431      x-show="$store.modals.quickBuyDrawer.open"
5432      @keydown.escape.prevent.stop="$store.modals.close('quickBuyDrawer')"
5433      @click="$store.modals.close('quickBuyDrawer')"
5434      class="fixed inset-0 z-110 flex lg:block"
5435      data-color-scheme="scheme1"
5436      id="modals-quickBuyDrawer"
5437    >
5438      <div
5439        @click.stop
5440        id="quick-buy-drawer-slot-container"
5441        x-show="$store.modals.quickBuyDrawer.open"
5442        x-transition:enter="duration-300 motion-reduce:duration-0 outline-0"
5443        x-transition:enter-start="max-lg:translate-y-full lg:translate-x-full"
5444        x-transition:leave="duration-300 motion-reduce:duration-0 outline-0"
5445        x-transition:leave-end="max-lg:translate-y-full lg:translate-x-full"
5446        x-trap.noscroll.inert="$store.modals.quickBuyDrawer.open"
5447        class="mt-auto h-auto w-full transform border-gridline-color bg-scheme-background text-scheme-text lg:ml-auto lg:h-full lg:w-11/12 lg:max-w-md lg:overflow-y-auto lg:border-l-gridline"
5448        role="dialog"
5449        @quick-buy-drawer-is-open.window="setTimeout(() => { $el.setAttribute('aria-modal', 'true') }, 120)"
5450        @quick-buy-drawer-is-closed.window="setTimeout(() => { $el.removeAttribute('aria-modal') }, 120)"
5451        :aria-label="getModalLabel('quickBuyDrawer', document.getElementById('quick-buy-drawer-slot'))"
5452        tabindex="-1"
5453      >
5454        <div class="sticky top-0 z-1 flex items-center justify-between border-y-gridline border-gridline-color bg-scheme-background px-section-horizontal-spacing py-4 lg:border-t-0">
5455          <div>
5456            Choose options
5457          </div>
5458          <button
5459            @click.prevent="$store.modals.close('quickBuyDrawer')"
5460            class="absolute right-0 top-0 block h-full"
5461            type="button"
5462          >
5463            <span class="sr-only">Close</span>
5464            <div class="my-auto mr-section-horizontal-spacing h-6 w-6">
5465              <svg
5466  class="theme-icon"
5467  xmlns="http://www.w3.org/2000/svg"
5468  fill="none"
5469  viewBox="0 0 24 24"
5470>
5471  <path stroke="currentColor" d="m1.5 1.5 21 21m0-21-21 21" vector-effect="non-scaling-stroke"/>
5472</svg>
5473
5474            </div>
5475          </button>
5476        </div>
5477        <div
5478          id="quick-buy-drawer-slot"
5479          class="max-lg:h-fit max-lg:max-h-[65vh] max-lg:overflow-y-auto"
5480        ></div>
5481      </div>
5482    </div>
5483  </template>
5484</data-island>
5485<data-island
5486  x-data
5487  on="load"
5488>
5489  <template x-teleport="body">
5490    <div
5491      x-show="$store.modals.promo.open"
5492      class="pointer-events-none fixed inset-0 z-110"
5493      id="modals-promo"
5494    >
5495      <div
5496        x-show="$store.modals.promo.open"
5497        class="flex h-full w-full"
5498      >
5499        <div
5500          x-show="$store.modals.promo.open"
5501          x-transition:enter="transition duration-300 motion-reduce:duration-0 delay-75 outline-0"
5502          x-transition:enter-start="translate-y-full"
5503          x-transition:enter-end="translate-y-0"
5504          x-transition:leave="transition duration-300 motion-reduce:duration-0 outline-0"
5505          x-transition:leave-start="translate-y-0"
5506          x-transition:leave-end="translate-y-full"
5507          class="pointer-events-auto relative bottom-0 left-0 right-0 top-auto mt-auto w-full overflow-y-auto"
5508          id="promo-slot"
5509          role="dialog"
5510          @promo-is-open.window="setTimeout(() => { $el.setAttribute('aria-modal', 'true') }, 120)"
5511          @promo-is-closed.window="setTimeout(() => { $el.removeAttribute('aria-modal') }, 120)"
5512          :aria-label="getModalLabel('promo', $el)"
5513          tabindex="-1"
5514        >
5515          <!-- Modal content is teleported here -->
5516        </div>
5517      </div>
5518    </div>
5519  </template>
5520</data-island>
5521<data-island x-data on="load">
5522  <template x-teleport="body">
5523    <div
5524      x-show="$store.modals.popup.open"
5525      @keydown.escape.prevent.stop="$store.modals.close('popup')"
5526      @click="$store.modals.close('popup')"
5527      class="fixed inset-0 z-110 p-8 lg:p-24"
5528      data-color-scheme="scheme1"
5529      id="modals-popup"
5530    >
5531      <div
5532        x-show="$store.modals.popup.open"
5533        class="fixed inset-0 bg-transparent"
5534      >
5535        <!-- Overlay -->
5536      </div>
5537      <div
5538        x-show="$store.modals.popup.open"
5539        class="flex h-full w-full"
5540      >
5541        <div
5542          @click.stop
5543          x-show="$store.modals.popup.open"
5544          x-trap.noscroll.inert="$store.modals.popup.open"
5545          class="relative m-auto max-h-full w-full max-w-2xl overflow-y-auto border-gr
5545idline border-gridline-color bg-scheme-background text-scheme-text"
5546          id="popup-slot"
5547          role="dialog"
5548          @popup-is-open.window="setTimeout(() => { $el.setAttribute('aria-modal', 'true') }, 120)"
5549          @popup-is-closed.window="setTimeout(() => { $el.removeAttribute('aria-modal') }, 120)"
5550          :aria-label="getModalLabel('popup', $el)"
5551          tabindex="-1"
5552        >
5553          <!-- Modal content is teleported here -->
5554        </div>
5555      </div>
5556    </div>
5557  </template>
5558</data-island>
5559<data-island x-data on="load">
5560  <template x-teleport="body">
5561    <div
5562      x-show="$store.modals.modal.open"
5563      x-transition:enter="transition ease-out duration-300"
5564      x-transition:enter-start="opacity-0"
5565      x-transition:enter-end="opacity-100"
5566      x-transition:leave="transition ease-in duration-200"
5567      x-transition:leave-start="opacity-100"
5568      x-transition:leave-end="opacity-0"
5569      @keydown.escape.prevent.stop="$store.modals.close('modal')"
5570      @click="$store.modals.close('modal')"
5571      class="fixed inset-0 z-110 bg-black/40 backdrop-blur-md"
5572      style="backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);"
5573      data-color-scheme="scheme1"
5574      id="modals-modal"
5575    >
5576      <div
5577        x-show="$store.modals.modal.open"
5578        class="flex h-full w-full justify-center p-2 sm:p-4 md:p-6 lg:p-8"
5579        :class="$store.modals.modal.contents === 'quoteRequest' ? 'items-stretch sm:items-center sm:p-6 lg:p-10' : 'items-center'"
5580      >
5581        <div
5582          @click.stop
5583          x-show="$store.modals.modal.open"
5584          x-transition:enter="transition ease-out duration-300"
5585          x-transition:enter-start="opacity-0 scale-95 translate-y-4"
5586          x-transition:enter-end="opacity-100 scale-100 translate-y-0"
5587          x-transition:leave="transition ease-in duration-200"
5588          x-transition:leave-start="opacity-100 scale-100 translate-y-0"
5589          x-transition:leave-end="opacity-0 scale-95 translate-y-4"
5590          x-trap.inert="$store.modals.modal.open"
5591          class="relative flex w-full flex-col overflow-hidden text-scheme-text"
5592          :class="$store.modals.modal.contents === 'quoteRequest'
5593            ? 'max-w-2xl max-h-[100dvh] sm:max-h-[calc(100dvh-48px)] rounded-none sm:rounded-[24px]'
5594            : 'max-w-lg sm:max-w-xl md:max-w-2xl lg:max-w-3xl max-h-[calc(100vh-24px)] sm:max-h-[calc(100vh-48px)] md:max-h-[calc(100vh-64px)] lg:max-h-[calc(100vh-96px)] rounded-[20px]'"
5595          style="background: #FBFBF6; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);"
5596          id="modal-slot"
5597          role="dialog"
5598          @modal-is-open.window="setTimeout(() => { $el.setAttribute('aria-modal', 'true') }, 120)"
5599          @modal-is-closed.window="setTimeout(() => { $el.removeAttribute('aria-modal') }, 120)"
5600          :aria-label="getModalLabel('modal', $el)"
5601          tabindex="-1"
5602        >
5603          <!-- Modal content is teleported here -->
5604        </div>
5605      </div>
5606    </div>
5607  </template>
5608</data-island>
5609
5610
5611    
5612    
5613
5614    
5615    <style>
5616  /* Push chatbot left when quote drawer is open */
5617  body:has([data-favorites-drawer]:not([style*="display: none"])) #tidio-chat,
5618  body:has([data-favorites-drawer]:not([style*="display: none"])) .tidio-chat,
5619  body:has([data-favorites-drawer]:not([style*="display: none"])) iframe[title*="chat" i],
5620  body:has([data-favorites-drawer]:not([style*="display: none"])) iframe[title*="tidio" i],
5621  body:has([data-favorites-drawer]:not([style*="display: none"])) [class*="chat-widget"],
5622  body:has([data-favorites-drawer]:not([style*="display: none"])) [id*="chat-widget"] {
5623    transform: translateX(-464px) !important;
5624    transition: transform 0.3s ease !important;
5625  }
5626
5627  /* Push AI chatbot trigger left when drawer is open - desktop only */
5628  @media (min-width: 768px) {
5629    body:has([data-favorites-drawer]:not([style*="display: none"])) .ai-chatbot__trigger {
5630      right: calc(32rem + 24px) !important;
5631      transition: right 0.3s ease, transform 0.2s ease, box-shadow 0.2s ease, background 0.2s ease !important;
5632    }
5633  }
5634
5635  /* Override theme color scheme — force black text throughout drawer */
5636  [data-favorites-drawer] {
5637    --color-scheme-text: 0 0 0 !important;
5638  }
5639  [data-favorites-drawer] h2 {
5640    letter-spacing: 0px !important;
5641  }
5642  @media (max-width: 639px) {
5643    [data-favorites-drawer] h2 {
5644      text-align: left !important;
5645    }
5646  }
5647  [data-favorites-drawer] *,
5648  [data-favorites-drawer] h2,
5649  [data-favorites-drawer] p,
5650  [data-favorites-drawer] a,
5651  [data-favorites-drawer] span,
5652  [data-favorites-drawer] div,
5653  [data-favorites-drawer] li {
5654    color: black !important;
5655  }
5656
5657  /* Close button stays muted */
5658  [data-favorites-drawer] button[aria-label*="Close"],
5659  [data-favorites-drawer] button[aria-label*="Close"] svg {
5660    color: rgba(0,0,0,0.4) !important;
5661  }
5662
5663  /* Remove button stays muted, red on hover */
5664  [data-favorites-drawer] button[aria-label*="Remove"],
5665  [data-favorites-drawer] button[aria-label*="Remove"] svg {
5666    color: rgba(0,0,0,0.3) !important;
5667  }
5668  [data-favorites-drawer] button[aria-label*="Remove"]:hover,
5669  [data-favorites-drawer] button[aria-label*="Remove"]:hover svg {
5670    color: #ef4444 !important;
5671  }
5672
5673  /* Product dividers — solid black */
5674  [data-favorites-drawer] li {
5675    border-bottom: 1px solid black !important;
5676  }
5677  [data-favorites-drawer] li:last-child {
5678    border-bottom: none !important;
5679  }
5680
5681  /* Footer dividers — solid black */
5682  [data-favorites-drawer] .drawer-divider {
5683    border-top: 1px solid black !important;
5684  }
5685
5686  /* Start quote button — visible border */
5687  [data-favorites-drawer] .drawer-cta-btn {
5688    border: 2px solid #4B4D72 !important;
5689    color: #4B4D72 !important;
5690  }
5691  [data-favorites-drawer] .drawer-cta-btn:hover {
5692    background-color: #4B4D72 !important;
5693    color: #fff !important;
5694  }
5695</style>
5696
5697<data-island
5698  x-data="FavoritesDrawer"
5699  on="idle"
5700  x-cloak
5701>
5702  <div>
5703    <template x-teleport="#right-drawer-slot">
5704      <div
5705        class="flex h-full flex-col overflow-hidden" style="background: #FBFBF6;"
5706        :data-modal-label="`Your current project - ${$store.favorites.countWithText()}`"
5707        x-show="$store.modals.rightDrawer.contents === 'favorites'"
5708        data-favorites-drawer
5709      ><div class="relative shrink-0" style="padding: 80px 40px 24px;">
5710          <button
5711            @click.prevent="$store.modals.close('favorites')"
5712            class="absolute rounded-full p-2 transition-colors"
5713            style="top: 19px; right: 19px; color: rgba(0,0,0,0.4);"
5714            type="button"
5715          >
5716            <span class="sr-only">Close project drawer</span>
5717            <svg width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="2" d="m6 6 12 12m0-12-12 12"/></svg>
5718          </button>
5719          <h2 id="FavoritesTitle" tabindex="-1" class="font-bold" style="font-size: 41px; letter-spacing: 0px; line-height: 1; color: black; text-align: center;">
5720            Your current project
5721          </h2>
5722        </div><div class="flex-1 overflow-y-auto" style="padding: 20px 40px; min-height: 0;"><template x-if="$store.favorites.count === 0">
5723            <div class="flex flex-col items-center justify-center py-12 text-center">
5724              <p class="mb-2 text-base font-medium text-scheme-text">No products yet</p>
5725              <p class="mx-auto mb-8 max-w-xs text-sm text-scheme-text/60">Browse our products and add items to your project.</p>
5726              <a
5727                href="/collections/product-library"
5728                class="inline-flex items-center justify-center font-light transition"
5729                style="border: 2px solid #4B4D72; color: #4B4D72; border-radius: 50px; padding: 18px 48px; font-size: 24px;"
5730                onmouseover="this.style.backgroundColor='#4B4D72'; this.style.color='#fff';"
5731                onmouseout="this.style.backgroundColor='transparent'; this.style.color='#4B4D72';"
5732                @click="$store.modals.close('favorites')"
5733              >
5734                Browse Products
5735              </a>
5736            </div>
5737          </template><template x-if="$store.favorites.count > 0">
5738            <ul>
5739              <template x-for="item in $store.favorites.items" :key="item.key">
5740                <li class="flex items-center" style="padding: 20px 0; gap: 16px;">
5741                  <button
5742                    @click="$store.favorites.remove(item.key)"
5743                    class="shrink-0 rounded-full p-1 transition-colors hover:text-red-500"
5744                    style="color: rgba(0,0,0,0.3);"
5745                    :aria-label="'Remove ' + item.title"
5746                  >
5747                    <svg width="19" height="19" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="2" d="m6 6 12 12m0-12-12 12"/></svg>
5748                  </button>
5749                  <a :href="item.url" class="block shrink-0 overflow-hidden bg-gray-100" style="width: 90px; height: 90px;">
5750                    <img :src="item.image" :alt="item.title" class="h-full w-full object-cover" loading="lazy" width="90" height="90">
5751                  </a>
5752                  <div class="min-w-0 flex-1">
5753                    <p style="font-size: 16px; font-weight: 300; line-height: 18px; color: black;" x-text="item.vendor || ''"></p>
5754                    <a :href="item.url" class="line-clamp-1" style="font-size: 16px; font-weight: 600; line-height: 18px; color: black;" x-text="item.title"></a>
5755                    <p class="text-xs text-gray-600" x-text="item.colour || (item.hasColours ? 'Colour TBC' : '')"></p>
5756                  </div>
5757                </li>
5758              </template>
5759            </ul>
5760          </template>
5761        </div><div class="shrink-0" style="padding: 0 40px 48px;">
5762          <template x-if="$store.favorites.count > 0">
5763            <div>
5764              <div class="drawer-divider" style="padding-top: 28px;">
5765                <p style="font-size: 23px; font-weight: 300; line-height: 30px;">Get a quote for these products.</p>
5766              </div>
5767              <div class="drawer-divider" style="margin-top: 24px; padding-top: 24px;">
5768                <p style="font-size: 15px; line-height: 20px;">Once submitted, one of our team will provide a more accurate quote based on the information provided. We aim to have a quote back to you within 5 working days.</p>
5769              </div>
5770              <button
5771                @click="$store.modals.close('favorites'); setTimeout(() => $store.modals.open('quoteRequest'), 300)"
5772                class="drawer-cta-btn inline-flex w-full items-center justify-center text-center transition"
5773                style="margin-top: 24px; min-height: 79px; border-radius: 50px; font-size: 27px; font-weight: 300;"
5774              >
5775                Start quote request
5776              </button>
5777            </div>
5778          </template>
5779        </div>
5780      </div>
5781    </template>
5782  </div>
5783</data-island>
5784
5785
5786    
5787    <style>
5788  :root {
5789    --color-quote-accent: #2B3990;
5790  }
5791
5792  /* Modal inputs */
5793  .qr-input,
5794  .qr-select {
5795    width: 100%;
5796    min-height: 2.15rem;
5797    border: 0.666px solid black;
5798    border-radius: 9999px;
5799    padding: 0.5rem 1rem;
5800    background: transparent;
5801    color: #111827;
5802    font-size: 0.875rem;
5803    transition: border-color 0.2s ease, box-shadow 0.2s ease;
5804  }
5805
5806  .qr-textarea {
5807    width: 100%;
5808    border: 0.75px solid black;
5809    border-radius: 10px;
5810    padding: 0.75rem 1rem;
5811    background: transparent;
5812    color: #111827;
5813    font-size: 0.875rem;
5814    resize: vertical;
5815    transition: border-color 0.2s ease, box-shadow 0.2s ease;
5816  }
5817
5818  .qr-input:focus,
5819  .qr-select:focus,
5820  .qr-textarea:focus {
5821    outline: none;
5822    border-color: var(--color-quote-accent, #2B3990);
5823    box-shadow: 0 0 0 3px rgba(43, 57, 144, 0.1);
5824  }
5825
5826  /* Ensure date & select inputs stay pill-shaped */
5827  input[type="date"].qr-input,
5828  select.qr-select {
5829    border-radius: 9999px !important;
5830    padding-left: 1rem;
5831    padding-right: 2.5rem;
5832  }
5833
5834  input[type="date"].qr-input::-webkit-calendar-picker-indicator {
5835    opacity: 0.4;
5836    cursor: pointer;
5837  }
5838
5839  /* Budget slider */
5840  .qr-slider {
5841    -webkit-appearance: none;
5842    appearance: none;
5843    width: 100%;
5844    height: 28px;
5845    background: transparent;
5846    outline: none;
5847    cursor: pointer;
5848    position: relative;
5849    z-index: 2;
5850    touch-action: none;
5851    margin: 0;
5852    padding: 0;
5853  }
5854
5855  .qr-slider::-webkit-slider-runnable-track {
5856    height: 6px;
5857    border-radius: 9999px;
5858    background: var(--slider-track, #e5e7eb);
5859    cursor: pointer;
5860  }
5861
5862  .qr-slider::-webkit-slider-thumb {
5863    -webkit-appearance: none;
5864    appearance: none;
5865    width: 24px;
5866    height: 24px;
5867    border-radius: 50%;
5868    background: #658a6a;
5869    cursor: grab;
5870    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
5871    margin-top: -9px;
5872    border: 2px solid #fff;
5873  }
5874
5875  .qr-slider::-webkit-slider-thumb:active {
5876    cursor: grabbing;
5877    transform: scale(1.1);
5878    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2);
5879  }
5880
5881  .qr-slider::-moz-range-track {
5882    height: 6px;
5883    border-radius: 9999px;
5884    background: var(--slider-track, #e5e7eb);
5885    cursor: pointer;
5886  }
5887
5888  .qr-slider::-moz-range-thumb {
5889    width: 24px;
5890    height: 24px;
5891    border: 2px solid #fff;
5892    border-radius: 50%;
5893    background: #658a6a;
5894    cursor: grab;
5895    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
5896  }
5897
5898  .qr-slider::-moz-range-thumb:active {
5899    cursor: grabbing;
5900  }
5901
5902  .qr-slider::-moz-range-progress {
5903    height: 6px;
5904    border-radius: 9999px;
5905    background: #658a6a;
5906  }
5907
5908  /* Pill buttons for per-product fields */
5909  .qr-pill {
5910    display: inline-flex;
5911    height: 23px;
5912    align-items: center;
5913    justify-content: center;
5914    gap: 0.25rem;
5915    border: 0.666px solid black;
5916    border-radius: 9999px;
5917    padding: 0 0.75rem;
5918    background: #eee;
5919    color: #111827;
5920    font-size: 10.65px;
5921    font-weight: 400;
5922    cursor: pointer;
5923    transition: border-color 0.15s, background 0.15s;
5924    white-space: nowrap;
5925    position: relative;
5926  }
5927
5928  .qr-pill:hover {
5929    border-color: black;
5930    background: #e2e2e2;
5931  }
5932
5933  .qr-pill--active {
5934    border-color: black;
5935    color: #111827;
5936    background: #e2e2e2;
5937  }
5938
5939  .qr-pill--required {
5940    border-color: #dc2626;
5941  }
5942
5943  /* Pills grid: fixed equal columns across all rows */
5944  .qr-pills-row {
5945    display: grid;
5946    grid-template-columns: repeat(3, 1fr);
5947  }
5948
5949  /* Popover for pill fields */
5950  .qr-popover {
5951    position: absolute;
5952    top: calc(100% + 6px);
5953    left: 0;
5954    z-index: 50;
5955    min-width: 14rem;
5956    border: 0.666px solid black;
5957    border-radius: 8px;
5958    background: #fff;
5959    padding: 0.75rem;
5960    box-shadow: 0 3px 7px 0 rgba(0, 0, 0, 0.4);
5961  }
5962
5963  /* Product item rows */
5964  .qr-product-row {
5965    border-bottom: 1px solid black !important;
5966    padding: 0.75rem 0;
5967  }
5968
5969  .qr-product-row:last-child {
5970    border-bottom: none !important;
5971  }
5972
5973  /* Submit button */
5974  .qr-submit {
5975    display: flex;
5976    height: 70px;
5977    width: 100%;
5978    max-width: 351px;
5979    margin-left: auto;
5980    margin-right: auto;
5981    align-items: center;
5982    justify-content: center;
5983    border-radius: 50px;
5984    border: 2px solid #4B4D72;
5985    padding: 0.85rem 1.5rem;
5986    background: #4B4D72;
5987    color: #fff;
5988    font-size: 1.5rem;
5989    font-weight: 400;
5990    transition: opacity 0.2s ease, transform 0.2s ease;
5991  }
5992
5993  .qr-submit:hover {
5994    background: #3d3f5e;
5995    border-color: #3d3f5e;
5996    transform: translateY(-1px);
5997  }
5998
5999  .qr-submit:disabled {
6000    opacity: 0.4;
6001    cursor: not-allowed;
6002    transform: none;
6003  }
6004
6005  /* Outlined button */
6006  .qr-btn-outline {
6007    display: inline-flex;
6008    min-height: 2.75rem;
6009    align-items: center;
6010    justify-content: center;
6011    border: 1.5px solid #4B4D72;
6012    border-radius: 9999px;
6013    padding: 0.65rem 1.5rem;
6014    background: transparent;
6015    color: #4B4D72;
6016    font-size: 0.875rem;
6017    font-weight: 600;
6018    transition: background-color 0.2s ease, color 0.2s ease;
6019  }
6020
6021  .qr-btn-outline:hover {
6022    background: #4B4D72;
6023    color: #fff;
6024  }
6025
6026  @media (max-width: 639px) {
6027    .qr-popover {
6028      position: fixed;
6029      top: auto;
6030      bottom: 0;
6031      left: 0;
6032      right: 0;
6033      min-width: 100%;
6034      border-radius: 8px 8px 0 0;
6035      padding: 1rem;
6036      box-shadow: 0 -3px 7px 0 rgba(0, 0, 0, 0.4);
6037    }
6038  }
6039
6040  /* Fix: Tailwind arbitrary rounded class not compiled */
6041  @media (min-width: 640px) {
6042    .sm\:rounded-\[24px\] {
6043      border-radius: 27px;
6044    }
6045  }
6046
6047  /* Fix: Tailwind sm:grid-cols-2 not compiled in this theme */
6048  @media (min-width: 640px) {
6049    [data-quote-request-modal] .sm\:grid-cols-2 {
6050      grid-template-columns: repeat(2, minmax(0, 1fr));
6051    }
6052  }
6053
6054  /* Make overlay scroll instead of modal body */
6055  #modals-modal:has([data-quote-request-modal]) {
6056    overflow-y: auto;
6057  }
6058
6059  /* Flex container: min-height instead of fixed height, always center */
6060  #modals-modal:has([data-quote-request-modal]) > div {
6061    height: auto;
6062    min-height: 100%;
6063    align-items: center;
6064  }
6065
6066  /* Card: remove max-height constraint, allow natural sizing, always rounded */
6067  #modals-modal:has([data-quote-request-modal]) #modal-slot {
6068    max-height: none !important;
6069    overflow: visible !important;
6070    border-radius: 27px;
6071    border: 1.75px solid black;
6072    box-shadow: 0px 4px 13px 2px rgba(0, 0, 0, 0.1);
6073  }
6074
6075  /* Fix: Tailwind sm:flex-nowrap not compiled */
6076  @media (min-width: 640px) {
6077    .qr-product-row {
6078      flex-wrap: nowrap;
6079    }
6080  }
6081
6082  /* Content div: match card rounding */
6083  [data-quote-request-modal] {
6084    border-radius: 27px;
6085    overflow: visible !important;
6086  }
6087
6088  /* All modal text defaults to black per Figma */
6089  [data-quote-request-modal] label,
6090  [data-quote-request-modal] h3,
6091  [data-quote-request-modal] p,
6092  [data-quote-request-modal] span {
6093    color: black;
6094  }
6095
6096  /* Preserve intentional non-black colors */
6097  [data-quote-request-modal] .text-gray-400 {
6098    color: #9ca3af !important;
6099  }
6100  [data-quote-request-modal] .text-emerald-600 {
6101    color: #059669 !important;
6102  }
6103  [data-quote-request-modal] .text-red-500 {
6104    color: #ef4444 !important;
6105  }
6106  /* Keep submit button text white */
6107  [data-quote-request-modal] .qr-submit span {
6108    color: #fff !important;
6109  }
6110
6111  /* Modal title letter spacing */
6112  [data-quote-request-modal] h2 {
6113    letter-spacing: 0px !important;
6114  }
6115
6116  /* All labels should be black per Figma */
6117  [data-quote-request-modal] label {
6118    color: black !important;
6119  }
6120
6121  /* Placeholder text should be grey, not blue */
6122  [data-quote-request-modal] textarea::placeholder,
6123  [data-quote-request-modal] input::placeholder {
6124    color: #9ca3af !important;
6125  }
6126</style>
6127
6128<data-island
6129  x-data="QuoteRequestForm"
6130  on="idle"
6131  x-cloakdata-webhook-url="https://print-room-chatbot-api.vercel.app/api/quote-request"
6132  data-turnstile-site-key="0x4AAAAAAETPnb_3iHel2J69"
6133>
6134  <template x-teleport="#modal-slot">
6135    <div
6136      x-show="$store.modals.modal.contents === 'quoteRequest'"
6137      class="flex w-full flex-col h-full"
6138      style="background: #FBFBF6;"
6139      data-quote-request-modal
6140    ><div class="shrink-0 px-5 py-4 sm:px-8 sm:py-5">
6141        <div class="flex items-center justify-between">
6142          <h2 x-show="!successMessage" class="font-bold" style="font-size: 2.75rem; letter-spacing: 0px; color: black;">Project quote request</h2>
6143          <div x-show="successMessage" class="flex-1"></div>
6144          <button
6145            @click.prevent="$store.modals.close('quoteRequest')"
6146            type="button"
6147            class="rounded-full p-2 text-gray-400 transition hover:text-gray-600"
6148          >
6149            <span class="sr-only">Close</span>
6150            <svg width="20" height="20" fill="none" viewBox="0 0 24 24">
6150<path stroke="currentColor" stroke-width="2" d="m6 6 12 12m0-12-12 12"/></svg>
6151          </button>
6152        </div>
6153      </div><div class="overflow-y-auto flex-1 px-5 py-5 sm:px-8 sm:py-6">
6154        <div class="mx-auto max-w-2xl">
6155          <template x-if="!successMessage">
6156            <form @submit.prevent="submitQuote" class="space-y-8"><section style="padding-bottom: 2rem;">
6157                <h3 class="text-sm font-normal" style="color: black;" x-text="'Selected products (' + ($store.chatQuote.active ? $store.chatQuote.count : $store.favorites.count) + ')'">Selected products</h3><template x-if="$store.chatQuote.active && $store.chatQuote.count > 0">
6158                  <div class="mt-3">
6159                    <template x-for="item in $store.chatQuote.items" :key="item.id">
6160                      <div class="qr-product-row flex items-start gap-3">
6161                        <div class="shrink-0 overflow-hidden rounded-lg bg-gray-100" style="width: 53px; height: 53px;">
6162                          <template x-if="item.image">
6163                            <img :src="item.image" :alt="item.title" class="h-full w-full object-cover" width="53" height="53">
6164                          </template>
6165                        </div>
6166                        <div class="min-w-0 flex-1">
6167                          <p class="text-sm font-semibold text-gray-900" x-text="item.title"></p>
6168                          <div class="mt-2 flex flex-wrap gap-2">
6169                            <span x-show="item.quantity" class="qr-pill" x-text="'Qty ' + item.quantity"></span>
6170                            <span x-show="item.colors && item.colors.length > 0" class="qr-pill" x-text="item.colors.join(', ')"></span>
6171                            <span x-show="item.sizes && item.sizes.length > 0" class="qr-pill" x-text="item.sizes.join(', ')"></span>
6172                            <span x-show="item.decorationMethod" class="qr-pill" x-text="item.decorationMethod"></span>
6173                          </div>
6174                        </div>
6175                      </div>
6176                    </template>
6177                  </div>
6178                </template><template x-if="!$store.chatQuote.active && $store.favorites.count > 0">
6179                  <div class="mt-3" x-data="{ openPill: null }"
6180                    @click.document="if (openPill && !$event.target.closest('.qr-pill') && !$event.target.closest('.qr-popover')) openPill = null">
6181                    <template x-for="item in $store.favorites.items" :key="item.key">
6182                      <div class="qr-product-row flex items-center gap-3 flex-wrap sm:flex-nowrap" x-init="if(item.handle === 'mystery-product') { $nextTick(() => openPill = item.key + '-notes') }">
6183                        <template x-if="item.handle === 'mystery-product'">
6184                          <div class="shrink-0 flex items-center justify-center" style="width: 53px; height: 53px;">
6185                            <span style="width: 33px; height: 33px; color: black;"><span class="h-full w-full fill-current">
6186  <svg
6187    aria-hidden="true"
6188    focusable="false"
6189    role="presentation"
6190    class="icon icon-product-question-mark"
6191    viewBox="0 0 24 24"
6192  >
6193    <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1Zm0 1.375a9.625 9.625 0 1 0 0 19.25 9.625 9.625 0 0 0 0-19.25Zm0 13.75.112.006a1.031 1.031 0 1 1-.224 0l.112-.006Zm3.35-7.646a3.437 3.437 0 0 1-2.204 4.012.688.688 0 0 0-.452.553l-.007.096v.922a.687.687 0 0 1-1.368.094l-.007-.094v-.921c0-.823.488-1.562 1.233-1.89l.143-.056a2.062 2.062 0 1 0-2.745-2.094l-.006.15a.688.688 0 1 1-1.374-.001 3.438 3.438 0 0 1 6.787-.771Z"></path>
6194  </svg>
6195</span>
6196</span>
6197                          </div>
6198                        </template>
6199                        <template x-if="item.handle !== 'mystery-product'">
6200                          <div class="shrink-0 overflow-hidden rounded-lg bg-gray-100" style="width: 53px; height: 53px;">
6201                            <img :src="item.image" :alt="item.title" class="h-full w-full object-cover" width="53" height="53">
6202                          </div>
6203                        </template>
6204                        <div class="min-w-0" style="width: 5rem; flex: 0 0 5rem;">
6205                          <p style="font-size: 10px; font-weight: 300; line-height: 11px; color: black;" x-text="item.vendor || ''"></p>
6206                          <p class="truncate" style="font-size: 10px; font-weight: 600; line-height: 11px; color: black;" x-text="item.title"></p>
6207                        </div><div class="qr-pills-row flex-1" style="margin-left: 1rem; gap: 0.75rem; align-items: center;">
6208                            <div class="relative" x-show="item.hasColours">
6209                              <button type="button" class="qr-pill" :class="{ 'qr-pill--active': openPill === item.key + '-colour' }"
6210                                @click="openPill = openPill === item.key + '-colour' ? null : item.key + '-colour'; if (openPill) $store.favorites.loadColourChoices(item.key)">
6211                                <span x-text="item.colour || 'Colour TBC'"></span>
6212                                <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/></svg>
6213                              </button>
6214                              <div x-show="openPill === item.key + '-colour'" x-transition class="qr-popover" style="min-width: 10rem; max-height: 15rem; overflow-y: auto;">
6215                                <button
6216                                  type="button"
6217                                  data-quote-colour-tbc
6218                                  class="block w-full text-left text-sm py-1"
6219                                  :disabled="!$store.favorites.canSelectTbc(item)"
6220                                  :class="!$store.favorites.canSelectTbc(item) ? 'opacity-40 cursor-not-allowed' : ''"
6221                                  @click="if ($store.favorites.rekey(item.key, { variantId: null, colour: null })) openPill = null"
6222                                >TBC (decide later)</button>
6223                                <p class="text-xs text-gray-600" x-show="!($store.favorites.colourChoicesByHandle[item.handle] || []).length">We'll confirm colour with you</p>
6224                                <template x-for="choice in ($store.favorites.colourChoicesByHandle[item.handle] || [])" :key="choice.variantId">
6225                                  <button type="button" class="block w-full text-left text-sm py-1" x-text="choice.label"
6226                                    :disabled="$store.favorites.colourChoiceTaken(item, choice)"
6227                                    :class="$store.favorites.colourChoiceTaken(item, choice) ? 'opacity-40 cursor-not-allowed' : ''"
6228                                    @click="if ($store.favorites.rekey(item.key, choice)) openPill = null"></button>
6229                                </template>
6230                              </div>
6231                            </div><div class="relative">
6232                              <button type="button" class="qr-pill" :class="{ 'qr-pill--active': openPill === item.key + '-qty' }" @click="openPill = openPill === item.key + '-qty' ? null : item.key + '-qty'">
6233                                <span x-text="'Quantity' + (item.quantity ? ' ' + (item.quantity >= 1000 ? '1000+' : item.quantity) : '')"></span>
6234                                <svg class="h-3 w-3 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/></svg>
6235                              </button>
6236                              <div x-show="openPill === item.key + '-qty'" x-transition class="qr-popover" style="min-width: 8rem; padding: 0.5rem 0.75rem;">
6237                                <div class="flex items-baseline gap-2">
6238                                  <span class="text-sm font-normal text-gray-900" x-text="item.quantity || item.moq || 24"></span>
6239                                  <span class="text-xs font-light text-gray-500">units</span>
6240                                </div>
6241                                <input x-show="item.sizeSplit === null"
6242                                  type="range"
6243                                  min="1"
6244                                  max="1000"
6245                                  step="1"
6246                                  class="qr-slider"
6247                                  style="height: 18px; margin-top: 2px;"
6248                                  :value="item.quantity || item.moq || 24"
6249                                  @input="$store.favorites.updateItemMeta(item.key, 'quantity', parseInt($event.target.value, 10))"
6250                                  :style="'--slider-track: linear-gradient(to right, #658a6a ' + ((item.quantity - 1) / 999 * 100) + '%, #e5e7eb ' + ((item.quantity - 1) / 999 * 100) + '%)'"
6251                                >
6252                                <label x-show="item.sizeOptions && item.sizeOptions.length" class="mt-2 flex items-center gap-2 text-xs">
6253                                  <input type="checkbox" :checked="item.sizeSplit !== null" @change="$store.favorites.setSizeSplit(item.key, $event.target.checked ? {} : null)">
6254                                  Split by size (optional)
6255                                </label>
6256                                <div x-show="item.sizeSplit !== null && item.sizeOptions && item.sizeOptions.length" class="mt-2 space-y-1">
6257                                  <template x-for="size in item.sizeOptions" :key="size">
6258                                    <label class="flex items-center gap-2 text-xs">
6259                                      <span x-text="size" class="w-10"></span>
6260                                      <input type="number" min="0" max="100000" step="1" class="w-20 border rounded px-1"
6261                                        :value="(item.sizeSplit || {})[size] || 0"
6262                                        @input="$store.favorites.setSizeSplit(item.key, { ...(item.sizeSplit || {}), [size]: parseInt($event.target.value, 10) || 0 })">
6263                                    </label>
6264                                  </template>
6265                                </div>
6266                              </div>
6267                            </div><div class="relative">
6268                              <button type="button" class="qr-pill" :class="{ 'qr-pill--active': openPill === item.key + '-artwork' || (item.artworks && item.artworks.length > 0) || item.artworkLink }" @click="openPill = openPill === item.key + '-artwork' ? null : item.key + '-artwork'">
6269                                <template x-if="item.artworks && item.artworks.length > 0">
6270                                  <span class="flex items-center gap-1">
6271                                    <svg class="h-3 w-3 shrink-0" style="color: #658a6a;" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
6272                                    <span x-text="item.artworks.length === 1 ? '1 file' : item.artworks.length + ' files'"></span>
6273                                  </span>
6274                                </template>
6275                                <template x-if="item.artworkLink && !(item.artworks && item.artworks.length > 0)">
6276                                  <span class="flex items-center gap-1">
6277                                    <svg class="h-3 w-3 shrink-0" style="color: #658a6a;" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
6278                                    <span>Artwork linked</span>
6279                                  </span>
6280                                </template>
6281                                <template x-if="!(item.artworks && item.artworks.length > 0) && !item.artworkLink">
6282                                  <span x-text="'Upload artwork \u2191'"></span>
6283                                </template>
6284                              </button>
6285                              <div x-show="openPill === item.key + '-artwork'" x-transition class="qr-popover" style="min-width: 14rem;">
6286                                <p class="mb-2 text-xs text-gray-500">Max <strong>5 files</strong>, <strong>10MB</strong> each</p><template x-if="item.artworks && item.artworks.length > 0">
6287                                  <div class="mb-2 space-y-3">
6288                                    <template x-for="(aw, awIdx) in item.artworks" :key="aw.fileName + awIdx">
6289                                      <div class="text-xs">
6290                                        <div class="flex items-center gap-1.5">
6291                                          <template x-if="aw.status === 'uploading'">
6292                                            <svg class="h-3 w-3 shrink-0 animate-spin text-gray-400" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"/><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"/></svg>
6293                                          </template>
6294                                          <template x-if="aw.status === 'done'">
6295                                            <svg class="h-3 w-3 shrink-0 text-emerald-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/></svg>
6296                                          </template>
6297                                          <template x-if="aw.status === 'error'">
6298                                            <svg class="h-3 w-3 shrink-0 text-red-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
6298<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/></svg>
6299                                          </template>
6300                                          <span class="flex-1 truncate" :class="aw.status === 'error' ? 'text-red-600' : 'text-gray-700'" x-text="aw.fileName"></span>
6301                                          <span class="shrink-0 text-gray-400" style="font-size: 10px;" x-text="aw.fileSize ? (aw.fileSize / 1024 < 1024 ? Math.round(aw.fileSize / 1024) + 'KB' : (aw.fileSize / (1024*1024)).toFixed(1) + 'MB') : ''"></span>
6302                                          <template x-if="aw.status === 'error'">
6303                                            <button type="button" class="shrink-0 text-blue-600 underline" @click="retryArtworkUpload(item.key, awIdx)">Retry</button>
6304                                          </template>
6305                                          <button type="button" class="shrink-0 text-red-400 hover:text-red-600" @click="removeArtwork(item.key, awIdx)" title="Remove file">
6306                                            <svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/></svg>
6307                                          </button>
6308                                        </div><template x-if="aw.status === 'done'">
6309                                          <div class="relative" style="margin-top: 3px; margin-left: 18px;" x-data="{ placementOpen: false }">
6310                                            <button
6311                                              type="button"
6312                                              @click="placementOpen = !placementOpen"
6313                                              class="flex w-full items-center justify-between"
6314                                              style="height: 20px; padding: 0 8px; font-size: 10px; border: 0.666px solid black; border-radius: 9999px; background: #eee; cursor: pointer;"
6315                                            >
6316                                              <span x-text="aw.placement || 'Placement…'" :style="aw.placement ? 'color: black' : 'color: #9ca3af'"></span>
6317                                              <svg :style="placementOpen ? 'transform: rotate(180deg)' : ''" width="6" height="4" viewBox="0 0 6 4" fill="none" style="margin-left: 4px; flex-shrink: 0; transition: transform 0.15s;">
6318                                                <path d="M0.5 0.5L3 3L5.5 0.5" stroke="black" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/>
6319                                              </svg>
6320                                            </button>
6321                                            <div
6322                                              x-show="placementOpen"
6323                                              x-transition
6324                                              @click.outside="placementOpen = false"
6325                                              style="position: absolute; top: calc(100% + 3px); left: 0; z-index: 60; background: white; border: 0.666px solid black; border-radius: 10px; padding: 0.35rem 0; min-width: 110px; box-shadow: 0 3px 7px 0 rgba(0,0,0,0.15);"
6326                                            >
6327                                              <template x-for="pl in ['Front','Left Chest','Right Chest','Back','Sleeve','Other']" :key="pl">
6328                                                <button
6329                                                  type="button"
6330                                                  class="block w-full text-left"
6331                                                  style="padding: 0.2rem 0.65rem; font-size: 10px; line-height: 13px; color: #4b5563; cursor: pointer; background: none; border: none;"
6332                                                  @click="updateArtworkPlacement(item.key, awIdx, pl); placementOpen = false"
6333                                                  @mouseover="$el.style.background = '#f3f4f6'"
6334                                                  @mouseout="$el.style.background = 'none'"
6335                                                  x-text="pl"
6336                                                ></button>
6337                                              </template>
6338                                            </div>
6339                                          </div>
6340                                        </template>
6341                                      </div>
6342                                    </template>
6343                                  </div>
6344                                </template><template x-if="!item.artworks || item.artworks.length < 5">
6345                                  <label class="flex cursor-pointer items-center justify-center gap-2 rounded-xl border border-dashed border-gray-300 px-4 py-2.5 text-sm text-gray-600 transition hover:border-gray-400">
6346                                    <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
6346<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 10l5-5m0 0l5 5m-5-5v12"/></svg>
6347                                    <span x-text="item.artworks && item.artworks.length > 0 ? 'Add more files' : 'Select files'"></span>
6348                                    <input
6349                                      type="file"
6350                                      class="hidden"
6351                                      multiple
6352                                      accept=".png,.jpg,.jpeg,.svg,.pdf,.ai,.eps"
6353                                      @change="handlePerProductFileUpload($event, item.key)"
6354                                    >
6355                                  </label>
6356                                </template><div style="margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid #e5e7eb;">
6357                                  <p class="text-xs text-gray-500">For <strong>larger files</strong>: via shared link</p>
6358                                  <input
6359                                    type="url"
6360                                    class="qr-input text-sm"
6361                                    style="margin-top: 0.5rem; font-size: 0.75rem;"
6362                                    placeholder="Link address"
6363                                    :value="item.artworkLink || ''"
6364                                    @input="$store.favorites.updateItemMeta(item.key, 'artworkLink', $event.target.value)"
6365                                  >
6366                                  <p class="mt-1 text-gray-400" style="font-size: 9px;">Eg. Google drive, Dropbox</p>
6367                                </div>
6368                              </div>
6369                            </div><div class="relative">
6370                              <button type="button" class="qr-pill" :class="{ 'qr-pill--active': openPill === item.key + '-notes' || (item.notes && item.notes.length > 0), 'qr-pill--required': item.handle === 'mystery-product' && (!item.notes || !item.notes.trim()) }" @click="openPill = openPill === item.key + '-notes' ? null : item.key + '-notes'">
6371                                <span class="qr-pill-notes-text" x-text="item.notes && item.notes.length > 0 ? 'Notes added' : 'Notes\u2026'"></span>
6372                                <template x-if="item.handle === 'mystery-product'"><span style="color: #dc2626; margin-left: 2px;">*</span></template>
6373                              </button>
6374                              <div x-show="openPill === item.key + '-notes'" x-transition class="qr-popover" style="left: auto; right: 0;">
6375                                <label class="mb-1.5 block text-xs font-medium text-gray-500">Notes</label>
6376                                <textarea
6377                                  rows="3"
6378                                  class="qr-textarea text-sm"
6379                                  :placeholder="item.handle === 'mystery-product' ? 'Include the brand, product name or SKU you require' : 'Tell us how and where you would like your artwork printed.'"
6380                                  :value="item.notes || ''"
6381                                  @input="$store.favorites.updateItemMeta(item.key, 'notes', $event.target.value)"
6382                                ></textarea>
6383                              </div>
6384                            </div>
6385                        </div>
6386                      </div>
6387                    </template>
6388                    <template x-for="shortfall in $store.favorites.moqShortfalls()" :key="shortfall.id">
6389                      <p class="mt-2 text-xs text-red-600" role="alert" x-text="shortfall.title + ' total ' + shortfall.total + ' — minimum ' + shortfall.moq"></p>
6390                    </template>
6391                  </div>
6392                </template><template x-if="!$store.chatQuote.active && $store.favorites.count === 0">
6393                  <p class="mt-3 text-sm text-gray-400">No products added yet. Browse products and add items to your quote.</p>
6394                </template>
6395              </section><section style="padding-bottom: 2rem;">
6396                <div style="border: 0.75px solid black; border-radius: 10px; padding: 0.65rem 1.25rem;">
6397                  <p style="font-size: 11px; color: black; margin-bottom: 2px;">Additional notes:</p>
6398                  <textarea
6399                    id="project-description"
6400                    x-model="formData.description"
6401                    rows="2"
6402                    placeholder="Is there anything else we might need to know about your project?"
6403                    style="width: 100%; border: none; padding: 0; background: transparent; font-size: 11.5px; color: #111827; resize: vertical; outline: none;"
6404                  ></textarea>
6405                </div>
6406              </section><section style="padding-bottom: 2rem;">
6407                <label class="text-sm" style="color: black;">Your budget</label>
6408                <div class="flex items-center justify-between" style="margin-top: 0.25rem;">
6409                  <span class="text-xs text-gray-400">$500</span>
6410                  <span style="font-size: 1.95rem; font-weight: 400; line-height: 1; color: #658a6a;" x-text="'$' + Number(formData.budget).toLocaleString()"></span>
6411                  <span class="text-xs text-gray-400">$10,000+</span>
6412                </div>
6413                <div @mousedown.stop @touchstart.stop>
6414                  <input
6415                    type="range"
6416                    x-model.number="formData.budget"
6417                    @input="formData.budget = parseInt($event.target.value, 10)"
6418                    @click.stop
6419                    min="500"
6420                    max="10000"
6421                    step="500"
6422                    class="qr-slider"
6423                    :style="'--slider-track: linear-gradient(to right, #658a6a ' + ((formData.budget - 500) / 9500 * 100) + '%, #e5e7eb ' + ((formData.budget - 500) / 9500 * 100) + '%)'"
6424                  >
6425                </div>
6426              </section><section class="grid grid-cols-1 gap-4 sm:grid-cols-2">
6427                <div>
6428                  <label for="in-hand-date" class="mb-1.5 block text-sm">The date I need my merch*</label>
6429                  <input
6430                    type="date"
6431                    id="in-hand-date"
6432                    x-model="formData.inHandDate"
6433                    required
6434                    class="qr-input text-sm"
6435                    :min="(() => { let d = new Date(), a = 0; while (a < 7) { d.setDate(d.getDate() + 1); if (d.getDay() !== 0 && d.getDay() !== 6) a++; } return d.toISOString().split('T')[0]; })()"
6436                  >
6437                </div>
6438                <div x-data="{ locationOpen: false }">
6439                  <label class="mb-1.5 block text-sm" style="color: black;">I need it sent to*</label>
6440                  <div class="relative"><select x-model="formData.location" required class="sr-only" tabindex="-1" aria-hidden="true">
6441                      <option value="">Select location</option>
6442                      <optgroup label="New Zealand">
6443                        <option value="Northland">Northland</option>
6444                        <option value="Auckland">Auckland</option>
6445                        <option value="Waikato">Waikato</option>
6446                        <option value="Bay of Plenty">Bay of Plenty</option>
6447                        <option value="Gisborne">Gisborne</option>
6448                        <option value="Hawke's Bay">Hawke's Bay</option>
6449                        <option value="Taranaki">Taranaki</option>
6450                        <option value="Manawatū-Whanganui">Manawat&#363;-Whanganui</option>
6451                        <option value="Wellington">Wellington</option>
6452                        <option value="Tasman">Tasman</option>
6453                        <option value="Nelson">Nelson</option>
6454                        <option value="Marlborough">Marlborough</option>
6455                        <option value="West Coast">West Coast</option>
6456                        <option value="Canterbury">Canterbury</option>
6457                        <option value="Otago">Otago</option>
6458                        <option value="Southland">Southland</option>
6459                      </optgroup>
6460                      <optgroup label="Australia">
6461                        <option value="New South Wales">New South Wales</option>
6462                        <option value="Victoria">Victoria</option>
6463                        <option value="Queensland">Queensland</option>
6464                        <option value="Western Australia">Western Australia</option>
6465                        <option value="South Australia">South Australia</option>
6466                        <option value="Tasmania">Tasmania</option>
6467                        <option value="Australian Capital Territory">Australian Capital Territory</option>
6468                        <option value="Northern Territory">Northern Territory</option>
6469                      </optgroup>
6470                      <option value="International">International</option>
6471                    </select><button
6472                      type="button"
6473                      @click="locationOpen = !locationOpen"
6474                      class="qr-select flex w-full items-center justify-between text-sm"
6475                      style="cursor: pointer;"
6476                    >
6477                      <span x-text="formData.location || 'Select location'" :style="formData.location ? 'color: black' : 'color: #9ca3af'"></span>
6478                      <svg class="h-4 w-4 shrink-0 transition-transform" :style="locationOpen ? 'transform: rotate(180deg)' : ''" fill="none" stroke="currentColor" viewBox="0 0 24 24" style="color: black;">
6479                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
6480                      </svg>
6481                    </button><div
6482                      x-show="locationOpen"
6483                      x-transition
6484                      @click.outside="locationOpen = false"
6485                      style="position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 50; background: white; border: 0.666px solid black; border-radius: 15.5px; max-height: 232px; overflow-y: auto; padding: 0.75rem 0;"
6486                    >
6487                      <template x-for="loc in ['Northland','Auckland','Waikato','Bay of Plenty','Gisborne','Hawke\'s Bay','Taranaki','Manawat\u016b-Whanganui','Wellington','Tasman','Nelson','Marlborough','West Coast','Canterbury','Otago','Southland','New South Wales','Victoria','Queensland','Western Australia','South Australia','Tasmania','Australian Capital Territory','Northern Territory','International']" :key="loc">
6488                        <button
6489                          type="button"
6490                          class="block w-full text-left"
6491                          style="padding: 0.25rem 1rem; font-size: 12.65px; line-height: 13.313px; color: #4b5563; cursor: pointer; background: none; border: none;"
6492                          @click="formData.location = loc; locationOpen = false"
6493                          @mouseover="$el.style.background = '#f3f4f6'"
6494                          @mouseout="$el.style.background = 'none'"
6495                          x-text="loc"
6496                        ></button>
6497                      </template>
6498                    </div>
6499                  </div>
6500                </div>
6501                <div>
6502                  <label for="contact-name" class="mb-1.5 block text-sm">Your name*</label>
6503                  <input
6504                    type="text"
6505                    id="contact-name"
6506                    x-model="formData.name"
6507                    required
6508                    placeholder="Your name here"
6509                    class="qr-input text-sm"
6510                  >
6511                </div>
6512                <div>
6513                  <label for="contact-email" class="mb-1.5 block text-sm">Email*</label>
6514                  <input
6515                    type="email"
6516                    id="contact-email"
6517                    x-model="formData.email"
6518                    required
6519                    placeholder="[email protected]"
6520                    class="qr-input text-sm"
6521                  >
6522                </div>
6523                <div>
6524                  <label for="contact-phone" class="mb-1.5 block text-sm">Phone*</label>
6525                  <input
6526                    type="tel"
6527                    id="contact-phone"
6528                    x-model="formData.phone"
6529                    required
6530                    placeholder="Your phone number"
6531                    class="qr-input text-sm"
6532                  >
6533                </div>
6534                <div>
6535                  <label for="contact-company" class="mb-1.5 block text-sm">Company</label>
6536                  <input
6537                    type="text"
6538                    id="contact-company"
6539                    x-model="formData.company"
6540                    placeholder="Your company's name"
6541                    class="qr-input text-sm"
6542                  >
6543                </div>
6544                <div x-data="{ heardAboutOpen: false }" class="sm:col-span-2"><label id="heard-about-label" class="mb-1.5 block text-sm" style="color: black;">How did you hear about us?*</label>
6545                  <div class="relative"><select x-model="formData.heardAbout" required class="sr-only" tabindex="-1" aria-hidden="true">
6546                      <option value="">Select an option</option><option value="Google search">Google search</option><option value="Social media">Social media</option><option value="Referral or word of mouth">Referral or word of mouth</option><option value="Repeat customer">Repeat customer</option><option value="Saw our work in the wild">Saw our work in the wild</option><option value="Email or newsletter">Email or newsletter</option><option value="Event or trade show">Event or trade show</option><option value="Other">Other</option><option value="Prefer not to say">Prefer not to say</option></select><button
6547                      type="button"
6548                      @click="heardAboutOpen = !heardAboutOpen"
6549                      :aria-expanded="heardAboutOpen"
6550                      aria-labelledby="heard-about-label"
6551                      class="qr-select flex w-full items-center justify-between text-sm"
6552                      style="cursor: pointer;"
6553                    >
6554                      <span x-text="formData.heardAbout || 'Select an option'" :style="formData.heardAbout ? 'color: black' : 'color: #9ca3af'"></span>
6555                      <svg class="h-4 w-4 shrink-0 transition-transform" :style="heardAboutOpen ? 'transform: rotate(180deg)' : ''" fill="none" stroke="currentColor" viewBox="0 0 24 24" style="color: black;">
6556                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
6557                      </svg>
6558                    </button><div
6559                      x-show="heardAboutOpen"
6560                      x-transition
6561                      @click.outside="heardAboutOpen = false"
6562                      style="position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 50; background: white; border: 0.666px solid black; border-radius: 15.5px; max-height: 232px; overflow-y: auto; padding: 0.75rem 0;"
6563                    >
6564                      <template x-for='opt in ["Google search","Social media","Referral or word of mouth","Repeat customer","Saw our work in the wild","Email or newsletter","Event or trade show","Other","Prefer not to say"]' :key="opt">
6565                        <button
6566                          type="button"
6567                          class="block w-full text-left"
6568                          style="padding: 0.25rem 1rem; font-size: 12.65px; line-height: 13.313px; color: #4b5563; cursor: pointer; background: none; border: none;"
6569                          @click="selectHeardAbout(opt); heardAboutOpen = false"
6570                          @mouseover="$el.style.background = '#f3f4f6'"
6571                          @mouseout="$el.style.background = 'none'"
6572                          x-text="opt"
6573                        ></button>
6574                      </template>
6575                    </div>
6576                  </div><p x-show="formData.heardAbout === 'Social media'" x-transition class="mt-1.5 text-xs" style="color: #6b7280;">
6577                    Instagram, Facebook, TikTok or LinkedIn
6578                  </p><div
6579                    x-show="formData.heardAbout === 'Referral or word of mouth' || formData.heardAbout === 'Other'"
6580                    x-transition
6581                    class="mt-3"
6582                  >
6583                    <label for="contact-heard-detail" class="mb-1.5 block text-sm" x-text="formData.heardAbout === 'Other' ? 'Tell us more*' : 'Who referred you? (optional)'"></label>
6584                    <input
6585                      type="text"
6586                      id="contact-heard-detail"
6587                      x-model="formData.heardAboutDetail"
6588                      :required="formData.heardAbout === 'Other'"
6589                      :placeholder="formData.heardAbout === 'Other' ? 'How you found us' : 'Their name or company'"
6590                      class="qr-input text-sm"
6591                    >
6592                  </div>
6593                </div>
6594              </section><template x-if="errorMessage">
6595                <div class="rounded-2xl px-4 py-3 text-center" style="border: 1px solid #e5e7eb; background: #FFFBEB;">
6596                  <p class="text-sm" style="color: #92400e;">
6597                    <span style="font-size: 1.25rem; vertical-align: middle; margin-right: 0.25rem;">&#128578;</span>
6598                    <span x-text="errorMessage"></span>
6599                  </p>
6600                </div>
6601              </template><button
6602                type="submit"
6603                class="qr-submit"
6604                style="margin-top: 2.5rem;"
6605                :disabled="submitting || ($store.favorites.count === 0 && !$store.chatQuote.active) || (!$store.chatQuote.active && $store.favorites.moqShortfalls().length > 0)"
6606              >
6607                <span x-show="!submitting">Submit quote request</span>
6608                <span x-show="submitting" class="flex items-center justify-center gap-2">
6609                  <svg class="h-4 w-4 animate-spin" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
6610                    <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
6611                    <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
6612                  </svg>
6613                  Sending...
6614                </span>
6615              </button>
6616            </form>
6617          </template><template x-if="successMessage">
6618            <div class="flex flex-col items-center justify-center text-center" style="padding: 3rem 1.5rem 4rem;"><img src="//printroom.co/cdn/shop/t/59/assets/success-thumbs-up.svg?v=51729750037822013731787098435" alt="Success" width="141" height="179" style="width: 141px; height: 179px;">
6619
6620              <h3 style="margin-top: 1.5rem; font-size: clamp(48px, 12vw, 80px); font-weight: 300; line-height: 1; color: black;">Success</h3>
6621
6622              <div style="margin-top: 3rem; max-width: 414px; font-size: clamp(18px, 4vw, 25px); line-height: 1.16; color: black; text-align: center;">
6623                <p style="margin: 0;">Nice! Your quote request has successfully been submitted.
6624                Our team will try and have a quote back to you within 1 working day.</p>
6625                <p style="margin: 1.5rem 0 0;">In the meantime, a confirmation email has been sent to you.</p>
6626              </div>
6627
6628              <a
6629                href="/collections/product-library"
6630                @click="$store.modals.close('quoteRequest'); successMessage = ''"
6631                class="flex items-center justify-center"
6632                style="margin-top: 2.5rem; width: min(300px, 80vw); max-width: 100%; height: 64px; border: 2.7px solid #4B4D72; border-radius: 40px; font-size: clamp(18px, 5vw, 25px); font-weight: 400; color: #4B4D72; letter-spacing: -1.24px; text-decoration: none; transition: background-color 0.2s ease, color 0.2s ease;"
6633                onmouseover="this.style.backgroundColor='#4B4D72';this.style.color='#fff'"
6634                onmouseout="this.style.backgroundColor='transparent';this.style.color='#4B4D72'"
6635              >
6636                Browse more products
6637              </a>
6638            </div>
6639          </template>
6640        </div>
6641      </div>
6642    </div>
6643  </template>
6644</data-island>
6645
6646
6647    
6648    
6649    
6650
6651    
6652    <style>
6653  .cwp-overlay {
6654    position: fixed;
6655    top: var(--header-group-height, 119px);
6656    left: 0;
6657    right: 0;
6658    bottom: 0;
6659    z-index: 999;
6660    display: flex;
6661    align-items: center;
6662    justify-content: center;
6663    backdrop-filter: blur(6px);
6664    -webkit-backdrop-filter: blur(6px);
6665    background: rgba(247, 247, 247, 0.6);
6666    opacity: 0;
6667    transition: opacity 0.3s ease;
6668  }
6669
6670  .cwp-card {
6671    position: relative;
6672    width: 100%;
6673    max-width: 598px;
6674    margin: 1rem;
6675    background: #FBFBF6;
6676    border: 1.565px solid black;
6677    border-radius: 23px;
6678    box-shadow: 0 3.5px 11.5px 1.75px rgba(0, 0, 0, 0.1);
6679    padding: 2.5rem 3rem 2.5rem;
6680    overflow: visible;
6681  }
6682
6683  .cwp-close {
6684    position: absolute;
6685    top: 1.25rem;
6686    right: 1.25rem;
6687    background: none;
6688    border: none;
6689    cursor: pointer;
6690    padding: 0.5rem;
6691    color: black;
6692  }
6693
6694  .cwp-title {
6695    font-size: 70px;
6696    font-weight: 300;
6697    line-height: 1;
6698    color: black;
6699    margin: 0 0 1.5rem;
6700  }
6701
6702  .cwp-body {
6703    font-size: 19px;
6704    line-height: 22px;
6705    color: black;
6706    margin: 0 0 1rem;
6707  }
6708
6709  .cwp-body + .cwp-body {
6710    margin-top: 1rem;
6711  }
6712
6713  .cwp-btn {
6714    display: inline-flex;
6715    align-items: center;
6716    justify-content: center;
6717    margin-top: 1.25rem;
6718    height: 37px;
6719    padding: 0 1.5rem;
6720    background: white;
6721    border: 0.722px solid black;
6722    border-radius: 29px;
6723    font-size: 21.67px;
6724    font-weight: 400;
6725    color: black;
6726    cursor: pointer;
6727    transition: background 0.2s ease;
6728  }
6729
6730  .cwp-btn:hover {
6731    background: #f0f0f0;
6732  }
6733
6734  .cwp-pointer-left {
6735    position: fixed;
6736    left: 240px;
6737    top: 50%;
6738    transform: translateY(-50%) rotate(-15deg);
6739    width: 240px;
6740    opacity: 0;
6741    transition: opacity 0.6s ease;
6742    pointer-events: none;
6743    z-index: 1000;
6744  }
6745  .cwp-pointer-left.visible {
6746    opacity: 1;
6747    animation: cwp-bob-left 1.8s ease-in-out infinite;
6748  }
6749
6750  .cwp-pointer-up {
6751    position: fixed;
6752    top: calc(var(--header-group-height, 119px) - 60px);
6753    right: 60px;
6754    width: 180px;
6755    opacity: 0;
6756    transition: opacity 0.6s ease;
6757    pointer-events: none;
6758    z-index: 1000;
6759  }
6760  .cwp-pointer-up.visible {
6761    opacity: 1;
6762    animation: cwp-bob-up 1.8s ease-in-out infinite;
6763  }
6764
6765  @keyframes cwp-bob-left {
6766    0%, 100% { transform: translateY(-50%) rotate(-15deg) translateX(0); }
6767    50% { transform: translateY(-50%) rotate(-15deg) translateX(-10px); }
6768  }
6769
6770  @keyframes cwp-bob-up {
6771    0%, 100% { transform: translateY(0); }
6772    50% { transform: translateY(-10px); }
6773  }
6774
6775  @media (max-width: 639px) {
6776    .cwp-card {
6777      padding: 2rem 1.5rem;
6778    }
6779
6780    .cwp-title {
6781      font-size: 48px;
6782    }
6783
6784    .cwp-body {
6785      font-size: 16px;
6786      line-height: 20px;
6787    }
6788
6789    .cwp-btn {
6790      font-size: 18px;
6791    }
6792
6793    .cwp-pointer-left,
6794    .cwp-pointer-up {
6795      display: none;
6796    }
6797  }
6798</style>
6799
6800    
6801    <style>
6802  /* ── "Can't find something?" scroll-triggered tab ── */
6803  .cft-container {
6804    position: fixed;
6805    right: 0;
6806    bottom: 100px;
6807    z-index: 998;
6808    display: none;
6809    font-family: 'DM Sans', sans-serif;
6810  }
6811
6812  /* ── Tab state (collapsed) ── */
6813  .cft-tab {
6814    position: relative;
6815    width: 77px;
6816    height: 96px;
6817    cursor: pointer;
6818    opacity: 0;
6819    transform: translateX(20px);
6820    transition: opacity 0.4s ease, transform 0.4s ease;
6821  }
6822
6823  .cft-tab-bg {
6824    position: absolute;
6825    inset: 0;
6826    display: flex;
6827    align-items: center;
6828    justify-content: center;
6829  }
6830
6831  .cft-tab-bg-inner {
6832    width: 96px;
6833    height: 77px;
6834    flex-shrink: 0;
6835    transform: rotate(90deg);
6836    background: var(--cant-find-bg, #EFFE9C);
6837    border-bottom: 1.03px solid black;
6838    border-left: 1.03px solid black;
6839    border-right: 1.03px solid black;
6840    border-top: none;
6841    border-radius: 0 0 16px 16px;
6842    box-shadow: -2.94px 3.13px 5.88px 0px rgba(0, 0, 0, 0.2);
6843  }
6844
6845  .cft-tab-icon {
6846    position: absolute;
6847    top: 5%;
6848    left: 10%;
6849    width: 65%;
6850    height: 50%;
6851    background-size: contain;
6852    background-repeat: no-repeat;
6853    background-position: center;
6854  }
6855
6856  .cft-tab-text {
6857    position: absolute;
6858    bottom: 13%;
6859    left: 0;
6860    right: 0;
6861    font-weight: 600;
6862    font-size: 10px;
6863    line-height: 11.3px;
6864    color: black;
6865    text-align: center;
6866  }
6867
6868  .cft-tab:hover {
6869    transform: translateX(0) scale(1.04);
6870  }
6871
6872  /* ── Card state (expanded) — ~3× original size ── */
6873  .cft-card {
6874    position: relative;
6875    width: 300px;
6876    height: 200px;
6877    opacity: 0;
6878    transform: translateX(20px);
6879    transition: opacity 0.4s ease, transform 0.4s ease;
6880    cursor: default;
6881  }
6882
6883  .cft-card-bg {
6884    position: absolute;
6885    inset: 0;
6886  }
6887
6888  .cft-card-bg-inner {
6889    width: 100%;
6890    height: 100%;
6891    background: var(--cant-find-bg, #EFFE9C);
6892    border: 0.75px solid black;
6893    border-right: none;
6894    border-radius: 20px 0 0 20px;
6895    box-shadow: -1.17px 2.34px 2.34px 0px rgba(0, 0, 0, 0.14);
6896  }
6897
6898  .cft-card-content {
6899    position: absolute;
6900    inset: 0;
6901    z-index: 1;
6902    padding: 18px 22px;
6903  }
6904
6905  .cft-card-close {
6906    position: absolute;
6907    top: 8px;
6908    right: 8px;
6909    z-index: 2;
6910    background: none;
6911    border: none;
6912    cursor: pointer;
6913    padding: 4px;
6914    color: black;
6915    opacity: 0.5;
6916    transition: opacity 0.2s;
6917    line-height: 1;
6918  }
6919
6920  .cft-card-close:hover {
6921    opacity: 1;
6922  }
6923
6924  .cft-card-title {
6925    font-weight: 500;
6926    font-size: 18px;
6927    line-height: 20px;
6928    color: black;
6929    margin: 0 0 10px;
6930  }
6931
6932  .cft-card-body {
6933    font-weight: 400;
6934    font-size: 13px;
6935    line-height: 16px;
6936    color: black;
6937    margin: 0;
6938    max-width: 180px;
6939  }
6940
6941  .cft-card-link {
6942    font-weight: 400;
6943    font-size: 22px;
6944    line-height: 24px;
6945    color: black;
6946    text-decoration: underline;
6947    cursor: pointer;
6948    background: none;
6949    border: none;
6950    padding: 0;
6951    font-family: inherit;
6952    position: absolute;
6953    bottom: 18px;
6954    left: 22px;
6955    z-index: 1;
6956  }
6957
6958  .cft-card-link:hover {
6959    opacity: 0.7;
6960  }
6961
6962  .cft-card-doodle {
6963    position: absolute;
6964    bottom: -2px;
6965    right: 2px;
6966    width: 110px;
6967    height: 65px;
6968    transform: rotate(-24.8deg);
6969    pointer-events: none;
6970    z-index: 1;
6971    background-size: contain;
6972    background-repeat: no-repeat;
6973    background-position: center;
6974  }
6975
6976  /* ── Visible states (applied by JS) ── */
6977  .cft-tab.visible,
6978  .cft-card.visible {
6979    opacity: 1;
6980    transform: translateX(0);
6981  }
6982
6983  /* ── Hide when favorites drawer is open ── */
6984  body:has([data-favorites-drawer]:not([style*="display: none"])) .cft-container {
6985    display: none !important;
6986  }
6987
6988  /* ── Mobile adjustments ── */
6989  @media (max-width: 639px) {
6990    .cft-container {
6991      bottom: 80px;
6992    }
6993
6994    .cft-tab {
6995      width: 66px;
6996      height: 82px;
6997    }
6998
6999    .cft-tab-bg-inner {
7000      width: 82px;
7001      height: 66px;
7002    }
7003
7004    .cft-tab-text {
7005      font-size: 9px;
7006      line-height: 10px;
7007    }
7008
7009    .cft-card {
7010      width: 270px;
7011      height: 180px;
7012    }
7013  }
7014</style>
7015
7016    
7017    <div id="shopify-section-ai-chatbot" class="shopify-section contents"><link href="//printroom.co/cdn/shop/t/59/assets/ai-chatbot.css?v=112900874753543053291788472410" rel="stylesheet" type="text/css" media="all" />
7018<data-island
7019    x-data="
7020      AIChatbot({
7021        apiEndpoint: &quot;https:\/\/print-room-chatbot-api.vercel.app\/&quot;,
7022        questionsApiUrl: &quot;https:\/\/print-room-chatbot-api.vercel.app\/&quot;,
7023        welcomeMessage: &quot;Hi! I&#39;m here to help you with your printing needs. How can I assist you today?&quot;,
7024        unavailableMessage: &quot;Chat is temporarily unavailable. Please request a quote or contact us directly.&quot;,
7025        suggestedPrompts: []
7026      })
7027    "
7028    src="ai-chatbot"
7029    on="idle"
7030    id="ai-chatbot-ai-chatbot"
7031    class="ai-chatbot"
7032    data-color-scheme="scheme1"
7033  ><button
7034      @click="toggle()"
7035      class="ai-chatbot__trigger"
7036      :class="{ 'ai-chatbot__trigger--hidden': isOpen }"
7037      aria-label="Chat with us"
7038      type="button"
7039    >
7040      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7041        <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
7042      </svg>
7043      <span>Chat with us</span>
7044    </button><template x-teleport="body">
7045      <div
7046        x-show="isOpen"
7047        x-transition:enter="ai-chatbot-enter"
7048        x-transition:enter-start="ai-chatbot-enter"
7049        x-transition:enter-end="ai-chatbot-enter-active"
7050        x-transition:leave="ai-chatbot-leave"
7051        x-transition:leave-start="ai-chatbot-leave"
7052        x-transition:leave-end="ai-chatbot-leave-active"
7053        class="ai-chatbot__window"
7054        :class="{ 'ai-chatbot__window--minimized': isMinimized }"
7055        data-color-scheme="scheme1"
7056        role="dialog"
7057        aria-label="Chat with us"
7058        @keydown.escape="close()"
7059      ><div class="ai-chatbot__header">
7060          <div class="ai-chatbot__header-title">
7061            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7062              <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
7063            </svg>
7064            <span>Chat with us</span>
7065          </div>
7066          <div class="ai-chatbot__header-actions">
7067            <button
7068              x-show="messages.length > 0 && !isMinimized"
7069              @click="clearHistory()"
7070              class="ai-chatbot__header-btn"
7071              type="button"
7072              :disabled="isLoading"
7073              aria-label="Clear history"
7074            >
7075              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7076                <polyline points="3 6 5 6 21 6"></polyline>
7077                <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path>
7078              </svg>
7079            </button>
7080            <button
7081              @click="minimize()"
7082              class="ai-chatbot__header-btn"
7083              type="button"
7084              :aria-label="isMinimized ? 'Expand' : 'Minimize'"
7085            >
7086              <template x-if="isMinimized">
7087                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7088                  <polyline points="15 3 21 3 21 9"></polyline>
7089                  <polyline points="9 21 3 21 3 15"></polyline>
7090                  <line x1="21" y1="3" x2="14" y2="10"></line>
7091                  <line x1="3" y1="21" x2="10" y2="14"></line>
7092                </svg>
7093              </template>
7094              <template x-if="!isMinimized">
7095                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7096                  <polyline points="4 14 10 14 10 20"></polyline>
7097                  <polyline points="20 10 14 10 14 4"></polyline>
7098                  <line x1="14" y1="10" x2="21" y2="3"></line>
7099                  <line x1="3" y1="21" x2="10" y2="14"></line>
7100                </svg>
7101              </template>
7102            </button>
7103            <button
7104              @click="close()"
7105              class="ai-chatbot__header-btn"
7106              type="button"
7107              aria-label="Close"
7108            >
7109              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7110                <line x1="18" y1="6" x2="6" y2="18"></line>
7111                <line x1="6" y1="6" x2="18" y2="18"></line>
7112              </svg>
7113            </button>
7114          </div>
7115        </div><div class="ai-chatbot__body" x-show="!isMinimized"><div class="ai-chatbot__messages" x-ref="messagesContainer"><template x-if="messages.length === 0">
7116              <div class="ai-chatbot__welcome">
7117                <svg class="ai-chatbot__welcome-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7118                  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
7119                </svg>
7120                <p class="ai-chatbot__welcome-text" x-text="welcomeMessage"></p>
7121                <p class="ai-chatbot__welcome-subtext">Ask me anything about our products and services.</p>
7122              </div>
7123            </template><template x-for="(message, index) in messages" :key="message.id">
7124              <div
7125                class="ai-chatbot__message-row"
7126                :class="'ai-chatbot__message-row--' + message.role"
7127              ><template x-if="message.role === 'system'">
7128                  <div class="ai-chatbot__message-content ai-chatbot__message-content--system" x-text="message.content"></div>
7129                </template><template x-if="message.role !== 'system'">
7130                  <div class="ai-chatbot__message-stack"><template x-if="message.role === 'staff'">
7131                      <div class="ai-chatbot__staff-meta">
7132                        <span class="ai-chatbot__staff-avatar" x-text="message.initials"></span>
7133                        <span class="ai-chatbot__staff-name" x-text="message.senderName"></span>
7134                        <span
7135                          class="ai-chatbot__staff-time"
7136                          x-show="message.timestamp"
7137                          x-text="message.timestamp ? new Date(message.timestamp).toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' }) : ''"
7138                        ></span>
7139                      </div>
7140                    </template>
7141
7142                    <div
7143                      class="ai-chatbot__message-bubble"
7144                      :class="'ai-chatbot__message-bubble--' + message.role"
7145                    ><div class="ai-chatbot__message-content"><span x-text="message.content"></span><span x-show="message.isStreaming && message.content" class="ai-chatbot__cursor"></span></div><template x-if="message.role === 'assistant' && message.options && message.options.choices.length > 0">
7146                        <div class="ai-chatbot__options" :class="{ 'ai-chatbot__options--submitted': message.optionsSubmitted }">
7147                          <p class="ai-chatbot__options-prompt" x-show="message.options.prompt" x-text="message.options.prompt"></p>
7148                          <div class="ai-chatbot__options-list">
7149                            <template x-for="(choice, ci) in message.options.choices" :key="choice.value">
7150                              <button
7151                                @click="selectOption(index, choice.value)"
7152                                class="ai-chatbot__option-chip"
7153                                :class="{
7154                                  'ai-chatbot__option-chip--selected': message.selectedOptions.includes(choice.value),
7155                                  'ai-chatbot__option-chip--disabled': message.optionsSubmitted
7156                                }"
7157                                :disabled="message.optionsSubmitted"
7158                                type="button"
7159                                x-text="choice.label"
7160                              ></button>
7161                            </template>
7162                          </div>
7163                          <button
7164                            x-show="message.options.multiSelect && !message.optionsSubmitted && message.selectedOptions.length > 0"
7165                            @click="submitOptions(index)"
7166                            class="ai-chatbot__options-submit"
7167                            type="button"
7168                          >
7169                            Continue
7170                          </button>
7171                        </div>
7172                      </template>
7173                    </div>
7174                  </div>
7175                </template>
7176              </div>
7177            </template><template x-if="isLoading && messages.length > 0 && !messages[messages.length - 1].content">
7178              <div class="ai-chatbot__message-row ai-chatbot__message-row--assistant">
7179                <div class="ai-chatbot__message-stack">
7180                  <div class="ai-chatbot__message-bubble ai-chatbot__message-bubble--assistant ai-chatbot__message-bubble--typing">
7181                    <div class="ai-chatbot__typing" aria-label="Assistant is typing">
7182                      <span></span>
7183                      <span></span>
7184                      <span></span>
7185                    </div>
7186                  </div>
7187                </div>
7188              </div>
7189            </template>
7190          </div><div x-show="error" class="ai-chatbot__error">
7191            <svg class="ai-chatbot__error-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7192              <circle cx="12" cy="12" r="10"></circle>
7193              <line x1="12" y1="8" x2="12" y2="12"></line>
7194              <line x1="12" y1="16" x2="12.01" y2="16"></line>
7195            </svg>
7196            <div class="ai-chatbot__error-content">
7197              <p class="ai-chatbot__error-text" x-text="error"></p>
7198              <div class="ai-chatbot__error-actions">
7199                <button @click="openQuoteRequest()" class="ai-chatbot__error-action" type="button">
7200                  Request a quote
7201                </button>
7202                <a href="/pages/contact-us" class="ai-chatbot__error-action">
7203                  Contact us
7204                </a>
7205              </div>
7206              <button @click="clearError()" class="ai-chatbot__error-dismiss" type="button">
7207                Dismiss
7208              </button>
7209            </div>
7210          </div><div x-show="messages.length === 0 && (getActivePrompts().length > 0 || questionsLoading)" class="ai-chatbot__prompts">
7211            <p class="ai-chatbot__prompts-label">Try asking:</p><template x-if="questionsLoading && getActivePrompts().length === 0">
7212              <div class="ai-chatbot__prompts-loading">
7213                <span class="ai-chatbot__prompt-skeleton"></span>
7214                <span class="ai-chatbot__prompt-skeleton"></span>
7215                <span class="ai-chatbot__prompt-skeleton"></span>
7216              </div>
7217            </template><template x-for="(prompt, index) in getActivePrompts()" :key="index">
7218              <button
7219                @click="useSuggestedPrompt(prompt)"
7220                class="ai-chatbot__prompt-btn"
7221                type="button"
7222                x-text="prompt"
7223              ></button>
7224            </template>
7225          </div><div x-show="ctaButton && ctaButton.show" x-cloak class="ai-chatbot__cta">
7226            <button
7227              @click="handleCTAClick()"
7228              class="ai-chatbot__cta-btn"
7229              type="button"
7230              x-text="ctaButton?.text || 'Request a Quote'"
7231            ></button>
7232            <button
7233              @click="dismissCTA()"
7234              class="ai-chatbot__cta-dismiss"
7235              type="button"
7236              aria-label="Dismiss"
7237            >
7238              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7239                <line x1="18" y1="6" x2="6" y2="18"></line>
7240                <line x1="6" y1="6" x2="18" y2="18"></line>
7241              </svg>
7242            </button>
7243          </div><div x-show="conversationStatus === 'resolved'" x-cloak class="ai-chatbot__resolved-banner">
7244            Chat ended — send a message to start again.
7245          </div><div x-show="showContactAsk" x-cloak class="ai-chatbot__contact-ask">
7246            <p class="ai-chatbot__contact-ask-prompt" x-show="contactAskMode === 'email_chip'">Leave your email in case you step away.</p>
7247            <p class="ai-chatbot__contact-ask-prompt" x-show="contactAskMode === 'progressive'">Mind sharing your name and email so we can follow up?</p>
7248            <form @submit.prevent="submitContact()" class="ai-chatbot__contact-ask-form">
7249              <input
7250                x-show="contactAskMode !== 'email_chip' && !contactName"
7251                x-model="contactNameInput"
7252                type="text"
7253                class="ai-chatbot__contact-ask-input"
7254                placeholder="Your name"
7255                :disabled="contactSubmitting"
7256              >
7257              <input
7258                x-show="!contactEmail"
7259                x-model="contactEmailInput"
7260                type="email"
7261                class="ai-chatbot__contact-ask-input"
7262                placeholder="Your email"
7263                :disabled="contactSubmitting"
7264              >
7265              <button
7266                type="submit"
7267                class="ai-chatbot__contact-ask-submit"
7268                :disabled="contactSubmitting"
7269              >
7270                Send
7271              </button>
7272              <button
7273                type="button"
7274                @click="dismissContactAsk()"
7275                class="ai-chatbot__contact-ask-dismiss"
7276                aria-label="Dismiss"
7277              >
7278                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7279                  <line x1="18" y1="6" x2="6" y2="18"></line>
7280                  <line x1="6" y1="6" x2="18" y2="18"></line>
7281                </svg>
7282              </button>
7283            </form>
7284          </div><div class="ai-chatbot__input-area">
7285            <form @submit.prevent="sendMessage()" class="ai-chatbot__input-form">
7286              <textarea
7287                x-ref="chatInput"
7288                x-model="inputText"
7289                @keydown="handleKeyDown($event)"
7290                class="ai-chatbot__input"
7291                placeholder="Type your message..."
7292                rows="1"
7293                :disabled="isLoading"
7294              ></textarea>
7295              <button
7296                type="submit"
7297                class="ai-chatbot__send-btn"
7298                :disabled="isLoading || !inputText.trim()"
7299                aria-label="Send"
7300              >
7301                <template x-if="isLoading">
7302                  <svg class="ai-chatbot__spinner" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7303                    <line x1="12" y1="2" x2="12" y2="6"></line>
7304                    <line x1="12" y1="18" x2="12" y2="22"></line>
7305                    <line x1="4.93" y1="4.93" x2="7.76" y2="7.76"></line>
7306                    <line x1="16.24" y1="16.24" x2="19.07" y2="19.07"></line>
7307                    <line x1="2" y1="12" x2="6" y2="12"></line>
7308                    <line x1="18" y1="12" x2="22" y2="12"></line>
7309                    <line x1="4.93" y1="19.07" x2="7.76" y2="16.24"></line>
7310                    <line x1="16.24" y1="7.76" x2="19.07" y2="4.93"></line>
7311                  </svg>
7312                </template>
7313                <template x-if="!isLoading">
7314                  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7315                    <line x1="22" y1="2" x2="11" y2="13"></line>
7316                    <polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>
7317                  </svg>
7318                </template>
7319              </button>
7320            </form><p
7321              class="ai-chatbot__disclaimer"
7322              x-show="conversationStatus === null || conversationStatus === 'bot'"
7323            >
7324              Responses are generated by AI and may be inaccurate.
7325            </p>
7326          </div>
7327        </div>
7328      </div>
7329    </template>
7330  </data-island>
7331</div>
7332
7333    
7334    <section id="shopify-section-branding-service-cards" class="shopify-section branding-service-cards-section"><style data-shopify>
7335  .branding-floating-overlay {
7336    position: fixed;
7337    inset: 0;
7338    z-index: 9999;
7339    background: rgba(0, 0, 0, 0.5);
7340    opacity: 0;
7341    transition: opacity 300ms ease;
7342    pointer-events: none;
7343  }
7344
7345  .branding-floating-overlay.active {
7346    opacity: 1;
7347    pointer-events: auto;
7348  }
7349
7350  /* Floating card - matches carousel expanded card styling */
7351  .branding-floating-card {
7352    position: fixed;
7353    z-index: 10000;
7354    background: rgb(var(--color-scheme-background, 255 255 255));
7355    border-radius: 16px;
7356    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.4);
7357    display: none;
7358    flex-direction: column;
7359    max-height: 85vh;
7360    overflow: hidden;
7361    /* No default top/left/bottom - JS controls position */
7362  }
7363
7364  /* Close button - matches carousel style */
7365  .branding-floating-card .branding-pill-close {
7366    position: absolute;
7367    top: 12px;
7368    right: 12px;
7369    z-index: 10;
7370    width: 32px;
7371    height: 32px;
7372    border-radius: 50%;
7373    background: rgba(255, 255, 255, 0.9);
7374    border: none;
7375    cursor: pointer;
7376    display: flex;
7377    align-items: center;
7378    justify-content: center;
7379    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
7380    transition: background 200ms ease;
7381  }
7382
7383  .branding-floating-card .branding-pill-close:hover {
7384    background: rgba(255, 255, 255, 1);
7385  }
7386
7387  .branding-floating-card .branding-pill-close svg {
7388    width: 16px;
7389    height: 16px;
7390    stroke: #333;
7391  }
7392
7393  /* Image link - matches carousel style */
7394  .branding-floating-card .branding-pill-image-link {
7395    display: block;
7396    flex-shrink: 0;
7397    background: rgba(var(--color-scheme-text, 0 0 0), 0.05);
7398    min-height: 200px;
7399  }
7400
7401  .branding-floating-card .branding-pill-image-link.has-image {
7402    min-height: 0;
7403  }
7404
7405  .branding-floating-card .branding-pill-image {
7406    border-radius: 16px 16px 0 0;
7407    width: 100%;
7408    height: auto;
7409    max-height: 280px;
7410    object-fit: cover;
7411    display: block;
7412  }
7413
7414  .branding-floating-card .branding-pill-image:not([src]),
7415  .branding-floating-card .branding-pill-image[src=""] {
7416    display: none;
7417  }
7418
7419  /* Label button overlay - matches carousel style */
7420  .branding-floating-card .branding-pill-label {
7421    display: none; /* Hidden in expanded state like carousel */
7422  }
7423
7424  /* Expanded content - matches carousel style */
7425  .branding-floating-card .branding-pill-content {
7426    padding: 20px;
7427    flex-shrink: 0;
7428  }
7429
7430  .branding-floating-card .branding-expanded-title {
7431    margin: 0 0 12px 0;
7432    font-size: 1.25rem;
7433    font-weight: 600;
7434    color: black;
7435
7436  }
7437
7438  .branding-floating-card .branding-expanded-loading {
7439    display: flex;
7440    align-items: center;
7441    justify-content: center;
7442    padding: 20px;
7443  }
7444
7445  .branding-floating-card .branding-expanded-spinner {
7446    width: 24px;
7447    height: 24px;
7448    border: 2px solid rgba(var(--color-scheme-text, 0 0 0), 0.1);
7449    border-top-color: rgb(var(--color-scheme-text, 0 0 0));
7450    border-radius: 50%;
7451    animation: branding-pill-spin 0.8s linear infinite;
7452  }
7453
7454  @keyframes branding-pill-spin {
7455    to { transform: rotate(360deg); }
7456  }
7457
7458  .branding-floating-card .branding-expanded-description {
7459    margin-bottom: 16px;
7460    line-height: 1.6;
7461    color: black;
7462  }
7463
7464  .branding-floating-card .branding-expanded-description p {
7465    margin: 0;
7466  }
7467
7468  .branding-floating-card .branding-expanded-description p + p {
7469    margin-top: 0.75em;
7470  }
7471
7472  @media (max-width: 749px) {
7473    .branding-floating-card {
7474      width: calc(100vw - 48px) !important;
7475      left: 24px !important;
7476      max-width: none !important;
7477    }
7478  }
7479</style>
7480
7481<!-- Overlay backdrop -->
7482<div
7483  id="branding-floating-overlay"
7484  class="branding-floating-overlay"
7485  onclick="window.closeBrandingServiceCard()"
7486></div>
7487
7488<!-- Floating card - HTML structure matches carousel expanded cards -->
7489<div
7490  id="branding-floating-card"
7491  class="branding-floating-card color-scheme5"
7492>
7493  <!-- Close button (top right over image) -->
7494  <button type="button" class="branding-pill-close" onclick="window.closeBrandingServiceCard()">
7495    <span class="sr-only">Close</span>
7496    <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
7497      <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
7498    </svg>
7499  </button>
7500
7501  <!-- Image with link -->
7502  <a id="branding-card-image-link" href="#" class="branding-pill-image-link">
7503    <img
7504      id="branding-card-image"
7505      class="branding-pill-image"
7506      src=""
7507      alt=""
7508      loading="lazy"
7509      width="300"
7510      height="300"
7511    >
7512  </a>
7513
7514  <!-- Label button (hidden in expanded state, like carousel) -->
7515  <a id="branding-card-label" href="#" class="branding-pill-label"></a>
7516
7517  <!-- Expanded content -->
7518  <div class="branding-pill-content">
7519    <h3 id="branding-card-title" class="branding-expanded-title"></h3>
7520    <div id="branding-card-loading" class="branding-expanded-loading" style="display: none;">
7521      <div class="branding-expanded-spinner"></div>
7522    </div>
7523    <div id="branding-card-description" class="branding-expanded-description"></div>
7524  </div>
7525</div>
7526
7527<script>
7528(function() {
7529  // Build service data from Shopify blocks
7530  // Key is the lowercase metafield value (e.g., "screen print", "custom neck tags")
7531  const brandingServiceData = {
7532    
7533      'high density transfer': {
7534        title: "High density transfer",
7535        description: "\u003cp\u003eA high density transfer is a heat-applied decoration that creates a raised, textured print using layered ink, producing a bold, dimensional effect with sharp edges and strong durability on garments.\u003c\/p\u003e",
7536        image: '//printroom.co/cdn/shop/files/heat_transfer_2_1b6dd18d-7ae5-452a-a0ca-fef697ba6400.jpg?v=1761181341&width=800',
7537        imageAlt: "High density transfer",
7538        ctaText: "Learn more",
7539        ctaUrl: '#'
7540      },
7541    
7542      'printed seam tape': {
7543        title: "printed seam tape",
7544        description: "\u003cp\u003eAdd a custom touch to the inside of your cap with printed seam tape. This often-overlooked detail offers a unique way to showcase your brand, giving your caps a polished finish that stands out from the inside out. Fully customisable, it’s a small touch that makes a big impression.\u003c\/p\u003e",
7545        image: '//printroom.co/cdn/shop/files/speights_cap_inner_3.jpg?v=1743540305&width=800',
7546        imageAlt: "custom caps NZ",
7547        ctaText: "Learn more",
7548        ctaUrl: '#'
7549      },
7550    
7551      'knitted all-over': {
7552        title: "Knitted all-over",
7553        description: "\u003cp\u003eKnitted all-over designs weave patterns directly into the fabric of your custom socks, creating a seamless, durable look that won’t fade over time. Ideal for intricate, full-length designs with lasting quality.\u003c\/p\u003e",
7554        image: '//printroom.co/cdn/shop/files/knitted_all_over_detail.jpg?v=1772668725&width=800',
7555        imageAlt: "Knitted all-over",
7556        ctaText: "Learn more",
7557        ctaUrl: '#'
7558      },
7559    
7560      'dye-sublimation': {
7561        title: "Dye-sublimation",
7562        description: "\u003cp\u003eDye-sublimation allows vibrant, full-colour designs to be seamlessly printed on your custom socks. The process ensures high-quality, durable prints that won’t fade, perfect for intricate patterns or all-over designs.\u003c\/p\u003e",
7563        image: '//printroom.co/cdn/shop/files/dye_sub_detail.jpg?v=1772673144&width=800',
7564        imageAlt: "Dye-sublimation",
7565        ctaText: "Learn more",
7566        ctaUrl: '#'
7567      },
7568    
7569      'additional cushioning': {
7570        title: "Additional cushioning",
7571        description: "\u003cp\u003eAdd extra cushioning to your custom socks for improved comfort and support. The soft padding underfoot reduces impact, perfect for all-day wear or active use.\u003c\/p\u003e",
7572        image: '//printroom.co/cdn/shop/files/cushion_detail.jpg?v=1772673175&width=800',
7573        imageAlt: "Additional cushioning",
7574        ctaText: "Learn more",
7575        ctaUrl: '#'
7576      },
7577    
7578      'added grip': {
7579        title: "Added grip",
7580        description: "\u003cp\u003eEnhance your custom socks with added grip to prevent slipping! The textured grip on the sole ensures better traction, or adds an extra dimension to your custom product.\u003c\/p\u003e",
7581        image: '//printroom.co/cdn/shop/files/added_grip_detail.jpg?v=1772675209&width=800',
7582        imageAlt: "Added grip",
7583        ctaText: "Learn more",
7584        ctaUrl: '#'
7585      },
7586    
7587      'custom neck tags': {
7588        title: "Custom neck tags",
7589        description: "\u003cp\u003eMake your brand stand out with custom neck tags! Whether you choose woven labels or screen printing, our high-quality neck tags offer a professional finish and are ideal for showcasing your unique brand identity.\u003c\/p\u003e",
7590        image: '//printroom.co/cdn/shop/files/cardrona_4_2_936c38b5-e634-4f0f-b224-0c9ed7b76ed9.jpg?v=1648584454&width=800',
7591        imageAlt: "garment relabelling and custom neck tags christchurch",
7592        ctaText: "Learn more",
7593        ctaUrl: '#'
7594      },
7595    
7596      'screen print': {
7597        title: "Screen Printing",
7598        description: "\u003cp\u003eOur most popular print method for good reason—it delivers \u003cstrong\u003etop-tier qual
7598ity\u003c\/strong\u003e, long-lasting results, and exceptional value for larger orders.\u003c\/p\u003e",
7599        image: '//printroom.co/cdn/shop/files/PrintRoomMay2024Image-16.jpg?v=1733350366&width=800',
7600        imageAlt: "Screen Printing",
7601        ctaText: "Learn more",
7602        ctaUrl: '#'
7603      },
7604    
7605      'embroidery': {
7606        title: "Embroidery",
7607        description: "\u003cp\u003eUnmatched in durability, embroidery is a simple choice for those wanting texture, dimension and a high-end finish.\u003c\/p\u003e",
7608        image: '//printroom.co/cdn/shop/files/The_print_room_custom_embroidery_new_zealand.jpg?v=1613753361&width=800',
7609        imageAlt: "Embroidery",
7610        ctaText: "Learn more",
7611        ctaUrl: '#'
7612      },
7613    
7614      'heat transfer': {
7615        title: "Heat Transfers",
7616        description: "\u003cp\u003ePerfect for producing vibrant, detail-rich prints that require low minimums.\u003c\/p\u003e",
7617        image: '//printroom.co/cdn/shop/files/heat_press_print_room.jpg?v=1776795804&width=800',
7618        imageAlt: "Heat Transfers",
7619        ctaText: "Learn more",
7620        ctaUrl: '/pages/heat-transfers'
7621      },
7622    
7623      'custom patches': {
7624        title: "Custom Patches",
7625        description: "\u003cp\u003eDurable and versatile, add dimension to your merch with embroidered, woven or iron-on custom patches.\u003c\/p\u003e",
7626        image: '//printroom.co/cdn/shop/files/PrintRoomApril2024Image-42_28acbdcf-7baf-4834-9201-752d656019ad.jpg?v=1754535298&width=800',
7627        imageAlt: "custom patches NZ",
7628        ctaText: "Learn more",
7629        ctaUrl: '#'
7630      },
7631    
7632      'custom packaging': {
7633        title: "Custom packaging",
7634        description: "\u003cp\u003eThe ultimate finishing touch; custom packaging. It’s the first thing your customer sees, make the best impression possible and package your products inline with your brand.\u003c\/p\u003e",
7635        image: '//printroom.co/cdn/shop/files/socks_label.jpg?v=1743476398&width=800',
7636        imageAlt: "custom socks",
7637        ctaText: "Learn more",
7638        ctaUrl: '#'
7639      },
7640    
7641      'custom woven label': {
7642        title: "Custom woven label",
7643        description: "\u003cp\u003eGive all of the details you need while putting the finishing touches on your product.\u003c\/p\u003e",
7644        image: '//printroom.co/cdn/shop/files/garage_project_cap_4.1.jpg?v=1770086525&width=800',
7645        imageAlt: "Custom woven label",
7646        ctaText: "Learn more",
7647        ctaUrl: '#'
7648      },
7649    
7650      'pip tags': {
7651        title: "Pip tags",
7652        description: "\u003cp\u003eElevate your garments with custom pip tags. Perfect for adding subtle branding, a small detail with a big impact for your apparel collection.\u003c\/p\u003e",
7653        image: '//printroom.co/cdn/shop/files/cardrona_3_19a3035b-75a5-4fd0-9604-01d159cdc102.jpg?v=1648585469&width=800',
7654        imageAlt: "garment relabelling and custom neck tags nz",
7655        ctaText: "Learn more",
7656        ctaUrl: '#'
7657      },
7658    
7659      'additional print placements': {
7660        title: "Additional print placements",
7661        description: "\u003cp\u003eAdd extra visibility to your brand by adding additional prints\/decorations. Back of the cap, sleeve of your sweatshirt; you name it, we can most likely do it. Make the most of your products' full 360 degrees.\u003c\/p\u003e",
7662        image: '//printroom.co/cdn/shop/files/garage_project_cap_3.1.jpg?v=1770083144&width=800',
7663        imageAlt: "Additional print placements",
7664        ctaText: "Learn more",
7665        ctaUrl: '#'
7666      },
7667    
7668      'various attachments available': {
7669        title: "Various attachments available",
7670        description: "\u003cp\u003eMake the most of customisation and choose the attachment style that works for your project. Robust, intricate, elegant…your choice.\u003c\/p\u003e",
7671        image: '//printroom.co/cdn/shop/files/pack-a-punch.jpg?v=1760925265&width=800',
7672        imageAlt: "Various attachments available",
7673        ctaText: "Learn more",
7674        ctaUrl: '#'
7675      },
7676    
7677      'add additional colours': {
7678        title: "Add additional colours",
7679        description: "\u003cp\u003eCreate more depth and complexity when your brand needs it. Specific limitations apply to each product. Consult your account manager for specific limitations.\u003c\/p\u003e",
7680        image: '//printroom.co/cdn/shop/files/ombre.jpg?v=1770253000&width=800',
7681        imageAlt: "Add additional colours",
7682        ctaText: "Learn more",
7683        ctaUrl: '#'
7684      },
7685    
7686      'various closures available': {
7687        title: "Various closures available",
7688        description: "\u003cp\u003eAchieve the result you want with control over what closure you go with.\u003c\/p\u003e",
7689        image: '//printroom.co/cdn/shop/files/closure_options_2.1_76d53ef9-c502-45b4-b915-66543d3c7f40.jpg?v=1769654951&width=800',
7690        imageAlt: "Various closures available",
7691        ctaText: "Learn more",
7692        ctaUrl: '#'
7693      },
7694    
7695      'glow in the dark': {
7696        title: "Glow in the dark",
7697        description: "\u003cp\u003eBe seen…in the dark! Add a novel element to your product and have some fun with it.\u003c\/p\u003e",
7698        image: '//printroom.co/cdn/shop/files/glow_in_the_dark.jpg?v=1770253668&width=800',
7699        imageAlt: "Glow in the dark",
7700        ctaText: "Learn more",
7701        ctaUrl: '#'
7702      },
7703    
7704      'applique': {
7705        title: "Applique",
7706        description: "\u003cp\u003eAppliqué embroidery isa technique where small pieces of fabric are laser cut and layered and stitched onto a garment, adding texture to the design.\u003c\/p\u003e",
7707        image: '//printroom.co/cdn/shop/files/Screenshot-2026-04-22-at-6.18.38_AM.jpg?v=1776795959&width=800',
7708        imageAlt: "Applique",
7709        ctaText: "Learn more",
7710        ctaUrl: '#'
7711      },
7712    
7713      'spreadsheet': {
7714        title: "Spreadsheet",
7715        description: "\u003cp\u003eWe send you a formatted spreadsheet that can be shared around your year group for each student to input the
7715ir garment style, size and custom name. \u003c\/p\u003e",
7716        image: null,
7717        imageAlt: "Spreadsheet",
7718        ctaText: "Learn more",
7719        ctaUrl: '#'
7720      },
7721    
7722      'online portal': {
7723        title: "Online portal",
7724        description: "\u003cp\u003eWe setup an password portected online portal for your year group to log into and purchased or order their garments. \u003c\/p\u003e",
7725        image: '//printroom.co/cdn/shop/files/product_1db770e9-3325-4bd4-8636-6f4b6d5e566a_slot_5.jpg?v=1776753322&width=800',
7726        imageAlt: "Earth Positive Premium Jersey T-shirt EP185 T-shirt branded merchandise nz",
7727        ctaText: "Click",
7728        ctaUrl: '#'
7729      }
7730    
7731  };
7732
7733  // Also build hyphenated keys for matching
7734  const brandingServiceDataNormalized = {};
7735  Object.keys(brandingServiceData).forEach(key => {
7736    // Store with original key
7737    brandingServiceDataNormalized[key] = brandingServiceData[key];
7738    // Also store with hyphenated version
7739    const hyphenated = key.replace(/\s+/g, '-');
7740    brandingServiceDataNormalized[hyphenated] = brandingServiceData[key];
7741    // Also store with spaced version (in case key was hyphenated)
7742    const spaced = key.replace(/-/g, ' ');
7743    brandingServiceDataNormalized[spaced] = brandingServiceData[key];
7744  });
7745
7746  // Configuration from section settings
7747  const config = {
7748    maxWidth: 400,
7749    animationDuration: 300,
7750    showOverlay: false
7751  };
7752
7753  // State
7754  let isCardOpen = false;
7755  let originRect = null;
7756
7757  // DOM elements
7758  const overlay = document.getElementById('branding-floating-overlay');
7759  const card = document.getElementById('branding-floating-card');
7760  const cardImageLink = document.getElementById('branding-card-image-link');
7761  const cardImage = document.getElementById('branding-card-image');
7762  const cardLabel = document.getElementById('branding-card-label');
7763  const cardTitle = document.getElementById('branding-card-title');
7764  const cardLoading = document.getElementById('branding-card-loading');
7765  const cardDescription = document.getElementById('branding-card-description');
7766
7767  // Find service data by matching the label text
7768  function findServiceData(label) {
7769    if (!label) return null;
7770    const searchKey = label.toLowerCase().trim();
7771    const searchKeyHyphenated = searchKey.replace(/\s+/g, '-');
7772    
7773    // Direct match
7774    if (brandingServiceDataNormalized[searchKey]) {
7775      return brandingServiceDataNormalized[searchKey];
7776    }
7777    
7778    // Try hyphenated version
7779    if (brandingServiceDataNormalized[searchKeyHyphenated]) {
7780      return brandingServiceDataNormalized[searchKeyHyphenated];
7781    }
7782    
7783    // Partial match - check if any key is contained in the label or vice versa
7784    for (const key of Object.keys(brandingServiceDataNormalized)) {
7785      if (searchKey.includes(key) || key.includes(searchKey)) {
7786        return brandingServiceDataNormalized[key];
7787      }
7788    }
7789    
7790    return null;
7791  }
7792
7793  // Populate card content
7794  function populateCard(data, serviceUrl) {
7795    const url = data.ctaUrl || serviceUrl || '#';
7796
7797    // Set image
7798    if (data.image) {
7799      cardImage.src = data.image;
7800      cardImage.alt = data.imageAlt || data.title || '';
7801      cardImageLink.classList.add('has-image');
7802    } else {
7803      cardImage.src = '';
7804      cardImage.alt = '';
7805      cardImageLink.classList.remove('has-image');
7806    }
7807
7808    // Set links
7809    cardImageLink.href = url;
7810    cardLabel.href = url;
7811    cardLabel.textContent = data.title || '';
7812
7813    // Set content
7814    cardTitle.textContent = data.title || '';
7815
7816    // Handle description - if we have static content use it, otherwise fetch
7817    if (data.description && data.description.trim() !== '' && data.description !== '<p>Add a description of this branding service.</p>') {
7818      cardDescription.innerHTML = data.description;
7819      cardLoading.style.display = 'none';
7820    } else {
7821      // Fetch description from service page
7822      cardDescription.innerHTML = '';
7823      cardLoading.style.display = 'flex';
7824
7825      if (url && url !== '#') {
7826        fetch(url)
7827          .then(response => response.text())
7828          .then(html => {
7829            const parser = new DOMParser();
7830            const doc = parser.parseFromString(html, 'text/html');
7831            const main = doc.querySelector('main') || doc.querySelector('.page-content') || doc.querySelector('.shopify-section') || doc.body;
7832            let description = '<p>Discover our premium branding service.</p>';
7833            if (main) {
7834              const firstP = main.querySelector('p');
7835              if (firstP) description = '<p>' + firstP.textContent.trim() + '</p>';
7836            }
7837            cardDescription.innerHTML = description;
7838            cardLoading.style.display = 'none';
7839          })
7840          .catch(() => {
7841            cardDescription.innerHTML = '<p>Discover our premium branding service.</p>';
7842            cardLoading.style.display = 'none';
7843          });
7844      } else {
7845        cardDescription.innerHTML = '<p>Discover our premium branding service.</p>';
7846        cardLoading.style.display = 'none';
7847      }
7848    }
7849  }
7850
7851  // Show card with animation from button position
7852  function showCardWithData(data, buttonElement, serviceUrl) {
7853    if (!data) {
7854      console.warn('No service data provided');
7855      return;
7856    }
7857
7858    // Get button position for animation origin
7859    const buttonRect = buttonElement
7860      ? buttonElement.getBoundingClientRect()
7861      : { left: window.innerWidth / 2 - 50, top: window.innerHeight / 2, width: 100, height: 40 };
7862
7863    originRect = { ...buttonRect };
7864
7865    // Populate content
7866    populateCard(data, serviceUrl);
7867
7868    // Calculate target dimensions
7869    const expandedWidth = Math.min(window.innerWidth - 40, config.maxWidth);
7870    const padding = 20;
7871    const headerHeight = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--header-height') || '0', 10);
7872
7873   // Center expanded card horizontally on the button's center
7874const buttonCenterX = buttonRect.left + (buttonRect.width / 2);
7875let targetLeft = buttonCenterX - (expandedWidth / 2);
7876
7877// Clamp to viewport bounds horizontally
7878targetLeft = Math.max(padding, Math.min(targetLeft, window.innerWidth - expandedWidth - padding));
7879
7880// Position vertically: expand from button's top, but ensure it stays in viewport
7881// Start from the button's vertical position
7882let targetTop = buttonRect.top;
7883
7884// Get actual card content height or use a more realistic estimate
7885const cardContent = card.querySelector('.card__content') || card;
7886const estimatedCardHeight = cardContent.scrollHeight || 600; // Increased from 400 to 600
7887
7888// Calculate available space below and above the button
7889const spaceBelow = window.innerHeight - buttonRect.bottom - padding;
7890const spaceAbove = buttonRect.top - headerHeight - padding;
7891
7892// If card would go below viewport, shift it up
7893if (targetTop + estimatedCardHeight > window.innerHeight - padding) {
7894  targetTop = Math.max(headerHeight + padding, window.innerHeight - estimatedCardHeight - padding);
7895}
7896
7897// If card would go above header, shift it down
7898if (targetTop < headerHeight + padding) {
7899  targetTop = headerHeight + padding;
7900}
7901
7902// Final safety check: ensure card fits in viewport
7903const maxAllowedHeight = window.innerHeight - headerHeight - (padding * 2);
7904if (estimatedCardHeight > maxAllowedHeight) {
7905  targetTop = headerHeight + padding;
7906  card.style.maxHeight = maxAllowedHeight + 'px';
7907  card.style.overflowY = 'auto';
7908}
7909
7910
7911    // Show overlay
7912    if (config.showOverlay) {
7913      overlay.classList.add('active');
7914    }
7915
7916    // Set initial state at EXACT button position
7917    card.style.position = 'fixed';
7918    card.style.top = buttonRect.top + 'px';
7919    card.style.left = buttonRect.left + 'px';
7920    card.style.width = buttonRect.width + 'px';
7921    card.style.height = buttonRect.height + 'px';
7922    card.style.zIndex = '10000';
7923    card.style.margin = '0';
7924    card.style.display = 'flex';
7925    card.style.opacity = '1';
7926    card.style.pointerEvents = 'auto';
7927    card.style.overflow = 'hidden';
7928    card.style.transition = 'none';
7929    card.style.flexDirection = 'column';
7930    card.style.borderRadius = '16px';
7931
7932    // Force reflow to ensure initial position is applied
7933    card.getBoundingClientRect();
7934
7935    // Now animate to expanded position
7936    requestAnimationFrame(() => {
7937      requestAnimationFrame(() => {
7938        card.style.transition = `
7939          top ${config.animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1),
7940          left ${config.animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1),
7941          width ${config.animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1),
7942          height ${config.animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1)
7943        `;
7944        card.style.top = targetTop + 'px';
7945        card.style.left = targetLeft + 'px';
7946        card.style.width = expandedWidth + 'px';
7947        card.style.height = 'auto';
7948      });
7949    });
7950
7951    isCardOpen = true;
7952  }
7953
7954  // Close card with animation back to origin
7955  window.closeBrandingServiceCard = function() {
7956    if (!isCardOpen) return;
7957
7958    // Animate back to origin position (exactly like carousel collapseCard)
7959    if (originRect) {
7960      card.style.transition = `
7961        top ${config.animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1),
7962        left ${config.animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1),
7963        width ${config.animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1),
7964        height ${config.animationDuration}ms cubic-bezier(0.32, 0.72, 0, 1)
7965      `;
7966      card.style.top = originRect.top + 'px';
7967      card.style.left = originRect.left + 'px';
7968      card.style.width = originRect.width + 'px';
7969      card.style.height = originRect.height + 'px';
7970      card.style.overflow = 'hidden';
7971    }
7972
7973    // Hide overlay
7974    overlay.classList.remove('active');
7975
7976    // Clean up after animation
7977    setTimeout(() => {
7978      card.style.display = 'none';
7979      card.style.transition = '';
7980      card.style.top = '';
7981      card.style.left = '';
7982      card.style.width = '';
7983      card.style.height = '';
7984      card.style.opacity = '';
7985      card.style.pointerEvents = '';
7986      card.style.overflow = '';
7987      isCardOpen = false;
7988      originRect = null;
7989    }, config.animationDuration);
7990  };
7991
7992  // Event listener for pill button clicks
7993  // Alpine's $dispatch bubbles from the element through the DOM
7994  document.addEventListener('branding-modal:open', (event) => {
7995    // Prevent duplicate handling
7996    if (event._handled) return;
7997    event._handled = true;
7998
7999    const { label, url, element } = event.detail || {};
8000
8001    // Get the pill text from the button element if available
8002    const pillText = element ? (element.querySelector('.branding-service-pill__text')?.textContent || label) : label;
8003
8004    // Find service data by matching the pill text
8005    const serviceData = findServiceData(pillText);
8006    if (!serviceData) {
8007      console.warn('No service data configured for:', pillText);
8008      return;
8009    }
8010
8011    // If a card is already open, close it first
8012    if (isCardOpen) {
8013      window.closeBrandingServiceCard();
8014      setTimeout(() => {
8015        showCardWithData(serviceData, element, url);
8016      }, config.animationDuration + 50);
8017    } else {
8018      showCardWithData(serviceData, element, url);
8019    }
8020  });
8021
8022  // Escape key handler
8023  document.addEventListener('keydown', (e) => {
8024    if (e.key === 'Escape' && isCardOpen) {
8025      window.closeBrandingServiceCard();
8026    }
8027  });
8028})();
8029</script>
8029
8030
8031
8032</section>
8033
8034    
8034<script src="//printroom.co/cdn/shop/t/59/assets/global.bundle.js?v=149077486339995821341790734057" type="module"></script>
8034
8035
8036    
8036<script>
8037      window.Shopify = window.Shopify || {};
8038      window.Shopify.locale = "en";
8039      window.Shopify.currency = {
8040        active: "USD",
8041        rate: ""
8042      };
8043    </script>
8043
8044  <div id="shopify-block-AWDJwL3lGQkF3Zitrd__39280165312039977" class="shopify-block shopify-app-block">
8045
8046�
8046<script>
8047  console.log('[FulfillmentFee] Namespace: app--313853968385--fulfillment_fee');
8048  console.log('[FulfillmentFee] Key: config');
8049  console.log('[FulfillmentFee] Config value:', {"vendorFees":{"Wētā FX Crew":5.75},"feeProductVariantId":"gid:\/\/shopify\/ProductVariant\/44486403227718","isEnabled":true});
8050</script>
8050<script>
8051  (function() {
8052    // The metafield .value is already a parsed JSON object
8053    var configData = {"vendorFees":{"Wētā FX Crew":5.75},"feeProductVariantId":"gid:\/\/shopify\/ProductVariant\/44486403227718","isEnabled":true};
8054    if (configData && typeof configData === 'object') {
8055      window.__FULFILLMENT_FEE_CONFIG__ = configData;
8056      console.log('[FulfillmentFee] Config loaded:', window.__FULFILLMENT_FEE_CONFIG__);
8057    } else {
8058      console.error('[FulfillmentFee] Invalid config data:', configData);
8059      window.__FULFILLMENT_FEE_CONFIG__ = null;
8060    }
8061  })();
8062</script>
vendor: 2 bytes, line 8062
8062
8063<script src="https://cdn.shopify.com/extensions/019d45d2-6a70-7eed-8da1-d1e8fd0fae86/fulfillment-fee-app-100/assets/fulfillment-fee-manager.js" defer></script>
8063
8064</div><div id="shopify-block-AWitpMC8rZDJCSlg4R__15573056287721514228" class="shopify-block shopify-app-block json-ld-for-seo"><!-- generated: 2026-10-04 21:38:25 +1300 -->
8065<!-- BEGIN app snippet: json_ld_for_seo_web_page -->
8065<script type="application/ld+json">
8066 {
8067   "@context": "https://schema.org",
8068   "@type": "WebPage",
8069   "@id": "https:\/\/printroom.co\/blogs\/the-print-room-nz#json-ld-for-seo-webpage",
8070   "url": "https:\/\/printroom.co\/blogs\/the-print-room-nz",
8071   "image": null,
8072   "primaryImageOfPage": null,
8073   "dateCreated": null,
8074   "datePublished": null
8075 }
8076</script>
8076
8077<!-- END app snippet -->
8078<!-- wp 3 --><!-- BEGIN app snippet: json_ld_for_seo_organization -->
8079<script type="application/ld+json">
8080{
8081    "@context": "https://schema.org",
8082    "@type": "Organization","@id": "https:\/\/printroom.co\/#org",
8083    "name": "The Print Room",
8084    "url": "https:\/\/printroom.co",
8085    "description": "NZ’s experts in custom t-shirt printing, tote bags, uniforms, and branded merchandise. Print Room offers high-quality screen printing and embroidery using eco-friendly inks. Fast turnaround, sustainable production, and trusted by leading New Zealand brands.",
8086    "telephone": "+6434259694",
8087    "logo": "https:\/\/cdn.shopify.com\/s\/images\/admin\/no-image-large.gif",
8088    "image": "https:\/\/cdn.shopify.com\/s\/images\/admin\/no-image-large.gif",
8089    "sameAs": ["","https:\/\/www.instagram.com\/printroomnz\/"],
8090    "address": {
8091        "@type": "PostalAddress",
8092        "streetAddress": "21 Grosvenor Street, 21",
8093        "addressLocality": "Dunedin",
8094        "addressRegion": "Otago",
8095        "postalCode": "9011",
8096        "addressCountry": "NZ"
8097    },
8098   "contactPoint": [
8099     {
8100       "@type": "ContactPoint",
8101       "telephone": "+6434259694",
8102       "email": ""
8103     }
8104    ]}
8105</script>
8105
8106<!-- END app snippet --> <!-- o 4 --><!-- BEGIN app snippet: json_ld_for_seo_product_group --><!-- END app snippet -->
8107<!-- p 1 --><!-- A 13 -->
8108
8109
8110</div>
8110<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
8110
8111</body>
8112</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.