SpaceXAI Grok 4.7 – Non Profit Charity

via xAI · Generated

  • AIMAC Debt 2.66
  • Cost $0.08
  • Total Violations 2
  • HTML Size 35 KB
  • Em Dashes 12

Screenshot

View SpaceXAI Grok 4.7 Non Profit Charity page View Live Page

Accessibility Issues Found

2 Serious

  • color-contrast serious 2 instances

    Elements must meet minimum color contrast ratio thresholds

    Example HTML <p class="eyebrow">Community Programs</p>

Artifacts

View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lumenfield Alliance | Lighting durable paths from giving to community strength</title>
<meta name="description" content="Lumenfield Alliance is a community foundation advancing food security, learning, housing navigation, and neighborhood stewardship through charitable giving, endowment, and volunteer partnership.">
<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=Fraunces:opsz,wght@9..144,520;9..144,640&family=Source+Sans+3:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet">
<style>
:root {
  --ink: #17241f;
  --forest: #1c3f32;
  --forest-deep: #122820;
  --sage: #3e6b56;
  --moss: #6d8f78;
  --cream: #f4efe6;
  --paper: #fbf8f3;
  --card: #ffffff;
  --gold: #b0893e;
  --gold-deep: #8c6a2c;
  --clay: #b5523a;
  --line: #e4dccf;
  --muted: #5c6b64;
  --shadow: 0 18px 40px rgba(23, 36, 31, 0.08);
  --radius: 18px;
  --max: 1140px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  color: var(--ink);
  background: var(--paper);
  font-family: "Source Sans 3", "Segoe UI", sans-serif;
  font-size: 1.05rem;
  line-height: 1.65;
}
img { max-width: 100%; display: block; }
a { color: var(--forest); }
h1, h2, h3, h4 { font-family: Fraunces, Georgia, serif; line-height: 1.15; font-weight: 640; letter-spacing: -0.02em; }
p { margin: 0 0 1rem; }
.skip {
  position: absolute; left: -999px; top: 0;
}
.skip:focus { left: 12px; top: 12px; background: #fff; padding: 8px 12px; z-index: 20; }
.wrap { width: min(var(--max), calc(100% - 2.4rem)); margin: 0 auto; }
.eyebrow {
  display: inline-block;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--gold-deep);
  margin-bottom: 0.6rem;
}
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.45rem;
  border: 0;
  cursor: pointer;
  text-decoration: none;
  font-weight: 700;
  border-radius: 999px;
  padding: 0.85rem 1.3rem;
  font-family: inherit;
  font-size: 0.98rem;
}
.btn-primary { background: var(--clay); color: #fff; }
.btn-primary:hover { background: #9a4330; }
.btn-dark { background: var(--forest); color: #f7f3ea; }
.btn-dark:hover { background: var(--forest-deep); }
.btn-ghost { background: transparent; color: var(--forest); border: 1.5px solid var(--forest); }
.btn-ghost:hover { background: var(--forest); color: #fff; }
.btn-light { background: #fff; color: var(--forest); }
header.site {
  position: sticky; top: 0; z-index: 30;
  background: rgba(251, 248, 243, 0.92);
  backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--line);
}
.header-inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; padding: 0.75rem 0;
}
.brand { display: flex; align-items: center; gap: 0.75rem; text-decoration: none; color: inherit; min-width: 220px; }
.brand img { width: 52px; height: 52px; border-radius: 12px; }
.brand strong { display: block; font-family: Fraunces, serif; font-size: 1.15rem; }
.brand span { display: block; color: var(--muted); font-size: 0.82rem; line-height: 1.3; max-width: 280px; }
nav.primary { display: flex; align-items: center; gap: 1.05rem; }
nav.primary a { text-decoration: none; color: var(--ink); font-weight: 600; font-size: 0.95rem; }
nav.primary a:hover { color: var(--clay); }
.nav-toggle {
  display: none;
  border: 1px solid var(--line);
  background: #fff;
  border-radius: 10px;
  padding: 0.45rem 0.65rem;
  font-weight: 700;
}
.hero {
  background:
    linear-gradient(115deg, rgba(18, 40, 32, 0.88) 0%, rgba(18, 40, 32, 0.55) 48%, rgba(18, 40, 32, 0.25) 100%),
    url("https://picsum.photos/id/1015/1600/900") center/cover no-repeat;
  color: #f7f3ea;
  min-height: 78vh;
  display: grid;
  align-items: end;
}
.hero-inner { padding: 5.5rem 0 4rem; max-width: 760px; }
.hero h1 { font-size: clamp(2.6rem, 5vw, 4.6rem); margin: 0 0 1rem; color: #fff; }
.hero p.lead { font-size: 1.2rem; max-width: 62ch; color: #f3eadc; }
.hero-actions { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-top: 1.4rem; }
.stat-row {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1px;
  background: var(--line);
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
.stat {
  background: var(--cream);
  padding: 1.3rem 1.1rem;
}
.stat strong { display: block; font-family: Fraunces, serif; font-size: 1.7rem; color: var(--forest); }
.stat span { color: var(--muted); font-size: 0.92rem; }
section { padding: 4.6rem 0; }
.section-head { max-width: 720px; margin-bottom: 2rem; }
.section-head h2 { font-size: clamp(2rem, 3vw, 2.8rem); margin: 0 0 0.8rem; }
.split { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 2.4rem; align-items: center; }
.photo-frame { border-radius: 22px; overflow: hidden; box-shadow: var(--shadow); position: relative; }
.photo-frame img { width: 100%; height: 100%; object-fit: cover; min-height: 360px; }
.caption {
  position: absolute; left: 14px; bottom: 14px;
  background: rgba(251, 248, 243, 0.94);
  padding: 0.55rem 0.75rem;
  border-radius: 10px;
  font-size: 0.85rem;
  max-width: 80%;
}
.program-grid, .card-grid, .partner-grid, .story-grid { display: grid; gap: 1.1rem; }
.program-grid { grid-template-columns: repeat(2, 1fr); }
.card, .program, .story, .partner, .faq, .calc, .aside-card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 1.3rem 1.3rem 1.2rem;
}
.program img, .story img { width: 100%; height: 190px; object-fit: cover; border-radius: 12px; margin-bottom: 0.9rem; }
.program h3, .story h3 { margin: 0.2rem 0 0.5rem; font-size: 1.45rem; }
.meta { color: var(--muted); font-size: 0.9rem; font-weight: 600; }
.pill-row { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0.6rem 0 0.8rem; }
.pill { background: #eef4ef; color: var(--forest); border-radius: 999px; padding: 0.2rem 0.65rem; font-size: 0.82rem; font-weight: 700; }
.layout-2 { display: grid; grid-template-columns: 1.7fr 0.85fr; gap: 1.3rem; align-items: start; }
.aside-card h3 { margin-top: 0; font-size: 1.25rem; }
.event { border-top: 1px solid var(--line); padding: 0.75rem 0; }
.event:first-of-type { border-top: 0; }
.event strong { display: block; }
label { display: block; font-weight: 700; font-size: 0.9rem; margin-bottom: 0.3rem; }
input, select, textarea {
  width: 100%;
  border: 1px solid #d7cec1;
  border-radius: 10px;
  padding: 0.7rem 0.75rem;
  font: inherit;
  background: #fff;
  margin-bottom: 0.75rem;
}
input:focus, select:focus, textarea:focus, button:focus, a:focus {
  outline: 3px solid #e2c27a;
  outline-offset: 2px;
}
.quote { font-family: Fraunces, serif; font-size: 1.25rem; line-height: 1.35; margin: 0 0 0.8rem; }
.person { display: flex; gap: 0.7rem; align-items: center; }
.person img { width: 48px; height: 48px; border-radius: 50%; }
.person small { color: var(--muted); display: block; }
.calc-wrap {
  background: var(--forest);
  color: #f6f1e7;
  border-radius: 28px;
  padding: 2rem;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.6rem;
}
.calc-wrap h2, .calc-wrap p { color: #f6f1e7; }
.calc-wrap .muted { color: #d7e4db; }
input[type="range"] { accent-color: #e2c27a; padding: 0; background: transparent; border: 0; }
.results { display: grid; grid-template-columns: 1fr 1fr; gap: 0.7rem; }
.result {
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: 14px;
  padding: 0.85rem;
}
.result b { display: block; font-family: Fraunces, serif; font-size: 1.6rem; }
.partner-grid { grid-template-columns: repeat(4, 1fr); }
.partner { text-align: center; }
.partner img { width: 88px; height: 88px; margin: 0 auto 0.7rem; border-radius: 16px; }
details.faq { padding: 0; overflow: hidden; }
details.faq summary {
  cursor: pointer;
  list-style: none;
  padding: 1rem 1.2rem;
  font-weight: 700;
}
details.faq summary::-webkit-details-marker { display: none; }
details.faq p { padding: 0 1.2rem 1rem; color: var(--muted); }
details.faq[open] { background: #fffdf9; }
.cta-band {
  background: linear-gradient(180deg, #efe6d6, #f7f1e6);
  border-radius: 28px;
  padding: 2.2rem;
  display: flex;
  justify-content: space-between;
  gap: 1.4rem;
  align-items: center;
}
footer {
  background: var(--forest-deep);
  color: #e7efe9;
  padding: 3rem 0 1.4rem;
  margin-top: 1rem;
}
footer a { color: #f3eadc; text-decoration: none; }
footer a:hover { text-decoration: underline; }
.foot-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 1.4rem; }
footer h3 { margin-top: 0; font-size: 1.15rem; color: #fff; }
.fine { border-top: 1px solid rgba(255,255,255,0.12); margin-top: 1.6rem; padding-top: 1rem; display: flex; justify-content: space-between; gap: 1rem; font-size: 0.9rem; color: #c9d6ce; }
.note { background: #eef6f0; border-radius: 10px; padding: 0.7rem 0.8rem; font-size: 0.92rem; }
@media (max-width: 900px) {
  .nav-toggle { display: inline-flex; }
  nav.primary {
    display: none;
    position: absolute;
    top: 78px; left: 0; right: 0;
    background: #fff;
    flex-direction: column;
    align-items: flex-start;
    padding: 1rem 1.2rem 1.2rem;
    border-bottom: 1px solid var(--line);
    gap: 0.7rem;
  }
  nav.primary.open { display: flex; }
  .stat-row, .split, .program-grid, .layout-2, .calc-wrap, .partner-grid, .foot-grid, .cta-band { grid-template-columns: 1fr; display: grid; }
  .stat-row { grid-template-columns: 1fr 1fr; }
  .fine { flex-direction: column; }
}
</style>
</head>
<body>
<a class="skip" href="#main">Skip to content</a>
<header class="site">
  <div class="wrap header-inner">
    <a class="brand" href="#top">
      <img src="https://placehold.co/104x104/1c3f32/f4efe6?text=LA&font=playfair display" alt="Lumenfield Alliance monogram">
      <div>
        <strong>Lumenfield Alliance</strong>
        <span>Lighting durable paths from giving to community strength.</span>
      </div>
    </a>
    <button class="nav-toggle" type="button" aria-expanded="false" aria-controls="site-nav">Menu</button>
    <nav class="primary" id="site-nav" aria-label="Primary">
      <a href="#mission">Our Mission</a>
      <a href="#programs">Programs</a>
      <a href="#volunteer">Volunteer</a>
      <a href="#impact">Impact</a>
      <a href="#partners">Partners</a>
      <a href="#stories">Stories</a>
      <a href="#donate">Donate</a>
    </nav>
  </div>
</header>
<main id="main">
  <section class="hero" id="top">
    <div class="wrap hero-inner">
      <p class="eyebrow" style="color:#e2c27a;">Community foundation · Port Meridian</p>
      <h1>Neighbors funding the long work of belonging.</h1>
      <p class="lead">Lumenfield Alliance stewards charitable giving, a growing endowment, and a volunteer network so families can count on food, learning, shelter navigation, and neighborhood care—not just in a crisis week, but across the seasons that follow.</p>
      <div class="hero-actions">
        <a class="btn btn-primary" href="#donate">Take Action</a>
        <a class="btn btn-light" href="#volunteer">Volunteer Today</a>
        <a class="btn btn-ghost" href="#programs" style="color:#fff;border-color:#fff;">Learn More</a>
      </div>
    </div>
  </section>
  <div class="stat-row">
    <div class="stat"><strong>48,200</strong><span>meals coordinated last year through Harbor Table partners</span></div>
    <div class="stat"><strong>1,940</strong><span>tutoring hours logged by trained community mentors</span></div>
    <div class="stat"><strong>$6.4M</strong><span>endowment held for multi-year community programs</span></div>
    <div class="stat"><strong>86</strong><span>neighborhood partners in active outreach agreements</span></div>
  </div>

  <section id="mission">
    <div class="wrap split">
      <div>
        <p class="eyebrow">Our Mission</p>
        <h2>Charitable giving should outlast the headline that inspired it.</h2>
        <p>Lumenfield Alliance was founded in 1998 by parish kitchens, a credit union, and a handful of social workers who were tired of restarting the same emergency drives every winter. We still move quickly when a family loses housing or a pantry shelf goes bare. We also refuse to treat urgency as a strategy.</p>
        <p>Our mission is to convert community generosity into durable capacity: paid coordination where volunteers used to burn out, flexible funds that front-line groups can actually spend, and an endowment that keeps community outreach funded when attention moves on. We publish where money goes, who decides, and what changed for the people closest to the need.</p>
        <p>We are a 501(c)(3) public charity. Grants, donor-advised gifts, and workplace campaigns are welcomed, and every unrestricted dollar is reviewed by a community allocations circle that includes residents with lived experience of the programs we fund.</p>
        <a class="btn btn-dark" href="#impact">See how gifts are used</a>
      </div>
      <div class="photo-frame">
        <img src="https://picsum.photos/id/1011/900/720" alt="Neighbors gathered around a long table during a community planning evening">
        <div class="caption">Allocations circle, spring review, Harbor Row meeting room.</div>
      </div>
    </div>
  </section>

  <section id="programs" style="background:#f7f2ea;">
    <div class="wrap">
      <div class="section-head">
        <p class="eyebrow">Community Programs</p>
        <h2>Four programs. One standard: useful, local, and accountable.</h2>
        <p>We do not scatter small checks across dozens of disconnected projects. Lumenfield concentrates charitable giving where Port Meridian’s own data—and our partners’ daily caseloads—show the tightest gaps. Each program has a coordinator, a resident advisory group, and a public impact note every quarter.</p>
      </div>
      <div class="program-grid">
        <article class="program">
          <img src="https://picsum.photos/id/292/800/500" alt="Fresh produce arranged for a neighborhood food share">
          <p class="meta">Food security</p>
          <h3>Harbor Table</h3>
          <p>Harbor Table is a shared purchasing and delivery desk for twelve pantries, two school weekend-bag programs, and a mobile market that stops at three senior buildings. We buy staples in bulk, cover cold-storage fees, and keep culturally familiar foods on the list instead of whatever happens to be donated that week.</p>
          <p>Last winter the program added a discreet grocery card for households who cannot travel to a distribution site. Cards are issued by partner case managers, not by a public line, so dignity stays intact.</p>
          <div class="pill-row"><span class="pill">Pantry network</span><span class="pill">School bags</span><span class="pill">Grocery cards</span></div>
          <a href="#donate">Learn More</a>
        </article>
        <article class="program">
          <img src="https://picsum.photos/id/20/800/500" alt="Student working with books at a library table">
          <p class="meta">Youth learning</p>
          <h3>Afterlight Learning</h3>
          <p>Afterlight pairs students in grades 3–10 with mentors for reading, algebra, and the unglamorous skill of finishing homework in a quiet room. Sessions run in library branches and two housing community rooms, four afternoons a week, with a snack that is actually a meal.</p>
          <p>Mentors complete a background check, a six-hour training on trauma-aware tutoring, and a monthly coaching circle. We track attendance and confidence, not just test scores, because a student who stops disappearing from class is already a result.</p>
          <div class="pill-row"><span class="pill">Tutoring</span><span class="pill">Family conferences</span><span class="pill">Transit stipends</span></div>
          <a href="#volunteer">Volunteer Today</a>
        </article>
        <article class="program">
          <img src="https://picsum.photos/id/1067/800/500" alt="Quiet residential street at dusk">
          <p class="meta">Housing navigation</p>
          <h3>Shelterbridge</h3>
          <p>Shelterbridge does not operate a shelter. It funds the people who keep families from falling through the cracks between agencies: navigation specialists who sit with tenants facing eviction, translate benefit letters, and walk applications through to a yes or a clear no.</p>
          <p>A modest flexible fund covers application fees, a first tank of heating oil, or a week of storage so a family is not choosing between a unit and their belongings. Those costs are small. The delays they prevent are not.</p>
          <div class="pill-row"><span class="pill">Eviction prevention</span><span class="pill">Flexible aid</span><span class="pill">Case partnership</span></div>
          <a href="#stories">Read a story</a>
        </article>
        <article class="program">
          <img src="https://picsum.photos/id/1080/800/500" alt="Raised garden beds in a shared neighborhood lot">
          <p class="meta">Stewardship & work</p>
          <h3>Green Commons</h3>
          <p>Green Commons turns vacant lots into shared gardens and short-term paid crews for residents building a work history. Plots are reserved first for households using Harbor Table. Crew stipends are wages, not volunteer credit, and include a supervisor who can serve as a job reference.</p>
          <p>The program is deliberately small. We would rather run three sites well—with water, tools, insurance, and a harvest share—than announce ten gardens that fade by August.</p>
          <div class="pill-row"><span class="pill">Paid crews</span><span class="pill">Garden plots</span><span class="pill">Youth Saturdays</span></div>
          <a href="#partners">Meet site hosts</a>
        </article>
      </div>
    </div>
  </section>

  <section id="volunteer">
    <div class="wrap layout-2">
      <div>
        <p class="eyebrow">Volunteer Opportunities</p>
        <h2>Show up skilled, or come ready to be trained. Either is welcome.</h2>
        <p>Volunteering at Lumenfield is coordinated, not improvised. We ask for a real commitment because families plan around you. In return you get a supervisor, a clear role, and the right to say a shift no longer fits. Community outreach works when it is reliable.</p>
        <div class="card-grid">
          <article class="card">
            <p class="meta">Weekly · 2.5 hours · Background check</p>
            <h3>Afterlight mentor</h3>
            <p>Sit with one or two students, follow the tutor guide, and write a three-line note for the site lead. You do not need to be a teacher. You do need to be on time, curious, and willing to celebrate a paragraph that finally makes sense. Training is the first Tuesday of each month.</p>
          </article>
          <article class="card">
            <p class="meta">Biweekly · Morning shift · Lift up to 25 lb</p>
            <h3>Harbor Table sorter</h3>
            <p>Receive deliveries, check dates, and pack family boxes to a posted menu so every household gets a balanced share—not a random assortment of what was left. Bilingual volunteers are especially needed for the Saturday market line, where questions are as important as the food.</p>
          </article>
          <article class="card">
            <p class="meta">Monthly · Remote-friendly · Detail oriented</p>
            <h3>Outreach caller</h3>
            <p>Phone donors who gave last year, share a plain-language impact note, and invite them to renew. This is not a high-pressure script. It is a conversation, logged carefully, with a warm handoff if someone wants to talk about endowment gifts or volunteering instead.</p>
          </article>
        </div>
        <form id="volunteer-form" style="margin-top:1.2rem;" class="card" novalidate>
          <h3>Tell us how you want to help</h3>
          <p>A coordinator replies within three business days. We never share your contact details with partner agencies without asking.</p>
          <label for="v-name">Name</label>
          <input id="v-name" name="name" type="text" autocomplete="name" required>
          <label for="v-email">Email</label>
          <input id="v-email" name="email" type="email" autocomplete="email" required>
          <label for="v-role">Interest</label>
          <select id="v-role" name="role">
            <option>Afterlight mentor</option>
            <option>Harbor Table sorter</option>
            <option>Outreach caller</option>
            <option>Green Commons Saturday crew</option>
            <option>Not sure yet — talk with me</option>
          </select>
          <button class="btn btn-primary" type="submit">Volunteer Today</button>
          <p id="volunteer-note" class="note" hidden></p>
        </form>
      </div>
      <aside>
        <div class="aside-card">
          <h3>This season</h3>
          <div class="event"><strong>Apr 12 · Mentor training</strong><span class="meta">Library branch, 9:00–3:00. Lunch provided.</span></div>
          <div class="event"><strong>Apr 19 · Pantry sort-a-thon</strong><span class="meta">Warehouse B, two shifts. Closed-toe shoes.</span></div>
          <div class="event"><strong>May 3 · Garden opening</strong><span class="meta">Lot 14, Cedar Ward. Families first at 10:00.</span></div>
          <div class="event"><strong>May 21 · Donor briefing</strong><span class="meta">Endowment update and resident panel.</span></div>
          <a class="btn btn-ghost" href="#partners" style="margin-top:0.6rem;">View partner calendar</a>
        </div>
        <div class="aside-card" style="margin-top:1rem;">
          <h3>Impact reports</h3>
          <p>Our latest community briefing covers grant totals, volunteer hours, and what we stopped funding because it was not working.</p>
          <a href="#impact">Read the briefing highlights</a>
        </div>
        <div class="aside-card" style="margin-top:1rem;">
          <h3>Field notes</h3>
          <form id="news-form">
            <p>A short letter, six times a year. No sold lists. Unsubscribe in one click.</p>
            <label for="news-email">Email</label>
            <input id="news-email" type="email" required placeholder="you@example.org">
            <button class="btn btn-dark" type="submit">Join the circle</button>
            <p id="news-note" class="note" hidden></p>
          </form>
        </div>
      </aside>
    </div>
  </section>

  <section id="stories" style="background:#f7f2ea;">
    <div class="wrap">
      <div class="section-head">
        <p class="eyebrow">Impact Stories</p>
        <h2>Numbers keep us honest. Stories keep us specific.</h2>
        <p>We publish stories only with written consent, and we leave out details that could identify a child or a housing address. What remains is still the work: a tutor who stayed, a fee that got paid, a garden crew that turned a reference into a job.</p>
      </div>
      <div class="story-grid" style="grid-template-columns: 1.2fr 1fr; align-items: stretch;">
        <article class="story">
          <img src="https://picsum.photos/id/106/1000/640" alt="Warm light inside a community library in the evening">
          <p class="meta">Afterlight · Cedar Ward</p>
          <h3>The semester Maya stopped apologizing for questions</h3>
          <p>Maya’s mother first came to a family conference ready to leave early. School had felt like a series of notices she could not answer between shifts. Her mentor, Ellis, did not promise a miracle grade. He promised Tuesdays.</p>
          <p>By March, Maya was staying after the snack to finish a second problem set. The grade moved, yes. The more important change was quieter: she started asking for the hard worksheet on purpose. Ellis still volunteers. Maya now helps a fourth-grader find the right book.</p>
        </article>
        <div style="display:grid; gap:1rem;">
          <article class="card">
            <p class="quote">“They did not hand me a brochure and a waiting list. They sat with the letter until I understood which date actually mattered.”</p>
            <div class="person">
              <img src="https://i.pravatar.cc/96?u=lumen-renee" alt="">
              <div><strong>Renée A.</strong><small>Shelterbridge participant, quoted with consent</small></div>
            </div>
          </article>
          <article class="card">
            <p class="quote">“The grocery card meant my kids ate something they recognized. That sounds small until you have spent a month pretending canned surprise is a menu.”</p>
            <div class="person">
              <img src="https://i.pravatar.cc/96?u=lumen-omar" alt="">
              <div><strong>Omar V.</strong><small>Harbor Table household</small></div>
            </div>
          </article>
          <article class="card">
            <p class="quote">“Our employees wanted more than a logo on a fun-run shirt. The endowment briefing gave them a reason to payroll-give for a third year.”</p>
            <div class="person">
              <img src="https://i.pravatar.cc/96?u=lumen-priya" alt="">
              <div><strong>Priya N.</strong><small>People lead, Northline Credit Union</small></div>
            </div>
          </article>
        </div>
      </div>
    </div>
  </section>

  <section id="impact">
    <div class="wrap">
      <div class="calc-wrap" id="donate">
        <div>
          <p class="eyebrow" style="color:#e2c27a;">Charitable giving</p>
          <h2>Estimate the reach of a gift.</h2>
          <p>This impact calculator uses last year’s average program costs. It is a planning tool, not a receipt. Unrestricted gifts are pooled so coordinators can move funds toward the tightest need—meals one month, a heating fill the next.</p>
          <label for="amount">Gift amount: $<span id="amount-label">75</span></label>
          <input id="amount" type="range" min="15" max="500" step="5" value="75">
          <label for="freq">Frequency</label>
          <select id="freq">
            <option value="month">Monthly</option>
            <option value="year">Once this year</option>
          </select>
          <p class="muted" id="calc-story"></p>
          <a class="btn btn-primary" href="mailto:giving@lumenfield.org?subject=I%20want%20to%20give">Take Action — start a gift</a>
        </div>
        <div>
          <div class="results" aria-live="polite">
            <div class="result"><b id="meals">0</b><span>meals through Harbor Table</span></div>
            <div class="result"><b id="hours">0</b><span>Afterlight tutoring hours supported</span></div>
            <div class="result"><b id="kits">0</b><span>family hygiene and staple kits</span></div>
            <div class="result"><b id="nav">0</b><span>hours of housing navigation</span></div>
          </div>
          <p class="muted" style="margin-top:1rem;">A portion of gifts above everyday program need is reserved for the endowment, which funds coordination when campaign energy dips. You can designate 100% to current programs by noting that in your gift message.</p>
        </div>
      </div>
    </div>
  </section>

  <section id="partners">
    <div class="wrap">
      <div class="section-head">
        <p class="eyebrow">Partners</p>
        <h2>We are the table, not the only chair.</h2>
        <p>Lumenfield does not replace food banks, schools, clinics, or congregations. We resource them, and we ask them to resource each other. Partnership agreements spell out data we will and will not share, how residents are invited into decisions, and when a collaboration should end.</p>
      </div>
      <div class="partner-grid">
        <article class="partner">
          <img src="https://placehold.co/176x176/1c3f32/f4efe6?text=NCU&font=montserrat" alt="Northline Credit Union mark">
          <h3>Northline Credit Union</h3>
          <p>Payroll giving, fee-free endowment custody, and a branch room for tax-prep Saturdays.</p>
        </article>
        <article class="partner">
          <img src="https://placehold.co/176x176/b5523a/fff8f4?text=RH&font=lora" alt="Riverward Health mark">
          <h3>Riverward Health</h3>
          <p>Screening referrals into Shelterbridge and co-funded community health workers.</p>
        </article>
        <article class="partner">
          <img src="https://placehold.co/176x176/8c6a2c/fff8e8?text=PSU&font=playfair display" alt="Port Meridian State mark">
          <h3>School of Social Work</h3>
          <p>Field placements, evaluation design, and a resident stipend for research interviews.</p>
        </article>
        <article class="partner">
          <img src="https://placehold.co/176x176/3e6b56/f4efe6?text=KTB&font=oswald" alt="Kindling Table Bank mark">
          <h3>Kindling Table Bank</h3>
          <p>Regional food logistics partner for Harbor Table purchasing and cold chain.</p>
        </article>
      </div>
    </div>
  </section>

  <section>
    <div class="wrap">
      <div class="section-head">
        <p class="eyebrow">Questions</p>
        <h2>Plain answers before you give time or money.</h2>
      </div>
      <div class="card-grid">
        <details class="faq" open>
          <summary>How much of my gift reaches programs?</summary>
          <p>In the last fiscal year, 81 cents of every unrestricted dollar reached program delivery, including the coordinators who make volunteer hours usable. Eleven cents supported fundraising and donor care. Eight cents covered finance, insurance, and audit. We do not hide administration; coordination is how community outreach stays safe.</p>
        </details>
        <details class="faq">
          <summary>Can I give to the endowment instead of this year’s programs?</summary>
          <p>Yes. Endowment gifts are invested under a written spending policy. We draw about four percent annually so principal can support future coordinators, scholarships for mentor training, and sites that should not depend on a single campaign. Ask our giving desk for the current investment policy statement.</p>
        </details>
        <details class="faq">
          <summary>Do you accept volunteer groups from companies?</summary>
          <p>We do, when the work matches a real shift—not a photo opportunity that creates extra labor for staff. Groups of six to twenty can book Harbor Table or Green Commons dates. We ask companies to pair a service day with a charitable gift that covers supplies and a site lead.</p>
        </details>
        <details class="faq">
          <summary>How are residents involved in decisions?</summary>
          <p>The allocations circle includes at least four members who have used Harbor Table, Afterlight, or Shelterbridge in the past three years. They are paid for meeting time. Program changes that affect access—hours, locations, eligibility—come to that circle before they are announced.</p>
        </details>
      </div>
      <div class="cta-band" style="margin-top:1.6rem;">
        <div>
          <h2 style="margin:0 0 0.4rem;">Bring your company, congregation, or block club in.</h2>
          <p style="margin:0;">We will help you design a gift, a volunteer rota, or a neighborhood food share that does not collapse when the first organizers get tired.</p>
        </div>
        <a class="btn btn-primary" href="mailto:hello@lumenfield.org">Talk with our team</a>
      </div>
    </div>
  </section>
</main>
<footer>
  <div class="wrap foot-grid">
    <div>
      <h3>Lumenfield Alliance</h3>
      <p>418 Harbor Row, Suite 200<br>Port Meridian, OR 97204</p>
      <p>Phone: (503) 555-0148<br>Email: hello@lumenfield.org<br>Giving desk: giving@lumenfield.org</p>
    </div>
    <div>
      <h3>Visit</h3>
      <p><a href="#mission">Our Mission</a><br><a href="#programs">Programs</a><br><a href="#volunteer">Volunteer</a><br><a href="#impact">Impact</a></p>
    </div>
    <div>
      <h3>Trust</h3>
      <p><a href="#privacy">Privacy</a><br><a href="#terms">Terms</a><br><a href="#partners">Partners</a><br><a href="#stories">Stories</a></p>
    </div>
    <div>
      <h3>Social</h3>
      <p><a href="https://www.linkedin.com" rel="noopener">LinkedIn</a><br><a href="https://www.instagram.com" rel="noopener">Instagram</a><br><a href="https://www.facebook.com" rel="noopener">Facebook</a><br><a href="https://www.youtube.com" rel="noopener">YouTube</a></p>
    </div>
  </div>
  <div class="wrap fine">
    <span>© <span id="year">2026</span> Lumenfield Alliance. A fictional demonstration site. EIN 00-0000000.</span>
    <span id="privacy">Privacy · We do not sell donor or volunteer data.</span>
    <span id="terms">Terms · Gifts are charitable to the extent allowed by law.</span>
  </div>
</footer>
<script>
(function () {
  var toggle = document.querySelector(".nav-toggle");
  var nav = document.getElementById("site-nav");
  toggle.addEventListener("click", function () {
    var open = nav.classList.toggle("open");
    toggle.setAttribute("aria-expanded", open ? "true" : "false");
  });
  nav.querySelectorAll("a").forEach(function (link) {
    link.addEventListener("click", function () {
      nav.classList.remove("open");
      toggle.setAttribute("aria-expanded", "false");
    });
  });

  var amount = document.getElementById("amount");
  var label = document.getElementById("amount-label");
  var freq = document.getElementById("freq");
  function renderCalc() {
    var dollars = Number(amount.value);
    var perYear = freq.value === "year" ? dollars : dollars * 12;
    label.textContent = String(dollars);
    var meals = Math.round(perYear * 3.2);
    var hours = Math.round(perYear / 18);
    var kits = Math.round(perYear / 22);
    var navHours = Math.round(perYear / 40);
    document.getElementById("meals").textContent = meals.toLocaleString();
    document.getElementById("hours").textContent = hours.toLocaleString();
    document.getElementById("kits").textContent = kits.toLocaleString();
    document.getElementById("nav").textContent = navHours.toLocaleString();
    var cadence = freq.value === "year" ? "one-time gift" : "monthly gift";
    document.getElementById("calc-story").textContent =
      "A " + cadence + " of $" + dollars + " is modeled here as $" + perYear.toLocaleString() +
      " across a year, enough to stand behind shared meals, tutoring time, staple kits, and housing navigation hours at last year’s average cost.";
  }
  amount.addEventListener("input", renderCalc);
  freq.addEventListener("change", renderCalc);
  renderCalc();

  document.getElementById("volunteer-form").addEventListener("submit", function (e) {
    e.preventDefault();
    var note = document.getElementById("volunteer-note");
    var name = document.getElementById("v-name").value.trim();
    var email = document.getElementById("v-email").value.trim();
    if (!name || !email) return;
    note.hidden = false;
    note.textContent = "Thank you, " + name + ". A coordinator will write to " + email + " about " + document.getElementById("v-role").value + ".";
    e.target.reset();
  });
  document.getElementById("news-form").addEventListener("submit", function (e) {
    e.preventDefault();
    var note = document.getElementById("news-note");
    note.hidden = false;
    note.textContent = "You are on the list. Watch for a short letter, not a flood.";
    e.target.reset();
  });
  document.getElementById("year").textContent = String(new Date().getFullYear());
})();
</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:04:20.212Z",
  "url": "https://benchmark.aimac.invalid/0dc6a8f4d58a8e9960522d36400f21ce917c851b24405fb04da8d2c0014f8715.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-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": []
    },
    {
      "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": "blink",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag222",
        "section508",
        "section508.22.j",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <blink> elements are not used",
      "help": "<blink> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
      "nodes": []
    },
    {
      "id": "definition-list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dl> elements are structured correctly",
      "help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
      "nodes": []
    },
    {
      "id": "dlitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dt> and <dd> elements are contained by a <dl>",
      "help": "<dt> and <dd> elements must be contained by a <dl>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-focusable-content",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
      "help": "Frames with focusable content must not have tabindex=-1",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title-unique",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
      "help": "Frames must have a unique title attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.i",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements have an accessible name",
      "help": "Frames must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
      "nodes": []
    },
    {
      "id": "html-xml-lang-mismatch",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
      "help": "HTML elements with lang and xml:lang must have the same base language",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure input buttons have discernible text",
      "help": "Input buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <input type=\"image\"> elements have alternative text",
      "help": "Image buttons must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "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": []
    },
    {
      "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": []
    },
    {
      "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": "<nav class=\"primary\" id=\"site-nav\" aria-label=\"Primary\">",
          "target": [
            "#site-nav"
          ]
        }
      ]
    },
    {
      "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": "<nav class=\"primary\" id=\"site-nav\" aria-label=\"Primary\">",
          "target": [
            "#site-nav"
          ]
        }
      ]
    },
    {
      "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-prohibited-attr",
      "impact": null,
      "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": "<nav class=\"primary\" id=\"site-nav\" aria-label=\"Primary\">",
          "target": [
            "#site-nav"
          ]
        }
      ]
    },
    {
      "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": "<nav class=\"primary\" id=\"site-nav\" aria-label=\"Primary\">",
          "target": [
            "#site-nav"
          ]
        }
      ]
    },
    {
      "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": "<nav class=\"primary\" id=\"site-nav\" aria-label=\"Primary\">",
          "target": [
            "#site-nav"
          ]
        }
      ]
    },
    {
      "id": "autocomplete-valid",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag21aa",
        "wcag135",
        "EN-301-549",
        "EN-9.1.3.5",
        "ACT"
      ],
      "description": "Ensure the autocomplete attribute is correct and suitable for the form field",
      "help": "autocomplete attribute must be used correctly",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "autocomplete-valid",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "the autocomplete attribute is correctly formatted"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<input id=\"v-name\" name=\"name\" type=\"text\" autocomplete=\"name\" required=\"\">",
          "target": [
            "#v-name"
          ]
        }
      ]
    },
    {
      "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:#e2c27a;\">Community foundation \u00b7 Port Meridian</p>",
          "target": [
            ".hero-inner > .eyebrow"
          ]
        }
      ]
    },
    {
      "id": "button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure buttons have discernible text",
      "help": "Buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "button-has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has inner text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<button class=\"btn btn-primary\" type=\"submit\">Volunteer Today</button>",
          "target": [
            "#volunteer-form > button[type=\"submit\"]"
          ]
        }
      ]
    },
    {
      "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>Neighbors funding the long work of belonging.</h1>",
                  "target": [
                    "h1"
                  ]
                },
                {
                  "html": "<h2>Charitable giving should outlast the headline that inspired it.</h2>",
                  "target": [
                    ".split > div:nth-child(1) > h2"
                  ]
                },
                {
                  "html": "<h2>Four programs. One standard: useful, local, and accountable.</h2>",
                  "target": [
                    "#programs > .wrap > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Harbor Table</h3>",
                  "target": [
                    ".program:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Afterlight Learning</h3>",
                  "target": [
                    ".program:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Shelterbridge</h3>",
                  "target": [
                    ".program:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Green Commons</h3>",
                  "target": [
                    ".program:nth-child(4) > h3"
                  ]
                },
                {
                  "html": "<h2>Show up skilled, or come ready to be trained. Either is welcome.</h2>",
                  "target": [
                    ".layout-2 > div > h2"
                  ]
                },
                {
                  "html": "<h3>Afterlight mentor</h3>",
                  "target": [
                    ".card:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Harbor Table sorter</h3>",
                  "target": [
                    ".card:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Outreach caller</h3>",
                  "target": [
                    ".card:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Tell us how you want to help</h3>",
                  "target": [
                    "#volunteer-form > h3"
                  ]
                },
                {
                  "html": "<h3>This season</h3>",
                  "target": [
                    ".aside-card:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Impact reports</h3>",
                  "target": [
                    ".aside-card:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Field notes</h3>",
                  "target": [
                    ".aside-card:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h2>Numbers keep us honest. Stories keep us specific.</h2>",
                  "target": [
                    "#stories > .wrap > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>The semester Maya stopped apologizing for questions</h3>",
                  "target": [
                    ".story > h3"
                  ]
                },
                {
                  "html": "<h2>Estimate the reach of a gift.</h2>",
                  "target": [
                    "#donate > div:nth-child(1) > h2"
                  ]
                },
                {
                  "html": "<h2>We are the table, not the only chair.</h2>",
                  "target": [
                    "#partners > .wrap > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Northline Credit Union</h3>",
                  "target": [
                    ".partner:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Riverward Health</h3>",
                  "target": [
                    ".partner:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>School of Social Work</h3>",
                  "target": [
                    ".partner:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Kindling Table Bank</h3>",
                  "target": [
                    ".partner:nth-child(4) > h3"
                  ]
                },
                {
                  "html": "<h2>Plain answers before you give time or money.</h2>",
                  "target": [
                    "section:nth-child(9) > .wrap > .section-head > h2"
                  ]
                },
                {
                  "html": "<h2 style=\"margin:0 0 0.4rem;\">Bring your company, congregation, or block club in.</h2>",
                  "target": [
                    ".cta-band > div > h2"
                  ]
                },
                {
                  "html": "<h3>Lumenfield Alliance</h3>",
                  "target": [
                    ".foot-grid > div:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Visit</h3>",
                  "target": [
                    ".foot-grid > div:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Trust</h3>",
                  "target": [
                    ".foot-grid > div:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Social</h3>",
                  "target": [
                    "div: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": "#17241f",
                "bgColor": "#fbf8f3",
                "contrastRatio": 15.14,
                "fontSize": "13.8pt (18.4px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has sufficient color contrast of 15.14"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<strong>Lumenfield Alliance</strong>",
          "target": [
            ".brand > div > strong"
          ]
        }
      ]
    },
    {
      "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": "site-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=\"primary\" id=\"site-nav\" aria-label=\"Primary\">",
          "target": [
            "#site-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=\"v-name\">Name</label>",
                  "target": [
                    "label[for=\"v-name\"]"
                  ]
                }
              ],
              "impact": "moderate",
              "message": "Form field does not have multiple label elements"
            }
          ],
          "impact": null,
          "html": "<input id=\"v-name\" name=\"name\" type=\"text\" autocomplete=\"name\" required=\"\">",
          "target": [
            "#v-name"
          ]
        }
      ]
    },
    {
      "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"
            }
          ],
          "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/104x104/1c3f32/f4efe6?text=LA&amp;font=playfair display\" alt=\"Lumenfield Alliance monogram\">",
          "target": [
            "img[alt=\"Lumenfield Alliance monogram\"]"
          ]
        }
      ]
    },
    {
      "id": "label",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every form element has a label",
      "help": "Form elements must have labels",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "explicit-label",
              "data": {
                "explicitLabel": "Name"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"v-name\">Name</label>",
                  "target": [
                    "label[for=\"v-name\"]"
                  ]
                }
              ],
              "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": "<input id=\"v-name\" name=\"name\" type=\"text\" autocomplete=\"name\" required=\"\">",
          "target": [
            "#v-name"
          ]
        }
      ]
    },
    {
      "id": "link-in-text-block",
      "impact": null,
      "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>",
                  "target": [
                    ".split > div:nth-child(1)"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text by visual styling"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"btn btn-dark\" href=\"#impact\">See how gifts are used</a>",
          "target": [
            ".btn-dark.btn[href$=\"#impact\"]"
          ]
        }
      ]
    },
    {
      "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\" href=\"#main\">Skip to content</a>",
          "target": [
            ".skip"
          ]
        }
      ]
    },
    {
      "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.0\">",
          "target": [
            "meta[name=\"viewport\"]"
          ]
        }
      ]
    },
    {
      "id": "nested-interactive",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
      "help": "Interactive controls must not be nested",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "no-focusable-content",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element does not have focusable descendants"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<img src=\"https://placehold.co/104x104/1c3f32/f4efe6?text=LA&amp;font=playfair display\" alt=\"Lumenfield Alliance monogram\">",
          "target": [
            "img[alt=\"Lumenfield Alliance monogram\"]"
          ]
        }
      ]
    },
    {
      "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": "Interest"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"v-role\">Interest</label>",
                  "target": [
                    "label[for=\"v-role\"]"
                  ]
                }
              ],
              "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=\"v-role\" name=\"role\">",
          "target": [
            "#v-role"
          ]
        }
      ]
    },
    {
      "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>How much of my gift reaches programs?</summary>",
          "target": [
            "details[open=\"\"] > 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": 106.2,
                "height": 27.7
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Control has sufficient size (106.2px by 27.7px, 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\" href=\"#main\">Skip to content</a>",
          "target": [
            ".skip"
          ]
        }
      ]
    }
  ],
  "incomplete": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": null,
                "bgColor": null,
                "contrastRatio": 0,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "bold",
                "messageKey": "bgGradient",
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"hero\" id=\"top\">",
                  "target": [
                    "#top"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element's background color could not be determined due to a background gradient"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"eyebrow\" style=\"color:#e2c27a;\">Community foundation \u00b7 Port Meridian</p>",
          "target": [
            ".hero-inner > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element's background color could not be determined due to a background gradient"
        }
      ]
    }
  ],
  "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": "#8c6a2c",
                "bgColor": "#f7f2ea",
                "contrastRatio": 4.47,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section id=\"programs\" style=\"background:#f7f2ea;\">",
                  "target": [
                    "#programs"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.47 (foreground color: #8c6a2c, background color: #f7f2ea, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"eyebrow\">Community Programs</p>",
          "target": [
            "#programs > .wrap > .section-head > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.47 (foreground color: #8c6a2c, background color: #f7f2ea, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#8c6a2c",
                "bgColor": "#f7f2ea",
                "contrastRatio": 4.47,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section id=\"stories\" style=\"background:#f7f2ea;\">",
                  "target": [
                    "#stories"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.47 (foreground color: #8c6a2c, background color: #f7f2ea, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"eyebrow\">Impact Stories</p>",
          "target": [
            "#stories > .wrap > .section-head > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.47 (foreground color: #8c6a2c, background color: #f7f2ea, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
        }
      ]
    }
  ],
  "coverage": {
    "contract": "main-document-vertical-scroll",
    "complete": true,
    "positions": [
      {
        "y": 0,
        "height": 8665
      },
      {
        "y": 576,
        "height": 8665
      },
      {
        "y": 1152,
        "height": 8665
      },
      {
        "y": 1728,
        "height": 8665
      },
      {
        "y": 2304,
        "height": 8665
      },
      {
        "y": 2880,
        "height": 8665
      },
      {
        "y": 3456,
        "height": 8665
      },
      {
        "y": 4032,
        "height": 8665
      },
      {
        "y": 4608,
        "height": 8665
      },
      {
        "y": 5184,
        "height": 8665
      },
      {
        "y": 5760,
        "height": 8665
      },
      {
        "y": 6336,
        "height": 8665
      },
      {
        "y": 6912,
        "height": 8665
      },
      {
        "y": 7488,
        "height": 8665
      },
      {
        "y": 7945,
        "height": 8665
      }
    ],
    "scans": 16,
    "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 "Non-Profit/Charity" 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: "Non-Profit/Charity"
- Description: Charitable organizations, non-profit initiatives, volunteering, and fundraising resources.

**Your Creative Task:**
1.  **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Non-Profit/Charity" 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: "Partners", "Our Mission", "Volunteer".
-   **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
    -   Address key topics relevant to the "Non-Profit/Charity" category. Consider themes similar to: "Volunteer Opportunities", "Community Programs", "Impact Stories".
    -   **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "community outreach", "endowment", "charitable giving".
    -   **Visuals:** Integrate relevant placeholder images logically within the content sections.
    -   **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Learn More", "Take Action", "Volunteer Today".
-   **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Non-Profit/Charity" sector. Ideas similar but not limited to: "impact calculator".
-   **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "newsletter signup", "impact reports", "event calendar".
-   **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.