1<!DOCTYPE html><html lang="en-ca"> <head>
1<script type="module" src="https://assets.blurb.com/_astro/BaseHead.astro_astro_type_script_index_0_lang.DTOPfZKw.js"></script>
1<script type="module" src="https://assets.blurb.com/_astro/BaseHead.astro_astro_type_script_index_1_lang.Cuie9Elm.js"></script>
1<style>@font-face{font-family:"Roboto Mono-5b357cbe19a19424";src:url("https://assets.blurb.com/_astro/fonts/314e70ccaf8696af.woff2") format("woff2");font-display:swap;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-weight:400;font-style:normal;}@font-face{font-family:"Roboto Mono-5b357cbe19a19424";src:url("https://assets.blurb.com/_astro/fonts/17fcedc53e4787a2.woff2") format("woff2");font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-weight:400;font-style:normal;}@font-face{font-family:"Roboto Mono-5b357cbe19a19424";src:url("https://assets.blurb.com/_astro/fonts/5b29a9eb18f02bf7.woff2") format("woff2");font-display:swap;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-weight:400;font-style:normal;}@font-face{font-family:"Roboto Mono-5b357cbe19a19424";src:url("https://assets.blurb.com/_astro/fonts/3d8a4d15455e7694.woff2") format("woff2");font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:400;font-style:normal;}@font-face{font-family:"Roboto Mono-5b357cbe19a19424";src:url("https://assets.blurb.com/_astro/fonts/63b7655743f0b42e.woff2") format("woff2");font-display:swap;
1unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:400;font-style:normal;}@font-face{font-family:"Roboto Mono-5b357cbe19a19424";src:url("https://assets.blurb.com/_astro/fonts/8c795b88d4cc61cb.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:normal;}@font-face{font-family:"Roboto Mono-5b357cbe19a19424 fallback: Courier New";src:local("Courier New");font-display:swap;font-weight:400;font-style:normal;size-adjust:100%;ascent-override:104.7852%;descent-override:27.0996%;line-gap-override:0%;}:root{--font-roboto-mono:"Roboto Mono-5b357cbe19a19424","Roboto Mono-5b357cbe19a19424 fallback: Courier New",monospace;}</style><link rel="preconnect" href="https://use.typekit.net" crossorigin><link rel="preconnect" href="https://p.typekit.net" crossorigin><link rel="stylesheet" href="https://use.typekit.net/arj3syy.css"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Just+Another+Hand&display=swap" rel="stylesheet"><title>Book Format Options: Photo Books, Magazines & More</title><meta charset="utf-8"><link rel="canonical" href="https://ca.blurb.com/formats"><meta name="description" content="Find the right book format for any project. Explore our full range of book sizes and formats including photo books, magazines, paperback and hardcover books."><meta name="robots" content="noindex, follow"><meta property="og:title" content="Book Format Options: Photo Books, Magazines & More"><meta property="og:type" content="website"><meta property="og:image" content="https://assets.blurb.com/_astro/og-image.DH9E-RZf.png"><meta property="og:url" content="https://ca.blurb.com/formats"><meta property="og:description" content="Find the right book format for any project. Explore our full range of book sizes and formats including photo books, magazines, paperback and hardcover books."><meta property="og:locale" content="en_US"><meta property="og:site_name" content="Blurb"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Book Format Options: Photo Books, Magazines & More"><meta name="twitter:image" content="https://assets.blurb.com/_astro/og-image.DH9E-RZf.png"><meta name="twitter:description" content="Find the right book format for any project. Explore our full range of book sizes and formats including photo books, magazines, paperback and hardcover books."><meta name="twitter:creator" content="@blurbbooks"><link rel="icon" href="https://assets.blurb.com/_astro/favicon.DsVwNQ89.ico"><link rel="shortcut icon" href="https://assets.blurb.com/_astro/favicon.D83MDGd3.svg" type="image/svg+xml"><link rel="sitemap" href="/sitemap-index.xml"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Book Format Options: Photo Books, Magazines & More"><meta name="twitter:description" content="Find the right book format for any project. Explore our full range of book sizes and formats including photo books, magazines, paperback and hardcover books."><meta name="twitter:image">
1<script type="text/javascript"> 2 const GTM_ID = 'GTM-MGVL2VK7'; 3 (function (w, d, s, l, i) { 4 let gtmLoaded = false; 5 6 function loadGTM() { 7 if (gtmLoaded || !isProduction()) return; 8 gtmLoaded = true; 9 10 w[l] = w[l] || []; 11 w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); 12 const f = d.getElementsByTagName(s)[0], 13 j = d.createElement(s), 14 dl = l != 'dataLayer' ? '&l=' + l : ''; 15 j.async = true; 16 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 17 f.parentNode.insertBefore(j, f); 18 19 // Remove event listeners after loading 20 d.removeEventListener('mousemove', loadGTM); 21 d.removeEventListener('scroll', loadGTM); 22 d.removeEventListener('touchstart', loadGTM); 23 } 24 25 // Wait 200ms before setting up event listeners 26 setTimeout(() => { 27 // Add event listeners 28 d.addEventListener('mousemove', loadGTM, { once: true, passive: true }); 29 d.addEventListener('scroll', loadGTM, { once: true, passive: true }); 30 d.addEventListener('touchstart', loadGTM, { once: true, passive: true }); 31 }, 200); 32 33 function isProduction() { 34 const hostname = window.location.hostname; 35 36 const nonProductionHosts = [ 37 'localhost', 38 '127.0.0.1', 39 'master', 40 'integration', 41 'vercel.app', 42 ]; 43 44 // Return false if hostname includes any non production hosts 45 return !nonProductionHosts.some((nonProdHost) => 46 hostname.includes(nonProdHost), 47 ); 48 } 49 })(window, document, 'script', 'dataLayer', GTM_ID); 50</script>
50<script> 51 (function (m, a, z, e) { 52 let t; 53 try { 54 t = m.sessionStorage.getItem('maze-us'); 55 } catch { 56 void 0; 57 } 58 59 if (!t) { 60 t = new Date().getTime(); 61 try { 62 m.sessionStorage.setItem('maze-us', t); 63 } catch { 64 void 0; 65 } 66 } 67 68 const s = a.createElement('script'); 69 s.src = z + '?apiKey=' + e; 70 s.async = true; 71 a.getElementsByTagName('head')[0].appendChild(s); 72 m.mazeUniversalSnippetApiKey = e; 73 })( 74 window, 75 document, 76 'https://snippet.maze.co/maze-universal-loader.js', 77 '2b1f0bf4-0880-4e43-8708-27af9a682e7d', 78 ); 79</script>
79<script type="module" src="https://assets.blurb.com/_astro/BaseHead.astro_astro_type_script_index_2_lang.BZUdC0VX.js"></script>
79<link rel="stylesheet" href="https://assets.blurb.com/_astro/index.B9kpT8nI.css"></head> <body class="font-body text-blurb-text-bold bg-blurb-bg-surface"> <!-- Embed promo data for runtime access -->
79<script type="application/json" id="promo-data">{"locale":"en-ca","campaigns":[{"id":"feb-2-to-feb-6","startDate":"2026-02-02T00:00:00-08:00","endDate":"2026-02-06T23:59:59-08:00","homeHero":{"eyebrow":"25% off all book formats*"},"promoBar":{"code":"Code:","codeValue":"SPECIALBOOK25","text":"25% off all book formats* through February 6, 2026.","details":"Details","modal":{"title":"Save 25% on all book formats*","date":"Ends February 6, 2026.","terms":"*Save 25% on photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to your own account with code: SPECIALBOOK25. Offer valid through February 6, 2026 (11:59 p.m. local time). A 25% discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 25% off","magazines":"Limited-time offer: 25% off","notebooks":"Limited-time offer: 25% off","tradebooks":"Limited-time offer: 25% off"},"shopAllPromo":null},{"id":"feb-8-to-feb-10","startDate":"2026-02-08T00:00:00-08:00","endDate":"2026-02-10T23:59:59-08:00","homeHero":null,"promoBar":{"text":"15% off the Blurb Bookstore* through February 10, 2026.","code":"Code:","codeValue":"BOOKLOVE15","details":"Details","modal":{"title":"Save 15% at the Blurb Bookstore*","date":"Ends February 10, 2026.","terms":"*Save 15% off in the Blurb bookstore with code: BOOKLOVE15. Offer valid through February 10, 2026 (11:59 p.m. local time). Valid only for books purchased through the Blurb bookstore. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"shopAllPromo":null},{"id":"feb-12-to-feb-15-5x5","startDate":"2026-02-12T00:00:00-08:00","endDate":"2026-02-15T23:59:59-08:00","homeHero":null,"promoBar":{"code":"","codeValue":"","text":"Make a Mini Square photo book for $9 through February 15, 2026.* No code required.","details":"Details","modal":{"title":"Make a Mini Square photo book for $9.*","date":"Ends February 15, 2026","terms":"*Offer valid through February 15, 2026 (11:59 p.m. local time). Discounted price of $9 CAD applies to 5Ã5 in. (13Ã13 cm) Mini Square Softcover Photo Books with Standard Paper, 20 pages, and Matte cover finish only. Additional pages and upgrades available at regular price. Cannot be combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"softcover5x5Eyebrow":"Make a Mini Square for $9*","shopAllPromo":null},{"id":"feb-17-to-feb-24","startDate":"2026-02-17T00:00:00-08:00","endDate":"2026-02-24T23:59:59-08:00","homeHero":null,"promoBar":{"text":"30% off photo books* through February 24, 2026.","code":"Code:","codeValue":"CAPTURE30","details":"Details","modal":{"title":"Save 30% on photo books*","date":"Ends February 24, 2026.","terms":"*Save 30% off photo books with code: CAPTURE30. Offer valid through February 24, 2026 (11:59 p.m. local time). Valid only for photo books uploaded to and purchased through your own account. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 30% off","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"mar-2-to-mar-7","startDate":"2026-03-02T00:00:00-08:00","endD
79ate":"2026-03-07T23:59:59-08:00","homeHero":null,"promoBar":{"text":"20% off all books* through March 7, 2026.","code":"Code:","codeValue":"PRINTFOCUS20","details":"Details","modal":{"title":"Save 20% on all books*","date":"Ends March 7, 2026.","terms":"*Save 20% on photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account with code: PRINTFOCUS20. Offer valid through March 7, 2026 (11:59 p.m. local time). A 20% discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 20% off","magazines":"Limited-time offer: 20% off","notebooks":"Limited-time offer: 20% off","tradebooks":"Limited-time offer: 20% off"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Limited-time offer: 20% off"}},{"id":"mar-11-to-mar-18","startDate":"2026-03-11T00:00:00-08:00","endDate":"2026-03-18T23:59:59-08:00","homeHero":null,"promoBar":{"text":"30% off photo books* through March 18, 2026.","code":"Code:","codeValue":"BIGTHANKS30","details":"Details","modal":{"title":"Save 30% on photo books*","date":"Ends March 18, 2026.","terms":"*Save 30% off photo books with code: BIGTHANKS30. Offer valid through March 18, 2026 (11:59 p.m. local time). Valid only for photo books uploaded to and purchased through your own account. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 30% off","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"mar-21-to-mar-23","startDate":"2026-03-21T00:00:00-08:00","endDate":"2026-03-23T23:59:59-08:00","homeHero":null,"promoBar":{"text":"15% off the Blurb Bookstore* through March 21-23, 2026.","code":"Code:","codeValue":"BOOKFIND15","details":"Details","modal":{"title":"Save 15% at the Blurb Bookstore*","date":"Ends March 23, 2026.","terms":"*Save 15% off in the Blurb bookstore with code: BOOKFIND15. Offer valid through March 23, 2026 (11:59 p.m. local time). Valid only for books purchased through the Blurb bookstore. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"apr-1-to-apr-7","startDate":"2026-04-01T00:00:00-08:00","endDate":"2026-04-07T23:59:59-08:00","homeHero":null,"promoBar":{"text":"20% off all book formats* through April 7, 2026.","code":"Code:","codeValue":"LOOKBOOK20","details":"Details","modal":{"title":"Save 20% on all book formats*","date":"Ends April 7, 2026.","terms":"*Save 20% on photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account: LOOKBOOK20. Offer valid through April 7, 2026 (11:59 p.m. local time). A 20% discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 20% off","magazines":"Limited-time offer: 20% off","notebooks":"Limited-time offer: 20% off","tradebooks":"Limited-time offer: 20% off"},"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"apr-10-to-apr-18","startDate":"2026-04-10T00:00:00-08:00","endD
79ate":"2026-04-18T23:59:59-08:00","homeHero":null,"promoBar":{"text":"30% off all photo books* through April 18, 2026.","code":"Code:","codeValue":"LOVING30","details":"Details","modal":{"title":"Save 30% on photo books*","date":"Ends April 18, 2026.","terms":"*Save 30% off photo books with code: LOVING30. Offer valid through April 18, 2026 (11:59 p.m. local time). Valid only for photo books uploaded to and purchased through your own account. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 30% off","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"apr-20-to-apr-22","startDate":"2026-04-20T00:00:00-08:00","endDate":"2026-04-22T23:59:59-08:00","homeHero":null,"promoBar":{"text":"20% off the Blurb Bookstore* through April 22, 2026.","code":"Code:","codeValue":"BOOKBUY20","details":"Details","modal":{"title":"Save 20% at the Blurb Bookstore*","date":"Ends April 22, 2026.","terms":"*Save 20% off in the Blurb bookstore with code: BOOKBUY20. Offer valid through April 22, 2026 (11:59 p.m. local time). Valid only for books purchased through the Blurb bookstore. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"apr-23-to-apr-29","startDate":"2026-04-23T00:00:00-08:00","endDate":"2026-04-29T23:59:59-08:00","homeHero":null,"promoBar":{"text":"Save $20 on orders of $50+* through April 29, 2026.","code":"Code:","codeValue":"INDIEBOOK20","details":"Details","modal":{"title":"Save $20 on orders over $50*","date":"Ends April 29, 2026.","terms":"*Save $20 on orders of $50 or more with code: INDIEBOOK20. Offer valid through April 29, 2026 (11:59 p.m. local time). Valid only for photo books, trade books, notebooks, journals, and magazines uploaded to and purchased through your own account (excludes shipping and taxes). A $20 discount is applied toward your product total of $50 or more. This offer has no cash value, is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Save $20 on orders of $50 or more*","magazines":"Save $20 on orders of $50 or more*","notebooks":"Save $20 on orders of $50 or more*","tradebooks":"Save $20 on orders of $50 or more*"},"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"may-6-to-may-14","startDate":"2026-05-06T00:00:00-08:00","endDate":"2026-05-14T23:59:59-08:00","homeHero":null,"promoBar":{"text":"40% off all photo books* through May 14, 2026.","code":"Code:","codeValue":"BOOKFRIEND40","details":"Details","modal":{"title":"Save 40% on photo books*","date":"Ends May 14, 2026.","terms":"*Save 40% off photo books with code: BOOKFRIEND40. Offer valid through May 14, 2026 (11:59 p.m. local time). Valid only for photo books uploaded to and purchased through your own account. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 40% off","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"may-17-to-may-22","startDate":"2026-05-17T00:00:00-08:00","endD
79ate":"2026-05-22T23:59:59-08:00","homeHero":null,"promoBar":{"text":"25% off all books* through May 22, 2026.","code":"Code:","codeValue":"CUSTOM25","details":"Details","modal":{"title":"Save 25% on all books*","date":"Ends May 22, 2026.","terms":"*Save 25% on photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account: CUSTOM25. Offer valid through May 22, 2026 (11:59 p.m. local time). A 25% discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 25% off","magazines":"Limited-time offer: 25% off","notebooks":"Limited-time offer: 25% off","tradebooks":"Limited-time offer: 25% off"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Save 25% on all books*"}},{"id":"may-24-to-may-26","startDate":"2026-05-24T00:00:00-08:00","endDate":"2026-05-26T23:59:59-08:00","homeHero":null,"promoBar":{"text":"15% off the Blurb Bookstore* through May 26, 2026.","code":"Code:","codeValue":"SPRINGREAD15","details":"Details","modal":{"title":"Save 15% at the Blurb Bookstore*","date":"Ends May 26, 2026.","terms":"*Save 15% off in the Blurb bookstore with code: SPRINGREAD15. Offer valid through May 26, 2026 (11:59 p.m. local time). Valid only for books purchased through the Blurb bookstore. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of CAD $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"may-27-to-may-30","startDate":"2026-05-27T00:00:00-08:00","endDate":"2026-05-30T23:59:59-08:00","homeHero":null,"promoBar":{"text":"Save 30% on orders of $50+* through May 30, 2026.","code":"Code:","codeValue":"GRADDAYS30","details":"Details","modal":{"title":"Save 30% on orders over $50*","date":"Ends May 30, 2026.","terms":"*Save 30% on orders of $50 or more with code: GRADDAYS30. Offer valid through May 30, 2026 (11:59 p.m. local time). Valid only for photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account. A 30% discount is applied toward your product total of $50 or more. This offer has a maximum value of $645. This is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Save 30% on orders of $50 or more*","magazines":"Save 30% on orders of $50 or more*","notebooks":"Save 30% on orders of $50 or more*","tradebooks":"Save 30% on orders of $50 or more*"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Save 30% on orders over $50*"}},{"id":"jun-1-to-jun-5","startDate":"2026-06-01T00:00:00-08:00","endDate":"2026-06-05T23:59:59-08:00","homeHero":null,"promoBar":{"text":"Save $30 on orders $75+ through June 5, 2026.*","code":"Code:","codeValue":"SAVE30ON75","details":"Details","modal":{"title":"Save $30 on orders $75+*","date":"Ends June 5, 2026.","terms":"*Save $30 on orders of $75 or more with code: SAVE30ON75. Offer valid through June 5, 2026 (11:59 p.m. local time). Valid only for photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account. A $30 discount is applied toward your product total of $75 or more. This offer has no cash value, is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adju
79stments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Save $30 on orders of $75 or more*","magazines":"Save $30 on orders of $75 or more*","notebooks":"Save $30 on orders of $75 or more*","tradebooks":"Save $30 on orders of $75 or more*"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Save $30 on orders over $75*"}},{"id":"jun-7-to-jun-9","startDate":"2026-06-07T00:00:00-08:00","endDate":"2026-06-09T23:59:59-08:00","homeHero":null,"promoBar":{"text":"15% off the Blurb Bookstore* through June 9, 2026.","code":"Code:","codeValue":"SUMMERBOOK15","details":"Details","modal":{"title":"Save 15% at the Blurb Bookstore*","date":"Ends June 9, 2026.","terms":"*Save 15% off in the Blurb bookstore with code: SUMMERBOOK15. Offer valid through June 9, 2026 (11:59 p.m. local time). Valid only for books purchased through the Blurb bookstore. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"jun-10-to-jun-19","startDate":"2026-06-10T00:00:00-08:00","endDate":"2026-06-19T23:59:59-08:00","homeHero":null,"promoBar":{"text":"Summer Days Sale: 30% off photo books* through June 19, 2026.","code":"Code:","codeValue":"PROJECTIDEA30","details":"Details","modal":{"title":"Save 30% on photo books*","date":"Ends June 19, 2026.","terms":"*Save 30% off photo books with code: PROJECTIDEA30. Offer valid through June 19, 2026 (11:59 p.m. local time). Valid only for photo books uploaded to and purchased through your own account. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 30% off","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Limited-time offer: 30% off"}},{"id":"jun-22-to-jun-26","startDate":"2026-06-22T00:00:00-08:00","endDate":"2026-06-26T23:59:59-08:00","homeHero":null,"promoBar":{"text":"25% off all book formats* through June 26, 2026.","code":"Code:","codeValue":"CREATE25OFF","details":"Details","modal":{"title":"Save 25% on all book formats*","date":"Ends June 26, 2026.","terms":"*Save 25% on photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and ordered through your own account with code: CREATE25OFF. Offer valid through June 26, 2026 (11:59 p.m. local time). A 25% discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 25% off","magazines":"Limited-time offer: 25% off","notebooks":"Limited-time offer: 25% off","tradebooks":"Limited-time offer: 25% off"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Save 25% on all book formats*"}},{"id":"jul-2-to-jul-9","startDate":"2026-07-02T00:00:00-08:00","endDate":"2026-07-09T23:59:59-08:00","homeHero":null,"promoBar":{"text":"30% off photo books* through July 9, 2026.","code":"Code:","codeValue":"JUSTSTART30","details":"Details","modal":{"title":"Save 30% on photo books*","date":"Ends July 9, 2026.","terms":"*Save 30% off photo books with code: JUSTSTART30. Offer valid through July 9, 2026 (11:59 p.m. local time). Valid only for photo books uploaded to and purchased through your own account. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adju
79stments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 30% off","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Limited-time offer: 30% off"}},{"id":"jul-12-to-jul-14","startDate":"2026-07-12T00:00:00-08:00","endDate":"2026-07-14T23:59:59-08:00","homeHero":null,"promoBar":{"text":"20% off the Blurb Bookstore* through July 14, 2026.","code":"Code:","codeValue":"JULYBOOK20","details":"Details","modal":{"title":"Save 20% at the Blurb Bookstore*","date":"Ends July 14, 2026.","terms":"*Save 20% off in the Blurb bookstore with code: JULYBOOK20. Offer valid through July 14, 2026 (11:59 p.m. local time). Valid only for books purchased through the Blurb bookstore. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"jul-27-to-jul-31","startDate":"2026-07-27T00:00:00-08:00","endDate":"2026-07-31T23:59:59-08:00","homeHero":null,"promoBar":{"code":"","codeValue":"","text":"Make a 25Ã20 cm ImageWrap Hardcover photo book for $25 CAD through July 31, 2026.* No code required.","details":"Details","modal":{"title":"Make a 25Ã20 cm ImageWrap Hardcover photo book for $25 CAD.* No code required.","date":"Ends July 31, 2026","terms":"*Offer valid through July 31, 2026 (11:59 p.m. local time). Valid only for regular-priced 20-page, Standard paper, 25Ã20 cm ImageWrap Hardcover Photo Book for $25 CAD per ImageWrap Hardcover Photo Book. Valid only for books uploaded to and purchased through your own account. The discount is automatically applied toward your product total with no minimum or maximum order amount. Not valid on other sizes, other cover types, additional pages, other page types, hardcover books, layflat books, magazines, notebooks, or journals. This offer cannot be used for ebook or PDF purchases, wall art, or combined with other offers, volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Make a 25Ã20 cm ImageWrap Hardcover photo book for $25 CAD","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"jul-17-to-jul-24","startDate":"2026-07-17T00:00:00-08:00","endDate":"2026-07-24T23:59:59-08:00","homeHero":null,"promoBar":{"text":"25% off all book formats* through July 24, 2026.","code":"Code:","codeValue":"WANDERLUST25","details":"Details","modal":{"title":"Save 25% on all book formats*","date":"Ends July 24, 2026.","terms":"*Save 25% on photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account with code: WANDERLUST25. Offer valid through July 24, 2026 (11:59 p.m. local time). A 25% discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 25% off","magazines":"Limited-time offer: 25% off","notebooks":"Limited-time offer: 25% off","tradebooks":"Limited-time offer: 25% off"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Save 25% on all book formats*"}},{"id":"aug-2-to-aug-10","startDate":"2026-08-02T00:00:00-08:00","endDate":"2026-08-10T23:59:59-08:00","homeHero":null,"promoBar":{"text":"35% off all photo books* through August 10, 2026.","code":"Code:","codeValue":"SHAPE35","details":"Details","modal":{"title":"Save 35% on photo books*","date":"Ends August 10, 2026.","terms":"*Save 35% off photo books with code: SHAPE35. Offer valid through August 10, 2026 (11:59 p.m. local time). Valid only for photo books uploaded to and purchased through your own account. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adju
79stments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 35% off","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Limited-time offer: 35% off"}},{"id":"aug-11-to-aug-15","startDate":"2026-08-11T00:00:00-08:00","endDate":"2026-08-15T23:59:59-08:00","homeHero":null,"promoBar":{"text":"Save 30% on 3+ books* through August 15, 2026.","code":"Code:","codeValue":"CREATE3MORE30","details":"Details","modal":{"title":"30% off 3+ books*","date":"Ends August 15, 2026.","terms":"*Save 30% off 3 or more photo books, paperback and hardcover books, notebooks, journals, and magazines with code: CREATE3MORE30. Offer valid through August 15, 2026 (11:59 p.m. local time). Valid only for books uploaded to and purchased through your own account. The discount is applied toward your product total. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Save 30% on 3+ books*","magazines":"Save 30% on 3+ books*","notebooks":"Save 30% on 3+ books*","tradebooks":"Save 30% on 3+ books*"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Save 30% on 3+ books*"}},{"id":"aug-17-to-aug-19","startDate":"2026-08-17T00:00:00-08:00","endDate":"2026-08-19T23:59:59-08:00","homeHero":null,"promoBar":{"text":"20% off the Blurb Bookstore* through August 19, 2026.","code":"Code:","codeValue":"AUGUSTBOOK20","details":"Details","modal":{"title":"Save 20% at the Blurb Bookstore*","date":"Ends August 19, 2026.","terms":"*Save 20% off in the Blurb bookstore with code: AUGUSTBOOK20. Offer valid through August 19, 2026 (11:59 p.m. local time). Valid only for books purchased through the Blurb bookstore. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"aug-20-to-aug-27","startDate":"2026-08-20T00:00:00-08:00","endDate":"2026-08-27T23:59:59-08:00","homeHero":null,"promoBar":{"text":"25% off all book formats* through August 27, 2026.","code":"Code:","codeValue":"CHOICE25C","details":"Details","modal":{"title":"Save 25% on all book formats*","date":"Ends August 27, 2026.","terms":"*Save 25% on photo books, trade books, notebooks, journals, and magazines uploaded to your own account with code: CHOICE25C. Offer valid through August 27, 2026 (11:59 p.m. local time). A 25% discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 25% off","magazines":"Limited-time offer: 25% off","notebooks":"Limited-time offer: 25% off","tradebooks":"Limited-time offer: 25% off"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Save 25% on all book formats*"}},{"id":"sep-1-to-sep-8","startDate":"2026-09-01T00:00:00-08:00","endDate":"2026-09-08T23:59:59-08:00","homeHero":null,"promoBar":{"text":"30% off all photo books* through September 8, 2026.","code":"Code:","codeValue":"PBINSPO30","details":"Details","modal":{"title":"Save 30% on photo books*","date":"Ends September 8, 2026.","terms":"*Save 30% off photo books with code: PBINSPO30. Offer valid through September 8, 2026 (11:59 p.m. local time). Valid only for photo books uploaded to and purchased through your own account. The discount is applied toward your product total with no minimum or maximum order amount. This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adju
79stments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 30% off","magazines":null,"notebooks":null,"tradebooks":null},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Limited-time offer: 30% off"}},{"id":"sep-11-to-sep-15","startDate":"2026-09-11T00:00:00-08:00","endDate":"2026-09-15T23:59:59-08:00","homeHero":null,"promoBar":{"code":"","codeValue":"","text":"$20 off $50+ with code WEDDING20 and $40 off $100+ with code WEDDING40* through September 15, 2026.","details":"Details","modal":{"title":"$20 off $50+ with code WEDDING20 and $40 off $100+ with code WEDDING40*","date":"Ends September 15, 2026.","terms":"*Save $20 on orders of $50 or more with code: WEDDING20. Offer valid through September 15, 2026 (11:59 p.m. local time). Valid only for photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account. A $20 discount is applied toward your product total of $50 or more (excludes shipping and taxes). This offer has no cash value, is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders. Save $40 on orders of $100 or more with code: WEDDING40. Offer valid through September 15, 2026 (11:59 p.m. local time). Valid only for photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account. A $40 discount is applied toward your product total of $100 or more (excludes shipping and taxes). This offer has no cash value, is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Spend $50, save $20 + spend $100, save $40*","magazines":"Spend $50, save $20 + spend $100, save $40*","notebooks":"Spend $50, save $20 + spend $100, save $40*","tradebooks":"Spend $50, save $20 + spend $100, save $40*"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Spend $50, save $20 + spend $100, save $40*"}},{"id":"sep-18-to-sep-20","startDate":"2026-09-18T00:00:00-08:00","endDate":"2026-09-20T23:59:59-08:00","homeHero":null,"promoBar":{"text":"15% off the Blurb Bookstore* through September 20, 2026.","code":"Code:","codeValue":"SEPT15BOOK","details":"Details","modal":{"title":"Save 15% at the Blurb Bookstore*","date":"Ends September 20, 2026.","terms":"*Save 15% off in the Blurb bookstore with code: SEPT15BOOK. Offer valid through September 20, 2026 (11:59 p.m. local time). Valid only for books purchased through the Blurb bookstore. The discount is applied toward your product total with no minimum or maximum order amount (excludes shipping and taxes). This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adjustments on previous orders."}},"pdpClpEyebrow":null,"softcover5x5Eyebrow":null,"shopAllPromo":null},{"id":"sep-22-to-sep-28","startDate":"2026-09-22T00:00:00-08:00","endDate":"2026-09-28T23:59:59-08:00","homeHero":null,"promoBar":{"text":"25% off all book formats* through September 28, 2026.","code":"Code:","codeValue":"REMEMBER25B","details":"Details","modal":{"title":"Save 25% on all book formats*","date":"Ends September 28, 2026.","terms":"*Save 25% on photo books, paperback and hardcover books, notebooks, journals, and magazines uploaded to and purchased through your own account with code: REMEMBER25B. Offer valid through September 28, 2026 (11:59 p.m. local time). A 25% discount is applied toward your product total with no minimum or maximum order amount (excludes shipping and taxes). This offer has a maximum value of $645. This offer is good for two uses, and cannot be used for ebook or PDF purchases, and wall art, or combined with volume discounts, custom orders, other promotional codes, gift cards, or used for adju
79stments on previous orders."}},"pdpClpEyebrow":{"photobooks":"Limited-time offer: 25% off","magazines":"Limited-time offer: 25% off","notebooks":"Limited-time offer: 25% off","tradebooks":"Limited-time offer: 25% off"},"softcover5x5Eyebrow":null,"shopAllPromo":{"heading":"Limited-time offer: 25% off"}}]}</script>
79 <!-- Update promo eyebrows based on active campaign -->
79<script> 80 document.addEventListener('DOMContentLoaded', function () { 81 const promoDataElement = document.getElementById('promo-data'); 82 if (!promoDataElement) return; 83 84 const promoData = JSON.parse(promoDataElement.textContent || '{}'); 85 const { campaigns } = promoData; 86 87 const currentDate = window.__devPreviewDate ?? Date.now(); 88 89 const activePromo = campaigns.find((promo) => { 90 const startDate = Date.parse(promo.startDate); 91 const endDate = Date.parse(promo.endDate); 92 return currentDate >= startDate && currentDate <= endDate; 93 }); 94 95 if (!activePromo?.pdpClpEyebrow) return; 96 97 const eyebrows = document.querySelectorAll('[data-promo-eyebrow]'); 98 99 eyebrows.forEach((eyebrow) => { 100 const productType = eyebrow.getAttribute('data-product-type'); 101 if (!productType) return; 102 103 const eyebrowText = activePromo.pdpClpEyebrow[productType]; 104 105 if (eyebrowText) { 106 eyebrow.textContent = eyebrowText; 107 eyebrow.classList.remove('hidden'); 108 } 109 }); 110 }); 111 </script>
111 <div data-vat="hidden" id="promo-bar" class="bg-blurb-bg-brand-hover hidden flex-col justify-center gap-1 py-3 text-sm text-white md:flex-row md:px-20" role="region" aria-labelledby="promo-section"> <h2 id="promo-section" class="sr-only">Promotional Information</h2> <div id="promo-text" class="text-center font-normal"></div> <div class="flex justify-center gap-1"> <div id="promo-separator-left" class="hidden" aria-hidden="true">|</div> <div id="promo-code-container" class="hidden gap-1 text-white"> <span id="promo-code"></span> <div id="promo-code-value" class="font-bold"></div> </div> <div id="promo-separator-right" class="hidden" aria-hidden="true">|</div> <button id="details-button" class="cursor-pointer border-0 bg-transparent p-0 underline" type="button" aria-expanded="false" aria-controls="detailsModal"></button> </div> </div> <dialog id="detailsModal" class="fixed inset-0 z-1 h-auto min-w-screen bg-white px-12.5 py-4 lg:m-auto lg:max-h-min lg:max-w-187.5 lg:min-w-auto" role="dialog" aria-modal="true" aria-labelledby="modal-title" aria-describedby="modal-desc" aria-hidden="true" tabindex="-1"> <div class="flex justify-end"> <button id="close-button" class="cursor-pointer" type="button" aria-label="Close dialog"> <svg width="1em" height="1em" class="shrink-0 grow-0 text-[3rem]" data-icon="material-symbols:close-rounded"> <symbol id="ai:material-symbols:close-rounded" viewBox="0 0 24 24"><path fill="currentColor" d="m12 13.4l-4.9 4.9q-.275.275-.7.275t-.7-.275t-.275-.7t.275-.7l4.9-4.9l-4.9-4.9q-.275-.275-.275-.7t.275-.7t.7-.275t.7.275l4.9 4.9l4.9-4.9q.275-.275.7-.275t.7.275t.275.7t-.275.7L13.4 12l4.9 4.9q.275.275.275.7t-.275.7t-.7.275t-.7-.275z"/></symbol><use href="#ai:material-symbols:close-rounded"></use> </svg> </button> </div> <div class="flex flex-col gap-6" id="modal-desc"> <h2 id="modal-title" class="text-center text-3xl font-bold md:text-5xl lg:text-9xl"></h2> <div class="text-blurb-bg-gray-subtle-active m-auto"> <p id="modal-code"></p> <p id="modal-date"></p> </div> <div id="modal-terms" class="text-blurb-bg-gray-subtle-active text-xs"></div> </div> </dialog>
111<script> 112 (function () { 113 const promoDataElement = document.getElementById('promo-data'); 114 if (!promoDataElement) return; 115 116 const promoData = JSON.parse(promoDataElement.textContent || '{}'); 117 const { campaigns } = promoData; 118 119 const currentDate = window.__devPreviewDate ?? Date.now(); 120 const activePromo = campaigns.find((promo) => { 121 const startDate = Date.parse(promo.startDate); 122 const endDate = Date.parse(promo.endDate); 123 return currentDate >= startDate && currentDate <= endDate; 124 }); 125 126 const promoBar = document.getElementById('promo-bar'); 127 if (!promoBar) return; 128 129 // Don't show bar if text is empty or whitespace 130 const hasPromoContent = activePromo?.promoBar?.text?.trim().length > 0; 131 132 if (!hasPromoContent) { 133 promoBar.style.display = 'none'; 134 return; 135 } 136 137 // Populate promo bar content 138 const promoTextEl = document.getElementById('promo-text'); 139 const promoCodeEl = document.getElementById('promo-code'); 140 const promoCodeValueEl = document.getElementById('promo-code-value'); 141 const promoCodeContainer = document.getElementById('promo-code-container'); 142 const separatorLeft = document.getElementById('promo-separator-left'); 143 const separatorRight = document.getElementById('promo-separator-right'); 144 const detailsButton = document.getElementById('details-button'); 145 146 if (promoTextEl && activePromo.promoBar.text) { 147 promoTextEl.textContent = activePromo.promoBar.text; 148 } 149 150 const hasCode = activePromo.promoBar.code && activePromo.promoBar.codeValue; 151 152 // Only show code container and separators if there's a code 153 if (hasCode) { 154 if (promoCodeEl) { 155 promoCodeEl.textContent = activePromo.promoBar.code; 156 } 157 if (promoCodeValueEl) { 158 promoCodeValueEl.textContent = activePromo.promoBar.codeValue; 159 } 160 if (promoCodeContainer) { 161 promoCodeContainer.classList.remove('hidden'); 162 promoCodeContainer.classList.add('flex'); 163 } 164 if (separatorLeft) { 165 separatorLeft.classList.add('md:block'); 166 } 167 if (separatorRight) { 168 separatorRight.classList.add('md:block'); 169 } 170 } else { 171 // No code - show only one separator before details 172 if (separatorRight) { 173 separatorRight.classList.add('md:block'); 174 } 175 } 176 177 if (detailsButton && activePromo.promoBar.details) { 178 detailsButton.textContent = activePromo.promoBar.details; 179 } 180 181 // Populate modal content 182 const modalTitle = document.getElementById('modal-title'); 183 const modalCode = document.getElementById('modal-code'); 184 const modalDate = document.getElementById('modal-date'); 185 const modalTerms = document.getElementById('modal-terms'); 186 187 if (modalTitle && activePromo.promoBar.modal?.title) { 188 modalTitle.innerHTML = activePromo.promoBar.modal.title; 189 } 190 if ( 191 modalCode 192 && activePromo.promoBar.code 193 && activePromo.promoBar.codeValue 194 ) { 195 modalCode.textContent = `${activePromo.promoBar.code} ${activePromo.promoBar.codeValue}`; 196 } 197 if (modalDate && activePromo.promoBar.modal?.date) { 198 modalDate.textContent = activePromo.promoBar.modal.date; 199 } 200 if (modalTerms && activePromo.promoBar.modal?.terms) { 201 modalTerms.textContent = activePromo.promoBar.modal.terms; 202 } 203 204 // Show the promo bar 205 promoBar.style.display = 'flex'; 206 207 // Dialog handlers 208 const modal = document.getElementById('detailsModal'); 209 const closeButton = document.getElementById('close-button'); 210 211 if (detailsButton && modal && closeButton) { 212 detailsButton.addEventListener('click', () => { 213 modal.showModal(); 214 detailsButton.setAttribute('aria-expanded', 'true'); 215 modal.setAttribute('aria-hidden', 'false'); 216 }); 217 218 closeButton.addEventListener('click', () => { 219 modal.close(); 220 detailsButton.setAttribute('aria-expanded', 'false'); 221 modal.setAttribute('aria-hidden', 'true'); 222 }); 223 224 window.addEventListener('click', (event) => { 225 if (event.target !== detailsButton && event.target === modal) { 226 modal.close(); 227 detailsButton.setAttribute('aria-expanded', 'false'); 228 modal.setAttribute('aria-hidden', 'true'); 229 } 230 }); 231 } 232 })(); 233</script>
233 <header> <div class="group" id="nav-auth-container" data-state="logged-out" data-support-tools="non-admin"> <div class="hidden xl:block"> <nav id="top-nav-desktop" class="flex justify-center border-blurb-border-nav border-b"> <ul role="list" class="w-full max-w-360 h-16 px-5 2xl:px-10 flex justify-between whitespace-nowrap"> <div class="flex items-center"> <a href="/"> <svg width="1.02em" height="1em" class="shrink-0 grow-0 text-light-brand-500 h-12.5 w-13" data-icon="custom/blurb-logo"> <symbol id="ai:local:custom/blurb-logo" viewBox="0 0 52 51"><path fill="currentColor" d="M52 .333v40.583H19.5L0 50.656V10.074L19.5.334zM6.5 20.622v12.17h2.629V31.79c.585.787 1.538 1.212 2.629 1.212 2.477 0 4.08-2.07 4.08-4.768s-1.625-4.74-4.08-4.74c-1.076 0-2.051.41-2.63 1.212v-4.083zm14.41 3.073v6.053c0 1.825 1.076 3.253 3.004 3.253 1.127 0 2.08-.476 2.629-1.19v.99h2.606v-9.099h-2.606v5.18c0 1.176-.737 1.804-1.69 1.804-1.062 0-1.315-.765-1.315-1.55v-5.441zm16.196-3.073v12.17h2.63V31.79c.584.787 1.538 1.212 2.628 1.212 2.477 0 4.08-2.07 4.08-4.768s-1.624-4.74-4.08-4.74c-1.076 0-2.05.41-2.629 1.212v-4.083zm-20.307.006V32.8h2.629V20.63h-2.63Zm18.705 2.915c-.939 0-1.712.477-2.203 1.278v-1.126h-2.63v9.104h2.63v-4.004c0-1.84.866-2.64 1.942-2.64.275 0 .55.05.752.137l.007-.008.39-2.59c-.174-.086-.614-.15-.888-.15Zm6.231 2.2c1.337 0 1.965 1.162 1.965 2.526s-.636 2.49-1.965 2.49c-1.328-.001-1.993-1.127-1.993-2.49s.658-2.525 1.993-2.525Zm-30.613 0c1.336 0 1.965 1.162 1.965 2.526s-.636 2.488-1.965 2.488-1.993-1.125-1.993-2.488c0-1.364.657-2.525 1.993-2.525Z"/></symbol><use href="#ai:local:custom/blurb-logo"></use> </svg> </a> <li class="relative h-full" data-submenu-container> <a href="/formats" aria-haspopup="true" aria-expanded="false" class="nav__link-desktop"> Products </a> <ul role="list" data-state="collapsed" class="nav__submenu"> <div class="grid w-full grid-flow-col grid-rows-5"> <li> <a href="/formats" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Shop All </a> </li><li> <a href="/photo-books" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Photo Books </a> </li><li> <a href="/photo-books/layflat-photo-book" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Layflat Books </a> </li><li> <a href="/hardcover-and-paperback-books" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Paperback and Hardcover Books </a> </li><li> <a href="/magazines" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Magazines </a> </li><li> <a href="/custom-notebooks-journals" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Notebooks & Journals </a> </li><li> <a href="/custom-wall-art" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Wall Art </a> </li> </div> </ul> </li><li class="relative h-full" data-submenu-container> <a href="/pricing" aria-haspopup="true" aria-expanded="false" class="nav__link-desktop"> Pricing </a> <ul role="list" data-state="collapsed" class="nav__submenu"> <div class="grid w-full"> <li> <a href="/pricing" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Pricing Calculator </a> </li><li> <a href="/shipping" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Shipping Calculator </a> </li> </div> </ul> </li><li class="relative h-full" data-submenu-container> <a href="/bookmaking-tools" aria-haspopup="true" aria-expanded="false" class="nav__link-desktop">
233 Design Tools </a> <ul role="list" data-state="collapsed" class="nav__submenu"> <div class="grid w-full"> <li> <a href="/bookwright" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> BookWright </a> </li><li> <a href="/bookmaking-tools/adobe-tools" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Adobe Tools </a> </li><li> <a href="/pdf-to-book" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> PDF to Book </a> </li><li> <a href="/templates" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> BookWright Templates </a> </li> </div> </ul> </li><li class="relative h-full" data-submenu-container> <a href="/self-publish" aria-haspopup="true" aria-expanded="false" class="nav__link-desktop"> Sell & Self-Publish </a> <ul role="list" data-state="collapsed" class="nav__submenu"> <div class="grid w-full"> <li> <a href="/sell-through-blurb" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Blurb Bookstore </a> </li><li> <a href="/amazon" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Amazon </a> </li><li> <a href="/ingram" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Ingram </a> </li><li> <a href="/large-order-services" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Large Order Services </a> </li><li> <a href="/print-api-software" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> API Printing </a> </li> </div> </ul> </li><li class="relative h-full" data-submenu-container> <a href="/bookstore" aria-haspopup="true" aria-expanded="false" class="nav__link-desktop"> Bookstore </a> <ul role="list" data-state="collapsed" class="nav__submenu"> <div class="grid w-full grid-flow-col grid-rows-5"> <li> <a href="/bookstore/category" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> All Categories </a> </li><li> <a href="/bookstore/c-arts-photography" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Photography </a> </li><li> <a href="/bookstore/c-portfolios" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Portfolios </a> </li><li> <a href="/bookstore/c-cooking" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Cookbooks </a> </li><li> <a href="/bookstore/c-travel" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Travel </a> </li><li> <a href="/bookstore/c-biographies-memoirs" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Biographies & Memoirs </a> </li><li> <a href="/bookstore/c-children" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Children's Books </a> </li><li> <a href="/bookstore/c-business-economics" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Business & Economics </a> </li><li> <a href="/bookstore/c-literature-fiction" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Literature & Fiction </a> </li> </div> </ul> </li><li class="relative h-full" data-submenu-container> <a href="https://support.blurb.com/" aria-haspopup="true" aria-expanded="false" class="nav__link-desktop">
233 Resources </a> <ul role="list" data-state="collapsed" class="nav__submenu"> <div class="grid w-full"> <li> <a href="/blog" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Blog </a> </li><li> <a href="/templates" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> BookWright Templates </a> </li><li> <a href="https://support.blurb.com/hc/en-us" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Help Center </a> </li><li> <a href="/large-order-services" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> Large Order Services </a> </li><li> <a href="/print-api-software" class="nav__link-desktop hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> API Printing </a> </li> </div> </ul> </li> </div> <div class="flex items-center"> <a id="sign_up" class="nav__link-desktop group-data-[state=logged-in]:hidden" href="/my/account/register" data-event="sign_up_click"> Sign Up </a> <a class="nav__link-desktop group-data-[state=logged-in]:hidden" href="/my/account/login" data-event="log_in_click"> Log In </a> <a id="support-tools" class="nav__link-desktop group-data-[support-tools=non-admin]:hidden" href="/admin/support" data-event="support_tools_click"> Support Tools </a> <a class="nav__link-desktop group-data-[state=logged-out]:hidden" href="/my/account" data-event="settings_click"> Settings </a> <a class="nav__link-desktop group-data-[state=logged-out]:hidden" href="https://support.blurb.com/hc/en-ca" data-event="help_click"> Help </a> <a class="nav__link-desktop group-data-[state=logged-out]:hidden" href="/my/account/logout" data-event="log_out_click"> Log Out </a> <li class="relative h-full shrink-0" data-submenu-container> <button aria-haspopup="true" aria-expanded="false" class="h-full px-4"> <div> <img src="https://assets.blurb.com/_astro/flag_canada.C8RP_wOx.svg" width="24" height="18" alt="Canada Flag"> </div> </button> <ul role="list" data-state="collapsed" class="nav__submenu left-1/2 -translate-x-1/2"> <div class="grid w-max grid-flow-col grid-rows-6"> <li> <a href="https://www.blurb.com/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_us.DI1oXf61.svg" width="24" height="18" alt="US Flag"> </div> <span>United States</span> </a> </li><li> <a href="https://au.blurb.com/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_australia.BpCZtgID.svg" width="24" height="18" alt="Australia Flag"> </div> <span>Australia</span> </a> </li><li> <a href="https://br.blurb.com/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_portugal.CRUH3iMu.svg" width="24" height="18" alt="Portugal Flag"> </div> <span>Portugal</span> </a> </li><li> <a href="https://nl.blurb.com/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_netherlands.rKYC6362.svg" width="24" height="18" alt="Netherlands Flag"> </div> <span>Netherlands</span> </a> </li><li> <a href="https://it.blurb.com/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_italy.Ce0ovv1D.svg" width="24" height="18" alt="Italy Flag"> </div> <span>Italy</span> </a> </li><li> <a href="https://www.blurb.co.uk/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_uk.CI53ydmv.svg" width="24" height="18" alt="UK Flag"> </div> <span>United Kingdom</span> </a> </li><li> <a href="https://www.blurb.fr/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_france.G3R2y_Xm.svg" width="24" height="18" alt="France Flag"> </div> <span>France</span> </a> </li><li> <a href="https://www.blurb.de/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_germany.CJLvQsGU.svg" width="24" height="18" alt="Germany Flag"> </div> <span>Germany</span> </a> </li><li> <a href="https://www.blurb.es/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_spain.DG4ZsqTL.svg" width="24" height="18" alt="Spain Flag"> </div> <span>Spain</span> </a> </li><li> <a href="https://www.blurb.ca/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_canada.C8RP_wOx.svg" width="24" height="18" alt="Canada Flag"> </div> <span>Canada (English)</span> </a> </li><li> <a href="https://fr.blurb.ca/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_canada.C8RP_wOx.svg" width="24" height="18" alt="Canada Flag"> </div> <span>Canada (French)</span> </a> </li><li> <a href="https://www.blurb.com/formats" class="nav__link-desktop flex items-center gap-2 hover:bg-blurb-bg-gray-subtler-hover rounded-md min-w-55"> <div> <img src="https://assets.blurb.com/_astro/flag_world.C9Tg6vPN.svg" width="24" height="18" alt="World Flag"> </div> <span>Other Countries</span> </a> </li> </div> </ul> </li> <a id="cart-link-desktop" href="/bookstore/cart" class="nav__link-desktop hidden" aria-label="Cart"> <div class="relative"> <svg width="1em" height="1em" class="shrink-0 grow-0 text-3xl" data-icon="material-symbols:shopping-cart-rounded">
233 <symbol id="ai:material-symbols:shopping-cart-rounded" viewBox="0 0 24 24"><path fill="currentColor" d="M7 22q-.825 0-1.412-.587T5 20t.588-1.412T7 18t1.413.588T9 20t-.587 1.413T7 22m10 0q-.825 0-1.412-.587T15 20t.588-1.412T17 18t1.413.588T19 20t-.587 1.413T17 22M5.2 4h14.75q.575 0 .875.513t.025 1.037l-3.55 6.4q-.275.5-.737.775T15.55 13H8.1L7 15h11q.425 0 .713.288T19 16t-.288.713T18 17H7q-1.125 0-1.7-.987t-.05-1.963L6.6 11.6L3 4H2q-.425 0-.712-.288T1 3t.288-.712T2 2h1.625q.275 0 .525.15t.375.425z"/></symbol><use href="#ai:material-symbols:shopping-cart-rounded"></use> </svg> <span id="cart-count-desktop" class="bg-light-brand-500 absolute -top-2 -right-2 flex h-5 w-5 items-center justify-center rounded-full text-xs leading-none font-semibold text-white"> 2340 235</span> </div> </a> <div class="pl-4"> <a class="inline-flex justify-center lg:text-normal font-sans whitespace-nowrap cursor-pointer transition-all duration-150 ease-in-out py-2 items-center rounded-sm no-underline gap-2 px-6 min-w-25 text-base/6 text-blurb-text-inverse bg-blurb-bg-brand hover:bg-blurb-bg-brand-hover hover:button-shadow-light-blue-800 active:bg-blurb-bg-brand-active active:button-shadow-light-blue-950 h-9 group-data-[state=logged-in]:hidden" href="/my/account/register">Start Project </a> <a class="inline-flex justify-center lg:text-normal font-sans whitespace-nowrap cursor-pointer transition-all duration-150 ease-in-out py-2 items-center rounded-sm no-underline gap-2 px-6 min-w-25 text-base/6 text-blurb-text-inverse bg-blurb-bg-brand hover:bg-blurb-bg-brand-hover hover:button-shadow-light-blue-800 active:bg-blurb-bg-brand-active active:button-shadow-light-blue-950 h-9 group-data-[state=logged-out]:hidden" href="/my/dashboard">My Dashboard </a> </div> </div> </ul> </nav>
235<script type="module" src="https://assets.blurb.com/_astro/NavDesktop.astro_astro_type_script_index_0_lang.DhA9CHHm.js"></script>
235 </div> <div class="block xl:hidden"> <div class="flex items-center justify-between p-4"> <a href="/"> <svg width="1.02em" height="1em" viewBox="0 0 52 51" class="shrink-0 grow-0 text-light-brand-500 h-10.5 w-10.5" data-icon="custom/blurb-logo"> <use href="#ai:local:custom/blurb-logo"></use> </svg> </a> <button type="button" class="p-2" aria-label="Open navigation menu" aria-expanded="false" aria-controls="mobile-menu-overlay" id="mobile-menu-trigger"> <svg width="1em" height="1em" class="shrink-0 grow-0 text-3xl" data-icon="material-symbols:menu-rounded"> <symbol id="ai:material-symbols:menu-rounded" viewBox="0 0 24 24"><path fill="currentColor" d="M4 18q-.425 0-.712-.288T3 17t.288-.712T4 16h16q.425 0 .713.288T21 17t-.288.713T20 18zm0-5q-.425 0-.712-.288T3 12t.288-.712T4 11h16q.425 0 .713.288T21 12t-.288.713T20 13zm0-5q-.425 0-.712-.288T3 7t.288-.712T4 6h16q.425 0 .713.288T21 7t-.288.713T20 8z"/></symbol><use href="#ai:material-symbols:menu-rounded"></use> </svg> </button> </div> <div id="mobile-menu-overlay" class="fixed inset-0 z-50 flex hidden flex-col bg-white" role="dialog" aria-modal="true" aria-labelledby="mobile-menu-title"> <div class="border-blurb-border-subtle flex flex-shrink-0 items-center justify-between border-b p-4"> <a href="/"> <svg width="1.02em" height="1em" viewBox="0 0 52 51" class="shrink-0 grow-0 text-light-brand-500 h-10 w-10.5" data-icon="custom/blurb-logo"> <use href="#ai:local:custom/blurb-logo"></use> </svg> </a> <h2 id="mobile-menu-title" class="absolute left-[-10000px] h-px w-px overflow-hidden"> Navigation menu </h2> <button type="button" class="p-2" aria-label="Close navigation menu" id="mobile-menu-close"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="shrink-0 grow-0 text-3xl" data-icon="material-symbols:close-rounded"> <use href="#ai:material-symbols:close-rounded"></use> </svg> </button> </div> <nav class="min-h-0 flex-1 overflow-y-auto"> <div class="p-4"> <div class="accordion border-blurb-border-subtle flex w-full flex-col gap-2"> <details name="mobile-nav-main" class="group select-none"> <summary class="text-blurb-text-bold flex w-full cursor-pointer items-center justify-start gap-2 py-3 transition-colors duration-300 hover:bg-blurb-bg-gray-subtler-hover active:bg-blurb-bg-gray-subtler-active focus-visible:bg-blurb-bg-gray-subtler-active rounded-sm px-4"> <div aria-details="mobile-nav-main" class="flex w-full items-center justify-between gap-2"> <h3 class="font-sans text-base leading-[1.5]">Products</h3> <span class="pointer-events-none"> <svg width="1em" height="1em" class="shrink-0 grow-0 fill-blurb-text-bold ease h-6 w-6 rotate-0 transition-transform duration-500 group-open:rotate-180" data-icon="material-symbols:keyboard-arrow-down-rounded"> <symbol id="ai:material-symbols:keyboard-arrow-down-rounded" viewBox="0 0 24 24"><path fill="currentColor" d="M12 14.975q-.2 0-.375-.062T11.3 14.7l-4.6-4.6q-.275-.275-.275-.7t.275-.7t.7-.275t.7.275l3.9 3.9l3.9-3.9q.275-.275.7-.275t.7.275t.275.7t-.275.7l-4.6 4.6q-.15.15-.325.213t-.375.062"/></symbol><use href="#ai:material-symbols:keyboard-arrow-down-rounded"></use> </svg> </span> </div> </summary> </details> <div id="mobile-nav-main" data-details="accordion content" inert> <div class="transition-padding text-blurb-text-bold flex flex-col gap-4 py-2 text-sm px-4"> <ul role="list" class="space-y-1"> <li> <a href="/formats" class="nav__link-mobile"> Overview </a> </li><li> <a href="/formats" class="nav__link-mobile"> Shop All </a> </li><li> <a href="/photo-books" class="nav__link-mobile"> Photo Books </a> </li><li> <a href="/photo-books/layflat-photo-book" class="nav__link-mobile"> Layflat Books </a> </li><li> <a href="/hardcover-and-paperback-books" class="nav__link-mobile"> Paperback and Hardcover Books </a> </li><li> <a href="/magazines" class="nav__link-mobile"> Magazines </a> </li><li> <a href="/custom-notebooks-journals" class="nav__link-mobile"> Notebooks & Journals </a> </li><li> <a href="/custom-wall-art" class="nav__link-mobile"> Wall Art </a> </li> </ul> </div> </div>
235<script type="module">const l=document.querySelectorAll("details"),o=e=>{const t=e.closest(".accordion");Array.from(t?.querySelectorAll("details[name]")||[])?.forEach(n=>{n!==e&&(n.open=!1)})};l.forEach(e=>{e.addEventListener("toggle",()=>{const t=e.nextElementSibling;e.open?(o(e),t?.removeAttribute("inert")):t?.setAttribute("inert","")})}); 236//# sourceMappingURL=AccordionItem.astro_astro_type_script_index_0_lang.BPDP3QSJ.js.map</script>
236<details name="mobile-nav-main" class="group select-none"> <summary class="text-blurb-text-bold flex w-full cursor-pointer items-center justify-start gap-2 py-3 transition-colors duration-300 hover:bg-blurb-bg-gray-subtler-hover active:bg-blurb-bg-gray-subtler-active focus-visible:bg-blurb-bg-gray-subtler-active rounded-sm px-4"> <div aria-details="mobile-nav-main" class="flex w-full items-center justify-between gap-2"> <h3 class="font-sans text-base leading-[1.5]">Pricing</h3> <span class="pointer-events-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="shrink-0 grow-0 fill-blurb-text-bold ease h-6 w-6 rotate-0 transition-transform duration-500 group-open:rotate-180" data-icon="material-symbols:keyboard-arrow-down-rounded"> <use href="#ai:material-symbols:keyboard-arrow-down-rounded"></use> </svg> </span> </div> </summary> </details> <div id="mobile-nav-main" data-details="accordion content" inert> <div class="transition-padding text-blurb-text-bold flex flex-col gap-4 py-2 text-sm px-4"> <ul role="list" class="space-y-1"> <li> <a href="/pricing" class="nav__link-mobile"> Overview </a> </li><li> <a href="/pricing" class="nav__link-mobile"> Pricing Calculator </a> </li><li> <a href="/shipping" class="nav__link-mobile"> Shipping Calculator </a> </li> </ul> </div> </div> <details name="mobile-nav-main" class="group select-none"> <summary class="text-blurb-text-bold flex w-full cursor-pointer items-center justify-start gap-2 py-3 transition-colors duration-300 hover:bg-blurb-bg-gray-subtler-hover active:bg-blurb-bg-gray-subtler-active focus-visible:bg-blurb-bg-gray-subtler-active rounded-sm px-4"> <div aria-details="mobile-nav-main" class="flex w-full items-center justify-between gap-2"> <h3 class="font-sans text-base leading-[1.5]">Design Tools</h3> <span class="pointer-events-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="shrink-0 grow-0 fill-blurb-text-bold ease h-6 w-6 rotate-0 transition-transform duration-500 group-open:rotate-180" data-icon="material-symbols:keyboard-arrow-down-rounded"> <use href="#ai:material-symbols:keyboard-arrow-down-rounded"></use> </svg> </span> </div> </summary> </details> <div id="mobile-nav-main" data-details="accordion content" inert> <div class="transition-padding text-blurb-text-bold flex flex-col gap-4 py-2 text-sm px-4"> <ul role="list" class="space-y-1"> <li> <a href="/bookmaking-tools" class="nav__link-mobile"> Overview </a> </li><li> <a href="/bookwright" class="nav__link-mobile"> BookWright </a> </li><li> <a href="/bookmaking-tools/adobe-tools" class="nav__link-mobile"> Adobe Tools </a> </li><li> <a href="/pdf-to-book" class="nav__link-mobile"> PDF to Book </a> </li><li> <a href="/templates" class="nav__link-mobile"> BookWright Templates </a> </li> </ul> </div> </div> <details name="mobile-nav-main" class="group select-none"> <summary class="text-blurb-text-bold flex w-full cursor-pointer items-center justify-start gap-2 py-3 transition-colors duration-300 hover:bg-blurb-bg-gray-subtler-hover active:bg-blurb-bg-gray-subtler-active focus-visible:bg-blurb-bg-gray-subtler-active rounded-sm px-4"> <div aria-details="mobile-nav-main" class="flex w-full items-center justify-between gap-2"> <h3 class="font-sans text-base leading-[1.5]">Sell & Self-Publish</h3> <span class="pointer-events-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="shrink-0 grow-0 fill-blurb-text-bold ease h-6 w-6 rotate-0 transition-transform duration-500 group-open:rotate-180" data-icon="material-symbols:keyboard-arrow-down-rounded"> <use href="#ai:material-symbols:keyboard-arrow-down-rounded"></use> </svg> </span> </div> </summary> </details> <div id="mobile-nav-main" data-details="accordion content" inert> <div class="transition-padding text-blurb-text-bold flex flex-col gap-4 py-2 text-sm px-4"> <ul role="list" class="space-y-1"> <li> <a href="/self-publish" class="nav__link-mobile"> Overview </a> </li><li> <a href="/sell-through-blurb" class="nav__link-mobile"> Blurb Bookstore </a> </li><li> <a href="/amazon" class="nav__link-mobile"> Amazon </a> </li><li> <a href="/ingram" class="nav__link-mobile"> Ingram </a> </li><li> <a href="/large-order-services" class="nav__link-mobile"> Large Order Services </a> </li><li> <a href="/print-api-software" class="nav__link-mobile"> API Printing </a> </li> </ul> </div> </div> <details name="mobile-nav-main" class="group select-none"> <summary class="text-blurb-text-bold flex w-full cursor-pointer items-center justify-start gap-2 py-3 transition-colors duration-300 hover:bg-blurb-bg-gray-subtler-hover active:bg-blurb-bg-gray-subtler-active focus-visible:bg-blurb-bg-gray-subtler-active rounded-sm px-4"> <div aria-details="mobile-nav-main" class="flex w-full items-center justify-between gap-2"> <h3 class="font-sans text-base leading-[1.5]">Bookstore</h3> <span class="pointer-events-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="shrink-0 grow-0 fill-blurb-text-bold ease h-6 w-6 rotate-0 transition-transform duration-500 group-open:rotate-180" data-icon="material-symbols:keyboard-arrow-down-rounded"> <use href="#ai:material-symbols:keyboard-arrow-down-rounded"></use> </svg> </span> </div> </summary> </details>
236 <div id="mobile-nav-main" data-details="accordion content" inert> <div class="transition-padding text-blurb-text-bold flex flex-col gap-4 py-2 text-sm px-4"> <ul role="list" class="space-y-1"> <li> <a href="/bookstore" class="nav__link-mobile"> Overview </a> </li><li> <a href="/bookstore/category" class="nav__link-mobile"> All Categories </a> </li><li> <a href="/bookstore/c-arts-photography" class="nav__link-mobile"> Photography </a> </li><li> <a href="/bookstore/c-portfolios" class="nav__link-mobile"> Portfolios </a> </li><li> <a href="/bookstore/c-cooking" class="nav__link-mobile"> Cookbooks </a> </li><li> <a href="/bookstore/c-travel" class="nav__link-mobile"> Travel </a> </li><li> <a href="/bookstore/c-biographies-memoirs" class="nav__link-mobile"> Biographies & Memoirs </a> </li><li> <a href="/bookstore/c-children" class="nav__link-mobile"> Children's Books </a> </li><li> <a href="/bookstore/c-business-economics" class="nav__link-mobile"> Business & Economics </a> </li><li> <a href="/bookstore/c-literature-fiction" class="nav__link-mobile"> Literature & Fiction </a> </li> </ul> </div> </div> <details name="mobile-nav-main" class="group select-none"> <summary class="text-blurb-text-bold flex w-full cursor-pointer items-center justify-start gap-2 py-3 transition-colors duration-300 hover:bg-blurb-bg-gray-subtler-hover active:bg-blurb-bg-gray-subtler-active focus-visible:bg-blurb-bg-gray-subtler-active rounded-sm px-4"> <div aria-details="mobile-nav-main" class="flex w-full items-center justify-between gap-2"> <h3 class="font-sans text-base leading-[1.5]">Resources</h3> <span class="pointer-events-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="shrink-0 grow-0 fill-blurb-text-bold ease h-6 w-6 rotate-0 transition-transform duration-500 group-open:rotate-180" data-icon="material-symbols:keyboard-arrow-down-rounded"> <use href="#ai:material-symbols:keyboard-arrow-down-rounded"></use> </svg> </span> </div> </summary> </details> <div id="mobile-nav-main" data-details="accordion content" inert> <div class="transition-padding text-blurb-text-bold flex flex-col gap-4 py-2 text-sm px-4"> <ul role="list" class="space-y-1"> <li> <a href="https://support.blurb.com/" class="nav__link-mobile"> Overview </a> </li><li> <a href="/blog" class="nav__link-mobile"> Blog </a> </li><li> <a href="/templates" class="nav__link-mobile"> BookWright Templates </a> </li><li> <a href="https://support.blurb.com/hc/en-us" class="nav__link-mobile"> Help Center </a> </li><li> <a href="/large-order-services" class="nav__link-mobile"> Large Order Services </a> </li><li> <a href="/print-api-software" class="nav__link-mobile"> API Printing </a> </li> </ul> </div> </div> </div> <div class="border-blurb-border-subtle mt-6 space-y-4 border-t pt-6"> <div class="space-y-2"> <a id="cart-link-mobile" href="/bookstore/cart" class="nav__link-mobile relative flex hidden items-center gap-2" aria-label="Cart"> <div class="relative"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="shrink-0 grow-0 text-3xl" data-icon="material-symbols:shopping-cart-rounded"> <use href="#ai:material-symbols:shopping-cart-rounded"></use> </svg> <span id="cart-count-mobile" class="bg-light-brand-500 absolute -top-2 -right-2 flex h-5 w-5 items-center justify-center rounded-full text-xs leading-none font-semibold text-white"> 2370 238</span> </div> <span>Cart</span> </a> <a id="sign_up" href="/my/account/register" class="nav__link-mobile group-data-[state=logged-in]:hidden" data-event="sign_up_click"> Sign Up </a> <a href="/my/account/login" class="nav__link-mobile group-data-[state=logged-in]:hidden" data-event="log_in_click"> Log In </a> <a href="/my/dashboard" class="nav__link-mobile group-data-[state=logged-out]:hidden" data-event="my_dashboard_click"> My Dashboard </a> <a href="/admin/support" class="nav__link-mobile group-data-[support-tools=non-admin]:hidden" data-event="support_tools_click"> Support Tools </a> <a href="/my/account" class="nav__link-mobile group-data-[state=logged-out]:hidden" data-event="settings_click"> Settings </a> <a href="https://support.blurb.com/hc/en-ca" class="nav__link-mobile group-data-[state=logged-out]:hidden" data-event="help_click"> Help </a> <a href="/my/account/logout" class="nav__link-mobile group-data-[state=logged-out]:hidden" data-event="log_out_click"> Log Out </a> </div> <div class="accordion border-blurb-border-subtle flex w-full flex-col gap-2">
238 <details name="mobile-nav-language" class="group select-none"> <summary class="text-blurb-text-bold flex w-full cursor-pointer items-center justify-start gap-2 py-3 transition-colors duration-300 hover:bg-blurb-bg-gray-subtler-hover active:bg-blurb-bg-gray-subtler-active focus-visible:bg-blurb-bg-gray-subtler-active rounded-sm px-4"> <div aria-details="mobile-nav-language" class="flex w-full items-center justify-between gap-2"> <div class="flex items-center gap-2"> <div class="flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_canada.C8RP_wOx.svg" width="24" height="18" alt="Canada Flag"> </div> <span>Canada (English)</span> </div> </div> <span class="pointer-events-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="shrink-0 grow-0 fill-blurb-text-bold ease h-6 w-6 rotate-0 transition-transform duration-500 group-open:rotate-180" data-icon="material-symbols:keyboard-arrow-down-rounded"> <use href="#ai:material-symbols:keyboard-arrow-down-rounded"></use> </svg> </span> </div> </summary> </details> <div id="mobile-nav-language" data-details="accordion content" inert> <div class="transition-padding text-blurb-text-bold flex flex-col gap-4 py-2 text-sm px-4"> <ul role="list" class="space-y-1"> <li> <a href="https://www.blurb.com/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_us.DI1oXf61.svg" width="20" height="15" alt="US Flag"> </div> <span>United States</span> </a> </li><li> <a href="https://au.blurb.com/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_australia.BpCZtgID.svg" width="20" height="15" alt="Australia Flag"> </div> <span>Australia</span> </a> </li><li> <a href="https://br.blurb.com/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_portugal.CRUH3iMu.svg" width="20" height="15" alt="Portugal Flag"> </div> <span>Portugal</span> </a> </li><li> <a href="https://nl.blurb.com/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_netherlands.rKYC6362.svg" width="20" height="15" alt="Netherlands Flag"> </div> <span>Netherlands</span> </a> </li><li> <a href="https://it.blurb.com/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_italy.Ce0ovv1D.svg" width="20" height="15" alt="Italy Flag"> </div> <span>Italy</span> </a> </li><li> <a href="https://www.blurb.co.uk/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_uk.CI53ydmv.svg" width="20" height="15" alt="UK Flag"> </div> <span>United Kingdom</span> </a> </li><li> <a href="https://www.blurb.fr/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_france.G3R2y_Xm.svg" width="20" height="15" alt="France Flag"> </div> <span>France</span> </a> </li><li> <a href="https://www.blurb.de/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_germany.CJLvQsGU.svg" width="20" height="15" alt="Germany Flag"> </div> <span>Germany</span> </a> </li><li> <a href="https://www.blurb.es/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_spain.DG4ZsqTL.svg" width="20" height="15" alt="Spain Flag"> </div> <span>Spain</span> </a> </li><li> <a href="https://www.blurb.ca/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_canada.C8RP_wOx.svg" width="20" height="15" alt="Canada Flag"> </div> <span>Canada (English)</span> </a> </li><li> <a href="https://fr.blurb.ca/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_canada.C8RP_wOx.svg" width="20" height="15" alt="Canada Flag"> </div> <span>Canada (French)</span> </a> </li><li> <a href="https://www.blurb.com/formats" class="nav__link-mobile flex items-center gap-2"> <div aria-hidden="true"> <img src="https://assets.blurb.com/_astro/flag_world.C9Tg6vPN.svg" width="20" height="15" alt="World Flag"> </div> <span>Other Countries</span> </a> </li> </ul> </div> </div> </div> </div> </div> </nav> </div>
238<script type="module">const e=document.getElementById("mobile-menu-trigger"),t=document.getElementById("mobile-menu-overlay"),s=document.getElementById("mobile-menu-close");if(e&&t&&s){let n=!1;const i=document.querySelector("main"),o=document.querySelector("footer"),c=()=>{n=!0,t.classList.remove("hidden"),document.body.style.overflow="hidden",i&&i.setAttribute("inert",""),o&&o.setAttribute("inert",""),e.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{s.focus()})},r=()=>{n=!1,t.classList.add("hidden"),document.body.style.overflow="",i&&i.removeAttribute("inert"),o&&o.removeAttribute("inert"),e.setAttribute("aria-expanded","false"),e.focus()};e.addEventListener("click",c),s.addEventListener("click",r),t.addEventListener("click",d=>{d.target===t&&r()}),document.addEventListener("keydown",d=>{n&&d.key==="Escape"&&(d.preventDefault(),r())}),document.addEventListener("visibilitychange",()=>{document.hidden&&n&&r()})} 239//# sourceMappingURL=NavMobile.astro_astro_type_script_index_0_lang.DMeGbvWY.js.map</script>
239 </div> </div>
239<script> 240 function getCookie(name) { 241 if (typeof document === 'undefined') return undefined; 242 const value = `; ${document.cookie}`; 243 const parts = value.split(`; ${name}=`); 244 if (parts.length === 2) return parts.pop()?.split(';').shift(); 245 return undefined; 246 } 247 248 function getDynamicMenuData() { 249 const cookie = getCookie('dm'); 250 if (!cookie) return null; 251 252 try { 253 const decoded = decodeURIComponent(cookie); 254 return JSON.parse(decoded); 255 } catch { 256 return null; 257 } 258 } 259 260 function isLoggedIn() { 261 const userData = getDynamicMenuData(); 262 return !!(userData?.username || userData?.user_id); 263 } 264 265 function isSupportToolsActive() { 266 const userData = getDynamicMenuData(); 267 return !!userData?.support_tools; 268 } 269 270 function getCartCount() { 271 const userData = getDynamicMenuData(); 272 if (!userData?.cart_count) return 0; 273 274 const match = userData.cart_count.match(/^(\d+)/); 275 if (match && match[1]) { 276 return parseInt(match[1], 10); 277 } 278 return 0; 279 } 280 281 const loggedIn = isLoggedIn(); 282 const cartCount = getCartCount(); 283 const supportTools = isSupportToolsActive(); 284 285 const authContainer = document.getElementById('nav-auth-container'); 286 if (authContainer) { 287 authContainer.dataset.state = loggedIn ? 'logged-in' : 'logged-out'; 288 } 289 290 if (supportToolsContainer) { 291 authContainer.dataset.supportTools = supportTools ? 'admin' : 'non-admin'; 292 } 293 294 if (cartCount > 0) { 295 const cartLinkDesktop = document.getElementById('cart-link-desktop'); 296 const cartCountDesktop = document.getElementById('cart-count-desktop'); 297 if (cartLinkDesktop && cartCountDesktop) { 298 cartLinkDesktop.classList.remove('hidden'); 299 cartCountDesktop.textContent = cartCount.toString(); 300 } 301 302 const cartLinkMobile = document.getElementById('cart-link-mobile'); 303 const cartCountMobile = document.getElementById('cart-count-mobile'); 304 if (cartLinkMobile && cartCountMobile) { 305 cartLinkMobile.classList.remove('hidden'); 306 cartCountMobile.textContent = cartCount.toString(); 307 } 308 } 309</script>
309 </header> <main class="@container flex flex-col overflow-x-hidden"> <div class="flex flex-col items-center gap-10 pt-10 pb-6"> <nav class="text-blurb-text-subtle flex items-center text-sm" aria-label="Breadcrumb"> <ol class="flex items-center space-x-2"> <li class="flex items-center"> <a class="inline-flex lg:text-normal font-sans whitespace-nowrap cursor-pointer transition-all duration-150 ease-in-out no-underline items-start justify-start text-blurb-text-link hover:text-blurb-text-link-hover active:text-blurb-text-link-hover gap-1 text-sm/5 px-0 min-w-0 font-normal" href="/">Home </a> </li><li class="flex items-center"> <svg width="1em" height="1em" class="shrink-0 grow-0 text-blurb-text-subtle mr-2 h-4 w-4" data-icon="material-symbols:chevron-right-rounded"> <symbol id="ai:material-symbols:chevron-right-rounded" viewBox="0 0 24 24"><path fill="currentColor" d="M12.6 12L8.7 8.1q-.275-.275-.275-.7t.275-.7t.7-.275t.7.275l4.6 4.6q.15.15.213.325t.062.375t-.062.375t-.213.325l-4.6 4.6q-.275.275-.7.275t-.7-.275t-.275-.7t.275-.7z"/></symbol><use href="#ai:material-symbols:chevron-right-rounded"></use> </svg> <span class="text-blurb-text-subtle">Shop All</span> </li> </ol> </nav> <div class="flex flex-col items-center gap-4"> <div class="lg:text-wrap-normal flex flex-col text-balance text-pretty"> <h1 class="block w-full whitespace-pre-line text-left text-pretty text-5xl lg:text-9xl">Shop All Products</h1> </div> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
309<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script>
309<script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script>
309<astro-island uid="1gg5jT" prefix="r1" component-url="https://assets.blurb.com/_astro/PriceModal.DtweT2Ov.js" component-export="PriceModal" renderer-url="https://assets.blurb.com/_astro/client.BSMExnCO.js" props="{"title":[0,"What changes the price?"],"modalBackText":[0,"Back"],"modalCloseText":[0,"Close"],"modalTipText":[0,"Tip"],"steps":[0,{"coverOptions":[0,{"title":[0,"Cover Options"],"description":[0,"Soft and flexible or bold and bookstore-readyâyour cover sets the tone. Whether you opt for an easygoing softcover or a sleek hardcover with ImageWrap, your choice will shape how your book looks, feels, and what it costs."],"tip":[0,"Want to make it unforgettable? Go for a linen hardcover with a dust jacketâperfect for heirloom-worthy keepsakes or showcasing your finest work. Starting at CAD $32.00 for Photo Books, CAD $15.99 for Hardcover Books"],"nextText":[0,"Next: Size"],"content":[0,{"imageWrapHardcover":[0,{"heading":[0,"ImageWrap Hardcover"],"text":[0,"Starting at CAD $32.00 for Photo Books, CAD $14.99 for Hardcover Books"],"imgAlt":[0,"Hardcover book with imagewrap cover shown close-up and closed with a Parisian cafe scene"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/ImageWrap Hardcover - Binding-optimized.BW32JNmG.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}],"softcover":[0,{"heading":[0,"Softcover"],"text":[0,"Starting at CAD $16.00 for Photo Books, CAD $4.99 for Paperback Books"],"imgAlt":[0,"Close-up of a softcover photo book shown closed with an architectural design cover."],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Softcover - Binding-optimized.KvGCTN7H.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}]}]}],"size":[0,{"title":[0,"Size"],"description":[0,"Choose the perfect size for your story and budgetâwhether a handy 7x7 to carry everywhere, or a striking 12x12 that makes a statement on any coffee table."],"tip":[0,"Want to keep things budget-friendly? Standard paperback or hardcover sizes usually give you the best bang for your buckâespecially for word-heavy projects like novels or memoirs."],"nextText":[0,"Next: Paper"],"content":[0,{"paperback":[0,{"heading":[0,"7x7 ImageWrap Hardcover Photo Book"],"text":[0,"Starting at CAD $32.00"],"imgAlt":[0,"A 7x7 photo book with an ImageWrap hardcover featuring a recurring geometric pattern on the front cover"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/7x7 Photo ImageWrap Hardcover-optimized.LD9QMDl3.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}],"hardcover":[0,{"heading":[0,"12x12 ImageWrap Hardcover Photo Book"],"text":[0,"Starting at CAD $67.00"],"imgAlt":[0,"A 12x12 photo book with an ImageWrap hardcover featuring a recurring geometric pattern on the front cover"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/12x12 Photo ImageWrap Hardcover-optimized.CGN2a5EZ.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}]}]}],"paper":[0,{"title":[0,"Paper"],"description":[0,"Your paper choice should match your contentâvibrant photos, detailed illustrations, or large amounts of text. Each type of paper changes how colors appear, how pages feel, and how much your book costs."],"tip":[0,"
309Paper makes the difference! Each book format offers tailored paper typesâpremium and archival for photo books, affordable and versatile for hardcover and paperback books, and practical or playful for notebooks."],"nextText":[0,"Next: Number of pages"],"content":[0,{"premium":[0,{"heading":[0,"Premium Lustre Photo Book Paper"],"text":[0,"Starting at CAD $16.00"],"imgAlt":[0,"A close up of an interior page spread in a photo book made with Premium Lustre paper"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Paper Type - Pearl-optimized.DRFRMvMM.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}],"standard":[0,{"heading":[0,"Standard Paperback and Hardcover Book Paper"],"text":[0,"Starting at CAD $5.99"],"imgAlt":[0,"A close up of an interior page spread in a book made with Standard paper"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Paper Type - Standard-optimized.Bz7pHe5d.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}]}]}],"pages":[0,{"title":[0,"Number of pages"],"description":[0,"Every extra page adds to the paper, ink, and bindingâso more pages mean more spend."],"tip":[0,"Not all paper types cost the same per page, so cutting pages isnât the only way to stay on budget. Consider how paper choice and page count work together to shape your book."],"nextText":[0,"Next: Binding"],"content":[0,{"minimum":[0,{"text":[0,"The minimum number of pages (20 for Photo Books, 24 for Paperback and Hardcover Books) determines the starting price point along with the format, cover, and size of your book."],"imgAlt":[0,"A graphic showing a blank two-page book spread with an additional page spread behind it. The text below reads 20 Page Minimum."],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Page Minimum-optimized.C5C2gzuY.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}],"additional":[0,{"text":[0,"Adding a spread (2-pages) increases the price depending on the paper type you choose. Photo Book papers start at CAD $0.43 per additional page while Paperback and Hardcover Book papers start at CAD $0.04 per additional page."],"imgAlt":[0,"A graphic showing a blank two-page book spread highlighted with a blue edge and with additional page spreads behind it, representing the process of adding pages to a book. The text below reads Additional Pages."],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Additional Pages-optimized.DjIO0t6l.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}]}]}],"binding":[0,{"title":[0,"Binding"],"description":[0,"How your book is bound changes its look, feel, how long it lasts (and yes, the price too)."],"tip":[0,"Think about how your book will live in the world. Wire-O is great for flipping, jotting, and daily use. Perfect Binding gives you that polished, pro look. And if youâre going all out with visuals, Layflat delivers the wow factor."],"nextText":[0,"Close"],"content":[0,{"wireO":[0,{"heading":[0,"Wire-O Binding"],"subheading":[0,"Budget-friendly, practical"],"imgAlt":[0,"Open wire-o softcover notebook with black wire-O binding, one page designed purple, the other with lined pages"],"text":[0,"Pages lie flat for effortless writing and easy readingâideal for planners, workbooks, guides, and manuals that need to work as hard as you do."],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Wire-O - Binding-optimized.DUqwe-dU.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}],"perfect":[0,{"heading":[0,"Perfect Binding"],"subheading":[0,"Mid-range, polished"],"imgAlt":[0,"Open softcover notebook with orange gradient imagery on one side and dotted grid paper interior pages displayed"],"text":[0,"Delivers the crisp, square spine and polished finish you'd expect from a professionally published bookâbuilt to impress and made to last."],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Perfect Binding-optimized.BuVc_m8N.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}],"layflat":[0,{"heading":[0,"Layflat Binding"],"subheading":[0,"Premium, elegant"],"imgAlt":[0,"Close-up of layflat photo book binding with a photo of people with champagne glasses"],"text":[0,"Opens all the way flat, so your images flow edge to edge without interruptionâperfect for showcasing standout photography, wedding albums, or anything that deserves the full spotlight."],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Layflat Binding-optimized.C4p50j_1.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"]}]}]}]}]}]}" ssr client="load" opts="{"name":"PriceModal","value":true}" await-children><button type="button" tabindex="0" aria-expanded="false" aria-haspopup="dialog" class="text-blurb-text-link hover:text-blurb-text-link-hover active:text-blurb-text-link-hover flex cursor-pointer flex-nowrap items-center gap-1 font-medium"><span></span><span class="underline">What changes the price?</span></button><!--astro:end--></astro-island> </div> </div> <div class="my-0 md:my-0 lg:my-0"> <div class="py-4 px-6 md:py-6 md:px-10 lg:py-10 lg:px-20"> <hr class="border-blurb-border-subtle border-0 border-b"> </div> </div>
309<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event("astro:only"));})();</script>
309<section class="py-12 lg:py-20 2xl:mx-auto 2xl:max-w-screen-2xl w-full relative px-6 md:max-lg:px-10 lg:px-20 pt-0 md:pt-0 lg:pt-0"> <astro-island uid="Z1mvjkT" component-url="https://assets.blurb.com/_astro/ProductListing.jD5lYFpO.js" component-export="ProductListing" renderer-url="https://assets.blurb.com/_astro/client.BSMExnCO.js" props="{"columns":[0,3],"items":[1,[[0,{"eyebrow":[0,"Photo Book"],"heading":[0,{"text":[0,"ImageWrap Hardcover Photo Book"],"size":[0,"h4"]}],"href":[0,"/photo-books/imagewrap-hardcover-photo-book"],"price":[0,"Starting at CAD $32.00"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Photo Book - ImageWrap Hardcover-optimized.CTrmtmNl.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"ImageWrap hardcover photo book opened to a wide panoramic image of the Eiffel Tower covering three-quarters of the spread with text on the right hand side."]}]}],[0,{"eyebrow":[0,"Photo Book"],"heading":[0,{"text":[0,"Softcover Photo Book"],"size":[0,"h4"]}],"href":[0,"/photo-books/softcover-photo-book"],"price":[0,"Starting at CAD $16.00"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Photo Book - Softcover-optimized.NBFf1uEv.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Softcover photo book shown open with architectural design imagery."]}]}],[0,{"eyebrow":[0,"Photo Book"],"heading":[0,{"text":[0,"Layflat Photo Book"],"size":[0,"h4"]}],"href":[0,"/photo-books/layflat-photo-book"],"price":[0,"Starting at CAD $72.00"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Photo Book - Layflat-optimized.CbG-E1cX.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Layflat photo book with a full-bleed image spanning both pages of a couple on their wedding day, with text on the left hand side."]}]}],[0,{"eyebrow":[0,"Photo Book"],"heading":[0,{"text":[0,"Hardcover Linen Photo Book with Dust Jacket"],"size":[0,"h4"]}],"href":[0,"/photo-books/hardcover-linen-photo-book-with-dust-jacket"],"price":[0,"Starting at CAD $32.00"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Photo Book - Linen Hardcover with Dust Jacket-optimized.BSAV8Bpp.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Hardcover linen photo book with dust jacket opened to a two-page spread showing various images of Vespas on Italian streets."]}]}],[0,{"eyebrow":[0,"Paperback & Hardcover Books"],"heading":[0,{"text":[0,"Paperback Book"],"size":[0,"h4"]}],"href":[0,"/hardcover-and-paperback-books/paperback-book"],"price":[0,"Starting at CAD $4.99"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Paperback and Hardcover Books - Paperback-optimized.CxLk4w5d.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Open paperback book with images of vintage cars and urban street scenes."]}]}],[0,{"eyebrow":[0,"Paperback & Hardcover Books"],"heading":[0,{"text":[0,"ImageWrap Hardcover Book"],"size":[0,"h4"]}],"href":[0,"/hardcover-and-paperback-books/imagewrap-hardcover-book"],"price":[0,"Starting at CAD $14.99"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Paperback and Hardcover Books - ImageWrap Hardcover-optimized.D1sLnZ4y.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Open imagewrap hardcover cookbook showing recipe pages with food photography and ingredient instructions."]}]}],[0,{"eyebrow":[0,"Paperback & Hardcover Books"],"heading":[0,{"text":[0,"Linen Hardcover Book with Dust Jacket"],"size":[0,"h4"]}],"href":[0,"/hardcover-and-paperback-books/linen-hardcover-book-with-dust-jacket"],"price":[0,"Starting at CAD $15.99"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Paperback and Hardcover Books - Linen Hardcover with Dust Jacket-optimized.B8G8lKem.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Linen hardcover book with dust jacket showing colorful geometric design open to reveal interior pages."]}]}],[0,{"eyebrow":[0,"Magazine"],"heading":[0,{"text":[0,"Semi-gloss cover Magazine"],"size":[0,"h4"]}],"href":[0,"/magazines/semi-gloss-cover"],"price":[0,"Starting at CAD $8.00"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Premium Magazine-optimized.CZWdhbpt.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Open magazine spread displaying black and white ceramic studio photography with text columns and headlines."]}]}],[0,{"eyebrow":[0,"Notebooks & Journals"],"heading":[0,{"text":[0,"Softcover Notebook"],"size":[0,"h4"]}],"href":[0,"/custom-notebooks-journals/softcover-notebook"],"price":[0,"Starting at CAD $18.55"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Notebooks _ Journals - Softcover Notebook-optimized.BGO38hhS.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Open softcover notebook with orange gradient imagery on one side and dotted grid paper interior pages displayed."]}]}],[0,{"eyebrow":[0,"Notebooks & Journals"],"heading":[0,{"text":[0,"ImageWrap Hardcover Notebook"],"size":[0,"h4"]}],"href":[0,"/custom-notebooks-journals/imagewrap-hardcover-notebook"],"price":[0,"Starting at CAD $31.55"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Notebooks _ Journals - ImageWrap Hardcover Notebook-optimized.CkYI1UOa.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Open daily journal notebook with pages to track mindful habits and your schedule."]}]}],[0,{"eyebrow":[0,"Notebooks & Journals"],"heading":[0,{"text":[0,"Linen Hardcover Notebook with Dust Jacket"],"size":[0,"h4"]}],"href":[0,"/custom-notebooks-journals/linen-hardcover-notebook"],"price":[0,"Starting at CAD $32.55"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Notebooks _ Journals - Linen Hardcover with Dust Jacket Notebook-optimized.YP00RKbC.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Open linen hardcover travel notebook with dust jacket showing travel photography of Greece on one side, and blank lined paper on the other."]}]}],[0,{"eyebrow":[0,"Notebooks & Journals"],"heading":[0,{"text":[0,"Wire-O Notebook"],"size":[0,"h4"]}],"href":[0,"/custom-notebooks-journals/wire-o-notebook"],"price":[0,"Starting at CAD $20.34"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Notebooks _ Journals - Wire-O Notebook-optimized.CHz4jhym.webp"],"width":[0,700],"height":[0,700],"format":[0,"webp"],"alt":[0,"Colorful wire-O bound notebook shown open with one page designed with blue and orange graphics, the other page blank with lined notebook paper."]}]}],[0,{"eyebrow":[0,"Swatch Kit"],"heading":[0,{"text":[0,"Swatch Kit"],"size":[0,"h4"]}],"href":[0,"/swatch-kit"],"price":[0,"Starting at CAD $0.00"],"image":[0,{"src":[0,"https://assets.blurb.com/_astro/Swatch-Kit.FIDQju5I.png"],"width":[0,700],"height":[0,700],"format":[0,"png"],"alt":[0,"Overlapping Premium Matte and Premium Lustre paper samples featuring a vibrant bird photo, showcasing differences in paper finish."]}]}]]],"promo":[0,{"colspan":[0,2],"card":[0,{"image":[0,{"src":[0,{"src":[0,"https://assets.blurb.com/_astro/gift-box-promo-optimized.BF0y1CXN.webp"],"width":[0,1319],"height":[0,596],"format":[0,"webp"]}],"mobileSrc":[0,{"src":[0,"https://assets.blurb.com/_astro/gift-box-promo-mobile-optimized.Bdxh3SRF.webp"],"width":[0,929],"height":[0,899],"format":[0,"webp"]}],"tabletSrc":[0,{"src":[0,"https://assets.blurb.com/_astro/gift-box-promo-tablet-optimized.Dn78f72y.webp"],"width":[0,1115],"height":[0,758],"format":[0,"webp"]}],"alt":[0,"Four white Blurb gift boxes arranged at angles on a dark wood table"]}],"heading":[0,"A gift box for your photo book"],"eyebrow":[0,"New"],"content":[0,"Add it at checkout for a keepsake presentation, no wrapping needed."]}]}],"campaignPromo":[0,{"colspan":[0,2],"card":[0,{"image":[0,{"src":[0,{"src":[0,"https://assets.blurb.com/_astro/Laminate Cover Promo-optimized.CfIVthsC.webp"],"width":[0,1550],"height":[0,700],"format":[0,"webp"]}],"alt":[0,"Two copies of an ImageWrap hardcover book titled Reflections featuring a glossy blue cover"]}],"heading":[0,""]}]}],"translations":[0,{"progress":[0,"Showing {{some}} of {{all}}"],"viewAll":[0,"View All"],"
309loadMore":[0,"Load More"]}]}" ssr client="only" opts="{"name":"ProductListing","value":"react"}"></astro-island> </section> </main> <footer> <div class="flex justify-center"> <div class="hidden w-full max-w-screen-2xl justify-around gap-6 md:flex md:p-10 lg:p-20"> <div class="flex flex-1 flex-col gap-6"> <a href="/self-publish" class="text-blurb-text-subtle hover:text-light-blue-600 font-semibold no-underline"> Self Publishing </a> <div class="flex flex-col gap-2 text-sm"> <a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/bookmaking-tools"> Creation & Layout Tools </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/self-publish"> Self-Publishing Overview </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/large-order-services"> Large Order Services </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/self-publish"> Sell & Self-Publish </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/sell-through-blurb"> Sell on Blurb's Bookstore </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/amazon"> Sell on Amazon </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/ingram"> Ingram Distribution </a> </div> </div><div class="flex flex-1 flex-col gap-6"> <a href="/photo-books" class="text-blurb-text-subtle hover:text-light-blue-600 font-semibold no-underline"> Photo Books </a> <div class="flex flex-col gap-2 text-sm"> <a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/photo-books"> Photo Books </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/wedding-books"> Wedding Photo Books </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/family-photo-books"> Family Photo Books </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/travel-photo-books"> Travel Photo Books </a> </div> </div><div class="flex flex-1 flex-col gap-6"> <a href="/self-publish" class="text-blurb-text-subtle hover:text-light-blue-600 font-semibold no-underline"> Popular Books </a> <div class="flex flex-col gap-2 text-sm"> <a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/cookbooks"> Food & Cookbooks </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/photo-books"> Photography </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/memory-books"> Memoirs </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/childrens-books"> Childrenâs Books </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/portfolio-books"> Portfolios </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/business"> Business Books </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/yearbook-photo-books"> Yearbooks </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/novels-and-poetry"> Novels & Poetry </a> </div> </div><div class="flex flex-1 flex-col gap-6"> <a href="/blog" class="text-blurb-text-subtle hover:text-light-blue-600 font-semibold no-underline"> Get Inspired </a> <div class="flex flex-col gap-2 text-sm"> <a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/blog"> Blog </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/blog/category/promoting-marketing"> Events </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/bookstore"> Bookstore </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/gifts"> Gift Center </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/partner"> Blurb Partners </a> </div> </div><div class="flex flex-1 flex-col gap-6"> <a href="https://support.blurb.com/hc/en-ca" class="text-blurb-text-subtle hover:text-light-blue-600 font-semibold no-underline"> Help </a> <div class="flex flex-col gap-2 text-sm"> <a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/pricing"> Pricing </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/dreamteam-collaborators"> Hire an Expert </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="https://support.blurb.com/hc/en-ca"> FAQs </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/shipping"> Shipping </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/returns"> Return Policy </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/affiliate-program"> Become an Affiliate </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/invite?traffic_source=footer"> Refer a friend </a> </div> </div> </div> </div> <div class="text-blurb-text-inverse bg-blurb-bg-surface-bold flex justify-center"> <div class="flex w-full max-w-screen-2xl flex-col-reverse items-center gap-6 px-20 py-6 xl:flex-row xl:justify-between"> <div class="flex flex-wrap justify-center gap-4 text-xs xl:gap-6"> 310© 2026 Blurb, Inc. All rights reserved. <a class="text-blurb-text-inverse no-underline hover:underline" href="/company-profile"> Company </a><a class="text-blurb-text-inverse no-underline hover:underline" href="/careers"> Work at Blurb </a><a class="text-blurb-text-inverse no-underline hover:underline" href="/pricing"> Pricing </a><a class="text-blurb-text-inverse no-underline hover:underline" href="/privacy"> Privacy Policy </a><a class="text-blurb-text-inverse no-underline hover:underline" href="/privacy#cookies"> Cookie Policy </a><a class="text-blurb-text-inverse no-underline hover:underline" href="https://support.blurb.com/hc/en-ca"> Support </a><a class="text-blurb-text-inverse no-underline hover:underline" href="/sitemap"> Sitemap </a> </div> <div class="flex justify-center gap-4 text-3xl"> <a href="https://www.facebook.com/BlurbBooks" class="text-blurb-text-inverse no-underline" data-event="social_media_click"> <svg width="1em" height="1em" class="shrink-0 grow-0" data-icon="ri:facebook-fill"> <symbol id="ai:ri:facebook-fill" viewBox="0 0 24 24">
310<path fill="currentColor" d="M14 13.5h2.5l1-4H14v-2c0-1.03 0-2 2-2h1.5V2.14c-.326-.043-1.557-.14-2.857-.14C11.928 2 10 3.657 10 6.7v2.8H7v4h3V22h4z"/></symbol><use href="#ai:ri:facebook-fill"></use> </svg> </a><a href="https://twitter.com/BlurbBooks" class="text-blurb-text-inverse no-underline" data-event="social_media_click"> <svg width="1em" height="1em" class="shrink-0 grow-0" data-icon="ri:twitter-fill"> <symbol id="ai:ri:twitter-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M22.213 5.656a8.4 8.4 0 0 1-2.402.658A4.2 4.2 0 0 0 21.649 4c-.82.488-1.719.83-2.655 1.015a4.182 4.182 0 0 0-7.126 3.814a11.87 11.87 0 0 1-8.621-4.37a4.17 4.17 0 0 0-.566 2.103c0 1.45.739 2.731 1.86 3.481a4.2 4.2 0 0 1-1.894-.523v.051a4.185 4.185 0 0 0 3.355 4.102a4.2 4.2 0 0 1-1.89.072A4.185 4.185 0 0 0 8.02 16.65a8.4 8.4 0 0 1-6.192 1.732a11.83 11.83 0 0 0 6.41 1.88c7.694 0 11.9-6.373 11.9-11.9q0-.271-.012-.541a8.5 8.5 0 0 0 2.086-2.164"/></symbol><use href="#ai:ri:twitter-fill"></use> </svg> </a><a href="https://www.instagram.com/blurbbooks" class="text-blurb-text-inverse no-underline" data-event="social_media_click"> <svg width="1em" height="1em" class="shrink-0 grow-0" data-icon="mdi:instagram"> <symbol id="ai:mdi:instagram" viewBox="0 0 24 24"><path fill="currentColor" d="M7.8 2h8.4C19.4 2 22 4.6 22 7.8v8.4a5.8 5.8 0 0 1-5.8 5.8H7.8C4.6 22 2 19.4 2 16.2V7.8A5.8 5.8 0 0 1 7.8 2m-.2 2A3.6 3.6 0 0 0 4 7.6v8.8C4 18.39 5.61 20 7.6 20h8.8a3.6 3.6 0 0 0 3.6-3.6V7.6C20 5.61 18.39 4 16.4 4zm9.65 1.5a1.25 1.25 0 0 1 1.25 1.25A1.25 1.25 0 0 1 17.25 8A1.25 1.25 0 0 1 16 6.75a1.25 1.25 0 0 1 1.25-1.25M12 7a5 5 0 0 1 5 5a5 5 0 0 1-5 5a5 5 0 0 1-5-5a5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3a3 3 0 0 0 3 3a3 3 0 0 0 3-3a3 3 0 0 0-3-3"/></symbol><use href="#ai:mdi:instagram"></use> </svg> </a><a href="https://www.pinterest.com/blurbbooks" class="text-blurb-text-inverse no-underline" data-event="social_media_click"> <svg width="1em" height="1em" class="shrink-0 grow-0" data-icon="ri:pinterest-fill"> <symbol id="ai:ri:pinterest-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M13.372 2.094a10.003 10.003 0 0 0-5.369 19.074a7.8 7.8 0 0 1 .162-2.292c.185-.839 1.296-5.463 1.296-5.463a3.7 3.7 0 0 1-.324-1.577c0-1.485.857-2.593 1.923-2.593a1.334 1.334 0 0 1 1.342 1.508c0 .9-.578 2.262-.88 3.54a1.544 1.544 0 0 0 1.575 1.923c1.897 0 3.17-2.431 3.17-5.301c0-2.201-1.457-3.847-4.143-3.847a4.746 4.746 0 0 0-4.93 4.793a2.96 2.96 0 0 0 .648 1.97a.48.48 0 0 1 .162.554c-.046.184-.162.623-.208.785a.354.354 0 0 1-.51.253c-1.384-.554-2.036-2.077-2.036-3.816c0-2.847 2.384-6.255 7.154-6.255c3.796 0 6.319 2.777 6.319 5.747c0 3.909-2.176 6.848-5.393 6.848a2.86 2.86 0 0 1-2.454-1.246s-.579 2.316-.692 2.754a8 8 0 0 1-1.019 2.131c.923.28 1.882.42 2.846.416a9.99 9.99 0 0 0 9.996-10.002a10 10 0 0 0-8.635-9.904"/></symbol><use href="#ai:ri:pinterest-fill"></use> </svg> </a><a href="https://www.youtube.com/user/BlurbBooks" class="text-blurb-text-inverse no-underline" data-event="social_media_click"> <svg width="1em" height="1em" class="shrink-0 grow-0" data-icon="ri:youtube-fill"> <symbol id="ai:ri:youtube-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M12.244 4c.534.003 1.87.016 3.29.073l.504.022c1.429.067 2.857.183 3.566.38c.945.266 1.687 1.04 1.938 2.022c.4 1.56.45 4.602.456 5.339l.001.152v.174c-.007.737-.057 3.78-.457 5.339c-.254.985-.997 1.76-1.938 2.022c-.709.197-2.137.313-3.566.38l-.504.023c-1.42.056-2.756.07-3.29.072l-.235.001h-.255c-1.13-.007-5.856-.058-7.36-.476c-.944-.266-1.687-1.04-1.938-2.022c-.4-1.56-.45-4.602-.456-5.339v-.326c.006-.737.056-3.78.456-5.339c.254-.985.997-1.76 1.939-2.021c1.503-.419 6.23-.47 7.36-.476zM9.999 8.5v7l6-3.5z"/></symbol><use href="#ai:ri:youtube-fill"></use> </svg> </a> </div> </div> </div> </footer>
310<script type="module" src="https://assets.blurb.com/_astro/BaseLayout.astro_astro_type_script_index_0_lang.Dg7gOYpR.js"></script>
310 </body> </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.