<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta
      name="description"
      content="Build lasting affinity with graduates through custom books that explain life skills after school."
    >
    <title>Cap & Compass</title>
    <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=Open+Sans:wght@400;500;600;700&display=swap"
      rel="stylesheet"
    >
    <link rel="stylesheet" href="styles.css?v=13">
  </head>
  <body>
    <header class="site-header" aria-label="Primary navigation">
      <a class="brand" href="#top" aria-label="Cap and Compass home">
        <img src="assets/logo-crop.png" alt="Cap & Compass">
      </a>

      <nav class="nav-links" aria-label="Main menu">
        <a href="#about">About</a>
        <a href="#preview">Preview</a>
        <a href="#customize">Customize</a>
        <a href="#pricing">Pricing</a>
      </nav>

      <a class="button button-header" href="#order">Order</a>

      <button
        class="menu-toggle"
        type="button"
        aria-expanded="false"
        aria-controls="mobile-menu"
        aria-label="Open menu"
      >
        <span></span>
        <span></span>
        <span></span>
      </button>

      <div class="mobile-menu" id="mobile-menu" hidden>
        <a href="#about">About</a>
        <a href="#preview">Preview</a>
        <a href="#customize">Customize</a>
        <a href="#pricing">Pricing</a>
        <a href="#order">Order</a>
      </div>
    </header>

    <main id="top">
      <section class="hero" aria-labelledby="hero-title">
        <div class="hero-content">
          <h1 id="hero-title">Build Lasting Loyalty with Graduates</h1>
          <p>Give a custom book that uses humor to teach real-world life skills after school.</p>
        </div>

        <div class="book-showcase" aria-label="Three custom graduate almanac book covers">
          <picture>
            <source media="(max-width: 720px)" srcset="assets/3d_book_1-v2-mobile.png">
            <img class="book-composite" src="assets/three_books.webp" alt="Three custom graduate almanac book covers">
          </picture>
        </div>

        <a class="button button-main" href="#order">Order</a>
      </section>

      <section class="about-section" id="about" aria-labelledby="about-title">
        <div class="about-panel">
          <div class="about-content">
            <h2 id="about-title">About</h2>
            <p class="about-copy">
              Since 2001, Cap &amp; Compass has been trusted by leading colleges, companies, and
              organizations. Our customers share a mission to educate and stay connected with
              their alumni, employees, and members.
            </p>

            <div class="about-stats" aria-label="Cap and Compass impact">
              <article class="stat-card">
                <strong>1,200,000+</strong>
                <span>Books Sold</span>
              </article>

              <article class="stat-card">
                <strong>650+</strong>
                <span>Colleges</span>
              </article>

              <article class="stat-card">
                <strong>500+</strong>
                <span>Companies</span>
              </article>
            </div>

            <div class="logo-marquee" aria-label="Customer logos">
              <div class="logo-track logo-track-top">
                <div class="logo-row">
                  <img src="assets/indexlogo1.png" alt="Customer logo 1">
                  <img src="assets/indexlogo2.png" alt="Customer logo 2">
                  <img src="assets/indexlogo3.png" alt="Customer logo 3">
                </div>
                <div class="logo-row" aria-hidden="true">
                  <img src="assets/indexlogo1.png" alt="">
                  <img src="assets/indexlogo2.png" alt="">
                  <img src="assets/indexlogo3.png" alt="">
                </div>
              </div>

              <div class="logo-track logo-track-bottom">
                <div class="logo-row">
                  <img src="assets/indexlogo4.png" alt="Customer logo 4">
                  <img src="assets/indexlogo5.png" alt="Customer logo 5">
                  <img src="assets/indexlogo6.png" alt="Customer logo 6">
                </div>
                <div class="logo-row" aria-hidden="true">
                  <img src="assets/indexlogo4.png" alt="">
                  <img src="assets/indexlogo5.png" alt="">
                  <img src="assets/indexlogo6.png" alt="">
                </div>
              </div>
            </div>

            <div class="benefits-inline" id="benefits" aria-label="Product benefits">
              <div
                class="benefits-carousel"
                data-carousel
                aria-roledescription="carousel"
                aria-label="Product benefits"
              >
                <div class="benefit-viewport">
                  <article class="benefit-slide is-active" data-slide aria-hidden="false">
                    <div class="benefit-card">
                      <div class="benefit-image-wrap">
                        <img src="art/about_slider/about_slider_1.jpg?v=20260423-1348" alt="Interior spread showing 176 pages of practical post-graduation advice">
                      </div>
                    </div>
                    <p class="benefit-caption">176 pages covering everything from work etiquette to taxes.</p>
                  </article>

                  <article class="benefit-slide" data-slide aria-hidden="true">
                    <div class="benefit-card">
                      <div class="benefit-image-wrap">
                        <img src="art/about_slider/about_slider_2.jpg?v=20260423-1348" alt="Custom cover and insert pages that highlight benefits and sponsor messaging">
                      </div>
                    </div>
                    <p class="benefit-caption">Share benefits and more on the outside cover, inside cover, and 8-page insert.</p>
                  </article>

                  <article class="benefit-slide" data-slide aria-hidden="true">
                    <div class="benefit-card">
                      <div class="benefit-image-wrap">
                        <img src="art/about_slider/about_slider_3.jpg?v=20260423-1348" alt="Sponsored spread designed to offset book costs through partners or advertisers">
                      </div>
                    </div>
                    <p class="benefit-caption">Partner with other offices or advertisers to reduce your costs.</p>
                  </article>

                  <article class="benefit-slide" data-slide aria-hidden="true">
                    <div class="benefit-card">
                      <div class="benefit-image-wrap">
                        <img src="art/about_slider/about_slider_4.jpg?v=20260423-1348" alt="Examples of how the books are distributed at events for students and new hires">
                      </div>
                    </div>
                    <p class="benefit-caption">Books are given at seniors' events, commencement, recruiting fairs, and new-hire orientations.</p>
                  </article>

                  <article class="benefit-slide" data-slide aria-hidden="true">
                    <div class="benefit-card">
                      <div class="benefit-image-wrap">
                        <img src="art/about_slider/about_slider_5.jpg?v=20260423-1348" alt="Graduate feedback page showing enthusiasm for the book">
                      </div>
                    </div>
                    <p class="benefit-caption">Most importantly, graduates love the book.</p>
                  </article>
                </div>

                <div class="benefits-nav">
                  <button class="benefits-arrow" type="button" data-carousel-prev aria-label="Show previous benefit">
                    <span aria-hidden="true">&larr;</span>
                  </button>
                  <div class="benefits-pagination" role="tablist" aria-label="Select a benefit slide">
                    <button class="benefits-dot is-active" type="button" role="tab" aria-selected="true" aria-label="Show benefit 1" data-carousel-dot="0"></button>
                    <button class="benefits-dot" type="button" role="tab" aria-selected="false" aria-label="Show benefit 2" data-carousel-dot="1"></button>
                    <button class="benefits-dot" type="button" role="tab" aria-selected="false" aria-label="Show benefit 3" data-carousel-dot="2"></button>
                    <button class="benefits-dot" type="button" role="tab" aria-selected="false" aria-label="Show benefit 4" data-carousel-dot="3"></button>
                    <button class="benefits-dot" type="button" role="tab" aria-selected="false" aria-label="Show benefit 5" data-carousel-dot="4"></button>
                  </div>
                  <button class="benefits-arrow" type="button" data-carousel-next aria-label="Show next benefit">
                    <span aria-hidden="true">&rarr;</span>
                  </button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </section>

      <section class="preview-section" id="preview" aria-labelledby="preview-title">
        <div class="preview-shell">
          <div class="preview-content">
            <h2 id="preview-title">PREVIEW</h2>
            <p class="preview-intro">A humorous guide covering the Life 101 topics rarely taught in school</p>

            <div class="preview-topics" aria-label="Topics covered in the book">
              <span>Dinner etiquette</span>
              <span>Travel insurance</span>
              <span>Investing</span>
              <span>Happiness</span>
              <span>401(k)s</span>
              <span>Mortgages</span>
              <span>Buying vs. leasing a car</span>
              <span>HMOs and PPOs</span>
              <span>Sassy words like "deductions"</span>
              <span>Alumni giving</span>
              <span>Remote work</span>
              <span>Taxes</span>
              <span>Auto insurance</span>
              <span>Apartment leases</span>
              <span>AI</span>
              <span>Credit</span>
              <span class="preview-topics-more">And much more...</span>
            </div>

            <div class="preview-viewer">
              <iframe
                src="https://drive.google.com/file/d/1yCecbRSkVfaJ8NYvkszElkrMzuDfRKGa/preview"
                width="100%"
                height="500"
                allow="autoplay"
                title="Graduate's Almanac preview"
              ></iframe>
            </div>

            <div class="preview-faq" aria-label="Preview questions and answers">
              <article class="preview-faq-item">
                <h3>What's new in the book?</h3>
                <p>
                  The book was revised in 2026 with updated money and tax content, a new AI page
                  (p. 64), and the removal of select content, including the LGBTQ page.
                </p>
              </article>

              <article class="preview-faq-item">
                <h3>How often do you update your books?</h3>
                <p>
                  We make minor updates every 2 to 3 years. Most content is timeless, and many
                  organizations order multiple years at once.
                </p>
              </article>

              <article class="preview-faq-item">
                <h3>Can I get a sample copy to review?</h3>
                <p>
                  Yes, request your free copy
                  <a
                    href="https://docs.google.com/forms/d/e/1FAIpQLScRIogrNDTW5D3abxggbkoUFcCHKOQk35R16V4REW-sv5WXWQ/viewform?usp=header"
                    target="_blank"
                    rel="noreferrer"
                  >here</a>.
                </p>
              </article>

              <article class="preview-faq-item">
                <h3>How is the book printed?</h3>
                <p>The soft cover has UV gloss and perfect binding.</p>
              </article>
            </div>
          </div>
        </div>
      </section>

      <section class="customize-section" id="customize" aria-labelledby="customize-title">
        <div class="customize-content">
          <h2 id="customize-title">CUSTOMIZE</h2>
          <p class="customize-intro">Customize the <strong>outside cover</strong> (front/back) and book title.</p>

          <div
            class="customize-carousel"
            data-customize-carousel
            aria-roledescription="carousel"
            aria-label="Customized cover examples"
          >
            <div class="customize-viewport">
              <article class="customize-slide is-active" data-customize-slide aria-hidden="false">
                <div class="customize-slide-stack">
                  <img src="art/customize_cover/custom_topS1.jpg" alt="Customized front and back cover example 1">
                  <img src="art/customize_cover/custom_top2S1.jpg" alt="Matching interior customization example 1">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_cover/custom_topS2.jpg" alt="Customized front and back cover example 2">
                  <img src="art/customize_cover/custom_top2S2.jpg" alt="Matching interior customization example 2">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_cover/custom_topS3.jpg" alt="Customized front and back cover example 3">
                  <img src="art/customize_cover/custom_top2S3.jpg" alt="Matching interior customization example 3">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_cover/custom_topS4.jpg" alt="Customized front and back cover example 4">
                  <img src="art/customize_cover/custom_top2S4.jpg" alt="Matching interior customization example 4">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_cover/custom_topS5.jpg" alt="Customized front and back cover example 5">
                  <img src="art/customize_cover/custom_top2S5.jpg" alt="Matching interior customization example 5">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_cover/custom_topS6.jpg" alt="Customized front and back cover example 6">
                  <img src="art/customize_cover/custom_top2S6.jpg" alt="Matching interior customization example 6">
                </div>
              </article>
            </div>

            <div class="customize-nav">
              <button class="customize-arrow" type="button" data-customize-prev aria-label="Show previous customized cover">
                <span aria-hidden="true">&larr;</span>
              </button>
              <div class="customize-pagination" role="tablist" aria-label="Select a customized cover example">
                <button class="customize-dot is-active" type="button" role="tab" aria-selected="true" aria-label="Show customized cover 1" data-customize-dot="0"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized cover 2" data-customize-dot="1"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized cover 3" data-customize-dot="2"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized cover 4" data-customize-dot="3"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized cover 5" data-customize-dot="4"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized cover 6" data-customize-dot="5"></button>
              </div>
              <button class="customize-arrow" type="button" data-customize-next aria-label="Show next customized cover">
                <span aria-hidden="true">&rarr;</span>
              </button>
            </div>
          </div>
        </div>
      </section>

      <section class="customize-insert-section" aria-labelledby="customize-insert-title">
        <div class="customize-content">
          <p class="customize-insert-intro" id="customize-insert-title">
            For an extra cost, add an <strong>8-page insert</strong> to the front of your book.
          </p>

          <div
            class="customize-carousel customize-insert-carousel"
            data-customize-insert-carousel
            aria-roledescription="carousel"
            aria-label="Customized insert examples"
          >
            <div class="customize-viewport">
              <article class="customize-slide is-active" data-customize-insert-slide aria-hidden="false">
                <div class="customize-slide-stack">
                  <img src="art/customize_insert/custom_botS1.jpg?v=20260423-1311" alt="Customized insert spread example 1">
                </div>
              </article>

              <article class="customize-slide" data-customize-insert-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_insert/custom_botS2.jpg?v=20260423-1311" alt="Customized insert spread example 2">
                </div>
              </article>

              <article class="customize-slide" data-customize-insert-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_insert/custom_botS3.jpg?v=20260423-1311" alt="Customized insert spread example 3">
                </div>
              </article>

              <article class="customize-slide" data-customize-insert-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_insert/custom_botS4.jpg?v=20260423-1311" alt="Customized insert spread example 4">
                </div>
              </article>

              <article class="customize-slide" data-customize-insert-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_insert/custom_botS5.jpg?v=20260423-1311" alt="Customized insert spread example 5">
                </div>
              </article>

              <article class="customize-slide" data-customize-insert-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_insert/custom_botS6.jpg?v=20260423-1311" alt="Customized insert spread example 6">
                </div>
              </article>

              <article class="customize-slide" data-customize-insert-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_insert/custom_botS7.jpg?v=20260423-1311" alt="Customized insert spread example 7">
                </div>
              </article>

              <article class="customize-slide" data-customize-insert-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img src="art/customize_insert/custom_botS8.jpg?v=20260423-1311" alt="Customized insert spread example 8">
                </div>
              </article>
            </div>

            <div class="customize-nav">
              <button class="customize-arrow" type="button" data-customize-insert-prev aria-label="Show previous insert example">
                <span aria-hidden="true">&larr;</span>
              </button>
              <div class="customize-pagination" role="tablist" aria-label="Select a customized insert example">
                <button class="customize-dot is-active" type="button" role="tab" aria-selected="true" aria-label="Show customized insert 1" data-customize-insert-dot="0"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized insert 2" data-customize-insert-dot="1"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized insert 3" data-customize-insert-dot="2"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized insert 4" data-customize-insert-dot="3"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized insert 5" data-customize-insert-dot="4"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized insert 6" data-customize-insert-dot="5"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized insert 7" data-customize-insert-dot="6"></button>
                <button class="customize-dot" type="button" role="tab" aria-selected="false" aria-label="Show customized insert 8" data-customize-insert-dot="7"></button>
              </div>
              <button class="customize-arrow" type="button" data-customize-insert-next aria-label="Show next insert example">
                <span aria-hidden="true">&rarr;</span>
              </button>
            </div>
          </div>
        </div>
      </section>

      <section class="customize-faq-section" aria-label="Customize questions and answers">
        <div class="customize-content">
          <div class="customize-faq">
            <article class="customize-faq-item">
              <h3>What can I customize again?</h3>
              <p>
                Imagine ripping the cover off the book. You can customize the
                <strong>outside cover</strong> (front and back) and <strong>inside cover</strong>
                (front and back), for a total of four areas. For an extra cost, you can add an
                <strong>8-page insert</strong> (four pages, front and back) to the front of your
                book.
              </p>
            </article>

            <article class="customize-faq-item">
              <h3>Are the pages customized?</h3>
              <p>No, the 176 pages of the book cannot be customized.</p>
            </article>

            <article class="customize-faq-item">
              <h3>Can we change the book title?</h3>
              <p>
                Yes, many organizations use names like Life After Faber College, A Blue Devil's
                Guide to Adulting, A Faber Graduate's Almanac, Faber for Life, or Life After
                Faber, Explained. The title can be updated on the outside cover and spine, but the
                intro pages remain The Graduate's Almanac.
              </p>
            </article>

            <article class="customize-faq-item">
              <h3>What else can be customized?</h3>
              <p>
                The inside cover can be printed in color (no extra cost), and the 8-page insert
                can be printed in color (extra cost).
              </p>
            </article>

            <article class="customize-faq-item">
              <h3>How can I ask specific questions?</h3>
              <p>
                You can reach us at
                <a href="mailto:support@capandcompass.com">support@capandcompass.com</a> or by
                calling 512-539-2894.
              </p>
            </article>
          </div>
        </div>
      </section>

      <section class="pricing-calculator-section" id="pricing" aria-labelledby="pricing-calculator-title">
        <div class="pricing-shell pricing-calculator-shell">
          <div class="pricing-content pricing-calculator-content">
            <h2 id="pricing-calculator-title">PRICING</h2>
            <p class="pricing-intro pricing-calculator-intro">
              Annual special: Order by Feb 12, 2027 for delivery by April 16, 2027.
            </p>

            <div class="pricing-calculator-card" data-pricing-calculator>
              <form class="pricing-calculator-form" aria-label="Pricing calculator">
                <label class="pricing-field">
                  <span class="pricing-field-header">
                    <span>Quantity</span>
                    <span class="pricing-field-alert" data-pricing-alert hidden>Minimum: 100</span>
                  </span>
                  <input
                    class="pricing-input"
                    type="text"
                    inputmode="numeric"
                    name="quantity"
                    value="500"
                    required
                  >
                </label>

                <label class="pricing-field">
                  <span>Add an 8-page insert</span>
                  <select class="pricing-input" name="insert">
                    <option value="none">No</option>
                    <option value="bw" selected>Yes (b/w)</option>
                    <option value="color">Yes (color)</option>
                  </select>
                </label>

                <label class="pricing-field">
                  <span>Timing</span>
                  <select class="pricing-input" name="timing">
                    <option value="annual">Annual special</option>
                    <option value="anytime">Anytime</option>
                  </select>
                </label>

                <label class="pricing-field">
                  <span>Design</span>
                  <select class="pricing-input" name="design">
                    <option value="client">We'll design in-house</option>
                    <option value="company">You do the design</option>
                  </select>
                </label>
              </form>

              <div class="pricing-results" aria-live="polite">
                <div class="pricing-results-header">
                  <p class="pricing-results-label">Quote</p>
                </div>

                <div class="pricing-results-list" data-pricing-lines></div>

                <div class="pricing-total-row" data-pricing-total></div>
              </div>
            </div>

            <div class="pricing-faq" aria-label="Pricing questions and answers">
              <article class="pricing-faq-item">
                <h3>When will books get delivered?</h3>
                <p>
                  We offer an <strong>annual special</strong> (see dates above) where we batch
                  orders for cost efficiency and pass the savings on to you. Or order
                  <strong>anytime</strong> for delivery in 21 business days for an additional
                  cost.
                </p>
              </article>

              <article class="pricing-faq-item">
                <h3>Do you sell non-customized books?</h3>
                <p>No, not anymore.</p>
              </article>

              <article class="pricing-faq-item">
                <h3>How do you charge me?</h3>
                <p>
                  We'll send you an invoice with payment due once you receive books. You can pay by
                  check or credit card.
                </p>
              </article>

              <article class="pricing-faq-item">
                <h3>Can I order less than 100 books?</h3>
                <p>
                  No, but the book text is written to stay current for multiple years. Many
                  organizations order for 2-3 years at once.
                </p>
              </article>

              <article class="pricing-faq-item">
                <h3>Do you charge sales tax?</h3>
                <p>Usually no, but please let us know if your jurisdiction requires it.</p>
              </article>

              <article class="pricing-faq-item">
                <h3>Any other pricing tips?</h3>
                <p>Many organizations partner with other offices or affinity partners to share the cost.</p>
              </article>
            </div>
          </div>
        </div>
      </section>

      <section class="order-section" id="order" aria-labelledby="order-title">
        <div class="order-shell">
          <div class="order-content">
            <h2 id="order-title">ORDER</h2>

            <div class="order-steps" aria-label="How to order">
              <article class="order-step-card">
                <span class="order-step-number">STEP 1</span>
                <p>
                  Review
                  <a href="/cc_examples.zip">custom examples</a> for inspiration.
                </p>
              </article>

              <article class="order-step-card">
                <span class="order-step-number">STEP 2</span>
                <p>
                  Download
                  <a href="/cc_templates.zip">these templates</a> (Photoshop, InDesign).
                </p>
              </article>

              <article class="order-step-card">
                <span class="order-step-number">STEP 3</span>
                <p>
                  Email your PDFs, quantity, shipping address, and date needed to
                  <a href="mailto:support@capandcompass.com">support@capandcompass.com</a>.
                </p>
              </article>
            </div>

            <div class="order-faq" aria-label="Order questions and answers">
              <article class="order-faq-item">
                <h3>I don't have a designer. Can you help me?</h3>
                <p>
                  Yes, for an extra fee (see pricing above), we can design your books. First,
                  collaborate with your team on your images and text. Then <a href="mailto:support@capandcompass.com">email</a>
                  us high resolution images and very specific instructions.
                </p>
              </article>

              <article class="order-faq-item">
                <h3>Will I see proofs?</h3>
                <p>
                  Yes, we will email you PDF proofs for review and approval. We do not offer hard
                  copy proofs, but our team ensures everything is print-ready so your books look
                  great.
                </p>
              </article>
            </div>
          </div>
        </div>
      </section>
    </main>

    <footer class="site-footer" aria-label="Footer">
      <div class="footer-content">
        <p class="footer-contact-row">
          <a class="footer-contact" href="mailto:support@capandcompass.com">support@capandcompass.com</a>
          <span aria-hidden="true">|</span>
          <span class="footer-phone">512.539.2894</span>
        </p>

        <nav class="footer-nav" aria-label="Footer navigation">
          <a href="#about">About</a>
          <a href="#preview">Preview</a>
          <a href="#customize">Customize</a>
          <a href="#pricing">Pricing</a>
          <a href="#order">Order</a>
        </nav>

        <p class="footer-copy">© All copyright reserved 2026.</p>
      </div>
    </footer>

    <script>
      const menuToggle = document.querySelector(".menu-toggle");
      const mobileMenu = document.querySelector(".mobile-menu");

      if (menuToggle && mobileMenu) {
        const closeMenu = () => {
          menuToggle.setAttribute("aria-expanded", "false");
          menuToggle.setAttribute("aria-label", "Open menu");
          mobileMenu.hidden = true;
          document.body.classList.remove("menu-open");
        };

        const openMenu = () => {
          menuToggle.setAttribute("aria-expanded", "true");
          menuToggle.setAttribute("aria-label", "Close menu");
          mobileMenu.hidden = false;
          document.body.classList.add("menu-open");
        };

        menuToggle.addEventListener("click", () => {
          const isExpanded = menuToggle.getAttribute("aria-expanded") === "true";
          if (isExpanded) {
            closeMenu();
          } else {
            openMenu();
          }
        });

        mobileMenu.querySelectorAll("a").forEach((link) => {
          link.addEventListener("click", closeMenu);
        });

        window.addEventListener("resize", () => {
          if (window.innerWidth > 720) {
            closeMenu();
          }
        });
      }

      const initCarousel = ({
        rootSelector,
        slideSelector,
        dotSelector,
        previousSelector,
        nextSelector,
        delay = 4000,
      }) => {
        const carousel = document.querySelector(rootSelector);

        if (!carousel) {
          return;
        }

        const slides = Array.from(carousel.querySelectorAll(slideSelector));
        const dots = Array.from(carousel.querySelectorAll(dotSelector));
        const previousButton = carousel.querySelector(previousSelector);
        const nextButton = carousel.querySelector(nextSelector);
        let activeIndex = 0;
        let autoAdvanceId;

        const renderSlide = (nextIndex) => {
          activeIndex = (nextIndex + slides.length) % slides.length;

          slides.forEach((slide, index) => {
            const isActive = index === activeIndex;
            slide.classList.toggle("is-active", isActive);
            slide.setAttribute("aria-hidden", String(!isActive));
          });

          dots.forEach((dot, index) => {
            const isActive = index === activeIndex;
            dot.classList.toggle("is-active", isActive);
            dot.setAttribute("aria-selected", String(isActive));
          });
        };

        const stopAutoAdvance = () => {
          window.clearInterval(autoAdvanceId);
        };

        const startAutoAdvance = () => {
          stopAutoAdvance();
          autoAdvanceId = window.setInterval(() => {
            renderSlide(activeIndex + 1);
          }, delay);
        };

        previousButton?.addEventListener("click", () => {
          renderSlide(activeIndex - 1);
          stopAutoAdvance();
        });

        nextButton?.addEventListener("click", () => {
          renderSlide(activeIndex + 1);
          stopAutoAdvance();
        });

        dots.forEach((dot, index) => {
          dot.addEventListener("click", () => {
            renderSlide(index);
            startAutoAdvance();
          });
        });

        carousel.addEventListener("mouseenter", stopAutoAdvance);
        carousel.addEventListener("mouseleave", startAutoAdvance);
        carousel.addEventListener("focusin", stopAutoAdvance);
        carousel.addEventListener("focusout", startAutoAdvance);

        renderSlide(0);
        startAutoAdvance();
      };

      initCarousel({
        rootSelector: "[data-carousel]",
        slideSelector: "[data-slide]",
        dotSelector: "[data-carousel-dot]",
        previousSelector: "[data-carousel-prev]",
        nextSelector: "[data-carousel-next]",
      });

      initCarousel({
        rootSelector: "[data-customize-carousel]",
        slideSelector: "[data-customize-slide]",
        dotSelector: "[data-customize-dot]",
        previousSelector: "[data-customize-prev]",
        nextSelector: "[data-customize-next]",
      });

      initCarousel({
        rootSelector: "[data-customize-insert-carousel]",
        slideSelector: "[data-customize-insert-slide]",
        dotSelector: "[data-customize-insert-dot]",
        previousSelector: "[data-customize-insert-prev]",
        nextSelector: "[data-customize-insert-next]",
      });

      const pricingCalculator = document.querySelector("[data-pricing-calculator]");

      if (pricingCalculator) {
        const pricingMatrix = [
          { quantity: 100, coverAnnual: 15, coverAnytime: 18.5, insertBw: 3, insertColor: 4, shipping: 2 },
          { quantity: 200, coverAnnual: 11, coverAnytime: 12.5, insertBw: 2.5, insertColor: 3.5, shipping: 1.75 },
          { quantity: 300, coverAnnual: 9, coverAnytime: 11, insertBw: 2, insertColor: 2.75, shipping: 1.5 },
          { quantity: 500, coverAnnual: 7, coverAnytime: 8.5, insertBw: 1.5, insertColor: 2.25, shipping: 1 },
          { quantity: 750, coverAnnual: 6.5, coverAnytime: 8, insertBw: 1.5, insertColor: 2, shipping: 0.8 },
          { quantity: 1000, coverAnnual: 6, coverAnytime: 7.5, insertBw: 1.25, insertColor: 1.75, shipping: 0.75 },
          { quantity: 2000, coverAnnual: 5.5, coverAnytime: 6.75, insertBw: 0.95, insertColor: 1.25, shipping: 0.7 },
          { quantity: 3000, coverAnnual: 5, coverAnytime: 6, insertBw: 0.75, insertColor: 0.95, shipping: 0.65 },
          { quantity: 4000, coverAnnual: 4.5, coverAnytime: 5, insertBw: 0.5, insertColor: 0.65, shipping: 0.6 },
        ];

        const designFlatFee = 300;
        const form = pricingCalculator.querySelector(".pricing-calculator-form");
        const quantityInput = form?.elements.namedItem("quantity");
        const insertInput = form?.elements.namedItem("insert");
        const timingInput = form?.elements.namedItem("timing");
        const designInput = form?.elements.namedItem("design");
        const alertOutput = pricingCalculator.querySelector("[data-pricing-alert]");
        const linesOutput = pricingCalculator.querySelector("[data-pricing-lines]");
        const totalOutput = pricingCalculator.querySelector("[data-pricing-total]");
        const moneyFormatter = new Intl.NumberFormat("en-US", {
          style: "currency",
          currency: "USD",
        });

        const formatMoney = (value) => moneyFormatter.format(value);

        const resolveTier = (quantity) => {
          return pricingMatrix.reduce((selectedTier, tier) => {
            if (quantity >= tier.quantity) {
              return tier;
            }

            return selectedTier;
          }, pricingMatrix[0]);
        };

        const buildLine = ({ label, perBook, total }) => {
          return `
            <div class="pricing-line-item">
              <p class="pricing-line-name">${label}</p>
              <div class="pricing-line-values">
                <span>${formatMoney(perBook)}/book</span>
                <strong>${formatMoney(total)}</strong>
              </div>
            </div>
          `;
        };

        const renderPricing = () => {
          const rawValue = String(quantityInput?.value || "");
          const numericValue = Number.parseInt(rawValue.replace(/[^\d]/g, ""), 10);
          const hasValidNumber = Number.isFinite(numericValue);
          const isBelowMinimum = hasValidNumber && numericValue < 100;
          const quantity = hasValidNumber ? Math.max(100, Math.floor(numericValue)) : 100;
          const tier = resolveTier(quantity);
          const insertSelection = insertInput?.value || "none";
          const timingSelection = timingInput?.value || "annual";
          const designSelection = designInput?.value || "client";
          const coverPerBook = timingSelection === "annual" ? tier.coverAnnual : tier.coverAnytime;
          const insertPerBook =
            insertSelection === "bw" ? tier.insertBw : insertSelection === "color" ? tier.insertColor : 0;
          const designTotal = designSelection === "company" ? designFlatFee : 0;
          const designPerBook = designTotal > 0 ? designTotal / quantity : 0;
          const shippingPerBook = tier.shipping;
          const lineItems = [
            {
              label:
                timingSelection === "annual"
                  ? "Cover & text (annual special)"
                  : "Cover & text (anytime)",
              perBook: coverPerBook,
              total: coverPerBook * quantity,
            },
            {
              label: insertSelection === "color" ? "Insert (color)" : "Insert (b/w)",
              perBook: insertPerBook,
              total: insertPerBook * quantity,
            },
            {
              label: "Design work",
              perBook: designPerBook,
              total: designTotal,
            },
            {
              label: "Shipping",
              perBook: shippingPerBook,
              total: shippingPerBook * quantity,
            },
          ].filter((item) => item.total > 0);

          const total = lineItems.reduce((sum, item) => sum + item.total, 0);

          if (alertOutput) {
            alertOutput.hidden = !isBelowMinimum;
          }

          quantityInput?.classList.toggle("is-invalid", isBelowMinimum);
          linesOutput.innerHTML = lineItems.map(buildLine).join("");
          totalOutput.innerHTML = `
            <p class="pricing-total-label">Total</p>
            <div class="pricing-total-values">
              <span>${formatMoney(total / quantity)}/book</span>
              <strong>${formatMoney(total)}</strong>
            </div>
          `;
        };

        form?.addEventListener("input", renderPricing);
        form?.addEventListener("change", renderPricing);
        renderPricing();
      }
    </script>
  </body>
</html>
