PageSourceSearch

https://getbookjoy.com/cart

html getbookjoy.com collected 2026-09-29 00:46:47 UTC 71,312 bytes, 1,774 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3  <head>
4    <meta charset="utf-8" />
5    <meta content="IE=edge" http-equiv="X-UA-Compatible" />
6    <meta content="width=device-width,initial-scale=1" name="viewport" />
7    <link rel="canonical" href="https://getbookjoy.com/cart" />
8
9    <title>Your Shopping Cart | Book Joy</title>
10
11    
12<meta name="description" content="Take a peek in the shop and find something to proclaim the joy of books in your life!" />
13<meta property="og:site_name" content="Book Joy" />
14<meta property="og:url" content="https://getbookjoy.com/cart" />
15<meta property="og:description" content="Take a peek in the shop and find something to proclaim the joy of books in your life!" />
16
17
18
19
20
21<meta property="og:title" content="Your Shopping Cart | Book Joy" />
22<meta property="og:type" content="website" />
23
24
25  <meta property="og:image" content="https://imgproxy.fourthwall.dev/RO9QY7WU_jUv04krU4rhYYPhz6xUoLDZhq_N8h6dWBc/w:1200/sm:1/enc/SSUhDvhK0vCb0P02/NWfo0KsvnmjZX5EZ/0hJdblyAu97l67qb/saYler-kNWaX0twn/ItSiZjticsN-TvKY/D5QDq3f0hqzcp4mO/YnclhCgJD-AmsUA4/NcaCX9nSilD3yDAO/jI4F0ZFHdsh73SVv/JsSUBMG2gFui2oxw/UtCw8JhaD8nOIMvR/_xIM8fbx8JWvkYgw/ZXDmYuq5xbpi3Bpu/38JxqaLd9qmDpDaZ/4_D6omQF0O_p5hQE/tBUHmLKGr7UlQmjv.png" />
26  <meta property="og:image:secure_url" content="https://imgproxy.fourthwall.dev/RO9QY7WU_jUv04krU4rhYYPhz6xUoLDZhq_N8h6dWBc/w:1200/sm:1/enc/SSUhDvhK0vCb0P02/NWfo0KsvnmjZX5EZ/0hJdblyAu97l67qb/saYler-kNWaX0twn/ItSiZjticsN-TvKY/D5QDq3f0hqzcp4mO/YnclhCgJD-AmsUA4/NcaCX9nSilD3yDAO/jI4F0ZFHdsh73SVv/JsSUBMG2gFui2oxw/UtCw8JhaD8nOIMvR/_xIM8fbx8JWvkYgw/ZXDmYuq5xbpi3Bpu/38JxqaLd9qmDpDaZ/4_D6omQF0O_p5hQE/tBUHmLKGr7UlQmjv.png" />
27  <meta property="twitter:image" content="https://imgproxy.fourthwall.dev/RO9QY7WU_jUv04krU4rhYYPhz6xUoLDZhq_N8h6dWBc/w:1200/sm:1/enc/SSUhDvhK0vCb0P02/NWfo0KsvnmjZX5EZ/0hJdblyAu97l67qb/saYler-kNWaX0twn/ItSiZjticsN-TvKY/D5QDq3f0hqzcp4mO/YnclhCgJD-AmsUA4/NcaCX9nSilD3yDAO/jI4F0ZFHdsh73SVv/JsSUBMG2gFui2oxw/UtCw8JhaD8nOIMvR/_xIM8fbx8JWvkYgw/ZXDmYuq5xbpi3Bpu/38JxqaLd9qmDpDaZ/4_D6omQF0O_p5hQE/tBUHmLKGr7UlQmjv.png" />
28
29<meta name="twitter:card" content="summary_large_image" />
30<meta name="twitter:title" content="Your Shopping Cart | Book Joy" />
31<meta name="twitter:description" content="Take a peek in the shop and find something to proclaim the joy of books in your life!" />
32
33    
34    <link rel="shortcut icon" href="https://imgproxy.fourthwall.dev/ORh5qRrDnmX7RFasZsHslXqwNW8OWjZCVQiYOLbluaw/s:96:96/sm:1/enc/vG0jiUiLRsVvoogG/dTp-j44Kcku0ZFgy/yQRMnpMWZaf4IZCi/zBiPT1RTx9U97d2U/UQu71Fzv8gEvAMjh/sInUHP4PwCnekCIW/sQQZodDrVplWAaef/RLWfYpjzU6N_qK3O/XrceUPHee0aVPYqc/nF7fV1fGqFJEltgJ/aX571pID5qMWI7KN/Wr61MDItTiMGlBfb/8VBNlqT278ji8dUX/u-rnZxYBtN2Akvod/JFcUnTGgRLgFMNvY/qqrtQvNcPqTGw_ym.webp" sizes="96x96" type="image/png" />
35<link rel="shortcut icon" href="https://imgproxy.fourthwall.dev/DGSr9yFYF7Ov7senstC-MDVCIyRzbSugIlo_UqZ--mk/s:48:48/sm:1/enc/vG0jiUiLRsVvoogG/dTp-j44Kcku0ZFgy/yQRMnpMWZaf4IZCi/zBiPT1RTx9U97d2U/UQu71Fzv8gEvAMjh/sInUHP4PwCnekCIW/sQQZodDrVplWAaef/RLWfYpjzU6N_qK3O/XrceUPHee0aVPYqc/nF7fV1fGqFJEltgJ/aX571pID5qMWI7KN/Wr61MDItTiMGlBfb/8VBNlqT278ji8dUX/u-rnZxYBtN2Akvod/JFcUnTGgRLgFMNvY/qqrtQvNcPqTGw_ym.webp" sizes="48x48" type="image/png" />
36
37
38  <link rel="apple-touch-icon" href="https://imgproxy.fourthwall.dev/rRtZ4Zw3S5lmUUsckp9UoTHIsvcFCvQ8ds7SxxkcfOM/s:180:180/sm:1/enc/vG0jiUiLRsVvoogG/dTp-j44Kcku0ZFgy/yQRMnpMWZaf4IZCi/zBiPT1RTx9U97d2U/UQu71Fzv8gEvAMjh/sInUHP4PwCnekCIW/sQQZodDrVplWAaef/RLWfYpjzU6N_qK3O/XrceUPHee0aVPYqc/nF7fV1fGqFJEltgJ/aX571pID5qMWI7KN/Wr61MDItTiMGlBfb/8VBNlqT278ji8dUX/u-rnZxYBtN2Akvod/JFcUnTGgRLgFMNvY/qqrtQvNcPqTGw_ym.webp" sizes="180x180" type="image/png" />
39
40
41<meta content="#ffffff" name="msapplication-TileColor" />
42<meta content="1.0.0" name="version" />
43
44
45    <link rel="stylesheet" type="text/css" href="https://themes.fourthwall.dev/themes-library/assets/c97a08c2-fa31-4bff-93d5-c7aad9121754/assets/vendor.css?v=b1b11eb5397f6f25bd27f727622a7b127d42cd4e0ede0f0b643a4ec082686d92" media="all" integrity="sha256-sbEetTl/byW9J/cnYip7En1CzU4O3g8LZDpOwIJobZI=" crossorigin="anonymous" />
46
47    <link rel="stylesheet" type="text/css" href="https://themes.fourthwall.dev/themes/assets/07e469e3-deeb-4bb2-aa13-dda2c47799c0/assets/styles/css-variables.scss.css?v=58b87c7c343412a0f6c331b404933062da1d9b54af9c43ccfa0c6a7cd99b6ab4" media="all" integrity="sha256-WLh8fDQ0EqD2wzG0BJMwYtodm1SvnEPM+gxqfNmbarQ=" crossorigin="anonymous" />
48    <link rel="stylesheet" type="text/css" href="https://themes.fourthwall.dev/themes/assets/07e469e3-deeb-4bb2-aa13-dda2c47799c0/assets/styles/theme.scss.css?v=c4e0faae7235a7742a2a1b71a174e644abe153cf42479c37edcb8ec7ac718554" media="all" integrity="sha256-xOD6rnI1p3QqKhtxoXTmRKvhU89CR5w37cuOx6xxhVQ=" crossorigin="anonymous" />
49    
50    <link rel="preconnect" href="https://imgproxy.fourthwall.com" crossorigin>
51<link rel="preconnect" href="https://storage.googleapis.com" crossorigin>
52<script src="/platform/geo/redirect.js"></script>
vendor: 1 bytes, line 52
52
53<script src="https://js.stripe.com/v3/" async></script>
53
54<link rel="alternate" href="https://getbookjoy.com/cart" hreflang="x-default" />
55<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-AQ" />
56<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-AS" />
57<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-BQ" />
58<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-EC" />
59<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-FM" />
60<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-GU" />
61<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-IO" />
62<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-MH" />
63<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-MP" />
64<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-PR" />
65<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-PW" />
66<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-SV" />
67<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-TC" />
68<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-UM" />
69<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-US" />
70<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-VG" />
71<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-VI" />
72<link rel="alternate" href="https://getbookjoy.com/en-usd/cart" hreflang="en-ZW" />
73<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-AD" />
74<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-AT" />
75<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-AX" />
76<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-BE" />
77<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-BG" />
78<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-BL" />
79<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-CY" />
80<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-DE" />
81<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-EE" />
82<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-ES" />
83<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-FI" />
84<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-FR" />
85<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-GF" />
86<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-GP" />
87<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-GR" />
88<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-HR" />
89<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-IE" />
90<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-IT" />
91<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-LT" />
92<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-LU" />
93<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-LV" />
94<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-MC" />
95<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-ME" />
96<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-MF" />
97<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-MQ" />
98<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-MT" />
99<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-NL" />
100<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-PM" />
101<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-PT" />
102<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-RE" />
103<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-SI" />
104<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-SK" />
105<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-SM" />
106<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-TF" />
107<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-VA" />
108<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-YT" />
109<link rel="alternate" href="https://getbookjoy.com/en-eur/cart" hreflang="en-XK" />
110<link rel="alternate" href="https://getbookjoy.com/en-cad/cart" hreflang="en-CA" />
111<link rel="alternate" href="https://getbookjoy.com/en-gbp/cart" hreflang="en-GB" />
112<link rel="alternate" href="https://getbookjoy.com/en-gbp/cart" hreflang="en-GG" />
113<link rel="alternate" href="https://getbookjoy.com/en-gbp/cart" hreflang="en-GS" />
114<link rel="alternate" href="https://getbookjoy.com/en-gbp/cart" hreflang="en-IM" />
115<link rel="alternate" href="https://getbookjoy.com/en-gbp/cart" hreflang="en-JE" />
116<link rel="alternate" href="https://getbookjoy.com/en-aud/cart" hreflang="en-AU" />
117<link rel="alternate" href="https://getbookjoy.com/en-aud/cart" hreflang="en-CC" />
118<link rel="alternate" href="https://getbookjoy.com/en-aud/cart" hreflang="en-CX" />
119<link rel="alternate" href="https://getbookjoy.com/en-aud/cart" hreflang="en-HM" />
120<link rel="alternate" href="https://getbookjoy.com/en-aud/cart" hreflang="en-KI" />
121<link rel="alternate" href="https://getbookjoy.com/en-aud/cart" hreflang="en-NF" />
122<link rel="alternate" href="https://getbookjoy.com/en-aud/cart" hreflang="en-NR" />
123<link rel="alternate" href="https://getbookjoy.com/en-aud/cart" hreflang="en-TV" />
124<link rel="alternate" href="https://getbookjoy.com/en-nzd/cart" hreflang="en-CK" />
125<link rel="alternate" href="https://getbookjoy.com/en-nzd/cart" hreflang="en-NU" />
126<link rel="alternate" href="https://getbookjoy.com/en-nzd/cart" hreflang="en-NZ" />
127<link rel="alternate" href="https://getbookjoy.com/en-nzd/cart" hreflang="en-PN" />
128<link rel="alternate" href="https://getbookjoy.com/en-nzd/cart" hreflang="en-TK" />
129<link rel="alternate" href="https://getbookjoy.com/en-sek/cart" hreflang="en-SE" />
130<link rel="alternate" href="https://getbookjoy.com/en-nok/cart" hreflang="en-BV" />
131<link rel="alternate" href="https://getbookjoy.com/en-nok/cart" hreflang="en-NO" />
132<link rel="alternate" href="https://getbookjoy.com/en-nok/cart" hreflang="en-SJ" />
133<link rel="alternate" href="https://getbookjoy.com/en-dkk/cart" hreflang="en-DK" />
134<link rel="alternate" href="https://getbookjoy.com/en-dkk/cart" hreflang="en-FO" />
135<link rel="alternate" href="https://getbookjoy.com/en-dkk/cart" hreflang="en-GL" />
136<link rel="alternate" href="https://getbookjoy.com/en-pln/cart" hreflang="en-PL" />
137<link rel="alternate" href="https://getbookjoy.com/en-inr/cart" hreflang="en-IN" />
138<link rel="alternate" href="https://getbookjoy.com/en-jpy/cart" hreflang="en-JP" />
139<link rel="alternate" href="https://getbookjoy.com/en-myr/cart" hreflang="en-MY" />
140<link rel="alternate" href="https://getbookjoy.com/en-sgd/cart" hreflang="en-SG" />
141<link rel="alternate" href="https://getbookjoy.com/en-mxn/cart" hreflang="en-MX" />
142<link rel="alternate" href="https://getbookjoy.com/en-brl/cart" hreflang="en-BR" />
143<link rel="alternate" href="https://getbookjoy.com/en-chf/cart" hreflang="en-CH" />
144<link rel="alternate" href="https://getbookjoy.com/en-chf/cart" hreflang="en-LI" />
vendor: 68 bytes, lines 144-145
144
145<script src="https://www.google.com/recaptcha/enterprise.js?render=
1456LcUIoYlAAAAALE9OrjdIcUfeYTpTq5RlXh5HuZt
vendor: 18 bytes, line 145
145" async></script>
146<script>window.recaptchaSiteKey = '6LcUIoYlAAAAALE9OrjdIcUfeYTpTq5RlXh5HuZt';</script>
146
147<style>
148  .grecaptcha-badge { display: none !important; }
149</style>
150<script type='module' src="https://cdn.fourthwall.dev/web-perf/instant.js" defer></script>
vendor: 1 bytes, line 150
150
151<script>
152  window.shopName = 'Book Joy';
153  window.shopId = 'sh_7bdf7433-13c1-4f38-9f2f-b209f97d858b';
154  window.cookie_policy = 'ShowInEu';
155</script>
155
156<!-- Google Tag Manager -->
157<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
158new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
159j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
160'/_c/mtg.js?id='+i+dl;f.parentNode.insertBefore(j,f);
161})(window,document,'script','dataLayer','GTM-PV2BBNN');</script>
161
162<!-- End Google Tag Manager -->
163<script>window.creatorGa4Id = 'G-T0D63N5BQD'; window.creatorFbPixelId = '2348991808869230'; window.creatorTiktokAnalyticsId = ''; window.creatorKlaviyoAnalyticsId = ''; window.useServerAnalytics = false;</script>
vendor: 1 bytes, line 163
163
164<script>
165  (function () {
166    function setCookie(name, value, days) {
167      if (typeof days === 'undefined') days = 90;
168      var expires = new Date(Date.now() + days * 86400000).toUTCString();
169      document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value.substring(0, 200)) + '; expires=' + expires + '; path=/';
170    }
171  
172    function getCookie(name) {
173      var cookies = document.cookie.split('; ');
174      for (var i = 0; i < cookies.length; i++) {
175        if (cookies[i].indexOf(name + '=') === 0) {
176          return cookies[i].split('=')[1];
177        }
178      }
179      return null;
180    }
181  
182    function handleTrackingParams() {
183      var params = window.location.search.substring(1).split('&');
184      var paramMap = {};
185  
186      for (var i = 0; i < params.length; i++) {
187        var kv = params[i].split('=');
188        if (kv.length === 2) {
189          paramMap[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);
190        }
191      }
192  
193      if (!getCookie('_fbp')) {
194        var randomPart = Math.floor(Math.random() * 10000000000);
195        var fbp = 'fb.1.' + Date.now() + '.' + randomPart;
196        setCookie('_fbp', fbp);
197      }
198  
199      for (var key in paramMap) {
200        if (paramMap.hasOwnProperty(key)) {
201          var value = paramMap[key];
202          var isUTM = key.indexOf('utm_') === 0;
203          
204          if(key === 'utm_source' && getCookie('utm_source') === 'fourthwall_ads') {
205            continue;
206          }
207  
208          if (isUTM || key === 'gclid' || key === 'fbclid') {
209            setCookie(key, value);
210          }
211  
212          if (key === 'fbclid' && !getCookie('_fbc')) {
213            var fbc = 'fb.1.' + Date.now() + '.' + value;
214            setCookie('_fbc', fbc);
215          }
216        }
217      }
218    }
219  
220    handleTrackingParams();
221  })();
222</script>
vendor: 1 bytes, line 222
222
223<script type='text/javascript'>var eventsListenerScript = document.createElement('script');eventsListenerScript.async = true;eventsListenerScript.src = "https://cdn.fourthwall.dev/shop-event-listener/shop-events-listener.js";document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);</script>
223
224<meta name='theme-color' content='#FFFFFF' />
225<link rel="stylesheet" type="text/css" href="https://themes.fourthwall.dev/themes/assets/07e469e3-deeb-4bb2-aa13-dda2c47799c0/assets/styles/custom_sections.css?v=3e45a2957cdee8c0deca1fc06537109938072bc69135fa42c78e0e1b61cabc01" media="all">
226 
227<script>
228  (function() {
229    window.addEventListener('cart:updated', function(event) {
230      var cart = event.detail;
231      if (!cart || !cart.items || !cart.items.length) return;
232      var currency = 'USD';
233      var isZeroDecimal = currency === 'JPY';
234      var items = cart.items.map(function(item) {
235        var price = isZeroDecimal ? item.price : item.price / 100;
236        return {
237          item_id: item.id || item.offer_id,
238          item_name: item.title || item.name,
239          item_brand: `Book Joy`,
240          price: price,
241          quantity: item.quantity || 1
242        };
243      });
244      var value = isZeroDecimal ? cart.total_price : cart.total_price / 100;
245      dataLayer.push({ ecommerce: null });
246      dataLayer.push({
247        event: "view_cart",
248        ecommerce: {
249          currency: currency,
250          value: value,
251          items: items
252        },
253        shopId: 'sh_7bdf7433-13c1-4f38-9f2f-b209f97d858b'
254      });
255    }, { once: true });
256  })();
257</script>
vendor: 1 bytes, line 257
257
258<script type="text/javascript">
259    var currentCart = {"id":null,"item_count":0,"unique_item_count":0,"items":[]};
260</script>
vendor: 1 bytes, line 260
260
261<script type="module">
262  function iframeReady(section, iframe, url, appId, settings) {
263    const baseIframeUrl = url;
264  
265    function buildUrl(url, params) {
266      if (!params) return url;
267      var qs = Object.keys(params)
268        .map((k) => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
269        .join('&');
270      return url + (url.includes('?') ? '&' : '?') + qs + '&' + settings;
271    }
272  
273    const params = {
274      hmac: window.appHmac[appId],
275      timestamp: window.hmacTimestamp,
276      tier_id: window.tierId,
277      supporter_id: window.supporterId,
278      shop_id: window.shopId,
279    };
280  
281    iframe.src = buildUrl(baseIframeUrl, window.appHmac[appId] ? params : null);
282    iframe.onload = null
283  
284    // Extract origin from URL for security checking
285    let expectedOrigin;
286    try {
287      expectedOrigin = new URL(url).origin;
288    } catch (e) {
289      console.warn('Could not parse URL origin:', url);
290    }
291  
292    // Listen for messages specifically from this iframe
293    const messageHandler = (event) => {
294      // Check if the message is from this specific iframe
295      if (event.source !== iframe.contentWindow) {
296        return; // Ignore messages from other iframes/windows
297      }
298  
299      // Optional: Also verify the origin for security
300      if (expectedOrigin && event.origin !== expectedOrigin) {
301        console.warn('Message received from unexpected origin:', event.origin);
302        return;
303      }
304      
305      if (event.data.type === 'RESIZE') {
306        iframe.style.height = event.data.data.height + 'px';
307      } else if (event.data.type === 'CLOSE') {
308        section.style.height = '0px';
309      }
310    };
311  
312    window.addEventListener('message', messageHandler);
313    
314    // Store the handler for cleanup (optional)
315    iframe._messageHandler = messageHandler;
316  }
317  
318  class Hmac extends HTMLElement {
319    constructor() {
320      super()
321      this.section = this.parentElement.parentElement;
322      this.iframe = this.querySelector('iframe')
323      this.url = this.getAttribute('url')
324      this.appId = this.getAttribute('app_id')
325      this.settings = this.getAttribute('settings')
326    }
327  
328    connectedCallback() {
329      if (this.iframe && this.iframe.contentDocument && this.iframe.contentDocument.readyState === 'complete') {
330        iframeReady(this.section, this.iframe, this.url, this.appId, this.settings)
331      } else {
332        this.iframe.onload = () => iframeReady(this.section, this.iframe, this.url, this.appId, this.settings)
333      }
334    }
335  
336    disconnectedCallback() {
337      if (this.iframe && this.iframe._messageHandler) {
338        window.removeEventListener('message', this.iframe._messageHandler);
339        delete this.iframe._messageHandler;
340      }
341    }
342  }
343  
344  customElements.define('app-hmac-component', Hmac)
345</script>
345
346
347  </head>
348
349  
350  
351
352  
353
354  <body class="body cart "  >
355 <!-- Google Tag Manager (noscript) -->
356<noscript><iframe src='/_c/ns.html?id=GTM-PV2BBNN'
357height='0' width='0' style='display:none;visibility:hidden'></iframe></noscript>
358<!-- End Google Tag Manager (noscript) -->
359
360    <a href="#main-content" class="skip-link">Skip to content</a>
361
362    <div class="page">
363      <div>
364        <div id="fw-section-header" class="fw-section">
365
366
367
368
369<sticky-header>
370<header
371  data-testid='main.single.section'
372  class='header'
373>
374  <div class='wrapper'>
375    <div class='header__grid header__grid--search header--middle-center header__size--md'>
376      <div class='header__mobile-menu hidden@sm'>
377        <button data-drawer-trigger-primary='mobile-menu' class='header__icon' aria-label='Open menu'>
378          <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
379  <path fill-rule="evenodd" clip-rule="evenodd" d="M16 3.75H0V2.25H16V3.75ZM16 8.75H0V7.25H16V8.75ZM16 13.75H0V12.25H16V13.75Z" fill="currentColor"/>
380</svg>
381
382        </button>
383      </div>
384
385      
386
387      <div class='header__logo-container'><div class='header__logo'>
388          <a href='/' class='header__logo-link'>
389            
390            
391  
392
393  <img
394    src="https://imgproxy.fourthwall.dev/_h3SOV5TC5a9UduB6psFQBItDx42RGVrutNbKsuxfko/w:320/sm:1/enc/CDm117XjTYwSYZmk/eZwkKex-VPkCzBN7/MdqPH-iNUi6D_8JX/yoSrOubBEXUPAxGJ/6NSPa-Pzkcl1zMNK/pqh4cVxqQXvpb4yT/xnno7ifOoa2iVQPS/AI641SIFw1jkApCk/giLihuYOpIMrZ28_/pZhWaUGziRa9vNdD/Q6HThBv3YOEkYxJq/gB3J-wqNTXXCQm4Y/C1DvgU2MFvHXYgix/M8dR9TajvY-8Q1Yz/rZN8Hb8rwGXYtibq/6zf2TgT_n04AVJUc.webp"
395    srcset="https://imgproxy.fourthwall.dev/_h3SOV5TC5a9UduB6psFQBItDx42RGVrutNbKsuxfko/w:320/sm:1/enc/CDm117XjTYwSYZmk/eZwkKex-VPkCzBN7/MdqPH-iNUi6D_8JX/yoSrOubBEXUPAxGJ/6NSPa-Pzkcl1zMNK/pqh4cVxqQXvpb4yT/xnno7ifOoa2iVQPS/AI641SIFw1jkApCk/giLihuYOpIMrZ28_/pZhWaUGziRa9vNdD/Q6HThBv3YOEkYxJq/gB3J-wqNTXXCQm4Y/C1DvgU2MFvHXYgix/M8dR9TajvY-8Q1Yz/rZN8Hb8rwGXYtibq/6zf2TgT_n04AVJUc.webp 1x, https://imgproxy.fourthwall.dev/LCMYsaDVmVGTn5wsCoZGkQ3prw3hLKmyYv0ZpB5nJ2o/w:320/dpr:2/sm:1/enc/CDm117XjTYwSYZmk/eZwkKex-VPkCzBN7/MdqPH-iNUi6D_8JX/yoSrOubBEXUPAxGJ/6NSPa-Pzkcl1zMNK/pqh4cVxqQXvpb4yT/xnno7ifOoa2iVQPS/AI641SIFw1jkApCk/giLihuYOpIMrZ28_/pZhWaUGziRa9vNdD/Q6HThBv3YOEkYxJq/gB3J-wqNTXXCQm4Y/C1DvgU2MFvHXYgix/M8dR9TajvY-8Q1Yz/rZN8Hb8rwGXYtibq/6zf2TgT_n04AVJUc.webp 2x"
396    alt="Book Joy"
397    class="header__logo-image header__logo-image--md"
398    itemprop="logo"
399  >
400
401
402          </a>
403        </div>
404      </div>
405
406      
407        <div class='header__nav-container visible@sm'>
408          <nav class='header__nav' aria-label='Primary'>
409            <ul class='header__list list--horizontal'>
410              
411  <li class="header__list-item">
412    <a
413      href="/"
414      class="header__link"
415      
416    >
417      Home
418
419      
420    </a>
421
422    
423  </li>
424
425  <li class="header__list-item">
426    <a
427      href="/collections/all-products"
428      class="header__link header__link--icon"
429      
430    >
431      Shop
432
433      
434        <span class="header__link-icon">
435          <svg class="svg-fill-current-color" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
436  <path d="M0 7.33l2.829-2.83 9.175 9.339 9.167-9.339 2.829 2.83-11.996 12.17z" vector-effect="non-scaling-stroke"/>
437</svg>
438
439        </span>
440      
441    </a>
442
443    
444      <div class="header__dropdown">
445        <ul class="header__dropdown-inner">
446          
447            <li class="header__dropdown-item">
448              <a class="header__dropdown-link" href="/pages/collections" >
449                Shop by collection
450              </a>
451            </li>
452          
453            <li class="header__dropdown-item">
454              <a class="header__dropdown-link" href="/collections/apparel" >
455                Apparel
456              </a>
457            </li>
458          
459            <li class="header__dropdown-item">
460              <a class="header__dropdown-link" href="/collections/stickers" >
461                Stickers
462              </a>
463            </li>
464          
465            <li class="header__dropdown-item">
466              <a class="header__dropdown-link" href="/collections/home-office" >
467                Home &amp; Office
468              </a>
469            </li>
470          
471            <li class="header__dropdown-item">
472              <a class="header__dropdown-link" href="/collections/all-products" >
473                Shop all
474              </a>
475            </li>
476          
477        </ul>
478      </div>
479    
480  </li>
481
482  <li class="header__list-item">
483    <a
484      href="/pages/partners"
485      class="header__link"
486      
487    >
488      Partners
489
490      
491    </a>
492
493    
494  </li>
495
496  <li class="header__list-item">
497    <a
498      href="/pages/about"
499      class="header__link"
500      
501    >
502      About
503
504      
505    </a>
506
507    
508  </li>
509
510            </ul>
511          </nav>
512        </div>
513      
514
515      <div class='header__icons'>
516        <ul class='header__list list list--horizontal'>
517          
518
519          
520
521
522          
523            <li class='header__list-item visible@sm'>
524              <a class='header__link header__link--icon' tabindex='0' role='button' aria-label='Currency selector, current: USD'>
525                USD
526
527                
528                  <span class='header__link-icon'>
529                    <svg class="svg-fill-current-color" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
530  <path d="M0 7.33l2.829-2.83 9.175 9.339 9.167-9.339 2.829 2.83-11.996 12.17z" vector-effect="non-scaling-stroke"/>
531</svg>
532
533                  </span>
534                
535              </a>
536
537              
538                <div class='header__dropdown header__dropdown--content'>
539                  <ul class='header__dropdown-inner'>
540                    
541                      <li class='header__dropdown-item'>
542                        <a
543                          class='header__dropdown-link'
544                          href='/localization?currency=USD&return_to=/cart'
545                        >
546                          USD
547                        </a>
548                      </li>
549                    
550                      <li class='header__dropdown-item'>
551                        <a
552                          class='header__dropdown-link'
553                          href='/localization?currency=EUR&return_to=/cart'
554                        >
555                          EUR
556                        </a>
557                      </li>
558                    
559                      <li class='header__dropdown-item'>
560                        <a
561                          class='header__dropdown-link'
562                          href='/localization?currency=CAD&return_to=/cart'
563                        >
564                          CAD
565                        </a>
566                      </li>
567                    
568                      <li class='header__dropdown-item'>
569                        <a
570                          class='header__dropdown-link'
571                          href='/localization?currency=GBP&return_to=/cart'
572                        >
573                          GBP
574                        </a>
575                      </li>
576                    
577                      <li class='header__dropdown-item'>
578                        <a
579                          class='header__dropdown-link'
580                          href='/localization?currency=AUD&return_to=/cart'
581                        >
582                          AUD
583                        </a>
584                      </li>
585                    
586                      <li class='header__dropdown-item'>
587                        <a
588                          class='header__dropdown-link'
589                          href='/localization?currency=NZD&return_to=/cart'
590                        >
591                          NZD
592                        </a>
593                      </li>
594                    
595                      <li class='header__dropdown-item'>
596                        <a
597                          class='header__dropdown-link'
598                          href='/localization?currency=SEK&return_to=/cart'
599                        >
600                          SEK
601                        </a>
602                      </li>
603                    
604                      <li class='header__dropdown-item'>
605                        <a
606                          class='header__dropdown-link'
607                          href='/localization?currency=NOK&return_to=/cart'
608                        >
609                          NOK
610                        </a>
611                      </li>
612                    
613                      <li class='header__dropdown-item'>
614                        <a
615                          class='header__dropdown-link'
616                          href='/localization?currency=DKK&return_to=/cart'
617                        >
618                          DKK
619                        </a>
620                      </li>
621                    
622                      <li class='header__dropdown-item'>
623                        <a
624                          class='header__dropdown-link'
625                          href='/localization?currency=PLN&return_to=/cart'
626                        >
627                          PLN
628                        </a>
629                      </li>
630                    
631                      <li class='header__dropdown-item'>
632                        <a
633                          class='header__dropdown-link'
634                          href='/localization?currency=INR&return_to=/cart'
635                        >
636                          INR
637                        </a>
638                      </li>
639                    
640                      <li class='header__dropdown-item'>
641                        <a
642                          class='header__dropdown-link'
643                          href='/localization?currency=JPY&return_to=/cart'
644                        >
645                          JPY
646                        </a>
647                      </li>
648                    
649                      <li class='header__dropdown-item'>
650                        <a
651                          class='header__dropdown-link'
652                          href='/localization?currency=MYR&return_to=/cart'
653                        >
654                          MYR
655                        </a>
656                      </li>
657                    
658                      <li class='header__dropdown-item'>
659                        <a
660                          class='header__dropdown-link'
661                          href='/localization?currency=SGD&return_to=/cart'
662                        >
663                          SGD
664                        </a>
665                      </li>
666                    
667                      <li class='header__dropdown-item'>
668                        <a
669                          class='header__dropdown-link'
670                          href='/localization?currency=MXN&return_to=/cart'
671                        >
672                          MXN
673                        </a>
674                      </li>
675                    
676                      <li class='header__dropdown-item'>
677                        <a
678                          class='header__dropdown-link'
679                          href='/localization?currency=BRL&return_to=/cart'
680                        >
681                          BRL
682                        </a>
683                      </li>
684                    
685                      <li class='header__dropdown-item'>
686                        <a
687                          class='header__dropdown-link'
688                          href='/localization?currency=CHF&return_to=/cart'
689                        >
690                          CHF
691                        </a>
692                      </li>
693                    
694                  </ul>
695                </div>
696              
697            </li>
698          
699
700          
701            <li class='header__list-item'>
702              <button class='header__icon' aria-label='Search' type='button' data-search-toggle>
703                <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
704<path fill-rule="evenodd" clip-rule="evenodd" d="M0 6.37079C0 2.8523 2.8523 0 6.37079 0C9.88927 0 12.7416 2.8523 12.7416 6.37079C12.7416 7.85977 12.2308 9.22945 11.3748 10.3141L15.7803 14.7197L14.7197 15.7803L10.3141 11.3748C9.22945 12.2308 7.85977 12.7416 6.37079 12.7416C2.8523 12.7416 0 9.88927 0 6.37079ZM6.37079 1.5C3.68073 1.5 1.5 3.68073 1.5 6.37079C1.5 9.06085 3.68073 11.2416 6.37079 11.2416C9.06085 11.2416 11.2416 9.06085 11.2416 6.37079C11.2416 3.68073 9.06085 1.5 6.37079 1.5Z" fill="currentColor"/>
705</svg>
706
707              </button>
708            </li>
709          
710
711          
712
713          <li class='header__list-item'>
714            <a
715              href='/cart'
716              class='header__icon'
717              aria-label='Cart'
718            >
719              <div 
720  data-cart-widget="widget"
721  data-testid="cart.icon"
722  class="cart-widget cart-widget--icons empty"
723>
724  
725    <span data-cart-widget="quantity" class="cart-widget__items"></span>
726    <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
727  <path fill-rule="evenodd" clip-rule="evenodd" d="M7.99999 1.5C7.40211 1.5 6.83677 1.72464 6.4264 2.11207C6.0175 2.49812 5.79646 3.0122 5.79646 3.53846V4.46154H10.2035V3.53846C10.2035 3.0122 9.98249 2.49812 9.57359 2.11207C9.16322 1.72464 8.59788 1.5 7.99999 1.5ZM11.7035 4.46154V3.53846C11.7035 2.58564 11.3022 1.68119 10.6033 1.02137C9.90591 0.362928 8.96875 0 7.99999 0C7.03123 0 6.09408 0.362928 5.39666 1.02137C4.69777 1.68119 4.29646 2.58564 4.29646 3.53846V4.46154H2.96808C2.09126 4.46154 1.34979 5.11042 1.23353 5.97949L0.15814 14.018C0.0177587 15.0673 0.833995 16 1.89269 16H14.1073C15.166 16 15.9822 15.0673 15.8419 14.018L14.7665 5.97949C14.6502 5.11042 13.9087 4.46154 13.0319 4.46154H11.7035ZM2.96808 5.96154C2.84282 5.96154 2.73689 6.05424 2.72028 6.17839L1.64489 14.2169C1.62484 14.3668 1.74145 14.5 1.89269 14.5H14.1073C14.2586 14.5 14.3752 14.3668 14.3551 14.2169L13.2797 6.17839C13.2631 6.05424 13.1572 5.96154 13.0319 5.96154H2.96808Z" fill="currentColor"/>
728</svg>
729
730  
731</div>
732            </a>
733          </li>
734        </ul>
735
736        <div data-cart-announcer aria-live="polite" aria-atomic="true" class="visually-hidden"></div>
737
738      </div>
739    </div>
740    
741      <search-header>
742        <div class='search-header'>
743  <div class='search-header__inner'>
744    <form class='search-header__form' action='/search' method='get'>
745      <button type='submit' class='search-header__button' aria-label='Search'>
746        <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
747<path fill-rule="evenodd" clip-rule="evenodd" d="M0 6.37079C0 2.8523 2.8523 0 6.37079 0C9.88927 0 12.7416 2.8523 12.7416 6.37079C12.7416 7.85977 12.2308 9.22945 11.3748 10.3141L15.7803 14.7197L14.7197 15.7803L10.3141 11.3748C9.22945 12.2308 7.85977 12.7416 6.37079 12.7416C2.8523 12.7416 0 9.88927 0 6.37079ZM6.37079 1.5C3.68073 1.5 1.5 3.68073 1.5 6.37079C1.5 9.06085 3.68073 11.2416 6.37079 11.2416C9.06085 11.2416 11.2416 9.06085 11.2416 6.37079C11.2416 3.68073 9.06085 1.5 6.37079 1.5Z" fill="currentColor"/>
748</svg>
749
750      </button>
751      <input
752        type='search'
753        name='q'
754        class='search-header__input'
755        placeholder='Search'
756        aria-label='Search'
757        autocomplete='off'
758      >
759      <button class='search-header__button' type='button' aria-label='Close search'>
760        <svg class="svg-fill-current-color" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
761  <path d="M1.25 18.75L18.75 1.25M18.75 18.75L1.25 1.25" vector-effect="non-scaling-stroke" stroke="currentColor" stroke-width="1.5" stroke-linejoin="bevel"/>
762</svg>
763
764      </button>
765    </form>
766  </div>
767</div>
768
769      </search-header>
770    
771  </div>
772</header>
773</sticky-header>
774
775<aside 
776  data-drawer="mobile-menu" 
777  class="drawer hidden@sm"
778>
779  <div class="drawer__background" data-drawer-trigger-primary="mobile-menu"></div>
780  <div class="drawer__content drawer__content--small mobile-menu">
781    <div class="mobile-menu__section mobile-menu__section--header">
782      <button type="button" class="mobile-menu__close" data-drawer-trigger-primary="mobile-menu" aria-label="Close menu">
783        <svg class="svg-fill-current-color" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
784  <path d="M1.25 18.75L18.75 1.25M18.75 18.75L1.25 1.25" vector-effect="non-scaling-stroke" stroke="currentColor" stroke-width="1.5" stroke-linejoin="bevel"/>
785</svg>
786
787      </button>
788    </div>
789    <div class="mobile-menu__section mobile-menu__section--body">
790      <div class="mobile-menu__nav">
791        <ul class="mobile-menu__list">
792          
793            <li class="mobile-menu__list-item">
794              
795                <a
796                  href="/"
797                  class="mobile-menu__link"
798                >
799                  Home
800                </a>
801              
802
803              
804            </li>
805          
806            <li class="mobile-menu__list-item">
807              
808                <label for="input-drawer-1" class="mobile-menu__link">
809                  Shop
810
811                  <div class="mobile-menu__link-icon">
812                    <svg class="svg-fill-current-color" width="17" height="18" viewBox="0 0 17 18" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
813  <path d="M7 1.5L15 9L7 16.5" stroke="currentColor" vector-effect="non-scaling-stroke" fill="none" stroke-width="1.5"/>
814</svg>
815
816                  </div>
817                </label>
818              
819
820              
821                <input type="checkbox" id="input-drawer-1" class="drawer__checkbox hidden" data-drawer-trigger-secondary>
822                <div class="drawer__content drawer__content--small">
823                  <div class="mobile-menu__section mobile-menu__section--header">
824                    <label href="#" class="mobile-menu__close" for="input-drawer-1">
825                      <svg class="svg-fill-current-color" width="17" height="18" viewBox="0 0 17 18" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
826  <path d="M10 16.5L2 9L10 1.5" fill="none" vector-effect="non-scaling-stroke" stroke="currentColor" stroke-width="1.5"/>
827</svg>
828
829                    </label>
830                    <div class="mobile-menu__label">
831                      Shop
832                    </div>
833                    <div class="mobile-menu__right"></div>
834                  </div>
835                  <div class="mobile-menu__section mobile-menu__section--body">
836                    <div class="mobile-menu__nav">
837                      <ul class="mobile-menu__list">
838                        
839                          <li class="mobile-menu__list-item">
840                            <a class="mobile-menu__link" href="/pages/collections">
841                              Shop by collection
842                            </a>
843                          </li>
844                        
845                          <li class="mobile-menu__list-item">
846                            <a class="mobile-menu__link" href="/collections/apparel">
847                              Apparel
848                            </a>
849                          </li>
850                        
851                          <li class="mobile-menu__list-item">
852                            <a class="mobile-menu__link" href="/collections/stickers">
853                              Stickers
854                            </a>
855                          </li>
856                        
857                          <li class="mobile-menu__list-item">
858                            <a class="mobile-menu__link" href="/collections/home-office">
859                              Home &amp; Office
860                            </a>
861                          </li>
862                        
863                          <li class="mobile-menu__list-item">
864                            <a class="mobile-menu__link" href="/collections/all-products">
865                              Shop all
866                            </a>
867                          </li>
868                        
869                      </ul>
870                    </div>
871                  </div>
872                </div>
873              
874            </li>
875          
876            <li class="mobile-menu__list-item">
877              
878                <a
879                  href="/pages/partners"
880                  class="mobile-menu__link"
881                >
882                  Partners
883                </a>
884              
885
886              
887            </li>
888          
889            <li class="mobile-menu__list-item">
890              
891                <a
892                  href="/pages/about"
893                  class="mobile-menu__link"
894                >
895                  About
896                </a>
897              
898
899              
900            </li>
901          
902
903          
904            <li class="mobile-menu__list-item">
905              <a for="input-drawer" class="mobile-menu__link" data-accordion="trigger" role="button" tabindex="0">
906                USD
907
908                
909                  <div class="mobile-menu__link-icon">
910                    <svg class="svg-fill-current-color" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
911  <path d="M0 7.33l2.829-2.83 9.175 9.339 9.167-9.339 2.829 2.83-11.996 12.17z" vector-effect="non-scaling-stroke"/>
912</svg>
913
914                  </div>
915                
916              </a>
917
918              
919                <div class="mobile-menu__dropdown mobile-menu__dropdown--content">
920                  <ul class="mobile-menu__dropdown-inner">
921                    
922                      <li class="mobile-menu__dropdown-item">
923                        <a class="mobile-menu__dropdown-link" href="/localization?currency=USD&return_to=/cart">
924                          USD
925                        </a>
926                      </li>
927                    
928                      <li class="mobile-menu__dropdown-item">
929                        <a class="mobile-menu__dropdown-link" href="/localization?currency=EUR&return_to=/cart">
930                          EUR
931                        </a>
932                      </li>
933                    
934                      <li class="mobile-menu__dropdown-item">
935                        <a class="mobile-menu__dropdown-link" href="/localization?currency=CAD&return_to=/cart">
936                          CAD
937                        </a>
938                      </li>
939                    
940                      <li class="mobile-menu__dropdown-item">
941                        <a class="mobile-menu__dropdown-link" href="/localization?currency=GBP&return_to=/cart">
942                          GBP
943                        </a>
944                      </li>
945                    
946                      <li class="mobile-menu__dropdown-item">
947                        <a class="mobile-menu__dropdown-link" href="/localization?currency=AUD&return_to=/cart">
948                          AUD
949                        </a>
950                      </li>
951                    
952                      <li class="mobile-menu__dropdown-item">
953                        <a class="mobile-menu__dropdown-link" href="/localization?currency=NZD&return_to=/cart">
954                          NZD
955                        </a>
956                      </li>
957                    
958                      <li class="mobile-menu__dropdown-item">
959                        <a class="mobile-menu__dropdown-link" href="/localization?currency=SEK&return_to=/cart">
960                          SEK
961                        </a>
962                      </li>
963                    
964                      <li class="mobile-menu__dropdown-item">
965                        <a class="mobile-menu__dropdown-link" href="/localization?currency=NOK&return_to=/cart">
966                          NOK
967                        </a>
968                      </li>
969                    
970                      <li class="mobile-menu__dropdown-item">
971                        <a class="mobile-menu__dropdown-link" href="/localization?currency=DKK&return_to=/cart">
972                          DKK
973                        </a>
974                      </li>
975                    
976                      <li class="mobile-menu__dropdown-item">
977                        <a class="mobile-menu__dropdown-link" href="/localization?currency=PLN&return_to=/cart">
978                          PLN
979                        </a>
980                      </li>
981                    
982                      <li class="mobile-menu__dropdown-item">
983                        <a class="mobile-menu__dropdown-link" href="/localization?currency=INR&return_to=/cart">
984                          INR
985                        </a>
986                      </li>
987                    
988                      <li class="mobile-menu__dropdown-item">
989                        <a class="mobile-menu__dropdown-link" href="/localization?currency=JPY&return_to=/cart">
990                          JPY
991                        </a>
992                      </li>
993                    
994                      <li class="mobile-menu__dropdown-item">
995                        <a class="mobile-menu__dropdown-link" href="/localization?currency=MYR&return_to=/cart">
996                          MYR
997                        </a>
998                      </li>
999                    
1000                      <li class="mobile-menu__dropdown-item">
1001                        <a class="mobile-menu__dropdown-link" href="/localization?currency=SGD&return_to=/cart">
1002                          SGD
1003                        </a>
1004                      </li>
1005                    
1006                      <li class="mobile-menu__dropdown-item">
1007                        <a class="mobile-menu__dropdown-link" href="/localization?currency=MXN&return_to=/cart">
1008                          MXN
1009                        </a>
1010                      </li>
1011                    
1012                      <li class="mobile-menu__dropdown-item">
1013                        <a class="mobile-menu__dropdown-link" href="/localization?currency=BRL&return_to=/cart">
1014                          BRL
1015                        </a>
1016                      </li>
1017                    
1018                      <li class="mobile-menu__dropdown-item">
1019                        <a class="mobile-menu__dropdown-link" href="/localization?currency=CHF&return_to=/cart">
1020                          CHF
1021                        </a>
1022                      </li>
1023                    
1024                  </ul>
1025                </div>
1026              
1027            </li>
1028          
1029        </ul>
1030      </div>
1031    </div>
1032    <div class="mobile-menu__section mobile-menu__section--socials">
1033      <div class="mobile-menu__list-social">
1034        <ul class="mobile-menu__socials">
1035          
1036
1037
1038
1039  
1040    <li class="mobile-menu__social">
1041      <a
1042        
1043          href="https://instagram.com/bookjoyreaders"
1044        
1045        target="_blank"
1046        class="mobile-menu__social-link"
1047        aria-label="Instagram (opens in a new tab)"
1048      >
1049        <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
1050<path fill-rule="evenodd" clip-rule="evenodd" d="M4.99525 0H15.0047C17.7635 0 20 2.23604 20 4.99525V15.0047C20 17.7635 17.764 20 15.0047 20H4.99525C2.23645 20 0 17.764 0 15.0047V4.99525C0 2.23645 2.23604 0 4.99525 0ZM2 15.0047C2 16.6592 3.34085 18 4.99525 18H15.0047C16.6592 18 18 16.6591 18 15.0047V4.99525C18 3.34078 16.6591 2 15.0047 2H4.99525C3.34078 2 2 3.34085 2 4.99525V15.0047ZM5 10C5 7.23858 7.23858 5 10 5C12.7614 5 15 7.23858 15 10C15 12.7614 12.7614 15 10 15C7.23858 15 5 12.7614 5 10ZM13 10C13 8.34315 11.6569 7 10 7C8.34315 7 7 8.34315 7 10C7 11.6569 8.34315 13 10 13C11.6569 13 13 11.6569 13 10ZM15 6C15.5523 6 16 5.55228 16 5C16 4.44772 15.5523 4 15 4C14.4477 4 14 4.44772 14 5C14 5.55228 14.4477 6 15 6Z" fill="currentColor"/>
1051</svg>
1052
1053        
1054      </a>
1055    </li>
1056  
1057
1058
1059        </ul>
1060      </div>
1061    </div>
1062  </div>
1063</aside>
1064
1065<script>
1066  const currencyData = {
1067    locale: 'en-US',
1068    currency: 'USD',
1069  }
1070</script>
1070
1071
1072
1073
1074</div>
1075      </div>
1076
1077      <main id="main-content" class="page__main">
1078        <div class="main main--cart">
1079  <div class="main__sections main__sections--space" data-testid="main.sections">
1080    <div id="fw-section-cart" class="fw-section">
1081<section class="cart-container" data-cart="cart" data-testid="main.single.section">
1082  <div class="container container--10 wrapper">
1083    <div id="cart-component" class="cart-container__cart-component"></div>
1084  </div>
1085</section>
1086</div>
1087
1088    <div id="fw-section-cart-product-recommendations" class="fw-section">
1089<section data-testid="main.single.section" class="cart-product-recommendations">
1090  <cart-product-recommendations />
1091</section>
1092
1093<template id="product-template">
1094  <div>
1095    <div data-testid="product" class="product-tile" data-id="fw-section-cart-product-recommendations">
1096      <a href="" class="tile">
1097        <div class="tile__image">
1098          <div class="image image--background-color">
1099            <div class="image__object">
1100              <img
1101                alt=""
1102                class="tile__item"
1103              >
1104            </div>
1105          </div>
1106        </div>
1107
1108        
1109          <div class="tile__description tile__description--center">
1110            <h3 class="tile__heading">
1111            </h3>
1112
1113
1114            <p class="tile__prices">
1115              <span class="tile__price tile__price--offer">
1116              </span>
1117
1118              <span class="tile__price tile__price--original">
1119              </span>
1120            </p>
1121          </div>
1122        
1123      </a>
1124    </div>
1125  </div>
1126</template>
1127</div>
1128  </div>
1129</div>
1130
1131      </main>
1132
1133      <div class="page__footer">
1134        <div id="fw-section-footer" class="fw-section"><style>
1135  .section-fw-section-footer-padding {
1136    padding-top: 0px;
1137    padding-bottom: 15px;
1138  }
1139
1140  @media screen and (min-width: 640px) {
1141    .section-fw-section-footer-padding {
1142      padding-top: 0px;
1143      padding-bottom: 20px;
1144    }
1145  }
1146</style>
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163<footer data-testid="main.single.section" class="footer footer--center section-fw-section-footer-padding">
1164  
1165  <div class="wrapper  container">
1166    <div class="footer__inner">
1167      
1168        <div class="footer__top">
1169          <div class="col-grid col-grid--middle">
1170            <div>
1171              
1172  <div class="footer__socials">
1173    <ul class="footer__list footer__list--socials">
1174      
1175
1176
1177
1178  
1179    <li class="footer__list-item footer__list-item--social">
1180      <a
1181        
1182          href="https://instagram.com/bookjoyreaders"
1183        
1184        target="_blank"
1185        class="footer__social-link"
1186        aria-label="Instagram (opens in a new tab)"
1187      >
1188        <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
1189<path fill-rule="evenodd" clip-rule="evenodd" d="M4.99525 0H15.0047C17.7635 0 20 2.23604 20 4.99525V15.0047C20 17.7635 17.764 20 15.0047 20H4.99525C2.23645 20 0 17.764 0 15.0047V4.99525C0 2.23645 2.23604 0 4.99525 0ZM2 15.0047C2 16.6592 3.34085 18 4.99525 18H15.0047C16.6592 18 18 16.6591 18 15.0047V4.99525C18 3.34078 16.6591 2 15.0047 2H4.99525C3.34078 2 2 3.34085 2 4.99525V15.0047ZM5 10C5 7.23858 7.23858 5 10 5C12.7614 5 15 7.23858 15 10C15 12.7614 12.7614 15 10 15C7.23858 15 5 12.7614 5 10ZM13 10C13 8.34315 11.6569 7 10 7C8.34315 7 7 8.34315 7 10C7 11.6569 8.34315 13 10 13C11.6569 13 13 11.6569 13 10ZM15 6C15.5523 6 16 5.55228 16 5C16 4.44772 15.5523 4 15 4C14.4477 4 14 4.44772 14 5C14 5.55228 14.4477 6 15 6Z" fill="currentColor"/>
1190</svg>
1191
1192        
1193      </a>
1194    </li>
1195  
1196
1197
1198    </ul>
1199  </div>
1200
1201            </div>
1202
1203            <div>
1204              <nav class="footer__nav" aria-label="Footer">
1205                <ul class="footer__list footer__list--menu">
1206                  
1207  
1208    <li class="footer__list-item">
1209      <a class="footer__menu-link footer__menu-link--icon" tabindex="0" role="button" aria-label="Currency selector, current: USD">
1210        USD
1211        
1212          <span class="footer__link-icon">
1213            <svg class="svg-fill-current-color" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
1214  <path d="M0 7.33l2.829-2.83 9.175 9.339 9.167-9.339 2.829 2.83-11.996 12.17z" vector-effect="non-scaling-stroke"/>
1215</svg>
1216
1217          </span>
1218        
1219      </a>
1220      
1221        <div class="footer__dropdown footer__dropdown--content">
1222          <ul class="footer__dropdown-inner">
1223            
1224              <li class="footer__dropdown-item">
1225                <a class="footer__dropdown-link" href="/localization?currency=USD&return_to=/cart">
1226                  USD
1227                </a>
1228              </li>
1229            
1230              <li class="footer__dropdown-item">
1231                <a class="footer__dropdown-link" href="/localization?currency=EUR&return_to=/cart">
1232                  EUR
1233                </a>
1234              </li>
1235            
1236              <li class="footer__dropdown-item">
1237                <a class="footer__dropdown-link" href="/localization?currency=CAD&return_to=/cart">
1238                  CAD
1239                </a>
1240              </li>
1241            
1242              <li class="footer__dropdown-item">
1243                <a class="footer__dropdown-link" href="/localization?currency=GBP&return_to=/cart">
1244                  GBP
1245                </a>
1246              </li>
1247            
1248              <li class="footer__dropdown-item">
1249                <a class="footer__dropdown-link" href="/localization?currency=AUD&return_to=/cart">
1250                  AUD
1251                </a>
1252              </li>
1253            
1254              <li class="footer__dropdown-item">
1255                <a class="footer__dropdown-link" href="/localization?currency=NZD&return_to=/cart">
1256                  NZD
1257                </a>
1258              </li>
1259            
1260              <li class="footer__dropdown-item">
1261                <a class="footer__dropdown-link" href="/localization?currency=SEK&return_to=/cart">
1262                  SEK
1263                </a>
1264              </li>
1265            
1266              <li class="footer__dropdown-item">
1267                <a class="footer__dropdown-link" href="/localization?currency=NOK&return_to=/cart">
1268                  NOK
1269                </a>
1270              </li>
1271            
1272              <li class="footer__dropdown-item">
1273                <a class="footer__dropdown-link" href="/localization?currency=DKK&return_to=/cart">
1274                  DKK
1275                </a>
1276              </li>
1277            
1278              <li class="footer__dropdown-item">
1279                <a class="footer__dropdown-link" href="/localization?currency=PLN&return_to=/cart">
1280                  PLN
1281                </a>
1282              </li>
1283            
1284              <li class="footer__dropdown-item">
1285                <a class="footer__dropdown-link" href="/localization?currency=INR&return_to=/cart">
1286                  INR
1287                </a>
1288              </li>
1289            
1290              <li class="footer__dropdown-item">
1291                <a class="footer__dropdown-link" href="/localization?currency=JPY&return_to=/cart">
1292                  JPY
1293                </a>
1294              </li>
1295            
1296              <li class="footer__dropdown-item">
1297                <a class="footer__dropdown-link" href="/localization?currency=MYR&return_to=/cart">
1298                  MYR
1299                </a>
1300              </li>
1301            
1302              <li class="footer__dropdown-item">
1303                <a class="footer__dropdown-link" href="/localization?currency=SGD&return_to=/cart">
1304                  SGD
1305                </a>
1306              </li>
1307            
1308              <li class="footer__dropdown-item">
1309                <a class="footer__dropdown-link" href="/localization?currency=MXN&return_to=/cart">
1310                  MXN
1311                </a>
1312              </li>
1313            
1314              <li class="footer__dropdown-item">
1315                <a class="footer__dropdown-link" href="/localization?currency=BRL&return_to=/cart">
1316                  BRL
1317                </a>
1318              </li>
1319            
1320              <li class="footer__dropdown-item">
1321                <a class="footer__dropdown-link" href="/localization?currency=CHF&return_to=/cart">
1322                  CHF
1323                </a>
1324              </li>
1325            
1326          </ul>
1327        </div>
1328      
1329    </li>
1330  
1331
1332                  
1333  
1334    <li class="footer__list-item">
1335      <a href="/contact" class="footer__menu-link" >Contact Support</a>
1336    </li>
1337  
1338    <li class="footer__list-item">
1339      <a href="/pages/terms-of-service" class="footer__menu-link" >Terms of Service</a>
1340    </li>
1341  
1342    <li class="footer__list-item">
1343      <a href="/pages/privacy-policy" class="footer__menu-link" >Privacy Policy</a>
1344    </li>
1345  
1346    <li class="footer__list-item">
1347      <a href="/pages/returns-faq" class="footer__menu-link" >Returns &amp; FAQ</a>
1348    </li>
1349  
1350    <li class="footer__list-item">
1351      <a href="/pages/about" class="footer__menu-link" >About</a>
1352    </li>
1353  
1354
1355                </ul>
1356              </nav>
1357            </div>
1358          </div>
1359        </div>
1360
1361        <div class="footer__bottom">
1362          <ul class="footer__list footer__list--bottom">
1363            <li class="footer__list-item">
1363<div class="footer__copy">&copy; 2026 Book Joy</div></li>
1364            
1365          </ul>
1366        </div>
1367      
1368    </div>
1369  </div>
1370</footer>
1371
1372
1373</div>
1374      </div>
1375    </div>
1376
1377    
1377<script>
1378  var fourthwallTheme = {
1379    strings: {
1380      addToCart: "Add to Cart",
1381      redeemGift: "Redeem Your Gift",
1382      viewCart: "View Cart",
1383      checkout: "Checkout",
1384      outOfStock: "Out of Stock",
1385      unavailable: "Not Available",
1386      soldOut: "Sold Out",
1387      soldOutSuffix: " - Sold Out",
1388      missingQuantityError: "Please choose the quantity.",
1389      generalError: "An error occurred. Please try refreshing the page.",
1390      item: "item",
1391      items: "items",
1392      startShopping: "Start Shopping",
1393      subtotal: "Subtotal",
1394      backToShopping: "Back to Shopping",
1395      cart: {
1396        heading: "[item_count] [item_count_label] in your cart for [total]",
1397        emptyHeading: "Your Shopping Cart is Empty",
1398        tableHeader: {
1399          item: "Item",
1400          quantity: "Quantity",
1401          price: "Price"
1402        },
1403        deleteModal: {
1404          heading: "Are you sure you want to remove [title] from your cart?",
1405          cancel: "Cancel",
1406          delete: "Delete"
1407        }
1408      },
1409      newsletter: {
1410        missingEmailError: 'Please enter your email.',
1411        invalidEmailError: 'Please enter a valid email.',
1412        subscribeSuccess: 'Thanks for subscribing!'
1413      },
1414      donation: {
1415        missingAmountError: 'Please select or enter the donation amount.',
1416        invalidAmountError: 'Please enter a valid donation amount.',
1417        missingNameError: 'Please enter your name.',
1418        missingMessageError: 'Please enter the message.'
1419      },
1420      checkoutErrors: {
1421        default: "There was an issue with your checkout. Please review your cart and try again.",
1422        CHECKOUT_CART_ITEMS_CHANGED: "Your cart has changed since you started checkout. Please review your items and try again.",
1423        CHECKOUT_STOCK_NOT_ENOUGH_QUANTITY: "Some items in your cart are no longer available in the requested quantity. Please update your cart and try again."
1424      }
1425    },
1426    urls: {
1427      cart: "/cart",
1428      cartItemLocalizedPrefix: "",
1429      cartAddUrl: "/cart/add",
1430      cartChangeUrl: "/cart/change",
1431      productsUrlPrefix: "/products",
1432      allProductsCollection: "/collections/all",
1433    }
1434  };
1435</script>
1435
1436
1437
1438    
1438<script src="https://themes.fourthwall.dev/themes-library/assets/c97a08c2-fa31-4bff-93d5-c7aad9121754/assets/theme.js?v=0f65449d1e112719f88bf7fc40bdfe6de3f7838a6b512445ac45a069382e2fe4" rel="preload" integrity="sha256-D2VEnR4RJxn4i/f8QL3+beP3g4prUSRFrEWgaTguL+Q=" crossorigin="anonymous"></script>
1438
1439    
1440    
1441<div id="cookie-consent-banner-container" data-turbo-permanent="true"></div>
1442
1443
1444  <div class="admin-bar-container hidden">
1445  <div id="admin-bar" class="admin-bar sticky hidden">
1446    <div class="wrapper">
1447      <div>
1448        <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
1449          <path fill="#FDFCFB" d="m11.947 6-.682 3.151H9.983c-1.61 0-1.964.081-2.237 1.195l-.136.733h3.246l-.683 3.178H6.928L4.5 25.692H0l2.428-11.435H.409l.682-3.178h1.991l.219-.923C4.01 6.706 5.7 6 9.628 6h2.319Zm3.525 5.08 1.936 9.913 1.718-9.914h4.637l1.69 9.914 1.938-9.914H32l-3.382 14.613h-5.21L21.446 14.91 19.48 25.692h-5.237L10.862 11.08h4.61Z"/>
1450        </svg>
1451      </div>
1452      <div class="actions">
1453        <div class='desktop'>
1454          <div class="dropdown">
1455            <button class="dropdown-button desktop-switcher pill" data-target="desktop-switcher">View as: </button>
1456            <div class="dropdown-content" id="desktop-switcher">
1457              <ul>
1458                <li class="dropdown-item" data-mode="creator">Admin</li>
1459                <li class="dropdown-item" data-mode="supporter">Supporter</li>
1460              </ul>
1461            </div>
1462          </div>
1463          
1464          <a href="/admin/dashboard" rel="noopener noreferrer" class="pill dashboard-link">Go to dashboard</a>
1465        </div>
1466
1467        <div class='mobile'>
1468          <div class="dropdown">
1469            <button class="dropdown-button pill mobile-switcher" data-target="mobile-switcher">View as</button>
1470            <div class="dropdown-content" id="mobile-switcher">
1471              <ul>
1472                <li class="dropdown-item" data-mode="creator">Admin</li>
1473                <li class="dropdown-item" data-mode="supporter">Supporter</li>
1474              </ul>
1475            </div>
1476          </div>
1477
1478          <div class="dropdown mobile">
1479            <button class="dropdown-button pill" data-target="mobile-links">
1480              <svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
1481                <g id="Dots horizontal">
1482                  <g>
1483                    <path d="M2.96875 7C2.96875 7.42284 2.62597 7.76562 2.20312 7.76562C1.78028 7.76562 1.4375 7.42284 1.4375 7C1.4375 6.57716 1.78028 6.23438 2.20312 6.23438C2.62597 6.23438 2.96875 6.57716 2.96875 7Z" stroke="#FDFCFB" stroke-width="1.5"/>
1484                    <path d="M8.76562 7C8.76562 7.42284 8.42284 7.76562 8 7.76562C7.57716 7.76562 7.23438 7.42284 7.23438 7C7.23438 6.57716 7.57716 6.23438 8 6.23438C8.42284 6.23438 8.76562 6.57716 8.76562 7Z" stroke="#FDFCFB" stroke-width="1.5"/>
1485                    <path d="M14.5625 7C14.5625 7.42284 14.2197 7.76562 13.7969 7.76562C13.374 7.76562 13.0312 7.42284 13.0312 7C13.0312 6.57716 13.374 6.23438 13.7969 6.23438C14.2197 6.23438 14.5625 6.57716 14.5625 7Z" stroke="#FDFCFB" stroke-width="1.5"/>
1486                  </g>
1487                </g>
1488              </svg>
1489            </button>
1490            <div class="dropdown-content" id="mobile-links">
1491              <a href="/admin/dashboard" rel="noopener noreferrer" class="dropdown-item">Go to dashboard</a>
1492            </div>
1493          </div>
1494        </div>
1495
1496        <div class="pill close">
1497          <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
1498            <g>
1499              <path d="M0.875 13.125L13.125 0.875M13.125 13.125L0.875 0.875" stroke="#FDFCFB" stroke-width="1.5" stroke-linejoin="bevel"/>
1500            </g>
1501          </svg>
1502        </div>
1503      </div>
1504    </div>
1505  </div>
1506
1507  <div id="admin-bar-small" class="admin-bar-small sticky hidden">
1508    <div class="wrapper">
1509      <div>
1510        <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
1511          <path fill="#FDFCFB" d="m11.947 6-.682 3.151H9.983c-1.61 0-1.964.081-2.237 1.195l-.136.733h3.246l-.683 3.178H6.928L4.5 25.692H0l2.428-11.435H.409l.682-3.178h1.991l.219-.923C4.01 6.706 5.7 6 9.628 6h2.319Zm3.525 5.08 1.936 9.913 1.718-9.914h4.637l1.69 9.914 1.938-9.914H32l-3.382 14.613h-5.21L21.446 14.91 19.48 25.692h-5.237L10.862 11.08h4.61Z"/>
1512        </svg>
1513      </div>
1514    </div>
1515  </div>
1516</div>
1517
1518<script>
1519  const cookieModule = {
1520    setCookie: function (name, value, days = 365, maxAge) {
1521      const expires = new Date(Date.now() + days * 24 * 60 * 60 * 1000).toUTCString();
1522      let cookieString = `${name}=${value}; expires=${expires}; path=/`;
1523
1524      if (maxAge) {
1525        cookieString += `; max-age=${maxAge}`;
1526      }
1527
1528      document.cookie = cookieString;
1529    },
1530
1531    getCookie: function (name) {
1532      const cookie = document.cookie.split(';').find(c => c.trim().startsWith(`${name}=`));
1533      return cookie ? cookie.split('=')[1] : null;
1534    }
1535  };
1536
1537  const AdminBar = {
1538    adminBar: document.getElementById("admin-bar"),
1539    adminBarContainer: document.querySelector(".admin-bar-container"),
1540    adminBarSmall: document.getElementById("admin-bar-small"),
1541    closeButton: document.querySelector('#admin-bar .close'),
1542    viewAsDesktopButton: document.querySelector(".desktop-switcher"),
1543    dropdownButtons: document.querySelectorAll(".dropdown-button"),
1544    dropdownContents: document.querySelectorAll(".dropdown-content"),
1545    inIframe: () => {
1546      try {
1547        return window.self !== window.top;
1548      } catch (e) {
1549        return true;
1550      }
1551    },
1552    inThemeEditor: () => cookieModule.getCookie('view_as') === 'theme_editor' || AdminBar.inIframe(),
1553    viewAsCreator: () => cookieModule.getCookie('view_as') === 'creator',
1554    viewAsSupporter: () => cookieModule.getCookie('view_as') === 'supporter',
1555    verifyCreator: () => {
1556      document.cookie = 'return_to=' + window.location.href + '; path=/; max-age=30;';
1557      window.location.href = '/platform/creators/handoff/start?return=' + encodeURIComponent(window.location.pathname + window.location.search);
1558    },
1559    getSelectedView: () => (AdminBar.viewAsCreator() ? 'Admin' : 'Supporter'),
1560    toggleDropdown: (dropdownContent) => {
1561      dropdownContent.style.display = dropdownContent.style.display === 'none' || dropdownContent.style.display === '' ? 'block' : 'none';
1562    },
1563    init() {
1564      if (
1565        !AdminBar.inThemeEditor() &&
1566        cookieModule.getCookie('core_dashboard_visited')
1567      ) {
1568        AdminBar.viewAsDesktopButton.textContent = 'View as: ' + AdminBar.getSelectedView();
1569        AdminBar.adminBarContainer.classList.toggle('hidden');
1570        if (cookieModule.getCookie('admin_bar_mode') === 'condensed') {
1571          AdminBar.adminBarSmall.classList.toggle('hidden');
1572        } else {
1573          AdminBar.adminBar.classList.toggle('hidden');
1574        }
1575      }
1576
1577      AdminBar.closeButton.addEventListener('click', () => {
1578        cookieModule.setCookie('admin_bar_mode', 'condensed');
1579        AdminBar.adminBar.classList.toggle('hidden');
1580        AdminBar.adminBarSmall.classList.toggle('hidden');
1581      });
1582
1583      AdminBar.adminBarSmall.addEventListener('click', () => {
1584        cookieModule.setCookie('admin_bar_mode', 'expanded');
1585        AdminBar.adminBar.classList.toggle('hidden');
1586        AdminBar.adminBarSmall.classList.toggle('hidden');
1587      });
1588
1589      // Add event listeners to each dropdown button
1590      AdminBar.dropdownButtons.forEach((button) => {
1591        button.addEventListener("click", () => {
1592          const dropdownId = button.getAttribute("data-target");
1593          const dropdownContent = document.getElementById(dropdownId);
1594          AdminBar.toggleDropdown(dropdownContent);
1595        });
1596      });
1597
1598      // Close the dropdowns when clicking outside
1599      document.addEventListener("click", (event) => {
1600        AdminBar.dropdownButtons.forEach((button) => {
1601          const dropdownId = button.getAttribute("data-target");
1602          const dropdownContent = document.getElementById(dropdownId);
1603          if (event.target !== button && !button.contains(event.target) && event.target !== dropdownContent) {
1604            dropdownContent.style.display = "none";
1605          }
1606        });
1607      });
1608
1609      document.querySelectorAll(".dropdown-content li").forEach((item) => {
1610        item.addEventListener("click", (event) => {
1611          const mode = event.target.getAttribute("data-mode");
1612          if (mode === 'creator') {
1613            cookieModule.setCookie('view_as', 'creator');
1614            AdminBar.verifyCreator();
1615          } else {
1616            cookieModule.setCookie('view_as', 'supporter');
1617            window.location.reload();
1618          }
1619        });
1620      });
1621    },
1622  };
1623
1624  AdminBar.init();
1625</script>
1625
1626
1627<style>
1628  .admin-bar-container {
1629    height: 56px;
1630  }
1631
1632  .hidden {
1633    display: none;
1634  }
1635
1636  .admin-bar,
1637  .admin-bar-small {
1638    z-index: 1000;
1639    background-color: rgba(0, 0, 0, 0.7);
1640    backdrop-filter: blur(15px);
1641    -webkit-backdrop-filter: blur(15px);
1642    height: 56px;
1643    width: 100%;
1644  }
1645
1646  .admin-bar-small {
1647    width: 73px;
1648    cursor: pointer;
1649  }
1650
1651  .sticky {
1652    position: fixed;
1653    bottom: 0;
1654  }
1655
1656  .admin-bar a {
1657    color: #FDFCFB;
1658    padding: 14px;
1659    font-size: 14px;
1660    text-decoration: none;
1661  }
1662
1663  .admin-bar button {
1664    padding: 14px;
1665    font-size: 14px;
1666  }
1667
1668  .admin-bar .wrapper,
1669  .admin-bar-small .wrapper {
1670    display: flex;
1671    justify-content: space-between;
1672    align-items: center;
1673    padding: 10px 20px;
1674  }
1675
1676  .admin-bar-small .wrapper {
1677    padding: 12px 20px;
1678  }
1679
1680  .admin-bar .pill {
1681    display: flex;
1682    justify-content: center;
1683    align-items: center;
1684    gap: 10px;
1685    text-transform: capitalize;
1686
1687    padding: 6px 14px;
1688    border-radius: 100px;
1689    background: rgba(253, 252, 251, 0.12);
1690
1691    cursor: pointer;
1692  }
1693
1694  .admin-bar .pill:hover {
1695    background: rgba(253, 252, 251, 0.22);
1696  }
1697
1698  .admin-bar .close {
1699    padding: 6px 11px;
1700  }
1701
1702  .admin-bar .actions,
1703  .admin-bar .actions .desktop,
1704  .admin-bar .actions .mobile {
1705    display: flex;
1706    gap: 10px;
1707  }
1708
1709  .admin-bar .actions .desktop,
1710  .admin-bar .actions .edit-page {
1711    display: none;
1712  }
1713
1714  @media (min-width: 768px) {
1715    .admin-bar a,
1716    .admin-bar button {
1717      font-size: 16px;
1718    }
1719
1720    .admin-bar .actions .desktop,
1721    .admin-bar .actions .edit-page {
1722      display: flex;
1723      gap: 10px;
1724    }
1725
1726    .admin-bar .actions .mobile {
1727      display: none;
1728    }
1729  }
1730
1731  .dropdown {
1732    position: relative;
1733  }
1734
1735  .dropdown-content {
1736    display: none;
1737    position: absolute;
1738    background-color: rgba(0,0,0,0.9);
1739    min-width: 130px;
1740    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
1741    bottom: 100%; /* Position above the button */
1742    border-radius: 10px;
1743    bottom: calc((100% + 8px) - 0px);
1744    right: 0;
1745  }
1746
1747  /* Style for each list item */
1748  .dropdown-content .dropdown-item {
1749    color: white;
1750    padding: 12px 16px;
1751    text-decoration: none;
1752    white-space: nowrap;
1753    display: block;
1754    cursor: pointer;
1755    border-radius: 10px;
1756  }
1757
1758  .dropdown-content .dropdown-item:hover {
1759    background-color: rgba(255,255,255,0.2)
1760  }
1761
1762  /* Style for the button */
1763  .dropdown-button {
1764    color: white;
1765    padding: 10px 20px;
1766    border: none;
1767    border-radius: 5px;
1768    cursor: pointer;
1769    line-height: 24px;
1770  }
1771</style>
1772
1773</body>
1774</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.