<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="robots" content="index, follow, max-image-preview:large">
    <meta
      name="description"
      content="Custom graduation and alumni books for colleges, companies, and organizations. Preview the Graduate's Almanac, explore customization options, and get pricing from Cap & Compass."
    >
    <meta name="theme-color" content="#003da5">
    <link rel="canonical" href="https://www.capandcompass.com/">
    <meta property="og:locale" content="en_US">
    <meta property="og:type" content="website">
    <meta property="og:site_name" content="Cap &amp; Compass">
    <meta property="og:title" content="Cap &amp; Compass">
    <meta
      property="og:description"
      content="Custom graduation and alumni books for colleges, companies, and organizations. Preview the Graduate's Almanac, explore customization options, and get pricing."
    >
    <meta property="og:url" content="https://www.capandcompass.com/">
    <meta property="og:image" content="https://www.capandcompass.com/assets/social-share.jpg">
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="og:image:alt" content="Cap & Compass custom graduation and alumni books">
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="Cap &amp; Compass">
    <meta
      name="twitter:description"
      content="Custom graduation and alumni books for colleges, companies, and organizations. Preview the Graduate's Almanac, explore customization options, and get pricing."
    >
    <meta name="twitter:image" content="https://www.capandcompass.com/assets/social-share.jpg">
    <title>Cap &amp; 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"
    >
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@graph": [
          {
            "@type": "Organization",
            "@id": "https://www.capandcompass.com/#organization",
            "name": "Cap & Compass",
            "url": "https://www.capandcompass.com/",
            "logo": {
              "@type": "ImageObject",
              "url": "https://www.capandcompass.com/assets/logo-crop.png",
              "width": 285,
              "height": 74
            },
            "image": "https://www.capandcompass.com/assets/social-share.jpg",
            "email": "support@capandcompass.com",
            "telephone": "+1-512-539-2894",
            "description": "Cap & Compass creates custom graduation and alumni books for colleges, companies, and organizations."
          },
          {
            "@type": "WebSite",
            "@id": "https://www.capandcompass.com/#website",
            "url": "https://www.capandcompass.com/",
            "name": "Cap & Compass",
            "publisher": {
              "@id": "https://www.capandcompass.com/#organization"
            },
            "inLanguage": "en-US"
          },
          {
            "@type": "Service",
            "@id": "https://www.capandcompass.com/#service",
            "serviceType": "Custom graduation and alumni books",
            "name": "Customized Graduate's Almanac books",
            "provider": {
              "@id": "https://www.capandcompass.com/#organization"
            },
            "areaServed": {
              "@type": "Country",
              "name": "United States"
            },
            "audience": [
              {
                "@type": "EducationalOrganization",
                "name": "Colleges and universities"
              },
              {
                "@type": "Organization",
                "name": "Companies and employers"
              },
              {
                "@type": "Organization",
                "name": "Associations and organizations"
              }
            ],
            "description": "Custom books that use humor to teach real-world life skills after school, with optional customized covers and inserts."
          }
        ]
      }
    </script>
    <link rel="stylesheet" href="styles.css?v=14">
  </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" width="285" height="74" decoding="async">
      </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 explain the life skills needed after college.</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-800.png">
            <img
              class="book-composite"
              src="assets/three_books.webp"
              alt="Three custom graduate almanac book covers"
              width="1072"
              height="369"
              decoding="async"
              fetchpriority="high"
            >
          </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" width="930" height="121" loading="lazy" decoding="async">
                  <img src="assets/indexlogo2.png" alt="Customer logo 2" width="930" height="121" loading="lazy" decoding="async">
                  <img src="assets/indexlogo3.png" alt="Customer logo 3" width="930" height="121" loading="lazy" decoding="async">
                </div>
                <div class="logo-row" aria-hidden="true">
                  <img src="assets/indexlogo1.png" alt="" width="930" height="121" loading="lazy" decoding="async">
                  <img src="assets/indexlogo2.png" alt="" width="930" height="121" loading="lazy" decoding="async">
                  <img src="assets/indexlogo3.png" alt="" width="930" height="121" loading="lazy" decoding="async">
                </div>
              </div>

              <div class="logo-track logo-track-bottom">
                <div class="logo-row">
                  <img src="assets/indexlogo4.png" alt="Customer logo 4" width="930" height="121" loading="lazy" decoding="async">
                  <img src="assets/indexlogo5.png" alt="Customer logo 5" width="930" height="121" loading="lazy" decoding="async">
                  <img src="assets/indexlogo6.png" alt="Customer logo 6" width="930" height="121" loading="lazy" decoding="async">
                </div>
                <div class="logo-row" aria-hidden="true">
                  <img src="assets/indexlogo4.png" alt="" width="930" height="121" loading="lazy" decoding="async">
                  <img src="assets/indexlogo5.png" alt="" width="930" height="121" loading="lazy" decoding="async">
                  <img src="assets/indexlogo6.png" alt="" width="930" height="121" loading="lazy" decoding="async">
                </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"
                          width="1600"
                          height="961"
                          loading="lazy"
                          decoding="async"
                        >
                      </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
                          data-src="art/about_slider/about_slider_2.jpg?v=20260425-1635"
                          alt="Custom cover and insert pages that highlight benefits and sponsor messaging"
                          width="1600"
                          height="968"
                          loading="lazy"
                          decoding="async"
                        >
                      </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
                          data-src="art/about_slider/about_slider_3.jpg?v=20260425-1635"
                          alt="Sponsored spread designed to offset book costs through partners or advertisers"
                          width="1600"
                          height="964"
                          loading="lazy"
                          decoding="async"
                        >
                      </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
                          data-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"
                          width="1600"
                          height="961"
                          loading="lazy"
                          decoding="async"
                        >
                      </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
                          data-src="art/about_slider/about_slider_5.jpg?v=20260423-1348"
                          alt="Graduate feedback page showing enthusiasm for the book"
                          width="1600"
                          height="961"
                          loading="lazy"
                          decoding="async"
                        >
                      </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" data-preview-embed>
              <div class="preview-viewer-shell">
                <div class="preview-viewer-panel">
                  <button
                    class="button preview-viewer-button"
                    type="button"
                    data-preview-load
                    data-preview-src="https://drive.google.com/file/d/1yCecbRSkVfaJ8NYvkszElkrMzuDfRKGa/preview"
                  >
                    Preview the Book
                  </button>
                </div>
              </div>
            </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" width="1200" height="377" loading="lazy" decoding="async">
                  <img src="art/customize_cover/custom_top2S1.jpg" alt="Matching interior customization example 1" width="1200" height="378" loading="lazy" decoding="async">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img data-src="art/customize_cover/custom_topS2.jpg" alt="Customized front and back cover example 2" width="1200" height="377" loading="lazy" decoding="async">
                  <img data-src="art/customize_cover/custom_top2S2.jpg" alt="Matching interior customization example 2" width="1200" height="378" loading="lazy" decoding="async">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img data-src="art/customize_cover/custom_topS3.jpg" alt="Customized front and back cover example 3" width="1200" height="377" loading="lazy" decoding="async">
                  <img data-src="art/customize_cover/custom_top2S3.jpg" alt="Matching interior customization example 3" width="1200" height="378" loading="lazy" decoding="async">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img data-src="art/customize_cover/custom_topS4.jpg" alt="Customized front and back cover example 4" width="1200" height="377" loading="lazy" decoding="async">
                  <img data-src="art/customize_cover/custom_top2S4.jpg" alt="Matching interior customization example 4" width="1200" height="378" loading="lazy" decoding="async">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img data-src="art/customize_cover/custom_topS5.jpg" alt="Customized front and back cover example 5" width="1200" height="377" loading="lazy" decoding="async">
                  <img data-src="art/customize_cover/custom_top2S5.jpg" alt="Matching interior customization example 5" width="1200" height="378" loading="lazy" decoding="async">
                </div>
              </article>

              <article class="customize-slide" data-customize-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img data-src="art/customize_cover/custom_topS6.jpg" alt="Customized front and back cover example 6" width="1200" height="377" loading="lazy" decoding="async">
                  <img data-src="art/customize_cover/custom_top2S6.jpg" alt="Matching interior customization example 6" width="1200" height="378" loading="lazy" decoding="async">
                </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" width="1206" height="747" loading="lazy" decoding="async">
                </div>
              </article>

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

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

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

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

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

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

              <article class="customize-slide" data-customize-insert-slide aria-hidden="true">
                <div class="customize-slide-stack">
                  <img data-src="art/customize_insert/custom_botS8.jpg?v=20260423-1311" alt="Customized insert spread example 8" width="1206" height="747" loading="lazy" decoding="async">
                </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 clients customize it with titles like Life After Faber College, Faber's
                Guide to Adulting, or Life After Faber, Explained. The cover and spine can be
                updated to your chosen title, but the interior title page will still read 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>Can I get a sample copy to review?</h3>
              <p>
                Yes, request a free copy customized by another organization
                <a
                  href="https://docs.google.com/forms/d/e/1FAIpQLScRIogrNDTW5D3abxggbkoUFcCHKOQk35R16V4REW-sv5WXWQ/viewform"
                  target="_blank"
                  rel="noreferrer"
                >here</a>.
              </p>
            </article>

            <article class="customize-faq-item">
              <h3>How can I ask specific questions?</h3>
              <p>
                You can reach us at
                <a href="/cdn-cgi/l/email-protection#7d0e080d0d120f093d1e1c0d1c13191e12100d1c0e0e531e1210"><span class="__cf_email__" data-cfemail="d1a2a4a1a1bea3a591b2b0a1b0bfb5b2bebca1b0a2a2ffb2bebc">[email&#160;protected]</span></a> or by
                calling <a href="tel:+15125392894">512-539-2894</a>.
              </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">You design</option>
                    <option value="company">Cap & Compass designs</option>
                  </select>
                </label>
              </form>

              <div class="pricing-results" aria-live="polite">
                <div class="pricing-results-header">
                  <p class="pricing-results-label" data-pricing-meta></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 does payment work?</h3>
                <p>
                  Payment is due upon receipt of books. We'll send an invoice when you order, and we accept purchase orders. Pay by check or credit card. <a href="/cdn-cgi/l/email-protection#54272124243b262014373524353a30373b39243527277a373b39">Email us</a> for a formal quote.
                </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>
                  Download
                  <a href="https://www.capandcompass.com/cc_examples.zip">hi-res 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> and instructions for Adobe and other software. If we're creating your artwork (extra fee), email us your files and detailed instructions.
                </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="/cdn-cgi/l/email-protection#e695939696899492a685879687888285898b96879595c885898b"><span class="__cf_email__" data-cfemail="56252326263924221635372637383235393b263725257835393b">[email&#160;protected]</span></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="/cdn-cgi/l/email-protection#f784828787988583b794968796999394989a87968484d994989a">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="/cdn-cgi/l/email-protection#f0838580809f8284b0939180919e94939f9d80918383de939f9d"><span class="__cf_email__" data-cfemail="b7c4c2c7c7d8c5c3f7d4d6c7d6d9d3d4d8dac7d6c4c499d4d8da">[email&#160;protected]</span></a>
          <span aria-hidden="true">|</span>
          <a class="footer-phone" href="tel:+15125392894">512.539.2894</a>
        </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 data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><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 loadDeferredMedia = (root) => {
        root?.querySelectorAll("[data-src]").forEach((element) => {
          if (element.dataset.src && !element.getAttribute("src")) {
            element.setAttribute("src", element.dataset.src);
          }
        });
      };

      const initPreviewEmbed = () => {
        const previewRoot = document.querySelector("[data-preview-embed]");
        const previewButton = previewRoot?.querySelector("[data-preview-load]");

        if (!previewRoot || !previewButton) {
          return;
        }

        previewButton.addEventListener("click", () => {
          if (previewRoot.dataset.loaded === "true") {
            return;
          }

          const iframe = document.createElement("iframe");
          iframe.src = previewButton.dataset.previewSrc;
          iframe.title = "Graduate's Almanac preview";
          iframe.loading = "lazy";
          iframe.allow = "autoplay";
          iframe.width = "100%";
          iframe.height = "500";

          previewRoot.innerHTML = "";
          previewRoot.appendChild(iframe);
          previewRoot.dataset.loaded = "true";
          previewRoot.classList.add("is-loaded");
        });
      };

      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));
          });

          loadDeferredMedia(slides[activeIndex]);

          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]",
      });

      initPreviewEmbed();

      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 metaOutput = pricingCalculator.querySelector("[data-pricing-meta]");
        const moneyFormatter = new Intl.NumberFormat("en-US", {
          style: "currency",
          currency: "USD",
        });
        const quantityFormatter = new Intl.NumberFormat("en-US");

        const formatMoney = (value) => moneyFormatter.format(value);
        const formatQuantity = (value) => quantityFormatter.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 timingLabel = timingSelection === "annual" ? "annual special" : "anytime";
          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: `Custom cover (${timingLabel})`,
              perBook: coverPerBook,
              total: coverPerBook * quantity,
            },
            {
              label:
                insertSelection === "color" ? "Custom insert (color)" : "Custom 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);
          if (metaOutput) {
            metaOutput.textContent = `Quote for ${formatQuantity(quantity)} books`;
          }
          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>
