Anthropic Claude Opus 5.5 – Non Profit Charity
via Azure · Generated
- AIMAC Debt 10.62
- Cost $0.51
- Total Violations 46
- HTML Size 58 KB
- Em Dashes 15
Screenshot
View Live Page
Accessibility Issues Found
1 Critical 45 Serious
-
aria-required-children critical 1 instance
Certain ARIA roles must contain particular children
Example HTML
<div class="toggle" role="tablist"> <button type="button" class="active" data-freq="once">One-time</button> <button type="butto... -
color-contrast serious 45 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<a href="#give" class="btn btn-primary">Give Now</a>
Artifacts
View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kindred Harbor Foundation | Where generosity finds its way home</title>
<meta name="description" content="Kindred Harbor Foundation funds community programs in food security, youth mentorship, housing stability and elder care. Give, volunteer, and see your impact.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600;9..144,700&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
:root{
--forest:#1f3d36;
--forest-2:#2b5249;
--terra:#d9653b;
--terra-dark:#b94f29;
--sun:#f2b544;
--cream:#f7f1e8;
--sand:#efe5d6;
--ink:#1d2421;
--muted:#5d6763;
--line:#e2d8c8;
--white:#ffffff;
--radius:18px;
--shadow:0 14px 40px -18px rgba(31,61,54,.35);
--serif:'Fraunces', Georgia, serif;
--sans:'Inter', system-ui, -apple-system, Segoe UI, sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:var(--sans);color:var(--ink);background:var(--cream);line-height:1.65;font-size:16.5px}
img{max-width:100%;display:block}
a{color:inherit}
.container{width:min(1200px,92%);margin-inline:auto}
h1,h2,h3,h4{font-family:var(--serif);line-height:1.15;color:var(--forest);font-weight:600}
h2{font-size:clamp(2rem,3.4vw,2.8rem);margin-bottom:1rem}
h3{font-size:1.3rem;margin-bottom:.5rem}
p+p{margin-top:1rem}
.eyebrow{display:inline-block;font-size:.78rem;letter-spacing:.14em;text-transform:uppercase;font-weight:700;color:var(--terra);margin-bottom:.9rem}
.lead{font-size:1.12rem;color:var(--muted);max-width:62ch}
section{padding:96px 0}
.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.9rem 1.6rem;border-radius:999px;font-weight:600;text-decoration:none;border:2px solid transparent;cursor:pointer;font-size:.98rem;transition:.2s ease;font-family:var(--sans)}
.btn-primary{background:var(--terra);color:#fff}
.btn-primary:hover{background:var(--terra-dark);transform:translateY(-2px)}
.btn-outline{border-color:var(--forest);color:var(--forest);background:transparent}
.btn-outline:hover{background:var(--forest);color:#fff}
.btn-light{background:#fff;color:var(--forest)}
.btn-light:hover{background:var(--sun)}
.section-head{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;flex-wrap:wrap;margin-bottom:3rem}
/* Utility bar */
.utility{background:var(--forest);color:#d8e4df;font-size:.85rem}
.utility .container{display:flex;justify-content:space-between;align-items:center;padding:.55rem 0;gap:1rem;flex-wrap:wrap}
.utility a{color:#fff;text-decoration:none;font-weight:600}
.utility .pill{background:var(--sun);color:var(--forest);padding:.1rem .6rem;border-radius:999px;font-weight:700;font-size:.72rem;margin-right:.5rem}
/* Header */
header.site{position:sticky;top:0;z-index:50;background:rgba(247,241,232,.95);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.nav-wrap{display:flex;align-items:center;justify-content:space-between;padding:.9rem 0;gap:1.5rem}
.brand{display:flex;align-items:center;gap:.8rem;text-decoration:none}
.brand img{width:52px;height:52px;border-radius:14px}
.brand strong{display:block;font-family:var(--serif);font-size:1.3rem;color:var(--forest);line-height:1.1}
.brand span{font-size:.78rem;color:var(--muted);font-style:italic}
nav.primary ul{display:flex;list-style:none;gap:1.4rem;align-items:center}
nav.primary a{text-decoration:none;font-weight:500;font-size:.95rem;color:var(--ink);position:relative;padding:.3rem 0}
nav.primary a:not(.btn)::after{content:"";position:absolute;left:0;bottom:-2px;height:2px;width:0;background:var(--terra);transition:.25s}
nav.primary a:not(.btn):hover::after{width:100%}
.menu-toggle{display:none;background:none;border:2px solid var(--forest);border-radius:10px;padding:.45rem .7rem;font-weight:700;color:var(--forest);cursor:pointer}
/* Hero */
.hero{padding:72px 0 96px;position:relative;overflow:hidden}
.hero-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:4rem;align-items:center}
.hero h1{font-size:clamp(2.6rem,5.4vw,4.4rem);letter-spacing:-.01em;margin-bottom:1.3rem}
.hero h1 em{font-style:italic;color:var(--terra)}
.hero-actions{display:flex;gap:1rem;flex-wrap:wrap;margin:2rem 0}
.trust{display:flex;align-items:center;gap:1rem;font-size:.9rem;color:var(--muted)}
.avatars{display:flex}
.avatars img{width:40px;height:40px;border-radius:50%;border:3px solid var(--cream);margin-left:-10px}
.avatars img:first-child{margin-left:0}
.collage{position:relative;height:540px}
.collage .c1{position:absolute;right:0;top:0;width:78%;height:78%;object-fit:cover;border-radius:28px 28px 28px 120px;box-shadow:var(--shadow)}
.collage .c2{position:absolute;left:0;bottom:0;width:48%;height:46%;object-fit:cover;border-radius:24px;border:8px solid var(--cream);box-shadow:var(--shadow)}
.campaign-card{position:absolute;right:4%;bottom:2%;width:56%;background:#fff;border-radius:var(--radius);padding:1.2rem 1.3rem;box-shadow:var(--shadow)}
.campaign-card small{color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.1em;font-weight:600}
.campaign-card h4{font-size:1.05rem;margin:.2rem 0 .7rem}
.bar{height:10px;background:var(--sand);border-radius:99px;overflow:hidden}
.bar span{display:block;height:100%;background:linear-gradient(90deg,var(--terra),var(--sun));border-radius:99px;transition:width 1s ease}
.bar-meta{display:flex;justify-content:space-between;font-size:.82rem;margin-top:.5rem;color:var(--muted)}
.bar-meta b{color:var(--forest)}
/* Stats */
.stats{background:var(--forest);color:#fff;padding:64px 0}
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem}
.stat{border-left:2px solid rgba(255,255,255,.18);padding-left:1.4rem}
.stat .num{font-family:var(--serif);font-size:clamp(2.2rem,3.6vw,3.2rem);color:var(--sun);line-height:1}
.stat p{color:#c9d8d2;font-size:.95rem;margin-top:.5rem}
/* Mission */
.mission-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:4.5rem;align-items:center}
.mission-img{position:relative}
.mission-img img{border-radius:var(--radius);box-shadow:var(--shadow);width:100%;height:560px;object-fit:cover}
.quote-badge{position:absolute;left:-28px;bottom:40px;background:var(--terra);color:#fff;padding:1.4rem;border-radius:var(--radius);max-width:260px;font-family:var(--serif);font-size:1.1rem;line-height:1.35;box-shadow:var(--shadow)}
.values{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem;margin-top:2rem}
.value{background:#fff;border:1px solid var(--line);border-radius:14px;padding:1.1rem 1.2rem}
.value b{display:block;color:var(--forest);margin-bottom:.25rem}
.value p{font-size:.92rem;color:var(--muted)}
/* Programs */
.programs{background:#fff}
.program-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.6rem}
.program{background:var(--cream);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;transition:.25s;border:1px solid var(--line)}
.program:hover{transform:translateY(-6px);box-shadow:var(--shadow)}
.program img{height:200px;width:100%;object-fit:cover}
.program-body{padding:1.5rem;display:flex;flex-direction:column;flex:1}
.tag{display:inline-block;font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;background:var(--sand);color:var(--forest-2);padding:.25rem .65rem;border-radius:99px;margin-bottom:.8rem;align-self:flex-start}
.program p{color:var(--muted);font-size:.95rem;flex:1}
.program .metric{margin-top:1.1rem;padding-top:1rem;border-top:1px dashed var(--line);font-size:.88rem;display:flex;justify-content:space-between}
.program .metric b{color:var(--terra)}
/* Calculator */
.give{background:linear-gradient(135deg,var(--forest) 0%,#16302a 100%);color:#fff;position:relative;overflow:hidden}
.give::before{content:"";position:absolute;width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,rgba(242,181,68,.18),transparent 70%);right:-120px;top:-160px}
.give h2{color:#fff}
.give .lead{color:#c9d8d2}
.give-grid{display:grid;grid-template-columns:1fr 1fr;gap:3rem;align-items:start;position:relative}
.calc{background:#fff;color:var(--ink);border-radius:24px;padding:2rem;box-shadow:0 30px 60px -30px rgba(0,0,0,.6)}
.toggle{display:grid;grid-template-columns:1fr 1fr;background:var(--sand);padding:4px;border-radius:999px;margin-bottom:1.5rem}
.toggle button{border:none;background:transparent;padding:.65rem;border-radius:999px;font-weight:600;cursor:pointer;color:var(--muted);font-family:var(--sans)}
.toggle button.active{background:var(--forest);color:#fff}
.label{font-weight:600;font-size:.9rem;margin-bottom:.6rem;display:block;color:var(--forest)}
.presets{display:grid;grid-template-columns:repeat(4,1fr);gap:.6rem;margin-bottom:1rem}
.presets button{border:2px solid var(--line);background:#fff;border-radius:12px;padding:.7rem 0;font-weight:700;cursor:pointer;color:var(--forest);font-family:var(--sans);transition:.15s}
.presets button.active,.presets button:hover{border-color:var(--terra);color:var(--terra)}
.amount-row{display:flex;align-items:center;gap:1rem;margin-bottom:1.5rem}
input[type=range]{flex:1;accent-color:var(--terra)}
.amount-display{font-family:var(--serif);font-size:1.8rem;color:var(--forest);min-width:110px;text-align:right}
select{width:100%;padding:.8rem 1rem;border:2px solid var(--line);border-radius:12px;font-family:var(--sans);font-size:.95rem;background:#fff;margin-bottom:1.5rem;color:var(--ink)}
.impact-out{background:var(--cream);border-radius:16px;padding:1.3rem;margin-bottom:1.4rem;border-left:5px solid var(--terra)}
.impact-out .big{font-family:var(--serif);font-size:1.5rem;color:var(--forest);line-height:1.25}
.impact-out p{font-size:.88rem;color:var(--muted);margin-top:.4rem}
.calc .btn{width:100%;justify-content:center}
.calc .fine{font-size:.78rem;color:var(--muted);text-align:center;margin-top:.8rem}
.tracker{margin-top:2rem;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);border-radius:18px;padding:1.5rem}
.tracker h4{color:#fff;font-size:1.1rem;margin-bottom:.8rem}
.tracker .bar{background:rgba(255,255,255,.15);height:14px}
.tracker .bar-meta{color:#c9d8d2}
.tracker .bar-meta b{color:var(--sun)}
.recent-gifts{list-style:none;margin-top:1.2rem;font-size:.88rem;color:#d8e4df}
.recent-gifts li{display:flex;justify-content:space-between;padding:.45rem 0;border-bottom:1px solid rgba(255,255,255,.08)}
.recent-gifts li.new{animation:flash 1.6s ease}
@keyframes flash{0%{background:rgba(242,181,68,.35)}100%{background:transparent}}
.checks{list-style:none;margin-top:1.6rem}
.checks li{padding-left:1.8rem;position:relative;margin-bottom:.7rem;color:#d8e4df}
.checks li::before{content:"✓";position:absolute;left:0;color:var(--sun);font-weight:700}
/* Stories */
.story-feature{display:grid;grid-template-columns:1.1fr 1fr;background:#fff;border-radius:24px;overflow:hidden;box-shadow:var(--shadow);margin-bottom:2.5rem}
.story-feature img{height:100%;min-height:420px;object-fit:cover;width:100%}
.story-feature .body{padding:3rem}
.story-feature blockquote{font-family:var(--serif);font-size:1.45rem;line-height:1.4;color:var(--forest);margin:1rem 0 1.4rem}
.story-feature p{color:var(--muted)}
.testi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5rem}
.testi{background:#fff;border-radius:var(--radius);padding:1.8rem;border:1px solid var(--line);position:relative}
.testi::before{content:"“";font-family:var(--serif);font-size:4.5rem;color:var(--terra);opacity:.25;position:absolute;top:-.3rem;right:1.2rem;line-height:1}
.testi p{color:var(--ink);font-size:.97rem}
.person{display:flex;align-items:center;gap:.8rem;margin-top:1.3rem}
.person img{width:48px;height:48px;border-radius:50%}
.person b{display:block;font-size:.95rem;color:var(--forest)}
.person span{font-size:.8rem;color:var(--muted)}
/* Blog + sidebar */
.news{background:#fff}
.news-layout{display:grid;grid-template-columns:2fr 1fr;gap:3rem}
.posts{display:grid;gap:1.8rem}
.post{display:grid;grid-template-columns:240px 1fr;gap:1.5rem;align-items:start;padding-bottom:1.8rem;border-bottom:1px solid var(--line)}
.post img{border-radius:14px;height:170px;width:100%;object-fit:cover}
.post .meta{font-size:.8rem;color:var(--muted);margin-bottom:.4rem}
.post h3 a{text-decoration:none}
.post h3 a:hover{color:var(--terra)}
.post p{font-size:.94rem;color:var(--muted)}
.readmore{display:inline-block;margin-top:.6rem;font-weight:600;color:var(--terra);text-decoration:none;font-size:.9rem}
aside .widget{background:var(--cream);border-radius:var(--radius);padding:1.6rem;margin-bottom:1.5rem;border:1px solid var(--line)}
aside h4{font-size:1.15rem;margin-bottom:1rem}
.event{display:flex;gap:1rem;padding:.8rem 0;border-bottom:1px solid var(--line)}
.event:last-child{border:none}
.date{background:var(--forest);color:#fff;border-radius:12px;min-width:56px;text-align:center;padding:.4rem 0;line-height:1.1}
.date b{display:block;font-family:var(--serif);font-size:1.4rem}
.date span{font-size:.7rem;text-transform:uppercase;letter-spacing:.1em}
.event strong{display:block;font-size:.95rem;color:var(--forest)}
.event small{color:var(--muted);font-size:.82rem}
.doc{display:flex;justify-content:space-between;align-items:center;padding:.7rem 0;border-bottom:1px solid var(--line);text-decoration:none;font-size:.92rem}
.doc:last-child{border:none}
.doc span{font-size:.75rem;background:#fff;padding:.2rem .5rem;border-radius:6px;color:var(--terra);font-weight:700;border:1px solid var(--line)}
.doc:hover{color:var(--terra)}
.widget.cta{background:var(--terra);color:#fff;border:none}
.widget.cta h4{color:#fff}
.widget.cta p{font-size:.92rem;color:#ffe9df;margin-bottom:1rem}
/* Reports */
.reports-grid{display:grid;grid-template-columns:1fr 1fr;gap:4rem;align-items:center}
.alloc{background:#fff;border-radius:24px;padding:2.2rem;box-shadow:var(--shadow)}
.alloc-bar{display:flex;height:22px;border-radius:99px;overflow:hidden;margin:1.2rem 0 1.6rem}
.alloc-bar div{height:100%}
.legend{display:grid;gap:.9rem}
.legend div{display:flex;justify-content:space-between;align-items:center;font-size:.95rem}
.legend i{display:inline-block;width:12px;height:12px;border-radius:4px;margin-right:.6rem}
.legend b{color:var(--forest)}
.badges{display:flex;gap:1rem;margin-top:1.8rem;flex-wrap:wrap}
.badges img{height:56px;border-radius:10px}
.fin-list{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin:1.8rem 0}
.fin-list div{background:var(--sand);border-radius:14px;padding:1rem 1.2rem}
.fin-list b{font-family:var(--serif);font-size:1.6rem;color:var(--forest);display:block}
.fin-list span{font-size:.85rem;color:var(--muted)}
/* Volunteer */
.volunteer{background:var(--sand)}
.vol-grid{display:grid;grid-template-columns:1fr 1fr;gap:3.5rem;align-items:start}
.roles{display:grid;gap:1rem;margin-top:1.8rem}
.role{display:flex;gap:1rem;background:#fff;border-radius:14px;padding:1.1rem;align-items:center;border:1px solid var(--line)}
.role img{width:64px;height:64px;border-radius:12px;object-fit:cover}
.role b{color:var(--forest);display:block}
.role span{font-size:.86rem;color:var(--muted)}
form.vol{background:#fff;border-radius:24px;padding:2.2rem;box-shadow:var(--shadow)}
form.vol h3{font-size:1.6rem}
.field{margin-top:1rem}
.field label{font-size:.85rem;font-weight:600;color:var(--forest);display:block;margin-bottom:.35rem}
.field input,.field select,.field textarea{width:100%;padding:.8rem 1rem;border:2px solid var(--line);border-radius:12px;font-family:var(--sans);font-size:.95rem;margin:0}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--terra)}
.two{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
form.vol .btn{margin-top:1.4rem;width:100%;justify-content:center}
.form-msg{margin-top:1rem;padding:1rem;border-radius:12px;background:#e5f2ec;color:var(--forest);font-weight:600;display:none}
/* FAQ */
.faq-wrap{max-width:860px;margin:0 auto}
details{background:#fff;border:1px solid var(--line);border-radius:14px;margin-bottom:.9rem;overflow:hidden}
summary{cursor:pointer;list-style:none;padding:1.2rem 1.5rem;font-weight:600;color:var(--forest);display:flex;justify-content:space-between;align-items:center;gap:1rem;font-size:1.02rem}
summary::-webkit-details-marker{display:none}
summary::after{content:"+";font-size:1.5rem;color:var(--terra);transition:.2s;line-height:1}
details[open] summary::after{transform:rotate(45deg)}
details .ans{padding:0 1.5rem 1.3rem;color:var(--muted)}
/* Newsletter */
.newsletter{padding:0 0 96px}
.nl-box{background:var(--terra);border-radius:28px;padding:3.5rem;display:grid;grid-template-columns:1.2fr 1fr;gap:2rem;align-items:center;color:#fff;position:relative;overflow:hidden}
.nl-box h2{color:#fff;margin-bottom:.5rem}
.nl-box p{color:#ffe9df}
.nl-form{display:flex;gap:.6rem;background:#fff;padding:.4rem;border-radius:999px}
.nl-form input{flex:1;border:none;padding:.8rem 1.1rem;border-radius:999px;font-family:var(--sans);font-size:.95rem;min-width:0}
.nl-form input:focus{outline:none}
.nl-form .btn{background:var(--forest);color:#fff}
/* Footer */
footer{background:#14282300;background:#132622;color:#b9c9c3;padding:72px 0 28px;font-size:.93rem}
.foot-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr 1.2fr;gap:2.5rem}
footer h5{font-family:var(--serif);color:#fff;font-size:1.1rem;margin-bottom:1rem;font-weight:600}
footer ul{list-style:none}
footer li{margin-bottom:.55rem}
footer a{text-decoration:none;color:#b9c9c3}
footer a:hover{color:var(--sun)}
.foot-brand{display:flex;align-items:center;gap:.8rem;margin-bottom:1rem}
.foot-brand img{width:48px;height:48px;border-radius:12px}
.foot-brand strong{font-family:var(--serif);color:#fff;font-size:1.25rem}
.socials{display:flex;gap:.6rem;margin-top:1.2rem}
.socials a{width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,.2);display:grid;place-items:center;font-size:.8rem;font-weight:700;color:#fff}
.socials a:hover{background:var(--terra);border-color:var(--terra);color:#fff}
.foot-bottom{border-top:1px solid rgba(255,255,255,.1);margin-top:3rem;padding-top:1.5rem;display:flex;justify-content:space-between;flex-wrap:wrap;gap:1rem;font-size:.84rem}
.foot-bottom nav a{margin-left:1.2rem}
.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s ease,transform .7s ease}
.reveal.in{opacity:1;transform:none}
@media (max-width:1024px){
nav.primary{position:absolute;top:100%;left:0;right:0;background:var(--cream);border-bottom:1px solid var(--line);display:none}
nav.primary.open{display:block}
nav.primary ul{flex-direction:column;align-items:flex-start;padding:1rem 4%;gap:.9rem}
.menu-toggle{display:block}
.hero-grid,.mission-grid,.give-grid,.story-feature,.news-layout,.reports-grid,.vol-grid,.nl-box{grid-template-columns:1fr}
.program-grid,.testi-grid{grid-template-columns:1fr 1fr}
.stats-grid{grid-template-columns:1fr 1fr}
.foot-grid{grid-template-columns:1fr 1fr}
.quote-badge{left:16px}
.collage{height:460px}
}
@media (max-width:640px){
section{padding:72px 0}
.program-grid,.testi-grid,.values,.fin-list,.two{grid-template-columns:1fr}
.post{grid-template-columns:1fr}
.presets{grid-template-columns:repeat(2,1fr)}
.foot-grid{grid-template-columns:1fr}
.nl-box{padding:2.2rem}
.story-feature .body{padding:2rem}
.brand span{display:none}
.campaign-card{width:80%}
.mission-img img{height:400px}
}
</style>
</head>
<body>
<div class="utility">
<div class="container">
<div><span class="pill">MATCH</span>Every gift through December 31 is matched 2:1 by the Alder Family Endowment.</div>
<div><a href="tel:+15035550142">(503) 555-0142</a> · <a href="#reports">Financial Transparency</a></div>
</div>
</div>
<header class="site">
<div class="container nav-wrap">
<a href="#top" class="brand" aria-label="Kindred Harbor Foundation home">
<img src="https://placehold.co/104x104/1f3d36/f2b544?text=KH&font=playfair%20display" alt="Kindred Harbor Foundation logo">
<div>
<strong>Kindred Harbor</strong>
<span>Where generosity finds its way home</span>
</div>
</a>
<button class="menu-toggle" aria-expanded="false" aria-controls="primary-nav">Menu</button>
<nav class="primary" id="primary-nav" aria-label="Primary">
<ul>
<li><a href="#mission">Our Mission</a></li>
<li><a href="#programs">Programs</a></li>
<li><a href="#impact">Impact</a></li>
<li><a href="#stories">Stories</a></li>
<li><a href="#volunteer">Volunteer</a></li>
<li><a href="#blog">Blog</a></li>
<li><a href="#reports">Reports</a></li>
<li><a href="#give" class="btn btn-primary">Give Now</a></li>
</ul>
</nav>
</div>
</header>
<main id="top">
<!-- HERO -->
<section class="hero">
<div class="container hero-grid">
<div class="reveal">
<span class="eyebrow">Community-led since 2009</span>
<h1>No neighbor should have to weather the storm <em>alone.</em></h1>
<p class="lead">Kindred Harbor Foundation connects generous people with grassroots organizations tackling hunger, housing insecurity, youth opportunity and elder isolation across the Pacific Northwest. We fund what works, measure what matters, and report every dollar back to you.</p>
<div class="hero-actions">
<a href="#give" class="btn btn-primary">Start Giving →</a>
<a href="#volunteer" class="btn btn-outline">Volunteer Today</a>
</div>
<div class="trust">
<div class="avatars">
<img src="https://i.pravatar.cc/80?u=kh-donor1" alt="">
<img src="https://i.pravatar.cc/80?u=kh-donor2" alt="">
<img src="https://i.pravatar.cc/80?u=kh-donor3" alt="">
<img src="https://i.pravatar.cc/80?u=kh-donor4" alt="">
</div>
<div><strong style="color:var(--forest)">18,400+ donors</strong> gave last year — 71% of them monthly.</div>
</div>
</div>
<div class="collage reveal">
<img class="c1" src="https://picsum.photos/id/1059/760/620" alt="Volunteers gathered at a community food distribution">
<img class="c2" src="https://picsum.photos/id/338/480/400" alt="Neighbors smiling outside a community center">
<div class="campaign-card">
<small>Winter Warmth Campaign</small>
<h4>Heat, meals & shelter for 2,000 families</h4>
<div class="bar"><span class="hero-bar" style="width:0%"></span></div>
<div class="bar-meta"><span><b class="hero-raised">$0</b> raised</span><span>Goal $450,000</span></div>
</div>
</div>
</div>
</section>
<!-- STATS -->
<section class="stats" id="impact" aria-label="Our impact in numbers">
<div class="container stats-grid">
<div class="stat"><div class="num" data-count="2400000" data-format="meals">0</div><p>Nutritious meals distributed through 62 partner pantries in 2024</p></div>
<div class="stat"><div class="num" data-count="96500" data-format="plain">0</div><p>Volunteer hours logged by 4,300 neighbors last fiscal year</p></div>
<div class="stat"><div class="num" data-count="1180" data-format="plain">0</div><p>Families kept housed through emergency rent and utility grants</p></div>
<div class="stat"><div class="num" data-count="87" data-format="pct">0</div><p>Of every dollar goes directly to community programs</p></div>
</div>
</section>
<!-- MISSION -->
<section id="mission">
<div class="container mission-grid">
<div class="mission-img reveal">
<img src="https://picsum.photos/id/1062/640/760" alt="A mentor and young student reading together">
<div class="quote-badge">“We don’t parachute in. We pull up a chair.”<br><small style="font-family:var(--sans);font-size:.8rem;opacity:.85">— Dr. Imani Okafor, Executive Director</small></div>
</div>
<div class="reveal">
<span class="eyebrow">Our Mission</span>
<h2>Strengthening the harbors that hold communities together.</h2>
<p class="lead">Kindred Harbor exists to make sure that the people closest to a problem have the resources to solve it. We pool individual gifts, corporate partnerships and a permanent endowment to fund local organizations that already have the trust of the neighborhoods they serve.</p>
<p>Founded in 2009 by a group of Portland food-bank volunteers who saw small pantries struggling to keep their shelves stocked, we have grown into a regional foundation supporting 140 community partners in Oregon and Washington. Our model is simple: listen first, fund flexibly, and stay for the long haul. Most of our grants are multi-year and unrestricted, because lasting change rarely fits inside a twelve-month budget line.</p>
<p>Beyond grantmaking, we run community outreach programs directly where gaps exist — mobile pantries in rural counties, mentorship cohorts for first-generation students, and friendly-visitor networks for isolated seniors.</p>
<div class="values">
<div class="value"><b>Community-led</b><p>Partner organizations set priorities; we provide the fuel.</p></div>
<div class="value"><b>Radically transparent</b><p>Audited financials and impact data published every year.</p></div>
<div class="value"><b>Built to last</b><p>A $32M endowment ensures programs outlive any single campaign.</p></div>
<div class="value"><b>Dignity first</b><p>Choice-based services that honor every person we serve.</p></div>
</div>
</div>
</div>
</section>
<!-- PROGRAMS -->
<section class="programs" id="programs">
<div class="container">
<div class="section-head reveal">
<div>
<span class="eyebrow">Community Programs</span>
<h2>Six ways we show up for our neighbors.</h2>
<p class="lead">Each program is co-designed with community partners and evaluated annually against clear outcomes, so donors always know what their support makes possible.</p>
</div>
<a href="#reports" class="btn btn-outline">View Program Outcomes</a>
</div>
<div class="program-grid">
<article class="program reveal">
<img src="https://picsum.photos/id/292/600/400" alt="Fresh produce at a community pantry">
<div class="program-body">
<span class="tag">Food Security</span>
<h3>Full Table Network</h3>
<p>We supply 62 neighborhood pantries with fresh produce, protein and culturally familiar staples, and run four mobile markets reaching rural families who live more than 20 miles from a grocery store.</p>
<div class="metric"><span>Meals in 2024</span><b>2.4 million</b></div>
</div>
</article>
<article class="program reveal">
<img src="https://picsum.photos/id/1011/600/400" alt="Teen and mentor talking outdoors">
<div class="program-body">
<span class="tag">Youth</span>
<h3>Lighthouse Mentors</h3>
<p>Trained adult volunteers are matched with first-generation students for two years of weekly mentoring, college application coaching, paid summer internships and scholarship support.</p>
<div class="metric"><span>Graduation rate</span><b>94%</b></div>
</div>
</article>
<article class="program reveal">
<img src="https://picsum.photos/id/164/600/400" alt="Row of homes in a residential neighborhood">
<div class="program-body">
<span class="tag">Housing</span>
<h3>Steady Ground Fund</h3>
<p>Emergency rent, deposit and utility grants — paid within 72 hours — prevent evictions before they happen, paired with financial counseling from our partner credit unions.</p>
<div class="metric"><span>Families housed</span><b>1,180</b></div>
</div>
</article>
<article class="program reveal">
<img src="https://picsum.photos/id/1027/600/400" alt="Elderly woman smiling">
<div class="program-body">
<span class="tag">Elder Care</span>
<h3>Porchlight Visitors</h3>
<p>Volunteers make weekly visits and phone calls to homebound seniors, helping with groceries, medication pickups and the simple, vital gift of conversation and companionship.</p>
<div class="metric"><span>Seniors served</span><b>2,650</b></div>
</div>
</article>
<article class="program reveal">
<img src="https://picsum.photos/id/180/600/400" alt="Laptop and notebook on a desk for a workshop">
<div class="program-body">
<span class="tag">Workforce</span>
<h3>Second Wind Skills</h3>
<p>Free 12-week certification tracks in healthcare support, skilled trades and IT, with childcare stipends and employer partners committed to interviewing every graduate.</p>
<div class="metric"><span>Job placement</span><b>81%</b></div>
</div>
</article>
<article class="program reveal">
<img src="https://picsum.photos/id/1043/600/400" alt="Community gathering outdoors">
<div class="program-body">
<span class="tag">Capacity Building</span>
<h3>Harbor Partners Grants</h3>
<p>Multi-year, unrestricted operating grants and pro-bono coaching help small, BIPOC-led and rural nonprofits strengthen their staff, systems and long-term sustainability.</p>
<div class="metric"><span>Partners funded</span><b>140</b></div>
</div>
</article>
</div>
</div>
</section>
<!-- GIVE / CALCULATOR -->
<section class="give" id="give">
<div class="container give-grid">
<div class="reveal">
<span class="eyebrow" style="color:var(--sun)">Impact Calculator</span>
<h2>See exactly what your gift makes possible.</h2>
<p class="lead">Choose an amount and a program to see the tangible difference you’ll make. Every figure is based on our audited 2024 cost-per-outcome data, so the impact you see is the impact you fund.</p>
<ul class="checks">
<li>Gifts through Dec 31 are matched 2:1 by the Alder Family Endowment</li>
<li>Kindred Harbor is a registered 501(c)(3) — EIN 26-4418302</li>
<li>Monthly donors receive quarterly impact reports from the field</li>
</ul>
<div class="tracker" aria-live="polite">
<h4>Live Donation Tracker · Winter Warmth</h4>
<div class="bar"><span class="track-bar" style="width:0%"></span></div>
<div class="bar-meta"><span><b class="track-raised">$0</b> of $450,000</span><span class="track-donors">0 donors</span></div>
<ul class="recent-gifts" id="recentGifts">
<li><span>Marisol P. · Food Security</span><span>$50</span></li>
<li><span>Anonymous · Where needed most</span><span>$250</span></li>
<li><span>The Chen Family · Housing</span><span>$100 / mo</span></li>
</ul>
</div>
</div>
<div class="calc reveal" role="form" aria-label="Donation impact calculator">
<div class="toggle" role="tablist">
<button type="button" class="active" data-freq="once">One-time</button>
<button type="button" data-freq="monthly">Monthly</button>
</div>
<span class="label">Choose an amount</span>
<div class="presets">
<button type="button" data-amt="25">$25</button>
<button type="button" data-amt="50" class="active">$50</button>
<button type="button" data-amt="100">$100</button>
<button type="button" data-amt="250">$250</button>
</div>
<div class="amount-row">
<input type="range" id="amount" min="10" max="1000" step="5" value="50" aria-label="Donation amount">
<div class="amount-display" id="amountDisplay">$50</div>
</div>
<label class="label" for="fund">Direct my gift to</label>
<select id="fund">
<option value="food">Full Table Network — Food Security</option>
<option value="youth">Lighthouse Mentors — Youth</option>
<option value="housing">Steady Ground Fund — Housing</option>
<option value="elder">Porchlight Visitors — Elder Care</option>
<option value="general">Where it’s needed most</option>
</select>
<div class="impact-out" aria-live="polite">
<div class="big" id="impactBig">Provides 300 nutritious meals</div>
<p id="impactSub">With the 2:1 match, your $50 becomes $150 for local families.</p>
</div>
<button class="btn btn-primary" id="giveBtn" type="button">Give $50 Now →</button>
<p class="fine">Secure, tax-deductible giving. You’ll receive a receipt by email instantly.</p>
</div>
</div>
</section>
<!-- STORIES -->
<section id="stories">
<div class="container">
<div class="section-head reveal">
<div>
<span class="eyebrow">Beneficiary Stories</span>
<h2>Behind every number is a neighbor.</h2>
<p class="lead">Statistics tell us whether a program works. Stories tell us why it matters. These are shared with permission and in the words of the people who lived them.</p>
</div>
</div>
<article class="story-feature reveal">
<img src="https://picsum.photos/id/1005/720/560" alt="Portrait of Daniel, a Steady Ground Fund recipient">
<div class="body">
<span class="tag">Steady Ground Fund</span>
<blockquote>“I had the eviction notice on the fridge and two kids asking why I was crying. Seventy-two hours later, the rent was paid and I could breathe again.”</blockquote>
<p>When Daniel Reyes lost his warehouse job after a back injury, his savings lasted six weeks. A case worker at Eastside Family Hub — one of our grantee partners — connected him to an emergency grant that covered two months of rent while his disability claim was processed.</p>
<p>Today Daniel is working as a dispatcher, has completed our partner credit union’s budgeting course, and volunteers on Saturdays at the same hub that helped him. “Somebody caught me,” he says. “Now I want to be the one catching.”</p>
<a href="#blog" class="readmore">Read Daniel’s full story →</a>
</div>
</article>
<div class="testi-grid">
<div class="testi reveal">
<p>My mentor Ms. Alvarez helped me write eleven scholarship essays. I’m the first in my family to go to college, and I start nursing school at OHSU this fall with almost no debt.</p>
<div class="person"><img src="https://i.pravatar.cc/96?u=kh-jasmine" alt=""><div><b>Jasmine T., 18</b><span>Lighthouse Mentors, Class of 2024</span></div></div>
</div>
<div class="testi reveal">
<p>After my husband passed, weeks would go by without me speaking to anyone. Now Tom visits every Thursday. We play cribbage, and he fixed my porch light. I look forward to my week again.</p>
<div class="person"><img src="https://i.pravatar.cc/96?u=kh-ruth" alt=""><div><b>Ruth M., 84</b><span>Porchlight Visitors participant</span></div></div>
</div>
<div class="testi reveal">
<p>As a three-person pantry, we never had money for a walk-in cooler. Kindred Harbor’s unrestricted grant let us start offering fresh milk, eggs and produce. Visits have doubled.</p>
<div class="person"><img src="https://i.pravatar.cc/96?u=kh-pastor" alt=""><div><b>Rev. Samuel Odom</b><span>Director, Grace Valley Pantry</span></div></div>
</div>
</div>
</div>
</section>
<!-- BLOG + SIDEBAR -->
<section class="news" id="blog">
<div class="container">
<div class="section-head reveal">
<div>
<span class="eyebrow">From the Blog</span>
<h2>News, field notes & fundraising resources.</h2>
</div>
<a href="#blog" class="btn btn-outline">All Articles</a>
</div>
<div class="news-layout">
<div class="posts">
<article class="post reveal">
<img src="https://picsum.photos/id/429/480/340" alt="Produce boxes stacked at a mobile market">
<div>
<div class="meta">Field Notes · March 4, 2025 · 6 min read</div>
<h3><a href="#blog">Bringing the market to the mountains: a year of rural mobile pantries</a></h3>
<p>Our four mobile markets traveled 38,000 miles last year, reaching families in Wasco, Klickitat and Lane counties who previously drove an hour for fresh food. Here’s what we learned about logistics, trust and refrigeration.</p>
<a href="#blog" class="readmore">Continue reading →</a>
</div>
</article>
<article class="post reveal">
<img src="https://picsum.photos/id/3/480/340" alt="Team members planning at a laptop">
<div>
<div class="meta">Fundraising Resources · February 19, 2025 · 8 min read</div>
<h3><a href="#blog">Host your own peer-to-peer fundraiser: a step-by-step toolkit</a></h3>
<p>Birthday fundraisers, office challenges and charity runs raised $1.2M for Kindred Harbor last year. Download our free toolkit with email templates, social graphics and tips for setting a goal your network can rally behind.</p>
<a href="#blog" class="readmore">Get the toolkit →</a>
</div>
</article>
<article class="post reveal">
<img src="https://picsum.photos/id/1067/480/340" alt="City skyline at dusk">
<div>
<div class="meta">Announcements · January 28, 2025 · 4 min read</div>
<h3><a href="#blog">Announcing $3.1M in new multi-year grants to 27 community partners</a></h3>
<p>This year’s grant cohort includes 11 first-time partners, with a focus on BIPOC-led organizations and rural housing navigation. Learn how our community advisory panel selected this year’s recipients.</p>
<a href="#blog" class="readmore">Meet the partners →</a>
</div>
</article>
</div>
<aside aria-label="Sidebar">
<div class="widget reveal">
<h4>Upcoming Fundraisers</h4>
<div class="event"><div class="date"><b>12</b><span>Apr</span></div><div><strong>Harbor Lights 5K & Family Walk</strong><small>Waterfront Park, Portland · 8:00 AM</small></div></div>
<div class="event"><div class="date"><b>03</b><span>May</span></div><div><strong>Full Table Spring Supper</strong><small>Benefit dinner · The Evergreen, Seattle</small></div></div>
<div class="event"><div class="date"><b>21</b><span>Jun</span></div><div><strong>Day of Service: Pack-a-Thon</strong><small>Goal: 50,000 meal kits · All ages welcome</small></div></div>
</div>
<div class="widget reveal">
<h4>Impact Reports</h4>
<a class="doc" href="#reports">2024 Annual Impact Report <span>PDF</span></a>
<a class="doc" href="#reports">FY2024 Audited Financials <span>PDF</span></a>
<a class="doc" href="#reports">IRS Form 990 (2023) <span>PDF</span></a>
<a class="doc" href="#reports">Endowment Investment Policy <span>PDF</span></a>
</div>
<div class="widget cta reveal">
<h4>Leave a lasting legacy</h4>
<p>Planned gifts and bequests to the Kindred Harbor endowment provide steady support for generations. Our team can help you explore options with your advisor.</p>
<a href="#contact" class="btn btn-light">Talk to Our Team</a>
</div>
</aside>
</div>
</div>
</section>
<!-- REPORTS -->
<section id="reports">
<div class="container reports-grid">
<div class="reveal">
<span class="eyebrow">Annual Reports & Accountability</span>
<h2>Every dollar, accounted for.</h2>
<p class="lead">Trust is the most valuable thing a donor gives us. That’s why we publish independently audited financials, our full Form 990, and program-level outcome data every single year.</p>
<p>In fiscal year 2024, Kindred Harbor raised $14.8 million from individuals, foundations and corporate partners. Our permanent endowment, managed under a conservative 4.5% spending policy, covers the majority of our administrative costs — which means the overwhelming share of your gift goes straight into the community.</p>
<div class="fin-list">
<div><b>$14.8M</b><span>Total revenue, FY2024</span></div>
<div><b>$32.4M</b><span>Endowment value</span></div>
<div><b>$0.06</b><span>Cost to raise $1</span></div>
<div><b>12 yrs</b><span>Consecutive 4-star rating</span></div>
</div>
<a href="#reports" class="btn btn-primary">Download 2024 Annual Report</a>
</div>
<div class="alloc reveal">
<h3>How FY2024 funds were used</h3>
<p style="color:var(--muted);font-size:.93rem">Total expenses: $13.9 million</p>
<div class="alloc-bar" role="img" aria-label="87% programs, 7% administration, 6% fundraising">
<div style="width:87%;background:var(--forest)"></div>
<div style="width:7%;background:var(--sun)"></div>
<div style="width:6%;background:var(--terra)"></div>
</div>
<div class="legend">
<div><span><i style="background:var(--forest)"></i>Programs & community grants</span><b>87%</b></div>
<div><span><i style="background:var(--sun)"></i>Administration & operations</span><b>7%</b></div>
<div><span><i style="background:var(--terra)"></i>Fundraising & donor care</span><b>6%</b></div>
</div>
<div class="badges">
<img src="https://placehold.co/150x56/1f3d36/ffffff?text=4-Star+Rated&font=montserrat" alt="Four-star charity rating badge">
<img src="https://placehold.co/150x56/d9653b/ffffff?text=Platinum+Seal&font=montserrat" alt="Platinum transparency seal">
<img src="https://placehold.co/150x56/f2b544/1f3d36?text=BBB+Accredited&font=montserrat" alt="Accredited charity badge">
</div>
</div>
</div>
</section>
<!-- VOLUNTEER -->
<section class="volunteer" id="volunteer">
<div class="container vol-grid">
<div class="reveal">
<span class="eyebrow">Volunteer</span>
<h2>Lend your hands, your heart, or your expertise.</h2>
<p class="lead">Last year, 4,300 volunteers contributed more than 96,500 volunteer hours — the equivalent of 46 full-time staff. Whether you have two hours a month or a skill to share, there’s a place for you here.</p>
<p>New volunteers attend a 90-minute orientation (in person or online), and roles involving youth or seniors include a background check and training at no cost to you. Corporate teams can book private service days for groups of 10 to 150.</p>
<div class="roles">
<div class="role"><img src="https://picsum.photos/id/225/128/128" alt=""><div><b>Pantry & Mobile Market Crew</b><span>Sort, pack and distribute food · Flexible weekend shifts</span></div></div>
<div class="role"><img src="https://picsum.photos/id/24/128/128" alt=""><div><b>Lighthouse Mentor</b><span>1 hour per week · 2-year commitment · Training provided</span></div></div>
<div class="role"><img src="https://picsum.photos/id/1025/128/128" alt=""><div><b>Porchlight Visitor</b><span>Weekly visits or calls with a homebound senior</span></div></div>
<div class="role"><img src="https://picsum.photos/id/60/128/128" alt=""><div><b>Skilled Volunteer</b><span>Legal, accounting, marketing or IT support for partners</span></div></div>
</div>
</div>
<form class="vol reveal" id="volForm" novalidate>
<h3>Volunteer Today</h3>
<p style="color:var(--muted);font-size:.93rem">Tell us a little about yourself and our volunteer coordinator will reach out within two business days.</p>
<div class="two">
<div class="field"><label for="fname">First name</label><input id="fname" required placeholder="Alex"></div>
<div class="field"><label for="lname">Last name</label><input id="lname" required placeholder="Morgan"></div>
</div>
<div class="field"><label for="email">Email</label><input id="email" type="email" required placeholder="alex@example.com"></div>
<div class="two">
<div class="field"><label for="role">Interested in</label>
<select id="role" style="margin:0">
<option>Pantry & Mobile Market</option>
<option>Lighthouse Mentor</option>
<option>Porchlight Visitor</option>
<option>Skilled Volunteer</option>
<option>Corporate Team Day</option>
</select>
</div>
<div class="field"><label for="avail">Availability</label>
<select id="avail" style="margin:0">
<option>Weekday mornings</option>
<option>Weekday evenings</option>
<option>Weekends</option>
<option>Flexible</option>
</select>
</div>
</div>
<div class="field"><label for="note">Anything we should know?</label><textarea id="note" rows="3" placeholder="Languages spoken, skills, accessibility needs…"></textarea></div>
<button class="btn btn-primary" type="submit">Sign Me Up →</button>
<div class="form-msg" id="formMsg" role="status"></div>
</form>
</div>
</section>
<!-- FAQ -->
<section id="faq">
<div class="container">
<div class="reveal" style="text-align:center;margin-bottom:2.5rem">
<span class="eyebrow">Frequently Asked Questions</span>
<h2>Questions donors & volunteers ask us.</h2>
</div>
<div class="faq-wrap">
<details class="reveal" open>
<summary>Is my donation tax-deductible?</summary>
<div class="ans">Yes. Kindred Harbor Foundation is a registered 501(c)(3) public charity (EIN 26-4418302). You’ll receive an emailed receipt immediately after giving, and monthly donors receive a consolidated annual giving statement each January for tax purposes.</div>
</details>
<details class="reveal">
<summary>How does the endowment work, and why does it matter?</summary>
<div class="ans">Our $32.4M endowment is a permanent fund invested under a board-approved policy. Each year we draw roughly 4.5% of its rolling average value, which covers most administrative costs and provides a financial cushion during economic downturns. Gifts designated to the endowment keep giving forever.</div>
</details>
<details class="reveal">
<summary>Can I designate my gift to a specific program?</summary>
<div class="ans">Absolutely. You can direct your gift to any of our programs using the impact calculator above. Gifts marked “where it’s needed most” give us flexibility to respond quickly to emergencies, such as wildfire evacuations or winter storms.</div>
</details>
<details class="reveal">
<summary>Does my employer match donations or volunteer hours?</summary>
<div class="ans">Over 600 companies in our region offer matching gifts or “dollars for doers” grants for volunteer hours. Enter your employer’s name at checkout and we’ll handle the paperwork, or email our team for a confirmation letter.</div>
</details>
<details class="reveal">
<summary>How do community partners apply for funding?</summary>
<div class="ans">Our Harbor Partners grant cycle opens each September. Eligible organizations are nonprofits or fiscally sponsored groups serving Oregon or SW Washington. We offer a simple two-page letter of inquiry and free application coaching sessions throughout the fall.</div>
</details>
</div>
</div>
</section>
<!-- NEWSLETTER -->
<section class="newsletter" aria-label="Newsletter signup">
<div class="container">
<div class="nl-box reveal">
<div>
<h2>Get good news in your inbox.</h2>
<p>One email a month with stories from the field, volunteer opportunities and upcoming fundraisers. No spam — just hope, delivered.</p>
</div>
<form class="nl-form" id="nlForm">
<input type="email" placeholder="Your email address" aria-label="Email address" required>
<button class="btn" type="submit">Subscribe</button>
</form>
</div>
</div>
</section>
</main>
<footer id="contact">
<div class="container">
<div class="foot-grid">
<div>
<div class="foot-brand">
<img src="https://placehold.co/96x96/f2b544/1f3d36?text=KH&font=playfair%20display" alt="Kindred Harbor logo">
<strong>Kindred Harbor</strong>
</div>
<p>Where generosity finds its way home. Kindred Harbor Foundation is a 501(c)(3) nonprofit funding community-led solutions across the Pacific Northwest since 2009.</p>
<div class="socials">
<a href="#" aria-label="Facebook">Fb</a>
<a href="#" aria-label="Instagram">Ig</a>
<a href="#" aria-label="LinkedIn">In</a>
<a href="#" aria-label="YouTube">Yt</a>
<a href="#" aria-label="X">X</a>
</div>
</div>
<div>
<h5>Get Involved</h5>
<ul>
<li><a href="#give">Give Now</a></li>
<li><a href="#give">Monthly Giving</a></li>
<li><a href="#volunteer">Volunteer</a></li>
<li><a href="#blog">Host a Fundraiser</a></li>
<li><a href="#contact">Corporate Partnerships</a></li>
</ul>
</div>
<div>
<h5>About</h5>
<ul>
<li><a href="#mission">Our Mission</a></li>
<li><a href="#programs">Programs</a></li>
<li><a href="#impact">Impact</a></li>
<li><a href="#reports">Annual Reports</a></li>
<li><a href="#contact">Careers</a></li>
</ul>
</div>
<div>
<h5>Contact Us</h5>
<ul>
<li>1420 SE Harbor Way, Suite 300<br>Portland, OR 97214</li>
<li><a href="tel:+15035550142">(503) 555-0142</a></li>
<li><a href="mailto:hello@kindredharbor.org">hello@kindredharbor.org</a></li>
<li>Mon–Fri, 9:00 AM – 5:00 PM PT</li>
</ul>
</div>
</div>
<div class="foot-bottom">
<span>© <span id="year">2025</span> Kindred Harbor Foundation. EIN 26-4418302. All rights reserved.</span>
<nav aria-label="Legal"><a href="#">Privacy Policy</a><a href="#">Terms of Use</a><a href="#">Donor Bill of Rights</a><a href="#">Accessibility</a></nav>
</div>
</div>
</footer>
<script>
(function(){
document.getElementById('year').textContent = new Date().getFullYear();
// Mobile nav
const toggle = document.querySelector('.menu-toggle');
const nav = document.getElementById('primary-nav');
toggle.addEventListener('click', () => {
const open = nav.classList.toggle('open');
toggle.setAttribute('aria-expanded', open);
});
nav.querySelectorAll('a').forEach(a => a.addEventListener('click', () => {
nav.classList.remove('open'); toggle.setAttribute('aria-expanded', false);
}));
// Reveal on scroll
const io = new IntersectionObserver(entries => {
entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } });
}, {threshold: .12});
document.querySelectorAll('.reveal').forEach(el => io.observe(el));
// Counters
const fmt = (n, type) => {
if (type === 'meals') return n >= 1e6 ? (n/1e6).toFixed(1) + 'M' : Math.round(n).toLocaleString();
if (type === 'pct') return Math.round(n) + '%';
return Math.round(n).toLocaleString();
};
const cio = new IntersectionObserver(entries => {
entries.forEach(e => {
if (!e.isIntersecting) return;
const el = e.target, target = +el.dataset.count, type = el.dataset.format;
const start = performance.now(), dur = 1800;
const step = t => {
const p = Math.min((t - start) / dur, 1), eased = 1 - Math.pow(1 - p, 3);
el.textContent = fmt(target * eased, type) + (p === 1 && type === 'plain' ? '+' : '');
if (p < 1) requestAnimationFrame(step);
};
requestAnimationFrame(step);
cio.unobserve(el);
});
}, {threshold: .4});
document.querySelectorAll('[data-count]').forEach(el => cio.observe(el));
// Campaign tracker
const GOAL = 450000;
let raised = 312840, donors = 2417;
const money = n => '$' + Math.round(n).toLocaleString();
function renderTracker(){
const pct = Math.min(raised / GOAL * 100, 100);
document.querySelector('.hero-bar').style.width = pct + '%';
document.querySelector('.track-bar').style.width = pct + '%';
document.querySelector('.hero-raised').textContent = money(raised);
document.querySelector('.track-raised').textContent = money(raised);
document.querySelector('.track-donors').textContent = donors.toLocaleString() + ' donors · ' + Math.round(pct) + '%';
}
setTimeout(renderTracker, 400);
// Impact calculator
const range = document.getElementById('amount');
const display = document.getElementById('amountDisplay');
const fund = document.getElementById('fund');
const big = document.getElementById('impactBig');
const sub = document.getElementById('impactSub');
const giveBtn = document.getElementById('giveBtn');
const presets = document.querySelectorAll('.presets button');
const freqBtns = document.querySelectorAll('.toggle button');
let freq = 'once';
const models = {
food: v => `Provides ${Math.floor(v * 2).toLocaleString()} nutritious meals`,
youth: v => { const h = Math.floor(v / 25); return h >= 1 ? `Funds ${h.toLocaleString()} hour${h>1?'s':''} of one-on-one mentoring` : 'Supplies books and materials for a mentee'; },
housing: v => { const d = Math.floor(v / 22); return d >= 1 ? `Covers ${d.toLocaleString()} day${d>1?'s':''} of rent for a family in crisis` : 'Contributes to an emergency utility payment'; },
elder: v => { const w = Math.floor(v / 15); return `Supports ${Math.max(w,1).toLocaleString()} weeks of senior visits & grocery delivery`; },
general: v => `Puts ${money(v)} to work where the need is greatest right now`
};
function update(){
const amt = +range.value;
display.textContent = money(amt);
const matched = amt * 3;
const effective = freq === 'monthly' ? matched * 12 : matched;
big.textContent = models[fund.value](effective) + (freq === 'monthly' ? ' each year' : '');
sub.textContent = freq === 'monthly'
? `With the 2:1 match, your ${money(amt)}/month becomes ${money(effective)} a year for local families.`
: `With the 2:1 match, your ${money(amt)} becomes ${money(matched)} for local families.`;
giveBtn.textContent = `Give ${money(amt)}${freq === 'monthly' ? '/mo' : ''} Now →`;
presets.forEach(b => b.classList.toggle('active', +b.dataset.amt === amt));
}
range.addEventListener('input', update);
fund.addEventListener('change', update);
presets.forEach(b => b.addEventListener('click', () => { range.value = b.dataset.amt; update(); }));
freqBtns.forEach(b => b.addEventListener('click', () => {
freqBtns.forEach(x => x.classList.remove('active'));
b.classList.add('active'); freq = b.dataset.freq; update();
}));
const fundNames = {food:'Food Security', youth:'Youth', housing:'Housing', elder:'Elder Care', general:'Where needed most'};
giveBtn.addEventListener('click', () => {
const amt = +range.value;
raised += amt * 3; donors += 1;
renderTracker();
const li = document.createElement('li');
li.className = 'new';
li.innerHTML = `<span>You · ${fundNames[fund.value]}</span><span>${money(amt)}${freq==='monthly'?' / mo':''}</span>`;
const list = document.getElementById('recentGifts');
list.prepend(li);
if (list.children.length > 4) list.lastElementChild.remove();
giveBtn.textContent = 'Thank you! 💛 Your gift was added';
setTimeout(update, 2400);
});
update();
// Simulated incoming gifts
const names = ['Priya K.','Anonymous','Marcus L.','The Nguyen Family','Elena R.','Owen B.','Fatima S.'];
const amts = [25,35,50,75,100,150,500];
setInterval(() => {
if (document.hidden) return;
const a = amts[Math.floor(Math.random()*amts.length)];
const f = Object.values(fundNames)[Math.floor(Math.random()*5)];
raised += a * 3; donors += 1; renderTracker();
const li = document.createElement('li'); li.className = 'new';
li.innerHTML = `<span>${names[Math.floor(Math.random()*names.length)]} · ${f}</span><span>$${a}</span>`;
const list = document.getElementById('recentGifts');
list.prepend(li);
if (list.children.length > 4) list.lastElementChild.remove();
}, 9000);
// Volunteer form
document.getElementById('volForm').addEventListener('submit', e => {
e.preventDefault();
const f = e.target, msg = document.getElementById('formMsg');
const first = f.querySelector('#fname').value.trim();
const email = f.querySelector('#email').value.trim();
msg.style.display = 'block';
if (!first || !/^\S+@\S+\.\S+$/.test(email)) {
msg.style.background = '#fbe6dd'; msg.style.color = '#8a3a1c';
msg.textContent = 'Please add your first name and a valid email so we can reach you.';
return;
}
msg.style.background = '#e5f2ec'; msg.style.color = 'var(--forest)';
msg.textContent = `Thank you, ${first}! Our volunteer coordinator will email you within two business days about ${f.querySelector('#role').value} opportunities.`;
f.reset();
});
// Newsletter
document.getElementById('nlForm').addEventListener('submit', e => {
e.preventDefault();
const btn = e.target.querySelector('button');
btn.textContent = 'Subscribed ✓';
e.target.querySelector('input').value = '';
});
})();
</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:51:47.280Z",
"url": "https://benchmark.aimac.invalid/9ccadb11bfd1a53e85bb920933b84707b85795f72ec6e3c2b7ab2fc4505cecb0.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-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-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "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": "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": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-allowed-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attributes are used correctly for the defined role"
}
],
"none": [
{
"id": "aria-unsupported-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute is supported"
}
],
"impact": null,
"html": "<a href=\"#top\" class=\"brand\" aria-label=\"Kindred Harbor Foundation home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-conditional-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are used as described in the specification of the element's role",
"help": "ARIA attributes must be used as specified for the element's role",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-conditional-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"none": [],
"impact": null,
"html": "<a href=\"#top\" class=\"brand\" aria-label=\"Kindred Harbor Foundation home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "deprecatedrole",
"data": null,
"relatedNodes": [],
"impact": "minor",
"message": "ARIA role is not deprecated"
}
],
"impact": null,
"html": "<div class=\"calc reveal\" role=\"form\" aria-label=\"Donation impact calculator\">",
"target": [
".calc"
]
}
]
},
{
"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=\"#top\" class=\"brand\" aria-label=\"Kindred Harbor Foundation home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-required-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "All required ARIA attributes are present"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<div class=\"calc reveal\" role=\"form\" aria-label=\"Donation impact calculator\">",
"target": [
".calc"
]
}
]
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "invalidrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA role is valid"
},
{
"id": "abstractrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Abstract roles are not used"
},
{
"id": "unsupportedrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA role is supported"
}
],
"impact": null,
"html": "<div class=\"calc reveal\" role=\"form\" aria-label=\"Donation impact calculator\">",
"target": [
".calc"
]
}
]
},
{
"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=\"#top\" class=\"brand\" aria-label=\"Kindred Harbor Foundation home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-valid-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure attributes that begin with aria- are valid ARIA attributes",
"help": "ARIA attributes must conform to valid names",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-valid-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute name is valid"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#top\" class=\"brand\" aria-label=\"Kindred Harbor Foundation home\">",
"target": [
".brand"
]
}
]
},
{
"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": "<strong style=\"color:var(--forest)\">18,400+ donors</strong>",
"target": [
".trust > div:nth-child(2) > strong"
]
}
]
},
{
"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 type=\"button\" class=\"active\" data-freq=\"once\">One-time</button>",
"target": [
"button[data-freq=\"once\"]"
]
}
]
},
{
"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>No neighbor should have to weather the storm <em>alone.</em></h1>",
"target": [
"h1"
]
},
{
"html": "<h4>Heat, meals & shelter for 2,000 families</h4>",
"target": [
".campaign-card > h4"
]
},
{
"html": "<h2>Strengthening the harbors that hold communities together.</h2>",
"target": [
".reveal:nth-child(2) > h2"
]
},
{
"html": "<h2>Six ways we show up for our neighbors.</h2>",
"target": [
"#programs > .container > .section-head.reveal > div > h2"
]
},
{
"html": "<h3>Full Table Network</h3>",
"target": [
".program:nth-child(1) > .program-body > h3"
]
},
{
"html": "<h3>Lighthouse Mentors</h3>",
"target": [
".program:nth-child(2) > .program-body > h3"
]
},
{
"html": "<h3>Steady Ground Fund</h3>",
"target": [
".program:nth-child(3) > .program-body > h3"
]
},
{
"html": "<h3>Porchlight Visitors</h3>",
"target": [
".program:nth-child(4) > .program-body > h3"
]
},
{
"html": "<h3>Second Wind Skills</h3>",
"target": [
".program:nth-child(5) > .program-body > h3"
]
},
{
"html": "<h3>Harbor Partners Grants</h3>",
"target": [
".program:nth-child(6) > .program-body > h3"
]
},
{
"html": "<h2>See exactly what your gift makes possible.</h2>",
"target": [
".give-grid > .reveal:nth-child(1) > h2"
]
},
{
"html": "<h4>Live Donation Tracker \u00b7 Winter Warmth</h4>",
"target": [
".tracker > h4"
]
},
{
"html": "<h2>Behind every number is a neighbor.</h2>",
"target": [
"#stories > .container > .section-head.reveal > div > h2"
]
},
{
"html": "<h2>News, field notes & fundraising resources.</h2>",
"target": [
"#blog > .container > .section-head.reveal > div > h2"
]
},
{
"html": "<h3><a href=\"#blog\">Bringing the market to the mountains: a year of rural mobile pantries</a></h3>",
"target": [
".post:nth-child(1) > div > h3"
]
},
{
"html": "<h3><a href=\"#blog\">Host your own peer-to-peer fundraiser: a step-by-step toolkit</a></h3>",
"target": [
".post:nth-child(2) > div > h3"
]
},
{
"html": "<h3><a href=\"#blog\">Announcing $3.1M in new multi-year grants to 27 community partners</a></h3>",
"target": [
".post:nth-child(3) > div > h3"
]
},
{
"html": "<h4>Upcoming Fundraisers</h4>",
"target": [
".widget.reveal:nth-child(1) > h4"
]
},
{
"html": "<h4>Impact Reports</h4>",
"target": [
".widget.reveal:nth-child(2) > h4"
]
},
{
"html": "<h4>Leave a lasting legacy</h4>",
"target": [
".cta > h4"
]
},
{
"html": "<h2>Every dollar, accounted for.</h2>",
"target": [
".reports-grid > .reveal:nth-child(1) > h2"
]
},
{
"html": "<h3>How FY2024 funds were used</h3>",
"target": [
".alloc > h3"
]
},
{
"html": "<h2>Lend your hands, your heart, or your expertise.</h2>",
"target": [
".vol-grid > .reveal:nth-child(1) > h2"
]
},
{
"html": "<h3>Volunteer Today</h3>",
"target": [
"#volForm > h3"
]
},
{
"html": "<h2>Questions donors & volunteers ask us.</h2>",
"target": [
"#faq > .container > .reveal > h2"
]
},
{
"html": "<h2>Get good news in your inbox.</h2>",
"target": [
".nl-box > div > h2"
]
},
{
"html": "<h5>Get Involved</h5>",
"target": [
"div:nth-child(2) > h5"
]
},
{
"html": "<h5>About</h5>",
"target": [
"div:nth-child(3) > h5"
]
},
{
"html": "<h5>Contact Us</h5>",
"target": [
"div:nth-child(4) > h5"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main id=\"top\">",
"target": [
"#top"
]
}
],
"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": "#d8e4df",
"bgColor": "#1f3d36",
"contrastRatio": 9.04,
"fontSize": "10.2pt (13.6px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 9.04"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<div><span class=\"pill\">MATCH</span>Every gift through December 31 is matched 2:1 by the Alder Family Endowment.</div>",
"target": [
".utility > .container > div:nth-child(1)"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "duplicate-id-aria",
"data": "primary-nav",
"relatedNodes": [],
"impact": "critical",
"message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<nav class=\"primary\" id=\"primary-nav\" aria-label=\"Primary\">",
"target": [
"#primary-nav"
]
}
]
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "multiple-label",
"data": null,
"relatedNodes": [],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<input type=\"range\" id=\"amount\" min=\"10\" max=\"1000\" step=\"5\" value=\"50\" aria-label=\"Donation amount\">",
"target": [
"#amount"
]
}
]
},
{
"id": "html-has-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure every HTML document has a lang attribute",
"help": "<html> element must have a lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "The <html> element has a lang attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "html-lang-valid",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure the lang attribute of the <html> element has a valid value",
"help": "<html> element must have a valid value for the lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "valid-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Value of lang attribute is included in the list of valid languages"
}
],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"TT7.b",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <img> elements have alternative text or a role of none or presentation",
"help": "Images must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has an alt attribute"
}
],
"all": [],
"none": [
{
"id": "alt-space-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a valid alt attribute value"
}
],
"impact": null,
"html": "<img src=\"https://placehold.co/104x104/1f3d36/f2b544?text=KH&font=playfair%20display\" alt=\"Kindred Harbor Foundation logo\">",
"target": [
"img[alt=\"Kindred Harbor Foundation 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": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute exists and is not empty"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input type=\"range\" id=\"amount\" min=\"10\" max=\"1000\" step=\"5\" value=\"50\" aria-label=\"Donation amount\">",
"target": [
"#amount"
]
}
]
},
{
"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=\"tel:+15035550142\">(503) 555-0142</a>",
"target": [
"div:nth-child(2) > a[href=\"tel:+15035550142\"]"
]
}
]
},
{
"id": "list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that lists are structured correctly",
"help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "only-listitems",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List element only has direct children that are allowed inside <li> elements"
}
],
"impact": null,
"html": "<ul>",
"target": [
"#primary-nav > ul"
]
}
]
},
{
"id": "listitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <li> elements are used semantically",
"help": "<li> elements must be contained in a <ul> or <ol>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "listitem",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List item has a <ul>, <ol> or role=\"list\" parent element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<li><a href=\"#mission\">Our Mission</a></li>",
"target": [
"#primary-nav > ul > li:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<img src=\"https://placehold.co/104x104/1f3d36/f2b544?text=KH&font=playfair%20display\" alt=\"Kindred Harbor Foundation logo\">",
"target": [
"img[alt=\"Kindred Harbor Foundation logo\"]"
]
}
]
},
{
"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": [
{
"any": [
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute exists and is not empty"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<div class=\"alloc-bar\" role=\"img\" aria-label=\"87% programs, 7% administration, 6% fundraising\">\n <div style=\"width:87%;background:var(--forest)\"></div>\n <div style=\"width:7%;background:var(--sun)\"></div>\n <div style=\"width:6%;background:var(--terra)\"></div>\n </div>",
"target": [
".alloc-bar"
]
}
]
},
{
"id": "select-name",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure select element has an accessible name",
"help": "Select element must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "explicit-label",
"data": null,
"relatedNodes": [
{
"html": "<label class=\"label\" for=\"fund\">Direct my gift to</label>",
"target": [
"label[for=\"fund\"]"
]
}
],
"impact": "critical",
"message": "Element has an explicit <label>"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<select id=\"fund\">",
"target": [
"#fund"
]
}
]
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<summary>Is my donation tax-deductible?</summary>",
"target": [
"details[open=\"\"] > summary"
]
}
]
},
{
"id": "target-size",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag22aa",
"wcag258"
],
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "target-size",
"data": {
"minSize": 24,
"width": 283.5,
"height": 52
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (283.5px by 52px, 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=\"#top\" class=\"brand\" aria-label=\"Kindred Harbor Foundation home\">",
"target": [
".brand"
]
}
]
}
],
"incomplete": [],
"violations": [
{
"id": "aria-required-children",
"impact": "critical",
"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": [
{
"any": [
{
"id": "aria-required-children",
"data": {
"messageKey": "unallowed",
"values": "button[tabindex]"
},
"relatedNodes": [
{
"html": "<button type=\"button\" class=\"active\" data-freq=\"once\">One-time</button>",
"target": [
"button[data-freq=\"once\"]"
]
},
{
"html": "<button type=\"button\" data-freq=\"monthly\">Monthly</button>",
"target": [
"button[data-freq=\"monthly\"]"
]
}
],
"impact": "critical",
"message": "Element has children which are not allowed: button[tabindex]"
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<div class=\"toggle\" role=\"tablist\">\n <button type=\"button\" class=\"active\" data-freq=\"once\">One-time</button>\n <button type=\"button\" data-freq=\"monthly\">Monthly</button>\n </div>",
"target": [
".toggle"
],
"failureSummary": "Fix any of the following:\n Element has children which are not allowed: button[tabindex]"
}
]
},
{
"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": "#1d2421",
"bgColor": "#d9653b",
"contrastRatio": 4.42,
"fontSize": "11.4pt (15.2px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#give\" class=\"btn btn-primary\">Give Now</a>",
"target": [
"li:nth-child(8) > .btn-primary.btn[href$=\"#give\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.42 (foreground color: #1d2421, background color: #d9653b, font size: 11.4pt (15.2px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#give\" class=\"btn btn-primary\">Give Now</a>",
"target": [
"li:nth-child(8) > .btn-primary.btn[href$=\"#give\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.42 (foreground color: #1d2421, background color: #d9653b, font size: 11.4pt (15.2px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Community-led since 2009</span>",
"target": [
".in.reveal:nth-child(1) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d9653b",
"contrastRatio": 3.57,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#give\" class=\"btn btn-primary\">Start Giving \u2192</a>",
"target": [
".hero-actions > .btn-primary.btn[href$=\"#give\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#give\" class=\"btn btn-primary\">Start Giving \u2192</a>",
"target": [
".hero-actions > .btn-primary.btn[href$=\"#give\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d9653b",
"contrastRatio": 3.57,
"fontSize": "13.2pt (17.6px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"quote-badge\">\u201cWe don\u2019t parachute in. We pull up a chair.\u201d<br><small style=\"font-family:var(--sans);font-size:.8rem;opacity:.85\">\u2014 Dr. Imani Okafor, Executive Director</small></div>",
"target": [
".quote-badge"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 13.2pt (17.6px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"quote-badge\">\u201cWe don\u2019t parachute in. We pull up a chair.\u201d<br><small style=\"font-family:var(--sans);font-size:.8rem;opacity:.85\">\u2014 Dr. Imani Okafor, Executive Director</small></div>",
"target": [
".quote-badge"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 13.2pt (17.6px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#f9e8e2",
"bgColor": "#d9653b",
"contrastRatio": 3,
"fontSize": "9.6pt (12.8px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"quote-badge\">\u201cWe don\u2019t parachute in. We pull up a chair.\u201d<br><small style=\"font-family:var(--sans);font-size:.8rem;opacity:.85\">\u2014 Dr. Imani Okafor, Executive Director</small></div>",
"target": [
".quote-badge"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3 (foreground color: #f9e8e2, background color: #d9653b, font size: 9.6pt (12.8px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<small style=\"font-family:var(--sans);font-size:.8rem;opacity:.85\">\u2014 Dr. Imani Okafor, Executive Director</small>",
"target": [
".quote-badge > small"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3 (foreground color: #f9e8e2, background color: #d9653b, font size: 9.6pt (12.8px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Our Mission</span>",
"target": [
".in.reveal:nth-child(2) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"programs\" id=\"programs\">",
"target": [
"#programs"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Community Programs</span>",
"target": [
".section-head.in.reveal > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, 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": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program.in:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>2.4 million</b>",
"target": [
".program.in:nth-child(1) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program.in:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>94%</b>",
"target": [
".program.in:nth-child(2) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program.in:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>1,180</b>",
"target": [
".program.in:nth-child(3) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>2.4 million</b>",
"target": [
".program:nth-child(1) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>94%</b>",
"target": [
".program:nth-child(2) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>1,180</b>",
"target": [
".program:nth-child(3) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program:nth-child(4)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>2,650</b>",
"target": [
".program:nth-child(4) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program:nth-child(5)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>81%</b>",
"target": [
".program:nth-child(5) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"fontSize": "10.6pt (14.08px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"program reveal in\">",
"target": [
".program:nth-child(6)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b>140</b>",
"target": [
".program:nth-child(6) > .program-body > .metric > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 10.6pt (14.08px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Community-led since 2009</span>",
"target": [
".hero-grid > .in.reveal:nth-child(1) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"programs\" id=\"programs\">",
"target": [
"#programs"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Community Programs</span>",
"target": [
"#programs > .container > .section-head.in.reveal > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, 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": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Beneficiary Stories</span>",
"target": [
"#stories > .container > .section-head.in.reveal > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "10.8pt (14.4px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"story-feature reveal in\">",
"target": [
".story-feature"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 10.8pt (14.4px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#blog\" class=\"readmore\">Read Daniel\u2019s full story \u2192</a>",
"target": [
".body > .readmore[href$=\"#blog\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 10.8pt (14.4px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"news\" id=\"blog\">",
"target": [
"#blog"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">From the Blog</span>",
"target": [
"#blog > .container > .section-head.in.reveal > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, 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": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "10.8pt (14.4px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"news\" id=\"blog\">",
"target": [
"#blog"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 10.8pt (14.4px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#blog\" class=\"readmore\">Continue reading \u2192</a>",
"target": [
".post:nth-child(1) > div > .readmore[href$=\"#blog\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 10.8pt (14.4px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "10.8pt (14.4px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"news\" id=\"blog\">",
"target": [
"#blog"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 10.8pt (14.4px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#blog\" class=\"readmore\">Get the toolkit \u2192</a>",
"target": [
".post:nth-child(2) > div > .readmore[href$=\"#blog\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 10.8pt (14.4px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>PDF</span>",
"target": [
".doc[href$=\"#reports\"]:nth-child(2) > span"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>PDF</span>",
"target": [
".doc[href$=\"#reports\"]:nth-child(2) > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>PDF</span>",
"target": [
".doc[href$=\"#reports\"]:nth-child(3) > span"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>PDF</span>",
"target": [
".doc[href$=\"#reports\"]:nth-child(3) > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>PDF</span>",
"target": [
".doc[href$=\"#reports\"]:nth-child(4) > span"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>PDF</span>",
"target": [
".doc[href$=\"#reports\"]:nth-child(4) > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>PDF</span>",
"target": [
".doc[href$=\"#reports\"]:nth-child(5) > span"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>PDF</span>",
"target": [
".doc[href$=\"#reports\"]:nth-child(5) > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "10.8pt (14.4px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"news\" id=\"blog\">",
"target": [
"#blog"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 10.8pt (14.4px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#blog\" class=\"readmore\">Meet the partners \u2192</a>",
"target": [
".post:nth-child(3) > div > .readmore[href$=\"#blog\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 10.8pt (14.4px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d9653b",
"contrastRatio": 3.57,
"fontSize": "13.8pt (18.4px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"widget cta reveal in\">",
"target": [
".cta"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 13.8pt (18.4px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<h4>Leave a lasting legacy</h4>",
"target": [
".cta > h4"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 13.8pt (18.4px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffe9df",
"bgColor": "#d9653b",
"contrastRatio": 3.05,
"fontSize": "11.0pt (14.72px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"widget cta reveal in\">",
"target": [
".cta"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.05 (foreground color: #ffe9df, background color: #d9653b, font size: 11.0pt (14.72px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>Planned gifts and bequests to the Kindred Harbor endowment provide steady support for generations. Our team can help you explore options with your advisor.</p>",
"target": [
".cta > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.05 (foreground color: #ffe9df, background color: #d9653b, font size: 11.0pt (14.72px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Annual Reports & Accountability</span>",
"target": [
".reports-grid > .in.reveal > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d9653b",
"contrastRatio": 3.57,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#reports\" class=\"btn btn-primary\">Download 2024 Annual Report</a>",
"target": [
".btn-primary.btn[href$=\"#reports\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#reports\" class=\"btn btn-primary\">Download 2024 Annual Report</a>",
"target": [
".btn-primary.btn[href$=\"#reports\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Annual Reports & Accountability</span>",
"target": [
".reports-grid > .in.reveal:nth-child(1) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#efe5d6",
"contrastRatio": 2.86,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"volunteer\" id=\"volunteer\">",
"target": [
"#volunteer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.86 (foreground color: #d9653b, background color: #efe5d6, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Volunteer</span>",
"target": [
".vol-grid > .in.reveal:nth-child(1) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.86 (foreground color: #d9653b, background color: #efe5d6, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d9653b",
"contrastRatio": 3.57,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<button class=\"btn btn-primary\" type=\"submit\">Sign Me Up \u2192</button>",
"target": [
".btn-primary[type=\"submit\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button class=\"btn btn-primary\" type=\"submit\">Sign Me Up \u2192</button>",
"target": [
".btn-primary[type=\"submit\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #ffffff, background color: #d9653b, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Frequently Asked Questions</span>",
"target": [
"#faq > .container > .in.reveal > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Community-led since 2009</span>",
"target": [
".hero-grid > .reveal.in:nth-child(1) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Our Mission</span>",
"target": [
".reveal.in:nth-child(2) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"programs\" id=\"programs\">",
"target": [
"#programs"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Community Programs</span>",
"target": [
"#programs > .container > .section-head.reveal.in > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, 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": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Beneficiary Stories</span>",
"target": [
"#stories > .container > .section-head.reveal.in > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#ffffff",
"contrastRatio": 3.57,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"news\" id=\"blog\">",
"target": [
"#blog"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.57 (foreground color: #d9653b, background color: #ffffff, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">From the Blog</span>",
"target": [
"#blog > .container > .section-head.reveal.in > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.57 (foreground color: #d9653b, 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": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Annual Reports & Accountability</span>",
"target": [
".reports-grid > .reveal.in:nth-child(1) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#efe5d6",
"contrastRatio": 2.86,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"volunteer\" id=\"volunteer\">",
"target": [
"#volunteer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.86 (foreground color: #d9653b, background color: #efe5d6, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Volunteer</span>",
"target": [
".vol-grid > .reveal.in:nth-child(1) > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.86 (foreground color: #d9653b, background color: #efe5d6, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9653b",
"bgColor": "#f7f1e8",
"contrastRatio": 3.18,
"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.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Frequently Asked Questions</span>",
"target": [
"#faq > .container > .reveal.in > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.18 (foreground color: #d9653b, background color: #f7f1e8, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffe9df",
"bgColor": "#d9653b",
"contrastRatio": 3.05,
"fontSize": "12.4pt (16.5px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"nl-box reveal in\">",
"target": [
".nl-box"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.05 (foreground color: #ffe9df, background color: #d9653b, font size: 12.4pt (16.5px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>One email a month with stories from the field, volunteer opportunities and upcoming fundraisers. No spam \u2014 just hope, delivered.</p>",
"target": [
".nl-box > div > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.05 (foreground color: #ffe9df, background color: #d9653b, font size: 12.4pt (16.5px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 11011
},
{
"y": 576,
"height": 11011
},
{
"y": 1152,
"height": 11011
},
{
"y": 1728,
"height": 11011
},
{
"y": 2304,
"height": 11011
},
{
"y": 2880,
"height": 11011
},
{
"y": 3456,
"height": 11011
},
{
"y": 4032,
"height": 11011
},
{
"y": 4608,
"height": 11011
},
{
"y": 5184,
"height": 11011
},
{
"y": 5760,
"height": 11011
},
{
"y": 6336,
"height": 11011
},
{
"y": 6950,
"height": 11049
},
{
"y": 7526,
"height": 11049
},
{
"y": 8102,
"height": 11049
},
{
"y": 8678,
"height": 11049
},
{
"y": 9254,
"height": 11049
},
{
"y": 9830,
"height": 11049
},
{
"y": 10329,
"height": 11049
}
],
"scans": 20,
"max_states": 512,
"settle_ms": 5000,
"page_timeout_seconds": 150,
"layout_stability": "consecutive 100ms size samples within one CSS pixel",
"animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
"interactive_states": "not exercised",
"horizontal_scroll": "not exercised"
}
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Non-Profit/Charity" sector.
Your goal is to generate the full HTML code for a page that is not just functional but also visually compelling, content-rich, and feels like a finished product ready for launch.
**Client & Category:**
- Industry: "Non-Profit/Charity"
- Description: Charitable organizations, non-profit initiatives, volunteering, and fundraising resources.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Non-Profit/Charity" category.
2. **Define Page:** Determine the most effective primary page type (e.g., homepage, service landing page, category portal) to showcase this fictional entity.
3. **Design:** Develop an opinionated, modern, and professional layout. Make distinct choices about structure and flow.
**Content & Structure Requirements (Deliver a COMPLETE page):**
- **Overall:** The final page must feel substantial and complete, with realistic amounts of text (multiple paragraphs per section where appropriate, avoid single sentences), well-integrated placeholder images, and logical flow. It should look like a real website a business would proudly use.
- **HEADER:** Include the invented site name, tagline, a logo placeholder image, and a primary navigation bar. Ensure the navigation has **at least 5-7 clearly defined, relevant links** including: "Impact", "Blog", "Our Mission".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Non-Profit/Charity" category. Consider themes similar to: "Community Programs", "Beneficiary Stories", "Annual Reports".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "endowment", "volunteer hours", "community outreach".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Start Giving", "Volunteer Today", "Give Now".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Non-Profit/Charity" sector. Ideas similar but not limited to: "donation tracker".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "impact reports", "recent news", "upcoming fundraisers".
- **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.