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 & 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 & 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 & 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">© 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.