MiniMax MiniMax M3 – Shopping
via CoreWeave · Generated
- AIMAC Debt 23.91
- Cost $0.03
- Total Violations 50
- HTML Size 90 KB
- Em Dashes 24
Screenshot
View Live Page
Accessibility Issues Found
12 Critical 38 Serious
-
button-name critical 12 instances
Buttons must have discernible text
Example HTML
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7... -
color-contrast serious 38 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<span class="logo-tag">Curated Marketplace</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" />
<title>Mercato — Curated finds from independent makers, delivered to your door.</title>
<meta name="description" content="Mercato is a curated online marketplace featuring the best in home, fashion, kitchen, and gift essentials from independent brands worldwide." />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
/* ============================================
RESET & BASE
============================================ */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;
font-size:16px;
line-height:1.6;
color:#1F1F1F;
background:#FBF8F3;
-webkit-font-smoothing:antialiased;
overflow-x:hidden;
}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}
:root{
--bg:#FBF8F3;
--bg-alt:#F2EDE4;
--card:#FFFFFF;
--ink:#1F1F1F;
--ink-soft:#5C544A;
--muted:#8B7E72;
--line:#E8E2D6;
--accent:#C8553D;
--accent-dark:#A6432F;
--green:#2C4A3E;
--gold:#B8935A;
--shadow:0 1px 2px rgba(31,31,31,.04),0 8px 24px rgba(31,31,31,.06);
--shadow-lg:0 4px 12px rgba(31,31,31,.08),0 24px 60px rgba(31,31,31,.12);
--radius:14px;
--radius-sm:8px;
--maxw:1280px;
}
h1,h2,h3,h4,h5{font-family:'Playfair Display',Georgia,serif;font-weight:500;line-height:1.15;letter-spacing:-.01em}
.eyebrow{font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--accent)}
.container{max-width:var(--maxw);margin:0 auto;padding:0 28px}
/* ============================================
ANNOUNCEMENT BAR
============================================ */
.announce{
background:var(--ink);
color:#FBF8F3;
text-align:center;
padding:10px 20px;
font-size:13px;
letter-spacing:.04em;
position:relative;
overflow:hidden;
}
.announce-track{display:flex;gap:60px;justify-content:center;flex-wrap:wrap}
.announce-track span strong{color:#E8B97B;font-weight:600}
.announce-close{position:absolute;right:14px;top:50%;transform:translateY(-50%);color:#FBF8F3;opacity:.6;font-size:16px;padding:4px 8px}
.announce-close:hover{opacity:1}
/* ============================================
HEADER & NAV
============================================ */
.site-header{
position:sticky;
top:0;
z-index:100;
background:rgba(251,248,243,.92);
backdrop-filter:saturate(160%) blur(12px);
-webkit-backdrop-filter:saturate(160%) blur(12px);
border-bottom:1px solid var(--line);
transition:box-shadow .3s ease;
}
.site-header.scrolled{box-shadow:0 4px 18px rgba(31,31,31,.05)}
.nav-bar{
display:grid;
grid-template-columns:1fr auto 1fr;
align-items:center;
gap:24px;
padding:18px 0;
}
.logo{display:flex;align-items:center;gap:12px}
.logo-mark{
width:42px;height:42px;border-radius:50%;
background:var(--ink);
display:flex;align-items:center;justify-content:center;
color:#FBF8F3;font-family:'Playfair Display',serif;font-weight:700;font-size:22px;
letter-spacing:-.04em;
}
.logo-text{display:flex;flex-direction:column;line-height:1}
.logo-name{font-family:'Playfair Display',serif;font-size:24px;font-weight:600;letter-spacing:-.02em}
.logo-tag{font-size:10px;color:var(--muted);letter-spacing:.18em;text-transform:uppercase;margin-top:3px}
.main-nav{display:flex;gap:30px;justify-content:center;align-items:center}
.main-nav a{
font-size:14px;font-weight:500;color:var(--ink-soft);
position:relative;padding:6px 0;
transition:color .2s ease;
}
.main-nav a:hover{color:var(--ink)}
.main-nav a::after{
content:"";position:absolute;left:0;right:0;bottom:0;
height:1px;background:var(--ink);transform:scaleX(0);transform-origin:left;
transition:transform .25s ease;
}
.main-nav a:hover::after{transform:scaleX(1)}
.main-nav a.sale-link{color:var(--accent);font-weight:600}
.main-nav a.sale-link::after{background:var(--accent)}
.main-nav .nav-badge{
display:inline-block;background:var(--accent);color:#fff;
font-size:10px;padding:1px 6px;border-radius:8px;margin-left:6px;
letter-spacing:.05em;font-weight:600;
}
.nav-actions{display:flex;align-items:center;gap:8px;justify-content:flex-end}
.icon-btn{
width:40px;height:40px;border-radius:50%;
display:flex;align-items:center;justify-content:center;
color:var(--ink-soft);
transition:background .2s ease, color .2s ease;
position:relative;
}
.icon-btn:hover{background:var(--bg-alt);color:var(--ink)}
.icon-btn svg{width:20px;height:20px;stroke-width:1.6}
.cart-count{
position:absolute;top:4px;right:4px;
background:var(--accent);color:#fff;
font-size:10px;font-weight:700;
min-width:18px;height:18px;border-radius:9px;
display:flex;align-items:center;justify-content:center;
padding:0 5px;
}
.menu-toggle{display:none}
/* ============================================
HERO
============================================ */
.hero{
padding:40px 0 80px;
position:relative;
}
.hero-grid{
display:grid;
grid-template-columns:1.05fr 1fr;
gap:48px;
align-items:center;
}
.hero-copy h1{
font-size:clamp(44px,5.4vw,76px);
line-height:1.02;
letter-spacing:-.025em;
margin:18px 0 24px;
}
.hero-copy h1 em{font-style:italic;color:var(--accent)}
.hero-copy p.lead{
font-size:18px;color:var(--ink-soft);max-width:480px;margin-bottom:32px;line-height:1.65;
}
.hero-cta{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:36px}
.btn{
display:inline-flex;align-items:center;gap:10px;
padding:16px 28px;border-radius:999px;
font-size:14px;font-weight:600;letter-spacing:.04em;
transition:all .25s ease;
white-space:nowrap;
}
.btn-primary{background:var(--ink);color:#FBF8F3}
.btn-primary:hover{background:#000;transform:translateY(-1px);box-shadow:0 10px 24px rgba(31,31,31,.18)}
.btn-secondary{background:transparent;color:var(--ink);border:1px solid var(--ink)}
.btn-secondary:hover{background:var(--ink);color:#FBF8F3}
.btn-accent{background:var(--accent);color:#fff}
.btn-accent:hover{background:var(--accent-dark);transform:translateY(-1px)}
.btn-sm{padding:12px 20px;font-size:13px}
.btn svg{width:16px;height:16px}
.hero-stats{display:flex;gap:40px;padding-top:32px;border-top:1px solid var(--line)}
.hero-stat .num{font-family:'Playfair Display',serif;font-size:30px;font-weight:500;color:var(--ink)}
.hero-stat .lbl{font-size:12px;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;margin-top:2px}
.hero-visual{position:relative}
.hero-img-main{
border-radius:var(--radius);
overflow:hidden;
aspect-ratio:4/5;
background:var(--bg-alt);
box-shadow:var(--shadow-lg);
}
.hero-img-main img{width:100%;height:100%;object-fit:cover;transition:transform 8s ease}
.hero-visual:hover .hero-img-main img{transform:scale(1.05)}
.hero-card-float{
position:absolute;left:-32px;bottom:40px;
background:#fff;border-radius:12px;padding:14px 18px;
box-shadow:var(--shadow-lg);
display:flex;gap:12px;align-items:center;
max-width:240px;
}
.hero-card-float .pf{
width:44px;height:44px;border-radius:50%;
background:var(--green);color:#fff;
display:flex;align-items:center;justify-content:center;
font-size:18px;
}
.hero-card-float .info{font-size:13px;line-height:1.3}
.hero-card-float .info strong{display:block;color:var(--ink);font-weight:600}
.hero-card-float .info span{color:var(--muted);font-size:11px}
.hero-badge{
position:absolute;top:-20px;right:-20px;
width:120px;height:120px;border-radius:50%;
background:var(--accent);color:#fff;
display:flex;flex-direction:column;align-items:center;justify-content:center;
font-size:11px;letter-spacing:.1em;text-transform:uppercase;
text-align:center;line-height:1.3;
transform:rotate(-8deg);
box-shadow:0 12px 32px rgba(200,85,61,.3);
font-weight:600;
}
.hero-badge strong{display:block;font-family:'Playfair Display',serif;font-size:22px;letter-spacing:0;text-transform:none;margin-top:2px}
/* ============================================
VALUE PROPS
============================================ */
.value-props{padding:30px 0 80px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.value-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.value-card{
display:flex;gap:16px;align-items:flex-start;
padding:24px 4px;
}
.value-icon{
width:44px;height:44px;border-radius:50%;
background:var(--bg-alt);
display:flex;align-items:center;justify-content:center;
color:var(--green);flex-shrink:0;
}
.value-icon svg{width:22px;height:22px;stroke-width:1.6}
.value-card h4{font-family:'Inter',sans-serif;font-size:15px;font-weight:600;margin-bottom:4px}
.value-card p{font-size:13px;color:var(--ink-soft);line-height:1.55}
/* ============================================
SECTION HEADINGS
============================================ */
.section{padding:96px 0}
.section-head{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:48px;gap:40px;flex-wrap:wrap}
.section-head.center{flex-direction:column;align-items:center;text-align:center}
.section-head h2{font-size:clamp(32px,3.4vw,46px);max-width:640px}
.section-head p{max-width:420px;color:var(--ink-soft);font-size:16px}
.section-head .link-arrow{
font-size:14px;font-weight:600;color:var(--ink);
display:inline-flex;align-items:center;gap:6px;
border-bottom:1px solid var(--ink);padding-bottom:2px;
transition:gap .25s ease;
}
.section-head .link-arrow:hover{gap:12px}
/* ============================================
PRODUCT GRID
============================================ */
.product-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:28px}
.product-card{position:relative;transition:transform .3s ease}
.product-card:hover{transform:translateY(-4px)}
.product-img{
position:relative;
border-radius:var(--radius-sm);
overflow:hidden;
aspect-ratio:4/5;
background:var(--bg-alt);
margin-bottom:14px;
}
.product-img img{width:100%;height:100%;object-fit:cover;transition:transform .6s ease}
.product-card:hover .product-img img{transform:scale(1.06)}
.product-badge{
position:absolute;top:12px;left:12px;
background:var(--ink);color:#FBF8F3;
font-size:11px;font-weight:600;letter-spacing:.05em;
padding:5px 10px;border-radius:4px;text-transform:uppercase;
}
.product-badge.sale{background:var(--accent)}
.product-badge.new{background:var(--green)}
.product-badge.low{background:var(--gold);color:var(--ink)}
.wish-btn{
position:absolute;top:12px;right:12px;
width:36px;height:36px;border-radius:50%;
background:rgba(255,255,255,.95);
display:flex;align-items:center;justify-content:center;
color:var(--ink-soft);transition:all .2s ease;
opacity:0;transform:translateY(-4px);
}
.wish-btn svg{width:18px;height:18px;stroke-width:1.8}
.product-card:hover .wish-btn{opacity:1;transform:translateY(0)}
.wish-btn:hover{color:var(--accent)}
.wish-btn.active{color:var(--accent);fill:var(--accent);opacity:1;transform:translateY(0)}
.quick-add{
position:absolute;left:12px;right:12px;bottom:12px;
background:rgba(31,31,31,.95);color:#FBF8F3;
padding:11px 14px;border-radius:6px;
font-size:13px;font-weight:600;letter-spacing:.04em;
text-align:center;
opacity:0;transform:translateY(8px);
transition:all .25s ease;
}
.product-card:hover .quick-add{opacity:1;transform:translateY(0)}
.quick-add:hover{background:var(--accent)}
.product-meta{display:flex;flex-direction:column;gap:4px}
.product-cat{font-size:11px;color:var(--muted);letter-spacing:.12em;text-transform:uppercase}
.product-name{font-family:'Playfair Display',serif;font-size:17px;font-weight:500;color:var(--ink);line-height:1.3}
.product-rating{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-soft);margin-top:3px}
.stars{color:var(--gold);letter-spacing:1px}
.product-price{display:flex;align-items:baseline;gap:8px;margin-top:8px}
.price-now{font-size:16px;font-weight:600;color:var(--ink)}
.price-was{font-size:13px;color:var(--muted);text-decoration:line-through}
.price-off{font-size:11px;font-weight:600;color:var(--accent);letter-spacing:.04em}
/* ============================================
CATEGORIES
============================================ */
.categories-section{background:var(--bg-alt);padding:96px 0}
.category-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:16px}
.category-card{
position:relative;border-radius:var(--radius-sm);
overflow:hidden;aspect-ratio:3/4;
background:#fff;
transition:transform .3s ease;
}
.category-card:hover{transform:translateY(-4px)}
.category-card img{width:100%;height:100%;object-fit:cover;transition:transform .8s ease}
.category-card:hover img{transform:scale(1.08)}
.category-card .overlay{
position:absolute;inset:0;
background:linear-gradient(to top,rgba(31,31,31,.78) 0%,rgba(31,31,31,.1) 60%,rgba(31,31,31,0) 100%);
display:flex;flex-direction:column;justify-content:flex-end;
padding:18px;color:#fff;
}
.category-card .overlay h3{font-size:20px;margin-bottom:4px;color:#fff}
.category-card .overlay span{font-size:11px;letter-spacing:.12em;text-transform:uppercase;opacity:.85}
.category-card .count{font-size:11px;color:#E8B97B;margin-top:4px}
/* ============================================
FEATURED BANNER
============================================ */
.feature-banner{
display:grid;grid-template-columns:1fr 1fr;
border-radius:var(--radius);
overflow:hidden;
background:var(--green);
color:#FBF8F3;
min-height:480px;
}
.feature-banner-img{position:relative;overflow:hidden}
.feature-banner-img img{width:100%;height:100%;object-fit:cover}
.feature-banner-copy{padding:72px 60px;display:flex;flex-direction:column;justify-content:center}
.feature-banner-copy .eyebrow{color:#E8B97B}
.feature-banner-copy h2{font-size:clamp(30px,3vw,42px);color:#FBF8F3;margin:14px 0 22px;max-width:420px}
.feature-banner-copy p{color:rgba(251,248,243,.78);max-width:420px;margin-bottom:32px;line-height:1.7}
.feature-banner-copy .btn{background:#FBF8F3;color:var(--ink);align-self:flex-start}
.feature-banner-copy .btn:hover{background:#fff;transform:translateY(-1px)}
/* ============================================
SALE SECTION
============================================ */
.sale-section{
background:linear-gradient(135deg,#1F1F1F 0%,#2C2620 100%);
color:#FBF8F3;
padding:96px 0;
position:relative;
overflow:hidden;
}
.sale-section::before{
content:"";position:absolute;top:-100px;right:-100px;
width:400px;height:400px;border-radius:50%;
background:radial-gradient(circle,rgba(200,85,61,.3) 0%,transparent 70%);
}
.sale-section::after{
content:"";position:absolute;bottom:-150px;left:-100px;
width:500px;height:500px;border-radius:50%;
background:radial-gradient(circle,rgba(184,147,90,.15) 0%,transparent 70%);
}
.sale-content{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center;position:relative;z-index:1}
.sale-headline{font-size:clamp(48px,5vw,84px);line-height:1;letter-spacing:-.03em;margin:20px 0 24px}
.sale-headline em{font-style:italic;color:var(--accent)}
.sale-discount{display:inline-block;background:var(--accent);color:#fff;font-family:'Playfair Display',serif;font-weight:600;padding:6px 16px;border-radius:6px;font-size:22px;letter-spacing:.02em}
.sale-copy p{color:rgba(251,248,243,.75);font-size:17px;line-height:1.7;max-width:480px;margin-bottom:28px}
.countdown{display:flex;gap:12px;margin-bottom:32px}
.countdown-cell{
background:rgba(251,248,243,.08);
border:1px solid rgba(251,248,243,.15);
border-radius:10px;
padding:14px 18px;text-align:center;min-width:76px;
}
.countdown-cell .num{font-family:'Playfair Display',serif;font-size:32px;font-weight:600;line-height:1;color:#FBF8F3}
.countdown-cell .lbl{font-size:10px;letter-spacing:.15em;text-transform:uppercase;color:rgba(251,248,243,.6);margin-top:6px}
.sale-visual{position:relative;display:flex;justify-content:center}
.sale-img{
border-radius:var(--radius);overflow:hidden;
box-shadow:0 30px 60px rgba(0,0,0,.4);
width:100%;max-width:520px;
aspect-ratio:4/5;background:var(--bg-alt);
}
.sale-img img{width:100%;height:100%;object-fit:cover}
.sale-floating-tag{
position:absolute;top:30px;right:-10px;
background:var(--accent);color:#fff;
width:110px;height:110px;border-radius:50%;
display:flex;flex-direction:column;align-items:center;justify-content:center;
text-align:center;line-height:1.2;
font-family:'Playfair Display',serif;font-weight:600;
font-size:24px;letter-spacing:-.02em;
box-shadow:0 16px 40px rgba(200,85,61,.4);
animation:spin 18s linear infinite;
}
.sale-floating-tag small{display:block;font-size:9px;font-family:Inter,sans-serif;letter-spacing:.15em;text-transform:uppercase;font-weight:600;margin-top:4px}
@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
/* ============================================
PRICE TRACKER (INTERACTIVE)
============================================ */
.tracker-section{padding:96px 0;background:var(--bg-alt)}
.tracker-wrap{
display:grid;grid-template-columns:1fr 1.1fr;gap:60px;align-items:center;
}
.tracker-copy h2{font-size:clamp(32px,3.4vw,46px);margin:16px 0 20px;max-width:480px}
.tracker-copy p{color:var(--ink-soft);line-height:1.7;margin-bottom:24px;max-width:480px}
.tracker-features{margin-top:24px;display:flex;flex-direction:column;gap:14px}
.tracker-feat{display:flex;gap:14px;align-items:flex-start}
.tracker-feat .check{
width:24px;height:24px;border-radius:50%;
background:var(--green);color:#fff;
display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.tracker-feat .check svg{width:14px;height:14px;stroke-width:2.5}
.tracker-feat p{font-size:14px;color:var(--ink-soft);line-height:1.6;margin:0}
.tracker-feat p strong{display:block;color:var(--ink);font-weight:600;font-size:15px;margin-bottom:2px}
.tracker-card{
background:#fff;border-radius:var(--radius);
padding:36px;box-shadow:var(--shadow-lg);
}
.tracker-card h3{font-size:22px;margin-bottom:6px}
.tracker-card .sub{font-size:14px;color:var(--muted);margin-bottom:24px}
.tracker-form{display:flex;flex-direction:column;gap:14px}
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft)}
.field input,.field select{
padding:13px 16px;border:1px solid var(--line);border-radius:8px;
background:var(--bg);font-size:15px;color:var(--ink);
transition:border-color .2s ease;
}
.field input:focus,.field select:focus{outline:none;border-color:var(--ink)}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.tracker-result{
margin-top:20px;padding:18px;
background:var(--bg-alt);border-radius:10px;
display:none;
}
.tracker-result.show{display:block;animation:slideIn .35s ease}
@keyframes slideIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.tracker-result h4{font-family:Inter,sans-serif;font-size:14px;font-weight:600;margin-bottom:6px;color:var(--green)}
.tracker-result h4 span{color:var(--accent)}
.tracker-result p{font-size:13px;color:var(--ink-soft);line-height:1.55;margin:0}
.tracker-result .price-jump{display:flex;align-items:baseline;gap:8px;margin-top:8px;font-size:24px;font-family:'Playfair Display',serif}
.tracker-result .price-jump small{font-size:11px;font-family:Inter,sans-serif;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
/* ============================================
TESTIMONIALS
============================================ */
.testimonials-section{padding:96px 0}
.testimonials-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.testimonial{
background:#fff;border-radius:var(--radius);
padding:32px;box-shadow:var(--shadow);
display:flex;flex-direction:column;gap:18px;
transition:transform .3s ease;
}
.testimonial:hover{transform:translateY(-4px)}
.testimonial .stars{font-size:16px;color:var(--gold);letter-spacing:2px}
.testimonial blockquote{
font-family:'Playfair Display',serif;font-size:19px;
font-weight:400;font-style:italic;color:var(--ink);
line-height:1.5;flex:1;
}
.testimonial blockquote::before{content:"\201C";display:block;font-size:32px;color:var(--accent);line-height:.6;margin-bottom:6px}
.testimonial-author{display:flex;align-items:center;gap:14px;padding-top:18px;border-top:1px solid var(--line)}
.testimonial-author img{width:48px;height:48px;border-radius:50%;object-fit:cover}
.testimonial-author .name{font-weight:600;font-size:15px;color:var(--ink)}
.testimonial-author .meta{font-size:12px;color:var(--muted);margin-top:2px}
.testimonial .verified{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--green);font-weight:600;margin-top:4px;letter-spacing:.04em}
.testimonial .verified svg{width:12px;height:12px}
/* ============================================
GIFT GUIDES
============================================ */
.gifts-section{padding:96px 0;background:var(--bg-alt)}
.gift-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.gift-card{
position:relative;border-radius:var(--radius);overflow:hidden;
aspect-ratio:3/4;background:#fff;
transition:transform .35s ease;
cursor:pointer;
}
.gift-card:hover{transform:translateY(-6px)}
.gift-card img{width:100%;height:100%;object-fit:cover;transition:transform .8s ease}
.gift-card:hover img{transform:scale(1.06)}
.gift-card .badge-top{
position:absolute;top:16px;left:16px;
background:rgba(31,31,31,.85);color:#FBF8F3;
font-size:10px;letter-spacing:.14em;text-transform:uppercase;
padding:6px 12px;border-radius:99px;font-weight:600;
backdrop-filter:blur(6px);
}
.gift-card .info{
position:absolute;left:16px;right:16px;bottom:16px;
background:rgba(251,248,243,.96);
backdrop-filter:blur(8px);
border-radius:10px;padding:14px 16px;
}
.gift-card .info h4{font-size:16px;font-weight:600;margin-bottom:2px}
.gift-card .info span{font-size:12px;color:var(--muted)}
.gift-card .info .arrow{
position:absolute;right:14px;top:50%;transform:translateY(-50%);
width:30px;height:30px;border-radius:50%;background:var(--ink);color:#FBF8F3;
display:flex;align-items:center;justify-content:center;
transition:transform .25s ease;
}
.gift-card:hover .info .arrow{transform:translateY(-50%) translateX(2px);background:var(--accent)}
.gift-card .info .arrow svg{width:14px;height:14px}
/* ============================================
REWARDS
============================================ */
.rewards-section{padding:96px 0}
.rewards-card{
background:linear-gradient(135deg,#2C4A3E 0%,#1F3329 100%);
color:#FBF8F3;border-radius:var(--radius);
padding:72px 64px;
display:grid;grid-template-columns:1.2fr 1fr;gap:60px;align-items:center;
position:relative;overflow:hidden;
}
.rewards-card::before{
content:"";position:absolute;top:-100px;right:-50px;
width:300px;height:300px;border-radius:50%;
background:radial-gradient(circle,rgba(184,147,90,.25) 0%,transparent 70%);
}
.rewards-card .eyebrow{color:#E8B97B}
.rewards-card h2{font-size:clamp(32px,3.4vw,46px);color:#FBF8F3;margin:16px 0 20px;max-width:440px}
.rewards-card p{color:rgba(251,248,243,.75);line-height:1.7;max-width:480px;margin-bottom:32px}
.rewards-perks{display:flex;flex-direction:column;gap:18px;margin-bottom:32px}
.reward-perk{display:flex;gap:14px;align-items:center}
.reward-perk .dot{
width:36px;height:36px;border-radius:50%;
background:rgba(184,147,90,.18);color:#E8B97B;
display:flex;align-items:center;justify-content:center;flex-shrink:0;
font-family:'Playfair Display',serif;font-weight:600;
}
.reward-perk .lbl{font-size:15px;color:#FBF8F3}
.reward-perk .lbl small{display:block;font-size:12px;color:rgba(251,248,243,.6);font-weight:400;margin-top:2px}
.rewards-visual{position:relative;z-index:1}
.rewards-card-visual{
background:rgba(251,248,243,.06);border:1px solid rgba(251,248,243,.15);
border-radius:var(--radius);padding:32px;
backdrop-filter:blur(6px);
}
.rewards-card-visual .tier{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:#E8B97B;margin-bottom:8px}
.rewards-card-visual .pts{font-family:'Playfair Display',serif;font-size:64px;font-weight:600;line-height:1;color:#FBF8F3}
.rewards-card-visual .pts-label{font-size:13px;color:rgba(251,248,243,.6);margin-bottom:24px}
.rewards-progress{height:6px;background:rgba(251,248,243,.1);border-radius:99px;overflow:hidden;margin-bottom:8px}
.rewards-progress span{display:block;height:100%;background:linear-gradient(90deg,#E8B97B,#B8935A);border-radius:99px;width:68%;transition:width 1.2s ease}
.rewards-progress-meta{display:flex;justify-content:space-between;font-size:12px;color:rgba(251,248,243,.6)}
.rewards-card-visual .reward-cta{margin-top:24px;padding-top:24px;border-top:1px solid rgba(251,248,243,.15);text-align:center;font-size:12px;color:rgba(251,248,243,.7)}
/* ============================================
FAQ
============================================ */
.faq-section{padding:96px 0;background:var(--bg-alt)}
.faq-wrap{max-width:840px;margin:0 auto}
.faq-item{
border-bottom:1px solid var(--line);
background:transparent;
}
.faq-q{
width:100%;text-align:left;
padding:24px 0;
display:flex;justify-content:space-between;align-items:center;gap:20px;
font-family:'Playfair Display',serif;font-size:20px;font-weight:500;color:var(--ink);
transition:color .2s ease;
}
.faq-q:hover{color:var(--accent)}
.faq-icon{
width:36px;height:36px;border-radius:50%;
background:var(--bg);border:1px solid var(--line);
display:flex;align-items:center;justify-content:center;
flex-shrink:0;transition:all .3s ease;
}
.faq-icon svg{width:14px;height:14px;transition:transform .3s ease}
.faq-item.open .faq-icon{background:var(--ink);border-color:var(--ink);color:#FBF8F3;transform:rotate(45deg)}
.faq-a{
max-height:0;overflow:hidden;
transition:max-height .4s ease, padding .3s ease;
color:var(--ink-soft);line-height:1.75;font-size:15px;
}
.faq-item.open .faq-a{max-height:340px;padding:0 0 24px}
.faq-a p+ p{margin-top:12px}
/* ============================================
NEWSLETTER
============================================ */
.newsletter-section{padding:96px 0}
.newsletter-card{
background:var(--ink);color:#FBF8F3;border-radius:var(--radius);
padding:72px 60px;
display:grid;grid-template-columns:1.1fr 1fr;gap:60px;align-items:center;
position:relative;overflow:hidden;
}
.newsletter-card::after{
content:"";position:absolute;bottom:-100px;right:-100px;
width:300px;height:300px;border-radius:50%;
background:radial-gradient(circle,rgba(200,85,61,.2) 0%,transparent 70%);
}
.newsletter-copy .eyebrow{color:#E8B97B}
.newsletter-copy h2{font-size:clamp(30px,3vw,42px);color:#FBF8F3;margin:14px 0 18px}
.newsletter-copy p{color:rgba(251,248,243,.72);line-height:1.7;max-width:440px;margin-bottom:8px}
.newsletter-copy .perks{font-size:13px;color:rgba(251,248,243,.55);display:flex;gap:18px;flex-wrap:wrap;margin-top:14px}
.newsletter-copy .perks span::before{content:"✓ ";color:var(--accent);font-weight:700;margin-right:4px}
.newsletter-form{position:relative;z-index:1}
.newsletter-form input{
width:100%;padding:18px 22px;
background:rgba(251,248,243,.08);
border:1px solid rgba(251,248,243,.2);
border-radius:99px;color:#FBF8F3;font-size:15px;
transition:border-color .2s ease;margin-bottom:12px;
}
.newsletter-form input::placeholder{color:rgba(251,248,243,.4)}
.newsletter-form input:focus{outline:none;border-color:var(--accent)}
.newsletter-form button{width:100%;justify-content:center;background:var(--accent);color:#fff;padding:18px}
.newsletter-form button:hover{background:var(--accent-dark)}
.newsletter-success{
display:none;text-align:center;padding:30px;
background:rgba(184,147,90,.1);border:1px solid rgba(184,147,90,.3);
border-radius:10px;color:#E8B97B;
}
.newsletter-success.show{display:block;animation:slideIn .4s ease}
.newsletter-success svg{width:36px;height:36px;margin:0 auto 12px;display:block}
.newsletter-success strong{display:block;color:#FBF8F3;font-size:18px;font-family:'Playfair Display',serif;margin-bottom:6px}
.newsletter-success span{font-size:13px}
.newsletter-fineprint{font-size:11px;color:rgba(251,248,243,.4);text-align:center;margin-top:14px;line-height:1.5}
/* ============================================
FOOTER
============================================ */
.site-footer{
background:#181513;color:#FBF8F3;
padding:80px 0 30px;
font-size:14px;
}
.footer-top{
display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr 1fr;
gap:48px;padding-bottom:56px;
border-bottom:1px solid rgba(251,248,243,.1);
}
.footer-brand .logo-name{color:#FBF8F3;font-size:26px}
.footer-brand p{color:rgba(251,248,243,.6);margin:18px 0;line-height:1.7;max-width:280px;font-size:13px}
.footer-contact{display:flex;flex-direction:column;gap:10px;font-size:13px;color:rgba(251,248,243,.7);margin-bottom:24px}
.footer-contact div{display:flex;align-items:flex-start;gap:10px}
.footer-contact svg{width:14px;height:14px;margin-top:3px;flex-shrink:0;color:var(--accent)}
.social-row{display:flex;gap:10px}
.social-row a{
width:36px;height:36px;border-radius:50%;
background:rgba(251,248,243,.08);
display:flex;align-items:center;justify-content:center;
color:#FBF8F3;transition:all .2s ease;
}
.social-row a:hover{background:var(--accent);transform:translateY(-2px)}
.social-row svg{width:16px;height:16px}
.footer-col h5{
font-family:Inter,sans-serif;font-size:12px;letter-spacing:.16em;text-transform:uppercase;
color:#E8B97B;margin-bottom:20px;font-weight:600;
}
.footer-col ul{list-style:none;display:flex;flex-direction:column;gap:11px}
.footer-col a{color:rgba(251,248,243,.7);transition:color .2s ease;font-size:14px}
.footer-col a:hover{color:#FBF8F3}
.footer-bottom{
padding-top:30px;
display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:18px;
}
.footer-bottom small{color:rgba(251,248,243,.5);font-size:12px}
.footer-bottom .legal{display:flex;gap:24px;flex-wrap:wrap}
.footer-bottom .legal a{color:rgba(251,248,243,.5);font-size:12px;transition:color .2s ease}
.footer-bottom .legal a:hover{color:#FBF8F3}
.footer-bottom .payments{display:flex;gap:10px;align-items:center}
.footer-bottom .payments span{
font-size:11px;color:rgba(251,248,243,.5);
padding:5px 9px;border:1px solid rgba(251,248,243,.15);
border-radius:5px;letter-spacing:.05em;font-weight:600;
}
/* ============================================
SEARCH OVERLAY
============================================ */
.search-overlay{
position:fixed;inset:0;background:rgba(31,31,31,.5);
z-index:200;opacity:0;pointer-events:none;
transition:opacity .25s ease;
backdrop-filter:blur(4px);
}
.search-overlay.open{opacity:1;pointer-events:auto}
.search-modal{
background:var(--bg);max-width:680px;margin:0 auto;
margin-top:80px;border-radius:var(--radius);
padding:32px;transform:translateY(-20px);
transition:transform .3s ease;
}
.search-overlay.open .search-modal{transform:translateY(0)}
.search-modal .modal-close{
position:absolute;top:18px;right:18px;
width:32px;height:32px;border-radius:50%;
background:var(--bg-alt);
display:flex;align-items:center;justify-content:center;
color:var(--ink-soft);
}
.search-input-wrap{display:flex;align-items:center;gap:14px;border-bottom:2px solid var(--ink);padding-bottom:14px}
.search-input-wrap svg{width:24px;height:24px;color:var(--ink-soft)}
.search-input-wrap input{
flex:1;border:none;background:transparent;font-size:22px;
font-family:'Playfair Display',serif;color:var(--ink);
}
.search-input-wrap input:focus{outline:none}
.search-modal .quick-search{margin-top:24px}
.search-modal .quick-search h6{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:12px;font-weight:600}
.search-modal .quick-tags{display:flex;flex-wrap:wrap;gap:8px}
.search-modal .quick-tags a{
padding:7px 14px;background:var(--bg-alt);border-radius:99px;
font-size:13px;color:var(--ink-soft);transition:all .2s ease;
}
.search-modal .quick-tags a:hover{background:var(--ink);color:#FBF8F3}
/* ============================================
RESPONSIVE
============================================ */
@media (max-width:1024px){
.hero-grid{grid-template-columns:1fr;gap:32px}
.hero-visual{max-width:520px;margin:0 auto}
.value-grid{grid-template-columns:repeat(2,1fr)}
.product-grid{grid-template-columns:repeat(3,1fr)}
.category-grid{grid-template-columns:repeat(3,1fr)}
.feature-banner{grid-template-columns:1fr;min-height:auto}
.feature-banner-img{aspect-ratio:16/9}
.feature-banner-copy{padding:48px 40px}
.sale-content{grid-template-columns:1fr;gap:48px;text-align:center}
.sale-copy p{margin:0 auto 28px}
.countdown{justify-content:center}
.sale-floating-tag{top:20px;right:20px}
.tracker-wrap{grid-template-columns:1fr;gap:40px}
.testimonials-grid{grid-template-columns:1fr}
.gift-grid{grid-template-columns:repeat(2,1fr)}
.rewards-card{grid-template-columns:1fr;padding:48px 36px;gap:36px}
.newsletter-card{grid-template-columns:1fr;padding:48px 36px;gap:36px}
.footer-top{grid-template-columns:1fr 1fr;gap:36px}
}
@media (max-width:768px){
.announce-track{gap:24px;font-size:12px}
.menu-toggle{display:flex;align-items:center;justify-content:center}
.menu-toggle svg{width:22px;height:22px}
.main-nav{
position:fixed;top:0;right:0;bottom:0;
width:280px;background:var(--bg);
flex-direction:column;align-items:flex-start;
padding:80px 28px 28px;gap:20px;
transform:translateX(100%);transition:transform .3s ease;
box-shadow:-10px 0 30px rgba(31,31,31,.1);
z-index:99;
}
.main-nav.open{transform:translateX(0)}
.main-nav a{font-size:18px;width:100%;padding:10px 0;border-bottom:1px solid var(--line)}
.main-nav a::after{display:none}
.nav-bar{grid-template-columns:auto 1fr auto;gap:8px}
.logo-text{display:none}
.nav-actions .icon-btn:not(.cart-btn){display:none}
.hero{padding:24px 0 56px}
.hero-stats{gap:24px;flex-wrap:wrap}
.hero-stat .num{font-size:24px}
.product-grid{grid-template-columns:repeat(2,1fr);gap:14px}
.category-grid{grid-template-columns:repeat(2,1fr)}
.section{padding:64px 0}
.section-head{margin-bottom:32px}
.gift-grid{grid-template-columns:1fr}
.footer-top{grid-template-columns:1fr;gap:36px}
.footer-bottom{flex-direction:column;align-items:flex-start}
.countdown{gap:8px}
.countdown-cell{padding:10px 12px;min-width:60px}
.countdown-cell .num{font-size:24px}
}
@media (max-width:480px){
.container{padding:0 18px}
.hero-card-float{left:-10px;bottom:10px;max-width:200px;padding:10px 14px}
.hero-card-float .info{font-size:12px}
.hero-badge{width:90px;height:90px;font-size:10px}
.hero-badge strong{font-size:18px}
.product-grid{grid-template-columns:1fr 1fr}
.value-grid{grid-template-columns:1fr}
}
/* ============================================
UTILITIES
============================================ */
.fade-in{opacity:0;transform:translateY(20px);transition:opacity .7s ease, transform .7s ease}
.fade-in.visible{opacity:1;transform:translateY(0)}
</style>
</head>
<body>
<!-- ============================================
ANNOUNCEMENT BAR
============================================ -->
<div class="announce" id="announce">
<div class="announce-track">
<span><strong>Free shipping</strong> on orders over $75</span>
<span>Use code <strong>MERCATO15</strong> for 15% off your first order</span>
<span><strong>Easy returns</strong> within 60 days</span>
</div>
<button class="announce-close" aria-label="Dismiss announcement" onclick="document.getElementById('announce').style.display='none'">×</button>
</div>
<!-- ============================================
HEADER
============================================ -->
<header class="site-header" id="siteHeader">
<div class="container">
<div class="nav-bar">
<a href="#" class="logo">
<div class="logo-mark">M</div>
<div class="logo-text">
<span class="logo-name">Mercato</span>
<span class="logo-tag">Curated Marketplace</span>
</div>
</a>
<nav class="main-nav" id="mainNav">
<a href="#new">New Arrivals <span class="nav-badge">NEW</span></a>
<a href="#bestsellers">Best Sellers</a>
<a href="#categories">Categories</a>
<a href="#gifts">Gift Guides</a>
<a href="#sale" class="sale-link">Sale</a>
<a href="#rewards">Rewards</a>
<a href="#help">Help</a>
</nav>
<div class="nav-actions">
<button class="icon-btn" aria-label="Search" onclick="openSearch()">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
</button>
<button class="icon-btn" aria-label="Account">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 4-7 8-7s8 3 8 7"/></svg>
</button>
<button class="icon-btn" aria-label="Wishlist">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
</button>
<button class="icon-btn cart-btn" aria-label="Cart" id="cartBtn">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M6 6h15l-1.5 9h-12z"/><circle cx="9" cy="20" r="1.5"/><circle cx="18" cy="20" r="1.5"/><path d="M6 6 5 3H2"/></svg>
<span class="cart-count" id="cartCount">0</span>
</button>
<button class="icon-btn menu-toggle" aria-label="Menu" onclick="toggleMenu()">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
</button>
</div>
</div>
</div>
</header>
<!-- ============================================
HERO
============================================ -->
<section class="hero">
<div class="container">
<div class="hero-grid">
<div class="hero-copy fade-in">
<span class="eyebrow">Autumn Collection · 2026</span>
<h1>Considered goods, <em>quietly made</em>, joyfully worn.</h1>
<p class="lead">Mercato brings together a rotating edit of home, fashion, and everyday objects from over 240 independent makers. Each piece is chosen by our team for craft, longevity, and the way it improves a routine.</p>
<div class="hero-cta">
<a href="#new" class="btn btn-primary">Shop the Collection
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</a>
<a href="#categories" class="btn btn-secondary">Browse Categories</a>
</div>
<div class="hero-stats">
<div class="hero-stat">
<div class="num">240+</div>
<div class="lbl">Independent Brands</div>
</div>
<div class="hero-stat">
<div class="num">4.9★</div>
<div class="lbl">Avg. Customer Rating</div>
</div>
<div class="hero-stat">
<div class="num">60</div>
<div class="lbl">Day Easy Returns</div>
</div>
</div>
</div>
<div class="hero-visual fade-in">
<div class="hero-img-main">
<img src="https://picsum.photos/seed/mercato-hero-living-room/800/1000" alt="Mercato curated collection in a warm modern interior" loading="eager">
</div>
<div class="hero-badge">
Just<br>Arrived<strong>40+</strong>
</div>
<div class="hero-card-float">
<div class="pf">⚡</div>
<div class="info">
<strong>Price drop alert</strong>
<span>3 items in your wishlist just dropped</span>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
VALUE PROPS
============================================ -->
<section class="value-props">
<div class="container">
<div class="value-grid">
<div class="value-card">
<div class="value-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M3 7h13l5 5v5h-2"/><circle cx="7.5" cy="17.5" r="2.5"/><circle cx="17.5" cy="17.5" r="2.5"/><path d="M9 17V7"/></svg></div>
<div>
<h4>Free Shipping Over $75</h4>
<p>Carbon-offset delivery on every order, with no minimum surprises at checkout.</p>
</div>
</div>
<div class="value-card">
<div class="value-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M3 12a9 9 0 1 0 3-6.7L3 8"/><path d="M3 3v5h5"/></svg></div>
<div>
<h4>60-Day Easy Returns</h4>
<p>Try it at home with our no-questions-asked returns policy. Print a label in seconds.</p>
</div>
</div>
<div class="value-card">
<div class="value-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><rect x="3" y="6" width="18" height="13" rx="2"/><path d="M3 10h18M7 15h4"/></svg></div>
<div>
<h4>Secure Checkout</h4>
<p>Shop with confidence using encrypted payments, Apple Pay, Klarna, and major credit cards.</p>
</div>
</div>
<div class="value-card">
<div class="value-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M21 11.5a8.4 8.4 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.4 8.4 0 0 1-3.8-.9L3 21l1.9-5.7a8.4 8.4 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.4 8.4 0 0 1 3.8-.9h.5a8.5 8.5 0 0 1 8 8v.5z"/></svg></div>
<div>
<h4>Real Human Support</h4>
<p>Our team replies in under 4 minutes during business hours — no chatbots, just people.</p>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
NEW ARRIVALS
============================================ -->
<section class="section" id="new">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Just Landed</span>
<h2>New arrivals worth a closer look</h2>
<p>This week's hand-picked drops from our makers — refreshed every Tuesday and Friday.</p>
</div>
<a href="#" class="link-arrow">View all new arrivals
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</a>
</div>
<div class="product-grid">
<article class="product-card">
<div class="product-img">
<span class="product-badge new">New</span>
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/2C4A3E/FBF8F3?text=Aurora+Linen+Dress&font=playfair display" alt="Aurora Linen Dress">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Maison Vela</span>
<h3 class="product-name">Aurora Linen Dress</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 218 reviews</div>
<div class="product-price"><span class="price-now">$148</span></div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<span class="product-badge new">New</span>
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/C8553D/FBF8F3?text=Heritage+Leather+Tote&font=playfair display" alt="Heritage Leather Tote">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Otto & Oak</span>
<h3 class="product-name">Heritage Leather Tote</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 412 reviews</div>
<div class="product-price"><span class="price-now">$289</span></div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<span class="product-badge low">Low Stock</span>
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/B8935A/FBF8F3?text=Cedar+Wood+Diffuser&font=playfair display" alt="Cedar Wood Diffuser">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Forêt Studio</span>
<h3 class="product-name">Cedar Wood Diffuser</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 96 reviews</div>
<div class="product-price"><span class="price-now">$58</span></div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<span class="product-badge new">New</span>
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/1F1F1F/FBF8F3?text=Stoneware+Coffee+Set&font=playfair display" alt="Stoneware Coffee Set">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Kiln Atelier</span>
<h3 class="product-name">Stoneware Coffee Set</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 142 reviews</div>
<div class="product-price"><span class="price-now">$124</span></div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/6B6358/FBF8F3?text=Olive+Branch+Throw&font=playfair display" alt="Olive Branch Throw">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Loomwell</span>
<h3 class="product-name">Olive Branch Throw</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 88 reviews</div>
<div class="product-price"><span class="price-now">$186</span></div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<span class="product-badge sale">-25%</span>
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/E8B97B/1F1F1F?text=Brass+Pendant+Lamp&font=playfair display" alt="Brass Pendant Lamp">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Lumen Objects</span>
<h3 class="product-name">Brass Pendant Lamp</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 274 reviews</div>
<div class="product-price">
<span class="price-now">$214</span>
<span class="price-was">$285</span>
<span class="price-off">Save $71</span>
</div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/2C4A3E/FBF8F3?text=Heirloom+Wool+Blanket&font=playfair display" alt="Heirloom Wool Blanket">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Loomwell</span>
<h3 class="product-name">Heirloom Wool Blanket</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 156 reviews</div>
<div class="product-price"><span class="price-now">$245</span></div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<span class="product-badge new">New</span>
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/A6432F/FBF8F3?text=Ceramic+Pour-Over+Kit&font=playfair display" alt="Ceramic Pour-Over Kit">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Kiln Atelier</span>
<h3 class="product-name">Ceramic Pour-Over Kit</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 321 reviews</div>
<div class="product-price"><span class="price-now">$92</span></div>
</div>
</article>
</div>
</div>
</section>
<!-- ============================================
FEATURED COLLECTION BANNER
============================================ -->
<section class="section" style="padding-top:32px">
<div class="container">
<div class="feature-banner">
<div class="feature-banner-img">
<img src="https://picsum.photos/seed/mercato-kitchen-warm/900/700" alt="Warm kitchen with curated ceramic pieces">
</div>
<div class="feature-banner-copy">
<span class="eyebrow">Featured Edit</span>
<h2>The Slow Kitchen — tableware for unhurried mornings.</h2>
<p>Hand-thrown ceramics, hand-forged cutlery, and stoneware mugs from six small studios across Portugal, Japan, and the American South. Pieces built to live on your shelf long after the trend cycle moves on.</p>
<a href="#" class="btn">Shop the Slow Kitchen
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</a>
</div>
</div>
</div>
</section>
<!-- ============================================
BEST SELLERS
============================================ -->
<section class="section" id="bestsellers">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Top Rated</span>
<h2>Best sellers our community keeps coming back for</h2>
<p>These are the pieces our shoppers rate highest, review most, and reorder for friends. Limited restocks land every Monday.</p>
</div>
<a href="#" class="link-arrow">See all best sellers
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</a>
</div>
<div class="product-grid">
<article class="product-card">
<div class="product-img">
<span class="product-badge">#1 Best Seller</span>
<button class="wish-btn active" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/2C4A3E/FBF8F3?text=Vintage+Glass+Decanter&font=playfair display" alt="Vintage Glass Decanter">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Vela Glassworks</span>
<h3 class="product-name">Vintage Glass Decanter</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 1,284 reviews</div>
<div class="product-price"><span class="price-now">$78</span></div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/C8553D/FBF8F3?text=Linen+Apron+-+Sand&font=playfair display" alt="Linen Apron in Sand">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Maison Vela</span>
<h3 class="product-name">Linen Apron — Sand</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 942 reviews</div>
<div class="product-price"><span class="price-now">$64</span></div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<span class="product-badge sale">-30%</span>
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/1F1F1F/FBF8F3?text=Reclaimed+Walnut+Board&font=playfair display" alt="Reclaimed Walnut Board">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Otto & Oak</span>
<h3 class="product-name">Reclaimed Walnut Board</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 612 reviews</div>
<div class="product-price">
<span class="price-now">$84</span>
<span class="price-was">$120</span>
<span class="price-off">Save $36</span>
</div>
</div>
</article>
<article class="product-card">
<div class="product-img">
<button class="wish-btn" onclick="toggleWish(this)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg></button>
<img src="https://placehold.co/400x500/8B7E72/FBF8F3?text=Smoked+Glass+Vase&font=playfair display" alt="Smoked Glass Vase">
<button class="quick-add" onclick="addToCart()">+ Add to Cart</button>
</div>
<div class="product-meta">
<span class="product-cat">Vela Glassworks</span>
<h3 class="product-name">Smoked Glass Vase</h3>
<div class="product-rating"><span class="stars">★★★★★</span> 488 reviews</div>
<div class="product-price"><span class="price-now">$96</span></div>
</div>
</article>
</div>
</div>
</section>
<!-- ============================================
CATEGORIES
============================================ -->
<section class="categories-section" id="categories">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Browse the Marketplace</span>
<h2>Shop by category</h2>
<p>From pantry staples to statement furniture — every category is curated by a category lead who knows the makers personally.</p>
</div>
<a href="#" class="link-arrow">View all categories
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</a>
</div>
<div class="category-grid">
<a href="#" class="category-card">
<img src="https://picsum.photos/seed/cat-home/400/500" alt="Home & Living">
<div class="overlay">
<h3>Home & Living</h3>
<span>Ceramics · Textiles · Decor</span>
<div class="count">412 products</div>
</div>
</a>
<a href="#" class="category-card">
<img src="https://picsum.photos/seed/cat-fashion/400/500" alt="Fashion & Accessories">
<div class="overlay">
<h3>Fashion</h3>
<span>Bags · Jewelry · Ready-to-wear</span>
<div class="count">286 products</div>
</div>
</a>
<a href="#" class="category-card">
<img src="https://picsum.photos/seed/cat-beauty/400/500" alt="Beauty & Wellness">
<div class="overlay">
<h3>Beauty & Wellness</h3>
<span>Skincare · Fragrance · Bath</span>
<div class="count">198 products</div>
</div>
</a>
<a href="#" class="category-card">
<img src="https://picsum.photos/seed/cat-kitchen/400/500" alt="Kitchen & Dining">
<div class="overlay">
<h3>Kitchen</h3>
<span>Tableware · Cookware · Tools</span>
<div class="count">244 products</div>
</div>
</a>
<a href="#" class="category-card">
<img src="https://picsum.photos/seed/cat-outdoor/400/500" alt="Outdoor & Garden">
<div class="overlay">
<h3>Outdoor</h3>
<span>Garden · Picnic · Travel</span>
<div class="count">126 products</div>
</div>
</a>
<a href="#" class="category-card">
<img src="https://picsum.photos/seed/cat-gifts/400/500" alt="Gifts & Stationery">
<div class="overlay">
<h3>Gifts</h3>
<span>Gift Cards · Sets · Cards</span>
<div class="count">168 products</div>
</div>
</a>
</div>
</div>
</section>
<!-- ============================================
SALE SECTION
============================================ -->
<section class="sale-section" id="sale">
<div class="container">
<div class="sale-content">
<div class="sale-copy">
<span class="eyebrow" style="color:#E8B97B">Clearance Event</span>
<h2 class="sale-headline">End of <em>season</em> sale. Up to <span class="sale-discount">60% OFF</span></h2>
<p>Our biggest markdown of the year. We're clearing the last of our autumn edit to make room for spring makers. Use code <strong style="color:#E8B97B">FINAL60</strong> at checkout for an additional 10% off sale items. No promo code stacking needed — savings apply automatically.</p>
<div class="countdown" id="countdown">
<div class="countdown-cell"><div class="num" id="cd-days">02</div><div class="lbl">Days</div></div>
<div class="countdown-cell"><div class="num" id="cd-hours">14</div><div class="lbl">Hours</div></div>
<div class="countdown-cell"><div class="num" id="cd-mins">36</div><div class="lbl">Mins</div></div>
<div class="countdown-cell"><div class="num" id="cd-secs">22</div><div class="lbl">Secs</div></div>
</div>
<a href="#" class="btn btn-accent">Shop the Sale
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</a>
</div>
<div class="sale-visual">
<div class="sale-img">
<img src="https://picsum.photos/seed/mercato-sale-flatlay/700/900" alt="Sale flatlay with curated pieces">
</div>
<div class="sale-floating-tag">UP<br>TO<small>60% Off</small></div>
</div>
</div>
</div>
</section>
<!-- ============================================
PRICE TRACKER (INTERACTIVE)
============================================ -->
<section class="tracker-section" id="tracker">
<div class="container">
<div class="tracker-wrap">
<div class="tracker-copy">
<span class="eyebrow">Smart Shopping</span>
<h2>Set it. Forget it. We'll let you know when the price drops.</h2>
<p>Wishlist items can move quickly — restocks, markdowns, and seasonal clearances. Our price tracker watches your favorites 24/7 and emails you the moment a price drops below your target, so you never overpay on a piece you love.</p>
<div class="tracker-features">
<div class="tracker-feat">
<div class="check"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="m5 12 5 5L20 7"/></svg></div>
<p><strong>Real-time price monitoring</strong>across all 240+ brands on Mercato, refreshed every 15 minutes.</p>
</div>
<div class="tracker-feat">
<div class="check"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="m5 12 5 5L20 7"/></svg></div>
<p><strong>Custom alert thresholds</strong>set your target price per item — we'll wait for the right moment.</p>
</div>
<div class="tracker-feat">
<div class="check"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="m5 12 5 5L20 7"/></svg></div>
<p><strong>Stock & restock alerts</strong>get notified when sold-out favorites return in your size or color.</p>
</div>
</div>
</div>
<div class="tracker-card">
<h3>Add to price tracker</h3>
<p class="sub">Try it now — enter any product URL or paste a product name to see how it works.</p>
<form class="tracker-form" onsubmit="trackPrice(event)">
<div class="field">
<label for="product-name">Product name or URL</label>
<input type="text" id="product-name" placeholder="e.g. Aurora Linen Dress" required>
</div>
<div class="field-row">
<div class="field">
<label for="current-price">Current price ($)</label>
<input type="number" id="current-price" placeholder="148" min="1" required>
</div>
<div class="field">
<label for="target-price">Target price ($)</label>
<input type="number" id="target-price" placeholder="120" min="1" required>
</div>
</div>
<div class="field">
<label for="alert-email">Email for alerts</label>
<input type="email" id="alert-email" placeholder="you@example.com" required>
</div>
<button type="submit" class="btn btn-primary" style="width:100%;justify-content:center">Start Tracking
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</button>
</form>
<div class="tracker-result" id="trackerResult">
<h4>✓ <span id="trackerStatus">You're tracking</span> this item</h4>
<p id="trackerMsg">We'll email you the moment the price falls below your target. In the meantime, here's what we found:</p>
<div class="price-jump">
<small>Current best price:</small>
<span id="trackerPrice">$148</span>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
TESTIMONIALS
============================================ -->
<section class="testimonials-section">
<div class="container">
<div class="section-head center">
<span class="eyebrow">Customer Reviews</span>
<h2>Loved by 86,000+ shoppers</h2>
<p>From quick gifts to wedding registries — here's what our community is saying about their Mercato orders.</p>
</div>
<div class="testimonials-grid">
<article class="testimonial">
<div class="stars">★★★★★</div>
<blockquote>The Aurora Linen Dress arrived wrapped in actual tissue paper with a handwritten thank-you note. The dress itself is the kind of piece I'll wear for years — breezy, well-cut, and the color is even better in person. Already eyeing two more pieces from Maison Vela.</blockquote>
<div class="testimonial-author">
<img src="https://i.pravatar.cc/100?u=amelia-r" alt="Amelia Rodriguez">
<div>
<div class="name">Amelia Rodriguez</div>
<div class="meta">Verified buyer · Brooklyn, NY</div>
<div class="verified"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="m5 12 5 5L20 7"/></svg> Verified purchase</div>
</div>
</div>
</article>
<article class="testimonial">
<div class="stars">★★★★★</div>
<blockquote>I built my entire wedding registry through Mercato. Their concierge team helped me swap pieces, track duplicates, and coordinate timing for out-of-state guests. Five months later, I'm still getting compliments on the tableware. Worth every penny.</blockquote>
<div class="testimonial-author">
<img src="https://i.pravatar.cc/100?u=james-l" alt="James Lin">
<div>
<div class="name">James Lin</div>
<div class="meta">Verified buyer · Portland, OR</div>
<div class="verified"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="m5 12 5 5L20 7"/></svg> Verified purchase</div>
</div>
</div>
</article>
<article class="testimonial">
<div class="stars">★★★★★</div>
<blockquote>The price tracker genuinely saved me $40 on the Brass Pendant Lamp — I added it to my wishlist in May and got the email alert the moment it went on sale. Customer support replied in three minutes when I had a sizing question. This is what online shopping should feel like.</blockquote>
<div class="testimonial-author">
<img src="https://i.pravatar.cc/100?u=priya-s" alt="Priya Shah">
<div>
<div class="name">Priya Shah</div>
<div class="meta">Verified buyer · Austin, TX</div>
<div class="verified"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="m5 12 5 5L20 7"/></svg> Verified purchase</div>
</div>
</div>
</article>
</div>
</div>
</section>
<!-- ============================================
GIFT GUIDES
============================================ -->
<section class="gifts-section" id="gifts">
<div class="container">
<div class="section-head">
<div>
<span class="eyebrow">Holiday Edit</span>
<h2>Gift guides for every kind of person on your list</h2>
<p>Stop second-guessing. Our editors curate by recipient, occasion, and budget — all with same-day gift wrap and a printable card included at no charge.</p>
</div>
<a href="#" class="link-arrow">All gift guides
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</a>
</div>
<div class="gift-grid">
<article class="gift-card">
<span class="badge-top">Under $50</span>
<img src="https://picsum.photos/seed/gift-stock/500/700" alt="Stocking stuffers">
<div class="info">
<h4>The Stocking Stuffer Edit</h4>
<span>24 small-batch picks</span>
<div class="arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M13 5l7 7-7 7"/></svg></div>
</div>
</article>
<article class="gift-card">
<span class="badge-top">For Her</span>
<img src="https://picsum.photos/seed/gift-her/500/700" alt="Gifts for her">
<div class="info">
<h4>Gifts She'll Actually Use</h4>
<span>36 thoughtful finds</span>
<div class="arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M13 5l7 7-7 7"/></svg></div>
</div>
</article>
<article class="gift-card">
<span class="badge-top">For Him</span>
<img src="https://picsum.photos/seed/gift-him/500/700" alt="Gifts for him">
<div class="info">
<h4>For the Guy Who Has Everything</h4>
<span>28 understated picks</span>
<div class="arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M13 5l7 7-7 7"/></svg></div>
</div>
</article>
<article class="gift-card">
<span class="badge-top">For the Home</span>
<img src="https://picsum.photos/seed/gift-home/500/700" alt="Home gifts">
<div class="info">
<h4>Move-In Ready Housewarming</h4>
<span>19 cozy essentials</span>
<div class="arrow"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M13 5l7 7-7 7"/></svg></div>
</div>
</article>
</div>
</div>
</section>
<!-- ============================================
REWARDS
============================================ -->
<section class="rewards-section" id="rewards">
<div class="container">
<div class="rewards-card">
<div class="rewards-copy">
<span class="eyebrow">Mercato Rewards</span>
<h2>Earn 5% back on every order — plus birthday gifts, early sale access, and free shipping.</h2>
<p>Our loyalty program is free to join and pays you back in real ways. Points never expire, and tier upgrades happen automatically based on your rolling 12-month spend.</p>
<div class="rewards-perks">
<div class="reward-perk">
<div class="dot">1</div>
<div class="lbl">Member<small>5% back on every order · Free shipping over $50</small></div>
</div>
<div class="reward-perk">
<div class="dot">2</div>
<div class="lbl">Insider<small>Free shipping on everything · Early access to new drops</small></div>
</div>
<div class="reward-perk">
<div class="dot">3</div>
<div class="lbl">Patron<small>Personal stylist consults · Birthday gift box · VIP sale previews</small></div>
</div>
</div>
<a href="#" class="btn" style="background:var(--accent);color:#fff">Join Rewards — It's Free
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</a>
</div>
<div class="rewards-visual">
<div class="rewards-card-visual">
<div class="tier">Patron Member</div>
<div class="pts">2,840</div>
<div class="pts-label">Points available · ≈ $284 to spend</div>
<div class="rewards-progress"><span style="width:68%"></span></div>
<div class="rewards-progress-meta">
<span>2,840 / 4,200</span>
<span>1,360 to Insider</span>
</div>
<div class="reward-cta">Reach Insider by spending <strong style="color:#E8B97B">$1,360 more</strong> this year to unlock unlimited free shipping.</div>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
FAQ
============================================ -->
<section class="faq-section" id="help">
<div class="container">
<div class="faq-wrap">
<div class="section-head" style="margin-bottom:32px;flex-direction:column;align-items:center;text-align:center">
<span class="eyebrow">Frequently Asked</span>
<h2>Help & common questions</h2>
</div>
<div class="faq-item">
<button class="faq-q" onclick="toggleFaq(this)">How long does shipping take?
<span class="faq-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 5v14M5 12h14"/></svg></span>
</button>
<div class="faq-a">
<p>Standard shipping arrives in 3–6 business days within the contiguous US and is free on orders over $75. Expedited (2-day) and overnight options are available at checkout for most metro areas. International orders ship via DHL Express and typically arrive in 5–10 business days depending on customs.</p>
<p>You'll receive a tracking link via email as soon as your order leaves our warehouse in Brooklyn. Most orders ship within 24 hours.</p>
</div>
</div>
<div class="faq-item">
<button class="faq-q" onclick="toggleFaq(this)">What is your return policy?
<span class="faq-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 5v14M5 12h14"/></svg></span>
</button>
<div class="faq-a">
<p>Every order comes with 60 days to decide. If something isn't right, start a return from your account dashboard and we'll email a prepaid label within seconds. Items must be unused with original tags; we refund to the original payment method within 5 business days of receiving the return.</p>
<p>Final sale items, personalized pieces, and gift cards are non-returnable but covered by our quality guarantee.</p>
</div>
</div>
<div class="faq-item">
<button class="faq-q" onclick="toggleFaq(this)">How do I use a promo code at checkout?
<span class="faq-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 5v14M5 12h14"/></svg></span>
</button>
<div class="faq-a">
<p>Add your items to cart and head to checkout. Look for the "Promo code or gift card" field on the right-hand summary panel — paste your code there and click Apply. The discount will adjust your order total instantly. Only one code can be used per order unless otherwise stated.</p>
<p>Members on the Insider and Patron tiers automatically get our best available code applied at checkout, no manual entry required.</p>
</div>
</div>
<div class="faq-item">
<button class="faq-q" onclick="toggleFaq(this)">Can I edit or cancel my order after placing it?
<span class="faq-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 5v14M5 12h14"/></svg></span>
</button>
<div class="faq-a">
<p>We process orders fast — usually within an hour — so the best move is to reach out to our support team immediately at help@mercato.shop or via the live chat in the bottom corner. If your order hasn't shipped yet, we'll do our best to update the address, swap a size, or cancel and refund.</p>
<p>Once an order ships, edits aren't possible, but you can always initiate a return once it arrives.</p>
</div>
</div>
<div class="faq-item">
<button class="faq-q" onclick="toggleFaq(this)">Are Mercato products ethically sourced?
<span class="faq-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 5v14M5 12h14"/></svg></span>
</button>
<div class="faq-a">
<p>Every brand on Mercato is independently vetted by our category leads. We require documentation of fair-wage production, transparent supply chains, and materials certifications (GOTS organic, FSC wood, recycled steel) where applicable. Roughly 70% of our assortment is made within 500 miles of its point of sale.</p>
<p>We publish a yearly impact report — you can read it in full at mercato.shop/impact.</p>
</div>
</div>
<div class="faq-item">
<button class="faq-q" onclick="toggleFaq(this)">Do you offer gift wrapping?
<span class="faq-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 5v14M5 12h14"/></svg></span>
</button>
<div class="faq-a">
<p>Yes — every order includes complimentary Mercato tissue and a kraft mailer. For $6 per item, you can upgrade to our premium gift wrap, which includes a hand-tied ribbon, a gift card printed with your message, and optional dried floral accent. Select the gift wrap option in your cart to add it.</p>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
NEWSLETTER
============================================ -->
<section class="newsletter-section">
<div class="container">
<div class="newsletter-card">
<div class="newsletter-copy">
<span class="eyebrow">Subscribe & Save</span>
<h2>Get 15% off your first order, plus first dibs on every new drop.</h2>
<p>Join 124,000 readers of our weekly edit. We'll send you new arrivals, restock alerts, sale announcements, and the occasional shoppable recipe.</p>
<div class="perks">
<span>15% off welcome offer</span>
<span>Early sale access</span>
<span>Weekly edit</span>
<span>Unsubscribe anytime</span>
</div>
</div>
<div class="newsletter-form">
<form id="newsletterForm" onsubmit="subscribe(event)">
<input type="email" placeholder="Enter your email address" required>
<button type="submit" class="btn btn-accent">Subscribe & Get 15% Off
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M13 5l7 7-7 7"/></svg>
</button>
</form>
<div class="newsletter-success" id="newsletterSuccess">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M21 11.5a8.4 8.4 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.4 8.4 0 0 1-3.8-.9L3 21l1.9-5.7a8.4 8.4 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.4 8.4 0 0 1 3.8-.9h.5a8.5 8.5 0 0 1 8 8v.5z" stroke="#E8B97B"/></svg>
<strong>You're in. Welcome to Mercato.</strong>
<span>Check your inbox — your code <strong style="color:#E8B97B">WELCOME15</strong> is on its way.</span>
</div>
<div class="newsletter-fineprint">By subscribing, you agree to our Privacy Policy. We send 1–2 emails per week and never share your address.</div>
</div>
</div>
</div>
</section>
<!-- ============================================
FOOTER
============================================ -->
<footer class="site-footer">
<div class="container">
<div class="footer-top">
<div class="footer-brand">
<div class="logo">
<div class="logo-mark">M</div>
<div class="logo-text">
<span class="logo-name">Mercato</span>
<span class="logo-tag" style="color:rgba(251,248,243,.5)">Curated Marketplace</span>
</div>
</div>
<p>A curated online marketplace bringing together 240+ independent makers in home, fashion, kitchen, and gift essentials — shipped carbon-neutral from Brooklyn, NY.</p>
<div class="footer-contact">
<div><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
<span>240 Kent Ave, Brooklyn, NY 11249</span>
</div>
<div><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 6 12 13 2 6"/><rect x="2" y="6" width="20" height="14" rx="2"/></svg>
<span>help@mercato.shop</span>
</div>
<div><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z"/></svg>
<span>+1 (646) 555-0142 · Mon–Fri, 9am–7pm ET</span>
</div>
</div>
<div class="social-row">
<a href="#" aria-label="Instagram"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><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=".5" fill="currentColor"/></svg></a>
<a href="#" aria-label="Pinterest"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="10"/><path d="M8 12c0-2 1-4 3-4 2 0 3 1 3 3s-1 3-2 4l-1 5"/></svg></a>
<a href="#" aria-label="TikTok"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M16 4v8a4 4 0 1 1-4-4"/><path d="M16 4c0 2 1 4 4 4"/></svg></a>
<a href="#" aria-label="YouTube"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><rect x="3" y="6" width="18" height="12" rx="3"/><polygon points="10,9 16,12 10,15" fill="currentColor" stroke="none"/></svg></a>
<a href="#" aria-label="Twitter"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M22 5.8c-.7.3-1.5.6-2.4.7.9-.5 1.5-1.3 1.8-2.3-.8.5-1.7.8-2.7 1A4.2 4.2 0 0 0 11.5 9c0 .3 0 .6.1.9-3.5-.2-6.7-1.9-8.8-4.5-.4.6-.6 1.3-.6 2.1 0 1.5.7 2.8 1.9 3.5-.7 0-1.3-.2-1.9-.5 0 2 1.5 3.7 3.4 4.1-.4.1-.8.2-1.2.2-.3 0-.6 0-.8-.1.6 1.7 2.2 3 4 3-1.5 1.2-3.4 1.9-5.5 1.9-.4 0-.7 0-1-.1 1.9 1.2 4.1 1.9 6.5 1.9 7.8 0 12.1-6.5 12.1-12.1v-.5c.8-.6 1.5-1.4 2.1-2.2z"/></svg></a>
</div>
</div>
<div class="footer-col">
<h5>Shop</h5>
<ul>
<li><a href="#new">New Arrivals</a></li>
<li><a href="#bestsellers">Best Sellers</a></li>
<li><a href="#sale">Sale & Clearance</a></li>
<li><a href="#categories">All Categories</a></li>
<li><a href="#gifts">Gift Guides</a></li>
<li><a href="#">Gift Cards</a></li>
</ul>
</div>
<div class="footer-col">
<h5>Account</h5>
<ul>
<li><a href="#">Sign In / Register</a></li>
<li><a href="#">Order History</a></li>
<li><a href="#">Wishlist</a></li>
<li><a href="#">Track an Order</a></li>
<li><a href="#rewards">Mercato Rewards</a></li>
<li><a href="#">Refer a Friend</a></li>
</ul>
</div>
<div class="footer-col">
<h5>Support</h5>
<ul>
<li><a href="#help">Help Center</a></li>
<li><a href="#help">Shipping & Delivery</a></li>
<li><a href="#help">Returns & Exchanges</a></li>
<li><a href="#">Size Guide</a></li>
<li><a href="#">Contact Us</a></li>
<li><a href="#">Live Chat</a></li>
</ul>
</div>
<div class="footer-col">
<h5>Company</h5>
<ul>
<li><a href="#">Our Story</a></li>
<li><a href="#">Maker Directory</a></li>
<li><a href="#">Sustainability</a></li>
<li><a href="#">Press & Media</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Become a Maker</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<small>© 2026 Mercato Collective, Inc. All rights reserved. Brooklyn, NY.</small>
<div class="legal">
<a href="#">Privacy Policy</a>
<a href="#">Terms of Service</a>
<a href="#">Accessibility</a>
<a href="#">Do Not Sell My Info</a>
</div>
<div class="payments">
<span>VISA</span>
<span>MC</span>
<span>AMEX</span>
<span>PAY</span>
<span>KLARNA</span>
</div>
</div>
</div>
</footer>
<!-- ============================================
SEARCH OVERLAY
============================================ -->
<div class="search-overlay" id="searchOverlay" onclick="closeSearch(event)">
<div class="search-modal" onclick="event.stopPropagation()">
<button class="modal-close" onclick="closeSearch()" aria-label="Close search">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16"><path d="M18 6 6 18M6 6l12 12"/></svg>
</button>
<div class="search-input-wrap">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
<input type="text" placeholder="Search for products, brands, or categories..." id="searchInput" autofocus>
</div>
<div class="quick-search">
<h6>Popular Searches</h6>
<div class="quick-tags">
<a href="#">Linen dress</a>
<a href="#">Leather tote</a>
<a href="#">Ceramic mug</a>
<a href="#">Throw blanket</a>
<a href="#">Coffee table</a>
<a href="#">Wool scarf</a>
<a href="#">Glass vase</a>
<a href="#">Soy candle</a>
</div>
</div>
</div>
</div>
<!-- ============================================
JAVASCRIPT
============================================ -->
<script>
/* ============ CART ============ */
let cartCount = 0;
function addToCart(){
cartCount++;
const el = document.getElementById('cartCount');
el.textContent = cartCount;
el.style.transform = 'scale(1.4)';
setTimeout(()=>el.style.transform='scale(1)', 200);
}
/* ============ WISHLIST TOGGLE ============ */
function toggleWish(btn){
btn.classList.toggle('active');
}
/* ============ MOBILE MENU ============ */
function toggleMenu(){
document.getElementById('mainNav').classList.toggle('open');
}
/* ============ SEARCH ============ */
function openSearch(){
document.getElementById('searchOverlay').classList.add('open');
setTimeout(()=>document.getElementById('searchInput').focus(),100);
}
function closeSearch(e){
if(!e || e.target.id==='searchOverlay' || e.type==='click'){
document.getElementById('searchOverlay').classList.remove('open');
}
}
document.addEventListener('keydown',e=>{
if(e.key==='Escape'){
document.getElementById('searchOverlay').classList.remove('open');
document.getElementById('mainNav').classList.remove('open');
}
if(e.key==='/' && document.activeElement.tagName!=='INPUT'){
e.preventDefault();
openSearch();
}
});
/* ============ STICKY HEADER ============ */
let lastScroll=0;
window.addEventListener('scroll',()=>{
const h=document.getElementById('siteHeader');
if(window.scrollY>20) h.classList.add('scrolled');
else h.classList.remove('scrolled');
lastScroll=window.scrollY;
});
/* ============ FAQ ACCORDION ============ */
function toggleFaq(btn){
const item = btn.parentElement;
const wasOpen = item.classList.contains('open');
document.querySelectorAll('.faq-item').forEach(i=>i.classList.remove('open'));
if(!wasOpen) item.classList.add('open');
}
/* ============ COUNTDOWN TIMER ============ */
function updateCountdown(){
const target = new Date();
target.setDate(target.getDate()+2);
target.setHours(target.getHours()+14);
target.setMinutes(target.getMinutes()+36);
target.setSeconds(target.getSeconds()+22);
function tick(){
const now = new Date();
let diff = target - now;
if(diff<0) diff=0;
const days = Math.floor(diff/(1000*60*60*24));
const hours = Math.floor((diff%(1000*60*60*24))/(1000*60*60));
const mins = Math.floor((diff%(1000*60*60))/(1000*60));
const secs = Math.floor((diff%(1000*60))/1000);
document.getElementById('cd-days').textContent = String(days).padStart(2,'0');
document.getElementById('cd-hours').textContent = String(hours).padStart(2,'0');
document.getElementById('cd-mins').textContent = String(mins).padStart(2,'0');
document.getElementById('cd-secs').textContent = String(secs).padStart(2,'0');
}
tick();
setInterval(tick,1000);
}
updateCountdown();
/* ============ PRICE TRACKER ============ */
function trackPrice(e){
e.preventDefault();
const name = document.getElementById('product-name').value;
const current = parseFloat(document.getElementById('current-price').value);
const target = parseFloat(document.getElementById('target-price').value);
const result = document.getElementById('trackerResult');
const status = document.getElementById('trackerStatus');
const msg = document.getElementById('trackerMsg');
const price = document.getElementById('trackerPrice');
if(!name || isNaN(current) || isNaN(target)) return;
const savings = current - target;
status.textContent = `You're tracking "${name}"`;
if(savings>0){
msg.innerHTML = `We'll email you the moment the price falls below <strong style="color:var(--ink)">$${target}</strong>. You'll save <strong style="color:var(--accent)">$${savings}</strong> when it hits.`;
} else {
msg.innerHTML = `Your target price is already at or below the current price — we'll still monitor for further drops and let you know about restocks.`;
}
price.textContent = `$${current}`;
result.classList.add('show');
result.scrollIntoView({behavior:'smooth',block:'nearest'});
}
/* ============ NEWSLETTER ============ */
function subscribe(e){
e.preventDefault();
document.getElementById('newsletterForm').style.display='none';
document.getElementById('newsletterSuccess').classList.add('show');
}
/* ============ SCROLL REVEAL ============ */
const observer = new IntersectionObserver((entries)=>{
entries.forEach(entry=>{
if(entry.isIntersecting){
entry.target.classList.add('visible');
observer.unobserve(entry.target);
}
});
},{threshold:.12,rootMargin:'0px 0px -40px 0px'});
document.querySelectorAll('.fade-in').forEach(el=>observer.observe(el));
/* ============ SMOOTH ANCHOR SCROLL ============ */
document.querySelectorAll('a[href^="#"]').forEach(link=>{
link.addEventListener('click',function(e){
const target = document.querySelector(this.getAttribute('href'));
if(target){
e.preventDefault();
target.scrollIntoView({behavior:'smooth',block:'start'});
document.getElementById('mainNav').classList.remove('open');
}
});
});
</script>
</body>
</html>
View Axe Report (JSON)
{
"testEngine": {
"name": "axe-core",
"version": "4.10.2"
},
"testRunner": {
"name": "axe"
},
"testEnvironment": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
"windowWidth": 1280,
"windowHeight": 720,
"orientationAngle": 0,
"orientationType": "landscape-primary"
},
"timestamp": "2026-11-12T09:42:04.962Z",
"url": "https://benchmark.aimac.invalid/08201df15d3bade203a12aa73b3c57196094f8950daa8ebd9731ba0c5073cafb.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": []
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-children",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require child roles contain them",
"help": "Certain ARIA roles must contain particular children",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "select-name",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure select element has an accessible name",
"help": "Select element must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "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": "<button class=\"announce-close\" aria-label=\"Dismiss announcement\" onclick=\"document.getElementById('announce').style.display='none'\">\u00d7</button>",
"target": [
".announce-close"
]
}
]
},
{
"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": "<button class=\"announce-close\" aria-label=\"Dismiss announcement\" onclick=\"document.getElementById('announce').style.display='none'\">\u00d7</button>",
"target": [
".announce-close"
]
}
]
},
{
"id": "aria-hidden-body",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"wcag412",
"EN-301-549",
"EN-9.1.3.1",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden=\"true\" is not present on the document body.",
"help": "aria-hidden=\"true\" must not be present on the document body",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-hidden-body",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "No aria-hidden attribute is present on document body"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<body>",
"target": [
"body"
]
}
]
},
{
"id": "aria-prohibited-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"impact": null,
"html": "<button class=\"announce-close\" aria-label=\"Dismiss announcement\" onclick=\"document.getElementById('announce').style.display='none'\">\u00d7</button>",
"target": [
".announce-close"
]
}
]
},
{
"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": "<button class=\"announce-close\" aria-label=\"Dismiss announcement\" onclick=\"document.getElementById('announce').style.display='none'\">\u00d7</button>",
"target": [
".announce-close"
]
}
]
},
{
"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": "<button class=\"announce-close\" aria-label=\"Dismiss announcement\" onclick=\"document.getElementById('announce').style.display='none'\">\u00d7</button>",
"target": [
".announce-close"
]
}
]
},
{
"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": "<section class=\"section\" style=\"padding-top:32px\">",
"target": [
".section:nth-child(6)"
]
}
]
},
{
"id": "button-name",
"impact": "critical",
"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"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute exists and is not empty"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button class=\"announce-close\" aria-label=\"Dismiss announcement\" onclick=\"document.getElementById('announce').style.display='none'\">\u00d7</button>",
"target": [
".announce-close"
]
}
]
},
{
"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>Considered goods, <em>quietly made</em>, joyfully worn.</h1>",
"target": [
"h1"
]
},
{
"html": "<h4>Free Shipping Over $75</h4>",
"target": [
".value-card:nth-child(1) > div:nth-child(2) > h4"
]
},
{
"html": "<h4>60-Day Easy Returns</h4>",
"target": [
".value-card:nth-child(2) > div:nth-child(2) > h4"
]
},
{
"html": "<h4>Secure Checkout</h4>",
"target": [
".value-card:nth-child(3) > div:nth-child(2) > h4"
]
},
{
"html": "<h4>Real Human Support</h4>",
"target": [
".value-card:nth-child(4) > div:nth-child(2) > h4"
]
},
{
"html": "<h2>New arrivals worth a closer look</h2>",
"target": [
"#new > .container > .section-head > div > h2"
]
},
{
"html": "<h3 class=\"product-name\">Aurora Linen Dress</h3>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(1) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Heritage Leather Tote</h3>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(2) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Cedar Wood Diffuser</h3>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(3) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Stoneware Coffee Set</h3>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(4) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Olive Branch Throw</h3>",
"target": [
".product-card:nth-child(5) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Brass Pendant Lamp</h3>",
"target": [
".product-card:nth-child(6) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Heirloom Wool Blanket</h3>",
"target": [
".product-card:nth-child(7) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Ceramic Pour-Over Kit</h3>",
"target": [
".product-card:nth-child(8) > .product-meta > .product-name"
]
},
{
"html": "<h2>The Slow Kitchen \u2014 tableware for unhurried mornings.</h2>",
"target": [
".feature-banner-copy > h2"
]
},
{
"html": "<h2>Best sellers our community keeps coming back for</h2>",
"target": [
"#bestsellers > .container > .section-head > div > h2"
]
},
{
"html": "<h3 class=\"product-name\">Vintage Glass Decanter</h3>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(1) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Linen Apron \u2014 Sand</h3>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(2) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Reclaimed Walnut Board</h3>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(3) > .product-meta > .product-name"
]
},
{
"html": "<h3 class=\"product-name\">Smoked Glass Vase</h3>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(4) > .product-meta > .product-name"
]
},
{
"html": "<h2>Shop by category</h2>",
"target": [
"#categories > .container > .section-head > div > h2"
]
},
{
"html": "<h3>Home & Living</h3>",
"target": [
".category-card[href=\"#\"]:nth-child(1) > .overlay > h3"
]
},
{
"html": "<h3>Fashion</h3>",
"target": [
".category-card[href=\"#\"]:nth-child(2) > .overlay > h3"
]
},
{
"html": "<h3>Beauty & Wellness</h3>",
"target": [
".category-card[href=\"#\"]:nth-child(3) > .overlay > h3"
]
},
{
"html": "<h3>Kitchen</h3>",
"target": [
".category-card[href=\"#\"]:nth-child(4) > .overlay > h3"
]
},
{
"html": "<h3>Outdoor</h3>",
"target": [
".category-card[href=\"#\"]:nth-child(5) > .overlay > h3"
]
},
{
"html": "<h3>Gifts</h3>",
"target": [
".category-card[href=\"#\"]:nth-child(6) > .overlay > h3"
]
},
{
"html": "<h2 class=\"sale-headline\">End of <em>season</em> sale. Up to <span class=\"sale-discount\">60% OFF</span></h2>",
"target": [
".sale-headline"
]
},
{
"html": "<h2>Set it. Forget it. We'll let you know when the price drops.</h2>",
"target": [
".tracker-copy > h2"
]
},
{
"html": "<h3>Add to price tracker</h3>",
"target": [
".tracker-card > h3"
]
},
{
"html": "<h2>Loved by 86,000+ shoppers</h2>",
"target": [
".center > h2"
]
},
{
"html": "<h2>Gift guides for every kind of person on your list</h2>",
"target": [
"#gifts > .container > .section-head > div > h2"
]
},
{
"html": "<h4>The Stocking Stuffer Edit</h4>",
"target": [
".gift-card:nth-child(1) > .info > h4"
]
},
{
"html": "<h4>Gifts She'll Actually Use</h4>",
"target": [
".gift-card:nth-child(2) > .info > h4"
]
},
{
"html": "<h4>For the Guy Who Has Everything</h4>",
"target": [
".gift-card:nth-child(3) > .info > h4"
]
},
{
"html": "<h4>Move-In Ready Housewarming</h4>",
"target": [
".gift-card:nth-child(4) > .info > h4"
]
},
{
"html": "<h2>Earn 5% back on every order \u2014 plus birthday gifts, early sale access, and free shipping.</h2>",
"target": [
".rewards-copy > h2"
]
},
{
"html": "<h2>Help & common questions</h2>",
"target": [
".faq-wrap > .section-head > h2"
]
},
{
"html": "<h2>Get 15% off your first order, plus first dibs on every new drop.</h2>",
"target": [
".newsletter-copy > h2"
]
},
{
"html": "<h5>Shop</h5>",
"target": [
".footer-col:nth-child(2) > h5"
]
},
{
"html": "<h5>Account</h5>",
"target": [
".footer-col:nth-child(3) > h5"
]
},
{
"html": "<h5>Support</h5>",
"target": [
".footer-col:nth-child(4) > h5"
]
},
{
"html": "<h5>Company</h5>",
"target": [
".footer-col:nth-child(5) > h5"
]
},
{
"html": "<h6>Popular Searches</h6>",
"target": [
"h6"
]
}
],
"impact": "serious",
"message": "Page has a heading"
}
],
"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": "#fbf8f3",
"bgColor": "#1f1f1f",
"contrastRatio": 15.55,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 15.55"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<span><strong>Free shipping</strong> on orders over $75</span>",
"target": [
".announce-track > span:nth-child(1)"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "duplicate-id-aria",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every id attribute value used in ARIA and in labels is unique",
"help": "IDs used in ARIA and labels must be unique",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "duplicate-id-aria",
"data": "product-name",
"relatedNodes": [],
"impact": "critical",
"message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<input type=\"text\" id=\"product-name\" placeholder=\"e.g. Aurora Linen Dress\" required=\"\">",
"target": [
"#product-name"
]
}
]
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "multiple-label",
"data": null,
"relatedNodes": [
{
"html": "<label for=\"product-name\">Product name or URL</label>",
"target": [
"label[for=\"product-name\"]"
]
}
],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<input type=\"text\" id=\"product-name\" placeholder=\"e.g. Aurora Linen Dress\" required=\"\">",
"target": [
"#product-name"
]
}
]
},
{
"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://picsum.photos/seed/mercato-hero-living-room/800/1000\" alt=\"Mercato curated collection in a warm modern interior\" loading=\"eager\">",
"target": [
"img[loading=\"eager\"]"
]
}
]
},
{
"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": "explicit-label",
"data": {
"explicitLabel": "Product name or URL"
},
"relatedNodes": [
{
"html": "<label for=\"product-name\">Product name or URL</label>",
"target": [
"label[for=\"product-name\"]"
]
}
],
"impact": "critical",
"message": "Element has an explicit <label>"
},
{
"id": "non-empty-placeholder",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a placeholder attribute"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input type=\"text\" id=\"product-name\" placeholder=\"e.g. Aurora Linen Dress\" required=\"\">",
"target": [
"#product-name"
]
}
]
},
{
"id": "link-in-text-block",
"impact": null,
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "link-in-text-block-style",
"data": null,
"relatedNodes": [
{
"html": "<div class=\"sale-copy\">",
"target": [
".sale-copy"
]
}
],
"impact": "serious",
"message": "Links can be distinguished from surrounding text by visual styling"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"btn btn-accent\">Shop the Sale\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M5 12h14M13 5l7 7-7 7\"></path></svg>\n </a>",
"target": [
".btn-accent.btn[href=\"#\"]"
]
}
]
},
{
"id": "link-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a href=\"#\" class=\"logo\">\n <div class=\"logo-mark\">M</div>\n <div class=\"logo-text\">\n <span class=\"logo-name\">Mercato</span>\n <span class=\"logo-tag\">Curated Marketplace</span>\n </div>\n </a>",
"target": [
".logo[href=\"#\"]"
]
}
]
},
{
"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": [
".footer-col:nth-child(2) > 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=\"#new\">New Arrivals</a></li>",
"target": [
".footer-col:nth-child(2) > ul > li:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button class=\"announce-close\" aria-label=\"Dismiss announcement\" onclick=\"document.getElementById('announce').style.display='none'\">\u00d7</button>",
"target": [
".announce-close"
]
}
]
},
{
"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": 26.6,
"height": 28
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (26.6px by 28px, 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": "<button class=\"announce-close\" aria-label=\"Dismiss announcement\" onclick=\"document.getElementById('announce').style.display='none'\">\u00d7</button>",
"target": [
".announce-close"
]
}
]
}
],
"incomplete": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#c8553d",
"contrastRatio": 4.35,
"fontSize": "7.5pt (10px)",
"fontWeight": "bold",
"messageKey": "shortTextContent",
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"cart-count\" id=\"cartCount\">0</span>",
"target": [
"#cartCount"
]
}
],
"impact": "serious",
"message": "Element content is too short to determine if it is actual text content"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"cart-count\" id=\"cartCount\">0</span>",
"target": [
"#cartCount"
],
"failureSummary": "Fix any of the following:\n Element content is too short to determine if it is actual text content"
}
]
}
],
"violations": [
{
"id": "button-name",
"impact": "critical",
"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 does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(1) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(2) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(3) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(4) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
".product-card:nth-child(5) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
".product-card:nth-child(6) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
".product-card:nth-child(7) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
".product-card:nth-child(8) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn active\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
".active"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(2) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(3) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have inner text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "implicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<button class=\"wish-btn\" onclick=\"toggleWish(this)\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"></path></svg></button>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(4) > .product-img > .wish-btn[onclick=\"toggleWish(this)\"]"
],
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
]
},
{
"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": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "7.5pt (10px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header class=\"site-header\" id=\"siteHeader\">",
"target": [
"#siteHeader"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"logo-tag\">Curated Marketplace</span>",
"target": [
".logo[href=\"#\"] > .logo-text > .logo-tag"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#c8553d",
"contrastRatio": 4.35,
"fontSize": "7.5pt (10px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"nav-badge\">NEW</span>",
"target": [
".nav-badge"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.35 (foreground color: #ffffff, background color: #c8553d, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"nav-badge\">NEW</span>",
"target": [
".nav-badge"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.35 (foreground color: #ffffff, background color: #c8553d, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#fbf8f3",
"contrastRatio": 4.11,
"fontSize": "10.5pt (14px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header class=\"site-header\" id=\"siteHeader\">",
"target": [
"#siteHeader"
]
},
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#sale\" class=\"sale-link\">Sale</a>",
"target": [
".sale-link"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#fbf8f3",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Autumn Collection \u00b7 2026</span>",
"target": [
".hero-copy > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"lbl\">Independent Brands</div>",
"target": [
".hero-stat:nth-child(1) > .lbl"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"lbl\">Avg. Customer Rating</div>",
"target": [
".hero-stat:nth-child(2) > .lbl"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"lbl\">Day Easy Returns</div>",
"target": [
".hero-stat:nth-child(3) > .lbl"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#c8553d",
"contrastRatio": 4.35,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"hero-badge\">\n Just<br>Arrived<strong>40+</strong>\n </div>",
"target": [
".hero-badge"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.35 (foreground color: #ffffff, background color: #c8553d, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"hero-badge\">\n Just<br>Arrived<strong>40+</strong>\n </div>",
"target": [
".hero-badge"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.35 (foreground color: #ffffff, background color: #c8553d, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#ffffff",
"contrastRatio": 3.94,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"hero-card-float\">\n <div class=\"pf\">\u26a1</div>\n <div class=\"info\">\n <strong>Price drop alert</strong>\n <span>3 items in your wishlist just dropped</span>\n </div>\n </div>",
"target": [
".hero-card-float"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>3 items in your wishlist just dropped</span>",
"target": [
".hero-card-float > .info > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#fbf8f3",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Just Landed</span>",
"target": [
"#new > .container > .section-head > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Maison Vela</span>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(1) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Otto & Oak</span>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(2) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">For\u00eat Studio</span>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(3) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Kiln Atelier</span>",
"target": [
"#new > .container > .product-grid > .product-card:nth-child(4) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Loomwell</span>",
"target": [
".product-card:nth-child(5) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#fbf8f3",
"bgColor": "#c8553d",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"product-badge sale\">-25%</span>",
"target": [
".product-card:nth-child(6) > .product-img > .sale.product-badge"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #fbf8f3, background color: #c8553d, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-badge sale\">-25%</span>",
"target": [
".product-card:nth-child(6) > .product-img > .sale.product-badge"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #fbf8f3, background color: #c8553d, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Lumen Objects</span>",
"target": [
".product-card:nth-child(6) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"price-was\">$285</span>",
"target": [
".product-card:nth-child(6) > .product-meta > .product-price > .price-was"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#fbf8f3",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"price-off\">Save $71</span>",
"target": [
".product-card:nth-child(6) > .product-meta > .product-price > .price-off"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Loomwell</span>",
"target": [
".product-card:nth-child(7) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Kiln Atelier</span>",
"target": [
".product-card:nth-child(8) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#fbf8f3",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Top Rated</span>",
"target": [
"#bestsellers > .container > .section-head > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Vela Glassworks</span>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(1) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Maison Vela</span>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(2) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#fbf8f3",
"bgColor": "#c8553d",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"product-badge sale\">-30%</span>",
"target": [
".product-card:nth-child(3) > .product-img > .sale.product-badge"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #fbf8f3, background color: #c8553d, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-badge sale\">-30%</span>",
"target": [
".product-card:nth-child(3) > .product-img > .sale.product-badge"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #fbf8f3, background color: #c8553d, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Otto & Oak</span>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(3) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"price-was\">$120</span>",
"target": [
".product-card:nth-child(3) > .product-meta > .product-price > .price-was"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#fbf8f3",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"price-off\">Save $36</span>",
"target": [
".product-card:nth-child(3) > .product-meta > .product-price > .price-off"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#fbf8f3",
"contrastRatio": 3.72,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"product-cat\">Vela Glassworks</span>",
"target": [
"#bestsellers > .container > .product-grid > .product-card:nth-child(4) > .product-meta > .product-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.72 (foreground color: #8b7e72, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#f2ede4",
"contrastRatio": 3.73,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"categories-section\" id=\"categories\">",
"target": [
"#categories"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.73 (foreground color: #c8553d, background color: #f2ede4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Browse the Marketplace</span>",
"target": [
"#categories > .container > .section-head > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.73 (foreground color: #c8553d, background color: #f2ede4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#f2ede4",
"contrastRatio": 3.73,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"tracker-section\" id=\"tracker\">",
"target": [
"#tracker"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.73 (foreground color: #c8553d, background color: #f2ede4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Smart Shopping</span>",
"target": [
".tracker-copy > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.73 (foreground color: #c8553d, background color: #f2ede4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#ffffff",
"contrastRatio": 3.94,
"fontSize": "10.5pt (14px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"tracker-card\">",
"target": [
".tracker-card"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<p class=\"sub\">Try it now \u2014 enter any product URL or paste a product name to see how it works.</p>",
"target": [
".sub"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#fbf8f3",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Customer Reviews</span>",
"target": [
".center > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #c8553d, background color: #fbf8f3, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#ffffff",
"contrastRatio": 3.94,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"testimonial\">",
"target": [
".testimonial:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"meta\">Verified buyer \u00b7 Brooklyn, NY</div>",
"target": [
".testimonial:nth-child(1) > .testimonial-author > div > .meta"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#ffffff",
"contrastRatio": 3.94,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"testimonial\">",
"target": [
".testimonial:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"meta\">Verified buyer \u00b7 Portland, OR</div>",
"target": [
".testimonial:nth-child(2) > .testimonial-author > div > .meta"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#8b7e72",
"bgColor": "#ffffff",
"contrastRatio": 3.94,
"fontSize": "9.0pt (12px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"testimonial\">",
"target": [
".testimonial:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"meta\">Verified buyer \u00b7 Austin, TX</div>",
"target": [
".testimonial:nth-child(3) > .testimonial-author > div > .meta"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.94 (foreground color: #8b7e72, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#f2ede4",
"contrastRatio": 3.73,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"gifts-section\" id=\"gifts\">",
"target": [
"#gifts"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.73 (foreground color: #c8553d, background color: #f2ede4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Holiday Edit</span>",
"target": [
"#gifts > .container > .section-head > div > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.73 (foreground color: #c8553d, background color: #f2ede4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#c8553d",
"bgColor": "#f2ede4",
"contrastRatio": 3.73,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"faq-section\" id=\"help\">",
"target": [
"#help"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.73 (foreground color: #c8553d, background color: #f2ede4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"eyebrow\">Frequently Asked</span>",
"target": [
".faq-wrap > .section-head > .eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.73 (foreground color: #c8553d, background color: #f2ede4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 11112
},
{
"y": 576,
"height": 11112
},
{
"y": 1152,
"height": 11112
},
{
"y": 1728,
"height": 11112
},
{
"y": 2304,
"height": 11112
},
{
"y": 2880,
"height": 11112
},
{
"y": 3456,
"height": 11112
},
{
"y": 4032,
"height": 11112
},
{
"y": 4608,
"height": 11112
},
{
"y": 5184,
"height": 11112
},
{
"y": 5760,
"height": 11112
},
{
"y": 6336,
"height": 11112
},
{
"y": 6912,
"height": 11112
},
{
"y": 7488,
"height": 11112
},
{
"y": 8064,
"height": 11112
},
{
"y": 8640,
"height": 11112
},
{
"y": 9216,
"height": 11112
},
{
"y": 9792,
"height": 11112
},
{
"y": 10368,
"height": 11112
},
{
"y": 10392,
"height": 11112
}
],
"scans": 21,
"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 "Shopping" 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: "Shopping"
- Description: Online shopping, e-commerce, deals, retail products, and gift guides.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Shopping" 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: "New Arrivals", "Sale", "Help".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Shopping" category. Consider themes similar to: "Top Rated", "Best Sellers", "Clearance".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "add to cart", "product reviews", "promo code".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Shop Collection", "Get Rewards", "Subscribe".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Shopping" sector. Ideas similar but not limited to: "price tracker".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "price drops", "customer reviews", "popular categories".
- **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.