Reflection Beam 1.0 501B A23B – Religion and Spirituality
via Nebius · Generated
- AIMAC Debt 5.00
- Cost $0.014
- Total Violations 3
- HTML Size 36 KB
- Em Dashes 0
Screenshot
View Live Page
Accessibility Issues Found
3 Serious
-
color-contrast serious 1 instance
Elements must meet minimum color contrast ratio thresholds
Example HTML
<cite>Matthew 5:16</cite> -
link-in-text-block serious 2 instances
Links must be distinguishable without relying on color
Example HTML
<a href="#privacy">Privacy Policy</a>
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>Grace Harbor Fellowship | Faith, Community, and Service</title>
<style>
:root {
--color-navy: #1f3b57;
--color-navy-dark: #14283d;
--color-gold: #c9a227;
--color-sage: #6b8f71;
--color-cream: #f8f5ef;
--color-white: #ffffff;
--color-text: #2b2b2b;
--color-muted: #5f6670;
--color-border: #e3ddd2;
--shadow-sm: 0 2px 8px rgba(31, 59, 87, 0.08);
--shadow-md: 0 10px 30px rgba(31, 59, 87, 0.12);
--radius: 14px;
--max-width: 1180px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
margin: 0;
font-family: "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
color: var(--color-text);
background: var(--color-cream);
line-height: 1.65;
}
img { max-width: 100%; height: auto; display: block; }
a { color: var(--color-navy); text-decoration: none; }
a:hover, a:focus { text-decoration: underline; }
.container { width: min(var(--max-width), calc(100% - 2rem)); margin: 0 auto; }
.sr-only {
position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}
.skip-link {
position: absolute; left: -999px; top: 0; background: var(--color-navy); color: #fff;
padding: .75rem 1rem; z-index: 1000;
}
.skip-link:focus { left: 1rem; top: 1rem; }
.site-header {
position: sticky; top: 0; z-index: 100;
background: rgba(255, 255, 255, 0.96); backdrop-filter: blur(8px);
border-bottom: 1px solid var(--color-border); box-shadow: var(--shadow-sm);
}
.header-inner {
display: flex; align-items: center; justify-content: space-between;
gap: 1.5rem; padding: .85rem 0;
}
.brand { display: flex; align-items: center; gap: .85rem; text-decoration: none; }
.brand-text { display: flex; flex-direction: column; line-height: 1.15; }
.site-name { font-size: 1.25rem; font-weight: 800; color: var(--color-navy-dark); }
.tagline { font-size: .82rem; color: var(--color-muted); font-style: italic; }
.nav-toggle {
display: none; border: 1px solid var(--color-border); background: #fff;
padding: .55rem .9rem; border-radius: 8px; font-weight: 600; cursor: pointer;
}
.primary-nav ul {
list-style: none; margin: 0; padding: 0; display: flex; gap: .35rem; flex-wrap: wrap;
}
.primary-nav a {
display: block; padding: .55rem .85rem; border-radius: 8px; font-weight: 600;
color: var(--color-navy-dark);
}
.primary-nav a:hover, .primary-nav a:focus {
background: var(--color-cream); color: var(--color-navy); text-decoration: none;
}
.hero {
position: relative; min-height: 72vh; display: flex; align-items: center;
overflow: hidden; color: #fff;
}
.hero img.hero-bg {
position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
filter: grayscale(35%) brightness(0.45);
}
.hero::after {
content: ""; position: absolute; inset: 0;
background: linear-gradient(90deg, rgba(20,40,61,.88), rgba(31,59,87,.55));
}
.hero-content { position: relative; z-index: 1; max-width: 760px; padding: 4rem 0; }
.eyebrow {
display: inline-block; margin: 0 0 .75rem; color: var(--color-gold);
font-weight: 700; letter-spacing: .08em; text-transform: uppercase; font-size: .82rem;
}
.hero h1 { font-size: clamp(2.2rem, 5vw, 4rem); line-height: 1.1; margin: 0 0 1rem; }
.hero p { font-size: 1.15rem; max-width: 640px; color: rgba(255,255,255,.92); }
.hero-actions { display: flex; flex-wrap: wrap; gap: .85rem; margin-top: 1.75rem; }
.btn {
display: inline-flex; align-items: center; justify-content: center;
padding: .85rem 1.35rem; border-radius: 999px; font-weight: 700;
border: 2px solid transparent; transition: transform .15s ease, box-shadow .15s ease;
cursor: pointer; text-decoration: none;
}
.btn:hover, .btn:focus { transform: translateY(-1px); text-decoration: none; }
.btn-primary { background: var(--color-gold); color: var(--color-navy-dark); }
.btn-primary:hover { box-shadow: 0 8px 18px rgba(201,162,39,.35); }
.btn-secondary { background: transparent; color: #fff; border-color: rgba(255,255,255,.75); }
.btn-small { padding: .55rem 1rem; font-size: .9rem; }
.site-main { padding: 4rem 0; }
.layout {
display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 2.5rem; align-items: start;
}
.content { display: grid; gap: 4rem; }
.section { scroll-margin-top: 6rem; }
.section-heading { max-width: 760px; margin-bottom: 2rem; }
.section-heading h2 { font-size: clamp(1.8rem, 3vw, 2.6rem); color: var(--color-navy-dark); margin: 0 0 .75rem; }
.section-heading p { color: var(--color-muted); font-size: 1.05rem; }
.split { display: grid; grid-template-columns: 1fr 1fr; gap: 2.5rem; align-items: center; }
.split-text p { margin: 0 0 1rem; }
.values { padding-left: 1.15rem; color: var(--color-text); }
.values li { margin-bottom: .55rem; }
.split-media figcaption { font-size: .85rem; color: var(--color-muted); margin-top: .65rem; }
.text-link { font-weight: 700; }
.card-grid { display: grid; gap: 1.25rem; }
.card-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.card-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.feature-card, .group-card, .media-card, .testimonial-card, .event-card {
background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius);
padding: 1.35rem; box-shadow: var(--shadow-sm);
}
.feature-card .icon { font-size: 1.8rem; margin-bottom: .65rem; }
.feature-card h3, .group-card h3, .media-card h3, .event-card h3 { margin: 0 0 .5rem; color: var(--color-navy-dark); }
.feature-card p, .group-card p, .media-card p, .event-card p { margin: 0; color: var(--color-muted); }
.group-meta { margin-top: .75rem; font-size: .9rem; color: var(--color-sage); font-weight: 600; }
.group-card a { display: inline-block; margin-top: .85rem; font-weight: 700; }
.community-support {
margin-top: 2.5rem; padding: 1.75rem; background: #fff; border-radius: var(--radius);
border: 1px solid var(--color-border); box-shadow: var(--shadow-sm);
}
.community-support h3 { color: var(--color-navy-dark); margin-top: 0; }
.support-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; padding-left: 1.1rem; }
.events-list { display: grid; gap: 1rem; margin-bottom: 2rem; }
.event-card { display: grid; grid-template-columns: 88px 1fr auto; gap: 1rem; align-items: center; }
.event-date {
background: var(--color-navy); color: #fff; border-radius: 12px; text-align: center;
padding: .75rem .5rem; font-weight: 800;
}
.event-date span { display: block; }
.event-date .month { font-size: .75rem; text-transform: uppercase; letter-spacing: .08em; color: var(--color-gold); }
.event-date .day { font-size: 1.8rem; line-height: 1; }
.registration-panel {
background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius);
padding: 1.75rem; box-shadow: var(--shadow-md);
}
.registration-panel h3 { margin-top: 0; color: var(--color-navy-dark); }
.form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; }
label { display: block; font-weight: 600; color: var(--color-navy-dark); }
label.full, .checkbox.full { grid-column: 1 / -1; }
input, select, textarea {
width: 100%; margin-top: .35rem; padding: .75rem .85rem; border: 1px solid var(--color-border);
border-radius: 10px; font: inherit; background: #fff;
}
input:focus, select:focus, textarea:focus {
outline: 2px solid rgba(201,162,39,.45); border-color: var(--color-gold);
}
.checkbox { display: flex; align-items: center; gap: .5rem; font-weight: 500; }
.checkbox input { width: auto; margin: 0; }
.form-status { min-height: 1.5rem; margin-top: 1rem; font-weight: 600; color: var(--color-sage); }
.media-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.25rem; }
.media-card img { border-radius: 10px; margin-bottom: .85rem; }
.media-meta { font-size: .85rem; color: var(--color-muted); margin-bottom: .65rem; }
.testimonial-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.25rem; }
.testimonial-card { display: grid; gap: .85rem; }
.testimonial-card .quote { font-style: italic; color: var(--color-text); margin: 0; }
.testimonial-card .person { display: flex; align-items: center; gap: .75rem; }
.testimonial-card img { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; }
.testimonial-card .person div { line-height: 1.2; }
.testimonial-card .name { font-weight: 700; color: var(--color-navy-dark); }
.testimonial-card .role { font-size: .85rem; color: var(--color-muted); }
.faq { display: grid; gap: .75rem; }
details {
background: #fff; border: 1px solid var(--color-border); border-radius: 12px;
padding: 1rem 1.25rem; box-shadow: var(--shadow-sm);
}
summary { cursor: pointer; font-weight: 700; color: var(--color-navy-dark); }
details p { margin: .75rem 0 0; color: var(--color-muted); }
.sidebar { display: grid; gap: 1.25rem; position: sticky; top: 6rem; }
.widget {
background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius);
padding: 1.35rem; box-shadow: var(--shadow-sm);
}
.widget h3 { margin-top: 0; color: var(--color-navy-dark); }
.widget ul { padding-left: 1.1rem; color: var(--color-muted); }
.widget blockquote { margin: 0; font-style: italic; color: var(--color-text); }
.widget cite { display: block; margin-top: .65rem; color: var(--color-sage); font-weight: 600; }
.newsletter input { margin-bottom: .75rem; }
.site-footer {
background: var(--color-navy-dark); color: rgba(255,255,255,.88); padding: 3.5rem 0 1.5rem;
}
.footer-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 2rem; }
.site-footer h3 { color: #fff; margin-top: 0; }
.site-footer a { color: rgba(255,255,255,.88); }
.site-footer a:hover { color: var(--color-gold); }
.site-footer ul { list-style: none; padding: 0; margin: 0; display: grid; gap: .5rem; }
address { font-style: normal; line-height: 1.7; }
.footer-bottom {
margin-top: 2.5rem; padding-top: 1.25rem; border-top: 1px solid rgba(255,255,255,.15);
text-align: center; font-size: .9rem; color: rgba(255,255,255,.7);
}
@media (max-width: 980px) {
.layout { grid-template-columns: 1fr; }
.sidebar { position: static; }
.card-grid--3, .media-grid, .testimonial-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.footer-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.event-card { grid-template-columns: 72px 1fr; }
.event-card .btn { grid-column: 1 / -1; justify-self: start; }
}
@media (max-width: 680px) {
.nav-toggle { display: inline-flex; }
.primary-nav { display: none; position: absolute; left: 1rem; right: 1rem; top: 74px;
background: #fff; border: 1px solid var(--color-border); border-radius: 12px;
padding: .75rem; box-shadow: var(--shadow-md); }
.primary-nav.is-open { display: block; }
.primary-nav ul { flex-direction: column; }
.split, .card-grid--2, .support-list, .form-grid { grid-template-columns: 1fr; }
.card-grid--3, .media-grid, .testimonial-grid { grid-template-columns: 1fr; }
.footer-grid { grid-template-columns: 1fr; }
.hero { min-height: 62vh; }
}
</style>
</head>
<body>
<a class="skip-link" href="#main">Skip to main content</a>
<header class="site-header" id="home">
<div class="container header-inner">
<a class="brand" href="#home" aria-label="Grace Harbor Fellowship home">
<img src="https://placehold.co/180x54/1f3b57/f7f3ea?text=Grace+Harbor&font=montserrat" alt="Grace Harbor Fellowship logo" width="180" height="54">
<div class="brand-text">
<span class="site-name">Grace Harbor Fellowship</span>
<span class="tagline">Rooted in faith. Growing in love. Serving our neighbors.</span>
</div>
</a>
<button class="nav-toggle" type="button" aria-expanded="false" aria-controls="primary-nav">Menu</button>
<nav id="primary-nav" class="primary-nav" aria-label="Primary navigation">
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#community">Community</a></li>
<li><a href="#services">Services</a></li>
<li><a href="#media">Media</a></li>
<li><a href="#events">Events</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
</div>
</header>
<section class="hero" aria-labelledby="hero-title">
<img class="hero-bg" src="https://picsum.photos/1600/900?grayscale" alt="" width="1600" height="900">
<div class="container hero-content">
<p class="eyebrow">Welcome to our faith community</p>
<h1 id="hero-title">A spiritual home for worship, discipleship, and compassionate service.</h1>
<p>Grace Harbor Fellowship is a Christ-centered community where people of every age and background are invited to encounter God, grow in spiritual practice, and serve our neighbors with humility and joy. Whether you are exploring faith for the first time or seeking a deeper place of belonging, you are welcome here.</p>
<div class="hero-actions">
<a class="btn btn-primary" href="#events">Attend Event</a>
<a class="btn btn-secondary" href="#contact">Contact Pastor</a>
</div>
</div>
</section>
<main id="main" class="site-main">
<div class="container layout">
<div class="content">
<section id="about" class="section" aria-labelledby="about-title">
<div class="section-heading">
<p class="eyebrow">Our Mission</p>
<h2 id="about-title">Faith formation for every season of life</h2>
<p>We believe that spiritual growth is not a single moment but a lifelong journey shaped by worship, Scripture, prayer, and loving community.</p>
</div>
<div class="split">
<div class="split-text">
<p>Grace Harbor Fellowship exists to glorify God by making disciples, nurturing authentic spiritual practice, and serving the city with compassion. Our ministry is rooted in the conviction that faith is both personal and communal: we meet God in quiet prayer and in the shared life of the church, in sacred worship and in practical acts of mercy.</p>
<p>Through Sunday worship, small groups, pastoral care, and outreach, we help people discover a faith that is intellectually honest, emotionally whole, and actively engaged with the world. Our pastors and lay leaders walk alongside individuals and families through celebration, grief, questions, and transformation, offering a steady presence and a hopeful vision of God's grace.</p>
<ul class="values">
<li><strong>Worship:</strong> Christ-centered gatherings that combine Scripture, prayer, music, and reflection.</li>
<li><strong>Discipleship:</strong> Bible study and mentoring that deepen understanding and daily faithfulness.</li>
<li><strong>Service:</strong> Hands-on outreach that meets real needs in our neighborhoods.</li>
<li><strong>Care:</strong> Pastoral support for every season, from new beginnings to difficult transitions.</li>
</ul>
<a class="text-link" href="#community">Learn More about our community</a>
</div>
<figure class="split-media">
<img src="https://picsum.photos/900/650?grayscale" alt="Congregation gathered in worship" width="900" height="650" loading="lazy">
<figcaption>Our Sunday gathering blends thoughtful teaching, prayer, and congregational worship.</figcaption>
</figure>
</div>
</section>
<section id="services" class="section" aria-labelledby="services-title">
<div class="section-heading">
<p class="eyebrow">Ministries</p>
<h2 id="services-title">Ways to grow, serve, and belong</h2>
<p>Our ministries are designed to support spiritual formation at every age and to create meaningful opportunities for service.</p>
</div>
<div class="card-grid card-grid--3">
<article class="feature-card">
<div class="icon" aria-hidden="true">⛪</div>
<h3>Sunday Worship</h3>
<p>Join us each week for Scripture-centered preaching, congregational prayer, and music that invites reflection, gratitude, and hope.</p>
</article>
<article class="feature-card">
<div class="icon" aria-hidden="true">📖</div>
<h3>Bible Study</h3>
<p>Explore the Bible in community through guided discussion, historical context, and practical application for everyday discipleship.</p>
</article>
<article class="feature-card">
<div class="icon" aria-hidden="true">🙏</div>
<h3>Midweek Prayer</h3>
<p>A quiet, restorative hour of intercession, contemplative silence, and shared prayer for our church, city, and world.</p>
</article>
<article class="feature-card">
<div class="icon" aria-hidden="true">👨👩👧</div>
<h3>Children and Youth</h3>
<p>Faith formation for young people through age-appropriate teaching, mentoring, service projects, and safe community.</p>
</article>
<article class="feature-card">
<div class="icon" aria-hidden="true">🤝</div>
<h3>Pastoral Care</h3>
<p>Confidential support, hospital visits, grief companionship, and prayer for individuals and families facing life's challenges.</p>
</article>
<article class="feature-card">
<div class="icon" aria-hidden="true">🌱</div>
<h3>Outreach and Mercy</h3>
<p>Food distribution, housing partnerships, and neighborhood care initiatives that put compassion into action.</p>
</article>
</div>
</section>
<section id="community" class="section" aria-labelledby="community-title">
<div class="section-heading">
<p class="eyebrow">Community</p>
<h2 id="community-title">Study groups, support, and shared life</h2>
<p>Faith deepens when it is practiced together. Our groups offer space for honest conversation, spiritual growth, and mutual care.</p>
</div>
<div class="card-grid card-grid--3">
<article class="group-card">
<h3>Young Adults</h3>
<p>A welcoming group for college students and young professionals exploring identity, vocation, and faithful living in the city.</p>
<p class="group-meta">Thursdays, 7:00 PM</p>
<a href="#events">Learn More</a>
</article>
<article class="group-card">
<h3>Families in Faith</h3>
<p>Parents and children gather for shared meals, Scripture, and practical conversation about faith in the home.</p>
<p class="group-meta">Sundays, 9:00 AM</p>
<a href="#events">Learn More</a>
</article>
<article class="group-card">
<h3>Seniors Fellowship</h3>
<p>A warm circle for older adults focused on prayer, friendship, life review, and encouragement through changing seasons.</p>
<p class="group-meta">Wednesdays, 10:30 AM</p>
<a href="#events">Learn More</a>
</article>
<article class="group-card">
<h3>Recovery and Renewal</h3>
<p>A confidential, grace-filled space for those seeking healing from addiction, grief, burnout, or spiritual exhaustion.</p>
<p class="group-meta">Mondays, 6:30 PM</p>
<a href="#events">Learn More</a>
</article>
<article class="group-card">
<h3>Women's Circle</h3>
<p>Scripture study, mentoring, and shared prayer that nurture courage, wisdom, and authentic friendship.</p>
<p class="group-meta">Tuesdays, 7:00 PM</p>
<a href="#events">Learn More</a>
</article>
<article class="group-card">
<h3>Men's Fellowship</h3>
<p>Conversation and service centered on integrity, accountability, spiritual discipline, and faithful leadership.</p>
<p class="group-meta">Saturdays, 8:00 AM</p>
<a href="#events">Learn More</a>
</article>
</div>
<div class="community-support">
<h3>Community support that meets real needs</h3>
<p>Our church is committed to being a place of refuge and practical help. Volunteers coordinate a weekly food pantry, emergency assistance referrals, prayer chains, and accompaniment for neighbors navigating illness, housing instability, or grief. We also partner with local schools, shelters, and counseling providers so that support extends beyond our walls.</p>
<ul class="support-list">
<li>Weekly food pantry and meal distribution</li>
<li>Prayer team and pastoral visitation</li>
<li>Counseling referrals and support groups</li>
<li>Emergency assistance and benevolence funds</li>
<li>Housing and employment partnerships</li>
<li>Volunteer training and background screening</li>
</ul>
</div>
</section>
<section id="events" class="section" aria-labelledby="events-title">
<div class="section-heading">
<p class="eyebrow">Events</p>
<h2 id="events-title">Upcoming gatherings and service opportunities</h2>
<p>From worship and learning to outreach and celebration, there is always a next step into community.</p>
</div>
<div class="events-list">
<article class="event-card">
<div class="event-date" aria-label="April 12">
<span class="month">Apr</span>
<span class="day">12</span>
</div>
<div>
<h3>Spring Community Breakfast</h3>
<p>A relaxed morning of food, conversation, and welcome for neighbors and first-time guests. Families and children are encouraged to attend.</p>
</div>
<a class="btn btn-small btn-primary" href="#registration-form">Register</a>
</article>
<article class="event-card">
<div class="event-date" aria-label="April 19">
<span class="month">Apr</span>
<span class="day">19</span>
</div>
<div>
<h3>Foundations of Faith Class</h3>
<p>A four-week introduction to Christian belief, spiritual practice, baptism, and life in the church for new and returning believers.</p>
</div>
<a class="btn btn-small btn-primary" href="#registration-form">Register</a>
</article>
<article class="event-card">
<div class="event-date" aria-label="April 26">
<span class="month">Apr</span>
<span class="day">26</span>
</div>
<div>
<h3>Neighborhood Service Day</h3>
<p>Join volunteers for park cleanup, meal delivery, and home repair projects that strengthen our shared community.</p>
</div>
<a class="btn btn-small btn-primary" href="#registration-form">Register</a>
</article>
</div>
<div class="registration-panel" id="registration-panel">
<h3>Event Registration</h3>
<p>Please share your information so we can prepare a warm welcome, childcare, accessibility support, and the right number of materials.</p>
<form id="registration-form" novalidate>
<div class="form-grid">
<label>Full Name
<input type="text" name="name" required autocomplete="name" placeholder="Your full name">
</label>
<label>Email Address
<input type="email" name="email" required autocomplete="email" placeholder="name@example.com">
</label>
<label>Phone Number
<input type="tel" name="phone" autocomplete="tel" placeholder="(555) 000-0000">
</label>
<label>Choose an Event
<select name="event" required>
<option value="">Select an event</option>
<option>Spring Community Breakfast</option>
<option>Foundations of Faith Class</option>
<option>Neighborhood Service Day</option>
</select>
</label>
<label>Number Attending
<input type="number" name="guests" min="1" max="12" value="1" required>
</label>
<label class="full">Accessibility, childcare, or dietary needs
<textarea name="needs" rows="3" placeholder="Let us know how we can support you."></textarea>
</label>
<label class="checkbox full">
<input type="checkbox" name="volunteer">
I would also like to volunteer at this event.
</label>
</div>
<button class="btn btn-primary" type="submit">Register Now</button>
<p class="form-status" id="form-status" role="status" aria-live="polite"></p>
</form>
</div>
</section>
<section id="media" class="section" aria-labelledby="media-title">
<div class="section-heading">
<p class="eyebrow">Media</p>
<h2 id="media-title">Sermons, teaching, and worship resources</h2>
<p>Catch up on recent messages or revisit a teaching series that supports your spiritual practice.</p>
</div>
<div class="media-grid">
<article class="media-card">
<img src="https://picsum.photos/400/225?grayscale" alt="Sermon thumbnail" width="400" height="225" loading="lazy">
<h3>Grace for the Weary</h3>
<p class="media-meta">April 6, 2026 · 34 minutes</p>
<p>A message on finding rest, renewal, and courage through God's presence in demanding seasons.</p>
<a href="#media">Watch Sermon</a>
</article>
<article class="media-card">
<img src="https://picsum.photos/400/225?grayscale&blur=1" alt="Sermon thumbnail" width="400" height="225" loading="lazy">
<h3>Practicing Hope</h3>
<p class="media-meta">March 30, 2026 · 29 minutes</p>
<p>An exploration of hope as a spiritual discipline that shapes how we respond to uncertainty and suffering.</p>
<a href="#media">Watch Sermon</a>
</article>
<article class="media-card">
<img src="https://picsum.photos/400/225?grayscale&blur=2" alt="Sermon thumbnail" width="400" height="225" loading="lazy">
<h3>Rooted in Love</h3>
<p class="media-meta">March 23, 2026 · 31 minutes</p>
<p>A teaching on spiritual maturity, community, and the kind of love that transforms neighborhoods.</p>
<a href="#media">Watch Sermon</a>
</article>
</div>
</section>
<section class="section" aria-labelledby="testimonials-title">
<div class="section-heading">
<p class="eyebrow">Testimonials</p>
<h2 id="testimonials-title">Stories of grace in our community</h2>
<p>Members and neighbors share how faith, friendship, and service have shaped their lives.</p>
</div>
<div class="testimonial-grid">
<article class="testimonial-card">
<p class="quote">"I came looking for answers and found a community that welcomed my questions. The teaching is thoughtful, and the people truly care."</p>
<div class="person">
<img src="https://i.pravatar.cc/80?u=grace-harbor-1" alt="Portrait of Daniel R." width="80" height="80">
<div>
<div class="name">Daniel R.</div>
<div class="role">Member since 2022</div>
</div>
</div>
</article>
<article class="testimonial-card">
<p class="quote">"The recovery group gave me a safe place to heal. I learned that grace is not just a word; it is a community that walks with you."</p>
<div class="person">
<img src="https://i.pravatar.cc/80?u=grace-harbor-2" alt="Portrait of Maria L." width="80" height="80">
<div>
<div class="name">Maria L.</div>
<div class="role">Community participant</div>
</div>
</div>
</article>
<article class="testimonial-card">
<p class="quote">"Serving at the food pantry changed my family. Our children now understand faith as something we live, not just something we hear."</p>
<div class="person">
<img src="https://i.pravatar.cc/80?u=grace-harbor-3" alt="Portrait of James and Aisha T." width="80" height="80">
<div>
<div class="name">James and Aisha T.</div>
<div class="role">Volunteer leaders</div>
</div>
</div>
</article>
</div>
</section>
<section class="section" aria-labelledby="faq-title">
<div class="section-heading">
<p class="eyebrow">Questions</p>
<h2 id="faq-title">Frequently asked questions</h2>
<p>We want your first visit to feel clear, comfortable, and welcoming.</p>
</div>
<div class="faq">
<details>
<summary>What time are Sunday services?</summary>
<p>Our main worship service begins at 10:00 AM, with children's ministry and a welcome desk opening at 9:30 AM. A quieter midweek prayer service is held on Wednesdays at 6:30 PM.</p>
</details>
<details>
<summary>What should I wear?</summary>
<p>Come as you are. You will see everything from casual to formal attire. Our focus is on worship and community, not dress code.</p>
</details>
<details>
<summary>Is childcare available?</summary>
<p>Yes. Age-appropriate care is available during Sunday worship and many events. Please indicate childcare needs on the registration form so we can plan well.</p>
</details>
<details>
<summary>Do I need to be a member to attend?</summary>
<p>Not at all. Everyone is welcome to worship, learn, and participate. Membership is available for those who wish to make a deeper commitment to the church's mission.</p>
</details>
<details>
<summary>How can I give or support the ministry?</summary>
<p>You can give during services, online, or by contacting our office. We also welcome volunteers for outreach, hospitality, music, and care ministries.</p>
</details>
<details>
<summary>How do I request prayer or pastoral care?</summary>
<p>Contact the church office or speak with a pastor after any service. Prayer requests can be submitted confidentially, and our care team responds promptly.</p>
</details>
</div>
</section>
</div>
<aside class="sidebar" aria-labelledby="sidebar-heading">
<h2 id="sidebar-heading" class="sr-only">Sidebar</h2>
<section class="widget">
<h3>Daily Inspiration</h3>
<blockquote>"Let your light shine before others, that they may see your good deeds and glorify your Father in heaven."</blockquote>
<cite>Matthew 5:16</cite>
</section>
<section class="widget">
<h3>Volunteer Opportunities</h3>
<ul>
<li>Hospitality and welcome team</li>
<li>Food pantry sorting and distribution</li>
<li>Children's ministry helpers</li>
<li>Music and worship support</li>
<li>Prayer team and visitation</li>
</ul>
<a class="btn btn-small btn-primary" href="#contact">Volunteer Today</a>
</section>
<section class="widget">
<h3>Community Highlights</h3>
<img src="https://picsum.photos/320/200?grayscale&blur=1" alt="Volunteers serving meals in the community" width="320" height="200" loading="lazy">
<p>Last month our volunteers served more than 1,200 meals and welcomed 40 new guests into small groups. Thank you for making grace visible.</p>
</section>
<section class="widget newsletter">
<h3>Stay Connected</h3>
<p>Receive weekly updates, prayer prompts, and event invitations.</p>
<form id="newsletter-form">
<label class="sr-only" for="newsletter-email">Email address</label>
<input id="newsletter-email" type="email" placeholder="Your email address" required>
<button class="btn btn-small btn-primary" type="submit">Subscribe</button>
<p class="form-status" id="newsletter-status" role="status" aria-live="polite"></p>
</form>
</section>
</aside>
</div>
</main>
<footer class="site-footer" id="contact">
<div class="container footer-grid">
<div>
<h3>Grace Harbor Fellowship</h3>
<p>A Christ-centered community rooted in faith, growing in love, and serving our neighbors with hope.</p>
<address>
128 Harbor Way<br>
Riverton, CA 94000<br>
<a href="tel:+15550142837">(555) 014-2837</a><br>
<a href="mailto:hello@graceharbor.org">hello@graceharbor.org</a>
</address>
</div>
<div>
<h3>Quick Links</h3>
<ul>
<li><a href="#about">About</a></li>
<li><a href="#community">Community</a></li>
<li><a href="#services">Services</a></li>
<li><a href="#media">Media</a></li>
<li><a href="#events">Events</a></li>
</ul>
</div>
<div>
<h3>Connect</h3>
<ul>
<li><a href="#contact">Contact Pastor</a></li>
<li><a href="#contact">Prayer Request</a></li>
<li><a href="#contact">Volunteer</a></li>
<li><a href="https://facebook.com" rel="noopener">Facebook</a></li>
<li><a href="https://instagram.com" rel="noopener">Instagram</a></li>
<li><a href="https://youtube.com" rel="noopener">YouTube</a></li>
</ul>
</div>
<div>
<h3>Service Times</h3>
<ul>
<li>Sunday Worship: 10:00 AM</li>
<li>Children's Ministry: 9:30 AM</li>
<li>Midweek Prayer: Wed 6:30 PM</li>
<li>Office Hours: Mon-Fri 9 AM-4 PM</li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>© <span id="year"></span> Grace Harbor Fellowship. All rights reserved. <a href="#privacy">Privacy Policy</a> | <a href="#terms">Terms of Use</a></p>
</div>
</footer>
<script>
document.addEventListener('DOMContentLoaded', function () {
const navToggle = document.querySelector('.nav-toggle');
const primaryNav = document.getElementById('primary-nav');
if (navToggle && primaryNav) {
navToggle.addEventListener('click', function () {
const isOpen = primaryNav.classList.toggle('is-open');
navToggle.setAttribute('aria-expanded', String(isOpen));
});
}
const registrationForm = document.getElementById('registration-form');
const formStatus = document.getElementById('form-status');
if (registrationForm && formStatus) {
registrationForm.addEventListener('submit', function (event) {
event.preventDefault();
if (!registrationForm.checkValidity()) {
formStatus.textContent = 'Please complete all required fields before registering.';
registrationForm.reportValidity();
return;
}
formStatus.textContent = 'Thank you. Your registration has been received, and our team will follow up soon.';
registrationForm.reset();
});
}
const newsletterForm = document.getElementById('newsletter-form');
const newsletterStatus = document.getElementById('newsletter-status');
if (newsletterForm && newsletterStatus) {
newsletterForm.addEventListener('submit', function (event) {
event.preventDefault();
const email = document.getElementById('newsletter-email');
if (!email || !email.checkValidity()) {
newsletterStatus.textContent = 'Please enter a valid email address.';
if (email) email.reportValidity();
return;
}
newsletterStatus.textContent = 'You are subscribed. Look for our next weekly update.';
newsletterForm.reset();
});
}
const year = document.getElementById('year');
if (year) year.textContent = 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:14:00.295Z",
"url": "https://benchmark.aimac.invalid/b79290f6ac10c7a54da6f28609ae61ceadb2c79318eed5b7104f0e3a3a62a23c.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-children",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require child roles contain them",
"help": "Certain ARIA roles must contain particular children",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "avoid-inline-spacing",
"impact": null,
"tags": [
"cat.structure",
"wcag21aa",
"wcag1412",
"EN-301-549",
"EN-9.1.4.12",
"ACT"
],
"description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
"help": "Inline text spacing must be adjustable with custom stylesheets",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-allowed-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attributes are used correctly for the defined role"
}
],
"none": [
{
"id": "aria-unsupported-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute is supported"
}
],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Grace Harbor Fellowship home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-conditional-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are used as described in the specification of the element's role",
"help": "ARIA attributes must be used as specified for the element's role",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-conditional-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Grace Harbor Fellowship home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "deprecatedrole",
"data": null,
"relatedNodes": [],
"impact": "minor",
"message": "ARIA role is not deprecated"
}
],
"impact": null,
"html": "<p class=\"form-status\" id=\"form-status\" role=\"status\" aria-live=\"polite\"></p>",
"target": [
"#form-status"
]
}
]
},
{
"id": "aria-hidden-body",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"wcag412",
"EN-301-549",
"EN-9.1.3.1",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden=\"true\" is not present on the document body.",
"help": "aria-hidden=\"true\" must not be present on the document body",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-hidden-body",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "No aria-hidden attribute is present on document body"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<body>",
"target": [
"body"
]
}
]
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "focusable-modal-open",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements while a modal is open"
},
{
"id": "focusable-disabled",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
},
{
"id": "focusable-not-tabbable",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
}
],
"none": [],
"impact": null,
"html": "<div class=\"icon\" aria-hidden=\"true\">\u26ea</div>",
"target": [
".feature-card:nth-child(1) > .icon[aria-hidden=\"true\"]"
]
}
]
},
{
"id": "aria-prohibited-attr",
"impact": "serious",
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Grace Harbor Fellowship home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-required-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "All required ARIA attributes are present"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<p class=\"form-status\" id=\"form-status\" role=\"status\" aria-live=\"polite\"></p>",
"target": [
"#form-status"
]
}
]
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "invalidrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA role is valid"
},
{
"id": "abstractrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Abstract roles are not used"
},
{
"id": "unsupportedrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA role is supported"
}
],
"impact": null,
"html": "<p class=\"form-status\" id=\"form-status\" role=\"status\" aria-live=\"polite\"></p>",
"target": [
"#form-status"
]
}
]
},
{
"id": "aria-valid-attr-value",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all ARIA attributes have valid values",
"help": "ARIA attributes must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-valid-attr-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute values are valid"
},
{
"id": "aria-errormessage",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
},
{
"id": "aria-level",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-level values are valid"
}
],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Grace Harbor Fellowship home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-valid-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure attributes that begin with aria- are valid ARIA attributes",
"help": "ARIA attributes must conform to valid names",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-valid-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute name is valid"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#home\" aria-label=\"Grace Harbor Fellowship home\">",
"target": [
".brand"
]
}
]
},
{
"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 type=\"text\" name=\"name\" required=\"\" autocomplete=\"name\" placeholder=\"Your full name\">",
"target": [
"input[type=\"text\"]"
]
}
]
},
{
"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\">Register Now</button>",
"target": [
"#registration-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 id=\"hero-title\">A spiritual home for worship, discipleship, and compassionate service.</h1>",
"target": [
"#hero-title"
]
},
{
"html": "<h2 id=\"about-title\">Faith formation for every season of life</h2>",
"target": [
"#about-title"
]
},
{
"html": "<h2 id=\"services-title\">Ways to grow, serve, and belong</h2>",
"target": [
"#services-title"
]
},
{
"html": "<h3>Sunday Worship</h3>",
"target": [
".feature-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Bible Study</h3>",
"target": [
".feature-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Midweek Prayer</h3>",
"target": [
".feature-card:nth-child(3) > h3"
]
},
{
"html": "<h3>Children and Youth</h3>",
"target": [
".feature-card:nth-child(4) > h3"
]
},
{
"html": "<h3>Pastoral Care</h3>",
"target": [
".feature-card:nth-child(5) > h3"
]
},
{
"html": "<h3>Outreach and Mercy</h3>",
"target": [
".feature-card:nth-child(6) > h3"
]
},
{
"html": "<h2 id=\"community-title\">Study groups, support, and shared life</h2>",
"target": [
"#community-title"
]
},
{
"html": "<h3>Young Adults</h3>",
"target": [
".group-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Families in Faith</h3>",
"target": [
".group-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Seniors Fellowship</h3>",
"target": [
".group-card:nth-child(3) > h3"
]
},
{
"html": "<h3>Recovery and Renewal</h3>",
"target": [
".group-card:nth-child(4) > h3"
]
},
{
"html": "<h3>Women's Circle</h3>",
"target": [
".group-card:nth-child(5) > h3"
]
},
{
"html": "<h3>Men's Fellowship</h3>",
"target": [
".group-card:nth-child(6) > h3"
]
},
{
"html": "<h3>Community support that meets real needs</h3>",
"target": [
".community-support > h3"
]
},
{
"html": "<h2 id=\"events-title\">Upcoming gatherings and service opportunities</h2>",
"target": [
"#events-title"
]
},
{
"html": "<h3>Spring Community Breakfast</h3>",
"target": [
".event-card:nth-child(1) > div:nth-child(2) > h3"
]
},
{
"html": "<h3>Foundations of Faith Class</h3>",
"target": [
".event-card:nth-child(2) > div:nth-child(2) > h3"
]
},
{
"html": "<h3>Neighborhood Service Day</h3>",
"target": [
".event-card:nth-child(3) > div:nth-child(2) > h3"
]
},
{
"html": "<h3>Event Registration</h3>",
"target": [
"#registration-panel > h3"
]
},
{
"html": "<h2 id=\"media-title\">Sermons, teaching, and worship resources</h2>",
"target": [
"#media-title"
]
},
{
"html": "<h3>Grace for the Weary</h3>",
"target": [
".media-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Practicing Hope</h3>",
"target": [
".media-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Rooted in Love</h3>",
"target": [
".media-card:nth-child(3) > h3"
]
},
{
"html": "<h2 id=\"testimonials-title\">Stories of grace in our community</h2>",
"target": [
"#testimonials-title"
]
},
{
"html": "<h2 id=\"faq-title\">Frequently asked questions</h2>",
"target": [
"#faq-title"
]
},
{
"html": "<h2 id=\"sidebar-heading\" class=\"sr-only\">Sidebar</h2>",
"target": [
"#sidebar-heading"
]
},
{
"html": "<h3>Daily Inspiration</h3>",
"target": [
".widget:nth-child(2) > h3"
]
},
{
"html": "<h3>Volunteer Opportunities</h3>",
"target": [
".widget:nth-child(3) > h3"
]
},
{
"html": "<h3>Community Highlights</h3>",
"target": [
".widget:nth-child(4) > h3"
]
},
{
"html": "<h3>Stay Connected</h3>",
"target": [
".newsletter > h3"
]
},
{
"html": "<h3>Grace Harbor Fellowship</h3>",
"target": [
"div:nth-child(1) > h3"
]
},
{
"html": "<h3>Quick Links</h3>",
"target": [
".footer-grid > div:nth-child(2) > h3"
]
},
{
"html": "<h3>Connect</h3>",
"target": [
".footer-grid > div:nth-child(3) > h3"
]
},
{
"html": "<h3>Service Times</h3>",
"target": [
"div:nth-child(4) > h3"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main id=\"main\" class=\"site-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": "#14283d",
"bgColor": "#fffffe",
"contrastRatio": 14.98,
"fontSize": "15.0pt (20px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "3:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 14.98"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<span class=\"site-name\">Grace Harbor Fellowship</span>",
"target": [
".site-name"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "duplicate-id-aria",
"data": "primary-nav",
"relatedNodes": [],
"impact": "critical",
"message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<nav id=\"primary-nav\" class=\"primary-nav\" aria-label=\"Primary navigation\">",
"target": [
"#primary-nav"
]
}
]
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "multiple-label",
"data": null,
"relatedNodes": [
{
"html": "<label>Full Name\n <input type=\"text\" name=\"name\" required=\"\" autocomplete=\"name\" placeholder=\"Your full name\">\n </label>",
"target": [
".form-grid > label:nth-child(1)"
]
}
],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<input type=\"text\" name=\"name\" required=\"\" autocomplete=\"name\" placeholder=\"Your full name\">",
"target": [
"input[type=\"text\"]"
]
}
]
},
{
"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/180x54/1f3b57/f7f3ea?text=Grace+Harbor&font=montserrat\" alt=\"Grace Harbor Fellowship logo\" width=\"180\" height=\"54\">",
"target": [
"img[alt=\"Grace Harbor Fellowship logo\"]"
]
}
]
},
{
"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": "implicit-label",
"data": {
"implicitLabel": "Full Name Your full name"
},
"relatedNodes": [
{
"html": "<label>Full Name\n <input type=\"text\" name=\"name\" required=\"\" autocomplete=\"name\" placeholder=\"Your full name\">\n </label>",
"target": [
".form-grid > label:nth-child(1)"
]
}
],
"impact": "critical",
"message": "Element has an implicit (wrapped) <label>"
},
{
"id": "non-empty-placeholder",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a placeholder attribute"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input type=\"text\" name=\"name\" required=\"\" autocomplete=\"name\" placeholder=\"Your full name\">",
"target": [
"input[type=\"text\"]"
]
}
]
},
{
"id": "link-in-text-block",
"impact": "serious",
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "link-in-text-block-style",
"data": null,
"relatedNodes": [
{
"html": "<div class=\"split-text\">",
"target": [
".split-text"
]
}
],
"impact": "serious",
"message": "Links can be distinguished from surrounding text by visual styling"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a class=\"text-link\" href=\"#community\">Learn More about our community</a>",
"target": [
".text-link"
]
}
]
},
{
"id": "link-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a class=\"skip-link\" href=\"#main\">Skip to main content</a>",
"target": [
".skip-link"
]
}
]
},
{
"id": "list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that lists are structured correctly",
"help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "only-listitems",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List element only has direct children that are allowed inside <li> elements"
}
],
"impact": null,
"html": "<ul>",
"target": [
"#primary-nav > ul"
]
}
]
},
{
"id": "listitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <li> elements are used semantically",
"help": "<li> elements must be contained in a <ul> or <ol>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "listitem",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List item has a <ul>, <ol> or role=\"list\" parent element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<li><a href=\"#home\">Home</a></li>",
"target": [
"#primary-nav > ul > li:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.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/180x54/1f3b57/f7f3ea?text=Grace+Harbor&font=montserrat\" alt=\"Grace Harbor Fellowship logo\" width=\"180\" height=\"54\">",
"target": [
"img[alt=\"Grace Harbor Fellowship logo\"]"
]
}
]
},
{
"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": "implicit-label",
"data": {
"implicitLabel": "Choose an Event"
},
"relatedNodes": [
{
"html": "<label>",
"target": [
"label:nth-child(4)"
]
}
],
"impact": "critical",
"message": "Element has an implicit (wrapped) <label>"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<select name=\"event\" required=\"\">",
"target": [
"select"
]
}
]
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<summary>What time are Sunday services?</summary>",
"target": [
"details:nth-child(1) > summary"
]
}
]
},
{
"id": "target-size",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag22aa",
"wcag258"
],
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "target-size",
"data": {
"minSize": 24,
"width": 180.2,
"height": 50.4
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (180.2px by 50.4px, should be at least 24px by 24px)"
},
{
"id": "target-offset",
"data": {
"closestOffset": 24,
"minOffset": 24
},
"relatedNodes": [],
"impact": "serious",
"message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a class=\"skip-link\" href=\"#main\">Skip to main content</a>",
"target": [
".skip-link"
]
}
]
}
],
"incomplete": [
{
"id": "aria-prohibited-attr",
"impact": "serious",
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": {
"role": null,
"nodeName": "div",
"messageKey": "noRoleSingular",
"prohibited": [
"aria-label"
]
},
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute is not well supported on a div with no valid role attribute."
}
],
"impact": "serious",
"html": "<div class=\"event-date\" aria-label=\"April 12\">\n <span class=\"month\">Apr</span>\n <span class=\"day\">12</span>\n </div>",
"target": [
"div[aria-label=\"April 12\"]"
],
"failureSummary": "Fix all of the following:\n aria-label attribute is not well supported on a div with no valid role attribute."
}
]
},
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fontSize": "13.8pt (18.4px)",
"fontWeight": "bold",
"messageKey": "pseudoContent",
"expectedContrastRatio": "4.5:1"
},
"relatedNodes": [
{
"html": "<section class=\"hero\" aria-labelledby=\"hero-title\">",
"target": [
".hero"
]
}
],
"impact": "serious",
"message": "Element's background color could not be determined due to a pseudo element"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p class=\"eyebrow\">Welcome to our faith community</p>",
"target": [
".hero-content > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element's background color could not be determined due to a pseudo element"
}
]
},
{
"id": "link-in-text-block",
"impact": "serious",
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "link-in-text-block",
"data": {
"messageKey": "bgOverlap"
},
"relatedNodes": [
{
"html": "<article class=\"media-card\">",
"target": [
".media-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element's contrast ratio could not be determined because of element overlap"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#media\">Watch Sermon</a>",
"target": [
".media-card:nth-child(1) > a[href$=\"#media\"]"
],
"failureSummary": "Fix any of the following:\n Element's contrast ratio could not be determined because of element overlap"
}
]
}
],
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#6b8f71",
"bgColor": "#ffffff",
"contrastRatio": 3.62,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"widget\">\n <h3>Daily Inspiration</h3>\n <blockquote>\"Let your light shine before others, that they may see your good deeds and glorify your Father in heaven.\"</blockquote>\n <cite>Matthew 5:16</cite>\n </section>",
"target": [
".widget:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.62 (foreground color: #6b8f71, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<cite>Matthew 5:16</cite>",
"target": [
"cite"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.62 (foreground color: #6b8f71, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
},
{
"id": "link-in-text-block",
"impact": "serious",
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "link-in-text-block",
"data": {
"messageKey": "fgContrast",
"contrastRatio": 1.46,
"requiredContrastRatio": 3,
"nodeColor": "#e3e5e8",
"parentColor": "#b9bfc5"
},
"relatedNodes": [
{
"html": "<p>\u00a9 <span id=\"year\">2026</span> Grace Harbor Fellowship. All rights reserved. <a href=\"#privacy\">Privacy Policy</a> | <a href=\"#terms\">Terms of Use</a></p>",
"target": [
".footer-bottom > p"
]
}
],
"impact": "serious",
"message": "The link has insufficient color contrast of 1.46:1 with the surrounding text. (Minimum contrast is 3:1, link text: #e3e5e8, surrounding text: #b9bfc5)"
},
{
"id": "link-in-text-block-style",
"data": null,
"relatedNodes": [
{
"html": "<p>\u00a9 <span id=\"year\">2026</span> Grace Harbor Fellowship. All rights reserved. <a href=\"#privacy\">Privacy Policy</a> | <a href=\"#terms\">Terms of Use</a></p>",
"target": [
".footer-bottom > p"
]
}
],
"impact": "serious",
"message": "The link has no styling (such as underline) to distinguish it from the surrounding text"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#privacy\">Privacy Policy</a>",
"target": [
"a[href$=\"#privacy\"]"
],
"failureSummary": "Fix any of the following:\n The link has insufficient color contrast of 1.46:1 with the surrounding text. (Minimum contrast is 3:1, link text: #e3e5e8, surrounding text: #b9bfc5)\n The link has no styling (such as underline) to distinguish it from the surrounding text"
},
{
"any": [
{
"id": "link-in-text-block",
"data": {
"messageKey": "fgContrast",
"contrastRatio": 1.46,
"requiredContrastRatio": 3,
"nodeColor": "#e3e5e8",
"parentColor": "#b9bfc5"
},
"relatedNodes": [
{
"html": "<p>\u00a9 <span id=\"year\">2026</span> Grace Harbor Fellowship. All rights reserved. <a href=\"#privacy\">Privacy Policy</a> | <a href=\"#terms\">Terms of Use</a></p>",
"target": [
".footer-bottom > p"
]
}
],
"impact": "serious",
"message": "The link has insufficient color contrast of 1.46:1 with the surrounding text. (Minimum contrast is 3:1, link text: #e3e5e8, surrounding text: #b9bfc5)"
},
{
"id": "link-in-text-block-style",
"data": null,
"relatedNodes": [
{
"html": "<p>\u00a9 <span id=\"year\">2026</span> Grace Harbor Fellowship. All rights reserved. <a href=\"#privacy\">Privacy Policy</a> | <a href=\"#terms\">Terms of Use</a></p>",
"target": [
".footer-bottom > p"
]
}
],
"impact": "serious",
"message": "The link has no styling (such as underline) to distinguish it from the surrounding text"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#terms\">Terms of Use</a>",
"target": [
"a[href$=\"#terms\"]"
],
"failureSummary": "Fix any of the following:\n The link has insufficient color contrast of 1.46:1 with the surrounding text. (Minimum contrast is 3:1, link text: #e3e5e8, surrounding text: #b9bfc5)\n The link has no styling (such as underline) to distinguish it from the surrounding text"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 8879
},
{
"y": 576,
"height": 8879
},
{
"y": 1152,
"height": 8879
},
{
"y": 1728,
"height": 8879
},
{
"y": 2304,
"height": 8879
},
{
"y": 2880,
"height": 8879
},
{
"y": 3456,
"height": 8879
},
{
"y": 4032,
"height": 8879
},
{
"y": 4608,
"height": 8879
},
{
"y": 5184,
"height": 8879
},
{
"y": 5760,
"height": 8879
},
{
"y": 6336,
"height": 8879
},
{
"y": 6912,
"height": 8879
},
{
"y": 7488,
"height": 8879
},
{
"y": 8064,
"height": 8879
},
{
"y": 8159,
"height": 8879
}
],
"scans": 17,
"max_states": 512,
"settle_ms": 5000,
"page_timeout_seconds": 150,
"layout_stability": "consecutive 100ms size samples within one CSS pixel",
"animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
"interactive_states": "not exercised",
"horizontal_scroll": "not exercised"
}
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Religion and Spirituality" 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: "Religion and Spirituality"
- Description: Religious organizations, spiritual resources, faith communities, and worship services.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Religion and Spirituality" 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: "Community", "Services", "Media".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Religion and Spirituality" category. Consider themes similar to: "Study Groups", "Community Support", "Faith Formation".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "ministry", "spiritual practice", "faith formation".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Contact Pastor", "Learn More", "Attend Event".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Religion and Spirituality" sector. Ideas similar but not limited to: "event registration".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "volunteer opportunities", "community highlights", "inspirational messages".
- **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.