Meta Muse Spark Open – Personal Finance
via Modal · Generated
- AIMAC Debt 30.36
- Cost $0.05
- Total Violations 42
- HTML Size 38 KB
- Em Dashes 16
Screenshot
View Live Page
Accessibility Issues Found
8 Critical 34 Serious
-
color-contrast serious 34 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<span>Clarity for Every Dollar</span> -
image-alt critical 4 instances
Images must have alternative text
Example HTML
<img src="https://i.pravatar.cc/100?u=a1" style="width:36px;height:36px;border-radius:50%"> -
label critical 4 instances
Form elements must have labels
Example HTML
<input type="range" id="initial" min="0" max="50000" step="500" value="5000">
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>Crestwell — Clarity for Every Dollar.</title>
<meta name="description" content="Crestwell is modern personal finance made human. Banking, investing, budgeting and retirement planning in one calm, powerful place.">
<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,ital,soft,wght@9..144,0,0,600;9..144,1,0,600&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500&display=swap" rel="stylesheet">
<script src="https://unpkg.com/lucide@latest"></script>
<style>
:root{
--navy:#0B1D33;
--navy-2:#112845;
--cream:#F9F6F0;
--paper:#FFFFFF;
--line:#E8E2D6;
--teal:#0E9A8B;
--teal-dark:#0B7F73;
--gold:#C9A86A;
--muted:#6B7280;
--text:#1A2332;
--radius:20px;
--shadow:0 12px 40px rgba(11,29,51,.10);
--shadow-sm:0 8px 24px rgba(11,29,51,.08);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:Inter,system-ui,sans-serif;color:var(--text);background:var(--cream);line-height:1.6;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
.container{width:min(1180px,92vw);margin-inline:auto}
.btn{border:0;cursor:pointer;font-weight:600;border-radius:999px;padding:13px 20px;display:inline-flex;align-items:center;gap:8px;transition:.2s}
.btn-primary{background:var(--teal);color:white;box-shadow:0 10px 24px rgba(14,154,139,.25)}
.btn-primary:hover{background:var(--teal-dark);transform:translateY(-1px)}
.btn-secondary{background:var(--navy);color:white}
.btn-ghost{background:white;border:1px solid var(--line);color:var(--navy)}
.eyebrow{font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--teal-dark);font-weight:600}
h1,h2,h3{font-family:Fraunces,serif;letter-spacing:-.03em;color:var(--navy);line-height:1.05}
h1{font-size:clamp(38px,5vw,56px)}
h2{font-size:clamp(30px,3.6vw,42px)}
p{color:#3E4A5E}
.topbar{background:var(--navy);color:#DCE6F2;font-size:13px;padding:8px 0;text-align:center}
.topbar span{color:var(--gold);font-weight:600}
header{position:sticky;top:0;z-index:50;background:rgba(249,246,240,.92);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.nav-wrap{display:flex;align-items:center;justify-content:space-between;padding:14px 0;gap:20px}
.logo{display:flex;align-items:center;gap:12px}
.logo-mark{width:40px;height:40px;border-radius:12px;background:var(--navy);display:grid;place-items:center;color:white;font-family:Fraunces,serif;font-weight:700;font-size:20px}
.logo-text b{display:block;font-family:Fraunces,serif;font-size:18px;line-height:1;color:var(--navy)}
.logo-text span{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:600}
.nav{display:flex;gap:22px;align-items:center;font-size:14px;font-weight:500;color:#2A384F}
.nav a{position:relative;padding:6px 0}
.nav a.active:after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:2px;background:var(--teal);border-radius:999px}
.nav-actions{display:flex;gap:10px;align-items:center}
.hamburger{display:none;width:42px;height:42px;border-radius:12px;border:1px solid var(--line);background:white;place-items:center}
.hero{padding:26px 0 40px}
.hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:36px;align-items:center}
.hero-card{background:white;border:1px solid var(--line);border-radius:28px;padding:18px;box-shadow:var(--shadow)}
.hero-img{border-radius:22px;overflow:hidden;aspect-ratio:1.25/1;position:relative;background:#ddd}
.hero-img img{width:100%;height:100%;object-fit:cover}
.float-stat{position:absolute;background:white;border-radius:18px;padding:12px 14px;box-shadow:var(--shadow);border:1px solid var(--line);display:flex;align-items:center;gap:12px}
.float-stat i{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;background:#E6F6F4;color:var(--teal)}
.trust-bar{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:rgba(255,255,255,.6);padding:14px 0;display:flex;gap:24px;flex-wrap:wrap;justify-content:space-between;align-items:center;font-size:13px;color:var(--muted);font-weight:600}
.trust-logos{display:flex;gap:22px;align-items:center;opacity:.8}
.section{padding:64px 0}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.feature{background:white;border:1px solid var(--line);border-radius:20px;padding:22px;box-shadow:var(--shadow-sm)}
.feature-icon{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:var(--cream);border:1px solid var(--line);color:var(--navy);margin-bottom:14px}
.split{display:grid;grid-template-columns:1fr 1fr;gap:32px;align-items:center}
.split.reverse{grid-template-columns:.95fr 1.05fr}
.image-frame{border-radius:24px;overflow:hidden;border:1px solid var(--line);background:white;box-shadow:var(--shadow)}
.image-frame img{aspect-ratio:1.2/0.95;object-fit:cover;width:100%}
.progress-list{display:grid;gap:14px;margin-top:18px}
.progress{border:1px solid var(--line);background:white;border-radius:16px;padding:14px}
.bar{height:8px;background:#EFE9DD;border-radius:999px;overflow:hidden;margin-top:8px}
.bar span{display:block;height:100%;background:var(--teal);border-radius:999px}
.calculator{background:var(--navy);color:white;border-radius:28px;padding:28px;position:relative;overflow:hidden}
.calculator:before{content:"";position:absolute;inset:0;background:radial-gradient(600px 400px at 85% 10%, rgba(14,154,139,.35), transparent 60%), radial-gradient(500px 300px at 10% 90%, rgba(201,168,106,.18), transparent 60%)}
.calc-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:24px;position:relative}
.calc-panel{background:white;color:var(--text);border-radius:20px;padding:20px;border:1px solid var(--line)}
.input-group{margin-bottom:14px}
.input-group label{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.range-wrap{display:flex;align-items:center;gap:12px}
input[type=range]{flex:1;accent-color:var(--teal)}
.value-pill{background:var(--cream);border:1px solid var(--line);padding:6px 10px;border-radius:999px;font-weight:700;font-size:13px;min-width:84px;text-align:center;color:var(--navy)}
.result-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}
.result{background:var(--cream);border:1px solid var(--line);border-radius:16px;padding:14px;text-align:left}
.result b{font-family:Fraunces,serif;font-size:22px;color:var(--navy)}
.chart-bars{display:flex;align-items:end;gap:6px;height:110px;margin-top:16px}
.chart-bars div{flex:1;background:linear-gradient(to top, var(--teal), #3ED1C2);border-radius:8px 8px 0 0;min-height:12px}
.retirement{background:white;border:1px solid var(--line);border-radius:28px;padding:28px;box-shadow:var(--shadow)}
.sidebar{display:grid;gap:16px}
.side-card{background:white;border:1px solid var(--line);border-radius:18px;padding:16px}
.rate-table{width:100%;border-collapse:collapse;font-size:13px}
.rate-table th{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);text-align:left;padding:8px 0;border-bottom:1px solid var(--line)}
.rate-table td{padding:10px 0;border-bottom:1px solid #F0EADF;font-weight:500}
.badge{font-size:11px;padding:4px 8px;border-radius:999px;background:#E6F6F4;color:var(--teal-dark);font-weight:700}
.testimonials{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.testimonial{background:var(--navy);color:white;border-radius:20px;padding:20px;position:relative;overflow:hidden}
.testimonial.light{background:white;color:var(--text);border:1px solid var(--line)}
.stars{color:var(--gold);letter-spacing:2px}
.faq{max-width:760px;margin:0 auto;display:grid;gap:12px}
.faq-item{background:white;border:1px solid var(--line);border-radius:16px;overflow:hidden}
.faq-q{width:100%;text-align:left;background:white;border:0;padding:16px 18px;font-weight:700;display:flex;justify-content:space-between;align-items:center;cursor:pointer;color:var(--navy)}
.faq-a{padding:0 18px 16px;color:#3E4A5E;display:none}
.faq-item.open .faq-a{display:block}
.footer{background:var(--navy);color:#C9D6E8;padding:40px 0 0}
.footer-grid{display:grid;grid-template-columns:1.4fr .8fr .8fr 1fr;gap:28px;padding-bottom:28px;border-bottom:1px solid rgba(255,255,255,.08)}
.footer h4{color:white;margin:0 0 10px;font-family:Inter,sans-serif;letter-spacing:-.02em}
.footer a{color:#A9BBD3;font-size:14px}
.footer a:hover{color:white}
.subfooter{display:flex;justify-content:space-between;align-items:center;padding:16px 0;color:#8AA0BE;font-size:13px;flex-wrap:wrap;gap:12px}
.newsletter{display:flex;gap:8px;margin-top:12px}
.newsletter input{flex:1;padding:12px 14px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.06);color:white;outline:none}
.mobile-nav{position:fixed;inset:0;background:rgba(11,29,51,.96);color:white;z-index:100;display:none;padding:24px}
.mobile-nav.open{display:block}
@media(max-width:960px){
.nav,.nav-actions .btn-ghost{display:none}
.hamburger{display:grid}
.hero-grid,.split,.calc-grid,.grid3,.testimonials,.footer-grid{grid-template-columns:1fr}
.trust-bar{justify-content:center}
}
</style>
</head>
<body>
<div class="topbar">Member FDIC • Up to 4.30% APY on high-yield savings • <span>No hidden fees. No surprises.</span></div>
<header>
<div class="container nav-wrap">
<a href="#home" class="logo">
<div class="logo-mark">◈</div>
<div class="logo-text"><b>CRESTWELL</b><span>Clarity for Every Dollar</span></div>
</a>
<nav class="nav" aria-label="Primary">
<a href="#banking">Banking</a>
<a href="#investing">Investing</a>
<a href="#retirement" class="active">Retirement</a>
<a href="#learn">Learn</a>
<a href="#tools">Tools</a>
<a href="#contact">Contact</a>
</nav>
<div class="nav-actions">
<button class="btn btn-ghost">Sign In</button>
<a href="#open" class="btn btn-primary">Open Account <i data-lucide="arrow-right" style="width:16px"></i></a>
<button class="hamburger" id="menuBtn" aria-label="Open menu"><i data-lucide="menu"></i></button>
</div>
</div>
</header>
<div class="mobile-nav" id="mobileNav">
<div style="display:flex;justify-content:space-between;align-items:center"><b>CRESTWELL</b><button id="closeBtn" class="btn btn-ghost" style="color:white;background:transparent;border-color:rgba(255,255,255,.2)">Close</button></div>
<div style="display:grid;gap:18px;margin-top:32px;font-size:22px;font-weight:600">
<a href="#banking">Banking</a><a href="#investing">Investing</a><a href="#retirement">Retirement</a><a href="#tools">Tools</a><a href="#contact">Contact</a>
<a href="#open" class="btn btn-primary" style="justify-content:center;margin-top:12px">Open Account</a>
</div>
</div>
<main id="home">
<!-- HERO -->
<section class="hero container">
<div class="hero-grid">
<div>
<div class="eyebrow">Personal Finance, finally human</div>
<h1>Your money,<br>finally working <em style="font-family:Fraunces,serif;font-weight:600;color:var(--teal);font-style:italic">as hard as you do.</em></h1>
<p style="max-width:560px;font-size:17px">Crestwell brings banking, automated investing, and honest guidance together in one calm dashboard. No jargon. No predatory fees. Just real tools to help you save faster, pay down debt smarter, and retire with confidence.</p>
<div style="display:flex;gap:12px;margin-top:18px;flex-wrap:wrap">
<a href="#open" class="btn btn-primary" style="padding:15px 22px">Open Account — 2 min <i data-lucide="shield-check" style="width:18px"></i></a>
<a href="#tools" class="btn btn-ghost"><i data-lucide="calculator" style="width:18px"></i> Try the Calculator</a>
</div>
<div style="display:flex;gap:18px;margin-top:22px;flex-wrap:wrap">
<div style="display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--navy)"><i data-lucide="check-circle" style="width:18px;color:var(--teal)"></i> FDIC Insured up to $250k</div>
<div style="display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--navy)"><i data-lucide="check-circle" style="width:18px;color:var(--teal)"></i> No minimums, no monthly fees</div>
</div>
</div>
<div class="hero-card">
<div class="hero-img">
<img src="https://picsum.photos/640/520?random=7" alt="Financial planning">
<div class="float-stat" style="top:16px;left:16px">
<i data-lucide="piggy-bank"></i>
<div><div style="font-size:12px;color:var(--muted);font-weight:700;letter-spacing:.08em;text-transform:uppercase">Savings APY</div><b style="color:var(--navy)">4.30% Annual Yield</b></div>
</div>
<div class="float-stat" style="bottom:18px;right:16px;max-width:220px">
<img src="https://i.pravatar.cc/100?u=a1" style="width:36px;height:36px;border-radius:50%">
<div><div style="font-size:13px;font-weight:700;color:var(--navy)">Maya R. paid off $18k</div><div style="font-size:12px;color:var(--muted)">Debt-Free in 19 months</div></div>
</div>
</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px">
<div style="background:var(--cream);border:1px solid var(--line);border-radius:16px;padding:14px"><div style="font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:700">Members</div><b style="font-family:Fraunces,serif;font-size:22px;color:var(--navy)">482K+</b><div style="font-size:13px;color:var(--muted)">Trusted nationwide</div></div>
<div style="background:var(--navy);color:white;border-radius:16px;padding:14px"><div style="font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#8AA0BE;font-weight:700">Avg. saved /yr</div><b style="font-family:Fraunces,serif;font-size:22px">$3,420</b><div style="font-size:13px;color:#A9BBD3">With autopilot savings</div></div>
</div>
</div>
</div>
<div class="trust-bar" style="margin-top:26px">
<span>AS SEEN IN</span>
<div class="trust-logos">
<span>Forbes</span><span>• BLOOMBERG</span><span>• WSJ</span><span>• WIRED</span><span>• Morningstar</span>
</div>
<span style="display:flex;gap:6px;align-items:center"><i data-lucide="star" style="width:14px;color:var(--gold);fill:var(--gold)"></i> 4.8/5 (12,400 reviews)</span>
</div>
</section>
<!-- FEATURE GRID -->
<section class="container section" id="banking">
<div style="display:flex;justify-content:space-between;align-items:end;gap:20px;flex-wrap:wrap">
<div><div class="eyebrow">Why Crestwell</div><h2 style="margin:8px 0 0">One app for<br>every money decision.</h2></div>
<p style="max-width:520px">From everyday spending to amortization schedules and Roth IRAs, we translate finance into plain English — so you can act with confidence, not anxiety.</p>
</div>
<div class="grid3" style="margin-top:22px">
<div class="feature">
<div class="feature-icon"><i data-lucide="wallet"></i></div>
<h3 style="margin:0">Everyday Banking</h3>
<p>High-yield checking & savings with 4.30% APY, instant transfers, and round-ups that sweep spare change into savings. Understand your cash flow with clean categories, not spreadsheets.</p>
<ul style="padding-left:18px;color:#3E4A5E;font-size:14px"><li>Fee-free overdraft up to $200</li><li>2-day early paycheck</li><li>Virtual cards for subscriptions</li></ul>
<a href="#" class="btn btn-ghost" style="margin-top:10px;width:100%;justify-content:center">Open Account</a>
</div>
<div class="feature" style="background:var(--navy);color:#DCE6F2;border-color:var(--navy)">
<div class="feature-icon" style="background:rgba(255,255,255,.08);color:white;border-color:rgba(255,255,255,.12)"><i data-lucide="trending-up"></i></div>
<h3 style="margin:0;color:white">Automated Investing</h3>
<p style="color:#A9BBD3">We build a diversified, low-cost portfolio based on your risk tolerance and time horizon. We handle rebalancing, dividend reinvestment, and tax-loss harvesting automatically.</p>
<div style="background:rgba(255,255,255,.06);border-radius:14px;padding:12px;margin-top:10px;display:flex;justify-content:space-between"><span style="font-size:13px">Management fee</span><b>0.25%</b></div>
<a href="#" class="btn btn-primary" style="margin-top:12px;width:100%;justify-content:center;background:white;color:var(--navy)">Start Investing</a>
</div>
<div class="feature">
<div class="feature-icon"><i data-lucide="shield"></i></div>
<h3 style="margin:0">Debt Freedom Plan</h3>
<p>Tackle high-interest debt with a strategy that fits your life. Whether you choose avalanche or snowball, we model your amortization schedule so you see every dollar of interest saved.</p>
<div style="display:flex;gap:8px;flex-wrap:wrap;margin-top:8px"><span class="badge">Credit Card</span><span class="badge">Student Loan</span><span class="badge">Auto</span></div>
<a href="#" class="btn btn-ghost" style="margin-top:12px;width:100%;justify-content:center">Calculate Payoff</a>
</div>
</div>
</section>
<!-- SAVINGS GOALS -->
<section class="container section" id="investing" style="padding-top:0">
<div class="split">
<div class="image-frame">
<img src="https://picsum.photos/640/520?random=11" alt="Saving goals">
</div>
<div>
<div class="eyebrow">Savings Goals</div>
<h2>Make compound interest your quiet superpower.</h2>
<p>Compound interest is interest earning interest — the engine behind long-term wealth. When your APY compounds daily, even small, consistent contributions create exponential growth over time. A $200 monthly contribution at 4.30% APY becomes more than $32,000 in 10 years, with over $8,000 coming purely from interest.</p>
<p>With Crestwell Goals, you create dedicated buckets for your emergency fund, house down payment, or next adventure. Automate transfers on payday, visualize your timeline, and watch your effective yield grow. We’ll even nudge you when you’re on track to hit your goal early.</p>
<div class="progress-list">
<div class="progress"><div style="display:flex;justify-content:space-between;font-weight:700;font-size:13px"><span>🏠 House Fund</span><span>$18,400 / $25,000</span></div><div class="bar"><span style="width:73%"></span></div></div>
<div class="progress"><div style="display:flex;justify-content:space-between;font-weight:700;font-size:13px"><span>🛡️ Emergency 6-mo</span><span>$12,100 / $15,000</span></div><div class="bar"><span style="width:80%;background:var(--gold)"></span></div></div>
<div class="progress"><div style="display:flex;justify-content:space-between;font-weight:700;font-size:13px"><span>✈️ Sabbatical</span><span>$3,200 / $8,000</span></div><div class="bar"><span style="width:40%"></span></div></div>
</div>
</div>
</div>
</section>
<!-- INTERACTIVE CALCULATOR -->
<section class="container section" id="tools">
<div class="calculator">
<div style="position:relative;display:flex;justify-content:space-between;gap:16px;align-items:start;flex-wrap:wrap">
<div><div class="eyebrow" style="color:#7EDCCF">Interactive • Tools</div><h2 style="color:white;margin:8px 0 6px">Savings & Compound Growth Calculator</h2><p style="color:#A9BBD3;max-width:560px;margin:0">Adjust your starting balance, monthly contribution, and APY to see how compound interest builds wealth over time. APY means Annual Percentage Yield — it includes compounding.</p></div>
<div style="background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);border-radius:14px;padding:10px 14px;color:white;font-size:13px">🔒 Your data stays on your device. No signup required.</div>
</div>
<div class="calc-grid" style="margin-top:20px">
<div class="calc-panel">
<div class="input-group">
<label>Initial Deposit — $<span id="vInitial">5000</span></label>
<div class="range-wrap"><input type="range" id="initial" min="0" max="50000" step="500" value="5000"><span class="value-pill" id="pillInitial">$5,000</span></div>
</div>
<div class="input-group">
<label>Monthly Contribution — $<span id="vMonthly">400</span></label>
<div class="range-wrap"><input type="range" id="monthly" min="0" max="2000" step="50" value="400"><span class="value-pill" id="pillMonthly">$400</span></div>
</div>
<div class="input-group">
<label>APY % — <span id="vApy">4.30</span>%</label>
<div class="range-wrap"><input type="range" id="apy" min="0.5" max="8" step="0.1" value="4.3"><span class="value-pill" id="pillApy">4.30%</span></div>
</div>
<div class="input-group">
<label>Time Horizon — <span id="vYears">10</span> years</label>
<div class="range-wrap"><input type="range" id="years" min="1" max="40" step="1" value="10"><span class="value-pill" id="pillYears">10 yrs</span></div>
</div>
<div class="result-grid">
<div class="result"><div style="font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700">Future Value</div><b id="futureVal">$78,420</b><div style="font-size:12px;color:var(--muted)">In today's dollars</div></div>
<div class="result" style="background:var(--navy);color:white;border-color:var(--navy)"><div style="font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#8AA0BE;font-weight:700">Interest Earned</div><b id="interestVal" style="color:white">$25,420</b><div style="font-size:12px;color:#A9BBD3">Pure compound growth</div></div>
</div>
<div class="chart-bars" id="chart"></div>
<div style="display:flex;justify-content:space-between;font-size:11px;color:var(--muted);font-weight:600;margin-top:6px"><span>Year 1</span><span>Today</span><span id="chartEnd">Year 10</span></div>
<button class="btn btn-secondary" style="width:100%;justify-content:center;margin-top:14px" onclick="alert('Your personalized plan has been generated! Check your email for the PDF.')">Plan Retirement — Get My Report</button>
</div>
<div style="position:relative">
<div style="background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:20px;padding:18px">
<h3 style="color:white;margin:0">How it works</h3>
<p style="color:#A9BBD3;font-size:14px">We compound daily: <b style="color:white">A = P(1 + r/365)^(365*t) + PMT[((1+r/12)^n -1)/(r/12)]</b>. Don't worry — we do the math. You focus on consistency. Increasing your contribution by just $50/mo can add $18k+ over 20 years.</p>
<div style="background:white;border-radius:14px;padding:14px;margin-top:12px">
<div style="font-weight:700;color:var(--navy);display:flex;justify-content:space-between"><span>Debt Payoff Simulator</span><span class="badge">$320/mo</span></div>
<div style="font-size:13px;color:var(--muted)">$12k card at 21.9% APR • Avalanche vs Snowball</div>
<div class="bar" style="margin-top:10px"><span style="width:64%"></span></div>
<div style="display:flex;justify-content:space-between;font-size:12px;font-weight:700;margin-top:6px"><span>Avalanche: 41 mo</span><span style="color:var(--teal)">Save $2,180 in interest</span></div>
</div>
<div style="display:flex;gap:8px;margin-top:14px">
<div style="flex:1;background:var(--gold);color:var(--navy);border-radius:12px;padding:12px;text-align:center"><b style="font-family:Fraunces,serif;font-size:18px">4.9/5</b><div style="font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase">Trustpilot</div></div>
<div style="flex:1;background:white;color:var(--navy);border-radius:12px;padding:12px;text-align:center"><b style="font-family:Fraunces,serif;font-size:18px">$1.2B+</b><div style="font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)">Assets managed</div></div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- RETIREMENT + SIDEBAR -->
<section class="container section" id="retirement">
<div style="display:grid;grid-template-columns:1.55fr .85fr;gap:20px">
<div class="retirement">
<div class="eyebrow">Retirement Planning</div>
<h2 style="margin:8px 0">Retire on your terms — with a plan you actually understand.</h2>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:14px">
<p>Retirement isn’t a magic number. It’s a cash-flow timeline. We start with your desired retirement age, longevity assumptions, and inflation expectations (we default to 2.5%), then reverse-engineer how much you need to save monthly across 401(k), IRA, and taxable accounts.</p>
<p>We demystify Roth vs Traditional, employer match optimization, and required minimum distributions (RMDs). You’ll see your amortization-style drawdown schedule — how your nest egg converts into paychecks. And we stress-test it against market downturns, so you retire resilient, not just optimistic.</p>
</div>
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px">
<div class="feature" style="padding:14px"><b style="color:var(--navy)">401(k) Max 2025</b><div style="font-size:13px;color:var(--muted)">$23,500 + $7,500 catch-up if 50+</div></div>
<div class="feature" style="padding:14px"><b style="color:var(--navy)">IRA Limit</b><div style="font-size:13px;color:var(--muted)">$7,000 + $1,000 catch-up</div></div>
<div class="feature" style="padding:14px"><b style="color:var(--navy)">Safe Withdrawal</b><div style="font-size:13px;color:var(--muted)">We model 4% rule + dynamic</div></div>
</div>
<div style="display:flex;gap:10px;margin-top:16px;flex-wrap:wrap">
<a href="#tools" class="btn btn-primary">Plan Retirement <i data-lucide="arrow-right" style="width:16px"></i></a>
<a href="#" class="btn btn-ghost">Talk to a fiduciary advisor</a>
</div>
<div class="image-frame" style="margin-top:18px"><img src="https://picsum.photos/900/420?random=21" alt="Retirement planning" style="aspect-ratio:1.8/0.9"></div>
</div>
<aside class="sidebar">
<div class="side-card">
<div style="display:flex;justify-content:space-between;align-items:center"><b style="color:var(--navy)">Market Pulse</b><span style="font-size:11px;background:#E6F6F4;color:var(--teal-dark);padding:4px 8px;border-radius:999px;font-weight:700">LIVE</span></div>
<div style="margin-top:10px;display:grid;gap:10px;font-size:13px">
<div style="display:flex;justify-content:space-between"><span>S&P 500</span><b style="color:#0E9A8B">+0.82% ▲</b></div>
<div style="display:flex;justify-content:space-between"><span>Nasdaq</span><b style="color:#0E9A8B">+1.14% ▲</b></div>
<div style="display:flex;justify-content:space-between"><span>10-Yr Treasury</span><b>4.18%</b></div>
<div style="background:var(--cream);border:1px dashed var(--line);border-radius:12px;padding:10px;font-size:12px;color:var(--muted)"><b style="color:var(--navy)">Tip:</b> When yields rise, bond prices fall. Keep duration aligned with your horizon.</div>
</div>
</div>
<div class="side-card">
<b style="color:var(--navy)">Rate Comparison</b><div style="font-size:12px;color:var(--muted)">Updated daily • National avg vs Crestwell</div>
<table class="rate-table" style="margin-top:8px">
<thead><tr><th>Product</th><th>National Avg*</th><th>Crestwell</th></tr></thead>
<tbody>
<tr><td>High-Yield Savings APY</td><td>0.42%</td><td><b style="color:var(--teal)">4.30%</b></td></tr>
<tr><td>12-mo CD APY</td><td>1.85%</td><td><b>4.10%</b></td></tr>
<tr><td>Money Market</td><td>0.55%</td><td><b>3.90%</b></td></tr>
</tbody>
</table>
<div style="font-size:11px;color:var(--muted);margin-top:8px">* FDIC national rates, Sep 2025. Crestwell rates variable.</div>
</div>
<div class="side-card" style="background:var(--navy);color:white;border-color:var(--navy)">
<b style="color:white">Financial Planning Tips</b>
<ul style="padding-left:16px;color:#A9BBD3;font-size:13px;line-height:1.7">
<li>Pay yourself first: automate 20% on payday.</li>
<li>Build 1-month buffer before investing.</li>
<li>Check your credit utilization monthly.</li>
</ul>
<a href="#" class="btn btn-primary" style="background:white;color:var(--navy);width:100%;justify-content:center;margin-top:8px">Download Guide</a>
</div>
</aside>
</div>
</section>
<!-- TESTIMONIALS -->
<section class="container section" id="learn" style="padding-top:0">
<div style="text-align:center;max-width:660px;margin:0 auto"><div class="eyebrow">Loved by real people</div><h2>Finance that feels like a weight lifted.</h2><p>Crestwell members share how clarity changed their relationship with money — from budgeting anxiety to confident, automated progress.</p></div>
<div class="testimonials" style="margin-top:20px">
<div class="testimonial light">
<div class="stars">★★★★★</div>
<p style="font-style:italic">“I finally understand amortization. Crestwell showed me I’d pay $9k in interest if I only made minimums. I refinanced and saved $4,200.”</p>
<div style="display:flex;gap:10px;align-items:center;margin-top:12px"><img src="https://i.pravatar.cc/100?u=11" style="width:36px;height:36px;border-radius:50%"><div><b style="font-size:13px">Jenna Patel</b><div style="font-size:12px;color:var(--muted)">Graphic Designer, Austin</div></div></div>
</div>
<div class="testimonial">
<div style="font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:#7EDCCF;font-weight:700">Featured Story</div>
<p style="font-size:18px;font-family:Fraunces,serif;line-height:1.3;margin:10px 0">“We went from living paycheck to paycheck to a fully funded emergency fund. All on autopilot.”</p>
<p style="color:#A9BBD3;font-size:13px">Marcus & Lila used Goals + Round-ups to save $11k in 14 months without feeling deprived.</p>
<div style="display:flex;gap:10px;align-items:center;margin-top:14px"><img src="https://i.pravatar.cc/100?u=12" style="width:36px;height:36px;border-radius:50%"><div><b style="font-size:13px;color:white">Marcus Chen</b><div style="font-size:12px;color:#8AA0BE">Seattle • Member since 2022</div></div></div>
</div>
<div class="testimonial light">
<div class="stars">★★★★★</div>
<p style="font-style:italic">“The retirement planner is the first one that didn’t scare me. Clear inputs, honest projections, and I could see my Roth growing.”</p>
<div style="display:flex;gap:10px;align-items:center;margin-top:12px"><img src="https://i.pravatar.cc/100?u=13" style="width:36px;height:36px;border-radius:50%"><div><b style="font-size:13px">David Okafor</b><div style="font-size:12px;color:var(--muted)">Teacher, Chicago</div></div></div>
</div>
</div>
</section>
<!-- FAQ -->
<section class="container section" style="padding-top:0">
<div style="text-align:center"><h2>Common questions, plain answers.</h2></div>
<div class="faq" style="margin-top:18px">
<div class="faq-item open">
<button class="faq-q">What’s the difference between APR and APY? <span>+</span></button>
<div class="faq-a">APR (Annual Percentage Rate) is what you pay on borrrowed money — it doesn’t include compounding. APY (Annual Percentage Yield) is what you earn on savings — it *does* include compounding. That’s why APY is the truer measure of growth.</div>
</div>
<div class="faq-item">
<button class="faq-q">How does amortization work on my mortgage? <span>+</span></button>
<div class="faq-a">Amortization spreads your loan into equal monthly payments. Early payments are mostly interest; later payments are mostly principal. Paying extra toward principal early saves the most interest over time.</div>
</div>
<div class="faq-item">
<button class="faq-q">Is Crestwell a fiduciary? <span>+</span></button>
<div class="faq-a">Yes. Our licensed advisors are fiduciaries, legally required to act in your best interest. No commissions on product sales.</div>
</div>
<div class="faq-item">
<button class="faq-q">Are my deposits insured? <span>+</span></button>
<div class="faq-a">Checking and savings deposits are FDIC insured up to $250,000 per depositor, per ownership category, through our partner banks.</div>
</div>
</div>
</section>
<!-- CTA STRIP -->
<section class="container section" id="open" style="padding-top:0">
<div style="background:var(--navy);border-radius:24px;padding:22px;display:flex;justify-content:space-between;align-items:center;gap:18px;flex-wrap:wrap;color:white">
<div><h3 style="color:white;margin:0">Ready to feel good about money again?</h3><p style="color:#A9BBD3;margin:6px 0 0">Open your Crestwell account in 2 minutes. No hard credit pull.</p></div>
<div style="display:flex;gap:10px;flex-wrap:wrap">
<a href="#" class="btn btn-primary" style="background:white;color:var(--navy)">Open Account</a>
<a href="#tools" class="btn" style="border:1px solid rgba(255,255,255,.2);color:white">Calculate Growth</a>
</div>
</div>
</section>
</main>
<footer id="contact">
<div class="container">
<div class="footer-grid">
<div>
<div style="display:flex;gap:10px;align-items:center"><div class="logo-mark" style="background:white;color:var(--navy)">◈</div><div><b style="color:white;font-family:Fraunces,serif">CRESTWELL</b><div style="font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#8AA0BE;font-weight:700">Clarity for Every Dollar</div></div></div>
<p style="color:#8AA0BE;font-size:13px;margin-top:12px;max-width:340px">Modern banking and investing for real life. Built with fiduciary care, bank-grade security, and human support when you need it.</p>
<div class="newsletter"><input placeholder="Email for money tips"><button class="btn btn-primary">Join</button></div>
</div>
<div><h4>Product</h4><div style="display:grid;gap:8px"><a href="#banking">Checking & Savings</a><a href="#">Credit Builder</a><a href="#investing">Automated Investing</a><a href="#retirement">Retirement</a><a href="#tools">Calculators</a></div></div>
<div><h4>Company</h4><div style="display:grid;gap:8px"><a href="#">About Us</a><a href="#">Careers</a><a href="#">Press</a><a href="#">Security</a><a href="#">Contact</a></div></div>
<div><h4>Contact</h4><div style="display:grid;gap:8px;color:#A9BBD3;font-size:13px"><span>📍 184 Liberty Row, Suite 400, Boston, MA 02110</span><span>📞 (800) 555-0148</span><span>✉️ hello@crestwell.co</span><span>Hours: Mon–Fri 8am–8pm ET</span></div>
<div style="display:flex;gap:10px;margin-top:10px"><a href="#" aria-label="Twitter" style="width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.08);display:grid;place-items:center"><i data-lucide="twitter" style="width:14px"></i></a><a href="#" aria-label="Instagram" style="width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.08);display:grid;place-items:center"><i data-lucide="instagram" style="width:14px"></i></a><a href="#" aria-label="Linkedin" style="width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.08);display:grid;place-items:center"><i data-lucide="linkedin" style="width:14px"></i></a></div>
</div>
</div>
<div class="subfooter">
<span>© 2026 Crestwell Financial Inc. All rights reserved. • <a href="#">Privacy Policy</a> • <a href="#">Terms of Service</a> • <a href="#">Disclosures</a></span>
<span>FDIC insured • SIPC protected investments • Not financial advice</span>
</div>
</div>
</footer>
<script>
lucide.createIcons();
const $=id=>document.getElementById(id);
const initial=$('initial'), monthly=$('monthly'), apy=$('apy'), years=$('years');
const pillInitial=$('pillInitial'), pillMonthly=$('pillMonthly'), pillApy=$('pillApy'), pillYears=$('pillYears');
const vInitial=$('vInitial'), vMonthly=$('vMonthly'), vApy=$('vApy'), vYears=$('vYears');
const futureVal=$('futureVal'), interestVal=$('interestVal'), chart=$('chart'), chartEnd=$('chartEnd');
function fmt(n){ return n.toLocaleString('en-US',{style:'currency',currency:'USD',maximumFractionDigits:0});}
function calc(){
const P=parseFloat(initial.value), PMT=parseFloat(monthly.value), r=parseFloat(apy.value)/100, t=parseFloat(years.value);
const n=t*12;
const future = P*Math.pow(1+r/12, n) + (r===0? PMT*n : PMT*(Math.pow(1+r/12, n)-1)/(r/12));
const contributed = P + PMT*n;
const interest = future - contributed;
futureVal.textContent=fmt(future); interestVal.textContent=fmt(interest);
pillInitial.textContent=fmt(P); pillMonthly.textContent=fmt(PMT); pillApy.textContent=r.toFixed(2)+'%'; pillYears.textContent=t+' yrs';
vInitial.textContent=P; vMonthly.textContent=PMT; vApy.textContent=r.toFixed(2); vYears.textContent=t; chartEnd.textContent='Year '+t;
// chart 8 bars
chart.innerHTML='';
for(let i=1;i<=8;i++){
const yr=Math.round(t*i/8);
const fv = P*Math.pow(1+r/12, yr*12) + (r===0? PMT*yr*12 : PMT*(Math.pow(1+r/12, yr*12)-1)/(r/12));
const h = Math.max(10, (fv/future)*100);
const d=document.createElement('div'); d.style.height=h+'%'; d.title='Year '+yr+': '+fmt(fv); chart.appendChild(d);
}
}
[initial,monthly,apy,years].forEach(e=>e.addEventListener('input',calc));
calc();
// FAQ
document.querySelectorAll('.faq-q').forEach(btn=>{
btn.addEventListener('click',()=>btn.parentElement.classList.toggle('open'));
});
// mobile nav
const menuBtn=$('menuBtn'), mobileNav=$('mobileNav'), closeBtn=$('closeBtn');
menuBtn?.addEventListener('click',()=>mobileNav.classList.add('open'));
closeBtn?.addEventListener('click',()=>mobileNav.classList.remove('open'));
mobileNav?.querySelectorAll('a').forEach(a=>a.addEventListener('click',()=>mobileNav.classList.remove('open')));
</script>
</body>
</html>
View Axe Report (JSON)
{
"testEngine": {
"name": "axe-core",
"version": "4.10.2"
},
"testRunner": {
"name": "axe"
},
"testEnvironment": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
"windowWidth": 1280,
"windowHeight": 720,
"orientationAngle": 0,
"orientationType": "landscape-primary"
},
"timestamp": "2026-11-12T10:09:34.708Z",
"url": "https://benchmark.aimac.invalid/a51d2e5f256936f8ff3349e59ae17cc74db6fa66f191cfc17cbb57c1f0a5b386.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-children",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require child roles contain them",
"help": "Certain ARIA roles must contain particular children",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "select-name",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure select element has an accessible name",
"help": "Select element must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-allowed-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attributes are used correctly for the defined role"
}
],
"none": [
{
"id": "aria-unsupported-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute is supported"
}
],
"impact": null,
"html": "<nav class=\"nav\" aria-label=\"Primary\">\n <a href=\"#banking\">Banking</a>\n <a href=\"#investing\">Investing</a>\n <a href=\"#retirement\" class=\"active\">Retirement</a>\n <a href=\"#learn\">Learn</a>\n <a href=\"#tools\">Tools</a>\n <a href=\"#contact\">Contact</a>\n </nav>",
"target": [
"nav"
]
}
]
},
{
"id": "aria-conditional-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are used as described in the specification of the element's role",
"help": "ARIA attributes must be used as specified for the element's role",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-conditional-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"none": [],
"impact": null,
"html": "<nav class=\"nav\" aria-label=\"Primary\">\n <a href=\"#banking\">Banking</a>\n <a href=\"#investing\">Investing</a>\n <a href=\"#retirement\" class=\"active\">Retirement</a>\n <a href=\"#learn\">Learn</a>\n <a href=\"#tools\">Tools</a>\n <a href=\"#contact\">Contact</a>\n </nav>",
"target": [
"nav"
]
}
]
},
{
"id": "aria-hidden-body",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"wcag412",
"EN-301-549",
"EN-9.1.3.1",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden=\"true\" is not present on the document body.",
"help": "aria-hidden=\"true\" must not be present on the document body",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-hidden-body",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "No aria-hidden attribute is present on document body"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<body>",
"target": [
"body"
]
}
]
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "focusable-modal-open",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements while a modal is open"
},
{
"id": "focusable-disabled",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
},
{
"id": "focusable-not-tabbable",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
}
],
"none": [],
"impact": null,
"html": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" data-lucide=\"arrow-right\" aria-hidden=\"true\" style=\"width:16px\" class=\"lucide lucide-arrow-right\">",
"target": [
".btn-primary.btn[href$=\"#open\"] > .lucide-arrow-right[data-lucide=\"arrow-right\"]"
]
}
]
},
{
"id": "aria-prohibited-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"impact": null,
"html": "<nav class=\"nav\" aria-label=\"Primary\">\n <a href=\"#banking\">Banking</a>\n <a href=\"#investing\">Investing</a>\n <a href=\"#retirement\" class=\"active\">Retirement</a>\n <a href=\"#learn\">Learn</a>\n <a href=\"#tools\">Tools</a>\n <a href=\"#contact\">Contact</a>\n </nav>",
"target": [
"nav"
]
}
]
},
{
"id": "aria-valid-attr-value",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all ARIA attributes have valid values",
"help": "ARIA attributes must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-valid-attr-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute values are valid"
},
{
"id": "aria-errormessage",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
},
{
"id": "aria-level",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-level values are valid"
}
],
"none": [],
"impact": null,
"html": "<nav class=\"nav\" aria-label=\"Primary\">\n <a href=\"#banking\">Banking</a>\n <a href=\"#investing\">Investing</a>\n <a href=\"#retirement\" class=\"active\">Retirement</a>\n <a href=\"#learn\">Learn</a>\n <a href=\"#tools\">Tools</a>\n <a href=\"#contact\">Contact</a>\n </nav>",
"target": [
"nav"
]
}
]
},
{
"id": "aria-valid-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure attributes that begin with aria- are valid ARIA attributes",
"help": "ARIA attributes must conform to valid names",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-valid-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute name is valid"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<nav class=\"nav\" aria-label=\"Primary\">\n <a href=\"#banking\">Banking</a>\n <a href=\"#investing\">Investing</a>\n <a href=\"#retirement\" class=\"active\">Retirement</a>\n <a href=\"#learn\">Learn</a>\n <a href=\"#tools\">Tools</a>\n <a href=\"#contact\">Contact</a>\n </nav>",
"target": [
"nav"
]
}
]
},
{
"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": "<em style=\"font-family:Fraunces,serif;font-weight:600;color:var(--teal);font-style:italic\">as hard as you do.</em>",
"target": [
"em"
]
}
]
},
{
"id": "button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure buttons have discernible text",
"help": "Buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has inner text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button class=\"btn btn-ghost\">Sign In</button>",
"target": [
".nav-actions > .btn-ghost"
]
}
]
},
{
"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>Your money,<br>finally working <em style=\"font-family:Fraunces,serif;font-weight:600;color:var(--teal);font-style:italic\">as hard as you do.</em></h1>",
"target": [
"h1"
]
},
{
"html": "<h2 style=\"margin:8px 0 0\">One app for<br>every money decision.</h2>",
"target": [
"#banking > div:nth-child(1) > div > h2"
]
},
{
"html": "<h3 style=\"margin:0\">Everyday Banking</h3>",
"target": [
".feature:nth-child(1) > h3"
]
},
{
"html": "<h3 style=\"margin:0;color:white\">Automated Investing</h3>",
"target": [
".feature:nth-child(2) > h3"
]
},
{
"html": "<h3 style=\"margin:0\">Debt Freedom Plan</h3>",
"target": [
".feature:nth-child(3) > h3"
]
},
{
"html": "<h2>Make compound interest your quiet superpower.</h2>",
"target": [
"div:nth-child(2) > h2"
]
},
{
"html": "<h2 style=\"color:white;margin:8px 0 6px\">Savings & Compound Growth Calculator</h2>",
"target": [
".calculator > div:nth-child(1) > div:nth-child(1) > h2"
]
},
{
"html": "<h3 style=\"color:white;margin:0\">How it works</h3>",
"target": [
".calc-grid > div:nth-child(2) > div > h3"
]
},
{
"html": "<h2 style=\"margin:8px 0\">Retire on your terms \u2014 with a plan you actually understand.</h2>",
"target": [
".retirement > h2"
]
},
{
"html": "<h2>Finance that feels like a weight lifted.</h2>",
"target": [
"#learn > div:nth-child(1) > h2"
]
},
{
"html": "<h2>Common questions, plain answers.</h2>",
"target": [
".section:nth-child(7) > div:nth-child(1) > h2"
]
},
{
"html": "<h3 style=\"color:white;margin:0\">Ready to feel good about money again?</h3>",
"target": [
"#open > div > div:nth-child(1) > h3"
]
},
{
"html": "<h4>Product</h4>",
"target": [
"div:nth-child(2) > h4"
]
},
{
"html": "<h4>Company</h4>",
"target": [
"div:nth-child(3) > h4"
]
},
{
"html": "<h4>Contact</h4>",
"target": [
"div:nth-child(4) > h4"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main id=\"home\">",
"target": [
"#home"
]
}
],
"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": "#dce6f2",
"bgColor": "#0b1d33",
"contrastRatio": 13.44,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 13.44"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<div class=\"topbar\">Member FDIC \u2022 Up to 4.30% APY on high-yield savings \u2022 <span>No hidden fees. No surprises.</span></div>",
"target": [
".topbar"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "multiple-label",
"data": null,
"relatedNodes": [],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<input type=\"range\" id=\"initial\" min=\"0\" max=\"50000\" step=\"500\" value=\"5000\">",
"target": [
"#initial"
]
}
]
},
{
"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": "critical",
"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://picsum.photos/640/520?random=7\" alt=\"Financial planning\">",
"target": [
"img[alt=\"Financial planning\"]"
]
}
]
},
{
"id": "label",
"impact": "critical",
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "non-empty-placeholder",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a placeholder attribute"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input placeholder=\"Email for money tips\">",
"target": [
"input[placeholder=\"Email for money tips\"]"
]
}
]
},
{
"id": "link-in-text-block",
"impact": null,
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "link-in-text-block-style",
"data": null,
"relatedNodes": [
{
"html": "<div class=\"feature\">",
"target": [
".grid3 > .feature:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Links can be distinguished from surrounding text by visual styling"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"btn btn-ghost\" style=\"margin-top:10px;width:100%;justify-content:center\">Open Account</a>",
"target": [
".feature:nth-child(1) > .btn-ghost.btn[href=\"#\"]"
]
}
]
},
{
"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=\"#home\" class=\"logo\">\n <div class=\"logo-mark\">\u25c8</div>\n <div class=\"logo-text\"><b>CRESTWELL</b><span>Clarity for Every Dollar</span></div>\n </a>",
"target": [
".logo"
]
}
]
},
{
"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 style=\"padding-left:18px;color:#3E4A5E;font-size:14px\"><li>Fee-free overdraft up to $200</li><li>2-day early paycheck</li><li>Virtual cards for subscriptions</li></ul>",
"target": [
".feature:nth-child(1) > 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>Fee-free overdraft up to $200</li>",
"target": [
".feature:nth-child(1) > 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": "<button class=\"btn btn-ghost\">Sign In</button>",
"target": [
".nav-actions > .btn-ghost"
]
}
]
},
{
"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": 267.2,
"height": 43.6
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (267.2px by 43.6px, 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=\"#home\" class=\"logo\">\n <div class=\"logo-mark\">\u25c8</div>\n <div class=\"logo-text\"><b>CRESTWELL</b><span>Clarity for Every Dollar</span></div>\n </a>",
"target": [
".logo"
]
}
]
},
{
"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": [
{
"any": [],
"all": [
{
"id": "td-headers-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "The headers attribute is exclusively used to refer to other cells in the table"
}
],
"none": [],
"impact": null,
"html": "<table class=\"rate-table\" style=\"margin-top:8px\">",
"target": [
"table"
]
}
]
},
{
"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": [
{
"any": [],
"all": [
{
"id": "th-has-data-cells",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "All table header cells refer to data cells"
}
],
"none": [],
"impact": null,
"html": "<table class=\"rate-table\" style=\"margin-top:8px\">",
"target": [
"table"
]
}
]
}
],
"incomplete": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"messageKey": "nonBmp"
},
"relatedNodes": [],
"impact": "serious",
"message": "Element content contains only non-text characters"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"logo-mark\">\u25c8</div>",
"target": [
".logo > .logo-mark"
],
"failureSummary": "Fix any of the following:\n Element content contains only non-text characters"
}
]
}
],
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#6b7280",
"bgColor": "#f9f6f0",
"contrastRatio": 4.48,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header>",
"target": [
"header"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.48 (foreground color: #6b7280, background color: #f9f6f0, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Clarity for Every Dollar</span>",
"target": [
".logo-text > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.48 (foreground color: #6b7280, background color: #f9f6f0, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#0e9a8b",
"contrastRatio": 3.49,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#open\" class=\"btn btn-primary\">",
"target": [
".nav-actions > .btn-primary.btn[href$=\"#open\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.49 (foreground color: #ffffff, background color: #0e9a8b, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#open\" class=\"btn btn-primary\">",
"target": [
".nav-actions > .btn-primary.btn[href$=\"#open\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.49 (foreground color: #ffffff, background color: #0e9a8b, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#0e9a8b",
"contrastRatio": 3.49,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#open\" class=\"btn btn-primary\" style=\"padding:15px 22px\">",
"target": [
"div:nth-child(4) > .btn-primary.btn[href$=\"#open\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.49 (foreground color: #ffffff, background color: #0e9a8b, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#open\" class=\"btn btn-primary\" style=\"padding:15px 22px\">",
"target": [
"div:nth-child(4) > .btn-primary.btn[href$=\"#open\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.49 (foreground color: #ffffff, background color: #0e9a8b, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#6b7280",
"bgColor": "#f9f6f0",
"contrastRatio": 4.48,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div style=\"background:var(--cream);border:1px solid var(--line);border-radius:16px;padding:14px\">",
"target": [
".hero-card > div:nth-child(2) > div:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.48 (foreground color: #6b7280, background color: #f9f6f0, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div style=\"font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:700\">Members</div>",
"target": [
".hero-card > div:nth-child(2) > div:nth-child(1) > div:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.48 (foreground color: #6b7280, background color: #f9f6f0, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#6b7280",
"bgColor": "#f9f6f0",
"contrastRatio": 4.48,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div style=\"background:var(--cream);border:1px solid var(--line);border-radius:16px;padding:14px\">",
"target": [
".hero-card > div:nth-child(2) > div:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.48 (foreground color: #6b7280, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div style=\"font-size:13px;color:var(--muted)\">Trusted nationwide</div>",
"target": [
".hero-card > div:nth-child(2) > div:nth-child(1) > div:nth-child(3)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.48 (foreground color: #6b7280, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#888d98",
"bgColor": "#fdfbf9",
"contrastRatio": 3.22,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-bar\" style=\"margin-top:26px\">",
"target": [
".trust-bar"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Forbes</span>",
"target": [
".trust-logos > span:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#888d98",
"bgColor": "#fdfbf9",
"contrastRatio": 3.22,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-bar\" style=\"margin-top:26px\">",
"target": [
".trust-bar"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>\u2022 BLOOMBERG</span>",
"target": [
".trust-logos > span:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#888d98",
"bgColor": "#fdfbf9",
"contrastRatio": 3.22,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-bar\" style=\"margin-top:26px\">",
"target": [
".trust-bar"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>\u2022 WSJ</span>",
"target": [
".trust-logos > span:nth-child(3)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#888d98",
"bgColor": "#fdfbf9",
"contrastRatio": 3.22,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-bar\" style=\"margin-top:26px\">",
"target": [
".trust-bar"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>\u2022 WIRED</span>",
"target": [
".trust-logos > span:nth-child(4)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#888d98",
"bgColor": "#fdfbf9",
"contrastRatio": 3.22,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-bar\" style=\"margin-top:26px\">",
"target": [
".trust-bar"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>\u2022 Morningstar</span>",
"target": [
"span:nth-child(5)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.22 (foreground color: #888d98, background color: #fdfbf9, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#0b7f73",
"bgColor": "#e6f6f4",
"contrastRatio": 4.38,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"badge\">Credit Card</span>",
"target": [
".badge:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.38 (foreground color: #0b7f73, background color: #e6f6f4, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"badge\">Credit Card</span>",
"target": [
".badge:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.38 (foreground color: #0b7f73, background color: #e6f6f4, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#0b7f73",
"bgColor": "#e6f6f4",
"contrastRatio": 4.38,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"badge\">Student Loan</span>",
"target": [
"div:nth-child(4) > .badge:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.38 (foreground color: #0b7f73, background color: #e6f6f4, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"badge\">Student Loan</span>",
"target": [
"div:nth-child(4) > .badge:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.38 (foreground color: #0b7f73, background color: #e6f6f4, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#0b7f73",
"bgColor": "#e6f6f4",
"contrastRatio": 4.38,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"badge\">Auto</span>",
"target": [
".badge:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.38 (foreground color: #0b7f73, background color: #e6f6f4, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"badge\">Auto</span>",
"target": [
".badge:nth-child(3)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.38 (foreground color: #0b7f73, background color: #e6f6f4, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#0e9a8b",
"contrastRatio": 3.49,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#tools\" class=\"btn btn-primary\">",
"target": [
".btn-primary.btn[href$=\"#tools\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.49 (foreground color: #ffffff, background color: #0e9a8b, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#tools\" class=\"btn btn-primary\">",
"target": [
".btn-primary.btn[href$=\"#tools\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.49 (foreground color: #ffffff, background color: #0e9a8b, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#0b7f73",
"bgColor": "#e6f6f4",
"contrastRatio": 4.38,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span style=\"font-size:11px;background:#E6F6F4;color:var(--teal-dark);padding:4px 8px;border-radius:999px;font-weight:700\">LIVE</span>",
"target": [
".side-card:nth-child(1) > div:nth-child(1) > span"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.38 (foreground color: #0b7f73, background color: #e6f6f4, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span style=\"font-size:11px;background:#E6F6F4;color:var(--teal-dark);padding:4px 8px;border-radius:999px;font-weight:700\">LIVE</span>",
"target": [
".side-card:nth-child(1) > div:nth-child(1) > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.38 (foreground color: #0b7f73, background color: #e6f6f4, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#0e9a8b",
"bgColor": "#ffffff",
"contrastRatio": 3.49,
"fontSize": "9.8pt (13px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.49 (foreground color: #0e9a8b, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b style=\"color:#0E9A8B\">+0.82% \u25b2</b>",
"target": [
".side-card:nth-child(1) > div:nth-child(2) > div:nth-child(1) > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.49 (foreground color: #0e9a8b, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#0e9a8b",
"bgColor": "#ffffff",
"contrastRatio": 3.49,
"fontSize": "9.8pt (13px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.49 (foreground color: #0e9a8b, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b style=\"color:#0E9A8B\">+1.14% \u25b2</b>",
"target": [
".side-card:nth-child(1) > div:nth-child(2) > div:nth-child(2) > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.49 (foreground color: #0e9a8b, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#6b7280",
"bgColor": "#f9f6f0",
"contrastRatio": 4.48,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div style=\"background:var(--cream);border:1px dashed var(--line);border-radius:12px;padding:10px;font-size:12px;color:var(--muted)\"><b style=\"color:var(--navy)\">Tip:</b> When yields rise, bond prices fall. Keep duration aligned with your horizon.</div>",
"target": [
".side-card:nth-child(1) > div:nth-child(2) > div:nth-child(4)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.48 (foreground color: #6b7280, background color: #f9f6f0, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div style=\"background:var(--cream);border:1px dashed var(--line);border-radius:12px;padding:10px;font-size:12px;color:var(--muted)\"><b style=\"color:var(--navy)\">Tip:</b> When yields rise, bond prices fall. Keep duration aligned with your horizon.</div>",
"target": [
".side-card:nth-child(1) > div:nth-child(2) > div:nth-child(4)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.48 (foreground color: #6b7280, background color: #f9f6f0, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#0e9a8b",
"bgColor": "#ffffff",
"contrastRatio": 3.49,
"fontSize": "9.8pt (13px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.49 (foreground color: #0e9a8b, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b style=\"color:var(--teal)\">4.30%</b>",
"target": [
"tr:nth-child(1) > td:nth-child(3) > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.49 (foreground color: #0e9a8b, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#3e4a5e",
"bgColor": "#0b1d33",
"contrastRatio": 1.89,
"fontSize": "13.5pt (18px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"testimonial\">",
"target": [
".testimonial:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 1.89 (foreground color: #3e4a5e, background color: #0b1d33, font size: 13.5pt (18px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p style=\"font-size:18px;font-family:Fraunces,serif;line-height:1.3;margin:10px 0\">\u201cWe went from living paycheck to paycheck to a fully funded emergency fund. All on autopilot.\u201d</p>",
"target": [
".testimonial:nth-child(2) > p:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 1.89 (foreground color: #3e4a5e, background color: #0b1d33, font size: 13.5pt (18px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#f9f6f0",
"contrastRatio": 1.07,
"fontSize": "12.0pt (16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 1.07 (foreground color: #ffffff, background color: #f9f6f0, font size: 12.0pt (16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<b style=\"color:white;font-family:Fraunces,serif\">CRESTWELL</b>",
"target": [
"div:nth-child(1) > div:nth-child(2) > b"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 1.07 (foreground color: #ffffff, background color: #f9f6f0, font size: 12.0pt (16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8aa0be",
"bgColor": "#f9f6f0",
"contrastRatio": 2.47,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div style=\"font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#8AA0BE;font-weight:700\">Clarity for Every Dollar</div>",
"target": [
".footer-grid > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8aa0be",
"bgColor": "#f9f6f0",
"contrastRatio": 2.47,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p style=\"color:#8AA0BE;font-size:13px;margin-top:12px;max-width:340px\">Modern banking and investing for real life. Built with fiduciary care, bank-grade security, and human support when you need it.</p>",
"target": [
".footer-grid > div:nth-child(1) > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#f9f7f1",
"contrastRatio": 1.07,
"fontSize": "10.0pt (13.3333px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<input placeholder=\"Email for money tips\">",
"target": [
"input[placeholder=\"Email for money tips\"]"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 1.07 (foreground color: #ffffff, background color: #f9f7f1, font size: 10.0pt (13.3333px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<input placeholder=\"Email for money tips\">",
"target": [
"input[placeholder=\"Email for money tips\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 1.07 (foreground color: #ffffff, background color: #f9f7f1, font size: 10.0pt (13.3333px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#0e9a8b",
"contrastRatio": 3.49,
"fontSize": "10.0pt (13.3333px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<button class=\"btn btn-primary\">Join</button>",
"target": [
".newsletter > .btn-primary"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.49 (foreground color: #ffffff, background color: #0e9a8b, font size: 10.0pt (13.3333px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button class=\"btn btn-primary\">Join</button>",
"target": [
".newsletter > .btn-primary"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.49 (foreground color: #ffffff, background color: #0e9a8b, font size: 10.0pt (13.3333px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#a9bbd3",
"bgColor": "#f9f6f0",
"contrastRatio": 1.81,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 1.81 (foreground color: #a9bbd3, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>\ud83d\udccd 184 Liberty Row, Suite 400, Boston, MA 02110</span>",
"target": [
"div:nth-child(4) > div:nth-child(2) > span:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 1.81 (foreground color: #a9bbd3, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#a9bbd3",
"bgColor": "#f9f6f0",
"contrastRatio": 1.81,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 1.81 (foreground color: #a9bbd3, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>\ud83d\udcde (800) 555-0148</span>",
"target": [
".footer-grid > div:nth-child(4) > div:nth-child(2) > span:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 1.81 (foreground color: #a9bbd3, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#a9bbd3",
"bgColor": "#f9f6f0",
"contrastRatio": 1.81,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 1.81 (foreground color: #a9bbd3, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>\u2709\ufe0f hello@crestwell.co</span>",
"target": [
"div:nth-child(4) > div:nth-child(2) > span:nth-child(3)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 1.81 (foreground color: #a9bbd3, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#a9bbd3",
"bgColor": "#f9f6f0",
"contrastRatio": 1.81,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 1.81 (foreground color: #a9bbd3, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Hours: Mon\u2013Fri 8am\u20138pm ET</span>",
"target": [
"div:nth-child(4) > div:nth-child(2) > span:nth-child(4)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 1.81 (foreground color: #a9bbd3, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8aa0be",
"bgColor": "#f9f6f0",
"contrastRatio": 2.47,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>\u00a9 2026 Crestwell Financial Inc. All rights reserved. \u2022 <a href=\"#\">Privacy Policy</a> \u2022 <a href=\"#\">Terms of Service</a> \u2022 <a href=\"#\">Disclosures</a></span>",
"target": [
".subfooter > span:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8aa0be",
"bgColor": "#f9f6f0",
"contrastRatio": 2.47,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\">Privacy Policy</a>",
"target": [
"span:nth-child(1) > a[href=\"#\"]:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8aa0be",
"bgColor": "#f9f6f0",
"contrastRatio": 2.47,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\">Terms of Service</a>",
"target": [
"span:nth-child(1) > a[href=\"#\"]:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8aa0be",
"bgColor": "#f9f6f0",
"contrastRatio": 2.47,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\">Disclosures</a>",
"target": [
"span:nth-child(1) > a[href=\"#\"]:nth-child(3)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8aa0be",
"bgColor": "#f9f6f0",
"contrastRatio": 2.47,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>FDIC insured \u2022 SIPC protected investments \u2022 Not financial advice</span>",
"target": [
".subfooter > span:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.47 (foreground color: #8aa0be, background color: #f9f6f0, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
},
{
"id": "image-alt",
"impact": "critical",
"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 does not have an alt attribute"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<img src=\"https://i.pravatar.cc/100?u=a1\" style=\"width:36px;height:36px;border-radius:50%\">",
"target": [
"img[src=\"https://i.pravatar.cc/100?u=a1\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have an alt attribute\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an alt attribute"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<img src=\"https://i.pravatar.cc/100?u=11\" style=\"width:36px;height:36px;border-radius:50%\">",
"target": [
"img[src=\"https://i.pravatar.cc/100?u=11\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have an alt attribute\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an alt attribute"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<img src=\"https://i.pravatar.cc/100?u=12\" style=\"width:36px;height:36px;border-radius:50%\">",
"target": [
"img[src=\"https://i.pravatar.cc/100?u=12\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have an alt attribute\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an alt attribute"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<img src=\"https://i.pravatar.cc/100?u=13\" style=\"width:36px;height:36px;border-radius:50%\">",
"target": [
"img[src=\"https://i.pravatar.cc/100?u=13\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have an alt attribute\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
]
},
{
"id": "label",
"impact": "critical",
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "non-empty-placeholder",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no placeholder attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<input type=\"range\" id=\"initial\" min=\"0\" max=\"50000\" step=\"500\" value=\"5000\">",
"target": [
"#initial"
],
"failureSummary": "Fix any of the following:\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element has no placeholder attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "non-empty-placeholder",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no placeholder attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<input type=\"range\" id=\"monthly\" min=\"0\" max=\"2000\" step=\"50\" value=\"400\">",
"target": [
"#monthly"
],
"failureSummary": "Fix any of the following:\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element has no placeholder attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "non-empty-placeholder",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no placeholder attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<input type=\"range\" id=\"apy\" min=\"0.5\" max=\"8\" step=\"0.1\" value=\"4.3\">",
"target": [
"#apy"
],
"failureSummary": "Fix any of the following:\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element has no placeholder attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "non-empty-placeholder",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no placeholder attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<input type=\"range\" id=\"years\" min=\"1\" max=\"40\" step=\"1\" value=\"10\">",
"target": [
"#years"
],
"failureSummary": "Fix any of the following:\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element has no placeholder attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 5824
},
{
"y": 576,
"height": 5824
},
{
"y": 1152,
"height": 5824
},
{
"y": 1728,
"height": 5824
},
{
"y": 2304,
"height": 5824
},
{
"y": 2880,
"height": 5824
},
{
"y": 3456,
"height": 5824
},
{
"y": 4032,
"height": 5824
},
{
"y": 4608,
"height": 5824
},
{
"y": 5104,
"height": 5824
}
],
"scans": 11,
"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 "Personal Finance" 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: "Personal Finance"
- Description: Banking, investing, budgeting, savings, credit, and personal money management resources.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Personal Finance" 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: "Retirement", "Contact", "Tools".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Personal Finance" category. Consider themes similar to: "Debt Management", "Savings Goals", "Retirement Planning".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "amortization", "compound interest", "APY".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Open Account", "Calculate", "Plan Retirement".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Personal Finance" sector. Ideas similar but not limited to: "credit score simulator".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "market updates", "rate comparisons", "financial planning tips".
- **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.