MiniMax MiniMax M3.1 Flash – Family and Parenting
via Minimax · Generated
- AIMAC Debt 4.99
- Cost $0.025
- Total Violations 23
- HTML Size 112 KB
- Em Dashes 9
Screenshot
View Live Page
Accessibility Issues Found
23 Serious
-
color-contrast serious 23 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<span class="eyebrow">Start where you are</span>
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">
<meta name="description" content="Root & Rise offers practical, expert-informed parenting advice, family health guidance, meaningful activities, and moderated support for growing families.">
<meta name="theme-color" content="#173f3a">
<meta name="color-scheme" content="light">
<title>Root & Rise | Practical Guidance for Growing Families</title>
<meta property="og:type" content="website">
<meta property="og:title" content="Root & Rise | Steady Guidance for Growing Families">
<meta property="og:description" content="Practical parenting advice, family health guidance, and real support—without the guilt spiral.">
<meta property="og:url" content="https://www.rootandrise.family/">
<meta property="og:image" content="https://placehold.co/1200x630/173F3A/FFF8E8?text=Root%20%26%20Rise&font=playfair%20display">
<meta name="twitter:card" content="summary_large_image">
<link rel="canonical" href="https://www.rootandrise.family/">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://picsum.photos">
<link rel="preconnect" href="https://i.pravatar.cc">
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Root & Rise Family Co.",
"description": "Practical parenting guidance, family health resources, activities, and moderated peer support for growing families.",
"url": "https://www.rootandrise.family/",
"email": "hello@rootandrise.family",
"telephone": "+1-415-555-0148",
"areaServed": "United States",
"priceRange": "$$",
"sameAs": [
"https://www.instagram.com/",
"https://www.facebook.com/",
"https://www.pinterest.com/",
"https://www.youtube.com/"
]
}
</script>
<style>
:root {
--forest: #173f3a;
--forest-2: #245a52;
--forest-3: #356a60;
--cream: #fbf7ee;
--paper: #fffefa;
--white: #ffffff;
--coral: #f0775d;
--coral-dark: #d95b43;
--sun: #f4cc70;
--sun-soft: #fbefbd;
--sage: #e4eee3;
--blue: #dfebef;
--text: #203832;
--muted: #62716b;
--line: #dce4da;
--shadow-sm: 0 10px 30px rgba(23, 63, 58, 0.08);
--shadow-lg: 0 24px 70px rgba(23, 63, 58, 0.14);
--radius-sm: 12px;
--radius-md: 20px;
--radius-lg: 30px;
--radius-xl: 42px;
--container: 1200px;
--font-sans: "Manrope", sans-serif;
--font-serif: "Fraunces", Georgia, serif;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
scroll-padding-top: 110px;
}
body {
margin: 0;
background: var(--cream);
color: var(--text);
font-family: var(--font-sans);
font-size: 16px;
line-height: 1.7;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
}
body::selection {
background: var(--sun);
color: var(--forest);
}
img {
display: block;
max-width: 100%;
}
a {
color: inherit;
text-decoration: none;
}
button,
input,
textarea,
select {
color: inherit;
font: inherit;
}
button,
select {
cursor: pointer;
}
h1,
h2,
h3,
h4,
p {
margin-top: 0;
}
h1,
h2,
h3,
h4 {
color: var(--forest);
line-height: 1.12;
text-wrap: balance;
}
h1,
h2 {
font-family: var(--font-serif);
letter-spacing: -0.035em;
}
h1 {
font-size: clamp(3rem, 5.8vw, 5rem);
margin-bottom: 26px;
}
h2 {
font-size: clamp(2.25rem, 4vw, 3.75rem);
margin-bottom: 22px;
}
h3 {
font-size: 1.35rem;
margin-bottom: 12px;
}
p:last-child {
margin-bottom: 0;
}
:focus-visible {
outline: 3px solid var(--coral);
outline-offset: 4px;
}
.skip-link {
position: fixed;
top: 12px;
left: 12px;
z-index: 200;
padding: 10px 16px;
border-radius: 8px;
background: var(--sun);
color: var(--forest);
font-weight: 800;
transform: translateY(-150%);
transition: transform 0.2s ease;
}
.skip-link:focus {
transform: translateY(0);
}
.container {
width: min(calc(100% - 40px), var(--container));
margin-inline: auto;
}
.section {
padding: 104px 0;
}
.section--white {
background: var(--paper);
}
.section--sage {
background: var(--sage);
}
.section-head {
max-width: 780px;
margin: 0 auto 54px;
text-align: center;
}
.section-head p {
max-width: 700px;
margin-inline: auto;
color: var(--muted);
font-size: 1.08rem;
}
.eyebrow {
display: inline-flex;
align-items: center;
gap: 8px;
margin-bottom: 18px;
color: var(--coral-dark);
font-size: 0.76rem;
font-weight: 800;
letter-spacing: 0.15em;
line-height: 1.2;
text-transform: uppercase;
}
.eyebrow::before {
width: 24px;
height: 2px;
background: currentColor;
content: "";
}
.icon {
width: 1.15em;
height: 1.15em;
flex: 0 0 auto;
fill: none;
stroke: currentColor;
stroke-linecap: round;
stroke-linejoin: round;
stroke-width: 1.8;
vertical-align: -0.15em;
}
.button {
display: inline-flex;
min-height: 52px;
align-items: center;
justify-content: center;
gap: 10px;
padding: 13px 22px;
border: 1px solid transparent;
border-radius: 999px;
font-size: 0.92rem;
font-weight: 800;
line-height: 1.2;
transition: transform 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease, border-color 0.2s ease;
}
.button:hover {
transform: translateY(-2px);
}
.button .icon {
transition: transform 0.2s ease;
}
.button:hover .icon {
transform: translateX(3px);
}
.button--primary {
background: var(--forest);
box-shadow: 0 10px 24px rgba(23, 63, 58, 0.18);
color: var(--white);
}
.button--primary:hover {
background: var(--forest-2);
box-shadow: 0 14px 30px rgba(23, 63, 58, 0.24);
}
.button--coral {
background: var(--coral);
color: var(--forest);
box-shadow: 0 10px 24px rgba(217, 91, 67, 0.16);
}
.button--coral:hover {
background: #f48971;
}
.button--light {
background: var(--white);
color: var(--forest);
}
.button--outline {
border-color: rgba(23, 63, 58, 0.25);
background: transparent;
color: var(--forest);
}
.button--outline:hover {
border-color: var(--forest);
background: rgba(255, 255, 255, 0.5);
}
.text-link {
display: inline-flex;
align-items: center;
gap: 7px;
color: var(--forest);
font-size: 0.9rem;
font-weight: 800;
}
.text-link .icon {
transition: transform 0.2s ease;
}
.text-link:hover .icon {
transform: translateX(4px);
}
.announcement {
position: relative;
z-index: 70;
background: var(--forest);
color: var(--white);
font-size: 0.82rem;
}
.announcement-inner {
min-height: 40px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.announcement p {
margin: 0;
}
.announcement-tag {
display: inline-block;
margin-right: 8px;
padding: 3px 8px;
border-radius: 999px;
background: var(--sun);
color: var(--forest);
font-size: 0.65rem;
font-weight: 800;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.announcement a {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--sun-soft);
font-weight: 700;
white-space: nowrap;
}
.site-header {
position: sticky;
top: 0;
z-index: 60;
border-bottom: 1px solid rgba(23, 63, 58, 0.08);
background: rgba(255, 254, 250, 0.92);
backdrop-filter: blur(16px);
transition: box-shadow 0.2s ease;
}
.site-header.is-scrolled {
box-shadow: 0 8px 30px rgba(23, 63, 58, 0.08);
}
.nav-shell {
min-height: 82px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
}
.brand {
display: inline-flex;
align-items: center;
gap: 12px;
flex: 0 0 auto;
}
.brand img {
width: 50px;
height: 50px;
border-radius: 15px;
box-shadow: 0 7px 18px rgba(23, 63, 58, 0.15);
}
.brand-copy {
display: grid;
line-height: 1.1;
}
.brand-name {
color: var(--forest);
font-family: var(--font-serif);
font-size: 1.32rem;
font-weight: 700;
letter-spacing: -0.02em;
}
.brand-tagline {
margin-top: 5px;
color: var(--muted);
font-size: 0.65rem;
font-weight: 700;
letter-spacing: 0.04em;
}
.main-nav ul {
display: flex;
align-items: center;
gap: 28px;
margin: 0;
padding: 0;
list-style: none;
}
.main-nav a {
position: relative;
display: inline-block;
padding: 27px 0;
color: #435650;
font-size: 0.86rem;
font-weight: 700;
white-space: nowrap;
}
.main-nav a::after {
position: absolute;
right: 0;
bottom: 20px;
left: 0;
height: 2px;
border-radius: 2px;
background: var(--coral);
content: "";
transform: scaleX(0);
transform-origin: right;
transition: transform 0.2s ease;
}
.main-nav a:hover,
.main-nav a:focus-visible {
color: var(--forest);
}
.main-nav a:hover::after,
.main-nav a:focus-visible::after {
transform: scaleX(1);
transform-origin: left;
}
.menu-toggle {
display: none;
width: 46px;
height: 46px;
align-items: center;
justify-content: center;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--white);
color: var(--forest);
}
.menu-toggle span,
.menu-toggle::before,
.menu-toggle::after {
display: block;
width: 20px;
height: 2px;
border-radius: 2px;
background: currentColor;
content: "";
transition: transform 0.2s ease, opacity 0.2s ease;
}
.menu-toggle span {
margin: 4px 0;
}
.menu-toggle[aria-expanded="true"]::before {
transform: translateY(6px) rotate(45deg);
}
.menu-toggle[aria-expanded="true"] span {
opacity: 0;
}
.menu-toggle[aria-expanded="true"]::after {
transform: translateY(-6px) rotate(-45deg);
}
.hero {
position: relative;
overflow: hidden;
padding: 80px 0 96px;
background:
radial-gradient(circle at 8% 14%, rgba(244, 204, 112, 0.26), transparent 23%),
radial-gradient(circle at 92% 90%, rgba(240, 119, 93, 0.13), transparent 25%),
var(--cream);
}
.hero::after {
position: absolute;
top: 18%;
right: -100px;
width: 250px;
height: 250px;
border: 1px solid rgba(23, 63, 58, 0.12);
border-radius: 50%;
content: "";
}
.hero-grid {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: minmax(0, 1.04fr) minmax(400px, 0.96fr);
align-items: center;
gap: 78px;
}
.hero h1 {
max-width: 720px;
}
.hero h1 em {
color: var(--coral-dark);
font-style: normal;
}
.hero-lead {
max-width: 650px;
margin-bottom: 32px;
color: var(--muted);
font-size: 1.16rem;
line-height: 1.8;
}
.hero-actions {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 34px;
}
.hero-trust {
display: flex;
align-items: center;
gap: 14px;
color: var(--muted);
font-size: 0.8rem;
font-weight: 700;
}
.trust-avatars {
display: flex;
padding-left: 8px;
}
.trust-avatars img {
width: 36px;
height: 36px;
margin-left: -8px;
border: 3px solid var(--cream);
border-radius: 50%;
object-fit: cover;
}
.hero-visual {
position: relative;
min-width: 0;
padding: 0 0 38px 22px;
}
.hero-visual::before {
position: absolute;
top: -22px;
right: -22px;
width: 48%;
aspect-ratio: 1;
border-radius: 42% 58% 62% 38%;
background: var(--sun);
content: "";
}
.hero-image-wrap {
position: relative;
z-index: 1;
overflow: hidden;
border: 10px solid rgba(255, 255, 255, 0.68);
border-radius: 36px 36px 130px 36px;
box-shadow: var(--shadow-lg);
transform: rotate(1.5deg);
}
.hero-image-wrap img {
width: 100%;
aspect-ratio: 0.82;
object-fit: cover;
filter: saturate(0.88) contrast(0.96);
}
.hero-card {
position: absolute;
right: -22px;
bottom: 0;
z-index: 3;
width: min(305px, 72%);
padding: 21px;
border: 1px solid rgba(23, 63, 58, 0.08);
border-radius: 22px;
background: var(--white);
box-shadow: var(--shadow-lg);
}
.hero-card-label {
display: inline-flex;
align-items: center;
gap: 6px;
margin-bottom: 9px;
color: var(--coral-dark);
font-size: 0.7rem;
font-weight: 800;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.hero-card p {
margin-bottom: 0;
color: var(--forest);
font-family: var(--font-serif);
font-size: 1.12rem;
line-height: 1.4;
}
.hero-pill {
position: absolute;
top: 35px;
left: -28px;
z-index: 3;
display: flex;
align-items: center;
gap: 10px;
padding: 12px 16px;
border-radius: 999px;
background: var(--forest);
box-shadow: var(--shadow-sm);
color: var(--white);
font-size: 0.74rem;
font-weight: 800;
transform: rotate(-3deg);
}
.hero-pill .icon {
color: var(--sun);
}
.stats-bar {
border-top: 1px solid var(--line);
border-bottom: 1px solid var(--line);
background: var(--paper);
}
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
}
.stat {
position: relative;
padding: 30px 24px;
text-align: center;
}
.stat:not(:last-child)::after {
position: absolute;
top: 27px;
right: 0;
bottom: 27px;
width: 1px;
background: var(--line);
content: "";
}
.stat strong {
display: block;
color: var(--forest);
font-family: var(--font-serif);
font-size: 2rem;
line-height: 1.1;
}
.stat span {
display: block;
margin-top: 6px;
color: var(--muted);
font-size: 0.78rem;
font-weight: 700;
}
.topic-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 18px;
}
.topic-card {
position: relative;
min-height: 330px;
display: flex;
flex-direction: column;
padding: 28px;
overflow: hidden;
border: 1px solid var(--line);
border-radius: var(--radius-lg);
background: var(--paper);
box-shadow: 0 1px 0 rgba(23, 63, 58, 0.02);
transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.topic-card::after {
position: absolute;
right: -42px;
bottom: -42px;
width: 120px;
height: 120px;
border-radius: 50%;
background: var(--sage);
content: "";
transition: transform 0.25s ease;
}
.topic-card:hover {
border-color: rgba(23, 63, 58, 0.18);
box-shadow: var(--shadow-sm);
transform: translateY(-5px);
}
.topic-card:hover::after {
transform: scale(1.25);
}
.topic-icon {
width: 54px;
height: 54px;
display: grid;
place-items: center;
margin-bottom: 26px;
border-radius: 17px;
background: var(--sage);
color: var(--forest);
}
.topic-card:nth-child(2) .topic-icon {
background: var(--blue);
}
.topic-card:nth-child(3) .topic-icon {
background: var(--sun-soft);
}
.topic-card:nth-child(4) .topic-icon {
background: #f8ded6;
}
.topic-icon .icon {
width: 25px;
height: 25px;
}
.topic-card h3 {
font-size: 1.3rem;
}
.topic-card p {
margin-bottom: 24px;
color: var(--muted);
font-size: 0.9rem;
}
.topic-card .text-link {
position: relative;
z-index: 2;
margin-top: auto;
}
.guides-section {
background: #f1f5ef;
}
.guides-grid {
display: grid;
grid-template-columns: minmax(360px, 0.9fr) minmax(0, 1.1fr);
align-items: center;
gap: 86px;
}
.guide-visual {
position: relative;
padding: 0 0 55px 28px;
}
.guide-visual::before {
position: absolute;
bottom: 0;
left: 0;
width: 75%;
height: 72%;
border-radius: 34px;
background: var(--sun);
content: "";
}
.guide-visual img {
position: relative;
z-index: 1;
width: 100%;
aspect-ratio: 1 / 1.08;
border: 8px solid var(--white);
border-radius: 32px 32px 105px 32px;
box-shadow: var(--shadow-lg);
object-fit: cover;
}
.guide-note {
position: absolute;
right: -20px;
bottom: 15px;
z-index: 2;
width: 255px;
padding: 20px;
border-radius: 20px;
background: var(--forest);
box-shadow: var(--shadow-lg);
color: var(--white);
}
.guide-note strong {
display: block;
margin-bottom: 6px;
color: var(--sun);
font-size: 0.7rem;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.guide-note p {
margin: 0;
font-size: 0.86rem;
line-height: 1.55;
}
.guides-copy > p {
color: var(--muted);
font-size: 1.02rem;
}
.practice-list {
display: grid;
gap: 18px;
margin: 32px 0;
padding: 0;
list-style: none;
}
.practice-list li {
display: grid;
grid-template-columns: 34px 1fr;
gap: 12px;
align-items: start;
}
.practice-check {
width: 30px;
height: 30px;
display: grid;
place-items: center;
margin-top: 2px;
border-radius: 50%;
background: var(--sage);
color: var(--forest);
}
.practice-check .icon {
width: 16px;
height: 16px;
}
.practice-list strong {
display: block;
margin-bottom: 3px;
color: var(--forest);
}
.practice-list span:last-child {
display: block;
color: var(--muted);
font-size: 0.9rem;
}
.pull-quote {
position: relative;
margin: 34px 0;
padding: 24px 26px 24px 30px;
border-left: 4px solid var(--coral);
border-radius: 0 16px 16px 0;
background: rgba(255, 255, 255, 0.65);
color: var(--forest);
font-family: var(--font-serif);
font-size: 1.22rem;
line-height: 1.5;
}
.tracker-section {
position: relative;
overflow: hidden;
background: var(--paper);
}
.tracker-section::before {
position: absolute;
top: -170px;
left: -120px;
width: 420px;
height: 420px;
border-radius: 50%;
background: var(--sun-soft);
content: "";
opacity: 0.7;
}
.tracker-grid {
position: relative;
display: grid;
grid-template-columns: 0.72fr 1.28fr;
align-items: start;
gap: 54px;
}
.tracker-intro {
position: sticky;
top: 125px;
}
.tracker-intro > p {
color: var(--muted);
}
.how-to {
display: grid;
gap: 18px;
margin-top: 30px;
}
.how-step {
display: grid;
grid-template-columns: 36px 1fr;
gap: 13px;
align-items: start;
}
.how-step-number {
width: 34px;
height: 34px;
display: grid;
place-items: center;
border-radius: 50%;
background: var(--forest);
color: var(--white);
font-size: 0.76rem;
font-weight: 800;
}
.how-step strong {
display: block;
color: var(--forest);
font-size: 0.9rem;
}
.how-step p {
margin: 2px 0 0;
color: var(--muted);
font-size: 0.82rem;
}
.safety-note {
margin-top: 30px;
padding: 17px 18px;
border: 1px solid #ead9aa;
border-radius: 15px;
background: #fff8df;
color: #6d5a25;
font-size: 0.79rem;
line-height: 1.55;
}
.tracker-card {
padding: 32px;
border: 1px solid var(--line);
border-radius: var(--radius-lg);
background: var(--white);
box-shadow: var(--shadow-lg);
}
.stage-tabs {
display: flex;
gap: 8px;
margin-bottom: 25px;
padding: 7px;
border-radius: 16px;
background: #eef2ec;
}
.stage-tab {
flex: 1;
padding: 11px 12px;
border: 0;
border-radius: 11px;
background: transparent;
color: var(--muted);
font-size: 0.78rem;
font-weight: 800;
transition: background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;
}
.stage-tab[aria-selected="true"] {
background: var(--white);
box-shadow: 0 4px 13px rgba(23, 63, 58, 0.09);
color: var(--forest);
}
.progress-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
margin-bottom: 10px;
}
.progress-header strong {
color: var(--forest);
font-size: 0.9rem;
}
.progress-header span {
color: var(--muted);
font-size: 0.76rem;
font-weight: 700;
}
.progress-track {
height: 9px;
overflow: hidden;
margin-bottom: 24px;
border-radius: 999px;
background: var(--sage);
}
.progress-bar {
width: 0;
height: 100%;
border-radius: inherit;
background: linear-gradient(90deg, var(--forest-3), #6f9a75);
transition: width 0.35s ease;
}
.milestone-panel {
margin: 0;
padding: 0;
border: 0;
}
.milestone-panel[hidden] {
display: none;
}
.milestone-panel legend {
margin-bottom: 13px;
color: var(--forest);
font-family: var(--font-serif);
font-size: 1.28rem;
font-weight: 700;
}
.checklist {
display: grid;
gap: 10px;
}
.check-item {
position: relative;
display: grid;
grid-template-columns: 23px 1fr;
gap: 12px;
align-items: start;
padding: 15px 16px;
border: 1px solid var(--line);
border-radius: 14px;
background: var(--paper);
cursor: pointer;
transition: border-color 0.2s ease, background 0.2s ease;
}
.check-item:hover {
border-color: rgba(23, 63, 58, 0.3);
}
.check-item:has(input:checked) {
border-color: #a9c5ab;
background: #f0f7ee;
}
.check-item input {
width: 20px;
height: 20px;
margin: 2px 0 0;
accent-color: var(--forest);
}
.check-item strong {
display: block;
color: var(--forest);
font-size: 0.88rem;
line-height: 1.45;
}
.check-item small {
display: block;
margin-top: 4px;
color: var(--muted);
font-size: 0.72rem;
line-height: 1.5;
}
.tracker-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-top: 25px;
padding-top: 22px;
border-top: 1px solid var(--line);
}
.saved-note {
display: inline-flex;
align-items: center;
gap: 7px;
color: var(--muted);
font-size: 0.74rem;
font-weight: 700;
}
.saved-note .icon {
color: var(--forest-3);
}
.tracker-button {
min-height: 42px;
padding: 9px 15px;
border: 1px solid var(--line);
border-radius: 999px;
background: var(--white);
color: var(--forest);
font-size: 0.76rem;
font-weight: 800;
}
.tracker-button:hover {
border-color: var(--forest);
}
.health-section {
position: relative;
overflow: hidden;
background: var(--forest);
color: var(--white);
}
.health-section::before,
.health-section::after {
position: absolute;
border: 1px solid rgba(255, 255, 255, 0.09);
border-radius: 50%;
content: "";
}
.health-section::before {
top: -220px;
right: -140px;
width: 520px;
height: 520px;
}
.health-section::after {
bottom: -280px;
left: -200px;
width: 580px;
height: 580px;
}
.health-section h2,
.health-section h3 {
color: var(--white);
}
.health-head {
position: relative;
z-index: 1;
display: flex;
align-items: end;
justify-content: space-between;
gap: 40px;
margin-bottom: 48px;
}
.health-head .eyebrow {
color: var(--sun);
}
.health-head p {
max-width: 690px;
margin-bottom: 0;
color: rgba(255, 255, 255, 0.72);
}
.health-grid {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.health-card {
position: relative;
min-height: 340px;
display: flex;
flex-direction: column;
padding: 30px;
border: 1px solid rgba(255, 255, 255, 0.13);
border-radius: var(--radius-lg);
background: rgba(255, 255, 255, 0.07);
transition: background 0.2s ease, transform 0.2s ease;
}
.health-card:hover {
background: rgba(255, 255, 255, 0.11);
transform: translateY(-4px);
}
.health-card-number {
margin-bottom: 54px;
color: var(--sun);
font-size: 0.72rem;
font-weight: 800;
letter-spacing: 0.12em;
}
.health-card p {
color: rgba(255, 255, 255, 0.68);
font-size: 0.9rem;
}
.health-card .text-link {
margin-top: auto;
color: var(--sun-soft);
}
.clinical-note {
position: relative;
z-index: 1;
display: flex;
align-items: center;
justify-content: space-between;
gap: 28px;
margin-top: 30px;
padding: 23px 25px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 20px;
background: rgba(0, 0, 0, 0.12);
}
.review-team {
display: flex;
align-items: center;
gap: 16px;
}
.review-team img {
width: 48px;
height: 48px;
border: 3px solid var(--forest);
border-radius: 50%;
object-fit: cover;
}
.review-team strong {
display: block;
color: var(--white);
font-size: 0.9rem;
}
.review-team span {
display: block;
color: rgba(255, 255, 255, 0.64);
font-size: 0.77rem;
}
.activity-grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 20px;
}
.activity-card {
position: relative;
min-height: 310px;
display: flex;
flex-direction: column;
overflow: hidden;
border: 1px solid var(--line);
border-radius: var(--radius-lg);
background: var(--paper);
transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.activity-card:hover {
box-shadow: var(--shadow-sm);
transform: translateY(-4px);
}
.activity-card:nth-child(1) {
grid-column: span 7;
grid-row: span 2;
min-height: 640px;
}
.activity-card:nth-child(2),
.activity-card:nth-child(3) {
grid-column: span 5;
min-height: 310px;
}
.activity-card:nth-child(4) {
grid-column: span 7;
min-height: 310px;
}
.activity-image {
position: relative;
overflow: hidden;
background: var(--sage);
}
.activity-card:nth-child(1) .activity-image {
flex: 1;
min-height: 390px;
}
.activity-card:not(:nth-child(1)) .activity-image {
height: 165px;
}
.activity-image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.45s ease;
}
.activity-card:hover .activity-image img {
transform: scale(1.035);
}
.activity-tag {
position: absolute;
top: 16px;
left: 16px;
padding: 7px 11px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.9);
color: var(--forest);
font-size: 0.68rem;
font-weight: 800;
letter-spacing: 0.04em;
backdrop-filter: blur(8px);
}
.activity-content {
padding: 24px;
}
.activity-card:nth-child(1) .activity-content {
padding: 29px;
}
.activity-content h3 {
margin-bottom: 9px;
}
.activity-content p {
margin-bottom: 18px;
color: var(--muted);
font-size: 0.87rem;
}
.community-layout {
display: grid;
grid-template-columns: 1.18fr 0.82fr;
gap: 24px;
margin-bottom: 50px;
}
.circle-list {
overflow: hidden;
border: 1px solid rgba(23, 63, 58, 0.12);
border-radius: var(--radius-lg);
background: var(--paper);
box-shadow: var(--shadow-sm);
}
.circle-row {
display: grid;
grid-template-columns: 62px 1fr auto;
align-items: center;
gap: 18px;
padding: 23px 25px;
}
.circle-row:not(:last-child) {
border-bottom: 1px solid var(--line);
}
.circle-date {
width: 58px;
height: 58px;
display: grid;
place-items: center;
border-radius: 16px;
background: var(--sage);
color: var(--forest);
font-size: 0.75rem;
font-weight: 800;
line-height: 1.2;
text-align: center;
text-transform: uppercase;
}
.circle-row:nth-child(2) .circle-date {
background: var(--sun-soft);
}
.circle-row:nth-child(3) .circle-date {
background: var(--blue);
}
.circle-row h3 {
margin-bottom: 4px;
font-size: 1.08rem;
}
.circle-row p {
margin: 0;
color: var(--muted);
font-size: 0.78rem;
}
.circle-meta {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 7px;
}
.circle-meta span {
display: inline-flex;
align-items: center;
gap: 4px;
color: #52655f;
font-size: 0.7rem;
font-weight: 700;
}
.circle-meta .icon {
width: 13px;
height: 13px;
}
.open-badge {
padding: 6px 10px;
border-radius: 999px;
background: #e0f1df;
color: #35633b;
font-size: 0.66rem;
font-weight: 800;
text-transform: uppercase;
}
.community-promise {
position: relative;
overflow: hidden;
padding: 35px;
border-radius: var(--radius-lg);
background: var(--forest);
color: var(--white);
}
.community-promise::after {
position: absolute;
right: -55px;
bottom: -70px;
width: 190px;
height: 190px;
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 50%;
content: "";
}
.community-promise h3 {
color: var(--white);
font-family: var(--font-serif);
font-size: 1.75rem;
}
.community-promise > p {
color: rgba(255, 255, 255, 0.72);
}
.promise-list {
display: grid;
gap: 13px;
margin: 26px 0 30px;
padding: 0;
list-style: none;
}
.promise-list li {
display: grid;
grid-template-columns: 27px 1fr;
gap: 10px;
align-items: start;
color: rgba(255, 255, 255, 0.82);
font-size: 0.84rem;
}
.promise-list .icon {
width: 20px;
height: 20px;
padding: 4px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.13);
color: var(--sun);
}
.community-promise .button {
position: relative;
z-index: 2;
}
.testimonial-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 18px;
}
.testimonial-card {
display: flex;
flex-direction: column;
padding: 28px;
border: 1px solid rgba(23, 63, 58, 0.1);
border-radius: var(--radius-lg);
background: var(--paper);
}
.quote-mark {
width: 40px;
height: 40px;
display: grid;
place-items: center;
margin-bottom: 20px;
border-radius: 50%;
background: var(--sun-soft);
color: var(--coral-dark);
font-family: var(--font-serif);
font-size: 1.7rem;
line-height: 1;
}
.testimonial-card blockquote {
margin: 0 0 26px;
color: var(--forest);
font-family: var(--font-serif);
font-size: 1.08rem;
line-height: 1.6;
}
.testimonial-person {
display: flex;
align-items: center;
gap: 12px;
margin-top: auto;
}
.testimonial-person img {
width: 45px;
height: 45px;
border-radius: 50%;
object-fit: cover;
}
.testimonial-person strong {
display: block;
color: var(--forest);
font-size: 0.82rem;
}
.testimonial-person span {
display: block;
color: var(--muted);
font-size: 0.7rem;
}
.community-form-section {
padding-top: 0;
}
.community-form-wrap {
display: grid;
grid-template-columns: 1.15fr 0.85fr;
overflow: hidden;
border: 1px solid var(--line);
border-radius: var(--radius-xl);
background: var(--paper);
box-shadow: var(--shadow-lg);
}
.form-panel {
padding: 38px;
}
.form-panel h3 {
margin-bottom: 8px;
font-family: var(--font-serif);
font-size: 1.65rem;
}
.form-panel > p {
margin-bottom: 24px;
color: var(--muted);
font-size: 0.9rem;
}
.form-field {
margin-bottom: 18px;
}
.form-field label,
.form-field legend,
.field-label {
display: block;
margin-bottom: 7px;
color: var(--forest);
font-size: 0.78rem;
font-weight: 800;
}
.form-field input[type="text"],
.form-field input[type="email"],
.form-field select,
.form-field textarea {
width: 100%;
padding: 13px 14px;
border: 1px solid #ccd7cf;
border-radius: 12px;
background: var(--white);
font-size: 0.86rem;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.form-field textarea {
min-height: 125px;
resize: vertical;
}
.form-field input:focus,
.form-field select:focus,
.form-field textarea:focus {
border-color: var(--forest-3);
box-shadow: 0 0 0 4px rgba(53, 106, 96, 0.12);
outline: none;
}
.form-field fieldset {
margin: 0 0 18px;
padding: 0;
border: 0;
}
.purpose-options {
display: flex;
flex-wrap: wrap;
gap: 9px;
}
.purpose-options label {
position: relative;
margin: 0;
cursor: pointer;
}
.purpose-options input {
position: absolute;
opacity: 0;
pointer-events: none;
}
.purpose-options span {
display: block;
padding: 9px 14px;
border: 1px solid var(--line);
border-radius: 999px;
color: var(--muted);
font-size: 0.75rem;
font-weight: 800;
transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}
.purpose-options input:checked + span {
border-color: var(--forest);
background: var(--forest);
color: var(--white);
}
.purpose-options input:focus-visible + span {
outline: 3px solid var(--coral);
outline-offset: 3px;
}
.form-two-column {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
}
.form-consent {
display: flex;
align-items: flex-start;
gap: 9px;
margin: 4px 0 20px;
color: var(--muted);
font-size: 0.7rem;
line-height: 1.5;
}
.form-consent input {
margin-top: 3px;
accent-color: var(--forest);
}
.form-success {
margin-bottom: 20px;
padding: 13px 15px;
border: 1px solid #a7c9a8;
border-radius: 12px;
background: #edf7eb;
color: #315c36;
font-size: 0.8rem;
font-weight: 700;
}
.form-success[hidden] {
display: none;
}
.form-aside {
position: relative;
overflow: hidden;
padding: 40px;
background: var(--blue);
}
.form-aside::after {
position: absolute;
right: -70px;
bottom: -90px;
width: 220px;
height: 220px;
border: 1px solid rgba(23, 63, 58, 0.1);
border-radius: 50%;
content: "";
}
.form-aside h3 {
font-family: var(--font-serif);
font-size: 1.5rem;
}
.form-aside > p {
color: #526a6e;
font-size: 0.88rem;
}
.next-steps {
display: grid;
gap: 18px;
margin-top: 28px;
}
.next-step {
display: grid;
grid-template-columns: 35px 1fr;
gap: 12px;
align-items: start;
}
.next-step > span {
width: 33px;
height: 33px;
display: grid;
place-items: center;
border-radius: 50%;
background: var(--white);
color: var(--forest);
font-size: 0.7rem;
font-weight: 800;
}
.next-step strong {
display: block;
color: var(--forest);
font-size: 0.82rem;
}
.next-step p {
margin: 2px 0 0;
color: #526a6e;
font-size: 0.75rem;
}
.blog-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 22px;
}
.article-card {
overflow: hidden;
border: 1px solid var(--line);
border-radius: var(--radius-lg);
background: var(--paper);
transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.article-card:hover {
box-shadow: var(--shadow-sm);
transform: translateY(-5px);
}
.article-image {
position: relative;
overflow: hidden;
aspect-ratio: 16 / 10;
background: var(--sage);
}
.article-image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.4s ease;
}
.article-card:hover .article-image img {
transform: scale(1.04);
}
.article-category {
position: absolute;
bottom: 14px;
left: 14px;
padding: 6px 10px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.92);
color: var(--forest);
font-size: 0.66rem;
font-weight: 800;
backdrop-filter: blur(8px);
}
.article-content {
padding: 25px;
}
.article-meta {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 13px;
color: var(--muted);
font-size: 0.68rem;
font-weight: 700;
}
.article-meta span {
display: inline-flex;
align-items: center;
gap: 5px;
}
.article-meta .icon {
width: 13px;
height: 13px;
}
.article-content h3 {
font-family: var(--font-serif);
font-size: 1.35rem;
line-height: 1.25;
}
.article-content p {
color: var(--muted);
font-size: 0.86rem;
}
.faq-layout {
display: grid;
grid-template-columns: minmax(0, 1.4fr) minmax(280px, 0.6fr);
align-items: start;
gap: 50px;
}
.faq-list {
display: grid;
gap: 12px;
}
.faq-list details {
overflow: hidden;
border: 1px solid var(--line);
border-radius: 18px;
background: var(--paper);
}
.faq-list details[open] {
border-color: #b8cbb9;
box-shadow: 0 8px 25px rgba(23, 63, 58, 0.06);
}
.faq-list summary {
position: relative;
padding: 20px 56px 20px 22px;
color: var(--forest);
font-size: 0.93rem;
font-weight: 800;
cursor: pointer;
list-style: none;
}
.faq-list summary::-webkit-details-marker {
display: none;
}
.faq-list summary::after {
position: absolute;
top: 50%;
right: 22px;
width: 28px;
height: 28px;
display: grid;
place-items: center;
border-radius: 50%;
background: var(--sage);
color: var(--forest);
content: "+";
font-size: 1.1rem;
font-weight: 500;
line-height: 1;
transform: translateY(-50%);
transition: transform 0.2s ease;
}
.faq-list details[open] summary::after {
transform: translateY(-50%) rotate(45deg);
}
.faq-answer {
padding: 0 22px 21px;
color: var(--muted);
font-size: 0.87rem;
}
.help-card {
position: sticky;
top: 120px;
padding: 29px;
border-radius: var(--radius-lg);
background: var(--forest);
color: var(--white);
}
.help-card h3 {
color: var(--white);
font-family: var(--font-serif);
font-size: 1.55rem;
}
.help-card p {
color: rgba(255, 255, 255, 0.7);
font-size: 0.85rem;
}
.help-contact {
display: grid;
gap: 12px;
margin: 22px 0;
padding: 20px 0;
border-top: 1px solid rgba(255, 255, 255, 0.12);
border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}
.help-contact a {
display: flex;
align-items: center;
gap: 10px;
color: rgba(255, 255, 255, 0.86);
font-size: 0.78rem;
font-weight: 700;
}
.help-contact .icon {
color: var(--sun);
}
.newsletter-wrap {
padding: 0 0 104px;
background: var(--cream);
}
.newsletter {
position: relative;
overflow: hidden;
display: grid;
grid-template-columns: 1fr 0.9fr;
align-items: center;
gap: 55px;
padding: 52px 60px;
border-radius: var(--radius-xl);
background: var(--coral);
}
.newsletter::before,
.newsletter::after {
position: absolute;
border: 1px solid rgba(23, 63, 58, 0.13);
border-radius: 50%;
content: "";
}
.newsletter::before {
top: -130px;
right: -70px;
width: 310px;
height: 310px;
}
.newsletter::after {
bottom: -170px;
left: 44%;
width: 380px;
height: 380px;
}
.newsletter-copy,
.newsletter-form {
position: relative;
z-index: 1;
}
.newsletter h2 {
margin-bottom: 14px;
font-size: clamp(2.1rem, 3.7vw, 3.3rem);
}
.newsletter p {
max-width: 590px;
margin: 0;
color: rgba(23, 63, 58, 0.76);
}
.newsletter-form label {
display: block;
margin-bottom: 8px;
color: var(--forest);
font-size: 0.78rem;
font-weight: 800;
}
.newsletter-form-row {
display: flex;
gap: 10px;
}
.newsletter-form input[type="email"] {
width: 100%;
min-width: 0;
padding: 14px 16px;
border: 1px solid rgba(23, 63, 58, 0.18);
border-radius: 999px;
background: var(--white);
font-size: 0.86rem;
}
.newsletter-form input[type="email"]:focus {
border-color: var(--forest);
outline: 3px solid rgba(23, 63, 58, 0.16);
}
.newsletter-form small {
display: block;
margin-top: 10px;
color: rgba(23, 63, 58, 0.64);
font-size: 0.66rem;
}
.newsletter-success {
margin-top: 12px;
padding: 10px 13px;
border-radius: 10px;
background: rgba(255, 255, 255, 0.78);
color: var(--forest);
font-size: 0.78rem;
font-weight: 800;
}
.newsletter-success[hidden] {
display: none;
}
.site-footer {
padding: 76px 0 26px;
background: var(--forest);
color: var(--white);
}
.site-footer h3,
.site-footer h4 {
color: var(--white);
}
.footer-grid {
display: grid;
grid-template-columns: 1.35fr 0.8fr 0.8fr 1fr;
gap: 54px;
padding-bottom: 50px;
}
.footer-brand img {
width: 54px;
height: 54px;
margin-bottom: 18px;
border-radius: 15px;
}
.footer-brand h3 {
margin-bottom: 8px;
font-family: var(--font-serif);
font-size: 1.5rem;
}
.footer-brand p {
max-width: 310px;
color: rgba(255, 255, 255, 0.64);
font-size: 0.84rem;
}
.footer-column h4 {
margin-bottom: 17px;
font-size: 0.75rem;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.footer-links {
display: grid;
gap: 10px;
margin: 0;
padding: 0;
list-style: none;
}
.footer-links a {
color: rgba(255, 255, 255, 0.66);
font-size: 0.8rem;
transition: color 0.2s ease;
}
.footer-links a:hover {
color: var(--sun);
}
.footer-contact {
display: grid;
gap: 12px;
margin: 0;
padding: 0;
list-style: none;
}
.footer-contact li {
display: flex;
align-items: flex-start;
gap: 9px;
color: rgba(255, 255, 255, 0.66);
font-size: 0.78rem;
}
.footer-contact .icon {
margin-top: 3px;
color: var(--sun);
}
.social-links {
display: flex;
gap: 9px;
margin-top: 22px;
}
.social-links a {
width: 38px;
height: 38px;
display: grid;
place-items: center;
border: 1px solid rgba(255, 255, 255, 0.16);
border-radius: 11px;
color: rgba(255, 255, 255, 0.72);
transition: background 0.2s ease, color 0.2s ease;
}
.social-links a:hover {
background: var(--sun);
color: var(--forest);
}
.social-links .icon {
width: 17px;
height: 17px;
}
.footer-bottom {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
padding-top: 24px;
border-top: 1px solid rgba(255, 255, 255, 0.12);
color: rgba(255, 255, 255, 0.48);
font-size: 0.7rem;
}
.legal-links {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.legal-links a:hover {
color: var(--white);
}
@media (max-width: 1100px) {
.main-nav ul {
gap: 18px;
}
.main-nav a {
font-size: 0.8rem;
}
.hero-grid {
gap: 50px;
}
.guides-grid {
gap: 58px;
}
.footer-grid {
gap: 32px;
}
}
@media (max-width: 960px) {
.menu-toggle {
display: inline-flex;
}
.main-nav {
position: absolute;
top: 100%;
right: 20px;
left: 20px;
display: none;
padding: 14px;
border: 1px solid var(--line);
border-radius: 18px;
background: var(--white);
box-shadow: var(--shadow-lg);
}
.main-nav.is-open {
display: block;
}
.main-nav ul {
display: grid;
gap: 0;
}
.main-nav a {
display: block;
padding: 12px 14px;
border-radius: 10px;
}
.main-nav a:hover {
background: var(--sage);
}
.main-nav a::after {
display: none;
}
.hero-grid {
grid-template-columns: 1fr 0.82fr;
gap: 38px;
}
.hero-card {
right: -8px;
}
.topic-grid {
grid-template-columns: repeat(2, 1fr);
}
.topic-card {
min-height: 300px;
}
.guides-grid {
grid-template-columns: 0.85fr 1.15fr;
gap: 45px;
}
.guide-note {
right: -5px;
}
.tracker-grid {
grid-template-columns: 1fr;
}
.tracker-intro {
position: static;
}
.how-to {
grid-template-columns: repeat(3, 1fr);
}
.community-layout {
grid-template-columns: 1fr;
}
.community-promise {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px 30px;
}
.community-promise h3,
.community-promise > p {
grid-column: 1 / -1;
}
.testimonial-grid {
grid-template-columns: 1fr 1fr;
}
.testimonial-card:last-child {
grid-column: 1 / -1;
}
.blog-grid {
grid-template-columns: 1fr 1fr;
}
.article-card:last-child {
grid-column: 1 / -1;
display: grid;
grid-template-columns: 0.9fr 1.1fr;
}
.article-card:last-child .article-image {
height: 100%;
aspect-ratio: auto;
}
.footer-grid {
grid-template-columns: 1.3fr 1fr 1fr;
}
.footer-contact-column {
grid-column: 1 / -1;
}
}
@media (max-width: 760px) {
.container {
width: min(calc(100% - 32px), var(--container));
}
.section {
padding: 78px 0;
}
.announcement-inner {
justify-content: center;
text-align: center;
}
.announcement a {
display: none;
}
.brand-tagline {
display: none;
}
.hero {
padding: 62px 0 78px;
}
.hero-grid,
.guides-grid,
.health-grid,
.community-form-wrap,
.faq-layout,
.newsletter {
grid-template-columns: 1fr;
}
.hero-copy {
text-align: center;
}
.hero h1,
.hero-lead {
margin-inline: auto;
}
.hero-actions,
.hero-trust {
justify-content: center;
}
.hero-visual {
width: min(100%, 500px);
margin: 16px auto 0;
}
.stats-grid {
grid-template-columns: 1fr 1fr;
}
.stat:nth-child(2)::after {
display: none;
}
.stat:nth-child(-n + 2) {
border-bottom: 1px solid var(--line);
}
.guide-visual {
width: min(100%, 520px);
margin: 0 auto;
}
.how-to {
grid-template-columns: 1fr;
}
.tracker-card {
padding: 22px;
}
.stage-tabs {
overflow-x: auto;
}
.stage-tab {
min-width: 120px;
}
.health-head {
display: block;
}
.health-head .button {
margin-top: 24px;
}
.clinical-note {
display: block;
}
.clinical-note .button {
margin-top: 20px;
}
.activity-card:nth-child(n) {
grid-column: span 12;
grid-row: auto;
min-height: 0;
}
.activity-card:nth-child(1) {
min-height: 570px;
}
.activity-card:nth-child(1) .activity-image {
min-height: 350px;
}
.activity-card:not(:nth-child(1)) .activity-image {
height: 190px;
}
.community-promise {
display: block;
}
.testimonial-grid,
.blog-grid {
grid-template-columns: 1fr;
}
.testimonial-card:last-child,
.article-card:last-child {
grid-column: auto;
display: block;
}
.article-card:last-child .article-image {
height: auto;
aspect-ratio: 16 / 10;
}
.form-aside {
min-height: 380px;
}
.newsletter {
padding: 42px 28px;
}
.newsletter-form-row {
flex-direction: column;
}
.footer-grid {
grid-template-columns: 1fr 1fr;
}
.footer-brand,
.footer-contact-column {
grid-column: 1 / -1;
}
.footer-bottom {
align-items: flex-start;
flex-direction: column;
}
}
@media (max-width: 520px) {
.brand img {
width: 43px;
height: 43px;
border-radius: 13px;
}
.brand-name {
font-size: 1.12rem;
}
.hero h1 {
font-size: 2.7rem;
}
.hero-lead {
font-size: 1rem;
}
.hero-actions {
flex-direction: column;
}
.hero-actions .button {
width: 100%;
}
.hero-trust {
align-items: flex-start;
text-align: left;
}
.hero-visual {
padding-left: 0;
}
.hero-pill {
left: -5px;
}
.hero-card {
right: -5px;
width: 82%;
}
.stats-grid {
grid-template-columns: 1fr;
}
.stat {
padding: 20px;
}
.stat:not(:last-child)::after {
display: none;
}
.stat:not(:last-child) {
border-bottom: 1px solid var(--line);
}
.topic-grid {
grid-template-columns: 1fr;
}
.topic-card {
min-height: 280px;
}
.guide-visual {
padding-left: 10px;
}
.guide-note {
right: -3px;
width: 225px;
}
.pull-quote {
padding: 20px;
font-size: 1.08rem;
}
.tracker-card {
padding: 18px;
}
.stage-tabs {
margin-inline: -4px;
}
.stage-tab {
min-width: 108px;
padding-inline: 9px;
font-size: 0.7rem;
}
.tracker-actions {
align-items: stretch;
flex-direction: column;
}
.tracker-actions .button {
width: 100%;
}
.health-card {
min-height: 300px;
padding: 24px;
}
.circle-row {
grid-template-columns: 50px 1fr;
gap: 13px;
padding: 18px;
}
.circle-date {
width: 48px;
height: 48px;
border-radius: 13px;
font-size: 0.66rem;
}
.circle-row .open-badge {
display: none;
}
.form-panel,
.form-aside {
padding: 27px 22px;
}
.form-two-column {
grid-template-columns: 1fr;
gap: 0;
}
.newsletter {
padding: 36px 22px;
}
.footer-grid {
grid-template-columns: 1fr;
}
.footer-brand,
.footer-contact-column {
grid-column: auto;
}
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
*,
*::before,
*::after {
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
}
}
</style>
</head>
<body>
<svg class="svg-sprite" aria-hidden="true" style="position:absolute;width:0;height:0;overflow:hidden">
<symbol id="icon-arrow" viewBox="0 0 24 24"><path d="M5 12h14M13 6l6 6-6 6"/></symbol>
<symbol id="icon-check" viewBox="0 0 24 24"><path d="m5 12 4 4L19 6"/></symbol>
<symbol id="icon-heart" viewBox="0 0 24 24"><path d="M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1.1-1.1a5.5 5.5 0 0 0-7.8 7.8l1.1 1.1L12 21l7.8-7.5 1.1-1.1a5.5 5.5 0 0 0-.1-7.8Z"/></symbol>
<symbol id="icon-moon" viewBox="0 0 24 24"><path d="M21 12.8A8.5 8.5 0 1 1 11.2 3 6.6 6.6 0 0 0 21 12.8Z"/></symbol>
<symbol id="icon-food" viewBox="0 0 24 24"><path d="M3 2v7a3 3 0 0 0 6 0V2M6 2v20M18 2c-2 3-3 6-3 10h4M19 2v20"/></symbol>
<symbol id="icon-users" viewBox="0 0 24 24"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75"/></symbol>
<symbol id="icon-sparkle" viewBox="0 0 24 24"><path d="m12 3 1.4 4.1L17.5 8.5l-4.1 1.4L12 14l-1.4-4.1-4.1-1.4 4.1-1.4L12 3ZM19 14l.8 2.2L22 17l-2.2.8L19 20l-.8-2.2L16 17l2.2-.8L19 14ZM5 13l.9 2.6L8.5 16l-2.6.9L5 19.5l-.9-2.6-2.6-.9 2.6-.4L5 13Z"/></symbol>
<symbol id="icon-shield" viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z"/><path d="m9 12 2 2 4-4"/></symbol>
<symbol id="icon-clock" viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></symbol>
<symbol id="icon-map" viewBox="0 0 24 24"><path d="M20 10c0 5-8 11-8 11S4 15 4 10a8 8 0 1 1 16 0Z"/><circle cx="12" cy="10" r="2.5"/></symbol>
<symbol id="icon-mail" viewBox="0 0 24 24"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></symbol>
<symbol id="icon-phone" viewBox="0 0 24 24"><path d="M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.4 19.4 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 2 .7 2.9a2 2 0 0 1-.5 2.1L8.1 9.9a16 16 0 0 0 6 6l1.2-1.2a2 2 0 0 1 2.1-.5c.9.3 1.9.6 2.9.7a2 2 0 0 1 1.7 2Z"/></symbol>
<symbol id="icon-leaf" viewBox="0 0 24 24"><path d="M11 20A7 7 0 0 1 9.8 6.1C15.5 4.8 19 2 19 2c1 8.4-2.7 15.7-8 18Z"/><path d="M2 21c0-3 1.9-5.6 5.1-6.9"/></symbol>
<symbol id="icon-video" viewBox="0 0 24 24"><rect x="3" y="5" width="14" height="14" rx="2"/><path d="m17 10 4-2v8l-4-2"/></symbol>
<symbol id="icon-instagram" viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="5"/><circle cx="12" cy="12" r="4"/><circle cx="17.5" cy="6.5" r=".7" fill="currentColor" stroke="none"/></symbol>
<symbol id="icon-facebook" viewBox="0 0 24 24"><path d="M14 8h3V4h-3a5 5 0 0 0-5 5v3H6v4h3v6h4v-6h3l1-4h-4V9a1 1 0 0 1 1-1Z"/></symbol>
<symbol id="icon-pinterest" viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M9.5 20c.7-1.7 1-2.8 1.3-4.2-.9-1.5.1-4.5 1.7-4.5 1.3 0 1.7 1 1.7 2.2 0 1.3-.8 3.2-1.3 4.8-.4 1.4.7 2.5 2.1 2.5 2.5 0 4.2-2.5 4.2-5.8 0-3-2.2-5.2-5.3-5.2-3.6 0-5.7 2.7-5.7 5.5 0 1 .4 2.1 1.1 2.7"/></symbol>
<symbol id="icon-youtube" viewBox="0 0 24 24"><path d="M21.6 7.2a2.8 2.8 0 0 0-2-2C17.9 4.7 12 4.7 12 4.7s-5.9 0-7.6.5a2.8 2.8 0 0 0-2 2A29 29 0 0 0 2 12a29 29 0 0 0 .4 4.8 2.8 2.8 0 0 0 2 2c1.7.5 7.6.5 7.6.5s5.9 0 7.6-.5a2.8 2.8 0 0 0 2-2A29 29 0 0 0 22 12a29 29 0 0 0-.4-4.8Z"/><path d="m10 15 5-3-5-3Z"/></symbol>
</svg>
<a class="skip-link" href="#main-content">Skip to main content</a>
<div class="announcement">
<div class="container announcement-inner">
<p><span class="announcement-tag">New</span>The Sunday Reset: a 15-minute family planning toolkit</p>
<a href="#newsletter">Get the free guide <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
</div>
<header class="site-header" id="site-header">
<div class="container nav-shell">
<a class="brand" href="#top" aria-label="Root and Rise home">
<img src="https://placehold.co/96x96/173F3A/FFF8E8?text=R%26R&font=poppins" alt="Root & Rise logo" width="50" height="50">
<span class="brand-copy">
<span class="brand-name">Root & Rise</span>
<span class="brand-tagline">Steady guidance for growing families</span>
</span>
</a>
<button class="menu-toggle" type="button" aria-expanded="false" aria-controls="primary-navigation" aria-label="Open navigation menu">
<span></span>
</button>
<nav class="main-nav" id="primary-navigation" aria-label="Primary navigation">
<ul>
<li><a href="#start">Parenting Guides</a></li>
<li><a href="#health">Health</a></li>
<li><a href="#family-fun">Family Fun</a></li>
<li><a href="#support">Support Groups</a></li>
<li><a href="#blog">Blog</a></li>
<li><a href="#resources">Resources</a></li>
</ul>
</nav>
</div>
</header>
<main id="main-content">
<section class="hero" id="top">
<div class="container hero-grid">
<div class="hero-copy">
<span class="eyebrow">Care that feels human</span>
<h1>Parenting is a practice, <em>not a perfect performance.</em></h1>
<p class="hero-lead">Root & Rise brings together practical parenting advice, family health guidance, and real support for everyday moments—from first feeds to sibling conflict. Start with one small next step, without the guilt spiral.</p>
<div class="hero-actions">
<a class="button button--primary" href="#start">Find your next step <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
<a class="button button--outline" href="#community-form">Talk to a parent</a>
</div>
<div class="hero-trust">
<div class="trust-avatars" aria-hidden="true">
<img src="https://i.pravatar.cc/80?u=maya-parent" alt="" width="36" height="36">
<img src="https://i.pravatar.cc/80?u=daniel-dad" alt="" width="36" height="36">
<img src="https://i.pravatar.cc/80?u=nia-caregiver" alt="" width="36" height="36">
</div>
<span>Expert-reviewed, parent-grounded, and always judgment-free.</span>
</div>
</div>
<div class="hero-visual">
<div class="hero-pill"><svg class="icon" aria-hidden="true"><use href="#icon-shield"></use></svg> 18,000+ families supported</div>
<div class="hero-image-wrap">
<img src="https://picsum.photos/seed/rootandrise-family/900/1100" alt="Parent and child sharing a warm moment together" width="900" height="1100" fetchpriority="high">
</div>
<div class="hero-card">
<span class="hero-card-label"><svg class="icon" aria-hidden="true"><use href="#icon-sparkle"></use></svg> Today’s small win</span>
<p>Ask “What got in the way?” before asking “Why did you do that?”</p>
</div>
</div>
</div>
</section>
<section class="stats-bar" aria-label="Root and Rise community statistics">
<div class="container stats-grid">
<div class="stat">
<strong>18k+</strong>
<span>weekly family readers</span>
</div>
<div class="stat">
<strong>120+</strong>
<span>practical parenting guides</span>
</div>
<div class="stat">
<strong>38</strong>
<span>moderated support circles</span>
</div>
<div class="stat">
<strong>4.9/5</strong>
<span>helpful-content rating</span>
</div>
</div>
</section>
<section class="section" id="start">
<div class="container">
<div class="section-head">
<span class="eyebrow">Start where you are</span>
<h2>Help for the moment in front of you</h2>
<p>There is no single right way to raise a child. Choose the topic that feels most useful today, and find clear next steps you can try tonight—not someday.</p>
</div>
<div class="topic-grid">
<article class="topic-card">
<span class="topic-icon"><svg class="icon" aria-hidden="true"><use href="#icon-heart"></use></svg></span>
<h3>Big feelings & behavior</h3>
<p>Understand the need beneath the behavior, set kind and clear limits, and use positive reinforcement without fear or shame.</p>
<a class="text-link" href="#guides">Explore behavior guides <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</article>
<article class="topic-card">
<span class="topic-icon"><svg class="icon" aria-hidden="true"><use href="#icon-moon"></use></svg></span>
<h3>Sleep & routines</h3>
<p>Build predictable rhythms that protect rest, reduce transitions, and make mornings feel less like a race against the clock.</p>
<a class="text-link" href="#health">Read the sleep library <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</article>
<article class="topic-card">
<span class="topic-icon"><svg class="icon" aria-hidden="true"><use href="#icon-food"></use></svg></span>
<h3>Feeding & nutrition</h3>
<p>Get grounded guidance for starting solids, picky eating, responsive feeding, and making family meals feel less pressured.</p>
<a class="text-link" href="#health">Browse nutrition tips <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</article>
<article class="topic-card">
<span class="topic-icon"><svg class="icon" aria-hidden="true"><use href="#icon-users"></use></svg></span>
<h3>Connection & social skills</h3>
<p>Support attachment, sibling relationships, cooperation, empathy, and the social skills children practice every day.</p>
<a class="text-link" href="#guides">See connection guides <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</article>
</div>
</div>
</section>
<section class="section guides-section" id="guides">
<div class="container guides-grid">
<div class="guide-visual">
<img src="https://picsum.photos/seed/rootandrise-play/900/980" alt="Caregiver and child playing together at home" width="900" height="980" loading="lazy">
<div class="guide-note">
<strong>Try this today</strong>
<p>Describe what your child did without adding “always” or “never.” It turns correction into a conversation.</p>
</div>
</div>
<div class="guides-copy">
<span class="eyebrow">The Root & Rise approach</span>
<h2>Connection first. Progress follows.</h2>
<p>Responsive parenting is not about meeting every demand or scheduling every minute. It is about building a secure relationship in which children can practice independence, frustration, empathy, and repair. When a caregiver is connected and calm, the child has more room to learn.</p>
<p>Our guidance pairs attachment-informed principles with realistic tools: clear boundaries, positive reinforcement, descriptive praise, and routines that flex with family life. The goal is not a flawless child. It is a child who knows how to return to connection after conflict.</p>
<ul class="practice-list">
<li>
<span class="practice-check"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span>
<span><strong>Respond to the need, then address the behavior.</strong><span>Connect first when you can; repair and limit when necessary.</span></span>
</li>
<li>
<span class="practice-check"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span>
<span><strong>Use positive reinforcement, not comparison.</strong><span>Notice effort, strategy, kindness, and progress instead of pushing fear of failure.</span></span>
</li>
<li>
<span class="practice-check"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span>
<span><strong>Make social skills visible.</strong><span>Name emotions, narrate choices, and practice turn-taking through everyday play.</span></span>
</li>
</ul>
<blockquote class="pull-quote">“The goal is not a child without big feelings. It is a child who learns they can have them—and still repair.”</blockquote>
<a class="button button--primary" href="#blog">Browse all parenting guides <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
</div>
</section>
<section class="section tracker-section" id="milestones">
<div class="container">
<div class="section-head">
<span class="eyebrow">Milestone check-in</span>
<h2>Know what to celebrate next</h2>
<p>Use this simple board to notice new skills, talk with your child’s care team, and focus on progress rather than comparison.</p>
</div>
<div class="tracker-grid">
<aside class="tracker-intro">
<h3>A calmer way to notice development</h3>
<p>Children reach developmental milestones at their own pace. A checklist can help you notice patterns, but it cannot tell you whether a child needs an evaluation.</p>
<div class="how-to">
<div class="how-step">
<span class="how-step-number">1</span>
<div><strong>Choose an age band</strong><p>Use the range that best reflects your child right now.</p></div>
</div>
<div class="how-step">
<span class="how-step-number">2</span>
<div><strong>Notice what is happening</strong><p>Check items you have observed, not milestones you feel pressured to achieve.</p></div>
</div>
<div class="how-step">
<span class="how-step-number">3</span>
<div><strong>Keep the conversation open</strong><p>Share observations with your pediatrician or care team when needed.</p></div>
</div>
</div>
<div class="safety-note">
<strong>A quick but important note:</strong> this tracker is educational and is not a diagnostic or screening tool. If you have concerns about movement, communication, hearing, behavior, or development, contact your child’s healthcare professional.
</div>
</aside>
<div class="tracker-card">
<div class="stage-tabs" role="tablist" aria-label="Developmental milestone age ranges">
<button class="stage-tab" id="tab-baby" type="button" role="tab" aria-selected="true" aria-controls="panel-baby" data-stage="baby">0–12 months</button>
<button class="stage-tab" id="tab-toddler" type="button" role="tab" aria-selected="false" aria-controls="panel-toddler" data-stage="toddler" tabindex="-1">1–2 years</button>
<button class="stage-tab" id="tab-preschool" type="button" role="tab" aria-selected="false" aria-controls="panel-preschool" data-stage="preschool" tabindex="-1">3–5 years</button>
</div>
<div class="progress-header">
<strong id="progress-label">Your check-in</strong>
<span id="progress-text" aria-live="polite">0 of 4 noticed</span>
</div>
<div class="progress-track" id="milestone-progress" role="progressbar" aria-label="Milestones noticed" aria-valuemin="0" aria-valuemax="4" aria-valuenow="0">
<div class="progress-bar" id="progress-bar"></div>
</div>
<fieldset class="milestone-panel" id="panel-baby" role="tabpanel" aria-labelledby="tab-baby" data-panel="baby">
<legend>Early noticing · 0–12 months</legend>
<div class="checklist">
<label class="check-item">
<input type="checkbox" data-milestone-stage="baby" value="Turns toward familiar sounds or voices">
<span><strong>Turns toward familiar sounds or voices</strong><small>Responds to a caregiver’s voice or familiar environmental sound.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="baby" value="Reacts when a caregiver leaves and returns">
<span><strong>Reacts when a caregiver leaves and returns</strong><small>Looks back, reaches, cries, brightens, or otherwise shows recognition.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="baby" value="Explores objects with hands and mouth">
<span><strong>Explores objects with hands and mouth</strong><small>Grasps, shakes, mouths, or studies familiar objects during play.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="baby" value="Shows interest in faces">
<span><strong>Shows interest in faces</strong><small>Watches, smiles at, imitates, or reaches toward familiar people.</small></span>
</label>
</div>
</fieldset>
<fieldset class="milestone-panel" id="panel-toddler" role="tabpanel" aria-labelledby="tab-toddler" data-panel="toddler" hidden>
<legend>Growing independence · 1–2 years</legend>
<div class="checklist">
<label class="check-item">
<input type="checkbox" data-milestone-stage="toddler" value="Uses a few words to label familiar things">
<span><strong>Uses a few words to label familiar things</strong><small>Uses words or sounds for people, objects, or actions.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="toddler" value="Points or shows to share attention">
<span><strong>Points or shows to share attention</strong><small>Directs your attention toward an interesting thing or event.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="toddler" value="Copies simple actions">
<span><strong>Copies simple actions</strong><small>Imitates everyday actions such as clapping, stirring, or pretending.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="toddler" value="Takes a few steps or climbs with support">
<span><strong>Takes a few steps or climbs with support</strong><small>Moves around using furniture, hands, or another stable support.</small></span>
</label>
</div>
</fieldset>
<fieldset class="milestone-panel" id="panel-preschool" role="tabpanel" aria-labelledby="tab-preschool" data-panel="preschool" hidden>
<legend>Social learning · 3–5 years</legend>
<div class="checklist">
<label class="check-item">
<input type="checkbox" data-milestone-stage="preschool" value="Tells a short story about something that happened">
<span><strong>Tells a short story about something that happened</strong><small>Shares an event, idea, or pretend narrative in sequence.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="preschool" value="Takes turns in simple games">
<span><strong>Takes turns in simple games</strong><small>Waits, follows a turn, and participates with another person.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="preschool" value="Names some emotions and shows strategies">
<span><strong>Names some emotions and shows strategies</strong><small>Talks about feelings or uses a calming strategy with support.</small></span>
</label>
<label class="check-item">
<input type="checkbox" data-milestone-stage="preschool" value="Completes a simple two-step task">
<span><strong>Completes a simple two-step task</strong><small>Remembers and completes two parts of a familiar routine.</small></span>
</label>
</div>
</fieldset>
<div class="tracker-actions">
<span class="saved-note"><svg class="icon" aria-hidden="true"><use href="#icon-shield"></use></svg> Saved automatically on this device</span>
<div>
<button class="tracker-button" id="copy-summary" type="button">Copy check-in</button>
<button class="tracker-button" id="clear-stage" type="button">Clear stage</button>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="section health-section" id="health">
<div class="container">
<div class="health-head">
<div>
<span class="eyebrow">Family health</span>
<h2>Health guidance, translated for humans</h2>
<p>Reliable information about sleep, nutrition, development, and everyday care—reviewed by professionals and written for tired, busy families.</p>
</div>
<a class="button button--coral" href="#community-form">Ask a health question <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
<div class="health-grid">
<article class="health-card">
<span class="health-card-number">01 · REST</span>
<h3>Sleep & daily rhythms</h3>
<p>Learn how to prepare for naps and bedtime, adjust as your child’s sleep changes, and protect caregiver rest. Practical routines can support regulation without making every day rigid.</p>
<a class="text-link" href="#blog">Explore sleep guidance <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</article>
<article class="health-card">
<span class="health-card-number">02 · NOURISH</span>
<h3>Food & family nutrition</h3>
<p>Find responsive ways to introduce new foods, navigate picky phases, and reduce mealtime pressure. The aim is a safe, balanced relationship with food—not a “perfect” plate.</p>
<a class="text-link" href="#blog">Read nutrition guides <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</article>
<article class="health-card">
<span class="health-card-number">03 · GROW</span>
<h3>Child development</h3>
<p>Understand age-appropriate behavior, communication, motor skills, and social milestones. Learn which questions to track and when to raise them with a healthcare professional.</p>
<a class="text-link" href="#milestones">Open milestone check-in <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</article>
</div>
<div class="clinical-note">
<div class="review-team">
<div class="trust-avatars" aria-hidden="true">
<img src="https://i.pravatar.cc/100?u=dr-lena-pediatrician" alt="" width="48" height="48">
<img src="https://i.pravatar.cc/100?u=dr-sam-therapist" alt="" width="48" height="48">
<img src="https://i.pravatar.cc/100?u=jamie-dietitian" alt="" width="48" height="48">
</div>
<div>
<strong>Clinically reviewed. Written with care.</strong>
<span>Pediatric, nutrition, and child-development professionals review our health library.</span>
</div>
</div>
<a class="button button--light" href="#resources">Meet the review team <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
</div>
</section>
<section class="section section--white" id="family-fun">
<div class="container">
<div class="section-head">
<span class="eyebrow">Family fun</span>
<h2>Make room for the memories</h2>
<p>The best family traditions do not need special supplies or perfect plans. Try these low-pressure ideas for connection, curiosity, and a little healthy chaos.</p>
</div>
<div class="activity-grid">
<article class="activity-card">
<div class="activity-image">
<img src="https://placehold.co/900x900/F4CC70/173F3A?text=The%20Story%20Swap&font=playfair%20display" alt="Illustrated placeholder for the Story Swap family activity" width="900" height="900" loading="lazy">
<span class="activity-tag">20 minutes</span>
</div>
<div class="activity-content">
<h3>The five-minute story swap</h3>
<p>Each person adds one sentence to a story, taking turns so no one gets stuck. It builds language, flexible thinking, and lots of silly plot twists.</p>
<a class="text-link" href="#community-form">Try it tonight <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
</article>
<article class="activity-card">
<div class="activity-image">
<img src="https://placehold.co/800x450/DFEBEF/173F3A?text=Kitchen%20Confidence&font=poppins" alt="Illustrated placeholder for Kitchen Confidence activity" width="800" height="450" loading="lazy">
<span class="activity-tag">No-cook</span>
</div>
<div class="activity-content">
<h3>Kitchen confidence</h3>
<p>Let your child wash, tear, pour, and arrange. Participation builds motor skills and confidence long before a perfectly square sandwich.</p>
</div>
</article>
<article class="activity-card">
<div class="activity-image">
<img src="https://placehold.co/800x450/E4EEE3/173F3A?text=Neighborhood%20Quest&font=poppins" alt="Illustrated placeholder for Neighborhood Quest activity" width="800" height="450" loading="lazy">
<span class="activity-tag">Outdoor</span>
</div>
<div class="activity-content">
<h3>Neighborhood treasure quest</h3>
<p>Look for three colors, two kinds of bark, and one friendly dog. Movement, noticing, and shared curiosity make the walk feel like play.</p>
</div>
</article>
<article class="activity-card">
<div class="activity-image">
<img src="https://picsum.photos/seed/rootandrise-science/900/560" alt="Family science activity materials on a table" width="900" height="560" loading="lazy">
<span class="activity-tag">Curiosity</span>
</div>
<div class="activity-content">
<h3>Tiny science lab</h3>
<p>Explore baking soda, vinegar, colored ice, and safe water-play experiments. Ask open questions, let the mess happen, and celebrate a surprising result together.</p>
<a class="text-link" href="#blog">See more family activities <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
</article>
</div>
</div>
</section>
<section class="section section--sage" id="support">
<div class="container">
<div class="section-head">
<span class="eyebrow">Support groups</span>
<h2>You are not meant to figure it out alone</h2>
<p>Join small, moderated circles with parents who understand the season you are in. Share what is true, listen without judgment, and leave with a clearer next step.</p>
</div>
<div class="community-layout">
<div class="circle-list">
<article class="circle-row">
<div class="circle-date">Tue<br>7 PM</div>
<div>
<h3>New Parents Circle</h3>
<p>A gentle online space for sleep, feeding, and the tender chaos of the first year.</p>
<div class="circle-meta">
<span><svg class="icon" aria-hidden="true"><use href="#icon-video"></use></svg> Online</span>
<span><svg class="icon" aria-hidden="true"><use href="#icon-users"></use></svg> 18 members</span>
</div>
</div>
<span class="open-badge">Open</span>
</article>
<article class="circle-row">
<div class="circle-date">Thu<br>6:30 PM</div>
<div>
<h3>Calm Home Lab</h3>
<p>Build realistic routines and practice co-regulation with a certified parenting facilitator.</p>
<div class="circle-meta">
<span><svg class="icon" aria-hidden="true"><use href="#icon-map"></use></svg> Portland + virtual</span>
<span><svg class="icon" aria-hidden="true"><use href="#icon-clock"></use></svg> 8 weeks</span>
</div>
</div>
<span class="open-badge">Open</span>
</article>
<article class="circle-row">
<div class="circle-date">Sat<br>10 AM</div>
<div>
<h3>Feeding Together</h3>
<p>Peer support for starting solids, expanding preferences, and making mealtimes less tense.</p>
<div class="circle-meta">
<span><svg class="icon" aria-hidden="true"><use href="#icon-video"></use></svg> Online</span>
<span><svg class="icon" aria-hidden="true"><use href="#icon-users"></use></svg> 11 members</span>
</div>
</div>
<span class="open-badge">Open</span>
</article>
</div>
<aside class="community-promise">
<h3>Support without the side-eye</h3>
<p>Our circles are moderated, confidential, and grounded in curiosity—not comparison. Come as you are.</p>
<ul class="promise-list">
<li><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg><span>Facilitated by trained peer moderators</span></li>
<li><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg><span>Clear boundaries against judgment and misinformation</span></li>
<li><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg><span>Option to participate by voice, chat, or anonymously</span></li>
</ul>
<a class="button button--coral" href="#community-form">Find a support circle <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</aside>
</div>
<div class="testimonial-grid">
<article class="testimonial-card">
<span class="quote-mark" aria-hidden="true">“</span>
<blockquote>I thought every other parent had the calm routine I did not. Here, people talked about the same 5:30 a.m. chaos and shared ideas without making me feel behind.</blockquote>
<div class="testimonial-person">
<img src="https://i.pravatar.cc/100?u=maya-parent" alt="Maya, parent of a two-year-old" width="45" height="45" loading="lazy">
<div><strong>Maya R.</strong><span>Parent of a two-year-old</span></div>
</div>
</article>
<article class="testimonial-card">
<span class="quote-mark" aria-hidden="true">“</span>
<blockquote>The milestone tracker helped me stop comparing and start noticing. I took my notes to our pediatrician and felt prepared instead of worried.</blockquote>
<div class="testimonial-person">
<img src="https://i.pravatar.cc/100?u=jamie-parent" alt="Jamie, parent of a four-year-old" width="45" height="45" loading="lazy">
<div><strong>Jamie L.</strong><span>Parent of a four-year-old</span></div>
</div>
</article>
<article class="testimonial-card">
<span class="quote-mark" aria-hidden="true">“</span>
<blockquote>I came for a bedtime guide and stayed for the community. The positive reinforcement articles gave me language I could actually use in the moment.</blockquote>
<div class="testimonial-person">
<img src="https://i.pravatar.cc/100?u=elena-parent" alt="Elena, caregiver of three children" width="45" height="45" loading="lazy">
<div><strong>Elena T.</strong><span>Caregiver of three</span></div>
</div>
</article>
</div>
</div>
</section>
<section class="section community-form-section" id="community-form">
<div class="container">
<div class="community-form-wrap">
<div class="form-panel">
<span class="eyebrow">Community desk</span>
<h3>Ask a question or share your story</h3>
<p>Whether you need a practical next step or simply want to be heard, this is a safe place to begin. A trained community host will review your message.</p>
<form id="community-form-element">
<div class="form-success" id="community-success" role="status" tabindex="-1" hidden>Thank you—your message has been received. A community host will respond within two business days.</div>
<fieldset class="form-field">
<legend>What would you like to do?</legend>
<div class="purpose-options">
<label><input type="radio" name="purpose" value="question" checked><span>Ask a Question</span></label>
<label><input type="radio" name="purpose" value="story"><span>Share Your Story</span></label>
<label><input type="radio" name="purpose" value="group"><span>Find a Group</span></label>
</div>
</fieldset>
<div class="form-two-column">
<div class="form-field">
<label for="parent-name">Your name</label>
<input id="parent-name" name="name" type="text" autocomplete="name" placeholder="What should we call you?">
</div>
<div class="form-field">
<label for="parent-email">Email address</label>
<input id="parent-email" name="email" type="email" autocomplete="email" placeholder="you@example.com" required>
</div>
</div>
<div class="form-field">
<label for="parent-topic">What is this about?</label>
<select id="parent-topic" name="topic" required>
<option value="">Choose a topic</option>
<option>Everyday behavior & big feelings</option>
<option>Sleep & routines</option>
<option>Feeding & nutrition</option>
<option>Development & milestones</option>
<option>Family relationships</option>
<option>Finding a support group</option>
</select>
</div>
<div class="form-field">
<label for="parent-message">Your message</label>
<textarea id="parent-message" name="message" placeholder="Share only what feels comfortable. Please do not include medical records or identifying details about another person." required></textarea>
</div>
<label class="form-consent">
<input type="checkbox" name="consent" required>
<span>I understand that community guidance is educational and does not replace individualized medical, mental-health, or emergency care.</span>
</label>
<button class="button button--primary" type="submit">Send to the community <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></button>
</form>
</div>
<aside class="form-aside">
<h3>What happens next</h3>
<p>Every message is read with care. We aim to respond thoughtfully, not automatically.</p>
<div class="next-steps">
<div class="next-step"><span>1</span><div><strong>We check the topic</strong><p>Your message is routed to the right trained host or professional reviewer.</p></div></div>
<div class="next-step"><span>2</span><div><strong>You receive a thoughtful reply</strong><p>Expect a response within two business days, usually with practical resources.</p></div></div>
<div class="next-step"><span>3</span><div><strong>Your privacy comes first</strong><p>You can ask for an anonymous reply or choose not to publish your story.</p></div></div>
</div>
</aside>
</div>
</div>
</section>
<section class="section" id="blog">
<div class="container">
<div class="section-head">
<span class="eyebrow">From the blog</span>
<h2>Fresh ideas for real family life</h2>
<p>Clear, compassionate articles for the moments that happen between the textbook milestones.</p>
</div>
<div class="blog-grid">
<article class="article-card">
<div class="article-image">
<img src="https://picsum.photos/seed/rootandrise-meltdown/800/500" alt="Parent comforting a child after an emotional moment" width="800" height="500" loading="lazy">
<span class="article-category">Big Feelings</span>
</div>
<div class="article-content">
<div class="article-meta">
<span><svg class="icon" aria-hidden="true"><use href="#icon-clock"></use></svg> 7 min read</span>
<span>·</span>
<span>Reviewed</span>
</div>
<h3>The 20-minute repair after a big meltdown</h3>
<p>What to do when your child is flooded, why connection can coexist with a limit, and how to reopen the conversation once the nervous system has settled.</p>
<a class="text-link" href="#community-form">Read the guide <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
</article>
<article class="article-card">
<div class="article-image">
<img src="https://picsum.photos/seed/rootandrise-praise/800/500" alt="Parent and child practicing positive reinforcement" width="800" height="500" loading="lazy">
<span class="article-category">Parenting</span>
</div>
<div class="article-content">
<div class="article-meta">
<span><svg class="icon" aria-hidden="true"><use href="#icon-clock"></use></svg> 5 min read</span>
<span>·</span>
<span>Parent-tested</span>
</div>
<h3>How to praise effort without creating pressure</h3>
<p>Move beyond “good job” with specific, descriptive praise that recognizes strategy, persistence, and the kind of effort that supports social skills.</p>
<a class="text-link" href="#community-form">Read the guide <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
</article>
<article class="article-card">
<div class="article-image">
<img src="https://picsum.photos/seed/rootandrise-morning/800/500" alt="Family preparing a calm morning breakfast routine" width="800" height="500" loading="lazy">
<span class="article-category">Routines</span>
</div>
<div class="article-content">
<div class="article-meta">
<span><svg class="icon" aria-hidden="true"><use href="#icon-clock"></use></svg> 6 min read</span>
<span>·</span>
<span>Expert-reviewed</span>
</div>
<h3>A calmer morning routine for busy households</h3>
<p>Design a flexible rhythm with realistic time blocks, visible choices, and a simple reset for the mornings when everything goes sideways.</p>
<a class="text-link" href="#community-form">Read the guide <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</div>
</article>
</div>
</div>
</section>
<section class="section section--white" id="resources">
<div class="container faq-layout">
<div>
<div class="section-head" style="margin-left:0;text-align:left">
<span class="eyebrow">Helpful answers</span>
<h2>Questions parents ask us</h2>
<p>Quick clarity about our advice, community, and the role Root & Rise can play in your family’s life.</p>
</div>
<div class="faq-list">
<details open>
<summary>Where should I start if I feel overwhelmed?</summary>
<div class="faq-answer">Choose one small area rather than trying to solve your entire day. Begin with the support section, browse a topic that matches today’s pressure, or post your question to the community desk. A specific concern is much easier to work through than “How do I be a better parent?”</div>
</details>
<details>
<summary>Is the information on this site medical advice?</summary>
<div class="faq-answer">No. Our general education articles and trackers are not a substitute for diagnosis, treatment, or individualized care from a qualified healthcare professional. Our health content is reviewed by relevant professionals, but only your child’s care team can assess your child’s specific needs.</div>
</details>
<details>
<summary>How do the support groups work?</summary>
<div class="faq-answer">Most circles meet weekly online or in person and include a trained moderator. You can listen, speak, type, or remain anonymous. Membership is free for introductory sessions, and private memberships help keep our trained facilitators and community operations running.</div>
</details>
<details>
<summary>Can I share a story without using my name?</summary>
<div class="faq-answer">Yes. When you choose to share, you can select first name only, initials, or no name. We will never publish identifying details without permission, and moderators remove personally identifying information from public discussions.</div>
</details>
<details>
<summary>How do you choose and review experts?</summary>
<div class="faq-answer">Our clinical reviewers include licensed pediatric professionals, registered dietitians, child-development specialists, and trained family educators. Reviewers check the evidence, clarify medical boundaries, and help us keep recommendations practical, inclusive, and aligned with current best practices.</div>
</details>
<details>
<summary>What if my family needs urgent or crisis support?</summary>
<div class="faq-answer">Root & Rise is not an emergency service and cannot provide immediate crisis care. If a child or family member is in immediate danger, contact local emergency services or a crisis center. In the United States, call or text 988 for the Suicide & Crisis Lifeline; outside the U.S., use your local crisis line or emergency number.</div>
</details>
</div>
</div>
<aside class="help-card">
<span class="eyebrow" style="color:var(--sun)">Need a human?</span>
<h3>A caring person is one message away</h3>
<p>Not sure where to post? Send us your question and our community team will point you toward the best resource.</p>
<div class="help-contact">
<a href="mailto:hello@rootandrise.family"><svg class="icon" aria-hidden="true"><use href="#icon-mail"></use></svg> hello@rootandrise.family</a>
<a href="tel:+14155550148"><svg class="icon" aria-hidden="true"><use href="#icon-phone"></use></svg> +1 (415) 555-0148</a>
<span><svg class="icon" aria-hidden="true"><use href="#icon-clock"></use></svg> Replies within two business days</span>
</div>
<a class="button button--coral" href="#community-form">Get Help <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></a>
</aside>
</div>
</section>
<section class="newsletter-wrap" id="newsletter">
<div class="container">
<div class="newsletter">
<div class="newsletter-copy">
<span class="eyebrow" style="color:var(--forest)">The Sunday Reset</span>
<h2>A calmer inbox, once a week</h2>
<p>One practical idea, one family activity, and one thing worth noticing from your week. No fear-based advice. No parenting guilt. Just a thoughtful reset.</p>
</div>
<form class="newsletter-form" id="newsletter-form">
<label for="newsletter-email">Your email address</label>
<div class="newsletter-form-row">
<input id="newsletter-email" name="email" type="email" autocomplete="email" placeholder="you@example.com" required>
<button class="button button--primary" type="submit">Join the list <svg class="icon" aria-hidden="true"><use href="#icon-arrow"></use></svg></button>
</div>
<small>By subscribing, you agree to receive our weekly email. Unsubscribe anytime. Read our <a href="/privacy" style="text-decoration:underline">privacy policy</a>.</small>
<div class="newsletter-success" id="newsletter-success" role="status" tabindex="-1" hidden>You’re on the list! Look for The Sunday Reset in your inbox this weekend.</div>
</form>
</div>
</div>
</section>
</main>
<footer class="site-footer">
<div class="container">
<div class="footer-grid">
<div class="footer-brand">
<img src="https://placehold.co/96x96/FFF8E8/173F3A?text=R%26R&font=poppins" alt="Root & Rise logo" width="54" height="54" loading="lazy">
<h3>Root & Rise</h3>
<p>Steady guidance for growing families. Practical ideas, professional review, and a community that understands parenting is a lot of work.</p>
<div class="social-links" aria-label="Social media links">
<a href="https://www.instagram.com/" target="_blank" rel="noopener noreferrer" aria-label="Root and Rise on Instagram"><svg class="icon" aria-hidden="true"><use href="#icon-instagram"></use></svg></a>
<a href="https://www.facebook.com/" target="_blank" rel="noopener noreferrer" aria-label="Root and Rise on Facebook"><svg class="icon" aria-hidden="true"><use href="#icon-facebook"></use></svg></a>
<a href="https://www.pinterest.com/" target="_blank" rel="noopener noreferrer" aria-label="Root and Rise on Pinterest"><svg class="icon" aria-hidden="true"><use href="#icon-pinterest"></use></svg></a>
<a href="https://www.youtube.com/" target="_blank" rel="noopener noreferrer" aria-label="Root and Rise on YouTube"><svg class="icon" aria-hidden="true"><use href="#icon-youtube"></use></svg></a>
</div>
</div>
<div class="footer-column">
<h4>Explore</h4>
<ul class="footer-links">
<li><a href="#start">Parenting Guides</a></li>
<li><a href="#health">Family Health</a></li>
<li><a href="#family-fun">Family Fun</a></li>
<li><a href="#support">Support Groups</a></li>
<li><a href="#blog">Blog</a></li>
</ul>
</div>
<div class="footer-column">
<h4>Company</h4>
<ul class="footer-links">
<li><a href="#community-form">About Us</a></li>
<li><a href="#community-form">Our Experts</a></li>
<li><a href="mailto:hello@rootandrise.family">Contact</a></li>
<li><a href="#newsletter">Newsletter</a></li>
<li><a href="#community-form">Contribute a Story</a></li>
</ul>
</div>
<div class="footer-column footer-contact-column">
<h4>Get in touch</h4>
<ul class="footer-contact">
<li><svg class="icon" aria-hidden="true"><use href="#icon-mail"></use></svg><a href="mailto:hello@rootandrise.family">hello@rootandrise.family</a></li>
<li><svg class="icon" aria-hidden="true"><use href="#icon-phone"></use></svg><a href="tel:+14155550148">+1 (415) 555-0148</a></li>
<li><svg class="icon" aria-hidden="true"><use href="#icon-map"></use></svg><span>128 Willow Lane<br>Portland, OR 97205</span></li>
<li><svg class="icon" aria-hidden="true"><use href="#icon-clock"></use></svg><span>Monday–Friday, 9 AM–5 PM PT</span></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>© <span id="current-year">2025</span> Root & Rise Family Co. All rights reserved. Educational content is not a substitute for professional care.</p>
<nav class="legal-links" aria-label="Legal links">
<a href="/privacy">Privacy</a>
<a href="/terms">Terms</a>
<a href="/accessibility">Accessibility</a>
<a href="#top">Back to top ↑</a>
</nav>
</div>
</div>
</footer>
<script>
(() => {
const header = document.getElementById("site-header");
const menuToggle = document.querySelector(".menu-toggle");
const navigation = document.getElementById("primary-navigation");
const updateHeader = () => {
header.classList.toggle("is-scrolled", window.scrollY > 12);
};
updateHeader();
window.addEventListener("scroll", updateHeader, { passive: true });
const closeMenu = () => {
navigation.classList.remove("is-open");
menuToggle.setAttribute("aria-expanded", "false");
menuToggle.setAttribute("aria-label", "Open navigation menu");
};
menuToggle.addEventListener("click", () => {
const isOpen = menuToggle.getAttribute("aria-expanded") === "true";
navigation.classList.toggle("is-open", !isOpen);
menuToggle.setAttribute("aria-expanded", String(!isOpen));
menuToggle.setAttribute("aria-label", isOpen ? "Open navigation menu" : "Close navigation menu");
});
navigation.querySelectorAll("a").forEach((link) => {
link.addEventListener("click", closeMenu);
});
document.addEventListener("keydown", (event) => {
if (event.key === "Escape") {
closeMenu();
menuToggle.focus();
}
});
const storageKey = "rootAndRiseMilestones";
const stageLabels = {
baby: "0–12 months",
toddler: "1–2 years",
preschool: "3–5 years"
};
let savedMilestones = {};
try {
savedMilestones = JSON.parse(localStorage.getItem(storageKey)) || {};
} catch (error) {
savedMilestones = {};
}
const tabs = Array.from(document.querySelectorAll("[data-stage]"));
const panels = Array.from(document.querySelectorAll("[data-panel]"));
const checkboxes = Array.from(document.querySelectorAll("[data-milestone-stage]"));
const progressTrack = document.getElementById("milestone-progress");
const progressBar = document.getElementById("progress-bar");
const progressText = document.getElementById("progress-text");
const progressLabel = document.getElementById("progress-label");
const copyButton = document.getElementById("copy-summary");
const copyButtonLabel = copyButton ? copyButton.childNodes[0] : null;
const clearButton = document.getElementById("clear-stage");
let activeStage = "baby";
const persistMilestones = () => {
try {
localStorage.setItem(storageKey, JSON.stringify(savedMilestones));
} catch (error) {
return;
}
};
const updateProgress = (stage) => {
const stageChecks = checkboxes.filter((input) => input.dataset.milestoneStage === stage);
const checked = stageChecks.filter((input) => input.checked);
const percent = stageChecks.length ? (checked.length / stageChecks.length) * 100 : 0;
progressBar.style.width = `${percent}%`;
progressTrack.setAttribute("aria-valuemax", String(stageChecks.length));
progressTrack.setAttribute("aria-valuenow", String(checked.length));
progressText.textContent = `${checked.length} of ${stageChecks.length} noticed`;
progressLabel.textContent = `${stageLabels[stage]} check-in`;
};
const activateStage = (stage, focusTab = false) => {
activeStage = stage;
tabs.forEach((tab) => {
const isActive = tab.dataset.stage === stage;
tab.setAttribute("aria-selected", String(isActive));
tab.tabIndex = isActive ? 0 : -1;
if (isActive && focusTab) {
tab.focus();
}
});
panels.forEach((panel) => {
panel.hidden = panel.dataset.panel !== stage;
});
updateProgress(stage);
};
checkboxes.forEach((input) => {
const stage = input.dataset.milestoneStage;
const stageItems = Array.isArray(savedMilestones[stage]) ? savedMilestones[stage] : [];
input.checked = stageItems.includes(input.value);
input.addEventListener("change", () => {
const stageChecks = checkboxes.filter((item) => item.dataset.milestoneStage === stage);
savedMilestones[stage] = stageChecks.filter((item) => item.checked).map((item) => item.value);
persistMilestones();
updateProgress(stage);
});
});
tabs.forEach((tab, index) => {
tab.addEventListener("click", () => activateStage(tab.dataset.stage));
tab.addEventListener("keydown", (event) => {
if (!["ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key)) return;
event.preventDefault();
let nextIndex = index;
if (event.key === "ArrowRight") nextIndex = (index + 1) % tabs.length;
if (event.key === "ArrowLeft") nextIndex = (index - 1 + tabs.length) % tabs.length;
if (event.key === "Home") nextIndex = 0;
if (event.key === "End") nextIndex = tabs.length - 1;
activateStage(tabs[nextIndex].dataset.stage, true);
});
});
activateStage("baby");
if (clearButton) {
clearButton.addEventListener("click", () => {
savedMilestones[activeStage] = [];
checkboxes.filter((input) => input.dataset.milestoneStage === activeStage).forEach((input) => {
input.checked = false;
});
persistMilestones();
updateProgress(activeStage);
});
}
const copyText = async (text) => {
if (navigator.clipboard && window.isSecureContext) {
await navigator.clipboard.writeText(text);
return;
}
const textArea = document.createElement("textarea");
textArea.value = text;
textArea.style.position = "fixed";
textArea.style.opacity = "0";
document.body.appendChild(textArea);
textArea.select();
document.execCommand("copy");
document.body.removeChild(textArea);
};
if (copyButton) {
copyButton.addEventListener("click", async () => {
const stageChecks = checkboxes.filter((input) => input.dataset.milestoneStage === activeStage);
const selected = stageChecks.filter((input) => input.checked);
const lines = selected.length
? selected.map((input) => `• ${input.value}`)
: ["• No milestones selected yet."];
const summary = `Root & Rise milestone check-in — ${stageLabels[activeStage]}\n\n${lines.join("\n")}\n\nThis is a personal observation, not a medical assessment.`;
try {
await copyText(summary);
if (copyButtonLabel) copyButtonLabel.textContent = "Copied! ";
else copyButton.textContent = "Copied!";
window.setTimeout(() => {
if (copyButtonLabel) copyButtonLabel.textContent = "Copy check-in";
else copyButton.textContent = "Copy check-in";
}, 1800);
} catch (error) {
if (copyButtonLabel) copyButtonLabel.textContent = "Copy failed ";
else copyButton.textContent = "Copy failed";
}
});
}
const communityForm = document.getElementById("community-form-element");
const communitySuccess = document.getElementById("community-success");
document.querySelectorAll("[data-set-purpose]").forEach((trigger) => {
trigger.addEventListener("click", () => {
const purpose = trigger.dataset.setPurpose;
const input = document.querySelector(`input[name="purpose"][value="${purpose}"]`);
if (input) input.checked = true;
window.setTimeout(() => {
const topic = document.getElementById("parent-topic");
if (topic) topic.focus({ preventScroll: true });
}, 650);
});
});
if (communityForm) {
communityForm.addEventListener("submit", (event) => {
event.preventDefault();
if (!communityForm.checkValidity()) {
communityForm.reportValidity();
return;
}
communitySuccess.hidden = false;
communitySuccess.focus();
communityForm.reset();
window.setTimeout(() => {
communitySuccess.hidden = true;
}, 7000);
});
}
const newsletterForm = document.getElementById("newsletter-form");
const newsletterSuccess = document.getElementById("newsletter-success");
if (newsletterForm) {
newsletterForm.addEventListener("submit", (event) => {
event.preventDefault();
if (!newsletterForm.checkValidity()) {
newsletterForm.reportValidity();
return;
}
newsletterSuccess.hidden = false;
newsletterSuccess.focus();
newsletterForm.reset();
window.setTimeout(() => {
newsletterSuccess.hidden = true;
}, 7000);
});
}
document.getElementById("current-year").textContent = new Date().getFullYear();
})();
</script>
</body>
</html>
View Axe Report (JSON)
{
"testEngine": {
"name": "axe-core",
"version": "4.10.2"
},
"testRunner": {
"name": "axe"
},
"testEnvironment": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
"windowWidth": 1280,
"windowHeight": 720,
"orientationAngle": 0,
"orientationType": "landscape-primary"
},
"timestamp": "2026-11-12T10:10:27.409Z",
"url": "https://benchmark.aimac.invalid/7f656a35bbed039d46d995cb9c86dffcb7cfe317071e21a6c16c7b8eeb6e7377.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-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": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-allowed-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attributes are used correctly for the defined role"
}
],
"none": [
{
"id": "aria-unsupported-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute is supported"
}
],
"impact": null,
"html": "<a class=\"brand\" href=\"#top\" aria-label=\"Root and Rise home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-conditional-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are used as described in the specification of the element's role",
"help": "ARIA attributes must be used as specified for the element's role",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-conditional-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#top\" aria-label=\"Root and Rise home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "deprecatedrole",
"data": null,
"relatedNodes": [],
"impact": "minor",
"message": "ARIA role is not deprecated"
}
],
"impact": null,
"html": "<div class=\"stage-tabs\" role=\"tablist\" aria-label=\"Developmental milestone age ranges\">",
"target": [
".stage-tabs"
]
}
]
},
{
"id": "aria-hidden-body",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"wcag412",
"EN-301-549",
"EN-9.1.3.1",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden=\"true\" is not present on the document body.",
"help": "aria-hidden=\"true\" must not be present on the document body",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-hidden-body",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "No aria-hidden attribute is present on document body"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<body>",
"target": [
"body"
]
}
]
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "focusable-modal-open",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements while a modal is open"
},
{
"id": "focusable-disabled",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
},
{
"id": "focusable-not-tabbable",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "No focusable elements contained within element"
}
],
"none": [],
"impact": null,
"html": "<svg class=\"svg-sprite\" aria-hidden=\"true\" style=\"position:absolute;width:0;height:0;overflow:hidden\">",
"target": [
".svg-sprite"
]
}
]
},
{
"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": [
{
"any": [
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute exists and is not empty"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<div class=\"progress-track\" id=\"milestone-progress\" role=\"progressbar\" aria-label=\"Milestones noticed\" aria-valuemin=\"0\" aria-valuemax=\"4\" aria-valuenow=\"0\">\n <div class=\"progress-bar\" id=\"progress-bar\" style=\"width: 0%;\"></div>\n </div>",
"target": [
"#milestone-progress"
]
}
]
},
{
"id": "aria-prohibited-attr",
"impact": "serious",
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"impact": null,
"html": "<a class=\"brand\" href=\"#top\" aria-label=\"Root and Rise home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-required-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "All required ARIA attributes are present"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<div class=\"stage-tabs\" role=\"tablist\" aria-label=\"Developmental milestone age ranges\">",
"target": [
".stage-tabs"
]
}
]
},
{
"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": [
{
"any": [
{
"id": "aria-required-children",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Required ARIA children are present"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<div class=\"stage-tabs\" role=\"tablist\" aria-label=\"Developmental milestone age ranges\">",
"target": [
".stage-tabs"
]
}
]
},
{
"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": [
{
"any": [
{
"id": "aria-required-parent",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Required ARIA parent role present"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button class=\"stage-tab\" id=\"tab-baby\" type=\"button\" role=\"tab\" aria-selected=\"true\" aria-controls=\"panel-baby\" data-stage=\"baby\" tabindex=\"0\">0\u201312 months</button>",
"target": [
"#tab-baby"
]
}
]
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "invalidrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA role is valid"
},
{
"id": "abstractrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Abstract roles are not used"
},
{
"id": "unsupportedrole",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA role is supported"
}
],
"impact": null,
"html": "<div class=\"stage-tabs\" role=\"tablist\" aria-label=\"Developmental milestone age ranges\">",
"target": [
".stage-tabs"
]
}
]
},
{
"id": "aria-valid-attr-value",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all ARIA attributes have valid values",
"help": "ARIA attributes must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "aria-valid-attr-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute values are valid"
},
{
"id": "aria-errormessage",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
},
{
"id": "aria-level",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-level values are valid"
}
],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#top\" aria-label=\"Root and Rise home\">",
"target": [
".brand"
]
}
]
},
{
"id": "aria-valid-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure attributes that begin with aria- are valid ARIA attributes",
"help": "ARIA attributes must conform to valid names",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-valid-attr",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "ARIA attribute name is valid"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a class=\"brand\" href=\"#top\" aria-label=\"Root and Rise home\">",
"target": [
".brand"
]
}
]
},
{
"id": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "autocomplete-valid",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "the autocomplete attribute is correctly formatted"
}
],
"none": [],
"impact": null,
"html": "<input id=\"parent-name\" name=\"name\" type=\"text\" autocomplete=\"name\" placeholder=\"What should we call you?\">",
"target": [
"#parent-name"
]
}
]
},
{
"id": "avoid-inline-spacing",
"impact": null,
"tags": [
"cat.structure",
"wcag21aa",
"wcag1412",
"EN-301-549",
"EN-9.1.4.12",
"ACT"
],
"description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
"help": "Inline text spacing must be adjustable with custom stylesheets",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "important-letter-spacing",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Letter-spacing in the style attribute is not set to !important, or meets the minimum"
},
{
"id": "important-word-spacing",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "word-spacing in the style attribute is not set to !important, or meets the minimum"
},
{
"id": "important-line-height",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "line-height in the style attribute is not set to !important, or meets the minimum"
}
],
"none": [],
"impact": null,
"html": "<div class=\"section-head\" style=\"margin-left:0;text-align:left\">",
"target": [
".faq-layout > div > .section-head"
]
}
]
},
{
"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=\"stage-tab\" id=\"tab-baby\" type=\"button\" role=\"tab\" aria-selected=\"true\" aria-controls=\"panel-baby\" data-stage=\"baby\" tabindex=\"0\">0\u201312 months</button>",
"target": [
"#tab-baby"
]
}
]
},
{
"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 is a practice, <em>not a perfect performance.</em></h1>",
"target": [
"h1"
]
},
{
"html": "<h2>Help for the moment in front of you</h2>",
"target": [
"#start > .container > .section-head > h2"
]
},
{
"html": "<h3>Big feelings & behavior</h3>",
"target": [
".topic-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Sleep & routines</h3>",
"target": [
".topic-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Feeding & nutrition</h3>",
"target": [
".topic-card:nth-child(3) > h3"
]
},
{
"html": "<h3>Connection & social skills</h3>",
"target": [
".topic-card:nth-child(4) > h3"
]
},
{
"html": "<h2>Connection first. Progress follows.</h2>",
"target": [
".guides-copy > h2"
]
},
{
"html": "<h2>Know what to celebrate next</h2>",
"target": [
"#milestones > .container > .section-head > h2"
]
},
{
"html": "<h3>A calmer way to notice development</h3>",
"target": [
".tracker-intro > h3"
]
},
{
"html": "<h2>Health guidance, translated for humans</h2>",
"target": [
".health-head > div > h2"
]
},
{
"html": "<h3>Sleep & daily rhythms</h3>",
"target": [
".health-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Food & family nutrition</h3>",
"target": [
".health-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Child development</h3>",
"target": [
".health-card:nth-child(3) > h3"
]
},
{
"html": "<h2>Make room for the memories</h2>",
"target": [
"#family-fun > .container > .section-head > h2"
]
},
{
"html": "<h3>The five-minute story swap</h3>",
"target": [
".activity-card:nth-child(1) > .activity-content > h3"
]
},
{
"html": "<h3>Kitchen confidence</h3>",
"target": [
".activity-card:nth-child(2) > .activity-content > h3"
]
},
{
"html": "<h3>Neighborhood treasure quest</h3>",
"target": [
".activity-card:nth-child(3) > .activity-content > h3"
]
},
{
"html": "<h3>Tiny science lab</h3>",
"target": [
".activity-card:nth-child(4) > .activity-content > h3"
]
},
{
"html": "<h2>You are not meant to figure it out alone</h2>",
"target": [
"#support > .container > .section-head > h2"
]
},
{
"html": "<h3>New Parents Circle</h3>",
"target": [
".circle-row:nth-child(1) > div:nth-child(2) > h3"
]
},
{
"html": "<h3>Calm Home Lab</h3>",
"target": [
".circle-row:nth-child(2) > div:nth-child(2) > h3"
]
},
{
"html": "<h3>Feeding Together</h3>",
"target": [
".circle-row:nth-child(3) > div:nth-child(2) > h3"
]
},
{
"html": "<h3>Support without the side-eye</h3>",
"target": [
".community-promise > h3"
]
},
{
"html": "<h3>Ask a question or share your story</h3>",
"target": [
".form-panel > h3"
]
},
{
"html": "<h3>What happens next</h3>",
"target": [
".form-aside > h3"
]
},
{
"html": "<h2>Fresh ideas for real family life</h2>",
"target": [
"#blog > .container > .section-head > h2"
]
},
{
"html": "<h3>The 20-minute repair after a big meltdown</h3>",
"target": [
".article-card:nth-child(1) > .article-content > h3"
]
},
{
"html": "<h3>How to praise effort without creating pressure</h3>",
"target": [
".article-card:nth-child(2) > .article-content > h3"
]
},
{
"html": "<h3>A calmer morning routine for busy households</h3>",
"target": [
".article-card:nth-child(3) > .article-content > h3"
]
},
{
"html": "<h2>Questions parents ask us</h2>",
"target": [
".faq-layout > div > .section-head > h2"
]
},
{
"html": "<h3>A caring person is one message away</h3>",
"target": [
".help-card > h3"
]
},
{
"html": "<h2>A calmer inbox, once a week</h2>",
"target": [
".newsletter-copy > h2"
]
},
{
"html": "<h3>Root & Rise</h3>",
"target": [
".footer-brand > h3"
]
},
{
"html": "<h4>Explore</h4>",
"target": [
".footer-column:nth-child(2) > h4"
]
},
{
"html": "<h4>Company</h4>",
"target": [
".footer-column:nth-child(3) > h4"
]
},
{
"html": "<h4>Get in touch</h4>",
"target": [
".footer-contact-column > h4"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main id=\"main-content\">",
"target": [
"#main-content"
]
}
],
"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": "#ffffff",
"bgColor": "#173f3a",
"contrastRatio": 11.61,
"fontSize": "9.8pt (13.12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 11.61"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<p><span class=\"announcement-tag\">New</span>The Sunday Reset: a 15-minute family planning toolkit</p>",
"target": [
".announcement-inner > p"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "duplicate-id-aria",
"data": "primary-navigation",
"relatedNodes": [],
"impact": "critical",
"message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<nav class=\"main-nav\" id=\"primary-navigation\" aria-label=\"Primary navigation\">",
"target": [
"#primary-navigation"
]
}
]
},
{
"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 class=\"check-item\">",
"target": [
"#panel-baby > .checklist > .check-item:nth-child(1)"
]
}
],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<input type=\"checkbox\" data-milestone-stage=\"baby\" value=\"Turns toward familiar sounds or voices\">",
"target": [
".check-item:nth-child(1) > input[data-milestone-stage=\"baby\"][type=\"checkbox\"]"
]
}
]
},
{
"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/96x96/173F3A/FFF8E8?text=R%26R&font=poppins\" alt=\"Root & Rise logo\" width=\"50\" height=\"50\">",
"target": [
"img[width=\"50\"]"
]
}
]
},
{
"id": "label",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "implicit-label",
"data": {
"implicitLabel": "Turns toward familiar sounds or voicesResponds to a caregiver\u2019s voice or familiar environmental sound."
},
"relatedNodes": [
{
"html": "<label class=\"check-item\">",
"target": [
"#panel-baby > .checklist > .check-item:nth-child(1)"
]
}
],
"impact": "critical",
"message": "Element has an implicit (wrapped) <label>"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input type=\"checkbox\" data-milestone-stage=\"baby\" value=\"Turns toward familiar sounds or voices\">",
"target": [
".check-item:nth-child(1) > input[data-milestone-stage=\"baby\"][type=\"checkbox\"]"
]
}
]
},
{
"id": "link-in-text-block",
"impact": null,
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "link-in-text-block",
"data": null,
"relatedNodes": [
{
"html": "<div class=\"guides-copy\">",
"target": [
".guides-copy"
]
}
],
"impact": "serious",
"message": "Links can be distinguished from surrounding text in some way other than by color"
},
{
"id": "link-in-text-block-style",
"data": null,
"relatedNodes": [
{
"html": "<div class=\"guides-copy\">",
"target": [
".guides-copy"
]
}
],
"impact": "serious",
"message": "Links can be distinguished from surrounding text by visual styling"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a class=\"button button--primary\" href=\"#blog\">Browse all parenting guides <svg class=\"icon\" aria-hidden=\"true\"><use href=\"#icon-arrow\"></use></svg></a>",
"target": [
".button--primary.button[href$=\"#blog\"]"
]
}
]
},
{
"id": "link-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a class=\"skip-link\" href=\"#main-content\">Skip to main content</a>",
"target": [
".skip-link"
]
}
]
},
{
"id": "list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that lists are structured correctly",
"help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "only-listitems",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List element only has direct children that are allowed inside <li> elements"
}
],
"impact": null,
"html": "<ul>",
"target": [
"#primary-navigation > ul"
]
}
]
},
{
"id": "listitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <li> elements are used semantically",
"help": "<li> elements must be contained in a <ul> or <ol>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "listitem",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List item has a <ul>, <ol> or role=\"list\" parent element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<li><a href=\"#start\">Parenting Guides</a></li>",
"target": [
"#primary-navigation > ul > li:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<img src=\"https://placehold.co/96x96/173F3A/FFF8E8?text=R%26R&font=poppins\" alt=\"Root & Rise logo\" width=\"50\" height=\"50\">",
"target": [
"img[width=\"50\"]"
]
}
]
},
{
"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": "What is this about?"
},
"relatedNodes": [
{
"html": "<label for=\"parent-topic\">What is this about?</label>",
"target": [
"label[for=\"parent-topic\"]"
]
}
],
"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=\"parent-topic\" name=\"topic\" required=\"\">",
"target": [
"#parent-topic"
]
}
]
},
{
"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>Where should I start if I feel overwhelmed?</summary>",
"target": [
"details[open=\"\"] > summary"
]
}
]
},
{
"id": "target-size",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag22aa",
"wcag258"
],
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "target-size",
"data": {
"minSize": 24,
"width": 194.1,
"height": 47.2
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (194.1px by 47.2px, should be at least 24px by 24px)"
},
{
"id": "target-offset",
"data": {
"closestOffset": 24,
"minOffset": 24
},
"relatedNodes": [],
"impact": "serious",
"message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a class=\"skip-link\" href=\"#main-content\">Skip to main content</a>",
"target": [
".skip-link"
]
}
]
}
],
"incomplete": [
{
"id": "aria-prohibited-attr",
"impact": "serious",
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": {
"role": null,
"nodeName": "div",
"messageKey": "noRoleSingular",
"prohibited": [
"aria-label"
]
},
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute is not well supported on a div with no valid role attribute."
}
],
"impact": "serious",
"html": "<div class=\"social-links\" aria-label=\"Social media links\">",
"target": [
".social-links"
],
"failureSummary": "Fix all of the following:\n aria-label attribute is not well supported on a div with no valid role attribute."
}
]
},
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": null,
"bgColor": null,
"contrastRatio": 0,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": "bgGradient",
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"hero\" id=\"top\">",
"target": [
"#top"
]
}
],
"impact": "serious",
"message": "Element's background color could not be determined due to a background gradient"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Care that feels human</span>",
"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": "#d95b43",
"bgColor": "#fbf7ee",
"contrastRatio": 3.55,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.55 (foreground color: #d95b43, background color: #fbf7ee, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Start where you are</span>",
"target": [
"#start > .container > .section-head > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.55 (foreground color: #d95b43, background color: #fbf7ee, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d95b43",
"bgColor": "#f1f5ef",
"contrastRatio": 3.44,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section guides-section\" id=\"guides\">",
"target": [
"#guides"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.44 (foreground color: #d95b43, background color: #f1f5ef, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">The Root & Rise approach</span>",
"target": [
".guides-copy > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.44 (foreground color: #d95b43, background color: #f1f5ef, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#173f3a",
"bgColor": "#f0775d",
"contrastRatio": 4.14,
"fontSize": "11.0pt (14.72px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a class=\"button button--coral\" href=\"#community-form\">Ask a health question <svg class=\"icon\" aria-hidden=\"true\"><use href=\"#icon-arrow\"></use></svg></a>",
"target": [
".health-head > .button--coral.button[href$=\"#community-form\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 11.0pt (14.72px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a class=\"button button--coral\" href=\"#community-form\">Ask a health question <svg class=\"icon\" aria-hidden=\"true\"><use href=\"#icon-arrow\"></use></svg></a>",
"target": [
".health-head > .button--coral.button[href$=\"#community-form\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 11.0pt (14.72px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d95b43",
"bgColor": "#fffefa",
"contrastRatio": 3.76,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section--white\" id=\"family-fun\">",
"target": [
"#family-fun"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.76 (foreground color: #d95b43, background color: #fffefa, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Family fun</span>",
"target": [
"#family-fun > .container > .section-head > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.76 (foreground color: #d95b43, background color: #fffefa, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d95b43",
"bgColor": "#e4eee3",
"contrastRatio": 3.19,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section--sage\" id=\"support\">",
"target": [
"#support"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.19 (foreground color: #d95b43, background color: #e4eee3, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Support groups</span>",
"target": [
"#support > .container > .section-head > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.19 (foreground color: #d95b43, background color: #e4eee3, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#62716b",
"bgColor": "#e4eee3",
"contrastRatio": 4.3,
"fontSize": "13.0pt (17.28px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section--sage\" id=\"support\">",
"target": [
"#support"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.3 (foreground color: #62716b, background color: #e4eee3, font size: 13.0pt (17.28px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>Join small, moderated circles with parents who understand the season you are in. Share what is true, listen without judgment, and leave with a clearer next step.</p>",
"target": [
"#support > .container > .section-head > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.3 (foreground color: #62716b, background color: #e4eee3, font size: 13.0pt (17.28px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#173f3a",
"bgColor": "#f0775d",
"contrastRatio": 4.14,
"fontSize": "11.0pt (14.72px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a class=\"button button--coral\" href=\"#community-form\">Find a support circle <svg class=\"icon\" aria-hidden=\"true\"><use href=\"#icon-arrow\"></use></svg></a>",
"target": [
".community-promise > .button--coral.button[href$=\"#community-form\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 11.0pt (14.72px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a class=\"button button--coral\" href=\"#community-form\">Find a support circle <svg class=\"icon\" aria-hidden=\"true\"><use href=\"#icon-arrow\"></use></svg></a>",
"target": [
".community-promise > .button--coral.button[href$=\"#community-form\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 11.0pt (14.72px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d95b43",
"bgColor": "#fffefa",
"contrastRatio": 3.76,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"community-form-wrap\">",
"target": [
".community-form-wrap"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.76 (foreground color: #d95b43, background color: #fffefa, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Community desk</span>",
"target": [
".form-panel > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.76 (foreground color: #d95b43, background color: #fffefa, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d95b43",
"bgColor": "#fbf7ee",
"contrastRatio": 3.55,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.55 (foreground color: #d95b43, background color: #fbf7ee, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">From the blog</span>",
"target": [
"#blog > .container > .section-head > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.55 (foreground color: #d95b43, background color: #fbf7ee, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d95b43",
"bgColor": "#fffefa",
"contrastRatio": 3.76,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"section section--white\" id=\"resources\">",
"target": [
"#resources"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.76 (foreground color: #d95b43, background color: #fffefa, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Helpful answers</span>",
"target": [
".faq-layout > div > .section-head > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.76 (foreground color: #d95b43, background color: #fffefa, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#173f3a",
"bgColor": "#f0775d",
"contrastRatio": 4.14,
"fontSize": "11.0pt (14.72px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a class=\"button button--coral\" href=\"#community-form\">Get Help <svg class=\"icon\" aria-hidden=\"true\"><use href=\"#icon-arrow\"></use></svg></a>",
"target": [
".help-card > .button--coral.button[href$=\"#community-form\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 11.0pt (14.72px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a class=\"button button--coral\" href=\"#community-form\">Get Help <svg class=\"icon\" aria-hidden=\"true\"><use href=\"#icon-arrow\"></use></svg></a>",
"target": [
".help-card > .button--coral.button[href$=\"#community-form\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 11.0pt (14.72px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#173f3a",
"bgColor": "#f0775d",
"contrastRatio": 4.14,
"fontSize": "9.1pt (12.16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"newsletter\">",
"target": [
".newsletter"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\" style=\"color:var(--forest)\">The Sunday Reset</span>",
"target": [
".newsletter-copy > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 9.1pt (12.16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#4b4c42",
"bgColor": "#f0775d",
"contrastRatio": 3.11,
"fontSize": "12.0pt (16px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"newsletter\">",
"target": [
".newsletter"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.11 (foreground color: #4b4c42, background color: #f0775d, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>One practical idea, one family activity, and one thing worth noticing from your week. No fear-based advice. No parenting guilt. Just a thoughtful reset.</p>",
"target": [
".newsletter-copy > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.11 (foreground color: #4b4c42, background color: #f0775d, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#173f3a",
"bgColor": "#f0775d",
"contrastRatio": 4.14,
"fontSize": "9.4pt (12.48px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"newsletter\">",
"target": [
".newsletter"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<label for=\"newsletter-email\">Your email address</label>",
"target": [
"label[for=\"newsletter-email\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.14 (foreground color: #173f3a, background color: #f0775d, font size: 9.4pt (12.48px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#655347",
"bgColor": "#f0775d",
"contrastRatio": 2.6,
"fontSize": "7.9pt (10.56px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"newsletter\">",
"target": [
".newsletter"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.6 (foreground color: #655347, background color: #f0775d, font size: 7.9pt (10.56px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<small>By subscribing, you agree to receive our weekly email. Unsubscribe anytime. Read our <a href=\"/privacy\" style=\"text-decoration:underline\">privacy policy</a>.</small>",
"target": [
"#newsletter-form > small"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.6 (foreground color: #655347, background color: #f0775d, font size: 7.9pt (10.56px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#655347",
"bgColor": "#f0775d",
"contrastRatio": 2.6,
"fontSize": "7.9pt (10.56px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"newsletter\">",
"target": [
".newsletter"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.6 (foreground color: #655347, background color: #f0775d, font size: 7.9pt (10.56px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"/privacy\" style=\"text-decoration:underline\">privacy policy</a>",
"target": [
"small > a[href$=\"privacy\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.6 (foreground color: #655347, background color: #f0775d, font size: 7.9pt (10.56px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#869b99",
"bgColor": "#173f3a",
"contrastRatio": 3.96,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer class=\"site-footer\">",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p>\u00a9 <span id=\"current-year\">2026</span> Root & Rise Family Co. All rights reserved. Educational content is not a substitute for professional care.</p>",
"target": [
".footer-bottom > p"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#869b99",
"bgColor": "#173f3a",
"contrastRatio": 3.96,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer class=\"site-footer\">",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span id=\"current-year\">2026</span>",
"target": [
"#current-year"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#869b99",
"bgColor": "#173f3a",
"contrastRatio": 3.96,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer class=\"site-footer\">",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"/privacy\">Privacy</a>",
"target": [
".legal-links > a[href$=\"privacy\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#869b99",
"bgColor": "#173f3a",
"contrastRatio": 3.96,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer class=\"site-footer\">",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"/terms\">Terms</a>",
"target": [
"a[href$=\"terms\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#869b99",
"bgColor": "#173f3a",
"contrastRatio": 3.96,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer class=\"site-footer\">",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"/accessibility\">Accessibility</a>",
"target": [
"a[href$=\"accessibility\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#869b99",
"bgColor": "#173f3a",
"contrastRatio": 3.96,
"fontSize": "8.4pt (11.2px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer class=\"site-footer\">",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#top\">Back to top \u2191</a>",
"target": [
".legal-links > a[href$=\"#top\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #869b99, background color: #173f3a, font size: 8.4pt (11.2px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#62716b",
"bgColor": "#eef0ec",
"contrastRatio": 4.47,
"fontSize": "7.8pt (10.4px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header class=\"site-header is-scrolled\" id=\"site-header\">",
"target": [
"#site-header"
]
},
{
"html": "<article class=\"health-card\">",
"target": [
".health-card:nth-child(1)"
]
},
{
"html": "<section class=\"section health-section\" id=\"health\">",
"target": [
"#health"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.47 (foreground color: #62716b, background color: #eef0ec, font size: 7.8pt (10.4px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"brand-tagline\">Steady guidance for growing families</span>",
"target": [
".brand-tagline"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #62716b, background color: #eef0ec, font size: 7.8pt (10.4px), font weight: bold). Expected contrast ratio of 4.5:1"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 12404
},
{
"y": 576,
"height": 12404
},
{
"y": 1152,
"height": 12404
},
{
"y": 1728,
"height": 12404
},
{
"y": 2304,
"height": 12404
},
{
"y": 2880,
"height": 12404
},
{
"y": 3456,
"height": 12404
},
{
"y": 4032,
"height": 12404
},
{
"y": 4608,
"height": 12404
},
{
"y": 5184,
"height": 12404
},
{
"y": 5760,
"height": 12404
},
{
"y": 6336,
"height": 12404
},
{
"y": 6912,
"height": 12404
},
{
"y": 7488,
"height": 12404
},
{
"y": 8064,
"height": 12404
},
{
"y": 8640,
"height": 12404
},
{
"y": 9216,
"height": 12404
},
{
"y": 9792,
"height": 12404
},
{
"y": 10368,
"height": 12404
},
{
"y": 10944,
"height": 12404
},
{
"y": 11520,
"height": 12404
},
{
"y": 11684,
"height": 12404
}
],
"scans": 23,
"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: "Health", "Support Groups", "Blog".
- **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: "Family Fun", "Parenting Tips", "Family Wellness".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "attachment parenting", "positive reinforcement", "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: "Share Story", "Get Help", "Ask Question".
- **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: "milestone tracker".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "weekly tips", "popular questions", "parent success stories".
- **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.