OpenAI GPT 6.1 Terra Pro – Society

via OpenAI · Generated

  • AIMAC Debt 3.05
  • Cost $0.12
  • Total Violations 3
  • HTML Size 33 KB
  • Em Dashes 3

Screenshot

View OpenAI GPT 6.1 Terra Pro Society page View Live Page

Accessibility Issues Found

3 Serious

  • color-contrast serious 3 instances

    Elements must meet minimum color contrast ratio thresholds

    Example HTML <span>01 / PEOPLE</span>

Artifacts

View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Common Thread is a community-powered organization helping neighbors turn shared concerns into collective action.">
  <meta name="theme-color" content="#183c32">
  <title>Common Thread | Stronger communities, together</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&family=DM+Serif+Display:ital@0;1&display=swap" rel="stylesheet">
  <style>
    :root {
      --forest: #183c32;
      --forest-dark: #102b24;
      --mint: #dce9d9;
      --cream: #f8f6ef;
      --paper: #fffef9;
      --orange: #e8754f;
      --ink: #202b25;
      --muted: #5e6b62;
      --line: #dce1d7;
      --serif: "DM Serif Display", Georgia, serif;
      --sans: "DM Sans", Arial, sans-serif;
      --radius: 4px;
    }
    * { box-sizing: border-box; }
    html { scroll-behavior: smooth; }
    body { margin: 0; color: var(--ink); background: var(--cream); font-family: var(--sans); font-size: 16px; line-height: 1.65; }
    img { display: block; max-width: 100%; }
    a { color: inherit; }
    button, select { font: inherit; }
    button, a, select { -webkit-tap-highlight-color: transparent; }
    a:focus-visible, button:focus-visible, select:focus-visible, summary:focus-visible { outline: 3px solid #ed9a6e; outline-offset: 4px; }
    .container { width: min(1200px, calc(100% - 48px)); margin: 0 auto; }
    .skip-link { position: absolute; top: -100px; left: 16px; z-index: 20; padding: 10px 16px; background: white; color: var(--forest); }
    .skip-link:focus { top: 10px; }
    .announcement { background: var(--forest-dark); color: #eaf1e8; text-align: center; padding: 9px 20px; font-size: 12px; letter-spacing: .035em; }
    .announcement a { color: white; font-weight: 700; text-underline-offset: 3px; margin-left: 8px; }
    .site-header { background: var(--paper); border-bottom: 1px solid var(--line); position: relative; z-index: 5; }
    .header-inner { display: flex; align-items: center; justify-content: space-between; gap: 28px; min-height: 92px; }
    .brand { display: inline-flex; align-items: center; gap: 11px; text-decoration: none; flex-shrink: 0; }
    .brand img { width: 43px; height: 43px; border-radius: 50%; }
    .brand-name { display: block; color: var(--forest); font-family: var(--serif); font-size: 25px; line-height: 1; letter-spacing: -.03em; }
    .brand-tagline { display: block; margin-top: 5px; color: var(--muted); font-size: 9px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
    .nav { display: flex; align-items: center; gap: 25px; }
    .nav a { text-decoration: none; font-size: 13px; font-weight: 700; white-space: nowrap; }
    .nav a:not(.nav-join):hover { color: #b14d30; }
    .nav .nav-join { background: var(--forest); color: white; padding: 11px 19px; border-radius: var(--radius); }
    .nav .nav-join:hover, .button-dark:hover { background: #285647; }
    .menu-toggle { display: none; border: 1px solid var(--line); background: transparent; color: var(--forest); border-radius: var(--radius); padding: 8px 12px; font-weight: 700; cursor: pointer; }
    .hero { background: var(--mint); overflow: hidden; }
    .hero-grid { display: grid; grid-template-columns: 1fr 1fr; min-height: 590px; }
    .hero-copy { padding: 92px 70px 80px max(24px, calc((100vw - 1200px) / 2)); display: flex; flex-direction: column; justify-content: center; align-items: flex-start; }
    .eyebrow { margin: 0 0 18px; color: #a14c31; font-size: 11px; font-weight: 700; letter-spacing: .15em; text-transform: uppercase; }
    .eyebrow.light { color: #b9d5bc; }
    h1, h2, h3, p { margin-top: 0; }
    h1, h2, h3 { font-family: var(--serif); font-weight: 400; line-height: 1.08; letter-spacing: -.025em; }
    h1 { font-size: clamp(52px, 5.6vw, 82px); margin-bottom: 24px; max-width: 630px; }
    h1 em, h2 em { font-weight: 400; color: #a24c32; }
    .hero-copy > p:not(.eyebrow) { max-width: 480px; font-size: 17px; color: #455a4d; margin-bottom: 30px; }
    .button-row { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }
    .button { display: inline-flex; justify-content: center; align-items: center; gap: 18px; min-height: 50px; padding: 13px 20px; border: 1px solid transparent; border-radius: var(--radius); font-size: 13px; font-weight: 700; line-height: 1.2; text-decoration: none; transition: background .2s, color .2s; cursor: pointer; }
    .button-dark { background: var(--forest); color: white; }
    .button-light { background: var(--paper); color: var(--forest); }
    .button-light:hover { background: var(--mint); }
    .text-link { font-size: 13px; font-weight: 700; text-decoration: none; border-bottom: 1px solid currentColor; padding-bottom: 3px; }
    .text-link:hover { color: #a14c31; }
    .hero-image { position: relative; min-height: 440px; }
    .hero-image > img { width: 100%; height: 100%; position: absolute; inset: 0; object-fit: cover; }
    .hero-image::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 45%, rgba(11, 37, 28, .35)); }
    .hero-note { position: absolute; z-index: 1; left: 30px; bottom: 30px; max-width: 255px; background: var(--paper); padding: 17px 20px; color: var(--forest); font-size: 12px; line-height: 1.5; }
    .hero-note strong { display: block; font-family: var(--serif); font-size: 20px; font-weight: 400; }
    .belief-strip { background: var(--forest); color: white; }
    .belief-inner { display: grid; grid-template-columns: 1.3fr 1fr 1fr 1fr; align-items: center; gap: 30px; padding: 26px 0; }
    .belief-lead { font-family: var(--serif); font-size: 21px; line-height: 1.2; }
    .belief-item { border-left: 1px solid #698478; padding-left: 23px; font-size: 12px; color: #d5e5d8; line-height: 1.4; }
    .belief-item strong { display: block; color: white; font-size: 14px; margin-bottom: 3px; }
    section { scroll-margin-top: 24px; }
    .section { padding: 105px 0; }
    .section-heading { display: flex; align-items: end; justify-content: space-between; gap: 30px; margin-bottom: 42px; }
    .section-heading h2 { margin: 0; max-width: 660px; font-size: clamp(38px, 4.4vw, 58px); }
    .section-heading > p { max-width: 385px; color: var(--muted); margin: 0; font-size: 15px; }
    .intro-grid { display: grid; grid-template-columns: .85fr 1.15fr; gap: 100px; align-items: start; }
    .intro-grid h2 { font-size: clamp(40px, 4.4vw, 60px); margin-bottom: 22px; }
    .intro-grid .lead { font-size: 20px; line-height: 1.5; color: var(--forest); }
    .intro-body p { color: #536157; }
    .principles { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 34px; }
    .principle { border-top: 1px solid #bfcbbd; padding-top: 18px; }
    .principle span { color: #b05b3d; font-size: 11px; font-weight: 700; }
    .principle h3 { font-family: var(--sans); font-weight: 700; font-size: 15px; letter-spacing: 0; margin: 9px 0 7px; }
    .principle p { font-size: 13px; margin: 0; }
    .issues { background: #edf1e9; }
    .issue-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
    .issue-card { background: var(--paper); display: flex; flex-direction: column; }
    .issue-card img { width: 100%; height: 220px; object-fit: cover; }
    .issue-body { padding: 26px; flex: 1; display: flex; flex-direction: column; align-items: flex-start; }
    .card-label { color: #a14c31; font-size: 10px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; margin-bottom: 12px; }
    .issue-body h3 { font-size: 29px; margin-bottom: 13px; }
    .issue-body p { color: var(--muted); font-size: 14px; margin-bottom: 25px; }
    .issue-body .text-link { margin-top: auto; }
    .story-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0; background: #e6ebe1; }
    .story-image { min-height: 540px; position: relative; }
    .story-image img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
    .story-copy { padding: clamp(35px, 5vw, 72px); display: flex; flex-direction: column; align-items: flex-start; justify-content: center; }
    .story-copy h2 { font-size: clamp(38px, 4vw, 55px); margin-bottom: 22px; }
    .story-copy p { color: #536157; font-size: 15px; }
    blockquote { margin: 20px 0 26px; padding-left: 20px; border-left: 3px solid var(--orange); font-family: var(--serif); font-size: 22px; line-height: 1.35; color: var(--forest); }
    blockquote cite { display: block; margin-top: 12px; font: 700 11px var(--sans); letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
    .resources { background: var(--forest); color: white; }
    .resources .section-heading > p { color: #c3d5c7; }
    .resource-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
    .resource-card { padding: 28px; border: 1px solid #688477; min-height: 250px; display: flex; flex-direction: column; align-items: flex-start; }
    .resource-number { color: #b7d0b9; font-size: 11px; font-weight: 700; letter-spacing: .12em; }
    .resource-card h3 { font-size: 25px; margin: 28px 0 12px; }
    .resource-card p { color: #ceddd1; font-size: 14px; margin-bottom: 24px; }
    .resource-card .text-link { margin-top: auto; color: white; }
    .action-grid { display: grid; grid-template-columns: .9fr 1.1fr; gap: 85px; align-items: start; }
    .action-grid h2 { font-size: clamp(40px, 4.4vw, 60px); margin-bottom: 20px; }
    .action-grid > div > p:not(.eyebrow) { color: var(--muted); }
    .planner { background: #e7eee3; padding: clamp(25px, 4vw, 45px); }
    .planner h3 { font-size: 27px; margin-bottom: 10px; }
    .planner > p { font-size: 14px; color: var(--muted); }
    .planner label { display: block; margin: 25px 0 8px; font-size: 12px; font-weight: 700; }
    .planner select { width: 100%; min-height: 48px; border: 1px solid #aebfb0; border-radius: 3px; background: var(--paper); color: var(--ink); padding: 10px 12px; }
    .planner-result { border-top: 1px solid #bdccbc; margin-top: 25px; padding-top: 22px; }
    .planner-result h4 { font-size: 13px; margin: 0 0 12px; }
    .planner-result ol { padding-left: 20px; margin: 0; color: #485a4c; font-size: 14px; }
    .planner-result li + li { margin-top: 8px; }
    .news { background: #f0e9dd; }
    .news-list { border-top: 1px solid #cfc9bc; }
    .news-item { display: grid; grid-template-columns: 155px 1fr auto; align-items: center; gap: 25px; padding: 26px 0; border-bottom: 1px solid #cfc9bc; }
    .news-meta { color: #9c5038; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
    .news-item h3 { font-size: 24px; margin: 0 0 6px; }
    .news-item p { margin: 0; font-size: 13px; color: var(--muted); }
    .news-item .text-link { white-space: nowrap; }
    .faq-grid { display: grid; grid-template-columns: .8fr 1.2fr; gap: 90px; }
    .faq-grid h2 { font-size: clamp(40px, 4vw, 55px); }
    details { border-top: 1px solid var(--line); }
    details:last-child { border-bottom: 1px solid var(--line); }
    summary { cursor: pointer; list-style: none; padding: 20px 30px 20px 0; position: relative; font-weight: 700; font-size: 15px; }
    summary::-webkit-details-marker { display: none; }
    summary::after { content: "+"; position: absolute; right: 4px; font-size: 22px; font-weight: 400; top: 14px; color: var(--forest); }
    details[open] summary::after { content: "−"; }
    details p { color: var(--muted); font-size: 14px; padding: 0 30px 20px 0; margin: 0; }
    .join-banner { background: var(--orange); color: var(--forest-dark); }
    .join-inner { padding: 65px 0; display: flex; justify-content: space-between; gap: 35px; align-items: center; }
    .join-inner h2 { font-size: clamp(38px, 4vw, 54px); margin: 0 0 10px; }
    .join-inner p { max-width: 620px; margin: 0; }
    footer { background: var(--forest-dark); color: #d4e1d5; }
    .footer-main { padding: 65px 0 55px; display: grid; grid-template-columns: 2fr 1fr 1fr 1.3fr; gap: 50px; }
    footer .brand-name { color: white; }
    footer .brand-tagline { color: #b5cbb9; }
    .footer-about p { max-width: 310px; font-size: 13px; color: #b5cbb9; margin: 22px 0 0; }
    .footer-col h3 { font: 700 11px var(--sans); letter-spacing: .12em; text-transform: uppercase; color: white; margin: 5px 0 20px; }
    .footer-col a, .footer-col p { display: block; font-size: 13px; margin: 0 0 10px; text-decoration: none; }
    .footer-col a:hover { text-decoration: underline; }
    .footer-bottom { border-top: 1px solid #466257; padding: 20px 0; display: flex; justify-content: space-between; gap: 20px; font-size: 11px; color: #b5cbb9; }
    .footer-bottom div { display: flex; gap: 20px; }
    .footer-bottom a { text-decoration: none; }
    @media (max-width: 1000px) {
      .nav { gap: 15px; }
      .nav a { font-size: 12px; }
      .hero-copy { padding-right: 40px; }
      .intro-grid, .action-grid, .faq-grid { gap: 45px; }
      .footer-main { gap: 30px; }
    }
    @media (max-width: 800px) {
      .header-inner { min-height: 75px; flex-wrap: wrap; }
      .menu-toggle { display: block; }
      .nav { display: none; flex-basis: 100%; flex-direction: column; align-items: stretch; gap: 0; padding: 0 0 18px; }
      .nav.is-open { display: flex; }
      .nav a { padding: 10px 0; font-size: 14px; }
      .nav .nav-join { margin-top: 8px; text-align: center; }
      .hero-grid { grid-template-columns: 1fr; }
      .hero-copy { padding: 70px 24px; }
      .hero-image { min-height: 430px; }
      .belief-inner { grid-template-columns: 1fr 1fr; }
      .belief-item:nth-child(2) { border-left: 1px solid #698478; }
      .section { padding: 75px 0; }
      .intro-grid, .action-grid, .faq-grid { grid-template-columns: 1fr; gap: 35px; }
      .issue-grid, .resource-grid { grid-template-columns: 1fr 1fr; }
      .story-grid { grid-template-columns: 1fr; }
      .story-image { min-height: 420px; }
      .footer-main { grid-template-columns: 1fr 1fr; }
    }
    @media (max-width: 560px) {
      .container { width: min(100% - 36px, 1200px); }
      .announcement { font-size: 11px; }
      h1 { font-size: 50px; }
      .hero-copy { padding: 62px 18px; }
      .hero-image { min-height: 340px; }
      .hero-note { left: 18px; bottom: 18px; }
      .belief-inner { gap: 20px; }
      .belief-lead { font-size: 19px; }
      .belief-item { padding-left: 14px; }
      .section-heading { align-items: start; flex-direction: column; gap: 15px; }
      .issue-grid, .resource-grid { grid-template-columns: 1fr; }
      .issue-card img { height: 220px; }
      .story-image { min-height: 320px; }
      .story-copy { padding: 35px 25px; }
      .news-item { grid-template-columns: 1fr; gap: 10px; }
      .news-item .text-link { justify-self: start; }
      .join-inner { align-items: flex-start; flex-direction: column; }
      .footer-main { grid-template-columns: 1fr 1fr; gap: 35px 20px; }
      .footer-about { grid-column: 1 / -1; }
      .footer-bottom { flex-direction: column; }
    }
    @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } * { transition: none !important; } }
  </style>
</head>
<body>
  <a class="skip-link" href="#main">Skip to content</a>
  <div class="announcement">Good things happen when neighbors work together. <a href="#action">Find your next step &rarr;</a></div>

  <header class="site-header">
    <div class="container header-inner">
      <a class="brand" href="#top" aria-label="Common Thread home">
        <img src="https://placehold.co/86x86/183c32/ffffff?text=CT&font=playfair%20display" alt="">
        <span><span class="brand-name">Common Thread</span><span class="brand-tagline">Stronger communities, together</span></span>
      </a>
      <button class="menu-toggle" type="button" aria-expanded="false" aria-controls="primary-nav">Menu <span aria-hidden="true">☰</span></button>
      <nav class="nav" id="primary-nav" aria-label="Primary navigation">
        <a href="#about">About</a>
        <a href="#issues">Our Issues</a>
        <a href="#stories">Stories</a>
        <a href="#resources">Resources</a>
        <a href="#news">News</a>
        <a href="#action">Take Action</a>
        <a class="nav-join" href="#join">Join Us &rarr;</a>
      </nav>
    </div>
  </header>

  <main id="main">
    <section class="hero" id="top" aria-labelledby="hero-title">
      <div class="hero-grid">
        <div class="hero-copy">
          <p class="eyebrow">A little more connected. A lot more possible.</p>
          <h1 id="hero-title">The future is a <em>shared</em> project.</h1>
          <p>Every community has the people and ideas to make change. We help bring them together, turning everyday concerns into meaningful collective action.</p>
          <div class="button-row">
            <a class="button button-dark" href="#action">Find your next step <span aria-hidden="true">&rarr;</span></a>
            <a class="text-link" href="#about">Get to know us &darr;</a>
          </div>
        </div>
        <div class="hero-image">
          <img src="https://picsum.photos/seed/commonthreadcommunity/1100/1000" alt="A view of the places and communities that bring us together">
          <div class="hero-note"><strong>Change starts close to home.</strong>And grows when we make room for everyone.</div>
        </div>
      </div>
    </section>

    <div class="belief-strip" aria-label="Our approach">
      <div class="container belief-inner">
        <div class="belief-lead">Small actions.<br>Shared possibility.</div>
        <div class="belief-item"><strong>Listen first</strong>Start with lived experience.</div>
        <div class="belief-item"><strong>Organize together</strong>Build power from the ground up.</div>
        <div class="belief-item"><strong>Make change last</strong>Turn shared ideas into action.</div>
      </div>
    </div>

    <section class="section" id="about">
      <div class="container intro-grid">
        <div>
          <p class="eyebrow">Our purpose</p>
          <h2>We belong to each other.</h2>
          <p class="lead">A more equitable society isn't built by any one person. It's built by neighbors, together.</p>
        </div>
        <div class="intro-body">
          <p>Common Thread is a community-powered organization supporting people who want to make their neighborhoods more welcoming, fair, and resilient. We connect local voices with practical tools, trusted information, and opportunities to act.</p>
          <p>Our approach is rooted in community organizing: listening to the people closest to an issue, developing local leadership, and building the relationships that make lasting change possible. Whether you're showing up for the first time or have been organizing for years, there's a place for you here.</p>
          <div class="principles">
            <div class="principle"><span>01 / PEOPLE</span><h3>Community-led</h3><p>Local priorities guide the work, not the other way around.</p></div>
            <div class="principle"><span>02 / PRACTICE</span><h3>Built for belonging</h3><p>Different experiences make our collective response stronger.</p></div>
          </div>
        </div>
      </div>
    </section>

    <section class="section issues" id="issues">
      <div class="container">
        <div class="section-heading">
          <div><p class="eyebrow">The issues we work on</p><h2>What matters where we live.</h2></div>
          <p>Big challenges look different in every neighborhood. We focus on the foundations that help communities thrive.</p>
        </div>
        <div class="issue-grid">
          <article class="issue-card">
            <img src="https://picsum.photos/seed/threadhomes/700/440" alt="A neighborhood landscape" loading="lazy">
            <div class="issue-body"><span class="card-label">01 / Housing</span><h3>A place to call home</h3><p>Stable, affordable housing is essential to belonging. We help residents understand local housing decisions and organize for policies that keep communities together.</p><a class="text-link" href="#action">Take action on housing &rarr;</a></div>
          </article>
          <article class="issue-card">
            <img src="https://picsum.photos/seed/threadparks/700/440" alt="An outdoor community space" loading="lazy">
            <div class="issue-body"><span class="card-label">02 / Shared spaces</span><h3>Places for everyone</h3><p>Libraries, parks, and gathering spaces are where connection begins. We support grassroots efforts to make these places accessible, welcoming, and cared for.</p><a class="text-link" href="#action">Take action on shared spaces &rarr;</a></div>
          </article>
          <article class="issue-card">
            <img src="https://picsum.photos/seed/threadvoices/700/440" alt="A scene from community life" loading="lazy">
            <div class="issue-body"><span class="card-label">03 / Civic voice</span><h3>A say in what happens</h3><p>Decisions are better when more people can shape them. We make civic participation easier to navigate, especially for voices too often left out of the room.</p><a class="text-link" href="#action">Take action on civic voice &rarr;</a></div>
          </article>
        </div>
      </div>
    </section>

    <section class="section" id="stories">
      <div class="container">
        <div class="section-heading">
          <div><p class="eyebrow">Stories of possibility</p><h2>Change has a human face.</h2></div>
          <p>Behind every local effort are people choosing to show up for one another. Here's what that can look like.</p>
        </div>
        <article class="story-grid">
          <div class="story-image"><img src="https://picsum.photos/seed/threadgarden/900/900" alt="A green outdoor space" loading="lazy"></div>
          <div class="story-copy">
            <p class="eyebrow">Community spotlight / Shared spaces</p>
            <h2>From an empty lot to common ground.</h2>
            <p>When neighbors noticed an underused lot on their block, they started with a simple question: what could this place become? Conversations at kitchen tables and bus stops grew into a plan for a welcoming neighborhood garden.</p>
            <p>Residents worked together to map priorities, speak with local officials, and invite more neighbors into the process. Their story is a reminder that community organizing begins with listening—and that a small idea can create room for many more.</p>
            <blockquote>“We didn't need to have all the answers. We just needed to start the conversation.”<cite>— A neighborhood organizer</cite></blockquote>
            <a class="text-link" href="#resources">Explore tools for your community &rarr;</a>
          </div>
        </article>
      </div>
    </section>

    <section class="section resources" id="resources">
      <div class="container">
        <div class="section-heading">
          <div><p class="eyebrow light">The resource center</p><h2>Good ideas deserve<br>good tools.</h2></div>
          <p>New to organizing? Start here. These practical guides can help you move from a conversation to a shared plan.</p>
        </div>
        <div class="resource-grid">
          <article class="resource-card"><span class="resource-number">GUIDE / 01</span><h3>Host a listening circle</h3><p>Bring neighbors together, make space for different perspectives, and identify the concerns you share.</p><a class="text-link" href="mailto:hello@commonthread.community?subject=Request%3A%20Listening%20circle%20guide">Request the guide &rarr;</a></article>
          <article class="resource-card"><span class="resource-number">TOOLKIT / 02</span><h3>Map your community</h3><p>Identify local strengths, relationships, and decision-makers before choosing where to focus your energy.</p><a class="text-link" href="mailto:hello@commonthread.community?subject=Request%3A%20Community%20mapping%20toolkit">Request the toolkit &rarr;</a></article>
          <article class="resource-card"><span class="resource-number">CHECKLIST / 03</span><h3>Speak up at a meeting</h3><p>Prepare a clear public comment, find the right meeting, and make your voice part of the conversation.</p><a class="text-link" href="mailto:hello@commonthread.community?subject=Request%3A%20Public%20meeting%20checklist">Request the checklist &rarr;</a></article>
        </div>
      </div>
    </section>

    <section class="section" id="action">
      <div class="container action-grid">
        <div>
          <p class="eyebrow">Make your move</p>
          <h2>There is a place for you in this work.</h2>
          <p>Collective action doesn't have to start with a megaphone. It can begin with a question, a conversation, or an hour of your time. Choose an issue to get a simple, practical starting plan.</p>
          <p>Want a little guidance? Our community team is here to help you think through your next step and connect your efforts to the people around you.</p>
          <a class="button button-dark" href="mailto:hello@commonthread.community?subject=I'd%20like%20to%20take%20action">Contact our team <span aria-hidden="true">&rarr;</span></a>
        </div>
        <div class="planner">
          <h3>Your first-step planner</h3>
          <p>Choose the issue closest to your heart for a few ways to get started. No sign-up required.</p>
          <label for="issue-select">What would you like to work on?</label>
          <select id="issue-select">
            <option value="housing">Housing and belonging</option>
            <option value="spaces">Welcoming shared spaces</option>
            <option value="voice">Civic voice and participation</option>
          </select>
          <div class="planner-result" aria-live="polite">
            <h4 id="plan-title">Your housing action plan</h4>
            <ol id="plan-steps">
              <li>Ask neighbors what housing challenges they are experiencing.</li>
              <li>Find the next local housing or planning meeting and review its agenda.</li>
              <li>Invite someone to attend with you or share a public comment.</li>
            </ol>
          </div>
        </div>
      </div>
    </section>

    <section class="section news" id="news">
      <div class="container">
        <div class="section-heading">
          <div><p class="eyebrow">From the common room</p><h2>News &amp; notes.</h2></div>
          <p>Ideas, updates, and useful perspectives for people building stronger communities.</p>
        </div>
        <div class="news-list">
          <article class="news-item"><div class="news-meta">Field notes<br>Community organizing</div><div><h3>Why listening is the first act of leadership</h3><p>How to make space for the people most affected by a local issue.</p></div><a class="text-link" href="#resources">Explore resources &rarr;</a></article>
          <article class="news-item"><div class="news-meta">In practice<br>Civic participation</div><div><h3>Making the most of your next public meeting</h3><p>A few ways to show up informed, prepared, and ready to contribute.</p></div><a class="text-link" href="mailto:hello@commonthread.community?subject=Request%3A%20Public%20meeting%20checklist">Request checklist &rarr;</a></article>
          <article class="news-item"><div class="news-meta">Community spotlight<br>Shared spaces</div><div><h3>What an empty lot can teach us about belonging</h3><p>One neighborhood's first steps toward a more connected block.</p></div><a class="text-link" href="#stories">Read the story &rarr;</a></article>
        </div>
      </div>
    </section>

    <section class="section" aria-labelledby="faq-title">
      <div class="container faq-grid">
        <div><p class="eyebrow">Good to know</p><h2 id="faq-title">Questions? We're glad you asked.</h2><p>Still curious? <a href="mailto:hello@commonthread.community">Get in touch with our team.</a></p></div>
        <div>
          <details><summary>Who can get involved with Common Thread?</summary><p>Anyone who cares about a more connected, equitable community is welcome. You don't need organizing experience or a formal role—just a willingness to listen, learn, and work alongside others.</p></details>
          <details><summary>What does getting involved look like?</summary><p>Start in a way that works for you: use the action planner, request a resource, attend a local public meeting, or reach out to our team. Some people contribute a few hours; others help bring an ongoing group together.</p></details>
          <details><summary>Are the resources free to request?</summary><p>Yes. Our organizing guides, toolkits, and checklists are available at no cost. Send us a request using the links above and let us know if you need the material in an accessible format.</p></details>
          <details><summary>Can my organization partner with you?</summary><p>We welcome conversations with neighborhood groups, cultural organizations, and other community-serving partners. Email us with a little about your work and what you hope to build together.</p></details>
        </div>
      </div>
    </section>

    <section class="join-banner" id="join">
      <div class="container join-inner">
        <div><p class="eyebrow" style="color:#663a2b">There's room for you here</p><h2>Let's make good things happen.</h2><p>Join a community of people who believe that a better future starts with showing up for each other.</p></div>
        <a class="button button-dark" href="mailto:hello@commonthread.community?subject=Join%20Common%20Thread&body=Hello%2C%20I%27d%20like%20to%20learn%20more%20about%20getting%20involved.">Join the community <span aria-hidden="true">&rarr;</span></a>
      </div>
    </section>
  </main>

  <footer>
    <div class="container footer-main">
      <div class="footer-about">
        <a class="brand" href="#top"><img src="https://placehold.co/86x86/dce9d9/183c32?text=CT&font=playfair%20display" alt=""><span><span class="brand-name">Common Thread</span><span class="brand-tagline">Stronger communities, together</span></span></a>
        <p>We believe in the power of people, place, and the ties that bring us together. Let's build a more equitable future, one connection at a time.</p>
      </div>
      <div class="footer-col"><h3>Explore</h3><a href="#about">About us</a><a href="#issues">Our issues</a><a href="#stories">Stories</a><a href="#news">News</a></div>
      <div class="footer-col"><h3>Get involved</h3><a href="#action">Take action</a><a href="#resources">Resource center</a><a href="#join">Join us</a><a href="mailto:hello@commonthread.community?subject=Partnership%20inquiry">Partner with us</a></div>
      <div class="footer-col"><h3>Say hello</h3><a href="mailto:hello@commonthread.community">hello@commonthread.community</a><p>125 Common Way, Suite 200<br>Portland, OR 97205</p><p><a href="tel:+15035550148">(503) 555-0148</a></p><a href="https://www.instagram.com/">Instagram &nearr;</a><a href="https://www.linkedin.com/">LinkedIn &nearr;</a></div>
    </div>
    <div class="container footer-bottom"><span>&copy; 2026 Common Thread. All rights reserved.</span><div><a href="mailto:hello@commonthread.community?subject=Privacy%20inquiry">Privacy</a><a href="mailto:hello@commonthread.community?subject=Terms%20inquiry">Terms</a><a href="#top">Back to top &uarr;</a></div></div>
  </footer>

  <script>
    const menuButton = document.querySelector('.menu-toggle');
    const navigation = document.querySelector('#primary-nav');
    menuButton.addEventListener('click', () => {
      const isOpen = menuButton.getAttribute('aria-expanded') === 'true';
      menuButton.setAttribute('aria-expanded', String(!isOpen));
      navigation.classList.toggle('is-open', !isOpen);
    });
    navigation.addEventListener('click', event => {
      if (event.target.closest('a')) {
        menuButton.setAttribute('aria-expanded', 'false');
        navigation.classList.remove('is-open');
      }
    });

    const plans = {
      housing: {
        title: 'Your housing action plan',
        steps: [
          'Ask neighbors what housing challenges they are experiencing.',
          'Find the next local housing or planning meeting and review its agenda.',
          'Invite someone to attend with you or share a public comment.'
        ]
      },
      spaces: {
        title: 'Your shared spaces action plan',
        steps: [
          'Talk with neighbors about a public space they value or want to improve.',
          'Identify who manages the space and learn about existing local efforts.',
          'Bring a small group together to agree on one achievable first step.'
        ]
      },
      voice: {
        title: 'Your civic voice action plan',
        steps: [
          'Find out which local body makes decisions about an issue you care about.',
          'Look up its next public meeting and how residents can participate.',
          'Invite a neighbor along and prepare a short question or comment.'
        ]
      }
    };
    const issueSelect = document.querySelector('#issue-select');
    const planTitle = document.querySelector('#plan-title');
    const planSteps = document.querySelector('#plan-steps');
    issueSelect.addEventListener('change', () => {
      const plan = plans[issueSelect.value];
      planTitle.textContent = plan.title;
      planSteps.replaceChildren(...plan.steps.map(step => {
        const item = document.createElement('li');
        item.textContent = step;
        return item;
      }));
    });
  </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-12T10:17:26.391Z",
  "url": "https://benchmark.aimac.invalid/0916c558fb9565f53af50a4d947614cb2a76e4a40b0e5d9e4f2204ac5b9a924d.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-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": []
    },
    {
      "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-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": []
    },
    {
      "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-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": []
    },
    {
      "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": "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": []
    },
    {
      "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": "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": []
    },
    {
      "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": "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": []
    },
    {
      "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": "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": "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=\"Common Thread home\">",
          "target": [
            "a[aria-label=\"Common Thread home\"]"
          ]
        }
      ]
    },
    {
      "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=\"Common Thread home\">",
          "target": [
            "a[aria-label=\"Common Thread home\"]"
          ]
        }
      ]
    },
    {
      "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>",
          "target": [
            "body"
          ]
        }
      ]
    },
    {
      "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": "<span aria-hidden=\"true\">\u2630</span>",
          "target": [
            "button > span[aria-hidden=\"true\"]"
          ]
        }
      ]
    },
    {
      "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=\"Common Thread home\">",
          "target": [
            "a[aria-label=\"Common Thread home\"]"
          ]
        }
      ]
    },
    {
      "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=\"Common Thread home\">",
          "target": [
            "a[aria-label=\"Common Thread home\"]"
          ]
        }
      ]
    },
    {
      "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=\"Common Thread home\">",
          "target": [
            "a[aria-label=\"Common Thread home\"]"
          ]
        }
      ]
    },
    {
      "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": [
        {
          "any": [],
          "all": [
            {
              "id": "important-letter-spacing",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Letter-spacing in the style attribute is not set to !important, or meets the minimum"
            },
            {
              "id": "important-word-spacing",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "word-spacing in the style attribute is not set to !important, or meets the minimum"
            },
            {
              "id": "important-line-height",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "line-height in the style attribute is not set to !important, or meets the minimum"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<p class=\"eyebrow\" style=\"color:#663a2b\">There's room for you here</p>",
          "target": [
            ".join-inner > div > .eyebrow"
          ]
        }
      ]
    },
    {
      "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 id=\"hero-title\">The future is a <em>shared</em> project.</h1>",
                  "target": [
                    "#hero-title"
                  ]
                },
                {
                  "html": "<h2>We belong to each other.</h2>",
                  "target": [
                    ".intro-grid > div:nth-child(1) > h2"
                  ]
                },
                {
                  "html": "<h3>Community-led</h3>",
                  "target": [
                    ".principle:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Built for belonging</h3>",
                  "target": [
                    ".principle:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h2>What matters where we live.</h2>",
                  "target": [
                    "#issues > .container > .section-heading > div > h2"
                  ]
                },
                {
                  "html": "<h3>A place to call home</h3>",
                  "target": [
                    ".issue-card:nth-child(1) > .issue-body > h3"
                  ]
                },
                {
                  "html": "<h3>Places for everyone</h3>",
                  "target": [
                    ".issue-card:nth-child(2) > .issue-body > h3"
                  ]
                },
                {
                  "html": "<h3>A say in what happens</h3>",
                  "target": [
                    ".issue-card:nth-child(3) > .issue-body > h3"
                  ]
                },
                {
                  "html": "<h2>Change has a human face.</h2>",
                  "target": [
                    "#stories > .container > .section-heading > div > h2"
                  ]
                },
                {
                  "html": "<h2>From an empty lot to common ground.</h2>",
                  "target": [
                    ".story-copy > h2"
                  ]
                },
                {
                  "html": "<h2>Good ideas deserve<br>good tools.</h2>",
                  "target": [
                    "#resources > .container > .section-heading > div > h2"
                  ]
                },
                {
                  "html": "<h3>Host a listening circle</h3>",
                  "target": [
                    ".resource-card:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Map your community</h3>",
                  "target": [
                    ".resource-card:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Speak up at a meeting</h3>",
                  "target": [
                    ".resource-card:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h2>There is a place for you in this work.</h2>",
                  "target": [
                    ".action-grid > div:nth-child(1) > h2"
                  ]
                },
                {
                  "html": "<h3>Your first-step planner</h3>",
                  "target": [
                    ".planner > h3"
                  ]
                },
                {
                  "html": "<h4 id=\"plan-title\">Your housing action plan</h4>",
                  "target": [
                    "#plan-title"
                  ]
                },
                {
                  "html": "<h2>News &amp; notes.</h2>",
                  "target": [
                    "#news > .container > .section-heading > div > h2"
                  ]
                },
                {
                  "html": "<h3>Why listening is the first act of leadership</h3>",
                  "target": [
                    ".news-item:nth-child(1) > div:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Making the most of your next public meeting</h3>",
                  "target": [
                    ".news-item:nth-child(2) > div:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>What an empty lot can teach us about belonging</h3>",
                  "target": [
                    ".news-item:nth-child(3) > div:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h2 id=\"faq-title\">Questions? We're glad you asked.</h2>",
                  "target": [
                    "#faq-title"
                  ]
                },
                {
                  "html": "<h2>Let's make good things happen.</h2>",
                  "target": [
                    ".join-inner > div > h2"
                  ]
                },
                {
                  "html": "<h3>Explore</h3>",
                  "target": [
                    ".footer-col:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Get involved</h3>",
                  "target": [
                    ".footer-col:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Say hello</h3>",
                  "target": [
                    ".footer-col: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\">",
          "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": "#eaf1e8",
                "bgColor": "#102b24",
                "contrastRatio": 13.09,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has sufficient color contrast of 13.09"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<div class=\"announcement\">Good things happen when neighbors work together. <a href=\"#action\">Find your next step \u2192</a></div>",
          "target": [
            ".announcement"
          ]
        }
      ]
    },
    {
      "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\">",
          "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": "primary-nav",
              "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=\"primary-nav\" aria-label=\"Primary navigation\">",
          "target": [
            "#primary-nav"
          ]
        }
      ]
    },
    {
      "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 for=\"issue-select\">What would you like to work on?</label>",
                  "target": [
                    "label"
                  ]
                }
              ],
              "impact": "moderate",
              "message": "Form field does not have multiple label elements"
            }
          ],
          "impact": null,
          "html": "<select id=\"issue-select\">\n            <option value=\"housing\">Housing and belonging</option>\n            <option value=\"spaces\">Welcoming shared spaces</option>\n            <option value=\"voice\">Civic voice and participation</option>\n          </select>",
          "target": [
            "#issue-select"
          ]
        }
      ]
    },
    {
      "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\">",
          "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\">",
          "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"
            },
            {
              "id": "presentational-role",
              "data": {
                "role": "presentation"
              },
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element's default semantics were overridden with role=\"presentation\""
            }
          ],
          "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/86x86/183c32/ffffff?text=CT&amp;font=playfair%20display\" alt=\"\">",
          "target": [
            "a[aria-label=\"Common Thread home\"] > img[alt=\"\"]"
          ]
        }
      ]
    },
    {
      "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=\"announcement\">Good things happen when neighbors work together. <a href=\"#action\">Find your next step \u2192</a></div>",
                  "target": [
                    ".announcement"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text by visual styling"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a href=\"#action\">Find your next step \u2192</a>",
          "target": [
            ".announcement > a[href$=\"#action\"]"
          ]
        }
      ]
    },
    {
      "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": [
            ".skip-link"
          ]
        }
      ]
    },
    {
      "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": "<ol id=\"plan-steps\">\n              <li>Ask neighbors what housing challenges they are experiencing.</li>\n              <li>Find the next local housing or planning meeting and review its agenda.</li>\n              <li>Invite someone to attend with you or share a public comment.</li>\n            </ol>",
          "target": [
            "#plan-steps"
          ]
        }
      ]
    },
    {
      "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>Ask neighbors what housing challenges they are experiencing.</li>",
          "target": [
            "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://picsum.photos/seed/commonthreadcommunity/1100/1000\" alt=\"A view of the places and communities that bring us together\">",
          "target": [
            ".hero-image > img"
          ]
        }
      ]
    },
    {
      "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": [
        {
          "any": [
            {
              "id": "explicit-label",
              "data": {
                "explicitLabel": "What would you like to work on?"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"issue-select\">What would you like to work on?</label>",
                  "target": [
                    "label"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an explicit <label>"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "hidden-explicit-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Form element has a visible explicit <label>"
            }
          ],
          "impact": null,
          "html": "<select id=\"issue-select\">\n            <option value=\"housing\">Housing and belonging</option>\n            <option value=\"spaces\">Welcoming shared spaces</option>\n            <option value=\"voice\">Civic voice and participation</option>\n          </select>",
          "target": [
            "#issue-select"
          ]
        }
      ]
    },
    {
      "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": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<summary>Who can get involved with Common Thread?</summary>",
          "target": [
            "details:nth-child(1) > summary"
          ]
        }
      ]
    },
    {
      "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": 145.7,
                "height": 46.4
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Control has sufficient size (145.7px 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": [
            ".skip-link"
          ]
        }
      ]
    }
  ],
  "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=\"belief-strip\" aria-label=\"Our approach\">",
          "target": [
            ".belief-strip"
          ],
          "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": {
                "messageKey": "nonBmp"
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element content contains only non-text characters"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span aria-hidden=\"true\">\u2192</span>",
          "target": [
            ".button.button-dark[href$=\"#action\"] > span[aria-hidden=\"true\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element content contains only non-text characters"
        }
      ]
    },
    {
      "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-about\">",
                  "target": [
                    ".footer-about"
                  ]
                }
              ],
              "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\"><img src=\"https://placehold.co/86x86/dce9d9/183c32?text=CT&amp;font=playfair%20display\" alt=\"\"><span><span class=\"brand-name\">Common Thread</span><span class=\"brand-tagline\">Stronger communities, together</span></span></a>",
          "target": [
            ".footer-about > .brand[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": "#b05b3d",
                "bgColor": "#f8f6ef",
                "contrastRatio": 4.4,
                "fontSize": "8.3pt (11px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body>",
                  "target": [
                    "body"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.4 (foreground color: #b05b3d, background color: #f8f6ef, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span>01 / PEOPLE</span>",
          "target": [
            ".principle:nth-child(1) > span"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.4 (foreground color: #b05b3d, background color: #f8f6ef, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#b05b3d",
                "bgColor": "#f8f6ef",
                "contrastRatio": 4.4,
                "fontSize": "8.3pt (11px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body>",
                  "target": [
                    "body"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.4 (foreground color: #b05b3d, background color: #f8f6ef, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span>02 / PRACTICE</span>",
          "target": [
            ".principle:nth-child(2) > span"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.4 (foreground color: #b05b3d, background color: #f8f6ef, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#663a2b",
                "bgColor": "#e8754f",
                "contrastRatio": 3.21,
                "fontSize": "8.3pt (11px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"join-banner\" id=\"join\">",
                  "target": [
                    "#join"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.21 (foreground color: #663a2b, background color: #e8754f, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"eyebrow\" style=\"color:#663a2b\">There's room for you here</p>",
          "target": [
            ".join-inner > div > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.21 (foreground color: #663a2b, background color: #e8754f, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
        }
      ]
    }
  ],
  "coverage": {
    "contract": "main-document-vertical-scroll",
    "complete": true,
    "positions": [
      {
        "y": 0,
        "height": 6454
      },
      {
        "y": 576,
        "height": 6454
      },
      {
        "y": 1152,
        "height": 6454
      },
      {
        "y": 1728,
        "height": 6454
      },
      {
        "y": 2304,
        "height": 6454
      },
      {
        "y": 2880,
        "height": 6454
      },
      {
        "y": 3456,
        "height": 6454
      },
      {
        "y": 4032,
        "height": 6454
      },
      {
        "y": 4608,
        "height": 6454
      },
      {
        "y": 5184,
        "height": 6454
      },
      {
        "y": 5734,
        "height": 6454
      }
    ],
    "scans": 12,
    "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 "Society" 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: "Society"
- Description: Social issues, advocacy, cultural organizations, and community initiatives.

**Your Creative Task:**
1.  **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Society" 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: "Join", "News", "Resources".
-   **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
    -   Address key topics relevant to the "Society" category. Consider themes similar to: "Resource Center", "Success Stories", "Current Issues".
    -   **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "community organizing", "grassroots", "collective action".
    -   **Visuals:** Integrate relevant placeholder images logically within the content sections.
    -   **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Take Action", "Learn More", "Contact Rep".
-   **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Society" sector. Ideas similar but not limited to: "impact calculator".
-   **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "movement updates", "event calendar", "action alerts".
-   **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.