Nex AGI Nex N2.5 Mini – Hobbies and Interests

via Nex AGI · Generated

  • AIMAC Debt 4.85
  • Cost $0.0035
  • Total Violations 20
  • HTML Size 82 KB
  • Em Dashes 5

Screenshot

View Nex AGI Nex N2.5 Mini Hobbies and Interests page View Live Page

Accessibility Issues Found

20 Serious

  • color-contrast serious 20 instances

    Elements must meet minimum color contrast ratio thresholds

    Example HTML <a class="nav-cta" href="#newsletter">Join free</a>

Artifacts

View Generated HTML
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Craft & Compass is a modern hobby portal for guided projects, collecting inspiration, local clubs, and creative communities.">
  <meta name="theme-color" content="#163f35">
  <meta property="og:title" content="Craft & Compass — Find your next obsession">
  <meta property="og:description" content="Guided projects, practical guides, and creative communities for people who love making and collecting.">
  <meta property="og:type" content="website">
  <title>Craft &amp; Compass — Find Your Next Obsession</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=DM+Sans:wght@400;500;600;700&amp;family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600&amp;display=swap" rel="stylesheet">
  <script>document.documentElement.classList.add('js');</script>
  <style>
    :root {
      --ink: #18231f;
      --muted: #65726c;
      --forest: #163f35;
      --forest-dark: #0f3029;
      --forest-soft: #dce8dd;
      --cream: #f7f4ec;
      --paper: #fffdfa;
      --coral: #e56b4f;
      --coral-dark: #c84f37;
      --gold: #d9a94f;
      --sky: #e6f0f0;
      --line: rgba(24, 35, 31, 0.12);
      --shadow-sm: 0 8px 24px rgba(24, 35, 31, 0.08);
      --shadow-lg: 0 24px 70px rgba(15, 48, 41, 0.14);
      --radius: 22px;
      --radius-lg: 30px;
      --max: 1180px;
    }

    * { box-sizing: border-box; }
    html { scroll-behavior: smooth; scroll-padding-top: 90px; }
    body {
      margin: 0;
      color: var(--ink);
      background: var(--cream);
      font-family: "DM Sans", sans-serif;
      font-size: 16px;
      line-height: 1.65;
      -webkit-font-smoothing: antialiased;
    }
    body, button, input { font-family: inherit; }
    img { display: block; max-width: 100%; }
    a { color: inherit; text-decoration: none; }
    button, input { font: inherit; }
    button { cursor: pointer; }
    h1, h2, h3, p { margin-top: 0; }
    h1, h2, h3 { color: var(--ink); line-height: 1.1; }
    h1, h2 { font-family: "Fraunces", serif; font-weight: 500; letter-spacing: -0.035em; }
    p { color: var(--muted); }
    ::selection { background: var(--gold); color: var(--ink); }

    .container { width: min(var(--max), calc(100% - 40px)); margin-inline: auto; }
    .skip-link {
      position: absolute;
      left: 16px;
      top: -60px;
      z-index: 1000;
      padding: 10px 16px;
      border-radius: 10px;
      background: var(--forest);
      color: white;
      transition: top .2s ease;
    }
    .skip-link:focus { top: 16px; }

    .utility-bar { background: var(--forest-dark); color: rgba(255,255,255,.82); font-size: .82rem; }
    .utility-inner { min-height: 34px; display: flex; align-items: center; justify-content: space-between; gap: 20px; }
    .utility-note { display: flex; align-items: center; gap: 8px; }
    .utility-note strong { color: #fff; font-weight: 600; }
    .utility-link { color: rgba(255,255,255,.74); border-bottom: 1px solid rgba(255,255,255,.25); transition: color .2s ease; }
    .utility-link:hover { color: #fff; }

    .site-header {
      position: sticky;
      top: 0;
      z-index: 100;
      border-bottom: 1px solid transparent;
      background: rgba(247, 244, 236, .9);
      backdrop-filter: blur(18px);
      -webkit-backdrop-filter: blur(18px);
      transition: box-shadow .25s ease, border-color .25s ease;
    }
    .site-header.scrolled { border-color: var(--line); box-shadow: 0 8px 28px rgba(24,35,31,.06); }
    .header-inner { min-height: 82px; display: flex; align-items: center; justify-content: space-between; gap: 32px; }
    .brand { display: inline-flex; align-items: center; gap: 12px; flex-shrink: 0; }
    .brand-mark { width: 48px; height: 48px; border-radius: 15px; overflow: hidden; box-shadow: 0 5px 14px rgba(22,63,53,.16); }
    .brand-mark img { width: 100%; height: 100%; object-fit: cover; }
    .brand-copy { display: flex; flex-direction: column; line-height: 1.1; }
    .brand-copy strong { color: var(--forest); font-size: 1.08rem; font-weight: 700; letter-spacing: -.02em; }
    .brand-copy small { margin-top: 6px; color: var(--muted); font-size: .7rem; line-height: 1.25; }
    .nav { display: flex; align-items: center; gap: 27px; }
    .nav ul { display: flex; align-items: center; gap: 27px; list-style: none; margin: 0; padding: 0; }
    .nav a { color: #405049; font-size: .91rem; font-weight: 600; transition: color .2s ease; }
    .nav a:hover, .nav a:focus-visible { color: var(--coral-dark); }
    .nav .nav-cta { color: white; background: var(--coral); padding: 11px 18px; border-radius: 999px; box-shadow: 0 8px 18px rgba(229,107,79,.22); }
    .nav .nav-cta:hover, .nav .nav-cta:focus-visible { color: white; background: var(--coral-dark); }
    .nav-toggle { display: none; width: 42px; height: 42px; border: 1px solid var(--line); border-radius: 12px; background: white; position: relative; }
    .nav-toggle span { position: absolute; left: 12px; width: 18px; height: 2px; background: var(--ink); transition: transform .2s ease, opacity .2s ease; }
    .nav-toggle span:nth-child(1) { top: 14px; }
    .nav-toggle span:nth-child(2) { top: 20px; }
    .nav-toggle span:nth-child(3) { top: 26px; }
    .nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
    .nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
    .nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

    .hero { position: relative; overflow: hidden; padding: 88px 0 96px; }
    .hero::before {
      content: "";
      position: absolute;
      width: 560px;
      height: 560px;
      right: -260px;
      top: -240px;
      border-radius: 50%;
      background: rgba(217,169,79,.18);
      pointer-events: none;
    }
    .hero-grid { display: grid; grid-template-columns: 1.02fr .98fr; align-items: center; gap: 72px; position: relative; }
    .eyebrow { display: inline-flex; align-items: center; gap: 9px; margin-bottom: 20px; color: var(--coral-dark); font-size: .78rem; font-weight: 700; letter-spacing: .11em; text-transform: uppercase; }
    .eyebrow::before { content: ""; width: 28px; height: 2px; background: var(--coral); border-radius: 2px; }
    .hero h1 { max-width: 680px; margin-bottom: 24px; font-size: clamp(3.8rem, 7vw, 6.9rem); line-height: .93; }
    .hero h1 em { color: var(--coral); font-weight: 400; }
    .hero .lead { max-width: 610px; margin-bottom: 17px; color: #405049; font-size: 1.13rem; line-height: 1.7; }
    .hero .lead + p { max-width: 570px; margin-bottom: 30px; }
    .hero-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; margin-bottom: 31px; }
    .btn { display: inline-flex; align-items: center; justify-content: center; gap: 10px; min-height: 50px; padding: 0 21px; border: 1px solid transparent; border-radius: 999px; font-size: .92rem; font-weight: 700; transition: transform .2s ease, box-shadow .2s ease, background .2s ease, border-color .2s ease; }
    .btn:hover { transform: translateY(-2px); }
    .btn:focus-visible, .nav a:focus-visible, .filter-btn:focus-visible, .save-btn:focus-visible, .faq-question:focus-visible, .newsletter input:focus-visible { outline: 3px solid rgba(229,107,79,.35); outline-offset: 3px; }
    .btn-primary { background: var(--coral); color: white; box-shadow: 0 12px 25px rgba(229,107,79,.24); }
    .btn-primary:hover { background: var(--coral-dark); box-shadow: 0 15px 30px rgba(229,107,79,.3); }
    .btn-secondary { border-color: var(--line); background: rgba(255,255,255,.55); color: var(--forest); }
    .btn-secondary:hover { border-color: var(--forest); background: white; box-shadow: var(--shadow-sm); }
    .btn-small { min-height: 38px; padding: 0 15px; font-size: .8rem; }
    .hero-points { display: flex; flex-wrap: wrap; gap: 10px 22px; margin: 0; padding: 0; list-style: none; }
    .hero-points li { display: flex; align-items: center; gap: 8px; color: #405049; font-size: .86rem; font-weight: 600; }
    .check { display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: var(--forest-soft); color: var(--forest); font-size: .75rem; font-weight: 800; }
    .hero-media { position: relative; min-width: 0; }
    .hero-image-wrap { position: relative; min-height: 580px; overflow: hidden; border-radius: 38px; box-shadow: var(--shadow-lg); }
    .hero-image-wrap::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 56%, rgba(15,48,41,.4)); pointer-events: none; }
    .hero-image { width: 100%; height: 100%; min-height: 580px; object-fit: cover; object-position: center; }
    .hero-caption { position: absolute; z-index: 1; left: 26px; right: 26px; bottom: 24px; color: white; }
    .hero-caption strong { display: block; font-family: "Fraunces", serif; font-size: 1.35rem; font-weight: 500; }
    .hero-caption span { display: block; margin-top: 4px; color: rgba(255,255,255,.78); font-size: .82rem; }
    .hero-card { position: absolute; z-index: 2; left: -34px; bottom: -35px; width: 248px; padding: 20px; border: 1px solid rgba(255,255,255,.7); border-radius: 20px; background: rgba(255,253,248,.94); box-shadow: var(--shadow-sm); }
    .hero-card-label { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 14px; color: var(--muted); font-size: .72rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
    .hero-card-label span:last-child { color: var(--coral); }
    .hero-card strong { display: block; margin-bottom: 6px; color: var(--forest); font-family: "Fraunces", serif; font-size: 1.12rem; font-weight: 500; }
    .hero-card p { margin-bottom: 14px; color: var(--muted); font-size: .78rem; line-height: 1.5; }
    .mini-link { display: inline-flex; align-items: center; gap: 6px; color: var(--coral-dark); font-size: .8rem; font-weight: 700; }
    .mini-link svg { transition: transform .2s ease; }
    .mini-link:hover svg { transform: translateX(3px); }

    .section { padding: 96px 0; }
    .section-tint { background: var(--paper); }
    .section-head { display: flex; align-items: end; justify-content: space-between; gap: 36px; margin-bottom: 38px; }
    .section-head > div:first-child { max-width: 670px; }
    .section-title { margin-bottom: 15px; font-size: clamp(2.35rem, 4vw, 4.25rem); }
    .section-intro { max-width: 640px; margin-bottom: 0; font-size: 1.02rem; }
    .section-link { display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0; color: var(--forest); font-size: .9rem; font-weight: 700; white-space: nowrap; }
    .section-link svg { transition: transform .2s ease; }
    .section-link:hover svg { transform: translateX(4px); }

    .explore-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
    .category-card { position: relative; min-height: 230px; padding: 26px; overflow: hidden; border: 1px solid var(--line); border-radius: var(--radius); background: white; box-shadow: 0 5px 18px rgba(24,35,31,.035); transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease; }
    .category-card::after { content: ""; position: absolute; width: 110px; height: 110px; right: -38px; bottom: -42px; border-radius: 50%; background: var(--card-accent, var(--forest-soft)); opacity: .7; transition: transform .25s ease; }
    .category-card:hover { transform: translateY(-5px); border-color: rgba(22,63,53,.25); box-shadow: var(--shadow-sm); }
    .category-card:hover::after { transform: scale(1.22); }
    .category-icon { display: grid; place-items: center; width: 46px; height: 46px; margin-bottom: 32px; border-radius: 14px; background: var(--card-accent, var(--forest-soft)); color: var(--card-color, var(--forest)); }
    .category-card h3 { margin-bottom: 8px; font-family: "DM Sans", sans-serif; font-size: 1.05rem; font-weight: 700; letter-spacing: -0.02em; }
    .category-card p { margin-bottom: 0; color: var(--muted); font-size: .88rem; line-height: 1.55; }
    .category-card .category-arrow { position: absolute; right: 24px; bottom: 23px; z-index: 1; color: var(--card-color, var(--forest)); font-size: .9rem; font-weight: 700; }

    .board-section { background: #f0f3ed; }
    .board-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-bottom: 25px; }
    .filter-group { display: flex; flex-wrap: wrap; gap: 8px; }
    .filter-btn { padding: 10px 15px; border: 1px solid rgba(22,63,53,.2); border-radius: 999px; background: transparent; color: var(--forest); font-size: .82rem; font-weight: 700; transition: background .2s ease, color .2s ease, border-color .2s ease; }
    .filter-btn:hover { border-color: var(--forest); background: rgba(255,255,255,.6); }
    .filter-btn.active { border-color: var(--forest); background: var(--forest); color: white; }
    .board-save-count { display: inline-flex; align-items: center; gap: 8px; color: var(--muted); font-size: .82rem; font-weight: 600; white-space: nowrap; }
    .board-save-count strong { display: grid; place-items: center; min-width: 28px; height: 28px; padding: 0 6px; border-radius: 9px; background: white; color: var(--coral); font-size: .8rem; }
    .project-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
    .project-card { overflow: hidden; border: 1px solid rgba(22,63,53,.12); border-radius: var(--radius); background: white; box-shadow: 0 8px 25px rgba(24,35,31,.045); transition: transform .25s ease, box-shadow .25s ease; }
    .project-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-sm); }
    .project-card.is-hidden { display: none; }
    .project-image { position: relative; aspect-ratio: 4 / 3; overflow: hidden; background: var(--forest-soft); }
    .project-image img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
    .project-card:hover .project-image img { transform: scale(1.04); }
    .project-category { position: absolute; top: 14px; left: 14px; padding: 6px 10px; border-radius: 999px; background: rgba(255,253,248,.92); color: var(--forest); font-size: .68rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
    .project-body { padding: 20px 20px 18px; }
    .project-kicker { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 9px; color: var(--coral-dark); font-size: .7rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
    .project-kicker span:last-child { color: var(--muted); letter-spacing: 0; text-transform: none; }
    .project-body h3 { margin-bottom: 9px; font-family: "DM Sans", sans-serif; font-size: 1.08rem; font-weight: 700; letter-spacing: -.025em; }
    .project-body p { margin-bottom: 18px; color: var(--muted); font-size: .84rem; line-height: 1.55; }
    .project-footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-top: 15px; border-top: 1px solid var(--line); }
    .project-meta { display: flex; align-items: center; gap: 7px; color: var(--muted); font-size: .75rem; font-weight: 600; }
    .project-meta svg { color: var(--coral); }
    .save-btn { display: inline-flex; align-items: center; gap: 6px; padding: 7px 10px; border: 1px solid var(--line); border-radius: 999px; background: white; color: var(--forest); font-size: .74rem; font-weight: 700; transition: background .2s ease, color .2s ease, border-color .2s ease; }
    .save-btn:hover { border-color: var(--coral); color: var(--coral-dark); }
    .save-btn.saved { border-color: rgba(229,107,79,.35); background: #fff0eb; color: var(--coral-dark); }
    .save-btn svg { width: 14px; height: 14px; }
    .board-empty { display: none; padding: 35px; border: 1px dashed var(--line); border-radius: var(--radius); text-align: center; color: var(--muted); }
    .board-empty.show { display: block; }

    .guide-grid { display: grid; grid-template-columns: .95fr 1.05fr; align-items: center; gap: 72px; }
    .guide-visual { position: relative; min-height: 600px; }
    .guide-image { width: 100%; height: 100%; min-height: 600px; object-fit: cover; border-radius: 30px; box-shadow: var(--shadow-lg); }
    .guide-badge { position: absolute; left: -24px; bottom: 34px; max-width: 235px; padding: 19px 20px; border-radius: 18px; background: var(--gold); color: var(--ink); box-shadow: var(--shadow-sm); }
    .guide-badge span { display: block; margin-bottom: 4px; color: rgba(24,35,31,.65); font-size: .68rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
    .guide-badge strong { display: block; font-family: "Fraunces", serif; font-size: 1.15rem; font-weight: 500; line-height: 1.15; }
    .guide-content .section-title { margin-bottom: 21px; }
    .guide-content > p { margin-bottom: 20px; }
    .video-card { position: relative; display: flex; align-items: center; gap: 18px; margin: 28px 0 34px; padding: 15px 16px 15px 15px; overflow: hidden; border: 1px solid rgba(22,63,53,.14); border-radius: 18px; background: var(--forest); color: white; }
    .video-card::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, transparent 45%, rgba(15,48,41,.55)); pointer-events: none; }
    .video-thumb { position: relative; z-index: 1; width: 120px; height: 78px; flex: 0 0 auto; overflow: hidden; border-radius: 12px; }
    .video-thumb img { width: 100%; height: 100%; object-fit: cover; }
    .video-info { position: relative; z-index: 1; }
    .video-info span { display: block; margin-bottom: 4px; color: #dce8dd; font-size: .69rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; }
    .video-info strong { display: block; font-family: "Fraunces", serif; font-size: 1.08rem; font-weight: 500; }
    .video-info p { margin: 4px 0 0; color: rgba(255,255,255,.7); font-size: .76rem; }
    .play-button { position: absolute; z-index: 2; right: 14px; top: 50%; display: grid; place-items: center; width: 48px; height: 48px; border: 0; border-radius: 50%; background: var(--coral); color: white; transform: translateY(-50%); box-shadow: 0 8px 20px rgba(0,0,0,.18); }
    .steps { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 0; padding: 0; list-style: none; counter-reset: steps; }
    .steps li { position: relative; min-height: 130px; padding: 20px 18px 18px 55px; border: 1px solid var(--line); border-radius: 16px; background: rgba(255,255,255,.55); }
    .steps li::before { counter-increment: steps; content: counter(steps); position: absolute; left: 18px; top: 19px; display: grid; place-items: center; width: 25px; height: 25px; border-radius: 50%; background: var(--forest-soft); color: var(--forest); font-size: .75rem; font-weight: 800; }
    .steps strong { display: block; margin-bottom: 5px; color: var(--ink); font-size: .91rem; }
    .steps p { margin-bottom: 0; color: var(--muted); font-size: .78rem; line-height: 1.5; }

    .community-section { position: relative; overflow: hidden; background: var(--forest); color: white; }
    .community-section::before { content: ""; position: absolute; width: 520px; height: 520px; right: -240px; top: -250px; border-radius: 50%; background: rgba(217,169,79,.17); }
    .community-section .section-title, .community-section h3 { color: white; }
    .community-section p { color: rgba(255,255,255,.72); }
    .community-grid { display: grid; grid-template-columns: 1.02fr .98fr; align-items: center; gap: 72px; position: relative; }
    .community-copy .section-title { margin-bottom: 21px; }
    .community-copy > p { margin-bottom: 19px; }
    .community-list { display: grid; gap: 11px; margin: 28px 0 30px; padding: 0; list-style: none; }
    .community-list li { display: flex; align-items: center; gap: 12px; color: rgba(255,255,255,.84); font-size: .88rem; }
    .community-list .check { background: rgba(255,255,255,.14); color: white; }
    .community-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
    .btn-light { background: white; color: var(--forest); }
    .btn-light:hover { background: var(--forest-soft); }
    .btn-outline-light { border-color: rgba(255,255,255,.35); background: transparent; color: white; }
    .btn-outline-light:hover { border-color: white; background: rgba(255,255,255,.08); }
    .club-visual { position: relative; min-height: 555px; }
    .club-image { width: 100%; height: 100%; min-height: 555px; object-fit: cover; border-radius: 30px; }
    .club-overlay { position: absolute; left: 24px; right: 24px; bottom: 24px; padding: 20px; border: 1px solid rgba(255,255,255,.2); border-radius: 18px; background: rgba(15,48,41,.72); color: white; backdrop-filter: blur(10px); }
    .club-overlay span { color: var(--gold); font-size: .7rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; }
    .club-overlay strong { display: block; margin: 5px 0 3px; font-family: "Fraunces", serif; font-size: 1.35rem; font-weight: 500; }
    .club-overlay p { margin: 0; color: rgba(255,255,255,.72); font-size: .78rem; }
    .club-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 24px; }
    .club-card { padding: 19px; border: 1px solid rgba(255,255,255,.15); border-radius: 16px; background: rgba(255,255,255,.08); }
    .club-card-icon { display: grid; place-items: center; width: 34px; height: 34px; margin-bottom: 25px; border-radius: 10px; background: rgba(255,255,255,.13); color: var(--gold); }
    .club-card h3 { margin-bottom: 6px; font-family: "DM Sans", sans-serif; font-size: .91rem; font-weight: 700; }
    .club-card p { margin-bottom: 0; color: rgba(255,255,255,.65); font-size: .74rem; line-height: 1.45; }

    .trends-grid { display: grid; grid-template-columns: .94fr 1.06fr; align-items: center; gap: 72px; }
    .trend-visual { position: relative; min-height: 510px; }
    .trend-image { width: 100%; height: 100%; min-height: 510px; object-fit: cover; border-radius: 30px; box-shadow: var(--shadow-lg); }
    .trend-sticker { position: absolute; right: -18px; bottom: -24px; width: 155px; padding: 17px; border-radius: 18px; background: var(--coral); color: white; box-shadow: var(--shadow-sm); transform: rotate(-4deg); }
    .trend-sticker span { display: block; color: rgba(255,255,255,.75); font-size: .67rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
    .trend-sticker strong { display: block; margin-top: 4px; font-family: "Fraunces", serif; font-size: 1.25rem; font-weight: 500; line-height: 1.1; }
    .trend-copy .section-title { margin-bottom: 21px; }
    .trend-copy > p { margin-bottom: 26px; }
    .trend-list { display: grid; gap: 15px; margin-bottom: 28px; }
    .trend-row { display: grid; grid-template-columns: 165px 1fr 42px; align-items: center; gap: 13px; }
    .trend-row strong { color: var(--ink); font-size: .82rem; }
    .trend-track { height: 9px; overflow: hidden; border-radius: 999px; background: var(--sky); }
    .trend-bar { width: var(--trend-width); height: 100%; border-radius: inherit; background: var(--coral); }
    .trend-row span { color: var(--muted); font-size: .78rem; font-weight: 700; text-align: right; }
    .trend-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 32px; }
    .trend-stat { padding: 15px 12px; border: 1px solid var(--line); border-radius: 14px; background: rgba(255,255,255,.65); }
    .trend-stat strong { display: block; color: var(--forest); font-family: "Fraunces", serif; font-size: 1.45rem; font-weight: 500; line-height: 1; }
    .trend-stat span { display: block; margin-top: 7px; color: var(--muted); font-size: .7rem; line-height: 1.35; }
    .story-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 70px; }
    .story-card { padding: 22px; border: 1px solid var(--line); border-radius: var(--radius); background: white; }
    .story-card .story-image { aspect-ratio: 16 / 9; margin-bottom: 18px; overflow: hidden; border-radius: 14px; background: var(--forest-soft); }
    .story-card .story-image img { width: 100%; height: 100%; object-fit: cover; transition: transform .3s ease; }
    .story-card:hover .story-image img { transform: scale(1.04); }
    .story-card .story-kicker { display: block; margin-bottom: 8px; color: var(--coral-dark); font-size: .68rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; }
    .story-card h3 { margin-bottom: 9px; font-family: "DM Sans", sans-serif; font-size: 1rem; font-weight: 700; letter-spacing: -.02em; }
    .story-card p { margin-bottom: 0; color: var(--muted); font-size: .8rem; line-height: 1.55; }

    .testimonial-section { background: var(--sky); }
    .testimonial-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
    .testimonial-card { position: relative; padding: 28px; border: 1px solid rgba(22,63,53,.12); border-radius: var(--radius); background: white; box-shadow: 0 7px 22px rgba(24,35,31,.035); }
    .quote-mark { position: absolute; top: 18px; right: 24px; color: var(--forest-soft); font-family: "Fraunces", serif; font-size: 4rem; line-height: 1; }
    .testimonial-card blockquote { position: relative; z-index: 1; margin: 0 0 25px; color: #405049; font-family: "Fraunces", serif; font-size: 1.12rem; line-height: 1.55; }
    .testimonial-person { display: flex; align-items: center; gap: 11px; }
    .avatar { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 50%; background: var(--forest); color: white; font-size: .78rem; font-weight: 700; }
    .avatar.gold { background: var(--gold); color: var(--ink); }
    .avatar.coral { background: var(--coral); }
    .testimonial-person strong { display: block; color: var(--ink); font-size: .84rem; }
    .testimonial-person span { display: block; color: var(--muted); font-size: .72rem; }

    .faq-grid { display: grid; grid-template-columns: .72fr 1.28fr; gap: 72px; align-items: start; }
    .faq-intro { position: sticky; top: 120px; }
    .faq-intro .section-title { margin-bottom: 18px; }
    .faq-intro p { margin-bottom: 21px; }
    .faq-list { display: grid; gap: 11px; }
    .faq-item { border: 1px solid var(--line); border-radius: 16px; background: white; overflow: hidden; transition: border-color .2s ease, box-shadow .2s ease; }
    .faq-item.open { border-color: rgba(22,63,53,.3); box-shadow: var(--shadow-sm); }
    .faq-question { display: flex; align-items: center; justify-content: space-between; gap: 20px; width: 100%; padding: 20px 21px; border: 0; background: transparent; color: var(--ink); text-align: left; font-size: .95rem; font-weight: 700; }
    .faq-icon { display: grid; place-items: center; width: 27px; height: 27px; flex: 0 0 auto; border-radius: 50%; background: var(--forest-soft); color: var(--forest); font-size: 1.15rem; font-weight: 500; transition: transform .2s ease, background .2s ease; }
    .faq-item.open .faq-icon { transform: rotate(45deg); background: var(--coral); color: white; }
    .faq-answer { max-height: 0; overflow: hidden; transition: max-height .3s ease; }
    .faq-item.open .faq-answer { max-height: 260px; }
    .faq-answer p { margin: 0; padding: 0 21px 21px; font-size: .87rem; line-height: 1.65; }

    .newsletter-section { padding: 0 0 96px; }
    .newsletter-box { display: grid; grid-template-columns: 1fr .9fr; align-items: center; gap: 50px; padding: 48px 52px; border-radius: 30px; background: var(--coral); color: white; box-shadow: var(--shadow-lg); }
    .newsletter-copy .eyebrow { margin-bottom: 12px; color: rgba(255,255,255,.8); }
    .newsletter-copy .eyebrow::before { background: white; }
    .newsletter-copy h2 { margin-bottom: 11px; color: white; font-size: clamp(2rem, 3.5vw, 3.25rem); }
    .newsletter-copy p { margin-bottom: 0; color: rgba(255,255,255,.78); }
    .newsletter-form { display: flex; gap: 9px; padding: 7px; border-radius: 15px; background: white; }
    .newsletter-form input { min-width: 0; flex: 1; padding: 0 13px; border: 0; outline: 0; color: var(--ink); font-size: .88rem; }
    .newsletter-form button { padding: 0 18px; border: 0; border-radius: 11px; background: var(--forest); color: white; font-size: .82rem; font-weight: 700; transition: background .2s ease; }
    .newsletter-form button:hover { background: var(--forest-dark); }
    .form-message { min-height: 22px; margin: 10px 2px 0; color: rgba(255,255,255,.85); font-size: .78rem; }
    .form-message.success { color: #fff8cf; font-weight: 700; }

    footer { padding: 68px 0 28px; background: var(--forest-dark); color: white; }
    .footer-grid { display: grid; grid-template-columns: 1.35fr .7fr .8fr 1fr; gap: 50px; padding-bottom: 48px; }
    .footer-brand .brand-copy strong { color: white; }
    .footer-brand .brand-copy small { color: rgba(255,255,255,.62); }
    .footer-brand p { max-width: 290px; margin: 20px 0 22px; color: rgba(255,255,255,.62); font-size: .84rem; }
    .social-links { display: flex; flex-wrap: wrap; gap: 8px; }
    .social-links a { display: grid; place-items: center; width: 36px; height: 36px; border: 1px solid rgba(255,255,255,.18); border-radius: 10px; color: rgba(255,255,255,.82); transition: background .2s ease, color .2s ease, border-color .2s ease; }
    .social-links a:hover { border-color: white; background: white; color: var(--forest); }
    .footer-column h3 { margin-bottom: 17px; color: white; font-family: "DM Sans", sans-serif; font-size: .8rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
    .footer-links { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
    .footer-links a { color: rgba(255,255,255,.66); font-size: .82rem; transition: color .2s ease; }
    .footer-links a:hover { color: white; }
    .contact-list { display: grid; gap: 12px; margin: 0; padding: 0; list-style: none; }
    .contact-list li { display: flex; align-items: flex-start; gap: 10px; color: rgba(255,255,255,.66); font-size: .8rem; line-height: 1.5; }
    .contact-list svg { flex: 0 0 auto; margin-top: 3px; color: var(--gold); }
    .footer-bottom { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding-top: 25px; border-top: 1px solid rgba(255,255,255,.13); color: rgba(255,255,255,.5); font-size: .74rem; }
    .footer-legal { display: flex; flex-wrap: wrap; gap: 18px; }
    .footer-legal a:hover { color: white; }

    dialog { width: min(760px, calc(100% - 32px)); max-height: calc(100vh - 40px); padding: 0; border: 0; border-radius: 24px; background: white; color: var(--ink); box-shadow: 0 30px 90px rgba(15,48,41,.3); }
    dialog::backdrop { background: rgba(15,48,41,.68); backdrop-filter: blur(4px); }
    .dialog-media { position: relative; aspect-ratio: 16 / 8; overflow: hidden; background: var(--forest-soft); }
    .dialog-media img { width: 100%; height: 100%; object-fit: cover; }
    .dialog-content { padding: 25px 28px 29px; }
    .dialog-content .dialog-kicker { margin-bottom: 7px; color: var(--coral-dark); font-size: .7rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; }
    .dialog-content h2 { margin-bottom: 10px; font-size: 2rem; }
    .dialog-content p { margin-bottom: 18px; }
    .dialog-close { position: absolute; z-index: 2; top: 14px; right: 14px; display: grid; place-items: center; width: 38px; height: 38px; border: 0; border-radius: 50%; background: rgba(255,253,248,.92); color: var(--ink); font-size: 1.2rem; line-height: 1; }

    .js [data-reveal] { opacity: 0; transform: translateY(18px); transition: opacity .65s ease, transform .65s ease; }
    .js [data-reveal].is-visible { opacity: 1; transform: translateY(0); }

    @media (max-width: 1040px) {
      .nav { gap: 18px; }
      .nav ul { gap: 18px; }
      .nav a { font-size: .84rem; }
      .hero-grid, .guide-grid, .community-grid, .trends-grid, .faq-grid { gap: 45px; }
      .hero-card { left: -15px; }
    }
    @media (max-width: 900px) {
      .hero { padding: 65px 0 85px; }
      .hero-grid, .guide-grid, .community-grid, .trends-grid, .faq-grid { grid-template-columns: 1fr; }
      .hero-copy { max-width: 720px; }
      .hero-media { width: min(720px, 100%); margin: 12px auto 0; }
      .hero-card { left: 20px; }
      .explore-grid, .project-grid { grid-template-columns: repeat(2, 1fr); }
      .guide-visual { width: min(650px, 100%); margin: 0 auto; }
      .community-copy { max-width: 680px; }
      .club-visual { width: min(720px, 100%); margin: 0 auto; }
      .trend-visual { width: min(720px, 100%); margin: 0 auto; }
      .testimonial-grid, .story-grid { grid-template-columns: repeat(2, 1fr); }
      .faq-intro { position: static; }
      .newsletter-box { grid-template-columns: 1fr; gap: 28px; padding: 38px; }
      .footer-grid { grid-template-columns: 1.2fr 1fr 1fr; }
      .footer-brand { grid-column: 1 / -1; }
    }
    @media (max-width: 700px) {
      .container { width: min(var(--max), calc(100% - 28px)); }
      .utility-bar { display: none; }
      .header-inner { min-height: 72px; }
      .brand-mark { width: 42px; height: 42px; border-radius: 13px; }
      .brand-copy strong { font-size: .98rem; }
      .brand-copy small { max-width: 190px; font-size: .61rem; }
      .nav-toggle { display: block; }
      .nav { position: absolute; top: calc(100% + 10px); left: 14px; right: 14px; display: block; padding: 12px; border: 1px solid var(--line); border-radius: 18px; background: var(--paper); box-shadow: var(--shadow-lg); opacity: 0; visibility: hidden; transform: translateY(-8px); transition: opacity .2s ease, transform .2s ease, visibility .2s ease; }
      .nav.open { opacity: 1; visibility: visible; transform: translateY(0); }
      .nav ul { display: grid; gap: 2px; }
      .nav a { display: block; padding: 12px 13px; border-radius: 10px; font-size: .9rem; }
      .nav a:hover, .nav a:focus-visible { background: var(--forest-soft); }
      .nav .nav-cta { margin-top: 7px; text-align: center; }
      .hero { padding: 50px 0 70px; }
      .hero h1 { font-size: clamp(3.3rem, 15vw, 5rem); }
      .hero .lead { font-size: 1rem; }
      .hero-points { display: grid; gap: 9px; }
      .hero-image-wrap, .hero-image { min-height: 430px; }
      .hero-card { left: 14px; bottom: -25px; width: 220px; padding: 16px; }
      .section { padding: 70px 0; }
      .section-head { display: block; margin-bottom: 28px; }
      .section-title { font-size: clamp(2.25rem, 10vw, 3.4rem); }
      .section-link { margin-top: 17px; }
      .explore-grid, .project-grid, .testimonial-grid, .story-grid { grid-template-columns: 1fr; }
      .category-card { min-height: 205px; }
      .board-toolbar { display: block; }
      .filter-group { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 5px; scrollbar-width: none; }
      .filter-group::-webkit-scrollbar { display: none; }
      .filter-btn { flex: 0 0 auto; }
      .board-save-count { margin-top: 10px; }
      .guide-visual, .guide-image { min-height: 430px; }
      .guide-badge { left: 14px; bottom: 18px; }
      .video-card { align-items: flex-start; }
      .video-thumb { width: 94px; height: 66px; }
      .video-info strong { font-size: .95rem; }
      .video-info p { display: none; }
      .club-visual, .club-image { min-height: 430px; }
      .club-overlay { left: 14px; right: 14px; bottom: 14px; padding: 15px; }
      .club-grid { grid-template-columns: 1fr; }
      .trend-row { grid-template-columns: 125px 1fr 38px; gap: 9px; }
      .trend-stats { grid-template-columns: 1fr; }
      .newsletter-section { padding-bottom: 70px; }
      .newsletter-box { padding: 29px 22px; }
      .newsletter-form { display: grid; }
      .newsletter-form button { min-height: 47px; }
      .footer-grid { grid-template-columns: 1fr 1fr; gap: 34px 24px; }
      .footer-brand { grid-column: 1 / -1; }
      .footer-bottom { display: block; text-align: center; }
      .footer-legal { justify-content: center; }
    }
    @media (max-width: 420px) {
      .brand-copy small { max-width: 155px; }
      .hero h1 { font-size: 3.15rem; }
      .hero-actions { display: grid; }
      .hero-actions .btn { width: 100%; }
      .hero-image-wrap, .hero-image { min-height: 390px; }
      .hero-card { width: 195px; }
      .hero-card p { display: none; }
      .guide-badge { max-width: 190px; padding: 14px 16px; }
      .video-card { padding-right: 10px; }
      .play-button { width: 42px; height: 42px; }
      .steps { grid-template-columns: 1fr; }
      .steps li { min-height: auto; }
      .trend-row { grid-template-columns: 105px 1fr 36px; }
      .trend-row strong { font-size: .75rem; }
      .footer-grid { grid-template-columns: 1fr; }
      .footer-brand { grid-column: auto; }
    }
    @media (prefers-reduced-motion: reduce) {
      html { scroll-behavior: auto; }
      *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
    }
  </style>
</head>
<body id="top">
  <a class="skip-link" href="#main">Skip to content</a>

  <div class="utility-bar">
    <div class="container utility-inner">
      <div class="utility-note"><span class="check">NEW</span><span><strong>The Spring Maker Pulse</strong> is live — see what makers are building right now.</span></div>
      <a class="utility-link" href="#resources">Explore the resource library</a>
    </div>
  </div>

  <header class="site-header" id="siteHeader">
    <div class="container header-inner">
      <a class="brand" href="#top" aria-label="Craft and Compass home">
        <span class="brand-mark"><img src="https://placehold.co/160x160/163F34/FFFFFF?text=C%26C&amp;font=poppins" alt="Craft and Compass logo placeholder" width="160" height="160"></span>
        <span class="brand-copy">
          <strong>Craft &amp; Compass</strong>
          <small>Your map to making, collecting, and creative communities.</small>
        </span>
      </a>
      <button class="nav-toggle" type="button" aria-expanded="false" aria-controls="primaryNav" aria-label="Open navigation">
        <span></span><span></span><span></span>
      </button>
      <nav class="nav" id="primaryNav" aria-label="Primary navigation">
        <ul>
          <li><a href="#explore">Explore</a></li>
          <li><a href="#inspiration">Inspiration</a></li>
          <li><a href="#guides">Craft Tutorials</a></li>
          <li><a href="#community">Community</a></li>
          <li><a href="#trends">Trends</a></li>
          <li><a href="#resources">Resources</a></li>
          <li><a href="#blog">Blog</a></li>
          <li><a class="nav-cta" href="#newsletter">Join free</a></li>
        </ul>
      </nav>
    </div>
  </header>

  <main id="main">
    <section class="hero">
      <div class="container hero-grid">
        <div class="hero-copy" data-reveal>
          <div class="eyebrow">Hobbies, made intentional</div>
          <h1>Find your next obsession.<br><em>Make something worth keeping.</em></h1>
          <p class="lead">Craft &amp; Compass turns scattered inspiration into a clear path — from your first stitch and first saw cut to the collections and communities that keep you coming back.</p>
          <p>Explore thoughtful project guides, practical finishing methods, collecting wisdom, and local groups built around the things you already love.</p>
          <div class="hero-actions">
            <a class="btn btn-primary" href="#inspiration">Explore projects <svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 12h14m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
            <a class="btn btn-secondary" href="#guides">Start learning <svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m9 18 6-6-6-6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
          </div>
          <ul class="hero-points">
            <li><span class="check">✓</span> Beginner-friendly paths</li>
            <li><span class="check">✓</span> Project-based learning</li>
            <li><span class="check">✓</span> Real maker community</li>
          </ul>
        </div>
        <div class="hero-media" data-reveal>
          <div class="hero-image-wrap">
            <img class="hero-image" src="https://picsum.photos/seed/craft-atlas-hero/1100/1200" alt="A maker's table with tools, paper patterns, and a half-finished handmade project" width="1100" height="1200" fetchpriority="high">
            <div class="hero-caption">
              <strong>The Sunday Studio Journal</strong>
              <span>Notes, tools, and small wins from our maker community.</span>
            </div>
          </div>
          <div class="hero-card">
            <div class="hero-card-label"><span>Featured this week</span><span>04</span></div>
            <strong>Build a walnut keepsake box</strong>
            <p>A calm, four-session woodworking project for your first real joinery practice.</p>
            <a class="mini-link" href="#guides">See the guide <svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 12h14m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
          </div>
        </div>
      </div>
    </section>

    <section class="section" id="explore">
      <div class="container">
        <div class="section-head" data-reveal>
          <div>
            <div class="eyebrow">Find your direction</div>
            <h2 class="section-title">A world of hands-on interests, organized.</h2>
            <p class="section-intro">Whether you have one quiet hour or a whole weekend, start with an interest area that matches your curiosity. Every track includes a supply list, a realistic first project, and the maintenance tips that help your work last.</p>
          </div>
          <a class="section-link" href="#inspiration">Browse all projects <svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 12h14m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
        </div>
        <div class="explore-grid">
          <a class="category-card" href="#inspiration" style="--card-accent:#f5e4d7;--card-color:#9a5b35;" data-reveal>
            <span class="category-icon"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m14.5 4.5 5 5M4 20l8.5-8.5M13 7l4 4M6 15l3 3" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
            <h3>Woodworking &amp; tools</h3>
            <p>Sharpening, safe saw work, joinery, and warm natural finishes for useful pieces.</p>
            <span class="category-arrow">→</span>
          </a>
          <a class="category-card" href="#inspiration" style="--card-accent:#e7e0f3;--card-color:#66508f;" data-reveal>
            <span class="category-icon"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 19c3-1 4-4 5-7s2-5 6-7c1 4-1 7-3 9s-5 4-8 5ZM5 19c2-2 4-4 6-7" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
            <h3>Fiber &amp; paper</h3>
            <p>Stitching, binding, letterpress, cardmaking, and pattern design for everyday objects.</p>
            <span class="category-arrow">→</span>
          </a>
          <a class="category-card" href="#inspiration" style="--card-accent:#dcecf0;--card-color:#38727b;" data-reveal>
            <span class="category-icon"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 17h16M6 17V9l6-4 6 4v8M9 17v-4h6v4M9 10h.01M15 10h.01" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
            <h3>Models &amp; miniatures</h3>
            <p>Scale building, weathering, paints, and display cases for detailed hobby worlds.</p>
            <span class="category-arrow">→</span>
          </a>
          <a class="category-card" href="#inspiration" style="--card-accent:#dff0e1;--card-color:#3e7650;" data-reveal>
            <span class="category-icon"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M12 21v-8M12 13c-4 0-6-2-6-6 4 0 6 2 6 6Zm0 0c0-4 2-6 6-6 0 4-2 6-6 6Z" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
            <h3>Plants &amp; preservation</h3>
            <p>Terrariums, pressed flora, seed saving, and gentle ways to care for living collections.</p>
            <span class="category-arrow">→</span>
          </a>
          <a class="category-card" href="#inspiration" style="--card-accent:#f7e8dc;--card-color:#a65b42;" data-reveal>
            <span class="category-icon"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 8h16v11H4V8Zm3 0V5h10v3M8 12h8M8 15h5" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
            <h3>Collecting &amp; archives</h3>
            <p>Curate, document, conserve, and tell the story behind the things you love to keep.</p>
            <span class="category-arrow">→</span>
          </a>
          <a class="category-card" href="#inspiration" style="--card-accent:#f1e6c7;--card-color:#8c6c26;" data-reveal>
            <span class="category-icon"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 8.5 12 4l8 4.5v9L12 22l-8-4.5v-9Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/><path d="m4 8.5 8 4.5 8-4.5M12 13v9" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg></span>
            <h3>Photo &amp; making</h3>
            <p>Analog processes, small-format printing, darkroom basics, and creative image archiving.</p>
            <span class="category-arrow">→</span>
          </a>
        </div>
      </div>
    </section>

    <section class="section board-section" id="inspiration">
      <div class="container">
        <div class="section-head" data-reveal>
          <div>
            <div class="eyebrow">The inspiration board</div>
            <h2 class="section-title">Choose a project that fits your afternoon.</h2>
            <p class="section-intro">Every project is tagged by skill, time, and material so you can make a useful next step. Filter the board, save the ideas you want to revisit, and share your own build when it is ready.</p>
          </div>
          <a class="section-link" href="#newsletter">Share your project <svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M12 5v14M5 12h14" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg></a>
        </div>
        <div class="board-toolbar" data-reveal>
          <div class="filter-group" role="group" aria-label="Filter projects by interest">
            <button class="filter-btn active" type="button" data-filter="all" aria-pressed="true">All projects</button>
            <button class="filter-btn" type="button" data-filter="woodworking" aria-pressed="false">Woodworking</button>
            <button class="filter-btn" type="button" data-filter="fiber" aria-pressed="false">Paper &amp; fiber</button>
            <button class="filter-btn" type="button" data-filter="collecting" aria-pressed="false">Collecting</button>
            <button class="filter-btn" type="button" data-filter="plants" aria-pressed="false">Plants</button>
            <button class="filter-btn" type="button" data-filter="models" aria-pressed="false">Models</button>
            <button class="filter-btn" type="button" data-filter="photo" aria-pressed="false">Photo</button>
          </div>
          <div class="board-save-count" aria-live="polite"><svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M6 4.5A1.5 1.5 0 0 1 7.5 3h9A1.5 1.5 0 0 1 18 4.5V21l-6-3.5L6 21V4.5Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg><span>Saved:</span> <strong id="savedCount">0</strong></div>
        </div>
        <div class="project-grid" id="projectGrid">
          <article class="project-card" data-category="woodworking" data-reveal>
            <div class="project-image"><img src="https://picsum.photos/seed/walnut-jewelry/800/600" alt="A walnut keepsake box with brass hardware on a workbench" width="800" height="600" loading="lazy"><span class="project-category">Woodworking</span></div>
            <div class="project-body">
              <div class="project-kicker"><span>Beginner +</span><span>6 hrs</span></div>
              <h3>Walnut &amp; brass keepsake box</h3>
              <p>Practice clean joinery while building a small home for letters, keepsakes, or a favorite pen.</p>
              <div class="project-footer">
                <div class="project-meta"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="12" cy="12" r="8" stroke="currentColor" stroke-width="1.7"/><path d="M12 8v4l3 2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>Intermediate</div>
                <button class="save-btn" type="button" data-save="box" aria-pressed="false"><svg viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M6 4.5A1.5 1.5 0 0 1 7.5 3h9A1.5 1.5 0 0 1 18 4.5V21l-6-3.5L6 21V4.5Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg><span class="save-label">Save</span></button>
              </div>
            </div>
          </article>
          <article class="project-card" data-category="fiber" data-reveal>
            <div class="project-image"><img src="https://picsum.photos/seed/watercolor-fox/800/600" alt="A watercolor field journal with a small painted fox illustration" width="800" height="600" loading="lazy"><span class="project-category">Paper &amp; fiber</span></div>
            <div class="project-body">
              <div class="project-kicker"><span>Beginner</span><span>90 min</span></div>
              <h3>Watercolor field journal</h3>
              <p>Learn a simple wash, add a color story, and create a compact record of a walk outside.</p>
              <div class="project-footer">
                <div class="project-meta"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="12" cy="12" r="8" stroke="currentColor" stroke-width="1.7"/><path d="M12 8v4l3 2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>Beginner</div>
                <button class="save-btn" type="button" data-save="journal" aria-pressed="false"><svg viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M6 4.5A1.5 1.5 0 0 1 7.5 3h9A1.5 1.5 0 0 1 18 4.5V21l-6-3.5L6 21V4.5Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg><span class="save-label">Save</span></button>
              </div>
            </div>
          </article>
          <article class="project-card" data-category="plants" data-reveal>
            <div class="project-image"><img src="https://picsum.photos/seed/terracotta-planter/800/600" alt="A handmade terracotta planter with a small terrarium inside" width="800" height="600" loading="lazy"><span class="project-category">Plants</span></div>
            <div class="project-body">
              <div class="project-kicker"><span>Beginner</span><span>2 hrs</span></div>
              <h3>Terrarium rescue planter</h3>
              <p>Give a rescued pot a second life with drainage layers, soil ratios, and a plant-care label.</p>
              <div class="project-footer">
                <div class="project-meta"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="12" cy="12" r="8" stroke="currentColor" stroke-width="1.7"/><path d="M12 8v4l3 2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>Beginner</div>
                <button class="save-btn" type="button" data-save="planter" aria-pressed="false"><svg viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M6 4.5A1.5 1.5 0 0 1 7.5 3h9A1.5 1.5 0 0 1 18 4.5V21l-6-3.5L6 21V4.5Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg><span class="save-label">Save</span></button>
              </div>
            </div>
          </article>
          <article class="project-card" data-category="models" data-reveal>
            <div class="project-image"><img src="https://picsum.photos/seed/miniature-rail/800/600" alt="A detailed miniature railway station model with tiny scenery" width="800" height="600" loading="lazy"><span class="project-category">Models</span></div>
            <div class="project-body">
              <div class="project-kicker"><span>Advanced</span><span>8 hrs</span></div>
              <h3>Miniature rail station</h3>
              <p>Build a layered scene with baseboard scenery, weathering, and a thoughtful display case.</p>
              <div class="project-footer">
                <div class="project-meta"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="12" cy="12" r="8" stroke="currentColor" stroke-width="1.7"/><path d="M12 8v4l3 2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>Advanced</div>
                <button class="save-btn" type="button" data-save="rail" aria-pressed="false"><svg viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M6 4.5A1.5 1.5 0 0 1 7.5 3h9A1.5 1.5 0 0 1 18 4.5V21l-6-3.5L6 21V4.5Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg><span class="save-label">Save</span></button>
              </div>
            </div>
          </article>
          <article class="project-card" data-category="photo" data-reveal>
            <div class="project-image"><img src="https://picsum.photos/seed/botanical-print/800/600" alt="A botanical screen print in progress with ink and paper" width="800" height="600" loading="lazy"><span class="project-category">Photo &amp; making</span></div>
            <div class="project-body">
              <div class="project-kicker"><span>Intermediate</span><span>3 hrs</span></div>
              <h3>Botanical screen print</h3>
              <p>Translate a pressed leaf into a repeat pattern and print a small edition for your wall.</p>
              <div class="project-footer">
                <div class="project-meta"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="12" cy="12" r="8" stroke="currentColor" stroke-width="1.7"/><path d="M12 8v4l3 2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>Intermediate</div>
                <button class="save-btn" type="button" data-save="print" aria-pressed="false"><svg viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M6 4.5A1.5 1.5 0 0 1 7.5 3h9A1.5 1.5 0 0 1 18 4.5V21l-6-3.5L6 21V4.5Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg><span class="save-label">Save</span></button>
              </div>
            </div>
          </article>
          <article class="project-card" data-category="collecting" data-reveal>
            <div class="project-image"><img src="https://picsum.photos/seed/mended-mug/800/600" alt="A collection of mended ceramic mugs arranged on a shelf" width="800" height="600" loading="lazy"><span class="project-category">Collecting</span></div>
            <div class="project-body">
              <div class="project-kicker"><span>Beginner</span><span>45 min</span></div>
              <h3>Mended mug collection</h3>
              <p>Create a simple catalog and conservation plan for the everyday objects you choose to keep.</p>
              <div class="project-footer">
                <div class="project-meta"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="12" cy="12" r="8" stroke="currentColor" stroke-width="1.7"/><path d="M12 8v4l3 2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg>Beginner</div>
                <button class="save-btn" type="button" data-save="mug" aria-pressed="false"><svg viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M6 4.5A1.5 1.5 0 0 1 7.5 3h9A1.5 1.5 0 0 1 18 4.5V21l-6-3.5L6 21V4.5Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg><span class="save-label">Save</span></button>
              </div>
            </div>
          </article>
        </div>
        <div class="board-empty" id="boardEmpty">No projects match that filter right now. Try another interest to keep exploring.</div>
      </div>
    </section>

    <section class="section" id="guides">
      <div class="container guide-grid">
        <div class="guide-visual" data-reveal>
          <img class="guide-image" src="https://picsum.photos/seed/workbench-guide/1000/900" alt="A tidy workbench with hand tools, measuring tape, and project notes" width="1000" height="900" loading="lazy">
          <div class="guide-badge"><span>Beginner rule</span><strong>Start with one project, not a shelf of tools.</strong></div>
        </div>
        <div class="guide-content" data-reveal>
          <div class="eyebrow">Craft tutorials</div>
          <h2 class="section-title">Start with a project, not a toolbox.</h2>
          <p>A good beginner path gives you a small, useful outcome and just enough technique to build confidence. Our tutorials begin with the decision that matters most: what are you making, why does it matter, and how will you know it is finished?</p>
          <p>From there, we break the work into manageable stages. You will learn tool maintenance before you need it, choose finishing methods that suit your space, and leave room for small corrections without starting over.</p>
          <div class="video-card">
            <div class="video-thumb"><img src="https://picsum.photos/seed/video-workbench/400/300" alt="A close-up of a maker preparing a clean workbench" width="400" height="300" loading="lazy"></div>
            <div class="video-info"><span>Video guide · 12 min</span><strong>The 12-minute workbench reset</strong><p>A calm setup routine for safer, better-made projects.</p></div>
            <button class="play-button" type="button" data-open-video aria-label="Watch the workbench reset video"><svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="m9 7 8 5-8 5V7Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/></svg></button>
          </div>
          <ol class="steps">
            <li><strong>Choose a small outcome</strong><p>Define the finished object and the skill you want to practice in one sentence.</p></li>
            <li><strong>Gather with a checklist</strong><p>Buy the essentials first, then add specialty tools only when the project asks for them.</p></li>
            <li><strong>Practice the finishing method</strong><p>Test sanding, glue, dye, or paint on a scrap before touching your final piece.</p></li>
            <li><strong>Document and maintain it</strong><p>Save your measurements, care notes, and next improvement for the next build.</p></li>
          </ol>
          <a class="btn btn-secondary" href="#newsletter">Get the beginner checklist <svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 12h14m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
        </div>
      </div>
    </section>

    <section class="section community-section" id="community">
      <div class="container community-grid">
        <div class="community-copy" data-reveal>
          <div class="eyebrow">Find your people</div>
          <h2 class="section-title">Your hobby gets better with a room full of people.</h2>
          <p>A hobby can be solitary, but it does not have to be. Craft &amp; Compass connects makers with local meetups, virtual critique circles, and focused skill swaps where people trade advice, materials, and encouragement.</p>
          <p>Whether you are comparing grain direction, swapping pattern design notes, or learning how to store a fragile collection, the right group makes the next step feel possible.</p>
          <ul class="community-list">
            <li><span class="check">✓</span> Friendly groups for every skill level</li>
            <li><span class="check">✓</span> In-person and online meeting options</li>
            <li><span class="check">✓</span> Monthly challenges and project showcases</li>
          </ul>
          <div class="community-actions">
            <a class="btn btn-light" href="#newsletter">Find a group near you</a>
            <a class="btn btn-outline-light" href="#blog">Read maker stories</a>
          </div>
        </div>
        <div class="club-visual" data-reveal>
          <img class="club-image" src="https://picsum.photos/seed/community-workshop/1000/760" alt="A warm community workshop where makers gather around a shared table" width="1000" height="760" loading="lazy">
          <div class="club-overlay"><span>Community pick</span><strong>The Saturday Maker Market</strong><p>A relaxed monthly meetup for swapping tools, techniques, and project ideas.</p></div>
        </div>
        <div class="club-grid">
          <article class="club-card" data-reveal>
            <span class="club-card-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="9" cy="8" r="3" stroke="currentColor" stroke-width="1.7"/><path d="M3.5 19c.5-3 2.5-5 5.5-5s5 2 5.5 5M16 5.5a3 3 0 0 1 0 6M17.5 14.3c1.8.6 3 2 3.3 4.2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg></span>
            <h3>Saturday Maker Market</h3><p>Portland, OR · 12 makers online now</p>
          </article>
          <article class="club-card" data-reveal>
            <span class="club-card-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 5.5A2.5 2.5 0 0 1 7.5 3H19v15H7.5A2.5 2.5 0 0 0 5 20.5v-15Z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/><path d="M5 20.5A2.5 2.5 0 0 1 7.5 18H19" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg></span>
            <h3>Binding &amp; Book Arts</h3><p>Virtual · stitch swaps every Friday</p>
          </article>
          <article class="club-card" data-reveal>
            <span class="club-card-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 17h16M6 17V9l6-4 6 4v8M9 17v-4h6v4M9 10h.01M15 10h.01" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
            <h3>Scale &amp; Signal Model Club</h3><p>Seattle, WA · model rail &amp; scenery</p>
          </article>
        </div>
      </div>
    </section>

    <section class="section section-tint" id="trends">
      <div class="container trends-grid">
        <div class="trend-visual" data-reveal>
          <img class="trend-image" src="https://picsum.photos/seed/maker-pulse/1000/760" alt="A colorful collection of handmade materials and tools arranged like a trend board" width="1000" height="760" loading="lazy">
          <div class="trend-sticker"><span>Spring report</span><strong>Small, thoughtful making is having a moment.</strong></div>
        </div>
        <div class="trend-copy" data-reveal>
          <div class="eyebrow">Trend report</div>
          <h2 class="section-title">The Maker Pulse: what is moving now.</h2>
          <p>Our quarterly report looks beyond the viral project. We ask members what they are actually finishing, repairing, collecting, and teaching one another. The result is a practical snapshot of the interests shaping hobby rooms right now.</p>
          <div class="trend-list">
            <div class="trend-row"><strong>Repair-first making</strong><div class="trend-track"><div class="trend-bar" style="--trend-width:74%"></div></div><span>74%</span></div>
            <div class="trend-row"><strong>Nature-inspired palettes</strong><div class="trend-track"><div class="trend-bar" style="--trend-width:68%"></div></div><span>68%</span></div>
            <div class="trend-row"><strong>Small-batch collecting</strong><div class="trend-track"><div class="trend-bar" style="--trend-width:61%"></div></div><span>61%</span></div>
            <div class="trend-row"><strong>Low-commitment crafts</strong><div class="trend-track"><div class="trend-bar" style="--trend-width:55%"></div></div><span>55%</span></div>
          </div>
          <div class="trend-stats">
            <div class="trend-stat"><strong>3.2k</strong><span>project shares this week</span></div>
            <div class="trend-stat"><strong>18</strong><span>new club threads started</span></div>
            <div class="trend-stat"><strong>71%</strong><span>finish in 3 hours or less</span></div>
          </div>
          <a class="btn btn-primary" href="#blog">Read the full report <svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 12h14m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
        </div>
      </div>
      <div class="container story-grid" id="blog">
        <article class="story-card" data-reveal>
          <div class="story-image"><img src="https://picsum.photos/seed/journal-deadline/600/340" alt="A handwritten project deadline and open journal on a table" width="600" height="340" loading="lazy"></div>
          <span class="story-kicker">Field notes</span><h3>Why the best first project has a deadline</h3><p>A small date on the calendar can turn a vague interest into a project you actually finish.</p>
        </article>
        <article class="story-card" data-reveal>
          <div class="story-image"><img src="https://picsum.photos/seed/tiny-workbench/600/340" alt="A compact workbench organized with labeled drawers and hanging tools" width="600" height="340" loading="lazy"></div>
          <span class="story-kicker">Workshop wisdom</span><h3>A calmer way to organize a tiny workbench</h3><p>Start with the tools you touch daily, then build a system around your next three projects.</p>
        </article>
        <article class="story-card" data-reveal>
          <div class="story-image"><img src="https://picsum.photos/seed/collecting-story/600/340" alt="A small collection of objects displayed with handwritten labels" width="600" height="340" loading="lazy"></div>
          <span class="story-kicker">Collecting</span><h3>What to collect before you collect</h3><p>Decide what story you want your collection to tell before you buy the first piece.</p>
        </article>
      </div>
    </section>

    <section class="section testimonial-section" id="stories">
      <div class="container">
        <div class="section-head" data-reveal>
          <div>
            <div class="eyebrow">From the community</div>
            <h2 class="section-title">Made more, together.</h2>
            <p class="section-intro">Real makers, real unfinished corners, and the small victories that keep a hobby alive.</p>
          </div>
        </div>
        <div class="testimonial-grid">
          <article class="testimonial-card" data-reveal>
            <span class="quote-mark">“</span>
            <blockquote>I stopped saving random pins and started finishing things. The project paths gave me just enough guidance without taking over the fun.</blockquote>
            <div class="testimonial-person"><span class="avatar gold">MK</span><div><strong>Mara Kim</strong><span>Watercolor &amp; journaling</span></div></div>
          </article>
          <article class="testimonial-card" data-reveal>
            <span class="quote-mark">“</span>
            <blockquote>The maintenance notes changed how I use my tools. I feel more confident, and my first cabinet door finally looks like it belongs in a workshop.</blockquote>
            <div class="testimonial-person"><span class="avatar coral">JT</span><div><strong>Jon Taylor</strong><span>Beginner woodworker</span></div></div>
          </article>
          <article class="testimonial-card" data-reveal>
            <span class="quote-mark">“</span>
            <blockquote>I found a bookbinding group in a city I had only lived in for two months. Now my hobby has friends, feedback, and a very full bookshelf.</blockquote>
            <div class="testimonial-person"><span class="avatar">RS</span><div><strong>Rina Shah</strong><span>Book arts &amp; collecting</span></div></div>
          </article>
        </div>
      </div>
    </section>

    <section class="section" id="resources">
      <div class="container faq-grid">
        <div class="faq-intro" data-reveal>
          <div class="eyebrow">Before you begin</div>
          <h2 class="section-title">Good questions, useful answers.</h2>
          <p>We keep the learning curve friendly. These answers will help you decide where to start, what to buy, and how to join the community without feeling overwhelmed.</p>
          <a class="btn btn-secondary" href="#newsletter">Get the starter kit</a>
        </div>
        <div class="faq-list" data-reveal>
          <div class="faq-item open">
            <button class="faq-question" type="button" aria-expanded="true">Is Craft &amp; Compass only for complete beginners?<span class="faq-icon">+</span></button>
            <div class="faq-answer"><p>No. Beginner tracks introduce the fundamentals, while intermediate and advanced guides cover finishing methods, pattern design, conservation, and more specialized techniques. You can follow one track from start to finish or jump into the project that excites you most.</p></div>
          </div>
          <div class="faq-item">
            <button class="faq-question" type="button" aria-expanded="false">Do I need expensive tools to get started?<span class="faq-icon">+</span></button>
            <div class="faq-answer"><p>Not usually. Each guide separates essential tools from nice-to-have upgrades, so you can begin with a small kit and add pieces as your skill grows. We also include safety notes and low-cost substitutions for common materials.</p></div>
          </div>
          <div class="faq-item">
            <button class="faq-question" type="button" aria-expanded="false">Can I join a local group if I am remote?<span class="faq-icon">+</span></button>
            <div class="faq-answer"><p>Absolutely. Many clubs host virtual meetings, online critique sessions, and mail-in material swaps. You can search by interest, time zone, and meeting style to find a group that fits your schedule.</p></div>
          </div>
          <div class="faq-item">
            <button class="faq-question" type="button" aria-expanded="false">How is project difficulty determined?<span class="faq-icon">+</span></button>
            <div class="faq-answer"><p>Our difficulty labels consider technique, tool familiarity, setup time, and the number of sessions required. We also show a recommended skill level on every project so you can choose a satisfying challenge rather than a frustrating one.</p></div>
          </div>
          <div class="faq-item">
            <button class="faq-question" type="button" aria-expanded="false">Can I share my own project with the community?<span class="faq-icon">+</span></button>
            <div class="faq-answer"><p>Yes. Members can share a photo, materials list, lessons learned, and a short note about what they would do differently next time. The best community submissions include honest process photos, not just a polished final image.</p></div>
          </div>
        </div>
      </div>
    </section>

    <section class="newsletter-section" id="newsletter">
      <div class="container">
        <div class="newsletter-box" data-reveal>
          <div class="newsletter-copy">
            <div class="eyebrow">The Sunday Sketchbook</div>
            <h2>One useful idea, every Sunday.</h2>
            <p>Join 18,000+ makers for a short newsletter with one project, one technique, one local group, and one small prompt for the week ahead.</p>
          </div>
          <div>
            <form class="newsletter-form" id="newsletterForm">
              <label class="skip-link" for="email">Email address</label>
              <input id="email" name="email" type="email" placeholder="you@example.com" autocomplete="email" required>
              <button type="submit">Join free</button>
            </form>
            <p class="form-message" id="formMessage" aria-live="polite"></p>
          </div>
        </div>
      </div>
    </section>
  </main>

  <footer>
    <div class="container">
      <div class="footer-grid">
        <div class="footer-brand">
          <a class="brand" href="#top" aria-label="Craft and Compass home">
            <span class="brand-mark"><img src="https://placehold.co/160x160/163F34/FFFFFF?text=C%26C&amp;font=poppins" alt="Craft and Compass logo placeholder" width="160" height="160"></span>
            <span class="brand-copy"><strong>Craft &amp; Compass</strong><small>Your map to making, collecting, and creative communities.</small></span>
          </a>
          <p>Practical inspiration for people who love making, collecting, and sharing the joy of a well-kept hobby.</p>
          <div class="social-links" aria-label="Social media links">
            <a href="#top" aria-label="Instagram"><svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="5" stroke="currentColor" stroke-width="1.7"/><circle cx="12" cy="12" r="3.5" stroke="currentColor" stroke-width="1.7"/><circle cx="17.2" cy="6.8" r="1" fill="currentColor"/></svg></a>
            <a href="#top" aria-label="Pinterest"><svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M9.5 21c.5-3.2 1.4-5.2 2.6-7.1-.8-1.6-.8-3.2.1-4.7.9-1.5 2.5-2 4.1-1.5 1.7.5 2.7 2.1 2.5 4-.2 2.1-1.3 3.9-2.3 4.7-.5.4-.6.9-.3 1.6.2.5.1.9-.4 1.1-.7.2-2.1.5-3.4-.2-.3-.1-.4-.4-.3-.8.2-.9.5-1.9.5-2.8 0-2.2-1.1-4.1-2.9-4.5-1.8-.4-3.4.8-3.8 2.7-.4 2 .2 3.9 1.5 5.3.4.4.3 1-.1 1.3-.5.4-1.2.5-1.9.3-1.1-.3-2-1.3-2.3-2.5-.5-2 .4-4.2 2-5.5 2.1-1.7 5-1.9 7.1-.5" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg></a>
            <a href="#top" aria-label="YouTube"><svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M21 12c0 2.2-.2 3.8-.5 4.6a2.5 2.5 0 0 1-1.7 1.7C16.9 18.8 12 18.8 12 18.8s-4.9 0-6.8.5a2.5 2.5 0 0 1-1.7-1.7C3 15.8 3 13.6 3 11.4s.2-3.8.5-4.6a2.5 2.5 0 0 1 1.7-1.7C7.1 4.6 12 4.6 12 4.6s4.9 0 6.8.5a2.5 2.5 0 0 1 1.7 1.7c.3.8.5 2.4.5 4.6Z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/><path d="m10 9 5 2.5-5 2.5V9Z" fill="currentColor"/></svg></a>
            <a href="#top" aria-label="RSS feed"><svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 19a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0-12a9 9 0 0 1 9 9M5 5a15 15 0 0 1 14 14" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg></a>
          </div>
        </div>
        <div class="footer-column">
          <h3>Learn</h3>
          <ul class="footer-links">
            <li><a href="#guides">Craft Tutorials</a></li>
            <li><a href="#explore">Beginner Guides</a></li>
            <li><a href="#trends">Trend Reports</a></li>
            <li><a href="#resources">Tool Maintenance</a></li>
            <li><a href="#resources">Finishing Methods</a></li>
          </ul>
        </div>
        <div class="footer-column">
          <h3>Community</h3>
          <ul class="footer-links">
            <li><a href="#community">Find a Group</a></li>
            <li><a href="#inspiration">Project Board</a></li>
            <li><a href="#blog">Maker Blog</a></li>
            <li><a href="#stories">Community Stories</a></li>
            <li><a href="#newsletter">Share a Project</a></li>
          </ul>
        </div>
        <div class="footer-column">
          <h3>Talk with us</h3>
          <ul class="contact-list">
            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 6.5 12 12l8-5.5M6 5h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/></svg><span>hello@craftandcompass.studio</span></li>
            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M7 3h3l1.5 4-2 1.5a13 13 0 0 0 5 5L16 12l4 1.5v3a2 2 0 0 1-2 2A16 16 0 0 1 5 5a2 2 0 0 1 2-2Z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/></svg><span>+1 (555) 014-2876</span></li>
            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M12 21s6-5.2 6-10a6 6 0 1 0-12 0c0 4.8 6 10 6 10Z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/><circle cx="12" cy="11" r="2" stroke="currentColor" stroke-width="1.6"/></svg><span>214 Foundry Lane<br>Portland, OR 97209</span></li>
          </ul>
        </div>
      </div>
      <div class="footer-bottom">
        <span>© <span id="currentYear">2025</span> Craft &amp; Compass. Made with curiosity in Portland, Oregon.</span>
        <div class="footer-legal"><a href="#top">Privacy</a><a href="#top">Terms</a><a href="#top">Accessibility</a></div>
      </div>
    </div>
  </footer>

  <dialog id="makerDialog" aria-labelledby="dialogTitle">
    <button class="dialog-close" type="button" data-close-dialog aria-label="Close video preview">×</button>
    <div class="dialog-media"><img src="https://picsum.photos/seed/video-workbench/800/450" alt="A maker preparing a clean, organized workbench" width="800" height="450" loading="lazy"></div>
    <div class="dialog-content">
      <div class="dialog-kicker">Video preview · 12 minutes</div>
      <h2 id="dialogTitle">The 12-minute workbench reset</h2>
      <p>Start with a clear surface, group tools by the way you use them, and finish with a five-minute cleanup ritual. A calmer bench makes safer cuts, cleaner joints, and a project you are more likely to finish.</p>
      <a class="btn btn-primary" href="#guides" data-close-dialog>Read the full tutorial</a>
    </div>
  </dialog>

  <script>
    (() => {
      const header = document.getElementById('siteHeader');
      const navToggle = document.querySelector('.nav-toggle');
      const nav = document.getElementById('primaryNav');
      const year = document.getElementById('currentYear');
      year.textContent = new Date().getFullYear();

      const onScroll = () => header.classList.toggle('scrolled', window.scrollY > 12);
      window.addEventListener('scroll', onScroll, { passive: true });
      onScroll();

      navToggle.addEventListener('click', () => {
        const open = nav.classList.toggle('open');
        navToggle.setAttribute('aria-expanded', String(open));
        navToggle.setAttribute('aria-label', open ? 'Close navigation' : 'Open navigation');
      });
      nav.querySelectorAll('a').forEach(link => link.addEventListener('click', () => {
        nav.classList.remove('open');
        navToggle.setAttribute('aria-expanded', 'false');
        navToggle.setAttribute('aria-label', 'Open navigation');
      }));

      const revealItems = document.querySelectorAll('[data-reveal]');
      if ('IntersectionObserver' in window) {
        const revealObserver = new IntersectionObserver(entries => {
          entries.forEach(entry => {
            if (entry.isIntersecting) {
              entry.target.classList.add('is-visible');
              revealObserver.unobserve(entry.target);
            }
          });
        }, { threshold: 0.12 });
        revealItems.forEach(item => revealObserver.observe(item));
      } else {
        revealItems.forEach(item => item.classList.add('is-visible'));
      }

      const filterButtons = document.querySelectorAll('[data-filter]');
      const projectCards = document.querySelectorAll('.project-card');
      const boardEmpty = document.getElementById('boardEmpty');
      filterButtons.forEach(button => {
        button.addEventListener('click', () => {
          const filter = button.dataset.filter;
          filterButtons.forEach(item => {
            const active = item === button;
            item.classList.toggle('active', active);
            item.setAttribute('aria-pressed', String(active));
          });
          let visible = 0;
          projectCards.forEach(card => {
            const show = filter === 'all' || card.dataset.category === filter;
            card.classList.toggle('is-hidden', !show);
            if (show) visible += 1;
          });
          boardEmpty.classList.toggle('show', visible === 0);
        });
      });

      const savedKeys = new Set();
      try {
        const stored = JSON.parse(localStorage.getItem('craftSavedProjects') || '[]');
        if (Array.isArray(stored)) stored.forEach(key => savedKeys.add(key));
      } catch (error) { /* The board still works when storage is unavailable. */ }

      const savedCount = document.getElementById('savedCount');
      const saveButtons = document.querySelectorAll('[data-save]');
      const syncSaveButtons = () => {
        savedCount.textContent = savedKeys.size;
        saveButtons.forEach(button => {
          const saved = savedKeys.has(button.dataset.save);
          button.classList.toggle('saved', saved);
          button.setAttribute('aria-pressed', String(saved));
          button.querySelector('.save-label').textContent = saved ? 'Saved' : 'Save';
        });
      };
      saveButtons.forEach(button => {
        button.addEventListener('click', () => {
          const key = button.dataset.save;
          if (savedKeys.has(key)) savedKeys.delete(key); else savedKeys.add(key);
          try { localStorage.setItem('craftSavedProjects', JSON.stringify([...savedKeys])); } catch (error) { /* Keep the in-memory state. */ }
          syncSaveButtons();
        });
      });
      syncSaveButtons();

      const dialog = document.getElementById('makerDialog');
      document.querySelectorAll('[data-open-video]').forEach(button => {
        button.addEventListener('click', () => {
          if (typeof dialog.showModal === 'function') dialog.showModal();
        });
      });
      document.querySelectorAll('[data-close-dialog]').forEach(button => {
        button.addEventListener('click', () => dialog.close());
      });
      dialog.addEventListener('click', event => {
        if (event.target === dialog) dialog.close();
      });

      document.querySelectorAll('.faq-question').forEach(button => {
        button.addEventListener('click', () => {
          const item = button.closest('.faq-item');
          const wasOpen = item.classList.contains('open');
          document.querySelectorAll('.faq-item.open').forEach(openItem => {
            openItem.classList.remove('open');
            openItem.querySelector('.faq-question').setAttribute('aria-expanded', 'false');
          });
          if (!wasOpen) {
            item.classList.add('open');
            button.setAttribute('aria-expanded', 'true');
          }
        });
      });

      const newsletterForm = document.getElementById('newsletterForm');
      const formMessage = document.getElementById('formMessage');
      newsletterForm.addEventListener('submit', event => {
        event.preventDefault();
        const email = newsletterForm.email.value.trim();
        if (!email) {
          newsletterForm.email.reportValidity();
          return;
        }
        formMessage.textContent = 'Welcome to the Sunday Sketchbook — your first issue is on its way.';
        formMessage.classList.add('success');
        newsletterForm.reset();
      });
    })();
  </script>
</body>
</html>
View Axe Report (JSON)
{
  "testEngine": {
    "name": "axe-core",
    "version": "4.10.2"
  },
  "testRunner": {
    "name": "axe"
  },
  "testEnvironment": {
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
    "windowWidth": 1280,
    "windowHeight": 720,
    "orientationAngle": 0,
    "orientationType": "landscape-primary"
  },
  "timestamp": "2026-11-12T09:55:43.796Z",
  "url": "https://benchmark.aimac.invalid/782231ab4275ee3b8f49b689dba4c45810c4c2e33cd471e0797706388c37d3d0.html",
  "toolOptions": {
    "runOnly": {
      "type": "tag",
      "values": [
        "wcag2a",
        "wcag2aa",
        "wcag21a",
        "wcag21aa",
        "wcag22a",
        "wcag22aa"
      ]
    },
    "resultTypes": [
      "violations"
    ],
    "reporter": "v1"
  },
  "inapplicable": [
    {
      "id": "area-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <area> elements of image maps have alternative text",
      "help": "Active <area> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-braille-equivalent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
      "help": "aria-braille attributes must have a non-braille equivalent",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-command-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA button, link and menuitem has an accessible name",
      "help": "ARIA commands must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-input-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA input field has an accessible name",
      "help": "ARIA input fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-meter-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA meter node has an accessible name",
      "help": "ARIA meter nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-progressbar-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA progressbar node has an accessible name",
      "help": "ARIA progressbar nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-children",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure elements with an ARIA role that require child roles contain them",
      "help": "Certain ARIA roles must contain particular children",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-parent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure elements with an ARIA role that require parent roles are contained by them",
      "help": "Certain ARIA roles must be contained by particular parents",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-toggle-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA toggle field has an accessible name",
      "help": "ARIA toggle fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-tooltip-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every ARIA tooltip node has an accessible name",
      "help": "ARIA tooltip nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "avoid-inline-spacing",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag21aa",
        "wcag1412",
        "EN-301-549",
        "EN-9.1.4.12",
        "ACT"
      ],
      "description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
      "help": "Inline text spacing must be adjustable with custom stylesheets",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
      "nodes": []
    },
    {
      "id": "blink",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag222",
        "section508",
        "section508.22.j",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <blink> elements are not used",
      "help": "<blink> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
      "nodes": []
    },
    {
      "id": "definition-list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dl> elements are structured correctly",
      "help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
      "nodes": []
    },
    {
      "id": "dlitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dt> and <dd> elements are contained by a <dl>",
      "help": "<dt> and <dd> elements must be contained by a <dl>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-focusable-content",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
      "help": "Frames with focusable content must not have tabindex=-1",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title-unique",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
      "help": "Frames must have a unique title attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.i",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements have an accessible name",
      "help": "Frames must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
      "nodes": []
    },
    {
      "id": "html-xml-lang-mismatch",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
      "help": "HTML elements with lang and xml:lang must have the same base language",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure input buttons have discernible text",
      "help": "Input buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <input type=\"image\"> elements have alternative text",
      "help": "Image buttons must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "marquee",
      "impact": null,
      "tags": [
        "cat.parsing",
        "wcag2a",
        "wcag222",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <marquee> elements are not used",
      "help": "<marquee> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
      "nodes": []
    },
    {
      "id": "meta-refresh",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag221",
        "TTv5",
        "TT8.a",
        "EN-301-549",
        "EN-9.2.2.1"
      ],
      "description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
      "help": "Delayed refresh under 20 hours must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
      "nodes": []
    },
    {
      "id": "object-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure <object> elements have alternative text",
      "help": "<object> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "role-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure [role=\"img\"] elements have alternative text",
      "help": "[role=\"img\"] elements must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "scrollable-region-focusable",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "wcag213",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1",
        "EN-9.2.1.3"
      ],
      "description": "Ensure elements that have scrollable content are accessible by keyboard",
      "help": "Scrollable region must have keyboard access",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
      "nodes": []
    },
    {
      "id": "select-name",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure select element has an accessible name",
      "help": "Select element must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "server-side-image-map",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag211",
        "section508",
        "section508.22.f",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure that server-side image maps are not used",
      "help": "Server-side image maps must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
      "nodes": []
    },
    {
      "id": "summary-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure summary elements have discernible text",
      "help": "Summary elements must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "svg-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
      "help": "<svg> elements with an img role must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "td-headers-attr",
      "impact": null,
      "tags": [
        "cat.tables",
        "wcag2a",
        "wcag131",
        "section508",
        "section508.22.g",
        "TTv5",
        "TT14.b",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
      "help": "Table cells that use the headers attribute must only refer to cells in the same table",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
      "nodes": []
    },
    {
      "id": "th-has-data-cells",
      "impact": null,
      "tags": [
        "cat.tables",
        "wcag2a",
        "wcag131",
        "section508",
        "section508.22.g",
        "TTv5",
        "TT14.b",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
      "help": "Table headers in a data table must refer to data cells",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
      "nodes": []
    },
    {
      "id": "valid-lang",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2aa",
        "wcag312",
        "TTv5",
        "TT11.b",
        "EN-301-549",
        "EN-9.3.1.2",
        "ACT"
      ],
      "description": "Ensure lang attributes have valid values",
      "help": "lang attribute must have a valid value",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
      "nodes": []
    },
    {
      "id": "video-caption",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag122",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT17.a",
        "EN-301-549",
        "EN-9.1.2.2"
      ],
      "description": "Ensure <video> elements have captions",
      "help": "<video> elements must have captions",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
      "nodes": []
    },
    {
      "id": "no-autoplay-audio",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag142",
        "TTv5",
        "TT2.a",
        "EN-301-549",
        "EN-9.1.4.2",
        "ACT"
      ],
      "description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
      "help": "<video> or <audio> elements must not play automatically",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
      "nodes": []
    }
  ],
  "passes": [
    {
      "id": "aria-allowed-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure an element's role supports its ARIA attributes",
      "help": "Elements must only use supported ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-allowed-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attributes are used correctly for the defined role"
            }
          ],
          "none": [
            {
              "id": "aria-unsupported-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute is supported"
            }
          ],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#top\" aria-label=\"Craft and Compass home\">",
          "target": [
            ".header-inner > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-conditional-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are used as described in the specification of the element's role",
      "help": "ARIA attributes must be used as specified for the element's role",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-conditional-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#top\" aria-label=\"Craft and Compass home\">",
          "target": [
            ".header-inner > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-deprecated-role",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements do not use deprecated roles",
      "help": "Deprecated ARIA roles must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "deprecatedrole",
              "data": null,
              "relatedNodes": [],
              "impact": "minor",
              "message": "ARIA role is not deprecated"
            }
          ],
          "impact": null,
          "html": "<div class=\"filter-group\" role=\"group\" aria-label=\"Filter projects by interest\">",
          "target": [
            ".filter-group"
          ]
        }
      ]
    },
    {
      "id": "aria-hidden-body",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "wcag412",
        "EN-301-549",
        "EN-9.1.3.1",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-hidden=\"true\" is not present on the document body.",
      "help": "aria-hidden=\"true\" must not be present on the document body",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-hidden-body",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "No aria-hidden attribute is present on document body"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<body id=\"top\">",
          "target": [
            "#top"
          ]
        }
      ]
    },
    {
      "id": "aria-hidden-focus",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
      "help": "ARIA hidden element must not be focusable or contain focusable elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "focusable-modal-open",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements while a modal is open"
            },
            {
              "id": "focusable-disabled",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements contained within element"
            },
            {
              "id": "focusable-not-tabbable",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements contained within element"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"M5 12h14m-6-6 6 6-6 6\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>",
          "target": [
            ".btn-primary.btn[href$=\"#inspiration\"] > svg[width=\"17\"][height=\"17\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-prohibited-attr",
      "impact": "serious",
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are not prohibited for an element's role",
      "help": "Elements must only use permitted ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "aria-prohibited-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#top\" aria-label=\"Craft and Compass home\">",
          "target": [
            ".header-inner > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-required-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements with ARIA roles have all required ARIA attributes",
      "help": "Required ARIA attributes must be provided",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-required-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "All required ARIA attributes are present"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<div class=\"filter-group\" role=\"group\" aria-label=\"Filter projects by interest\">",
          "target": [
            ".filter-group"
          ]
        }
      ]
    },
    {
      "id": "aria-roles",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all elements with a role attribute use a valid value",
      "help": "ARIA roles used must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "invalidrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA role is valid"
            },
            {
              "id": "abstractrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Abstract roles are not used"
            },
            {
              "id": "unsupportedrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA role is supported"
            }
          ],
          "impact": null,
          "html": "<div class=\"filter-group\" role=\"group\" aria-label=\"Filter projects by interest\">",
          "target": [
            ".filter-group"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr-value",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all ARIA attributes have valid values",
      "help": "ARIA attributes must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-valid-attr-value",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute values are valid"
            },
            {
              "id": "aria-errormessage",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
            },
            {
              "id": "aria-level",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-level values are valid"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#top\" aria-label=\"Craft and Compass home\">",
          "target": [
            ".header-inner > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure attributes that begin with aria- are valid ARIA attributes",
      "help": "ARIA attributes must conform to valid names",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-valid-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute name is valid"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#top\" aria-label=\"Craft and Compass home\">",
          "target": [
            ".header-inner > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"]"
          ]
        }
      ]
    },
    {
      "id": "autocomplete-valid",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag21aa",
        "wcag135",
        "EN-301-549",
        "EN-9.1.3.5",
        "ACT"
      ],
      "description": "Ensure the autocomplete attribute is correct and suitable for the form field",
      "help": "autocomplete attribute must be used correctly",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "autocomplete-valid",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "the autocomplete attribute is correctly formatted"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<input id=\"email\" name=\"email\" type=\"email\" placeholder=\"you@example.com\" autocomplete=\"email\" required=\"\">",
          "target": [
            "#email"
          ]
        }
      ]
    },
    {
      "id": "button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure buttons have discernible text",
      "help": "Buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "button-has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has inner text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<button class=\"filter-btn active\" type=\"button\" data-filter=\"all\" aria-pressed=\"true\">All projects</button>",
          "target": [
            ".active"
          ]
        }
      ]
    },
    {
      "id": "bypass",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag241",
        "section508",
        "section508.22.o",
        "TTv5",
        "TT9.a",
        "EN-301-549",
        "EN-9.2.4.1"
      ],
      "description": "Ensure each page has at least one mechanism for a user to bypass navigation and jump straight to the content",
      "help": "Page must have means to bypass repeated blocks",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/bypass?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "internal-link-present",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Valid skip link found"
            },
            {
              "id": "header-present",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<h1>Find your next obsession.<br><em>Make something worth keeping.</em></h1>",
                  "target": [
                    "h1"
                  ]
                },
                {
                  "html": "<h2 class=\"section-title\">A world of hands-on interests, organized.</h2>",
                  "target": [
                    "#explore > .container > .section-head[data-reveal=\"\"] > div > .section-title"
                  ]
                },
                {
                  "html": "<h3>Woodworking &amp; tools</h3>",
                  "target": [
                    ".category-card[href$=\"#inspiration\"][data-reveal=\"\"]:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Fiber &amp; paper</h3>",
                  "target": [
                    ".category-card[href$=\"#inspiration\"][data-reveal=\"\"]:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Models &amp; miniatures</h3>",
                  "target": [
                    ".category-card[href$=\"#inspiration\"][data-reveal=\"\"]:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Plants &amp; preservation</h3>",
                  "target": [
                    ".category-card[href$=\"#inspiration\"][data-reveal=\"\"]:nth-child(4) > h3"
                  ]
                },
                {
                  "html": "<h3>Collecting &amp; archives</h3>",
                  "target": [
                    ".category-card[href$=\"#inspiration\"][data-reveal=\"\"]:nth-child(5) > h3"
                  ]
                },
                {
                  "html": "<h3>Photo &amp; making</h3>",
                  "target": [
                    ".category-card[href$=\"#inspiration\"][data-reveal=\"\"]:nth-child(6) > h3"
                  ]
                },
                {
                  "html": "<h2 class=\"section-title\">Choose a project that fits your afternoon.</h2>",
                  "target": [
                    "#inspiration > .container > .section-head[data-reveal=\"\"] > div > .section-title"
                  ]
                },
                {
                  "html": "<h3>Walnut &amp; brass keepsake box</h3>",
                  "target": [
                    "article[data-category=\"woodworking\"] > .project-body > h3"
                  ]
                },
                {
                  "html": "<h3>Watercolor field journal</h3>",
                  "target": [
                    "article[data-category=\"fiber\"] > .project-body > h3"
                  ]
                },
                {
                  "html": "<h3>Terrarium rescue planter</h3>",
                  "target": [
                    "article[data-category=\"plants\"] > .project-body > h3"
                  ]
                },
                {
                  "html": "<h3>Miniature rail station</h3>",
                  "target": [
                    "article[data-category=\"models\"] > .project-body > h3"
                  ]
                },
                {
                  "html": "<h3>Botanical screen print</h3>",
                  "target": [
                    "article[data-category=\"photo\"] > .project-body > h3"
                  ]
                },
                {
                  "html": "<h3>Mended mug collection</h3>",
                  "target": [
                    "article[data-category=\"collecting\"] > .project-body > h3"
                  ]
                },
                {
                  "html": "<h2 class=\"section-title\">Start with a project, not a toolbox.</h2>",
                  "target": [
                    ".guide-content > .section-title"
                  ]
                },
                {
                  "html": "<h2 class=\"section-title\">Your hobby gets better with a room full of people.</h2>",
                  "target": [
                    ".community-copy > .section-title"
                  ]
                },
                {
                  "html": "<h3>Saturday Maker Market</h3>",
                  "target": [
                    ".club-card:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Binding &amp; Book Arts</h3>",
                  "target": [
                    ".club-card:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Scale &amp; Signal Model Club</h3>",
                  "target": [
                    ".club-card:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h2 class=\"section-title\">The Maker Pulse: what is moving now.</h2>",
                  "target": [
                    ".trend-copy > .section-title"
                  ]
                },
                {
                  "html": "<h3>Why the best first project has a deadline</h3>",
                  "target": [
                    ".story-card:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>A calmer way to organize a tiny workbench</h3>",
                  "target": [
                    ".story-card:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>What to collect before you collect</h3>",
                  "target": [
                    ".story-card:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h2 class=\"section-title\">Made more, together.</h2>",
                  "target": [
                    "#stories > .container > .section-head[data-reveal=\"\"] > div > .section-title"
                  ]
                },
                {
                  "html": "<h2 class=\"section-title\">Good questions, useful answers.</h2>",
                  "target": [
                    ".faq-intro > .section-title"
                  ]
                },
                {
                  "html": "<h2>One useful idea, every Sunday.</h2>",
                  "target": [
                    ".newsletter-copy > h2"
                  ]
                },
                {
                  "html": "<h3>Learn</h3>",
                  "target": [
                    ".footer-column:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Community</h3>",
                  "target": [
                    ".footer-column:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Talk with us</h3>",
                  "target": [
                    ".footer-column:nth-child(4) > h3"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a heading"
            },
            {
              "id": "landmark",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<main id=\"main\">",
                  "target": [
                    "#main"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a landmark region"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\" class=\"js\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#d4dad8",
                "bgColor": "#0f3029",
                "contrastRatio": 10.04,
                "fontSize": "9.8pt (13.12px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has sufficient color contrast of 10.04"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<span><strong>The Spring Maker Pulse</strong> is live \u2014 see what makers are building right now.</span>",
          "target": [
            ".utility-note > span:nth-child(2)"
          ]
        }
      ]
    },
    {
      "id": "document-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag242",
        "TTv5",
        "TT12.a",
        "EN-301-549",
        "EN-9.2.4.2",
        "ACT"
      ],
      "description": "Ensure each HTML document contains a non-empty <title> element",
      "help": "Documents must have <title> element to aid in navigation",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "doc-has-title",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Document has a non-empty <title> element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\" class=\"js\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "duplicate-id-aria",
      "impact": null,
      "tags": [
        "cat.parsing",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every id attribute value used in ARIA and in labels is unique",
      "help": "IDs used in ARIA and labels must be unique",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "duplicate-id-aria",
              "data": "primaryNav",
              "relatedNodes": [],
              "impact": "critical",
              "message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<nav class=\"nav\" id=\"primaryNav\" aria-label=\"Primary navigation\">",
          "target": [
            "#primaryNav"
          ]
        }
      ]
    },
    {
      "id": "form-field-multiple-labels",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag332",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.3.3.2"
      ],
      "description": "Ensure form field does not have multiple label elements",
      "help": "Form field must not have multiple label elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "multiple-label",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<label class=\"skip-link\" for=\"email\">Email address</label>",
                  "target": [
                    "label"
                  ]
                }
              ],
              "impact": "moderate",
              "message": "Form field does not have multiple label elements"
            }
          ],
          "impact": null,
          "html": "<input id=\"email\" name=\"email\" type=\"email\" placeholder=\"you@example.com\" autocomplete=\"email\" required=\"\">",
          "target": [
            "#email"
          ]
        }
      ]
    },
    {
      "id": "html-has-lang",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure every HTML document has a lang attribute",
      "help": "<html> element must have a lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-lang",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "The <html> element has a lang attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\" class=\"js\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "html-lang-valid",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure the lang attribute of the <html> element has a valid value",
      "help": "<html> element must have a valid value for the lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "valid-lang",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Value of lang attribute is included in the list of valid languages"
            }
          ],
          "impact": null,
          "html": "<html lang=\"en\" class=\"js\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "TT7.b",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <img> elements have alternative text or a role of none or presentation",
      "help": "Images must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-alt",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has an alt attribute"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "alt-space-value",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has a valid alt attribute value"
            }
          ],
          "impact": null,
          "html": "<img src=\"https://placehold.co/160x160/163F34/FFFFFF?text=C%26C&amp;font=poppins\" alt=\"Craft and Compass logo placeholder\" width=\"160\" height=\"160\">",
          "target": [
            ".header-inner > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"] > .brand-mark > img[width=\"160\"][height=\"160\"]"
          ]
        }
      ]
    },
    {
      "id": "label",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every form element has a label",
      "help": "Form elements must have labels",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "explicit-label",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<label class=\"skip-link\" for=\"email\">Email address</label>",
                  "target": [
                    "label"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an explicit <label>"
            },
            {
              "id": "non-empty-placeholder",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has a placeholder attribute"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "hidden-explicit-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Form element has a visible explicit <label>"
            }
          ],
          "impact": null,
          "html": "<input id=\"email\" name=\"email\" type=\"email\" placeholder=\"you@example.com\" autocomplete=\"email\" required=\"\">",
          "target": [
            "#email"
          ]
        }
      ]
    },
    {
      "id": "link-in-text-block",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2a",
        "wcag141",
        "TTv5",
        "TT13.a",
        "EN-301-549",
        "EN-9.1.4.1"
      ],
      "description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
      "help": "Links must be distinguishable without relying on color",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "link-in-text-block-style",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<div class=\"hero-card\">",
                  "target": [
                    ".hero-card"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text by visual styling"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"mini-link\" href=\"#guides\">See the guide <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"M5 12h14m-6-6 6 6-6 6\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></a>",
          "target": [
            ".mini-link"
          ]
        }
      ]
    },
    {
      "id": "link-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure links have discernible text",
      "help": "Links must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "focusable-no-name",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element is not in tab order or has accessible text"
            }
          ],
          "impact": null,
          "html": "<a class=\"skip-link\" href=\"#main\">Skip to content</a>",
          "target": [
            "a[href$=\"#main\"]"
          ]
        }
      ]
    },
    {
      "id": "list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that lists are structured correctly",
      "help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "only-listitems",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "List element only has direct children that are allowed inside <li> elements"
            }
          ],
          "impact": null,
          "html": "<ul>",
          "target": [
            "#primaryNav > ul"
          ]
        }
      ]
    },
    {
      "id": "listitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <li> elements are used semantically",
      "help": "<li> elements must be contained in a <ul> or <ol>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "listitem",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "List item has a <ul>, <ol> or role=\"list\" parent element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<li><a href=\"#explore\">Explore</a></li>",
          "target": [
            "#primaryNav > ul > li:nth-child(1)"
          ]
        }
      ]
    },
    {
      "id": "meta-viewport",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag2aa",
        "wcag144",
        "EN-301-549",
        "EN-9.1.4.4",
        "ACT"
      ],
      "description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
      "help": "Zooming and scaling must not be disabled",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "meta-viewport",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "<meta> tag does not disable zooming on mobile devices"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">",
          "target": [
            "meta[name=\"viewport\"]"
          ]
        }
      ]
    },
    {
      "id": "nested-interactive",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
      "help": "Interactive controls must not be nested",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "no-focusable-content",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element does not have focusable descendants"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<img src=\"https://placehold.co/160x160/163F34/FFFFFF?text=C%26C&amp;font=poppins\" alt=\"Craft and Compass logo placeholder\" width=\"160\" height=\"160\">",
          "target": [
            ".header-inner > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"] > .brand-mark > img[width=\"160\"][height=\"160\"]"
          ]
        }
      ]
    },
    {
      "id": "target-size",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag22aa",
        "wcag258"
      ],
      "description": "Ensure touch targets have sufficient size and space",
      "help": "All touch targets must be 24px large, or leave sufficient space",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "target-size",
              "data": {
                "minSize": 24,
                "width": 128.9,
                "height": 46.4
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Control has sufficient size (128.9px by 46.4px, should be at least 24px by 24px)"
            },
            {
              "id": "target-offset",
              "data": {
                "closestOffset": 24,
                "minOffset": 24
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"skip-link\" href=\"#main\">Skip to content</a>",
          "target": [
            "a[href$=\"#main\"]"
          ]
        }
      ]
    }
  ],
  "incomplete": [
    {
      "id": "aria-prohibited-attr",
      "impact": "serious",
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are not prohibited for an element's role",
      "help": "Elements must only use permitted ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "aria-prohibited-attr",
              "data": {
                "role": null,
                "nodeName": "div",
                "messageKey": "noRoleSingular",
                "prohibited": [
                  "aria-label"
                ]
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "aria-label attribute is not well supported on a div with no valid role attribute."
            }
          ],
          "impact": "serious",
          "html": "<div class=\"social-links\" aria-label=\"Social media links\">",
          "target": [
            ".social-links"
          ],
          "failureSummary": "Fix all of the following:\n  aria-label attribute is not well supported on a div with no valid role attribute."
        }
      ]
    },
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": null,
                "bgColor": null,
                "contrastRatio": 0,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "bold",
                "messageKey": "elmPartiallyObscured",
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<span class=\"check\">NEW</span>",
                  "target": [
                    ".utility-note > .check"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element's background color could not be determined because it's partially obscured by another element"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span class=\"check\">NEW</span>",
          "target": [
            ".utility-note > .check"
          ],
          "failureSummary": "Fix any of the following:\n  Element's background color could not be determined because it's partially obscured by another element"
        }
      ]
    },
    {
      "id": "link-in-text-block",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2a",
        "wcag141",
        "TTv5",
        "TT13.a",
        "EN-301-549",
        "EN-9.1.4.1"
      ],
      "description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
      "help": "Links must be distinguishable without relying on color",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "link-in-text-block",
              "data": {
                "messageKey": "bgOverlap"
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"footer-brand\">",
                  "target": [
                    ".footer-brand"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element's contrast ratio could not be determined because of element overlap"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<a class=\"brand\" href=\"#top\" aria-label=\"Craft and Compass home\">",
          "target": [
            ".footer-brand > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element's contrast ratio could not be determined because of element overlap"
        }
      ]
    }
  ],
  "violations": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#e56b4f",
                "contrastRatio": 3.2,
                "fontSize": "10.9pt (14.56px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<a class=\"nav-cta\" href=\"#newsletter\">Join free</a>",
                  "target": [
                    ".nav-cta"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.2 (foreground color: #ffffff, background color: #e56b4f, font size: 10.9pt (14.56px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<a class=\"nav-cta\" href=\"#newsletter\">Join free</a>",
          "target": [
            ".nav-cta"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.2 (foreground color: #ffffff, background color: #e56b4f, font size: 10.9pt (14.56px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#c84f37",
                "bgColor": "#f7f4ec",
                "contrastRatio": 4.12,
                "fontSize": "9.4pt (12.48px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body id=\"top\">",
                  "target": [
                    "#top"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.12 (foreground color: #c84f37, background color: #f7f4ec, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"eyebrow\">Find your direction</div>",
          "target": [
            ".section-head.is-visible[data-reveal=\"\"] > div > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.12 (foreground color: #c84f37, background color: #f7f4ec, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#c84f37",
                "bgColor": "#f7f4ec",
                "contrastRatio": 4.12,
                "fontSize": "9.4pt (12.48px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body id=\"top\">",
                  "target": [
                    "#top"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.12 (foreground color: #c84f37, background color: #f7f4ec, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"eyebrow\">Find your direction</div>",
          "target": [
            "#explore > .container > .section-head.is-visible[data-reveal=\"\"] > div > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.12 (foreground color: #c84f37, background color: #f7f4ec, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#c84f37",
                "bgColor": "#f0f3ed",
                "contrastRatio": 4.04,
                "fontSize": "9.4pt (12.48px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section board-section\" id=\"inspiration\">",
                  "target": [
                    "#inspiration"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.04 (foreground color: #c84f37, background color: #f0f3ed, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"eyebrow\">The inspiration board</div>",
          "target": [
            "#inspiration > .container > .section-head.is-visible[data-reveal=\"\"] > div > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.04 (foreground color: #c84f37, background color: #f0f3ed, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#65726c",
                "bgColor": "#f0f3ed",
                "contrastRatio": 4.48,
                "fontSize": "12.2pt (16.32px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section board-section\" id=\"inspiration\">",
                  "target": [
                    "#inspiration"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.48 (foreground color: #65726c, background color: #f0f3ed, font size: 12.2pt (16.32px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"section-intro\">Every project is tagged by skill, time, and material so you can make a useful next step. Filter the board, save the ideas you want to revisit, and share your own build when it is ready.</p>",
          "target": [
            "#inspiration > .container > .section-head.is-visible[data-reveal=\"\"] > div > .section-intro"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.48 (foreground color: #65726c, background color: #f0f3ed, font size: 12.2pt (16.32px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#65726c",
                "bgColor": "#f0f3ed",
                "contrastRatio": 4.48,
                "fontSize": "9.8pt (13.12px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section board-section\" id=\"inspiration\">",
                  "target": [
                    "#inspiration"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.48 (foreground color: #65726c, background color: #f0f3ed, font size: 9.8pt (13.12px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span>Saved:</span>",
          "target": [
            ".board-save-count > span"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.48 (foreground color: #65726c, background color: #f0f3ed, font size: 9.8pt (13.12px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#5c5230",
                "bgColor": "#d9a94f",
                "contrastRatio": 3.6,
                "fontSize": "8.2pt (10.88px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"guide-badge\"><span>Beginner rule</span><strong>Start with one project, not a shelf of tools.</strong></div>",
                  "target": [
                    ".guide-badge"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.6 (foreground color: #5c5230, background color: #d9a94f, font size: 8.2pt (10.88px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span>Beginner rule</span>",
          "target": [
            ".guide-badge > span"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.6 (foreground color: #5c5230, background color: #d9a94f, font size: 8.2pt (10.88px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#c84f37",
                "bgColor": "#f7f4ec",
                "contrastRatio": 4.12,
                "fontSize": "9.4pt (12.48px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body id=\"top\">",
                  "target": [
                    "#top"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.12 (foreground color: #c84f37, background color: #f7f4ec, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"eyebrow\">Craft tutorials</div>",
          "target": [
            ".guide-content > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.12 (foreground color: #c84f37, background color: #f7f4ec, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#65726c",
                "bgColor": "#e1e2da",
                "contrastRatio": 3.85,
                "fontSize": "8.4pt (11.2px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<header class=\"site-header scrolled\" id=\"siteHeader\">",
                  "target": [
                    "#siteHeader"
                  ]
                },
                {
                  "html": "<section class=\"section community-section\" id=\"community\">",
                  "target": [
                    "#community"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.85 (foreground color: #65726c, background color: #e1e2da, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<small>Your map to making, collecting, and creative communities.</small>",
          "target": [
            ".header-inner > .brand[aria-label=\"Craft and Compass home\"][href$=\"#top\"] > .brand-copy > small"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.85 (foreground color: #65726c, background color: #e1e2da, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#f9dad3",
                "bgColor": "#e56b4f",
                "contrastRatio": 2.44,
                "fontSize": "8.0pt (10.72px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"trend-sticker\"><span>Spring report</span><strong>Small, thoughtful making is having a moment.</strong></div>",
                  "target": [
                    ".trend-sticker"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.44 (foreground color: #f9dad3, background color: #e56b4f, font size: 8.0pt (10.72px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span>Spring report</span>",
          "target": [
            ".trend-sticker > span"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.44 (foreground color: #f9dad3, background color: #e56b4f, font size: 8.0pt (10.72px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#e56b4f",
                "contrastRatio": 3.2,
                "fontSize": "15.0pt (20px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"trend-sticker\"><span>Spring report</span><strong>Small, thoughtful making is having a moment.</strong></div>",
                  "target": [
                    ".trend-sticker"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.2 (foreground color: #ffffff, background color: #e56b4f, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<strong>Small, thoughtful making is having a moment.</strong>",
          "target": [
            ".trend-sticker > strong"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.2 (foreground color: #ffffff, background color: #e56b4f, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#c84f37",
                "bgColor": "#fffdfa",
                "contrastRatio": 4.46,
                "fontSize": "9.4pt (12.48px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section section-tint\" id=\"trends\">",
                  "target": [
                    "#trends"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.46 (foreground color: #c84f37, background color: #fffdfa, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"eyebrow\">Trend report</div>",
          "target": [
            ".trend-copy > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.46 (foreground color: #c84f37, background color: #fffdfa, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#e56b4f",
                "contrastRatio": 3.2,
                "fontSize": "11.0pt (14.72px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<a class=\"btn btn-primary\" href=\"#blog\">Read the full report <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"M5 12h14m-6-6 6 6-6 6\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></a>",
                  "target": [
                    ".btn-primary.btn[href$=\"#blog\"]"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.2 (foreground color: #ffffff, background color: #e56b4f, font size: 11.0pt (14.72px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<a class=\"btn btn-primary\" href=\"#blog\">Read the full report <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"><path d=\"M5 12h14m-6-6 6 6-6 6\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></a>",
          "target": [
            ".btn-primary.btn[href$=\"#blog\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.2 (foreground color: #ffffff, background color: #e56b4f, font size: 11.0pt (14.72px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#c84f37",
                "bgColor": "#e6f0f0",
                "contrastRatio": 3.9,
                "fontSize": "9.4pt (12.48px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section testimonial-section\" id=\"stories\">",
                  "target": [
                    "#stories"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.9 (foreground color: #c84f37, background color: #e6f0f0, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"eyebrow\">From the community</div>",
          "target": [
            "#stories > .container > .section-head.is-visible[data-reveal=\"\"] > div > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.9 (foreground color: #c84f37, background color: #e6f0f0, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#65726c",
                "bgColor": "#e6f0f0",
                "contrastRatio": 4.33,
                "fontSize": "12.2pt (16.32px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section testimonial-section\" id=\"stories\">",
                  "target": [
                    "#stories"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.33 (foreground color: #65726c, background color: #e6f0f0, font size: 12.2pt (16.32px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"section-intro\">Real makers, real unfinished corners, and the small victories that keep a hobby alive.</p>",
          "target": [
            "#stories > .container > .section-head.is-visible[data-reveal=\"\"] > div > .section-intro"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.33 (foreground color: #65726c, background color: #e6f0f0, font size: 12.2pt (16.32px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#65726c",
                "bgColor": "#e56b4f",
                "contrastRatio": 1.56,
                "fontSize": "8.6pt (11.52px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<span class=\"avatar coral\">JT</span>",
                  "target": [
                    ".coral"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 1.56 (foreground color: #65726c, background color: #e56b4f, font size: 8.6pt (11.52px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span class=\"avatar coral\">JT</span>",
          "target": [
            ".coral"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 1.56 (foreground color: #65726c, background color: #e56b4f, font size: 8.6pt (11.52px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#65726c",
                "bgColor": "#163f35",
                "contrastRatio": 2.32,
                "fontSize": "8.6pt (11.52px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<span class=\"avatar\">RS</span>",
                  "target": [
                    ".testimonial-card:nth-child(3) > .testimonial-person > .avatar"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.32 (foreground color: #65726c, background color: #163f35, font size: 8.6pt (11.52px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span class=\"avatar\">RS</span>",
          "target": [
            ".testimonial-card:nth-child(3) > .testimonial-person > .avatar"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.32 (foreground color: #65726c, background color: #163f35, font size: 8.6pt (11.52px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#c84f37",
                "bgColor": "#f7f4ec",
                "contrastRatio": 4.12,
                "fontSize": "9.4pt (12.48px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body id=\"top\">",
                  "target": [
                    "#top"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.12 (foreground color: #c84f37, background color: #f7f4ec, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"eyebrow\">Before you begin</div>",
          "target": [
            ".faq-intro > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.12 (foreground color: #c84f37, background color: #f7f4ec, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#fae1dc",
                "bgColor": "#e56b4f",
                "contrastRatio": 2.57,
                "fontSize": "9.4pt (12.48px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"newsletter-box is-visible\" data-reveal=\"\">",
                  "target": [
                    ".newsletter-box"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.57 (foreground color: #fae1dc, background color: #e56b4f, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"eyebrow\">The Sunday Sketchbook</div>",
          "target": [
            ".newsletter-copy > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.57 (foreground color: #fae1dc, background color: #e56b4f, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#f9ded8",
                "bgColor": "#e56b4f",
                "contrastRatio": 2.51,
                "fontSize": "12.0pt (16px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"newsletter-box is-visible\" data-reveal=\"\">",
                  "target": [
                    ".newsletter-box"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.51 (foreground color: #f9ded8, background color: #e56b4f, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p>Join 18,000+ makers for a short newsletter with one project, one technique, one local group, and one small prompt for the week ahead.</p>",
          "target": [
            ".newsletter-copy > p"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.51 (foreground color: #f9ded8, background color: #e56b4f, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
        }
      ]
    }
  ],
  "coverage": {
    "contract": "main-document-vertical-scroll",
    "complete": true,
    "positions": [
      {
        "y": 0,
        "height": 8787
      },
      {
        "y": 576,
        "height": 8787
      },
      {
        "y": 1152,
        "height": 8787
      },
      {
        "y": 1728,
        "height": 8787
      },
      {
        "y": 2304,
        "height": 8787
      },
      {
        "y": 2880,
        "height": 8787
      },
      {
        "y": 3456,
        "height": 8787
      },
      {
        "y": 4032,
        "height": 8787
      },
      {
        "y": 4608,
        "height": 8787
      },
      {
        "y": 5184,
        "height": 8787
      },
      {
        "y": 5760,
        "height": 8787
      },
      {
        "y": 6336,
        "height": 8787
      },
      {
        "y": 6912,
        "height": 8787
      },
      {
        "y": 7488,
        "height": 8787
      },
      {
        "y": 8064,
        "height": 8787
      },
      {
        "y": 8067,
        "height": 8787
      }
    ],
    "scans": 17,
    "max_states": 512,
    "settle_ms": 5000,
    "page_timeout_seconds": 150,
    "layout_stability": "consecutive 100ms size samples within one CSS pixel",
    "animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
    "interactive_states": "not exercised",
    "horizontal_scroll": "not exercised"
  }
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Hobbies and Interests" sector.
Your goal is to generate the full HTML code for a page that is not just functional but also visually compelling, content-rich, and feels like a finished product ready for launch.

**Client & Category:**
- Industry: "Hobbies and Interests"
- Description: Hobbies, crafts, DIY projects, collecting, and special interest communities.

**Your Creative Task:**
1.  **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Hobbies and Interests" category.
2.  **Define Page:** Determine the most effective primary page type (e.g., homepage, service landing page, category portal) to showcase this fictional entity.
3.  **Design:** Develop an opinionated, modern, and professional layout. Make distinct choices about structure and flow.

**Content & Structure Requirements (Deliver a COMPLETE page):**
-   **Overall:** The final page must feel substantial and complete, with realistic amounts of text (multiple paragraphs per section where appropriate, avoid single sentences), well-integrated placeholder images, and logical flow. It should look like a real website a business would proudly use.
-   **HEADER:** Include the invented site name, tagline, a logo placeholder image, and a primary navigation bar. Ensure the navigation has **at least 5-7 clearly defined, relevant links** including: "Resources", "Craft Tutorials", "Blog".
-   **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
    -   Address key topics relevant to the "Hobbies and Interests" category. Consider themes similar to: "Beginner Guides", "Local Clubs", "Trend Reports".
    -   **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "tool maintenance", "finishing methods", "pattern design".
    -   **Visuals:** Integrate relevant placeholder images logically within the content sections.
    -   **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Share Project", "Watch Video", "Find Group".
-   **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Hobbies and Interests" sector. Ideas similar but not limited to: "project inspiration board".
-   **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "craft trends", "popular projects", "community picks".
-   **FOOTER:** Include a professional footer with invented contact details, copyright (current year), social media links, and standard links (Privacy, Terms).
-   **MODERN WEB PATTERNS:** Include modern web patterns like testimonial cards, feature grids, or FAQ accordions where appropriate.