Recursive Flint (free) – Family and Parenting
via Recursive · Generated
- AIMAC Debt 4.90
- Cost $0.00
- Total Violations 21
- HTML Size 34 KB
- Em Dashes 0
Screenshot
View Live Page
Accessibility Issues Found
21 Serious
-
color-contrast serious 21 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<a href="#child-development" class="btn btn-primary">Start Free</a>
Artifacts
View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Family Compass | Parenting Advice & Resources</title>
<meta name="description" content="Family Compass offers parenting advice, family resources, childcare tips, and support for parents through age-by-age guides, safety tools, and family activities.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600;9..144,700&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
:root {
--ink: #2e2a28;
--sand: #f7f2ec;
--cream: #fffaf3;
--clay: #d96c47;
--clay-dark: #c2552f;
--sage: #7d8c6f;
--muted: #6f665e;
--card: #ffffff;
--border: #e8dfd4;
--shadow: 0 18px 40px -18px rgba(46, 42, 40, 0.25);
--radius: 20px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { margin: 0; font-family: 'Inter', sans-serif; color: var(--ink); background: var(--cream); line-height: 1.6; }
img { max-width: 100%; display: block; }
h1, h2, h3, h4 { font-family: 'Fraunces', serif; line-height: 1.15; margin: 0 0 0.5em; color: var(--ink); }
h1 { font-size: clamp(2.6rem, 5vw, 4rem); font-weight: 700; }
h2 { font-size: clamp(2rem, 3.5vw, 2.75rem); font-weight: 600; }
h3 { font-size: 1.45rem; font-weight: 600; }
p { margin: 0 0 1rem; }
a { color: var(--clay); text-decoration: none; }
a:hover { text-decoration: underline; }
.container { width: min(1120px, 92%); margin: 0 auto; }
.muted { color: var(--muted); }
.site-header { position: sticky; top: 0; z-index: 50; background: rgba(255, 250, 243, 0.92); backdrop-filter: blur(10px); border-bottom: 1px solid var(--border); }
.header-inner { display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; padding: 0.9rem 0; flex-wrap: wrap; }
.brand { display: flex; align-items: center; gap: 0.75rem; font-family: 'Fraunces', serif; font-size: 1.5rem; font-weight: 700; color: var(--ink); }
.brand:hover { text-decoration: none; }
.brand img { width: 180px; height: 48px; object-fit: contain; }
.main-nav { display: flex; gap: 1.4rem; flex-wrap: wrap; }
.main-nav a { color: var(--ink); font-weight: 500; font-size: 0.95rem; }
.main-nav a:hover { color: var(--clay); text-decoration: none; }
.btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.8rem 1.6rem; border-radius: 999px; font-weight: 600; font-size: 0.98rem; border: 1px solid transparent; cursor: pointer; transition: all 0.2s ease; }
.btn:hover { text-decoration: none; }
.btn-primary { background: var(--clay); color: #fff; }
.btn-primary:hover { background: var(--clay-dark); }
.btn-secondary { background: transparent; border-color: var(--clay); color: var(--clay); }
.btn-secondary:hover { background: rgba(217, 108, 71, 0.08); }
.hero { padding: 4rem 0 3rem; background: linear-gradient(180deg, var(--sand), var(--cream)); }
.hero-grid { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 3rem; align-items: center; }
.eyebrow { text-transform: uppercase; letter-spacing: 0.14em; font-size: 0.78rem; font-weight: 700; color: var(--sage); margin-bottom: 0.75rem; }
.lead { font-size: 1.18rem; color: var(--muted); }
.hero-actions { display: flex; gap: 0.9rem; flex-wrap: wrap; margin: 1.5rem 0 1rem; }
.hero-note { font-size: 0.9rem; color: var(--muted); }
.hero-media img { border-radius: 24px; box-shadow: var(--shadow); width: 100%; height: auto; }
.stats { border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); background: #fff; }
.stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; padding: 2rem 0; text-align: center; }
.stat-number { display: block; font-family: 'Fraunces', serif; font-size: 2.6rem; font-weight: 700; color: var(--clay); }
.stat-label { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); }
.content-layout { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 3rem; align-items: start; padding: 3rem 0 4rem; }
.content-main section { margin-bottom: 4rem; scroll-margin-top: 90px; }
.section { padding: 3rem 0; scroll-margin-top: 90px; }
.section-header { max-width: 760px; margin-bottom: 2rem; }
.section-header h2 { margin-bottom: 0.5rem; }
.section-header p { color: var(--muted); }
.image-with-text { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; align-items: center; background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 1.5rem; margin-bottom: 2rem; }
.image-with-text img { border-radius: 16px; }
.feature-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; margin-top: 2rem; }
.feature-card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.75rem; box-shadow: 0 10px 30px -20px rgba(46,42,40,0.35); }
.feature-card h3 { margin-top: 0; }
.cta-row { display: flex; gap: 0.9rem; flex-wrap: wrap; margin-top: 2rem; }
.two-col { display: grid; grid-template-columns: 1.2fr 0.8fr; gap: 2rem; align-items: start; }
.checklist-card { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 1.75rem; }
.checklist { list-style: none; padding: 0; margin: 0; }
.checklist li { padding: 0.6rem 0 0.6rem 2rem; position: relative; border-bottom: 1px dashed var(--border); }
.checklist li:last-child { border-bottom: 0; }
.checklist li::before { content: '✓'; position: absolute; left: 0; top: 0.6rem; width: 1.4rem; height: 1.4rem; background: var(--sage); color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; }
.age-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; margin-bottom: 3rem; }
.age-card { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 1.75rem; }
.faq h3 { margin-top: 2rem; }
details { background: #fff; border: 1px solid var(--border); border-radius: 14px; margin-bottom: 0.9rem; padding: 1rem 1.25rem; }
summary { font-weight: 600; cursor: pointer; }
.faq-answer { padding-top: 0.75rem; color: var(--muted); }
.activity-finder { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 1.75rem; margin-bottom: 2rem; }
.finder-controls { display: grid; grid-template-columns: 1fr 1fr auto; gap: 1rem; align-items: end; }
.finder-controls label { display: block; font-weight: 600; margin-bottom: 0.35rem; font-size: 0.9rem; }
.finder-controls select { width: 100%; padding: 0.7rem 0.9rem; border-radius: 12px; border: 1px solid var(--border); background: var(--cream); font: inherit; }
.activity-results { margin-top: 1.5rem; }
.activity-card { background: var(--cream); border: 1px solid var(--border); border-radius: 14px; padding: 1.25rem; }
.testimonials { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; }
.testimonial-card { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 1.75rem; display: flex; flex-direction: column; gap: 1rem; }
.testimonial-card img { width: 64px; height: 64px; border-radius: 50%; }
.testimonial-card blockquote { margin: 0; font-size: 1.05rem; color: var(--ink); }
.testimonial-author { margin-top: auto; font-weight: 600; }
.testimonial-author span { display: block; font-weight: 400; color: var(--muted); font-size: 0.9rem; }
.shop-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; margin-bottom: 2rem; }
.product-card { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 1.5rem; text-align: center; }
.product-card img { margin: 0 auto 1rem; border-radius: 14px; background: var(--cream); }
.product-footer { display: flex; justify-content: center; align-items: center; gap: 1rem; margin-top: 1rem; }
.price { font-size: 1.25rem; font-weight: 700; color: var(--clay); }
#parent-toolkit { position: sticky; top: 100px; }
.sidebar-card { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 1.75rem; box-shadow: var(--shadow); }
.sidebar-card h3 { margin-bottom: 0.25rem; }
.sidebar-card p { color: var(--muted); }
.sidebar-links { list-style: none; padding: 0; margin: 1.25rem 0; }
.sidebar-links li { padding: 0.5rem 0; border-bottom: 1px dashed var(--border); }
.sidebar-links li:last-child { border-bottom: 0; }
.sidebar-links a { font-weight: 500; }
.newsletter { background: var(--sand); border-radius: 14px; padding: 1.25rem; }
.newsletter h4 { margin-bottom: 0.25rem; }
.newsletter p { font-size: 0.9rem; }
.newsletter form { display: grid; gap: 0.5rem; margin-top: 0.75rem; }
.newsletter input { padding: 0.7rem 0.9rem; border-radius: 10px; border: 1px solid var(--border); background: #fff; font: inherit; }
.newsletter .btn { width: 100%; }
.site-footer { background: #2e2a28; color: #f7f2ec; margin-top: 4rem; }
.footer-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1.2fr; gap: 2rem; padding: 3rem 0; }
.site-footer h4 { color: #fff; margin-bottom: 0.75rem; }
.site-footer a { color: #d8cfc4; }
.site-footer a:hover { color: #fff; }
.footer-brand { color: #fff; margin-bottom: 0.75rem; }
.footer-brand img { width: 200px; height: 54px; }
.social-links { display: flex; gap: 0.75rem; margin-top: 1rem; flex-wrap: wrap; }
.social-links a { border: 1px solid #4a443f; border-radius: 999px; padding: 0.35rem 0.9rem; font-size: 0.85rem; }
.contact-list { list-style: none; padding: 0; margin: 0; }
.contact-list li { padding: 0.2rem 0; }
.footer-bottom { border-top: 1px solid #453f3a; padding: 1.25rem 0; }
.footer-bottom-inner { display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.footer-bottom p { margin: 0; }
.footer-legal { display: flex; gap: 1.25rem; }
.footer-legal a { color: #d8cfc4; }
@media (max-width: 1024px) {
.content-layout { grid-template-columns: 1fr; }
#parent-toolkit { position: static; }
.testimonials { grid-template-columns: 1fr; }
.shop-grid { grid-template-columns: 1fr; }
}
@media (max-width: 860px) {
.hero-grid { grid-template-columns: 1fr; }
.image-with-text { grid-template-columns: 1fr; }
.two-col { grid-template-columns: 1fr; }
.feature-grid { grid-template-columns: 1fr; }
.age-grid { grid-template-columns: 1fr; }
.stats-grid { grid-template-columns: repeat(2, 1fr); }
.finder-controls { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
.header-inner { flex-direction: column; align-items: flex-start; }
.main-nav { gap: 0.9rem; }
}
</style>
</head>
<body>
<header class="site-header">
<div class="container header-inner">
<a href="#home" class="brand">
<img src="https://placehold.co/260x64?text=Family%20Compass&font=montserrat" alt="Family Compass logo">
<span>Family Compass</span>
</a>
<nav class="main-nav">
<a href="#home">Home</a>
<a href="#child-development">Child Development</a>
<a href="#parenting-guide">Parenting Guide</a>
<a href="#family-safety">Family Safety</a>
<a href="#family-fun">Activities</a>
<a href="#shop">Shop</a>
<a href="#stories">Stories</a>
</nav>
<a href="#child-development" class="btn btn-primary">Start Free</a>
</div>
</header>
<main>
<section class="hero" id="home">
<div class="container hero-grid">
<div class="hero-copy">
<p class="eyebrow">Evidence-informed parenting resources</p>
<h1>Parenting advice for the beautiful, messy journey ahead.</h1>
<p class="lead">Family Compass helps parents turn overwhelm into confidence with age-by-age guidance, practical safety tools, and playful activity ideas for the home.</p>
<div class="hero-actions">
<a href="#child-development" class="btn btn-primary">Start Free</a>
<a href="#stories" class="btn btn-secondary">Share Story</a>
</div>
<p class="hero-note">Trusted by 120,000+ parents, caregivers, and educators.</p>
</div>
<div class="hero-media">
<img src="https://picsum.photos/1600/1000" alt="Parent and child reading together on a cozy evening">
</div>
</div>
</section>
<section class="stats">
<div class="container stats-grid">
<div class="stat"><span class="stat-number">120k+</span><span class="stat-label">Parents supported</span></div>
<div class="stat"><span class="stat-number">45</span><span class="stat-label">Expert-reviewed guides</span></div>
<div class="stat"><span class="stat-number">12</span><span class="stat-label">Age-by-age stages</span></div>
<div class="stat"><span class="stat-number">98%</span><span class="stat-label">Would recommend Family Compass</span></div>
</div>
</section>
<div class="container content-layout">
<article class="content-main">
<section class="section" id="child-development">
<div class="section-header">
<p class="eyebrow">Child Development</p>
<h2>Understand the milestones that shape early childhood.</h2>
<p class="lead">Child development is not a race. It is a set of interconnected physical, cognitive, and emotional changes that unfold in a predictable, though not perfectly uniform, sequence. Pediatricians and child development experts recommend observing milestones rather than comparing siblings, because every child develops at their own pace. Our guides help parents recognize skills such as first words, secure attachment, early problem-solving, and gross motor control while knowing when to ask a pediatrician for support.</p>
</div>
<div class="image-with-text">
<img src="https://picsum.photos/900/700" alt="Parent observing toddler developmental milestone during floor play">
<div>
<p>Developmental milestones are broad ranges of typical behavior, not rigid deadlines. For example, a child may walk at eight months or take their first steps at fifteen, and both can be within normal limits. Our age-by-age resources translate this research into practical routines for feeding, sleep, discipline strategies, and responsive caregiving. Instead of labeling a child “behind,” parents can use checklists to track emerging skills and share observations with a pediatrician.</p>
<p>From early social skills like sharing and turn-taking to language bursts that leave adults smiling and sometimes confused, the guidance in each chapter is written by early childhood experts and reviewed for clinical accuracy. Parents can also access milestone trackers, conversation scripts, and sensory-friendly activity ideas that fit real homes, budgets, and schedules.</p>
</div>
</div>
<div class="feature-grid">
<article class="feature-card">
<h3>Cognitive Growth</h3>
<p>Problem-solving, memory, cause-and-effect, and early planning skills emerge through play, repetition, and responsive interaction. Track object permanence, early math concepts, and attention spans with age-appropriate cues.</p>
</article>
<article class="feature-card">
<h3>Social Skills</h3>
<p>Sharing, turn-taking, empathy, and early friendships begin in the preschool years. Learn how to coach social behavior without forcing it, and how to support children through conflict and cooperation.</p>
</article>
<article class="feature-card">
<h3>Language & Communication</h3>
<p>Receptive and expressive language skills vary widely. Our guides cover bilingual benefits, speech milestones, red flags, and strategies for encouraging conversation, signing, and early literacy.</p>
</article>
<article class="feature-card">
<h3>Physical & Motor</h3>
<p>Gross motor skills like rolling, sitting, crawling, and walking develop alongside fine motor skills such as grasping, scribbling, and self-feeding. Sensory integration and motor planning are also addressed.</p>
</article>
</div>
<div class="cta-row">
<a href="#parenting-guide" class="btn btn-primary">Start Free</a>
<a href="#parenting-guide" class="btn btn-secondary">Explore Child Development</a>
</div>
</section>
<section class="section" id="parenting-guide">
<div class="section-header">
<p class="eyebrow">Parenting Guide</p>
<h2>Age-by-age parenting guides for every stage.</h2>
<p class="lead">From newborns to teens, parenting advice must shift as the child’s brain, body, and social world change. Our age-by-age guides break down practical topics such as feeding schedules, sleep training, tantrums, discipline strategies, screen time, homework, and family communication.</p>
</div>
<div class="age-grid">
<article class="age-card">
<h3>Newborns & Infants (0–12 months)</h3>
<p>Feed on cue, respond to cries, and build secure attachment through skin-to-skin contact, breastfeeding or bottle feeding, and consistent soothing routines. Safety, shaken baby syndrome prevention, and safe sleep practices are covered in depth.</p>
</article>
<article class="age-card">
<h3>Toddlers & Preschoolers (1–4 years)</h3>
<p>Tantrums, independence, potty training, and discipline strategies become daily themes. Learn positive parenting techniques, emotion coaching, redirection, and healthy screen time limits for curious little learners.</p>
</article>
<article class="age-card">
<h3>Early School Age (5–8 years)</h3>
<p>Children begin formal schooling, forming peer relationships and self-regulation skills. Guidance covers homework routines, bedtime habits, social skills, and age-appropriate chores that build confidence.</p>
</article>
<article class="age-card">
<h3>Tweens & Teens (9–14 years)</h3>
<p>As autonomy grows, parents face digital citizenship, peer pressure, changing emotions, and communication challenges. The guide offers family meetings, boundary setting, and respectful discipline strategies for older children.</p>
</article>
</div>
<h3>Parenting FAQs</h3>
<div class="faq">
<details>
<summary>How do I discipline without yelling or spanking?</summary>
<div class="faq-answer"><p>Discipline is teaching, not punishment. Start with preventive routines, clear expectations, natural consequences, and calm redirection. When emotions escalate, use co-regulation strategies such as deep breathing, naming feelings, and repairing after mistakes.</p></div>
</details>
<details>
<summary>What is healthy screen time for kids?</summary>
<div class="faq-answer"><p>Healthy screen time depends on age, content, and context. For young children, prioritize co-viewing and limit recreational screens. Older children benefit from media literacy, device-free family meals, and consistent bedtime rules.</p></div>
</details>
<details>
<summary>How do I know if my child needs professional support?</summary>
<div class="faq-answer"><p>Trust your instincts. Seek pediatrician guidance or child mental health support if developmental concerns persist, if there are safety risks, extreme behavior changes, or signs of anxiety, depression, or neurodivergence. Early support improves outcomes.</p></div>
</details>
</div>
<div class="cta-row">
<a href="#family-fun" class="btn btn-primary">Browse Parenting Guides</a>
<a href="#family-safety" class="btn btn-secondary">Explore Safety Resources</a>
</div>
</section>
<section class="section" id="family-safety">
<div class="section-header">
<p class="eyebrow">Family Safety</p>
<h2>Child safety resources for peace of mind.</h2>
<p class="lead">Safety is both physical and digital. Our family safety hub provides checklists for home childproofing, car seat installation, water safety, medication storage, and online privacy. Content is reviewed by pediatric clinicians and child safety experts.</p>
</div>
<div class="two-col">
<div>
<p>Physical safety remains foundational, but digital safety is now part of everyday parenting. Families need parental controls, privacy settings, screen time agreements, and open conversations about online risks such as cyberbullying, inappropriate content, and stranger contact. Our safety guides help parents create age-appropriate boundaries without turning home into a surveillance state.</p>
<p>We also offer emergency preparedness checklists, first aid basics, and de-escalation guidance for unsafe or high-risk situations. Whether you are welcoming a second child, managing allergies, or navigating travel with a car seat, the resources are designed to be actionable and compassionate.</p>
</div>
<div class="checklist-card">
<h3>Safety Checklist</h3>
<ul class="checklist">
<li>Car seat properly installed and reviewed</li>
<li>Home hazards secured: outlet covers, cabinet locks, furniture anchors</li>
<li>Water safety: supervision, swim lessons, life jackets</li>
<li>Online safety: parental controls, privacy, reporting</li>
<li>Emergency contacts and medical information updated</li>
<li>Medication storage and poison control access</li>
</ul>
</div>
</div>
<div class="cta-row">
<a href="#family-fun" class="btn btn-primary">Connect with Experts</a>
<a href="#parent-toolkit" class="btn btn-secondary">Get Safety Checklist</a>
</div>
</section>
<section class="section" id="family-fun">
<div class="section-header">
<p class="eyebrow">Family Fun</p>
<h2>Play is how children learn, so make it a priority.</h2>
<p class="lead">Play supports language, social skills, creativity, and emotional regulation. Family Compass offers age-appropriate activity ideas that fit into real life, from sensory bins and backyard scavenger hunts to quiet reading corners and movement games.</p>
</div>
<div class="activity-finder" id="activity-finder">
<div class="finder-controls">
<div>
<label for="finder-age">Child’s age group</label>
<select id="finder-age">
<option>Newborn & Baby (0–12)</option>
<option>Toddler (1–3)</option>
<option>Preschool (3–5)</option>
<option>Early School Age (6–8)</option>
<option>Tweens (9–12)</option>
</select>
</div>
<div>
<label for="finder-interest">Interest</label>
<select id="finder-interest">
<option value="All">All interests</option>
<option value="Outdoor">Outdoor</option>
<option value="Creative">Creative</option>
<option value="Sensory">Sensory</option>
<option value="Quiet">Quiet</option>
<option value="Movement">Movement</option>
</select>
</div>
<button class="btn btn-primary" id="find-activities">Find Activities</button>
</div>
<div id="activity-results" class="activity-results">
<p class="muted">Choose an age group and interest to see playful activity ideas.</p>
</div>
</div>
<div class="cta-row">
<a href="#stories" class="btn btn-primary">Share Story</a>
<a href="#parent-toolkit" class="btn btn-secondary">Browse Activities</a>
</div>
</section>
</article>
<aside id="parent-toolkit">
<div class="sidebar-card">
<h3>The Parent Toolkit</h3>
<p class="muted">Free resources to keep your family supported.</p>
<ul class="sidebar-links">
<li><a href="#parenting-guide">Age-specific guides</a></li>
<li><a href="#shop">Featured products</a></li>
<li><a href="#family-fun">Weekly activity themes</a></li>
<li><a href="#family-safety">Safety checklists</a></li>
</ul>
<div class="newsletter">
<h4>Weekly family tips</h4>
<p class="muted">One practical parenting insight in your inbox.</p>
<form id="newsletter-form">
<input type="email" placeholder="Email address" required>
<button class="btn btn-primary" type="submit">Subscribe</button>
</form>
</div>
</div>
</aside>
</div>
<section class="section stories" id="stories">
<div class="container">
<div class="section-header">
<p class="eyebrow">Parent Stories</p>
<h2>Real families, real growth.</h2>
<p class="lead">Hear from parents who used Family Compass to navigate milestones, routines, and everyday challenges.</p>
</div>
<div class="testimonials">
<article class="testimonial-card">
<img src="https://i.pravatar.cc/150?u=emma&name=Emma" alt="Emma Rodriguez">
<blockquote>“The milestone tracker gave me language for what was normal. When we talked with our pediatrician, we felt prepared instead of panicked.”</blockquote>
<p class="testimonial-author">Emma R. <span>Mom of two</span></p>
</article>
<article class="testimonial-card">
<img src="https://i.pravatar.cc/150?u=daniel&name=Daniel" alt="Daniel Kim">
<blockquote>“We switched from punishment to coaching. The age-by-age guide helped us set boundaries without losing connection.”</blockquote>
<p class="testimonial-author">Daniel K. <span>Dad of twins</span></p>
</article>
<article class="testimonial-card">
<img src="https://i.pravatar.cc/150?u=priya&name=Priya" alt="Priya Shah">
<blockquote>“The activity finder is genius. We turned a rainy afternoon into a sensory and movement party.”</blockquote>
<p class="testimonial-author">Priya S. <span>Early childhood coach</span></p>
</article>
</div>
</div>
</section>
<section class="section shop" id="shop">
<div class="container">
<div class="section-header">
<p class="eyebrow">Family Shop</p>
<h2>Practical tools for everyday parenting.</h2>
<p class="lead">Small resources that support the strategies in our guides, from sleep swaddles to calm-down kits.</p>
</div>
<div class="shop-grid">
<article class="product-card">
<img src="https://placehold.co/300x300?text=Sleep%20Swaddle&font=lora" alt="Sleep swaddle product">
<h3>Sleep Swaddle</h3>
<p>Weighted swaddle designed by pediatric sleep consultants to support calming comfort.</p>
<div class="product-footer"><span class="price">$39</span><button class="btn btn-secondary">Add to Cart</button></div>
</article>
<article class="product-card">
<img src="https://placehold.co/300x300?text=Calm%20Down%20Kit&font=lora" alt="Calm down kit product">
<h3>Calm Down Kit</h3>
<p>Sensory and breathing tools for big feelings, reviewed by child psychologists.</p>
<div class="product-footer"><span class="price">$34</span><button class="btn btn-secondary">Add to Cart</button></div>
</article>
<article class="product-card">
<img src="https://placehold.co/300x300?text=Milestone%20Tracker&font=lora" alt="Milestone tracker product">
<h3>Milestone Tracker</h3>
<p>Digital printable milestone tracker for tracking skills between checkups.</p>
<div class="product-footer"><span class="price">$19</span><button class="btn btn-secondary">Add to Cart</button></div>
</article>
</div>
<div class="cta-row">
<a href="#shop" class="btn btn-primary">Visit Shop</a>
<a href="#parent-toolkit" class="btn btn-secondary">Shop All Resources</a>
</div>
</div>
</section>
</main>
<footer class="site-footer">
<div class="container footer-grid">
<div>
<a href="#home" class="brand footer-brand">
<img src="https://placehold.co/260x64?text=Family%20Compass&font=montserrat" alt="Family Compass logo">
<span>Family Compass</span>
</a>
<p>Parenting advice, family resources, childcare tips, and support for parents.</p>
<div class="social-links">
<a href="#">Facebook</a>
<a href="#">Instagram</a>
<a href="#">Pinterest</a>
<a href="#">Twitter</a>
</div>
</div>
<div>
<h4>Resources</h4>
<ul>
<li><a href="#child-development">Child Development</a></li>
<li><a href="#parenting-guide">Parenting Guide</a></li>
<li><a href="#family-safety">Family Safety</a></li>
<li><a href="#family-fun">Activities & Fun</a></li>
</ul>
</div>
<div>
<h4>Company</h4>
<ul>
<li><a href="#">About Us</a></li>
<li><a href="#">Expert Team</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Press</a></li>
</ul>
</div>
<div>
<h4>Contact</h4>
<ul class="contact-list">
<li>123 Meadow Lane</li>
<li>Portland, OR 97205</li>
<li>hello@familycompass.example</li>
<li>(555) 123-4567</li>
</ul>
</div>
</div>
<div class="footer-bottom">
<div class="container footer-bottom-inner">
<p>© <span id="year">2026</span> Family Compass. All rights reserved.</p>
<div class="footer-legal">
<a href="#">Privacy Policy</a>
<a href="#">Terms of Service</a>
<a href="#">Disclaimer</a>
</div>
</div>
</div>
</footer>
<script>
document.getElementById('year').textContent = new Date().getFullYear();
const activities = [
{ name: 'Sensory Play Kitchen', ages: ['Newborn & Baby (0–12)', 'Toddler (1–3)', 'Preschool (3–5)'], interests: ['Sensory', 'Creative'], text: 'Fill a bin with rice, beans, or water beads and add scoops, cups, and safe kitchen tools for tactile exploration.' },
{ name: 'Outdoor Explorer', ages: ['Toddler (1–3)', 'Preschool (3–5)', 'Early School Age (6–8)'], interests: ['Outdoor', 'Movement'], text: 'Create a backyard or park scavenger hunt with leaves, rocks, and simple nature observations.' },
{ name: 'Big Kid Builder', ages: ['Preschool (3–5)', 'Early School Age (6–8)', 'Tweens (9–12)'], interests: ['Creative', 'Movement'], text: 'Use cardboard, blocks, and recyclables to build a fort, vehicle, or invention.' },
{ name: 'Calm Down Corner', ages: ['Newborn & Baby (0–12)', 'Toddler (1–3)', 'Preschool (3–5)'], interests: ['Quiet'], text: 'Create a cozy space with soft pillows, sensory bottles, breathing visuals, and quiet books.' },
{ name: 'Superhero Training', ages: ['Preschool (3–5)', 'Early School Age (6–8)', 'Tweens (9–12)'], interests: ['Movement', 'Outdoor'], text: 'Set up obstacle courses, balance challenges, and superhero-themed movement games.' },
{ name: 'Nature Scavenger Hunt', ages: ['Toddler (1–3)', 'Preschool (3–5)', 'Early School Age (6–8)'], interests: ['Outdoor', 'Sensory'], text: 'Collect natural items and make patterns, leaf rubbings, or simple nature art.' },
{ name: 'Art Studio at Home', ages: ['Preschool (3–5)', 'Early School Age (6–8)', 'Tweens (9–12)'], interests: ['Creative'], text: 'Set up a painting, collage, playdough, or craft station with open-ended materials.' },
{ name: 'Quiet Story Time', ages: ['Newborn & Baby (0–12)', 'Toddler (1–3)', 'Preschool (3–5)'], interests: ['Quiet'], text: 'Build a predictable bedtime routine with books, soft lighting, and cuddles.' },
{ name: 'Dance Party', ages: ['Toddler (1–3)', 'Preschool (3–5)', 'Early School Age (6–8)'], interests: ['Movement'], text: 'Create freeze dance, animal dance, or family dance routines to build gross motor skills.' },
{ name: 'Messy Art Party', ages: ['Preschool (3–5)', 'Early School Age (6–8)', 'Tweens (9–12)'], interests: ['Creative'], text: 'Use paint, glue, paper, and recycled materials for creative expression.' }
];
function findActivities() {
const age = document.getElementById('finder-age').value;
const interest = document.getElementById('finder-interest').value;
const results = document.getElementById('activity-results');
let matches = [];
if (interest === 'All') {
matches = activities.filter(a => a.ages.includes(age));
} else {
matches = activities.filter(a => a.interests.includes(interest) && a.ages.includes(age));
}
if (matches.length === 0) {
results.innerHTML = '<p class="muted">No exact match yet. Try a broader interest or an adjacent age group.</p>';
return;
}
results.innerHTML = matches.map(a => `<article class="activity-card"><h3>${a.name}</h3><p>${a.text}</p></article>`).join('');
}
document.getElementById('find-activities').addEventListener('click', findActivities);
const newsletterForm = document.getElementById('newsletter-form');
newsletterForm.addEventListener('submit', function (e) {
e.preventDefault();
alert('Thanks for subscribing! Check your inbox for a practical parenting tip.');
newsletterForm.reset();
});
</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:13:08.014Z",
"url": "https://benchmark.aimac.invalid/ca81bf8ff0f7c3009839083cdf9a676c6d68ff3480ed69348c342c803008229a.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-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": []
},
{
"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-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": []
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": []
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-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": []
},
{
"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": "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": []
},
{
"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": []
},
{
"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": "avoid-inline-spacing",
"impact": null,
"tags": [
"cat.structure",
"wcag21aa",
"wcag1412",
"EN-301-549",
"EN-9.1.4.12",
"ACT"
],
"description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
"help": "Inline text spacing must be adjustable with custom stylesheets",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "link-in-text-block",
"impact": null,
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-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": "button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure buttons have discernible text",
"help": "Buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has inner text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button class=\"btn btn-primary\" id=\"find-activities\">Find Activities</button>",
"target": [
"#find-activities"
]
}
]
},
{
"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>Parenting advice for the beautiful, messy journey ahead.</h1>",
"target": [
"h1"
]
},
{
"html": "<h2>Understand the milestones that shape early childhood.</h2>",
"target": [
"#child-development > .section-header > h2"
]
},
{
"html": "<h3>Cognitive Growth</h3>",
"target": [
".feature-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Social Skills</h3>",
"target": [
".feature-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Language & Communication</h3>",
"target": [
".feature-card:nth-child(3) > h3"
]
},
{
"html": "<h3>Physical & Motor</h3>",
"target": [
".feature-card:nth-child(4) > h3"
]
},
{
"html": "<h2>Age-by-age parenting guides for every stage.</h2>",
"target": [
"#parenting-guide > .section-header > h2"
]
},
{
"html": "<h3>Newborns & Infants (0\u201312 months)</h3>",
"target": [
".age-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Toddlers & Preschoolers (1\u20134 years)</h3>",
"target": [
".age-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Early School Age (5\u20138 years)</h3>",
"target": [
".age-card:nth-child(3) > h3"
]
},
{
"html": "<h3>Tweens & Teens (9\u201314 years)</h3>",
"target": [
".age-card:nth-child(4) > h3"
]
},
{
"html": "<h3>Parenting FAQs</h3>",
"target": [
"#parenting-guide > h3"
]
},
{
"html": "<h2>Child safety resources for peace of mind.</h2>",
"target": [
"#family-safety > .section-header > h2"
]
},
{
"html": "<h3>Safety Checklist</h3>",
"target": [
".checklist-card > h3"
]
},
{
"html": "<h2>Play is how children learn, so make it a priority.</h2>",
"target": [
"#family-fun > .section-header > h2"
]
},
{
"html": "<h3>The Parent Toolkit</h3>",
"target": [
".sidebar-card > h3"
]
},
{
"html": "<h4>Weekly family tips</h4>",
"target": [
".newsletter > h4"
]
},
{
"html": "<h2>Real families, real growth.</h2>",
"target": [
"#stories > .container > .section-header > h2"
]
},
{
"html": "<h2>Practical tools for everyday parenting.</h2>",
"target": [
"#shop > .container > .section-header > h2"
]
},
{
"html": "<h3>Sleep Swaddle</h3>",
"target": [
".product-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Calm Down Kit</h3>",
"target": [
".product-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Milestone Tracker</h3>",
"target": [
".product-card:nth-child(3) > h3"
]
},
{
"html": "<h4>Resources</h4>",
"target": [
"div:nth-child(2) > h4"
]
},
{
"html": "<h4>Company</h4>",
"target": [
"div:nth-child(3) > h4"
]
},
{
"html": "<h4>Contact</h4>",
"target": [
".footer-grid > div:nth-child(4) > h4"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main>",
"target": [
"main"
]
}
],
"impact": "serious",
"message": "Page has a landmark region"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#2e2a28",
"bgColor": "#fffaf3",
"contrastRatio": 13.68,
"fontSize": "18.0pt (24px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "3:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 13.68"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<span>Family Compass</span>",
"target": [
".header-inner > .brand[href$=\"#home\"] > span"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "duplicate-id-aria",
"data": "finder-age",
"relatedNodes": [],
"impact": "critical",
"message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<select id=\"finder-age\">",
"target": [
"#finder-age"
]
}
]
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "multiple-label",
"data": null,
"relatedNodes": [
{
"html": "<label for=\"finder-age\">Child\u2019s age group</label>",
"target": [
"label[for=\"finder-age\"]"
]
}
],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<select id=\"finder-age\">",
"target": [
"#finder-age"
]
}
]
},
{
"id": "html-has-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure every HTML document has a lang attribute",
"help": "<html> element must have a lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "The <html> element has a lang attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "html-lang-valid",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure the lang attribute of the <html> element has a valid value",
"help": "<html> element must have a valid value for the lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "valid-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Value of lang attribute is included in the list of valid languages"
}
],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"TT7.b",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <img> elements have alternative text or a role of none or presentation",
"help": "Images must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has an alt attribute"
}
],
"all": [],
"none": [
{
"id": "alt-space-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a valid alt attribute value"
}
],
"impact": null,
"html": "<img src=\"https://placehold.co/260x64?text=Family%20Compass&font=montserrat\" alt=\"Family Compass logo\">",
"target": [
".header-inner > .brand[href$=\"#home\"] > img[alt=\"Family Compass logo\"]"
]
}
]
},
{
"id": "label",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "non-empty-placeholder",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a placeholder attribute"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input type=\"email\" placeholder=\"Email address\" required=\"\">",
"target": [
"input"
]
}
]
},
{
"id": "link-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a href=\"#home\" class=\"brand\">\n <img src=\"https://placehold.co/260x64?text=Family%20Compass&font=montserrat\" alt=\"Family Compass logo\">\n <span>Family Compass</span>\n </a>",
"target": [
".header-inner > .brand[href$=\"#home\"]"
]
}
]
},
{
"id": "list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that lists are structured correctly",
"help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "only-listitems",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List element only has direct children that are allowed inside <li> elements"
}
],
"impact": null,
"html": "<ul class=\"checklist\">",
"target": [
".checklist"
]
}
]
},
{
"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>Car seat properly installed and reviewed</li>",
"target": [
".checklist > li:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<img src=\"https://placehold.co/260x64?text=Family%20Compass&font=montserrat\" alt=\"Family Compass logo\">",
"target": [
".header-inner > .brand[href$=\"#home\"] > img[alt=\"Family Compass logo\"]"
]
}
]
},
{
"id": "select-name",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure select element has an accessible name",
"help": "Select element must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "explicit-label",
"data": {
"explicitLabel": "Child\u2019s age group"
},
"relatedNodes": [
{
"html": "<label for=\"finder-age\">Child\u2019s age group</label>",
"target": [
"label[for=\"finder-age\"]"
]
}
],
"impact": "critical",
"message": "Element has an explicit <label>"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<select id=\"finder-age\">",
"target": [
"#finder-age"
]
}
]
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<summary>How do I discipline without yelling or spanking?</summary>",
"target": [
"details:nth-child(1) > summary"
]
}
]
},
{
"id": "target-size",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag22aa",
"wcag258"
],
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "target-size",
"data": {
"minSize": 24,
"width": 386.4,
"height": 48
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (386.4px by 48px, 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=\"brand\">\n <img src=\"https://placehold.co/260x64?text=Family%20Compass&font=montserrat\" alt=\"Family Compass logo\">\n <span>Family Compass</span>\n </a>",
"target": [
".header-inner > .brand[href$=\"#home\"]"
]
}
]
}
],
"incomplete": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": null,
"bgColor": null,
"contrastRatio": 0,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": "bgGradient",
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"hero\" id=\"home\">",
"target": [
"#home"
]
}
],
"impact": "serious",
"message": "Element's background color could not be determined due to a background gradient"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p class=\"eyebrow\">Evidence-informed parenting resources</p>",
"target": [
".hero-copy > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element's background color could not be determined due to a background gradient"
}
]
}
],
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#child-development\" class=\"btn btn-primary\">Start Free</a>",
"target": [
".header-inner > .btn-primary.btn[href$=\"#child-development\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#child-development\" class=\"btn btn-primary\">Start Free</a>",
"target": [
".header-inner > .btn-primary.btn[href$=\"#child-development\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#child-development\" class=\"btn btn-primary\">Start Free</a>",
"target": [
".hero-actions > .btn-primary.btn[href$=\"#child-development\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#child-development\" class=\"btn btn-primary\">Start Free</a>",
"target": [
".hero-actions > .btn-primary.btn[href$=\"#child-development\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#parenting-guide\" class=\"btn btn-primary\">Start Free</a>",
"target": [
".btn-primary.btn[href$=\"#parenting-guide\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#parenting-guide\" class=\"btn btn-primary\">Start Free</a>",
"target": [
".btn-primary.btn[href$=\"#parenting-guide\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#fffaf3",
"contrastRatio": 3.26,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#parenting-guide\" class=\"btn btn-secondary\">Explore Child Development</a>",
"target": [
".btn-secondary.btn[href$=\"#parenting-guide\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#family-fun\" class=\"btn btn-primary\">Browse Parenting Guides</a>",
"target": [
"#parenting-guide > .cta-row > .btn-primary.btn[href$=\"#family-fun\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#family-fun\" class=\"btn btn-primary\">Browse Parenting Guides</a>",
"target": [
"#parenting-guide > .cta-row > .btn-primary.btn[href$=\"#family-fun\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#fffaf3",
"contrastRatio": 3.26,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#family-safety\" class=\"btn btn-secondary\">Explore Safety Resources</a>",
"target": [
".btn-secondary.btn[href$=\"#family-safety\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#family-fun\" class=\"btn btn-primary\">Connect with Experts</a>",
"target": [
"#family-safety > .cta-row > .btn-primary.btn[href$=\"#family-fun\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#family-fun\" class=\"btn btn-primary\">Connect with Experts</a>",
"target": [
"#family-safety > .cta-row > .btn-primary.btn[href$=\"#family-fun\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#fffaf3",
"contrastRatio": 3.26,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#parent-toolkit\" class=\"btn btn-secondary\">Get Safety Checklist</a>",
"target": [
"#family-safety > .cta-row > .btn-secondary.btn[href$=\"#parent-toolkit\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<button class=\"btn btn-primary\" id=\"find-activities\">Find Activities</button>",
"target": [
"#find-activities"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button class=\"btn btn-primary\" id=\"find-activities\">Find Activities</button>",
"target": [
"#find-activities"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#stories\" class=\"btn btn-primary\">Share Story</a>",
"target": [
".btn-primary.btn[href$=\"#stories\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#stories\" class=\"btn btn-primary\">Share Story</a>",
"target": [
".btn-primary.btn[href$=\"#stories\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#fffaf3",
"contrastRatio": 3.26,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#parent-toolkit\" class=\"btn btn-secondary\">Browse Activities</a>",
"target": [
"#family-fun > .cta-row > .btn-secondary.btn[href$=\"#parent-toolkit\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#ffffff",
"contrastRatio": 3.39,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"sidebar-card\">",
"target": [
".sidebar-card"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#parenting-guide\">Age-specific guides</a>",
"target": [
"li:nth-child(1) > a[href$=\"#parenting-guide\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#ffffff",
"contrastRatio": 3.39,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"sidebar-card\">",
"target": [
".sidebar-card"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#shop\">Featured products</a>",
"target": [
"li:nth-child(2) > a[href$=\"#shop\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#ffffff",
"contrastRatio": 3.39,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"sidebar-card\">",
"target": [
".sidebar-card"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#family-fun\">Weekly activity themes</a>",
"target": [
"li:nth-child(3) > a[href$=\"#family-fun\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#ffffff",
"contrastRatio": 3.39,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"sidebar-card\">",
"target": [
".sidebar-card"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#family-safety\">Safety checklists</a>",
"target": [
"li:nth-child(4) > a[href$=\"#family-safety\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<button class=\"btn btn-primary\" type=\"submit\">Subscribe</button>",
"target": [
"button[type=\"submit\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button class=\"btn btn-primary\" type=\"submit\">Subscribe</button>",
"target": [
"button[type=\"submit\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#ffffff",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"product-card\">",
"target": [
".product-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button class=\"btn btn-secondary\">Add to Cart</button>",
"target": [
".product-card:nth-child(1) > .product-footer > button"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#ffffff",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"product-card\">",
"target": [
".product-card:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button class=\"btn btn-secondary\">Add to Cart</button>",
"target": [
".product-card:nth-child(2) > .product-footer > button"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#ffffff",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"product-card\">",
"target": [
".product-card:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button class=\"btn btn-secondary\">Add to Cart</button>",
"target": [
".product-card:nth-child(3) > .product-footer > button"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #d96c47, background color: #ffffff, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d96c47",
"contrastRatio": 3.39,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#shop\" class=\"btn btn-primary\">Visit Shop</a>",
"target": [
".btn-primary.btn[href$=\"#shop\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#shop\" class=\"btn btn-primary\">Visit Shop</a>",
"target": [
".btn-primary.btn[href$=\"#shop\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.39 (foreground color: #ffffff, background color: #d96c47, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d96c47",
"bgColor": "#fffaf3",
"contrastRatio": 3.26,
"fontSize": "11.8pt (15.68px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#parent-toolkit\" class=\"btn btn-secondary\">Shop All Resources</a>",
"target": [
".container > .cta-row > .btn-secondary.btn[href$=\"#parent-toolkit\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.26 (foreground color: #d96c47, background color: #fffaf3, font size: 11.8pt (15.68px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 8341
},
{
"y": 576,
"height": 8341
},
{
"y": 1152,
"height": 8341
},
{
"y": 1728,
"height": 8341
},
{
"y": 2304,
"height": 8341
},
{
"y": 2880,
"height": 8341
},
{
"y": 3456,
"height": 8341
},
{
"y": 4032,
"height": 8341
},
{
"y": 4608,
"height": 8341
},
{
"y": 5184,
"height": 8341
},
{
"y": 5760,
"height": 8341
},
{
"y": 6336,
"height": 8341
},
{
"y": 6912,
"height": 8341
},
{
"y": 7488,
"height": 8341
},
{
"y": 7621,
"height": 8341
}
],
"scans": 16,
"max_states": 512,
"settle_ms": 5000,
"page_timeout_seconds": 150,
"layout_stability": "consecutive 100ms size samples within one CSS pixel",
"animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
"interactive_states": "not exercised",
"horizontal_scroll": "not exercised"
}
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Family and Parenting" 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: "Family and Parenting"
- Description: Parenting advice, family resources, childcare tips, and support for parents.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Family and Parenting" 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: "Child Development", "Parenting Guide", "Shop".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Family and Parenting" category. Consider themes similar to: "Child Safety", "Age-by-Age Guide", "Family Fun".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "discipline strategies", "screen time", "social skills".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Start Free", "Share Story", "Connect with Experts".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Family and Parenting" sector. Ideas similar but not limited to: "activity finder".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "age-specific guides", "featured products", "weekly 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.