Qwen Qwen3.7 Plus – Society
via Alibaba · Generated
- AIMAC Debt 4.51
- Cost $0.025
- Total Violations 14
- HTML Size 74 KB
- Em Dashes 8
Screenshot
View Live Page
Accessibility Issues Found
14 Serious
-
color-contrast serious 14 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<div class="section-label">Current Issues</div>
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>CivicBridge — Connecting Communities, Catalyzing Change</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Playfair+Display:wght@400;600;700;800&display=swap" rel="stylesheet">
<style>
:root {
--navy: #1a2744;
--navy-light: #2a3f6b;
--amber: #e8a838;
--amber-dark: #d4922a;
--amber-light: #fef3dc;
--teal: #2a9d8f;
--teal-dark: #21867a;
--coral: #e76f51;
--slate: #4a5568;
--gray-100: #f7f8fa;
--gray-200: #edf0f4;
--gray-300: #d1d5db;
--gray-600: #6b7280;
--white: #ffffff;
--shadow-sm: 0 1px 3px rgba(0,0,0,0.08);
--shadow-md: 0 4px 12px rgba(0,0,0,0.1);
--shadow-lg: 0 10px 40px rgba(0,0,0,0.12);
--shadow-xl: 0 20px 60px rgba(0,0,0,0.15);
--radius-sm: 6px;
--radius-md: 12px;
--radius-lg: 20px;
--radius-xl: 28px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
color: var(--navy);
line-height: 1.7;
background: var(--white);
overflow-x: hidden;
}
/* ========== HEADER ========== */
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
background: rgba(255,255,255,0.97);
backdrop-filter: blur(20px);
border-bottom: 1px solid var(--gray-200);
transition: all 0.3s ease;
}
.header.scrolled {
box-shadow: var(--shadow-md);
}
.header-inner {
max-width: 1320px;
margin: 0 auto;
padding: 0 2rem;
display: flex;
align-items: center;
justify-content: space-between;
height: 78px;
}
.logo-area {
display: flex;
align-items: center;
gap: 12px;
text-decoration: none;
}
.logo-area img {
width: 44px;
height: 44px;
border-radius: var(--radius-sm);
}
.logo-text {
display: flex;
flex-direction: column;
}
.logo-text .name {
font-family: 'Playfair Display', serif;
font-size: 1.4rem;
font-weight: 700;
color: var(--navy);
line-height: 1.2;
}
.logo-text .tagline {
font-size: 0.68rem;
color: var(--gray-600);
font-weight: 500;
letter-spacing: 0.5px;
text-transform: uppercase;
}
.nav {
display: flex;
align-items: center;
gap: 2px;
}
.nav a {
text-decoration: none;
color: var(--slate);
font-size: 0.9rem;
font-weight: 500;
padding: 8px 16px;
border-radius: var(--radius-sm);
transition: all 0.2s ease;
position: relative;
}
.nav a:hover {
color: var(--navy);
background: var(--gray-100);
}
.nav a.active {
color: var(--navy);
background: var(--amber-light);
}
.nav-cta {
background: var(--navy) !important;
color: var(--white) !important;
padding: 10px 22px !important;
border-radius: var(--radius-sm) !important;
font-weight: 600 !important;
margin-left: 8px;
}
.nav-cta:hover {
background: var(--navy-light) !important;
color: var(--white) !important;
}
.mobile-toggle {
display: none;
background: none;
border: none;
cursor: pointer;
padding: 8px;
}
.mobile-toggle span {
display: block;
width: 24px;
height: 2px;
background: var(--navy);
margin: 5px 0;
border-radius: 2px;
transition: all 0.3s ease;
}
/* ========== HERO ========== */
.hero {
padding: 140px 2rem 80px;
background: linear-gradient(165deg, var(--navy) 0%, var(--navy-light) 50%, #3d5a99 100%);
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
top: -50%;
right: -20%;
width: 80%;
height: 200%;
background: radial-gradient(ellipse, rgba(232,168,56,0.08) 0%, transparent 70%);
pointer-events: none;
}
.hero::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 120px;
background: linear-gradient(to top, var(--white), transparent);
pointer-events: none;
}
.hero-inner {
max-width: 1320px;
margin: 0 auto;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
position: relative;
z-index: 2;
}
.hero-content h1 {
font-family: 'Playfair Display', serif;
font-size: 3.6rem;
font-weight: 800;
color: var(--white);
line-height: 1.15;
margin-bottom: 1.5rem;
}
.hero-content h1 span {
color: var(--amber);
}
.hero-content p {
font-size: 1.15rem;
color: rgba(255,255,255,0.8);
line-height: 1.8;
margin-bottom: 2rem;
max-width: 520px;
}
.hero-buttons {
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 14px 28px;
border-radius: var(--radius-sm);
font-size: 0.95rem;
font-weight: 600;
text-decoration: none;
transition: all 0.3s ease;
cursor: pointer;
border: none;
}
.btn-primary {
background: var(--amber);
color: var(--navy);
}
.btn-primary:hover {
background: var(--amber-dark);
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(232,168,56,0.3);
}
.btn-secondary {
background: rgba(255,255,255,0.1);
color: var(--white);
border: 1.5px solid rgba(255,255,255,0.3);
}
.btn-secondary:hover {
background: rgba(255,255,255,0.2);
border-color: rgba(255,255,255,0.5);
transform: translateY(-2px);
}
.btn-teal {
background: var(--teal);
color: var(--white);
}
.btn-teal:hover {
background: var(--teal-dark);
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(42,157,143,0.3);
}
.btn-outline {
background: transparent;
color: var(--navy);
border: 2px solid var(--navy);
}
.btn-outline:hover {
background: var(--navy);
color: var(--white);
transform: translateY(-2px);
}
.hero-image {
position: relative;
}
.hero-image img {
width: 100%;
height: 420px;
object-fit: cover;
border-radius: var(--radius-lg);
box-shadow: var(--shadow-xl);
}
.hero-stats {
position: absolute;
bottom: -30px;
left: -20px;
right: -20px;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1px;
background: var(--white);
border-radius: var(--radius-md);
box-shadow: var(--shadow-lg);
overflow: hidden;
}
.hero-stat {
padding: 20px;
text-align: center;
background: var(--white);
}
.hero-stat .number {
font-size: 1.6rem;
font-weight: 800;
color: var(--navy);
line-height: 1;
}
.hero-stat .label {
font-size: 0.75rem;
color: var(--gray-600);
font-weight: 500;
margin-top: 4px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* ========== MAIN LAYOUT ========== */
.main-layout {
max-width: 1320px;
margin: 0 auto;
padding: 0 2rem;
display: grid;
grid-template-columns: 1fr 340px;
gap: 3rem;
}
.main-content {
min-width: 0;
}
/* ========== SECTIONS ========== */
.section {
padding: 80px 0;
}
.section-header {
margin-bottom: 3rem;
}
.section-label {
display: inline-flex;
align-items: center;
gap: 8px;
font-size: 0.78rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1.5px;
color: var(--teal);
margin-bottom: 12px;
}
.section-label::before {
content: '';
width: 24px;
height: 2px;
background: var(--teal);
border-radius: 2px;
}
.section-title {
font-family: 'Playfair Display', serif;
font-size: 2.4rem;
font-weight: 700;
color: var(--navy);
line-height: 1.25;
margin-bottom: 1rem;
}
.section-desc {
font-size: 1.05rem;
color: var(--gray-600);
max-width: 640px;
line-height: 1.8;
}
/* ========== ISSUES SECTION ========== */
.issues-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.issue-card {
background: var(--white);
border: 1px solid var(--gray-200);
border-radius: var(--radius-md);
overflow: hidden;
transition: all 0.3s ease;
}
.issue-card:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-lg);
border-color: transparent;
}
.issue-card img {
width: 100%;
height: 180px;
object-fit: cover;
}
.issue-card-body {
padding: 1.5rem;
}
.issue-tag {
display: inline-block;
font-size: 0.7rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
padding: 4px 10px;
border-radius: 20px;
margin-bottom: 10px;
}
.issue-tag.critical { background: #fde8e8; color: #c53030; }
.issue-tag.active { background: #e6f7f5; color: var(--teal-dark); }
.issue-tag.emerging { background: var(--amber-light); color: var(--amber-dark); }
.issue-card h3 {
font-size: 1.15rem;
font-weight: 700;
margin-bottom: 8px;
color: var(--navy);
}
.issue-card p {
font-size: 0.9rem;
color: var(--gray-600);
line-height: 1.7;
margin-bottom: 1rem;
}
.issue-link {
font-size: 0.85rem;
font-weight: 600;
color: var(--teal);
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 4px;
transition: gap 0.2s ease;
}
.issue-link:hover {
gap: 8px;
}
/* ========== CAMPAIGNS SECTION ========== */
.campaigns-section {
background: var(--gray-100);
border-radius: var(--radius-xl);
padding: 3rem;
margin-bottom: 2rem;
}
.campaign-featured {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2.5rem;
align-items: center;
margin-bottom: 2.5rem;
padding-bottom: 2.5rem;
border-bottom: 1px solid var(--gray-300);
}
.campaign-featured img {
width: 100%;
height: 300px;
object-fit: cover;
border-radius: var(--radius-md);
}
.campaign-featured-content h3 {
font-family: 'Playfair Display', serif;
font-size: 1.8rem;
font-weight: 700;
color: var(--navy);
margin-bottom: 1rem;
}
.campaign-featured-content p {
font-size: 0.95rem;
color: var(--gray-600);
line-height: 1.8;
margin-bottom: 1.5rem;
}
.campaign-progress {
margin-bottom: 1.5rem;
}
.progress-header {
display: flex;
justify-content: space-between;
margin-bottom: 8px;
font-size: 0.85rem;
font-weight: 600;
}
.progress-bar {
height: 8px;
background: var(--gray-200);
border-radius: 10px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, var(--teal), var(--amber));
border-radius: 10px;
transition: width 1s ease;
}
.campaigns-list {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
}
.campaign-item {
background: var(--white);
border-radius: var(--radius-md);
padding: 1.5rem;
border: 1px solid var(--gray-200);
transition: all 0.3s ease;
}
.campaign-item:hover {
box-shadow: var(--shadow-md);
transform: translateY(-2px);
}
.campaign-item .icon {
width: 44px;
height: 44px;
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.3rem;
margin-bottom: 1rem;
}
.campaign-item h4 {
font-size: 1rem;
font-weight: 700;
margin-bottom: 6px;
color: var(--navy);
}
.campaign-item p {
font-size: 0.85rem;
color: var(--gray-600);
line-height: 1.6;
}
/* ========== IMPACT / TESTIMONIALS ========== */
.impact-section {
padding: 80px 0;
}
.impact-stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1.5rem;
margin-bottom: 3rem;
}
.impact-stat-card {
background: var(--white);
border: 1px solid var(--gray-200);
border-radius: var(--radius-md);
padding: 2rem 1.5rem;
text-align: center;
transition: all 0.3s ease;
}
.impact-stat-card:hover {
border-color: var(--teal);
box-shadow: var(--shadow-md);
}
.impact-stat-card .stat-number {
font-size: 2.2rem;
font-weight: 800;
color: var(--navy);
line-height: 1;
margin-bottom: 6px;
}
.impact-stat-card .stat-label {
font-size: 0.82rem;
color: var(--gray-600);
font-weight: 500;
}
.testimonials-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.testimonial-card {
background: var(--white);
border: 1px solid var(--gray-200);
border-radius: var(--radius-md);
padding: 2rem;
position: relative;
}
.testimonial-card::before {
content: '"';
font-family: 'Playfair Display', serif;
font-size: 4rem;
color: var(--amber);
position: absolute;
top: 10px;
left: 20px;
line-height: 1;
opacity: 0.5;
}
.testimonial-card p {
font-size: 0.95rem;
color: var(--slate);
line-height: 1.8;
margin-bottom: 1.5rem;
padding-top: 1.5rem;
font-style: italic;
}
.testimonial-author {
display: flex;
align-items: center;
gap: 12px;
}
.testimonial-author img {
width: 44px;
height: 44px;
border-radius: 50%;
object-fit: cover;
}
.testimonial-author .name {
font-size: 0.9rem;
font-weight: 600;
color: var(--navy);
}
.testimonial-author .role {
font-size: 0.78rem;
color: var(--gray-600);
}
/* ========== EVENT FINDER ========== */
.event-finder {
background: linear-gradient(135deg, var(--navy) 0%, var(--navy-light) 100%);
border-radius: var(--radius-xl);
padding: 3rem;
color: var(--white);
margin-bottom: 2rem;
}
.event-finder h3 {
font-family: 'Playfair Display', serif;
font-size: 1.8rem;
margin-bottom: 0.5rem;
}
.event-finder > p {
color: rgba(255,255,255,0.7);
margin-bottom: 2rem;
font-size: 0.95rem;
}
.event-filters {
display: flex;
gap: 0.75rem;
margin-bottom: 2rem;
flex-wrap: wrap;
}
.event-filter-btn {
padding: 8px 18px;
border-radius: 30px;
border: 1.5px solid rgba(255,255,255,0.25);
background: transparent;
color: rgba(255,255,255,0.8);
font-size: 0.85rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
}
.event-filter-btn:hover,
.event-filter-btn.active {
background: var(--amber);
color: var(--navy);
border-color: var(--amber);
}
.events-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.event-item {
display: grid;
grid-template-columns: 70px 1fr auto;
gap: 1.5rem;
align-items: center;
background: rgba(255,255,255,0.06);
border: 1px solid rgba(255,255,255,0.1);
border-radius: var(--radius-md);
padding: 1.25rem 1.5rem;
transition: all 0.2s ease;
}
.event-item:hover {
background: rgba(255,255,255,0.1);
border-color: rgba(255,255,255,0.2);
}
.event-date {
text-align: center;
background: rgba(255,255,255,0.1);
border-radius: var(--radius-sm);
padding: 10px;
}
.event-date .day {
font-size: 1.4rem;
font-weight: 800;
line-height: 1;
color: var(--amber);
}
.event-date .month {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 1px;
color: rgba(255,255,255,0.7);
font-weight: 600;
}
.event-info h4 {
font-size: 1rem;
font-weight: 600;
margin-bottom: 4px;
}
.event-info p {
font-size: 0.82rem;
color: rgba(255,255,255,0.6);
}
.event-info .event-meta {
display: flex;
gap: 1rem;
margin-top: 4px;
}
.event-info .event-meta span {
font-size: 0.78rem;
color: rgba(255,255,255,0.5);
display: flex;
align-items: center;
gap: 4px;
}
.event-rsvp {
padding: 8px 20px;
border-radius: var(--radius-sm);
background: var(--amber);
color: var(--navy);
font-size: 0.82rem;
font-weight: 700;
border: none;
cursor: pointer;
transition: all 0.2s ease;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.event-rsvp:hover {
background: var(--amber-dark);
transform: scale(1.05);
}
/* ========== FAQ ACCORDION ========== */
.faq-section {
padding: 80px 0;
}
.faq-list {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.faq-item {
border: 1px solid var(--gray-200);
border-radius: var(--radius-md);
overflow: hidden;
transition: all 0.3s ease;
}
.faq-item.open {
border-color: var(--teal);
box-shadow: 0 4px 15px rgba(42,157,143,0.1);
}
.faq-question {
width: 100%;
padding: 1.25rem 1.5rem;
background: var(--white);
border: none;
text-align: left;
font-size: 1rem;
font-weight: 600;
color: var(--navy);
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
gap: 1rem;
transition: all 0.2s ease;
}
.faq-question:hover {
background: var(--gray-100);
}
.faq-question .icon {
width: 28px;
height: 28px;
border-radius: 50%;
background: var(--gray-100);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
transition: all 0.3s ease;
flex-shrink: 0;
}
.faq-item.open .faq-question .icon {
background: var(--teal);
color: var(--white);
transform: rotate(45deg);
}
.faq-answer {
max-height: 0;
overflow: hidden;
transition: max-height 0.4s ease, padding 0.3s ease;
}
.faq-answer-inner {
padding: 0 1.5rem 1.5rem;
font-size: 0.92rem;
color: var(--gray-600);
line-height: 1.8;
}
/* ========== SIDEBAR ========== */
.sidebar {
padding-top: 80px;
}
.sidebar-widget {
background: var(--white);
border: 1px solid var(--gray-200);
border-radius: var(--radius-md);
padding: 1.75rem;
margin-bottom: 1.5rem;
}
.sidebar-widget h4 {
font-size: 1rem;
font-weight: 700;
color: var(--navy);
margin-bottom: 1rem;
padding-bottom: 0.75rem;
border-bottom: 2px solid var(--gray-100);
}
.resource-list {
list-style: none;
}
.resource-list li {
padding: 10px 0;
border-bottom: 1px solid var(--gray-100);
}
.resource-list li:last-child {
border-bottom: none;
}
.resource-list a {
text-decoration: none;
color: var(--slate);
font-size: 0.88rem;
font-weight: 500;
display: flex;
align-items: center;
gap: 8px;
transition: color 0.2s ease;
}
.resource-list a:hover {
color: var(--teal);
}
.resource-list a::before {
content: '→';
color: var(--teal);
font-weight: 700;
}
.mini-calendar {
width: 100%;
}
.mini-calendar .cal-header {
text-align: center;
font-weight: 700;
font-size: 0.9rem;
margin-bottom: 1rem;
color: var(--navy);
}
.mini-calendar .cal-grid {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 2px;
text-align: center;
font-size: 0.75rem;
}
.mini-calendar .cal-day-label {
font-weight: 700;
color: var(--gray-600);
padding: 6px 0;
font-size: 0.68rem;
text-transform: uppercase;
}
.mini-calendar .cal-day {
padding: 6px;
border-radius: 4px;
color: var(--slate);
cursor: pointer;
transition: all 0.2s ease;
}
.mini-calendar .cal-day:hover {
background: var(--gray-100);
}
.mini-calendar .cal-day.has-event {
background: var(--amber-light);
color: var(--amber-dark);
font-weight: 700;
}
.mini-calendar .cal-day.today {
background: var(--teal);
color: var(--white);
font-weight: 700;
}
.mini-calendar .cal-day.empty {
visibility: hidden;
}
.impact-mini {
display: flex;
flex-direction: column;
gap: 1rem;
}
.impact-mini-item {
display: flex;
align-items: center;
gap: 12px;
}
.impact-mini-item .dot {
width: 10px;
height: 10px;
border-radius: 50%;
flex-shrink: 0;
}
.impact-mini-item .text {
font-size: 0.85rem;
color: var(--slate);
}
.impact-mini-item .text strong {
color: var(--navy);
}
.newsletter-widget {
background: linear-gradient(135deg, var(--teal) 0%, var(--teal-dark) 100%);
border: none;
color: var(--white);
}
.newsletter-widget h4 {
color: var(--white);
border-bottom-color: rgba(255,255,255,0.2);
}
.newsletter-widget p {
font-size: 0.88rem;
color: rgba(255,255,255,0.8);
margin-bottom: 1rem;
line-height: 1.6;
}
.newsletter-form {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.newsletter-form input {
padding: 12px 16px;
border-radius: var(--radius-sm);
border: 1.5px solid rgba(255,255,255,0.3);
background: rgba(255,255,255,0.1);
color: var(--white);
font-size: 0.88rem;
outline: none;
transition: all 0.2s ease;
}
.newsletter-form input::placeholder {
color: rgba(255,255,255,0.5);
}
.newsletter-form input:focus {
border-color: var(--amber);
background: rgba(255,255,255,0.15);
}
.newsletter-form button {
padding: 12px;
border-radius: var(--radius-sm);
background: var(--amber);
color: var(--navy);
font-size: 0.88rem;
font-weight: 700;
border: none;
cursor: pointer;
transition: all 0.2s ease;
}
.newsletter-form button:hover {
background: var(--amber-dark);
}
/* ========== CTA BANNER ========== */
.cta-banner {
background: var(--gray-100);
padding: 80px 2rem;
}
.cta-banner-inner {
max-width: 1320px;
margin: 0 auto;
background: linear-gradient(135deg, var(--navy) 0%, #2d4a7a 100%);
border-radius: var(--radius-xl);
padding: 4rem;
display: grid;
grid-template-columns: 1.5fr 1fr;
gap: 3rem;
align-items: center;
position: relative;
overflow: hidden;
}
.cta-banner-inner::before {
content: '';
position: absolute;
top: -50%;
right: -10%;
width: 50%;
height: 200%;
background: radial-gradient(ellipse, rgba(232,168,56,0.1) 0%, transparent 70%);
}
.cta-banner h2 {
font-family: 'Playfair Display', serif;
font-size: 2.4rem;
color: var(--white);
margin-bottom: 1rem;
line-height: 1.3;
}
.cta-banner p {
color: rgba(255,255,255,0.75);
font-size: 1.05rem;
line-height: 1.8;
margin-bottom: 1.5rem;
}
.cta-banner .btn-group {
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
.cta-banner-image {
position: relative;
z-index: 2;
}
.cta-banner-image img {
width: 100%;
height: 280px;
object-fit: cover;
border-radius: var(--radius-md);
}
/* ========== FOOTER ========== */
.footer {
background: var(--navy);
color: rgba(255,255,255,0.7);
padding: 60px 2rem 30px;
}
.footer-inner {
max-width: 1320px;
margin: 0 auto;
}
.footer-grid {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr 1fr;
gap: 3rem;
margin-bottom: 3rem;
padding-bottom: 3rem;
border-bottom: 1px solid rgba(255,255,255,0.1);
}
.footer-brand .footer-logo {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 1rem;
}
.footer-brand .footer-logo img {
width: 36px;
height: 36px;
border-radius: var(--radius-sm);
}
.footer-brand .footer-logo span {
font-family: 'Playfair Display', serif;
font-size: 1.3rem;
font-weight: 700;
color: var(--white);
}
.footer-brand p {
font-size: 0.88rem;
line-height: 1.7;
margin-bottom: 1.5rem;
}
.social-links {
display: flex;
gap: 10px;
}
.social-links a {
width: 38px;
height: 38px;
border-radius: 50%;
background: rgba(255,255,255,0.08);
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
color: rgba(255,255,255,0.7);
font-size: 0.9rem;
transition: all 0.2s ease;
}
.social-links a:hover {
background: var(--amber);
color: var(--navy);
}
.footer-col h5 {
font-size: 0.85rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
color: var(--white);
margin-bottom: 1.25rem;
}
.footer-col ul {
list-style: none;
}
.footer-col ul li {
margin-bottom: 0.6rem;
}
.footer-col ul a {
text-decoration: none;
color: rgba(255,255,255,0.6);
font-size: 0.88rem;
transition: color 0.2s ease;
}
.footer-col ul a:hover {
color: var(--amber);
}
.footer-bottom {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 1rem;
}
.footer-bottom p {
font-size: 0.82rem;
}
.footer-bottom-links {
display: flex;
gap: 1.5rem;
}
.footer-bottom-links a {
font-size: 0.82rem;
color: rgba(255,255,255,0.5);
text-decoration: none;
transition: color 0.2s ease;
}
.footer-bottom-links a:hover {
color: var(--amber);
}
/* ========== RESPONSIVE ========== */
@media (max-width: 1100px) {
.main-layout {
grid-template-columns: 1fr;
}
.sidebar {
padding-top: 0;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
.sidebar-widget {
margin-bottom: 0;
}
}
@media (max-width: 900px) {
.hero-inner {
grid-template-columns: 1fr;
}
.hero-image {
display: none;
}
.hero-content h1 {
font-size: 2.6rem;
}
.issues-grid {
grid-template-columns: 1fr;
}
.campaign-featured {
grid-template-columns: 1fr;
}
.campaigns-list {
grid-template-columns: 1fr;
}
.impact-stats {
grid-template-columns: repeat(2, 1fr);
}
.testimonials-grid {
grid-template-columns: 1fr;
}
.cta-banner-inner {
grid-template-columns: 1fr;
padding: 2.5rem;
}
.cta-banner-image {
display: none;
}
.footer-grid {
grid-template-columns: 1fr 1fr;
}
.nav {
display: none;
}
.mobile-toggle {
display: block;
}
}
@media (max-width: 600px) {
.hero-content h1 {
font-size: 2rem;
}
.section-title {
font-size: 1.8rem;
}
.campaigns-section {
padding: 1.5rem;
}
.event-finder {
padding: 1.5rem;
}
.event-item {
grid-template-columns: 60px 1fr;
}
.event-rsvp {
grid-column: 1 / -1;
text-align: center;
}
.impact-stats {
grid-template-columns: 1fr 1fr;
}
.sidebar {
grid-template-columns: 1fr;
}
.footer-grid {
grid-template-columns: 1fr;
}
.hero-stats {
grid-template-columns: repeat(3, 1fr);
left: 0;
right: 0;
}
}
/* ========== ANIMATIONS ========== */
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
.animate-in {
animation: fadeInUp 0.6s ease forwards;
opacity: 0;
}
.delay-1 { animation-delay: 0.1s; }
.delay-2 { animation-delay: 0.2s; }
.delay-3 { animation-delay: 0.3s; }
.delay-4 { animation-delay: 0.4s; }
</style>
</head>
<body>
<!-- ========== HEADER ========== -->
<header class="header" id="header">
<div class="header-inner">
<a href="#" class="logo-area">
<img src="https://placehold.co/44x44/1a2744/e8a838?text=CB&font=montserrat" alt="CivicBridge Logo">
<div class="logo-text">
<span class="name">CivicBridge</span>
<span class="tagline">Connecting Communities, Catalyzing Change</span>
</div>
</a>
<nav class="nav">
<a href="#issues" class="active">Issues</a>
<a href="#campaigns">Campaigns</a>
<a href="#community">Community</a>
<a href="#events">Events</a>
<a href="#resources">Resources</a>
<a href="#about">About Us</a>
<a href="#contact">Contact</a>
<a href="#donate" class="nav-cta">Donate Now</a>
</nav>
<button class="mobile-toggle" id="mobileToggle" aria-label="Menu">
<span></span>
<span></span>
<span></span>
</button>
</div>
</header>
<!-- ========== HERO ========== -->
<section class="hero">
<div class="hero-inner">
<div class="hero-content">
<h1>Building a More <span>Equitable</span> Society, Together</h1>
<p>CivicBridge is a national coalition dedicated to advancing social justice through grassroots organizing, policy advocacy, and community empowerment. We unite diverse voices to address the systemic challenges that hold our communities back — from housing inequality to educational access, from environmental justice to civic participation.</p>
<div class="hero-buttons">
<a href="#campaigns" class="btn btn-primary">Explore Our Campaigns →</a>
<a href="#community" class="btn btn-secondary">Join the Movement</a>
</div>
</div>
<div class="hero-image">
<img src="https://picsum.photos/600/420?random=1" alt="Community members collaborating at a CivicBridge town hall event">
<div class="hero-stats">
<div class="hero-stat">
<div class="number">2.4M</div>
<div class="label">Lives Impacted</div>
</div>
<div class="hero-stat">
<div class="number">340+</div>
<div class="label">Partner Orgs</div>
</div>
<div class="hero-stat">
<div class="number">48</div>
<div class="label">States Active</div>
</div>
</div>
</div>
</div>
</section>
<!-- ========== MAIN LAYOUT ========== -->
<div class="main-layout">
<main class="main-content">
<!-- ========== CURRENT ISSUES ========== -->
<section class="section" id="issues">
<div class="section-header">
<div class="section-label">Current Issues</div>
<h2 class="section-title">The Challenges We're Confronting</h2>
<p class="section-desc">Our work spans the most pressing social issues of our time. Through coalition building, research-driven advocacy, and direct community engagement, we tackle the root causes of inequality and work to create lasting, systemic change.</p>
</div>
<div class="issues-grid">
<div class="issue-card">
<img src="https://picsum.photos/500/180?random=10" alt="Housing inequality - families in underserved neighborhoods">
<div class="issue-card-body">
<span class="issue-tag critical">Critical</span>
<h3>Housing Equity & Access</h3>
<p>With over 580,000 Americans experiencing homelessness on any given night, the housing crisis demands urgent, multi-faceted intervention. Our coalition advocates for inclusive zoning policies, increased affordable housing funding, and tenant protection legislation at the state and federal levels. We've partnered with 85 local housing authorities to develop community land trusts and cooperative ownership models.</p>
<a href="#" class="issue-link">Learn More →</a>
</div>
</div>
<div class="issue-card">
<img src="https://picsum.photos/500/180?random=11" alt="Educational access and equity in schools">
<div class="issue-card-body">
<span class="issue-tag active">Active Campaign</span>
<h3>Educational Equity</h3>
<p>Every child deserves access to quality education regardless of zip code. Our educational equity initiative addresses the funding gaps, resource disparities, and systemic barriers that disproportionately affect students in marginalized communities. Through our "Bridges to Learning" program, we've secured policy changes in 12 states that redirected over $340 million toward underfunded school districts.</p>
<a href="#" class="issue-link">Learn More →</a>
</div>
</div>
<div class="issue-card">
<img src="https://picsum.photos/500/180?random=12" alt="Environmental justice in frontline communities">
<div class="issue-card-body">
<span class="issue-tag emerging">Emerging Focus</span>
<h3>Environmental Justice</h3>
<p>Frontline communities bear the brunt of environmental degradation — from polluted waterways to industrial proximity. Our environmental justice program combines community organizing with legal advocacy to hold polluters accountable and ensure that the transition to clean energy prioritizes the voices and needs of those most affected. We're building a national network of community environmental monitors.</p>
<a href="#" class="issue-link">Learn More →</a>
</div>
</div>
<div class="issue-card">
<img src="https://picsum.photos/500/180?random=13" alt="Civic participation and voter engagement">
<div class="issue-card-body">
<span class="issue-tag active">Active Campaign</span>
<h3>Civic Participation</h3>
<p>A healthy democracy depends on the active participation of all its people. Our civic engagement team works year-round to expand voter access, combat disenfranchisement, and empower communities with the knowledge and tools they need to make their voices heard. In the last election cycle, our voter registration drives reached 1.2 million previously unregistered citizens across 28 states.</p>
<a href="#" class="issue-link">Learn More →</a>
</div>
</div>
</div>
</section>
<!-- ========== CAMPAIGNS ========== -->
<section class="campaigns-section" id="campaigns">
<div class="section-header">
<div class="section-label">Our Campaigns</div>
<h2 class="section-title">Grassroots Efforts Driving National Change</h2>
<p class="section-desc">From local awareness campaigns to national policy pushes, our initiatives are powered by the collective action of communities across the country. Each campaign is built on deep community engagement, rigorous research, and strategic coalition building.</p>
</div>
<div class="campaign-featured">
<img src="https://picsum.photos/500/300?random=20" alt="Fair Futures campaign - community members at a rally">
<div class="campaign-featured-content">
<span class="issue-tag critical">Flagship Campaign</span>
<h3>Fair Futures: Economic Justice for All</h3>
<p>Our flagship campaign addresses the widening wealth gap through a comprehensive approach that combines living wage advocacy, worker cooperative development, and financial inclusion initiatives. Fair Futures has mobilized over 200,000 advocates, testified before 15 state legislatures, and helped pass landmark wage transparency laws in 8 states. We're building an economy that works for everyone — not just those at the top.</p>
<div class="campaign-progress">
<div class="progress-header">
<span>Fundraising Goal</span>
<span>$1.8M / $2.5M</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 72%"></div>
</div>
</div>
<div style="display: flex; gap: 1rem; flex-wrap: wrap;">
<a href="#" class="btn btn-teal">Donate Now</a>
<a href="#" class="btn btn-outline">Spread Awareness</a>
</div>
</div>
</div>
<div class="campaigns-list">
<div class="campaign-item">
<div class="icon" style="background: #e6f7f5;">🏥</div>
<h4>Health Access Now</h4>
<p>Expanding community health centers and fighting for universal coverage in underserved regions. Over 45 community health fairs organized this year.</p>
</div>
<div class="campaign-item">
<div class="icon" style="background: var(--amber-light);">📚</div>
<h4>Literacy Liberation</h4>
<p>Deploying mobile libraries and after-school tutoring programs in communities with the lowest literacy rates. Serving 18,000+ learners annually.</p>
</div>
<div class="campaign-item">
<div class="icon" style="background: #fde8e8;">⚖️</div>
<h4>Justice Reimagined</h4>
<p>Advocating for criminal justice reform through restorative justice programs, bail reform, and reentry support. Active in 22 states nationwide.</p>
</div>
</div>
</section>
<!-- ========== COMMUNITY IMPACT ========== -->
<section class="impact-section" id="community">
<div class="section-header">
<div class="section-label">Community Impact</div>
<h2 class="section-title">Voices from the Movement</h2>
<p class="section-desc">The true measure of our work is found in the stories of the people and communities we serve. These are the voices that inspire us to push harder, reach further, and never settle for incremental change when transformational progress is possible.</p>
</div>
<div class="impact-stats">
<div class="impact-stat-card">
<div class="stat-number">2.4M</div>
<div class="stat-label">People Reached Through Programs</div>
</div>
<div class="impact-stat-card">
<div class="stat-number">$47M</div>
<div class="stat-label">Community Investment Mobilized</div>
</div>
<div class="impact-stat-card">
<div class="stat-number">156</div>
<div class="stat-label">Policy Wins at State Level</div>
</div>
<div class="impact-stat-card">
<div class="stat-number">89K</div>
<div class="stat-label">Active Volunteers Nationwide</div>
</div>
</div>
<div class="testimonials-grid">
<div class="testimonial-card">
<p>CivicBridge didn't just advocate for our neighborhood — they empowered us to advocate for ourselves. Through their community organizing training, I learned how to speak at city council meetings, build coalitions with other neighborhoods, and actually get results. Our community now has a new health clinic and a renovated park, and we did it ourselves with their guidance.</p>
<div class="testimonial-author">
<img src="https://i.pravatar.cc/44?u=maria1" alt="Maria Santos">
<div>
<div class="name">Maria Santos</div>
<div class="role">Community Organizer, Eastside Coalition</div>
</div>
</div>
</div>
<div class="testimonial-card">
<p>As a policy researcher, I've worked with many advocacy organizations, but CivicBridge stands apart in their ability to translate grassroots energy into concrete legislative outcomes. Their data-driven approach to campaign strategy, combined with genuine community partnership, has produced results that most organizations only dream of achieving.</p>
<div class="testimonial-author">
<img src="https://i.pravatar.cc/44?u=james2" alt="Dr. James Whitfield">
<div>
<div class="name">Dr. James Whitfield</div>
<div class="role">Policy Director, National Equity Institute</div>
</div>
</div>
</div>
</div>
</section>
<!-- ========== EVENT FINDER ========== -->
<section id="events">
<div class="event-finder">
<h3>📅 Find an Event Near You</h3>
<p>Join us at town halls, volunteer days, rallies, and community workshops happening across the country.</p>
<div class="event-filters">
<button class="event-filter-btn active" data-filter="all">All Events</button>
<button class="event-filter-btn" data-filter="townhall">Town Halls</button>
<button class="event-filter-btn" data-filter="volunteer">Volunteer Days</button>
<button class="event-filter-btn" data-filter="workshop">Workshops</button>
<button class="event-filter-btn" data-filter="rally">Rallies</button>
</div>
<div class="events-list" id="eventsList">
<div class="event-item" data-type="townhall">
<div class="event-date">
<div class="day">14</div>
<div class="month">Feb</div>
</div>
<div class="event-info">
<h4>Housing Equity Town Hall</h4>
<p>Join community leaders and policymakers for a discussion on affordable housing solutions.</p>
<div class="event-meta">
<span>📍 Chicago, IL</span>
<span>🕐 6:00 PM CST</span>
</div>
</div>
<button class="event-rsvp">RSVP</button>
</div>
<div class="event-item" data-type="volunteer">
<div class="event-date">
<div class="day">22</div>
<div class="month">Feb</div>
</div>
<div class="event-info">
<h4>Community Cleanup & Garden Build</h4>
<p>Help transform vacant lots into community green spaces in the South Side.</p>
<div class="event-meta">
<span>📍 Atlanta, GA</span>
<span>🕐 9:00 AM EST</span>
</div>
</div>
<button class="event-rsvp">RSVP</button>
</div>
<div class="event-item" data-type="workshop">
<div class="event-date">
<div class="day">03</div>
<div class="month">Mar</div>
</div>
<div class="event-info">
<h4>Know Your Rights: Voter Empowerment Workshop</h4>
<p>Free workshop on voter registration, ID requirements, and protecting your voting rights.</p>
<div class="event-meta">
<span>📍 Houston, TX</span>
<span>🕐 2:00 PM CST</span>
</div>
</div>
<button class="event-rsvp">RSVP</button>
</div>
<div class="event-item" data-type="rally">
<div class="event-date">
<div class="day">15</div>
<div class="month">Mar</div>
</div>
<div class="event-info">
<h4>March for Educational Equity</h4>
<p>Stand with us as we demand fair funding for every school in every neighborhood.</p>
<div class="event-meta">
<span>📍 Washington, DC</span>
<span>🕐 10:00 AM EST</span>
</div>
</div>
<button class="event-rsvp">RSVP</button>
</div>
<div class="event-item" data-type="townhall">
<div class="event-date">
<div class="day">28</div>
<div class="month">Mar</div>
</div>
<div class="event-info">
<h4>Environmental Justice Community Forum</h4>
<p>Hear from frontline communities about pollution impacts and demand accountability.</p>
<div class="event-meta">
<span>📍 Flint, MI</span>
<span>🕐 5:30 PM EST</span>
</div>
</div>
<button class="event-rsvp">RSVP</button>
</div>
</div>
</div>
</section>
<!-- ========== FAQ ========== -->
<section class="faq-section">
<div class="section-header">
<div class="section-label">Common Questions</div>
<h2 class="section-title">Frequently Asked Questions</h2>
<p class="section-desc">Whether you're a potential volunteer, donor, or community partner, we want to make it easy to understand our mission and how you can get involved.</p>
</div>
<div class="faq-list">
<div class="faq-item">
<button class="faq-question">
How does CivicBridge fund its campaigns and programs?
<span class="icon">+</span>
</button>
<div class="faq-answer">
<div class="faq-answer-inner">
CivicBridge is funded through a diverse mix of individual donations, foundation grants, corporate partnerships, and grassroots fundraising events. We maintain full financial transparency — our annual reports, IRS Form 990, and audited financial statements are publicly available on our website. Over 78% of every dollar goes directly to programs and campaign activities, with the remainder supporting essential operational costs and organizational sustainability. We are a registered 501(c)(3) nonprofit organization, and all donations are tax-deductible to the fullest extent allowed by law.
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question">
How can I volunteer or get involved locally?
<span class="icon">+</span>
</button>
<div class="faq-answer">
<div class="faq-answer-inner">
We welcome volunteers at every level of engagement. You can start by attending a local chapter meeting, signing up for our volunteer orientation (held monthly in all 48 active states), or joining one of our digital action teams from home. We also offer a Community Organizing Fellowship for those who want to deepen their skills in grassroots mobilization, coalition building, and policy advocacy. Visit our "Get Involved" page to find your nearest chapter and upcoming opportunities.
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question">
What is CivicBridge's approach to policy advocacy?
<span class="icon">+</span>
</button>
<div class="faq-answer">
<div class="faq-answer-inner">
Our policy work is grounded in community voice and rigorous research. We begin every policy campaign by listening to the communities most affected by the issue at hand — through town halls, surveys, and direct conversations. This community input shapes our policy priorities and proposed solutions. We then work with allied researchers, legal experts, and legislative champions to develop evidence-based policy proposals. Our advocacy strategy combines direct lobbying, public awareness campaigns, grassroots mobilization, and strategic litigation to create pressure from multiple angles simultaneously.
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question">
Can my organization partner with CivicBridge?
<span class="icon">+</span>
</button>
<div class="faq-answer">
<div class="faq-answer-inner">
Absolutely. Coalition building is at the heart of our strategy, and we actively seek partnerships with community-based organizations, academic institutions, legal aid organizations, labor unions, faith communities, and businesses that share our commitment to equity and justice. Partnership models range from co-branded campaign collaboration to shared resource agreements and joint policy initiatives. Contact our partnerships team at partners@civicbridge.org to explore how we can work together to amplify impact in your community.
</div>
</div>
</div>
<div class="faq-item">
<button class="faq-question">
How do you measure the impact of your programs?
<span class="icon">+</span>
</button>
<div class="faq-answer">
<div class="faq-answer-inner">
Impact measurement is central to our organizational discipline. We employ a mixed-methods evaluation framework that combines quantitative metrics (policy outcomes, program participation, community investment dollars mobilized) with qualitative assessments (community voice surveys, storytelling documentation, case studies). Our research team publishes annual impact reports and conducts third-party evaluations of major campaigns. We believe in radical transparency — our data dashboards are publicly accessible, and we openly share both our successes and areas where we need to improve.
</div>
</div>
</div>
</div>
</section>
</main>
<!-- ========== SIDEBAR ========== -->
<aside class="sidebar" id="resources">
<div class="sidebar-widget">
<h4>📖 Resource Guides</h4>
<ul class="resource-list">
<li><a href="#">Community Organizing Toolkit (PDF)</a></li>
<li><a href="#">Know Your Voting Rights Guide</a></li>
<li><a href="#">Tenant Rights by State</a></li>
<li><a href="#">Environmental Justice Handbook</a></li>
<li><a href="#">Policy Advocacy 101</a></li>
<li><a href="#">Starting a Local Chapter Guide</a></li>
</ul>
</div>
<div class="sidebar-widget">
<h4>📅 February 2025</h4>
<div class="mini-calendar">
<div class="cal-grid">
<div class="cal-day-label">Su</div>
<div class="cal-day-label">Mo</div>
<div class="cal-day-label">Tu</div>
<div class="cal-day-label">We</div>
<div class="cal-day-label">Th</div>
<div class="cal-day-label">Fr</div>
<div class="cal-day-label">Sa</div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day empty"></div>
<div class="cal-day">1</div>
<div class="cal-day">2</div>
<div class="cal-day">3</div>
<div class="cal-day">4</div>
<div class="cal-day">5</div>
<div class="cal-day">6</div>
<div class="cal-day">7</div>
<div class="cal-day">8</div>
<div class="cal-day has-event">9</div>
<div class="cal-day">10</div>
<div class="cal-day">11</div>
<div class="cal-day">12</div>
<div class="cal-day">13</div>
<div class="cal-day today">14</div>
<div class="cal-day">15</div>
<div class="cal-day">16</div>
<div class="cal-day">17</div>
<div class="cal-day">18</div>
<div class="cal-day">19</div>
<div class="cal-day">20</div>
<div class="cal-day">21</div>
<div class="cal-day has-event">22</div>
<div class="cal-day">23</div>
<div class="cal-day">24</div>
<div class="cal-day">25</div>
<div class="cal-day">26</div>
<div class="cal-day">27</div>
<div class="cal-day">28</div>
</div>
</div>
<p style="font-size: 0.78rem; color: var(--gray-600); margin-top: 1rem; display: flex; align-items: center; gap: 8px;">
<span style="width:8px;height:8px;background:var(--amber);border-radius:50;display:inline-block;"></span> Event days highlighted
</p>
</div>
<div class="sidebar-widget">
<h4>📊 Community Impact</h4>
<div class="impact-mini">
<div class="impact-mini-item">
<div class="dot" style="background: var(--teal);"></div>
<div class="text"><strong>1,240</strong> voter registrations this month</div>
</div>
<div class="impact-mini-item">
<div class="dot" style="background: var(--amber);"></div>
<div class="text"><strong>$89K</strong> raised for Fair Futures campaign</div>
</div>
<div class="impact-mini-item">
<div class="dot" style="background: var(--coral);"></div>
<div class="text"><strong>34</strong> new community partnerships formed</div>
</div>
<div class="impact-mini-item">
<div class="dot" style="background: var(--navy-light);"></div>
<div class="text"><strong>12</strong> policy briefs published in 2025</div>
</div>
</div>
</div>
<div class="sidebar-widget newsletter-widget">
<h4>✉️ Stay Informed</h4>
<p>Get weekly updates on campaigns, events, and opportunities to make a difference in your community.</p>
<form class="newsletter-form" onsubmit="event.preventDefault(); alert('Thank you for subscribing!');">
<input type="email" placeholder="Your email address" required>
<button type="submit">Subscribe to Newsletter</button>
</form>
</div>
</aside>
</div>
<!-- ========== CTA BANNER ========== -->
<section class="cta-banner" id="donate">
<div class="cta-banner-inner">
<div>
<h2>Your Support Fuels the Movement for Justice</h2>
<p>Every dollar you contribute goes directly toward empowering communities, advancing policy change, and building the infrastructure for a more equitable society. Whether it's $10 or $10,000, your generosity creates ripples of change that reach millions. Join the 47,000+ donors who are investing in a future where every person has the opportunity to thrive.</p>
<div class="btn-group">
<a href="#" class="btn btn-primary">Donate Now →</a>
<a href="#" class="btn btn-secondary">Become a Monthly Supporter</a>
</div>
</div>
<div class="cta-banner-image">
<img src="https://picsum.photos/400/280?random=30" alt="Volunteers making a difference in their community">
</div>
</div>
</section>
<!-- ========== FOOTER ========== -->
<footer class="footer" id="contact">
<div class="footer-inner">
<div class="footer-grid">
<div class="footer-brand">
<div class="footer-logo">
<img src="https://placehold.co/36x36/e8a838/1a2744?text=CB&font=montserrat" alt="CivicBridge">
<span>CivicBridge</span>
</div>
<p>A national coalition connecting communities and catalyzing change through grassroots organizing, policy advocacy, and collective action. Together, we build a more just and equitable society for all.</p>
<div class="social-links">
<a href="#" aria-label="Facebook">f</a>
<a href="#" aria-label="Twitter / X">𝕏</a>
<a href="#" aria-label="Instagram">ig</a>
<a href="#" aria-label="LinkedIn">in</a>
<a href="#" aria-label="YouTube">▶</a>
</div>
</div>
<div class="footer-col">
<h5>Our Work</h5>
<ul>
<li><a href="#">Current Issues</a></li>
<li><a href="#">Active Campaigns</a></li>
<li><a href="#">Policy Platform</a></li>
<li><a href="#">Research & Data</a></li>
<li><a href="#">Impact Reports</a></li>
</ul>
</div>
<div class="footer-col">
<h5>Get Involved</h5>
<ul>
<li><a href="#">Volunteer</a></li>
<li><a href="#">Donate</a></li>
<li><a href="#">Find an Event</a></li>
<li><a href="#">Start a Chapter</a></li>
<li><a href="#">Partner With Us</a></li>
</ul>
</div>
<div class="footer-col">
<h5>Contact</h5>
<ul>
<li><a href="mailto:hello@civicbridge.org">hello@civicbridge.org</a></li>
<li><a href="tel:+12025551234">(202) 555-1234</a></li>
<li><a href="#">1200 K Street NW, Suite 400<br>Washington, DC 20005</a></li>
<li><a href="#">Press Inquiries</a></li>
<li><a href="#">Careers</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>© 2025 CivicBridge. All rights reserved. EIN: 84-2847391. A 501(c)(3) nonprofit organization.</p>
<div class="footer-bottom-links">
<a href="#">Privacy Policy</a>
<a href="#">Terms of Service</a>
<a href="#">Accessibility</a>
<a href="#">Sitemap</a>
</div>
</div>
</div>
</footer>
<!-- ========== JAVASCRIPT ========== -->
<script>
// Header scroll effect
const header = document.getElementById('header');
window.addEventListener('scroll', () => {
if (window.scrollY > 50) {
header.classList.add('scrolled');
} else {
header.classList.remove('scrolled');
}
});
// FAQ Accordion
document.querySelectorAll('.faq-question').forEach(button => {
button.addEventListener('click', () => {
const item = button.parentElement;
const answer = item.querySelector('.faq-answer');
const isOpen = item.classList.contains('open');
// Close all
document.querySelectorAll('.faq-item').forEach(faq => {
faq.classList.remove('open');
faq.querySelector('.faq-answer').style.maxHeight = null;
});
// Open clicked (if wasn't open)
if (!isOpen) {
item.classList.add('open');
answer.style.maxHeight = answer.scrollHeight + 'px';
}
});
});
// Event Filter
document.querySelectorAll('.event-filter-btn').forEach(btn => {
btn.addEventListener('click', () => {
// Update active state
document.querySelectorAll('.event-filter-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
const filter = btn.dataset.filter;
const events = document.querySelectorAll('.event-item');
events.forEach(event => {
if (filter === 'all' || event.dataset.type === filter) {
event.style.display = 'grid';
event.style.animation = 'fadeInUp 0.4s ease forwards';
} else {
event.style.display = 'none';
}
});
});
});
// RSVP button interaction
document.querySelectorAll('.event-rsvp').forEach(btn => {
btn.addEventListener('click', () => {
const originalText = btn.textContent;
btn.textContent = '✓ Registered!';
btn.style.background = 'var(--teal)';
btn.style.color = 'white';
setTimeout(() => {
btn.textContent = originalText;
btn.style.background = '';
btn.style.color = '';
}, 2000);
});
});
// Smooth scroll for nav links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
const href = this.getAttribute('href');
if (href !== '#') {
e.preventDefault();
const target = document.querySelector(href);
if (target) {
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
}
});
});
// Intersection Observer for animations
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.animation = 'fadeInUp 0.6s ease forwards';
observer.unobserve(entry.target);
}
});
}, observerOptions);
document.querySelectorAll('.issue-card, .campaign-item, .impact-stat-card, .testimonial-card').forEach(el => {
el.style.opacity = '0';
observer.observe(el);
});
</script>
</body>
</html>
View Axe Report (JSON)
{
"testEngine": {
"name": "axe-core",
"version": "4.10.2"
},
"testRunner": {
"name": "axe"
},
"testEnvironment": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
"windowWidth": 1280,
"windowHeight": 720,
"orientationAngle": 0,
"orientationType": "landscape-primary"
},
"timestamp": "2026-11-12T09:43:12.561Z",
"url": "https://benchmark.aimac.invalid/2fd5ed466653e9566174e428b6564bb8479b3e365e9a905cea251168cfc76464.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": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "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": "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": []
},
{
"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": "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": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "select-name",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure select element has an accessible name",
"help": "Select element must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-allowed-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attributes are used correctly for the defined role"
}
],
"none": [
{
"id": "aria-unsupported-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute is supported"
}
],
"impact": null,
"html": "<a href=\"#\" aria-label=\"Facebook\">f</a>",
"target": [
"a[aria-label=\"Facebook\"]"
]
}
]
},
{
"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 href=\"#\" aria-label=\"Facebook\">f</a>",
"target": [
"a[aria-label=\"Facebook\"]"
]
}
]
},
{
"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": "<a href=\"#\" aria-label=\"Facebook\">f</a>",
"target": [
"a[aria-label=\"Facebook\"]"
]
}
]
},
{
"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 href=\"#\" aria-label=\"Facebook\">f</a>",
"target": [
"a[aria-label=\"Facebook\"]"
]
}
]
},
{
"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 href=\"#\" aria-label=\"Facebook\">f</a>",
"target": [
"a[aria-label=\"Facebook\"]"
]
}
]
},
{
"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": "<div class=\"progress-fill\" style=\"width: 72%\"></div>",
"target": [
".progress-fill"
]
}
]
},
{
"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=\"event-filter-btn active\" data-filter=\"all\">All Events</button>",
"target": [
"button[data-filter=\"all\"]"
]
}
]
},
{
"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>Building a More <span>Equitable</span> Society, Together</h1>",
"target": [
"h1"
]
},
{
"html": "<h2 class=\"section-title\">The Challenges We're Confronting</h2>",
"target": [
"#issues > .section-header > .section-title"
]
},
{
"html": "<h3>Housing Equity & Access</h3>",
"target": [
".issue-card:nth-child(1) > .issue-card-body > h3"
]
},
{
"html": "<h3>Educational Equity</h3>",
"target": [
".issue-card:nth-child(2) > .issue-card-body > h3"
]
},
{
"html": "<h3>Environmental Justice</h3>",
"target": [
".issue-card:nth-child(3) > .issue-card-body > h3"
]
},
{
"html": "<h3>Civic Participation</h3>",
"target": [
".issue-card:nth-child(4) > .issue-card-body > h3"
]
},
{
"html": "<h2 class=\"section-title\">Grassroots Efforts Driving National Change</h2>",
"target": [
"#campaigns > .section-header > .section-title"
]
},
{
"html": "<h3>Fair Futures: Economic Justice for All</h3>",
"target": [
".campaign-featured-content > h3"
]
},
{
"html": "<h4>Health Access Now</h4>",
"target": [
".campaign-item:nth-child(1) > h4"
]
},
{
"html": "<h4>Literacy Liberation</h4>",
"target": [
".campaign-item:nth-child(2) > h4"
]
},
{
"html": "<h4>Justice Reimagined</h4>",
"target": [
".campaign-item:nth-child(3) > h4"
]
},
{
"html": "<h2 class=\"section-title\">Voices from the Movement</h2>",
"target": [
"#community > .section-header > .section-title"
]
},
{
"html": "<h3>\ud83d\udcc5 Find an Event Near You</h3>",
"target": [
".event-finder > h3"
]
},
{
"html": "<h4>Housing Equity Town Hall</h4>",
"target": [
".event-item[data-type=\"townhall\"]:nth-child(1) > .event-info > h4"
]
},
{
"html": "<h4>Community Cleanup & Garden Build</h4>",
"target": [
"div[data-type=\"volunteer\"] > .event-info > h4"
]
},
{
"html": "<h4>Know Your Rights: Voter Empowerment Workshop</h4>",
"target": [
"div[data-type=\"workshop\"] > .event-info > h4"
]
},
{
"html": "<h4>March for Educational Equity</h4>",
"target": [
"div[data-type=\"rally\"] > .event-info > h4"
]
},
{
"html": "<h4>Environmental Justice Community Forum</h4>",
"target": [
".event-item[data-type=\"townhall\"]:nth-child(5) > .event-info > h4"
]
},
{
"html": "<h2 class=\"section-title\">Frequently Asked Questions</h2>",
"target": [
".faq-section > .section-header > .section-title"
]
},
{
"html": "<h4>\ud83d\udcd6 Resource Guides</h4>",
"target": [
".sidebar-widget:nth-child(1) > h4"
]
},
{
"html": "<h4>\ud83d\udcc5 February 2025</h4>",
"target": [
".sidebar-widget:nth-child(2) > h4"
]
},
{
"html": "<h4>\ud83d\udcca Community Impact</h4>",
"target": [
".sidebar-widget:nth-child(3) > h4"
]
},
{
"html": "<h4>\u2709\ufe0f Stay Informed</h4>",
"target": [
".newsletter-widget > h4"
]
},
{
"html": "<h2>Your Support Fuels the Movement for Justice</h2>",
"target": [
".cta-banner-inner > div:nth-child(1) > h2"
]
},
{
"html": "<h5>Our Work</h5>",
"target": [
".footer-col:nth-child(2) > h5"
]
},
{
"html": "<h5>Get Involved</h5>",
"target": [
".footer-col:nth-child(3) > h5"
]
},
{
"html": "<h5>Contact</h5>",
"target": [
".footer-col:nth-child(4) > h5"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main class=\"main-content\">",
"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": "#1a2744",
"bgColor": "#fef3dc",
"contrastRatio": 13.45,
"fontSize": "10.8pt (14.4px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 13.45"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#issues\" class=\"active\">Issues</a>",
"target": [
"a[href$=\"#issues\"]"
]
}
]
},
{
"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": "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": [],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<input type=\"email\" placeholder=\"Your email address\" required=\"\">",
"target": [
"input"
]
}
]
},
{
"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/44x44/1a2744/e8a838?text=CB&font=montserrat\" alt=\"CivicBridge Logo\">",
"target": [
"img[alt=\"CivicBridge 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": "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=\"email\" placeholder=\"Your email address\" required=\"\">",
"target": [
"input"
]
}
]
},
{
"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 href=\"#\" class=\"logo-area\">",
"target": [
".logo-area"
]
}
]
},
{
"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 class=\"resource-list\">",
"target": [
".resource-list"
]
}
]
},
{
"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=\"#\">Community Organizing Toolkit (PDF)</a></li>",
"target": [
".resource-list > 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/44x44/1a2744/e8a838?text=CB&font=montserrat\" alt=\"CivicBridge Logo\">",
"target": [
"img[alt=\"CivicBridge Logo\"]"
]
}
]
},
{
"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": 355.8,
"height": 45.4
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (355.8px by 45.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 href=\"#\" class=\"logo-area\">",
"target": [
".logo-area"
]
}
]
}
],
"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": "16.8pt (22.4px)",
"fontWeight": "bold",
"messageKey": "bgGradient",
"expectedContrastRatio": "3:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header class=\"header\" id=\"header\">",
"target": [
"#header"
]
},
{
"html": "<section class=\"hero\">",
"target": [
".hero"
]
}
],
"impact": "serious",
"message": "Element's background color could not be determined due to a background gradient"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"name\">CivicBridge</span>",
"target": [
".logo-text > .name"
],
"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": "#2a9d8f",
"bgColor": "#ffffff",
"contrastRatio": 3.32,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-label\">Current Issues</div>",
"target": [
"#issues > .section-header > .section-label"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#2a9d8f",
"bgColor": "#f7f8fa",
"contrastRatio": 3.12,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"campaigns-section\" id=\"campaigns\">",
"target": [
"#campaigns"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.12 (foreground color: #2a9d8f, background color: #f7f8fa, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-label\">Our Campaigns</div>",
"target": [
"#campaigns > .section-header > .section-label"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.12 (foreground color: #2a9d8f, background color: #f7f8fa, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#2a9d8f",
"contrastRatio": 3.32,
"fontSize": "11.4pt (15.2px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#\" class=\"btn btn-teal\">Donate Now</a>",
"target": [
".btn-teal"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #ffffff, background color: #2a9d8f, font size: 11.4pt (15.2px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"btn btn-teal\">Donate Now</a>",
"target": [
".btn-teal"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #ffffff, background color: #2a9d8f, font size: 11.4pt (15.2px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#2a9d8f",
"bgColor": "#ffffff",
"contrastRatio": 3.32,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-label\">Community Impact</div>",
"target": [
"#community > .section-header > .section-label"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#2a9d8f",
"bgColor": "#ffffff",
"contrastRatio": 3.32,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-label\">Common Questions</div>",
"target": [
".faq-section > .section-header > .section-label"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#2a9d8f",
"contrastRatio": 3.32,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"cal-day today\">14</div>",
"target": [
".today"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #ffffff, background color: #2a9d8f, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"cal-day today\">14</div>",
"target": [
".today"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #ffffff, background color: #2a9d8f, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d4922a",
"bgColor": "#fef3dc",
"contrastRatio": 2.4,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"cal-day has-event\">22</div>",
"target": [
".has-event.cal-day:nth-child(35)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.4 (foreground color: #d4922a, background color: #fef3dc, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"cal-day has-event\">22</div>",
"target": [
".has-event.cal-day:nth-child(35)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.4 (foreground color: #d4922a, background color: #fef3dc, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#2a9d8f",
"bgColor": "#ffffff",
"contrastRatio": 3.32,
"fontSize": "10.2pt (13.6px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"issue-card\" style=\"opacity: 0; animation: 0.6s ease 0s 1 normal forwards running fadeInUp;\">",
"target": [
".issue-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 10.2pt (13.6px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"issue-link\">Learn More \u2192</a>",
"target": [
".issue-card:nth-child(1) > .issue-card-body > .issue-link[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 10.2pt (13.6px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#21867a",
"bgColor": "#e6f7f5",
"contrastRatio": 3.99,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"issue-tag active\">Active Campaign</span>",
"target": [
".issue-card:nth-child(2) > .issue-card-body > .active.issue-tag"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.99 (foreground color: #21867a, background color: #e6f7f5, font size: 8.4pt (11.2px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"issue-tag active\">Active Campaign</span>",
"target": [
".issue-card:nth-child(2) > .issue-card-body > .active.issue-tag"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.99 (foreground color: #21867a, background color: #e6f7f5, font size: 8.4pt (11.2px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#2a9d8f",
"bgColor": "#ffffff",
"contrastRatio": 3.32,
"fontSize": "10.2pt (13.6px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"issue-card\" style=\"opacity: 0; animation: 0.6s ease 0s 1 normal forwards running fadeInUp;\">",
"target": [
".issue-card:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 10.2pt (13.6px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"issue-link\">Learn More \u2192</a>",
"target": [
".issue-card:nth-child(2) > .issue-card-body > .issue-link[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 10.2pt (13.6px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d4922a",
"bgColor": "#fef3dc",
"contrastRatio": 2.4,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"issue-tag emerging\">Emerging Focus</span>",
"target": [
".emerging"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.4 (foreground color: #d4922a, background color: #fef3dc, font size: 8.4pt (11.2px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"issue-tag emerging\">Emerging Focus</span>",
"target": [
".emerging"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.4 (foreground color: #d4922a, background color: #fef3dc, font size: 8.4pt (11.2px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#2a9d8f",
"bgColor": "#ffffff",
"contrastRatio": 3.32,
"fontSize": "10.2pt (13.6px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"issue-card\" style=\"opacity: 0; animation: 0.6s ease 0s 1 normal forwards running fadeInUp;\">",
"target": [
".issue-card:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 10.2pt (13.6px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"issue-link\">Learn More \u2192</a>",
"target": [
".issue-card:nth-child(3) > .issue-card-body > .issue-link[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 10.2pt (13.6px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#21867a",
"bgColor": "#e6f7f5",
"contrastRatio": 3.99,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"issue-tag active\">Active Campaign</span>",
"target": [
".issue-card:nth-child(4) > .issue-card-body > .active.issue-tag"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.99 (foreground color: #21867a, background color: #e6f7f5, font size: 8.4pt (11.2px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"issue-tag active\">Active Campaign</span>",
"target": [
".issue-card:nth-child(4) > .issue-card-body > .active.issue-tag"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.99 (foreground color: #21867a, background color: #e6f7f5, font size: 8.4pt (11.2px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#2a9d8f",
"bgColor": "#ffffff",
"contrastRatio": 3.32,
"fontSize": "10.2pt (13.6px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"issue-card\" style=\"opacity: 0; animation: 0.6s ease 0s 1 normal forwards running fadeInUp;\">",
"target": [
".issue-card:nth-child(4)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 10.2pt (13.6px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"issue-link\">Learn More \u2192</a>",
"target": [
".issue-card:nth-child(4) > .issue-card-body > .issue-link[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.32 (foreground color: #2a9d8f, background color: #ffffff, font size: 10.2pt (13.6px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 7761
},
{
"y": 576,
"height": 7761
},
{
"y": 1152,
"height": 7761
},
{
"y": 1728,
"height": 7761
},
{
"y": 2304,
"height": 7761
},
{
"y": 2880,
"height": 7761
},
{
"y": 3456,
"height": 7761
},
{
"y": 4032,
"height": 7761
},
{
"y": 4608,
"height": 7761
},
{
"y": 5184,
"height": 7761
},
{
"y": 5760,
"height": 7761
},
{
"y": 6336,
"height": 7761
},
{
"y": 6912,
"height": 7761
},
{
"y": 7041,
"height": 7761
}
],
"scans": 15,
"max_states": 512,
"settle_ms": 5000,
"page_timeout_seconds": 150,
"layout_stability": "consecutive 100ms size samples within one CSS pixel",
"animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
"interactive_states": "not exercised",
"horizontal_scroll": "not exercised"
}
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Society" sector.
Your goal is to generate the full HTML code for a page that is not just functional but also visually compelling, content-rich, and feels like a finished product ready for launch.
**Client & Category:**
- Industry: "Society"
- Description: Social issues, advocacy, cultural organizations, and community initiatives.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Society" category.
2. **Define Page:** Determine the most effective primary page type (e.g., homepage, service landing page, category portal) to showcase this fictional entity.
3. **Design:** Develop an opinionated, modern, and professional layout. Make distinct choices about structure and flow.
**Content & Structure Requirements (Deliver a COMPLETE page):**
- **Overall:** The final page must feel substantial and complete, with realistic amounts of text (multiple paragraphs per section where appropriate, avoid single sentences), well-integrated placeholder images, and logical flow. It should look like a real website a business would proudly use.
- **HEADER:** Include the invented site name, tagline, a logo placeholder image, and a primary navigation bar. Ensure the navigation has **at least 5-7 clearly defined, relevant links** including: "Issues", "Campaigns", "Community".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Society" category. Consider themes similar to: "Current Issues", "Grassroots Efforts", "Policy Impact".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "coalition building", "community organizing", "awareness campaign".
- **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", "Donate Now", "Spread Awareness".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Society" sector. Ideas similar but not limited to: "event finder".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "resource guides", "community impact", "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.