PageSourceSearch

https://www.blurb.ca/formats

html blurb.ca collected 2026-09-24 08:59:57 UTC 124,360 bytes, 310 lines download raw bytes

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 &#38; 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 &#38; 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 &#38; 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 &amp; 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 &amp; 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 &amp; 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&#39;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 &amp; 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 &amp; 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 &amp; 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 &amp; Memoirs </a> </li><li> <a href="/bookstore/c-children" class="nav__link-mobile"> Children&#39;s Books </a> </li><li> <a href="/bookstore/c-business-economics" class="nav__link-mobile"> Business &amp; Economics </a> </li><li> <a href="/bookstore/c-literature-fiction" class="nav__link-mobile"> Literature &amp; 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="{&quot;title&quot;:[0,&quot;What changes the price?&quot;],&quot;modalBackText&quot;:[0,&quot;Back&quot;],&quot;modalCloseText&quot;:[0,&quot;Close&quot;],&quot;modalTipText&quot;:[0,&quot;Tip&quot;],&quot;steps&quot;:[0,{&quot;coverOptions&quot;:[0,{&quot;title&quot;:[0,&quot;Cover Options&quot;],&quot;description&quot;:[0,&quot;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.&quot;],&quot;tip&quot;:[0,&quot;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&quot;],&quot;nextText&quot;:[0,&quot;Next: Size&quot;],&quot;content&quot;:[0,{&quot;imageWrapHardcover&quot;:[0,{&quot;heading&quot;:[0,&quot;ImageWrap Hardcover&quot;],&quot;text&quot;:[0,&quot;Starting at CAD $32.00 for Photo Books, CAD $14.99 for Hardcover Books&quot;],&quot;imgAlt&quot;:[0,&quot;Hardcover book with imagewrap cover shown close-up and closed with a Parisian cafe scene&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/ImageWrap Hardcover - Binding-optimized.BW32JNmG.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}],&quot;softcover&quot;:[0,{&quot;heading&quot;:[0,&quot;Softcover&quot;],&quot;text&quot;:[0,&quot;Starting at CAD $16.00 for Photo Books, CAD $4.99 for Paperback Books&quot;],&quot;imgAlt&quot;:[0,&quot;Close-up of a softcover photo book shown closed with an architectural design cover.&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Softcover - Binding-optimized.KvGCTN7H.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}]}]}],&quot;size&quot;:[0,{&quot;title&quot;:[0,&quot;Size&quot;],&quot;description&quot;:[0,&quot;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.&quot;],&quot;tip&quot;:[0,&quot;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.&quot;],&quot;nextText&quot;:[0,&quot;Next: Paper&quot;],&quot;content&quot;:[0,{&quot;paperback&quot;:[0,{&quot;heading&quot;:[0,&quot;7x7 ImageWrap Hardcover Photo Book&quot;],&quot;text&quot;:[0,&quot;Starting at CAD $32.00&quot;],&quot;imgAlt&quot;:[0,&quot;A 7x7 photo book with an ImageWrap hardcover featuring a recurring geometric pattern on the front cover&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/7x7 Photo ImageWrap Hardcover-optimized.LD9QMDl3.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}],&quot;hardcover&quot;:[0,{&quot;heading&quot;:[0,&quot;12x12 ImageWrap Hardcover Photo Book&quot;],&quot;text&quot;:[0,&quot;Starting at CAD $67.00&quot;],&quot;imgAlt&quot;:[0,&quot;A 12x12 photo book with an ImageWrap hardcover featuring a recurring geometric pattern on the front cover&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/12x12 Photo ImageWrap Hardcover-optimized.CGN2a5EZ.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}]}]}],&quot;paper&quot;:[0,{&quot;title&quot;:[0,&quot;Paper&quot;],&quot;description&quot;:[0,&quot;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.&quot;],&quot;tip&quot;:[0,&quot;
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.&quot;],&quot;nextText&quot;:[0,&quot;Next: Number of pages&quot;],&quot;content&quot;:[0,{&quot;premium&quot;:[0,{&quot;heading&quot;:[0,&quot;Premium Lustre Photo Book Paper&quot;],&quot;text&quot;:[0,&quot;Starting at CAD $16.00&quot;],&quot;imgAlt&quot;:[0,&quot;A close up of an interior page spread in a photo book made with Premium Lustre paper&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Paper Type - Pearl-optimized.DRFRMvMM.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}],&quot;standard&quot;:[0,{&quot;heading&quot;:[0,&quot;Standard Paperback and Hardcover Book Paper&quot;],&quot;text&quot;:[0,&quot;Starting at CAD $5.99&quot;],&quot;imgAlt&quot;:[0,&quot;A close up of an interior page spread in a book made with Standard paper&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Paper Type - Standard-optimized.Bz7pHe5d.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}]}]}],&quot;pages&quot;:[0,{&quot;title&quot;:[0,&quot;Number of pages&quot;],&quot;description&quot;:[0,&quot;Every extra page adds to the paper, ink, and binding—so more pages mean more spend.&quot;],&quot;tip&quot;:[0,&quot;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.&quot;],&quot;nextText&quot;:[0,&quot;Next: Binding&quot;],&quot;content&quot;:[0,{&quot;minimum&quot;:[0,{&quot;text&quot;:[0,&quot;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.&quot;],&quot;imgAlt&quot;:[0,&quot;A graphic showing a blank two-page book spread with an additional page spread behind it. The text below reads 20 Page Minimum.&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Page Minimum-optimized.C5C2gzuY.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}],&quot;additional&quot;:[0,{&quot;text&quot;:[0,&quot;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.&quot;],&quot;imgAlt&quot;:[0,&quot;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.&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Additional Pages-optimized.DjIO0t6l.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}]}]}],&quot;binding&quot;:[0,{&quot;title&quot;:[0,&quot;Binding&quot;],&quot;description&quot;:[0,&quot;How your book is bound changes its look, feel, how long it lasts (and yes, the price too).&quot;],&quot;tip&quot;:[0,&quot;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.&quot;],&quot;nextText&quot;:[0,&quot;Close&quot;],&quot;content&quot;:[0,{&quot;wireO&quot;:[0,{&quot;heading&quot;:[0,&quot;Wire-O Binding&quot;],&quot;subheading&quot;:[0,&quot;Budget-friendly, practical&quot;],&quot;imgAlt&quot;:[0,&quot;Open wire-o softcover notebook with black wire-O binding, one page designed purple, the other with lined pages&quot;],&quot;text&quot;:[0,&quot;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.&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Wire-O - Binding-optimized.DUqwe-dU.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}],&quot;perfect&quot;:[0,{&quot;heading&quot;:[0,&quot;Perfect Binding&quot;],&quot;subheading&quot;:[0,&quot;Mid-range, polished&quot;],&quot;imgAlt&quot;:[0,&quot;Open softcover notebook with orange gradient imagery on one side and dotted grid paper interior pages displayed&quot;],&quot;text&quot;:[0,&quot;Delivers the crisp, square spine and polished finish you&#39;d expect from a professionally published book—built to impress and made to last.&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Perfect Binding-optimized.BuVc_m8N.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}],&quot;layflat&quot;:[0,{&quot;heading&quot;:[0,&quot;Layflat Binding&quot;],&quot;subheading&quot;:[0,&quot;Premium, elegant&quot;],&quot;imgAlt&quot;:[0,&quot;Close-up of layflat photo book binding with a photo of people with champagne glasses&quot;],&quot;text&quot;:[0,&quot;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.&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Layflat Binding-optimized.C4p50j_1.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}]}]}]}]}]}" ssr client="load" opts="{&quot;name&quot;:&quot;PriceModal&quot;,&quot;value&quot;: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="{&quot;columns&quot;:[0,3],&quot;items&quot;:[1,[[0,{&quot;eyebrow&quot;:[0,&quot;Photo Book&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;ImageWrap Hardcover Photo Book&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/photo-books/imagewrap-hardcover-photo-book&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $32.00&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Photo Book - ImageWrap Hardcover-optimized.CTrmtmNl.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;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.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Photo Book&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Softcover Photo Book&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/photo-books/softcover-photo-book&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $16.00&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Photo Book - Softcover-optimized.NBFf1uEv.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Softcover photo book shown open with architectural design imagery.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Photo Book&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Layflat Photo Book&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/photo-books/layflat-photo-book&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $72.00&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Photo Book - Layflat-optimized.CbG-E1cX.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;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.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Photo Book&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Hardcover Linen Photo Book with Dust Jacket&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/photo-books/hardcover-linen-photo-book-with-dust-jacket&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $32.00&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Photo Book - Linen Hardcover with Dust Jacket-optimized.BSAV8Bpp.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Hardcover linen photo book with dust jacket opened to a two-page spread showing various images of Vespas on Italian streets.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Paperback &amp; Hardcover Books&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Paperback Book&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/hardcover-and-paperback-books/paperback-book&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $4.99&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Paperback and Hardcover Books - Paperback-optimized.CxLk4w5d.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Open paperback book with images of vintage cars and urban street scenes.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Paperback &amp; Hardcover Books&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;ImageWrap Hardcover Book&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/hardcover-and-paperback-books/imagewrap-hardcover-book&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $14.99&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Paperback and Hardcover Books - ImageWrap Hardcover-optimized.D1sLnZ4y.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Open imagewrap hardcover cookbook showing recipe pages with food photography and ingredient instructions.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Paperback &amp; Hardcover Books&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Linen Hardcover Book with Dust Jacket&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/hardcover-and-paperback-books/linen-hardcover-book-with-dust-jacket&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $15.99&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Paperback and Hardcover Books - Linen Hardcover with Dust Jacket-optimized.B8G8lKem.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Linen hardcover book with dust jacket showing colorful geometric design open to reveal interior pages.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Magazine&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Semi-gloss cover Magazine&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/magazines/semi-gloss-cover&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $8.00&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Premium Magazine-optimized.CZWdhbpt.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Open magazine spread displaying black and white ceramic studio photography with text columns and headlines.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Notebooks &amp; Journals&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Softcover Notebook&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/custom-notebooks-journals/softcover-notebook&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $18.55&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Notebooks _ Journals - Softcover Notebook-optimized.BGO38hhS.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Open softcover notebook with orange gradient imagery on one side and dotted grid paper interior pages displayed.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Notebooks &amp; Journals&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;ImageWrap Hardcover Notebook&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/custom-notebooks-journals/imagewrap-hardcover-notebook&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $31.55&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Notebooks _ Journals - ImageWrap Hardcover Notebook-optimized.CkYI1UOa.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Open daily journal notebook with pages to track mindful habits and your schedule.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Notebooks &amp; Journals&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Linen Hardcover Notebook with Dust Jacket&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/custom-notebooks-journals/linen-hardcover-notebook&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $32.55&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Notebooks _ Journals - Linen Hardcover with Dust Jacket Notebook-optimized.YP00RKbC.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Open linen hardcover travel notebook with dust jacket showing travel photography of Greece on one side, and blank lined paper on the other.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Notebooks &amp; Journals&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Wire-O Notebook&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/custom-notebooks-journals/wire-o-notebook&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $20.34&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Notebooks _ Journals - Wire-O Notebook-optimized.CHz4jhym.webp&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;],&quot;alt&quot;:[0,&quot;Colorful wire-O bound notebook shown open with one page designed with blue and orange graphics, the other page blank with lined notebook paper.&quot;]}]}],[0,{&quot;eyebrow&quot;:[0,&quot;Swatch Kit&quot;],&quot;heading&quot;:[0,{&quot;text&quot;:[0,&quot;Swatch Kit&quot;],&quot;size&quot;:[0,&quot;h4&quot;]}],&quot;href&quot;:[0,&quot;/swatch-kit&quot;],&quot;price&quot;:[0,&quot;Starting at CAD $0.00&quot;],&quot;image&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Swatch-Kit.FIDQju5I.png&quot;],&quot;width&quot;:[0,700],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;png&quot;],&quot;alt&quot;:[0,&quot;Overlapping Premium Matte and Premium Lustre paper samples featuring a vibrant bird photo, showcasing differences in paper finish.&quot;]}]}]]],&quot;promo&quot;:[0,{&quot;colspan&quot;:[0,2],&quot;card&quot;:[0,{&quot;image&quot;:[0,{&quot;src&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/gift-box-promo-optimized.BF0y1CXN.webp&quot;],&quot;width&quot;:[0,1319],&quot;height&quot;:[0,596],&quot;format&quot;:[0,&quot;webp&quot;]}],&quot;mobileSrc&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/gift-box-promo-mobile-optimized.Bdxh3SRF.webp&quot;],&quot;width&quot;:[0,929],&quot;height&quot;:[0,899],&quot;format&quot;:[0,&quot;webp&quot;]}],&quot;tabletSrc&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/gift-box-promo-tablet-optimized.Dn78f72y.webp&quot;],&quot;width&quot;:[0,1115],&quot;height&quot;:[0,758],&quot;format&quot;:[0,&quot;webp&quot;]}],&quot;alt&quot;:[0,&quot;Four white Blurb gift boxes arranged at angles on a dark wood table&quot;]}],&quot;heading&quot;:[0,&quot;A gift box for your photo book&quot;],&quot;eyebrow&quot;:[0,&quot;New&quot;],&quot;content&quot;:[0,&quot;Add it at checkout for a keepsake presentation, no wrapping needed.&quot;]}]}],&quot;campaignPromo&quot;:[0,{&quot;colspan&quot;:[0,2],&quot;card&quot;:[0,{&quot;image&quot;:[0,{&quot;src&quot;:[0,{&quot;src&quot;:[0,&quot;https://assets.blurb.com/_astro/Laminate Cover Promo-optimized.CfIVthsC.webp&quot;],&quot;width&quot;:[0,1550],&quot;height&quot;:[0,700],&quot;format&quot;:[0,&quot;webp&quot;]}],&quot;alt&quot;:[0,&quot;Two copies of an ImageWrap hardcover book titled Reflections featuring a glossy blue cover&quot;]}],&quot;heading&quot;:[0,&quot;&quot;]}]}],&quot;translations&quot;:[0,{&quot;progress&quot;:[0,&quot;Showing {{some}} of {{all}}&quot;],&quot;viewAll&quot;:[0,&quot;View All&quot;],&quot;
309loadMore&quot;:[0,&quot;Load More&quot;]}]}" ssr client="only" opts="{&quot;name&quot;:&quot;ProductListing&quot;,&quot;value&quot;:&quot;react&quot;}"></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 &amp; 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 &amp; Self-Publish </a><a class="text-blurb-text-subtle hover:text-light-blue-600 no-underline" href="/sell-through-blurb"> Sell on Blurb&#39;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 &amp; 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 &amp; 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&copy; 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.