Recursive Flint (free) – Shopping

via Recursive · Generated

  • AIMAC Debt 2.00
  • Cost $0.00
  • Total Violations 1
  • HTML Size 40 KB
  • Em Dashes 2

Screenshot

View Recursive Flint (free) Shopping page View Live Page

Accessibility Issues Found

1 Serious

  • color-contrast serious 1 instance

    Elements must meet minimum color contrast ratio thresholds

    Example HTML <span class="deal-badge">Limited time</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>Aveline — Thoughtfully Made Goods for Everyday Rituals</title>
  <meta name="description" content="Aveline is an online shopping destination for curated retail products, gift guides, deals, and best-loved goods.">
  <link rel="icon" href="https://placehold.co/64x64?text=A&font=poppins">
  <style>
    :root {
      --ink: #1c1b1a;
      --paper: #faf8f5;
      --card: #ffffff;
      --muted: #6f6a63;
      --line: #e7e0d8;
      --accent: #2f5d50;
      --accent-2: #c96f4a;
      --gold: #d9a441;
      --radius: 18px;
      --shadow: 0 18px 40px -24px rgba(28, 27, 26, .35);
    }
    * { box-sizing: border-box; }
    body {
      margin: 0;
      font-family: "Segoe UI", system-ui, -apple-system, sans-serif;
      color: var(--ink);
      background: var(--paper);
      line-height: 1.6;
    }
    img { max-width: 100%; display: block; }
    h1, h2, h3 { line-height: 1.15; margin: 0 0 0.5em; }
    p { margin: 0 0 1em; }
    a { color: inherit; }
    .container { width: min(1180px, 92%); margin-inline: auto; }
    .section { padding: 88px 0; }
    .section-alt { background: #f3efe9; }
    .section-head { max-width: 760px; margin-bottom: 44px; }
    .section-head.center { margin-inline: auto; text-align: center; }
    .eyebrow {
      text-transform: uppercase;
      letter-spacing: .14em;
      font-size: .75rem;
      color: var(--accent);
      font-weight: 700;
      margin-bottom: 12px;
    }
    .eyebrow.light { color: #ffd9c2; }
    .lede { font-size: 1.15rem; color: var(--muted); }
    .btn {
      display: inline-block;
      background: var(--ink);
      color: #fff;
      padding: 14px 24px;
      border-radius: 999px;
      text-decoration: none;
      font-weight: 700;
      border: 1px solid var(--ink);
      cursor: pointer;
      font-size: 1rem;
    }
    .btn:hover { background: var(--accent); border-color: var(--accent); }
    .btn-outline { background: transparent; color: var(--ink); }
    .btn-small { padding: 10px 18px; font-size: .9rem; }
    .btn-quiz { margin-top: 8px; background: var(--accent); border-color: var(--accent); }

    /* Header */
    .site-header {
      position: sticky;
      top: 0;
      background: rgba(250, 248, 245, .92);
      backdrop-filter: blur(8px);
      border-bottom: 1px solid var(--line);
      z-index: 50;
    }
    .header-inner {
      display: flex;
      align-items: center;
      gap: 20px;
      padding: 14px 0;
      flex-wrap: wrap;
    }
    .logo img { width: 180px; height: 48px; object-fit: contain; }
    .tagline {
      margin: 0;
      font-size: .72rem;
      letter-spacing: .14em;
      text-transform: uppercase;
      color: var(--muted);
      width: 100%;
      order: 5;
    }
    .main-nav { order: 3; width: 100%; }
    .main-nav ul {
      display: flex;
      gap: 6px;
      list-style: none;
      margin: 0;
      padding: 0;
      flex-wrap: wrap;
    }
    .main-nav a {
      text-decoration: none;
      color: var(--ink);
      padding: 10px 12px;
      border-radius: 999px;
      font-weight: 600;
      font-size: .95rem;
      display: block;
    }
    .main-nav a:hover { background: #eee7de; }
    .header-actions { margin-left: auto; display: flex; gap: 12px; align-items: center; order: 4; }

    /* Hero */
    .hero {
      background:
        radial-gradient(900px 500px at 85% -10%, rgba(201, 111, 74, .18), transparent 60%),
        radial-gradient(700px 500px at 0% 110%, rgba(47, 93, 80, .14), transparent 60%),
        var(--paper);
      border-bottom: 1px solid var(--line);
    }
    .hero-inner {
      display: grid;
      grid-template-columns: 1.05fr .95fr;
      gap: 56px;
      align-items: center;
      padding: 76px 0;
    }
    .hero h1 { font-size: clamp(2.4rem, 5vw, 4rem); letter-spacing: -.03em; }
    .hero-cta { display: flex; gap: 12px; flex-wrap: wrap; margin: 26px 0 14px; }
    .hero-note { color: var(--muted); font-size: .9rem; }
    .hero-media img { border-radius: 28px; box-shadow: var(--shadow); min-height: 420px; object-fit: cover; }

    /* Feature grid */
    .grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
    .feature-card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 26px; }
    .feature-icon {
      width: 52px;
      height: 52px;
      border-radius: 14px;
      background: #e9f0ec;
      display: grid;
      place-items: center;
      font-size: 24px;
      margin-bottom: 16px;
    }
    .feature-card h3 { font-size: 1.1rem; }
    .feature-card p { color: var(--muted); margin: 0; }

    /* Split */
    .split { display: grid; grid-template-columns: 1fr 1.2fr; gap: 56px; align-items: center; }
    .split.reverse { grid-template-columns: 1.2fr .8fr; }
    .section-copy p:last-child { margin-bottom: 0; }

    /* Products */
    .product-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
    .product-card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; display: flex; flex-direction: column; }
    .product-card img { width: 100%; height: 240px; object-fit: cover; }
    .product-body { padding: 18px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
    .product-category { font-size: .72rem; text-transform: uppercase; letter-spacing: .1em; color: var(--muted); font-weight: 700; }
    .product-body h3 { font-size: 1.05rem; margin: 0; }
    .product-body p { color: var(--muted); font-size: .92rem; margin: 0; }
    .product-meta { display: flex; align-items: baseline; gap: 10px; margin-top: 6px; }
    .price { font-weight: 800; font-size: 1.15rem; }
    del { color: var(--muted); }
    .product-actions { display: flex; gap: 10px; margin-top: 12px; align-items: center; }
    .product-actions .btn { flex: 1; text-align: center; }

    /* Deal */
    .deal-banner { position: relative; border-radius: 28px; overflow: hidden; box-shadow: var(--shadow); }
    .deal-banner img { height: 440px; object-fit: cover; width: 100%; }
    .deal-card {
      position: absolute;
      inset: auto 0 0 0;
      padding: 30px;
      background: linear-gradient(transparent, rgba(20, 16, 12, .82));
      color: #fff;
    }
    .deal-card h2 { font-size: 2rem; }
    .deal-card p { color: rgba(255,255,255,.85); }
    .deal-badge {
      display: inline-block;
      background: var(--accent-2);
      padding: 6px 12px;
      border-radius: 999px;
      font-weight: 800;
      margin-bottom: 12px;
      text-transform: uppercase;
      font-size: .75rem;
      letter-spacing: .08em;
    }

    /* Newsletter */
    .newsletter { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 22px; }
    .newsletter h3 { margin-top: 0; }
    .newsletter-row { display: flex; gap: 10px; flex-wrap: wrap; }
    .newsletter input {
      flex: 1;
      min-width: 220px;
      padding: 12px 16px;
      border-radius: 999px;
      border: 1px solid var(--line);
      background: var(--paper);
      font: inherit;
    }

    /* Sidebar */
    .sidebar { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 26px; display: flex; flex-direction: column; gap: 26px; }
    .sidebar h3 { margin-bottom: 8px; font-size: 1.05rem; }
    .sidebar p { color: var(--muted); font-size: .92rem; margin-bottom: 12px; }
    .sidebar-product { display: flex; gap: 12px; align-items: center; padding: 10px 0; border-top: 1px solid var(--line); }
    .sidebar-product img { width: 64px; height: 64px; border-radius: 12px; object-fit: cover; }
    .sidebar-product .meta { flex: 1; }
    .sidebar-product .price { font-size: .95rem; }

    /* Callout */
    .callout {
      margin-top: 40px;
      background: #221f1c;
      color: #f3eee8;
      border-radius: 24px;
      padding: 40px;
      display: flex;
      justify-content: space-between;
      align-items: center;
      gap: 30px;
      flex-wrap: wrap;
    }
    .callout h3 { color: #fff; margin-bottom: 6px; }
    .callout p { margin: 0; color: #cfc6bc; }

    /* Gift guides */
    .gift-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
    .gift-card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; }
    .gift-card img { height: 180px; width: 100%; object-fit: cover; }
    .gift-card .body { padding: 18px; }
    .gift-card h3 { font-size: 1.05rem; }
    .gift-card p { color: var(--muted); font-size: .92rem; }

    /* Testimonials */
    .testimonial-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
    .testimonial-card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 26px; }
    .stars { color: var(--gold); letter-spacing: 2px; margin-bottom: 10px; }
    .testimonial-card blockquote { margin: 0 0 18px; font-size: 1.05rem; }
    .reviewer { display: flex; gap: 12px; align-items: center; }
    .reviewer img { width: 48px; height: 48px; border-radius: 50%; object-fit: cover; }
    .reviewer .name { font-weight: 700; }
    .reviewer .meta { color: var(--muted); font-size: .85rem; }

    /* FAQ */
    .faq { max-width: 820px; margin: 60px auto 0; display: grid; gap: 14px; }
    details { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 18px 20px; }
    summary { font-weight: 700; cursor: pointer; }

    /* Footer */
    .site-footer { background: #221f1c; color: #efe9e2; padding: 70px 0 30px; }
    .footer-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 40px; padding-bottom: 44px; border-bottom: 1px solid rgba(255,255,255,.12); }
    .site-footer h3 { color: #fff; font-size: 1rem; }
    .site-footer a { color: #cfc6bc; text-decoration: none; }
    .site-footer a:hover { color: #fff; }
    .footer-logo { width: 150px; margin-bottom: 14px; }
    .site-footer p { color: #b8aea4; }
    .social { display: flex; gap: 10px; margin-top: 18px; }
    .social a { width: 38px; height: 38px; border-radius: 50%; background: rgba(255,255,255,.08); display: grid; place-items: center; text-decoration: none; font-size: .85rem; }
    .site-footer ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 10px; }
    .footer-bottom { display: flex; justify-content: space-between; align-items: center; gap: 20px; flex-wrap: wrap; padding-top: 26px; color: #b8aea4; font-size: .9rem; }
    .footer-legal a { margin-left: 16px; }

    /* Quiz modal */
    .quiz-modal {
      position: fixed;
      inset: 0;
      background: rgba(20, 16, 12, .55);
      display: none;
      place-items: center;
      z-index: 100;
      padding: 20px;
    }
    .quiz-modal.open { display: grid; }
    .quiz-card { background: #fff; border-radius: 24px; max-width: 660px; width: 100%; padding: 34px; position: relative; }
    .quiz-close { position: absolute; top: 16px; right: 16px; border: 0; background: #f1ebe4; width: 38px; height: 38px; border-radius: 50%; font-size: 1.3rem; cursor: pointer; }
    .quiz-progress { height: 8px; background: #eee7de; border-radius: 99px; overflow: hidden; margin: 20px 0 10px; }
    .quiz-progress > div { height: 100%; background: var(--accent); width: 0%; transition: width .3s ease; }
    .quiz-options { display: grid; gap: 12px; margin-top: 22px; }
    .quiz-option { text-align: left; padding: 14px 16px; border-radius: 14px; border: 1px solid var(--line); background: var(--paper); cursor: pointer; font-weight: 600; }
    .quiz-option:hover { border-color: var(--accent); background: #eef4f1; }
    .quiz-result { text-align: center; padding: 20px 0; }
    .quiz-result h3 { font-size: 1.8rem; }

    /* Responsive */
    @media (max-width: 1024px) {
      .grid { grid-template-columns: repeat(2, 1fr); }
      .product-grid { grid-template-columns: repeat(2, 1fr); }
      .gift-grid { grid-template-columns: repeat(2, 1fr); }
      .testimonial-grid { grid-template-columns: 1fr; }
      .footer-grid { grid-template-columns: 1fr 1fr; }
      .hero-inner { grid-template-columns: 1fr; }
      .split, .split.reverse { grid-template-columns: 1fr; }
    }
    @media (max-width: 768px) {
      .section { padding: 64px 0; }
      .product-grid, .gift-grid, .grid { grid-template-columns: 1fr; }
      .main-nav ul { gap: 2px; }
      .main-nav a { padding: 8px 10px; font-size: .88rem; }
      .header-actions { margin-left: 0; }
      .deal-banner img { height: 320px; }
      .callout { padding: 28px; }
    }
  </style>
</head>
<body>
  <header class="site-header">
    <div class="container header-inner">
      <a class="logo" href="#home">
        <img src="https://placehold.co/240x64?text=Aveline&font=poppins" alt="Aveline logo">
      </a>
      <p class="tagline">Goods for intentional living</p>
      <nav class="main-nav" aria-label="Primary navigation">
        <ul>
          <li><a href="#home">Home</a></li>
          <li><a href="#shop">Shop</a></li>
          <li><a href="#deals">Deals</a></li>
          <li><a href="#gift-guides">Gift Guides</a></li>
          <li><a href="#reviews">Reviews</a></li>
          <li><a href="#new-arrivals">New Arrivals</a></li>
          <li><a href="#sale">Sale</a></li>
        </ul>
      </nav>
      <div class="header-actions">
        <a href="#deals" class="btn btn-small">Shop Deals</a>
      </div>
    </div>
  </header>

  <main>
    <section class="hero" id="home">
      <div class="container hero-inner">
        <div class="hero-copy">
          <p class="eyebrow">New season edit</p>
          <h1>Thoughtfully made goods for everyday rituals.</h1>
          <p class="lede">Aveline is an online shopping house for people who buy less but better. We curate home, lifestyle, and gift products with honest descriptions, fair pricing, and enough detail to decide with confidence.</p>
          <div class="hero-cta">
            <a href="#new-arrivals" class="btn">Shop New Arrivals</a>
            <a href="#deals" class="btn btn-outline">Browse Clearance</a>
          </div>
          <p class="hero-note">Free shipping on orders over $75 · Secure checkout · 30-day returns · Price match promise</p>
          <button class="btn btn-quiz" id="quizOpen" type="button">Take the Style Quiz</button>
        </div>
        <div class="hero-media">
          <img src="https://picsum.photos/seed/aveline-hero/900/700?grayscale&blur=1" alt="Aveline curated shopping lifestyle">
        </div>
      </div>
    </section>

    <section class="section" id="why">
      <div class="container">
        <div class="section-head center">
          <p class="eyebrow">Why Aveline</p>
          <h2>Shopping that respects the details</h2>
          <p>Great shopping should feel calm, clear, and trustworthy. That is the standard we hold every product and every page to.</p>
        </div>
        <div class="grid">
          <article class="feature-card">
            <div class="feature-icon">🧺</div>
            <h3>Curated catalogs</h3>
            <p>Each collection is reviewed for quality, usefulness, and design. No endless scrolling, just thoughtful selections.</p>
          </article>
          <article class="feature-card">
            <div class="feature-icon">💬</div>
            <h3>Real reviews</h3>
            <p>Shoppers share photos, context, and honest notes. We surface top rated products without fake social proof.</p>
          </article>
          <article class="feature-card">
            <div class="feature-icon">🚚</div>
            <h3>Clear shipping</h3>
            <p>Transparent shipping options at checkout, including standard, express, and calculated delivery for oversized items.</p>
          </article>
          <article class="feature-card">
            <div class="feature-icon">↩️</div>
            <h3>Simple returns</h3>
            <p>Our 30-day return policy covers unused items. Final sale exclusions and damaged-goods support are stated upfront.</p>
          </article>
        </div>
      </div>
    </section>

    <section class="section" id="best-sellers">
      <div class="container split">
        <div class="section-copy">
          <p class="eyebrow">Best Sellers</p>
          <h2>The most-loved products this season</h2>
          <p>The Aveline best sellers list combines buyer ratings, repeat purchase data, and editorial curation. These are the products that appear most in gift guides, home rituals, and small celebrations.</p>
          <p>Each product page includes shipping options, price match details, return policy language, and comparison tools for similar items. Shoppers can compare top rated products before choosing.</p>
          <a href="#shop" class="btn btn-outline">Compare top rated products</a>
        </div>
        <div class="product-grid">
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-best-nest/600/750?grayscale&blur=2" alt="Aveline Nest & Anchor Throw">
            <div class="product-body">
              <span class="product-category">Home</span>
              <h3>Nest & Anchor Throw</h3>
              <p>Wool-blend throw with hidden pocket and reinforced corner stitching for everyday use.</p>
              <div class="product-meta">
                <span class="price">$189.00</span>
                <del>$220.00</del>
              </div>
              <div class="product-actions">
                <a href="#" class="btn btn-small">Quick View</a>
              </div>
            </div>
          </article>
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-best-bottle/600/750?grayscale&blur=2" alt="Aveline Field Bottle">
            <div class="product-body">
              <span class="product-category">Outdoor</span>
              <h3>Field Bottle 750</h3>
              <p>Insulated steel bottle with leakproof cap and carry strap. Includes cleaning guide.</p>
              <div class="product-meta">
                <span class="price">$58.00</span>
                <del>$72.00</del>
              </div>
              <div class="product-actions">
                <a href="#" class="btn btn-small">Quick View</a>
              </div>
            </div>
          </article>
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-best-kit/600/750?grayscale&blur=2" alt="Aveline Quiet Morning Kit">
            <div class="product-body">
              <span class="product-category">Wellness</span>
              <h3>Quiet Morning Ritual Kit</h3>
              <p>Tea, linen towel, candle, and journal set curated for slower mornings.</p>
              <div class="product-meta">
                <span class="price">$96.00</span>
                <del>$120.00</del>
              </div>
              <div class="product-actions">
                <a href="#" class="btn btn-small">Quick View</a>
              </div>
            </div>
          </article>
        </div>
      </div>
    </section>

    <section class="section section-alt" id="deals">
      <div class="container">
        <div class="split reverse">
          <div class="deal-banner">
            <img src="https://placehold.co/800x600?bg=bf4e2e&text=Sale+25%25+Off&font=poppins" alt="Aveline up to 25 percent off sale banner">
            <div class="deal-card">
              <span class="deal-badge">Limited time</span>
              <h2>Up to 25% off sitewide</h2>
              <p>Selected home, kitchen, and lifestyle favorites are marked down while inventory lasts. Members get early access to the sale.</p>
              <a href="#sale" class="btn">Shop the Sale</a>
            </div>
          </div>
          <div class="section-copy">
            <p class="eyebrow">Deals</p>
            <h2>Everyday savings, without the discount bin.</h2>
            <p>Aveline deals are curated rather than endless markdowns. We review each discount against product value, condition notes, and shipping costs so the final price feels fair.</p>
            <p>Subscribers also receive email alerts for new flash sales, price drops, and members-only bundles. The unsubscribe link is one click and the list is never sold.</p>
            <form class="newsletter" id="newsletter">
              <h3>Get deal alerts</h3>
              <p>Tell us your interests and we will send only relevant savings.</p>
              <div class="newsletter-row">
                <input id="newsletter-email" type="email" placeholder="you@example.com" required aria-label="Email address">
                <button class="btn" type="submit">Subscribe</button>
              </div>
            </form>
          </div>
        </div>
        <aside class="sidebar" aria-label="Shopping sidebar">
          <div>
            <h3>⚡ Flash sale</h3>
            <p>Today only: extra 10% off clearance home goods, applied automatically at checkout.</p>
            <a href="#sale">View flash deals</a>
          </div>
          <div>
            <h3>🔥 Trending now</h3>
            <div class="sidebar-product">
              <img src="https://picsum.photos/seed/av-trend1/128/128?grayscale&blur=2" alt="">
              <div class="meta">
                <strong>Cloud Linen Bedding</strong>
                <span class="price">$245.00</span>
              </div>
            </div>
            <div class="sidebar-product">
              <img src="https://picsum.photos/seed/av-trend2/128/128?grayscale&blur=2" alt="">
              <div class="meta">
                <strong>Wooden Serving Board</strong>
                <span class="price">$72.00</span>
              </div>
            </div>
          </div>
          <div>
            <h3>👀 Recently viewed</h3>
            <div class="sidebar-product">
              <img src="https://picsum.photos/seed/av-recent1/128/128?grayscale&blur=2" alt="">
              <div class="meta">
                <strong>Linen Throw Duvet Cover</strong>
                <span class="price">$189.00</span>
              </div>
            </div>
            <div class="sidebar-product">
              <img src="https://picsum.photos/seed/av-recent2/128/128?grayscale&blur=2" alt="">
              <div class="meta">
                <strong>Bamboo Storage Set</strong>
                <span class="price">$54.00</span>
              </div>
            </div>
          </div>
        </aside>
      </div>
    </section>

    <section class="section" id="clearance">
      <div class="container">
        <div class="section-head">
          <p class="eyebrow">Clearance</p>
          <h2>Final markdowns with extra savings</h2>
          <p>Clearance inventory is limited and updated frequently. Products are sold while supplies last, and bulk or resold quantities may be excluded.</p>
        </div>
        <div class="product-grid">
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-clear1/600/750?grayscale&blur=2" alt="Aveline clearance ceramic pitcher">
            <div class="product-body">
              <span class="product-category">Kitchen</span>
              <h3>Handmade Ceramic Pitcher</h3>
              <p>Previously $98, now $69. Small batch with slightly irregular glaze variation.</p>
              <div class="product-meta"><span class="price">$69.00</span><del>$98.00</del></div>
              <div class="product-actions"><a href="#" class="btn btn-small">Quick View</a></div>
            </div>
          </article>
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-clear2/600/750?grayscale&blur=2" alt="Aveline clearance linen rug">
            <div class="product-body">
              <span class="product-category">Home</span>
              <h3>Flatweave Linen Rug</h3>
              <p>Previously $340, now $259. Medium pile with fringe option.</p>
              <div class="product-meta"><span class="price">$259.00</span><del>$340.00</del></div>
              <div class="product-actions"><a href="#" class="btn btn-small">Quick View</a></div>
            </div>
          </article>
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-clear3/600/750?grayscale&blur=2" alt="Aveline clearance candle set">
            <div class="product-body">
              <span class="product-category">Wellness</span>
              <h3>Small-Batch Candle Set</h3>
              <p>Previously $64, now $46. Three hand-poured candles in reusable vessels.</p>
              <div class="product-meta"><span class="price">$46.00</span><del>$64.00</del></div>
              <div class="product-actions"><a href="#" class="btn btn-small">Quick View</a></div>
            </div>
          </article>
        </div>
        <div class="callout">
          <div>
            <h3>Need help choosing?</h3>
            <p>Our shopping team can recommend the right option based on room, use, and budget. For final sale items, the 30-day return policy is limited to manufacturing defects or damage.</p>
          </div>
          <a href="#contact" class="btn">Talk to Shopping Support</a>
        </div>
      </div>
    </section>

    <section class="section section-alt" id="gift-guides">
      <div class="container">
        <div class="section-head center">
          <p class="eyebrow">Gift Guides</p>
          <h2>Gifts for every occasion, curated</h2>
          <p>Gift guides are built with budget tiers, recipient profiles, and shipping notes. Every guide includes matched products and preparation tips.</p>
        </div>
        <div class="gift-grid">
          <article class="gift-card">
            <img src="https://picsum.photos/seed/av-gift-wedding/400/300?grayscale&blur=2" alt="Wedding gift guide">
            <div class="body">
              <h3>Wedding Gifts</h3>
              <p>Registry-friendly home and guest room essentials for larger celebrations.</p>
              <a href="#" class="btn btn-small">View guide</a>
            </div>
          </article>
          <article class="gift-card">
            <img src="https://picsum.photos/seed/av-gift-house/400/300?grayscale&blur=2" alt="Housewarming gift guide">
            <div class="body">
              <h3>Housewarming</h3>
              <p>Welcome-home sets for kitchen, entryway, and calm corners.</p>
              <a href="#" class="btn btn-small">View guide</a>
            </div>
          </article>
          <article class="gift-card">
            <img src="https://picsum.photos/seed/av-gift-birthday/400/300?grayscale&blur=2" alt="Birthday gift guide">
            <div class="body">
              <h3>Birthday</h3>
              <p>Curated personal and shared birthday gifts with optional gift wrapping.</p>
              <a href="#" class="btn btn-small">View guide</a>
            </div>
          </article>
          <article class="gift-card">
            <img src="https://picsum.photos/seed/av-gift-stock/400/300?grayscale&blur=2" alt="Stocking gift guide">
            <div class="body">
              <h3>Stocking Stuffers</h3>
              <p>Small, useful, unexpected finds that fit gift boxes and shipping limits.</p>
              <a href="#" class="btn btn-small">View guide</a>
            </div>
          </article>
        </div>
      </div>
    </section>

    <section class="section" id="reviews">
      <div class="container">
        <div class="section-head">
          <p class="eyebrow">Reviews</p>
          <h2>Loved by shoppers and gift givers</h2>
          <p>Our review policy requires verified purchases where possible and allows detailed ratings for shipping, packaging, and product quality.</p>
        </div>
        <div class="testimonial-grid">
          <figure class="testimonial-card">
            <div class="stars">★★★★★</div>
            <blockquote>“The gift guide arrived beautifully packed and the recipient actually used every item. The return policy wording was clear before checkout.”</blockquote>
            <figcaption class="reviewer">
              <img src="https://i.pravatar.cc/96?u=120341" alt="">
              <div>
                <div class="name">Maya R.</div>
                <div class="meta">Gift guide buyer · Verified purchase</div>
              </div>
            </figcaption>
          </figure>
          <figure class="testimonial-card">
            <div class="stars">★★★★★</div>
            <blockquote>“Shipping took longer than estimated for the oversized candle, but support refunded the difference automatically. Price match was applied without hassle.”</blockquote>
            <figcaption class="reviewer">
              <img src="https://i.pravatar.cc/96?u=120342" alt="">
              <div>
                <div class="name">Daniel K.</div>
                <div class="meta">Repeat customer · Home</div>
              </div>
            </figcaption>
          </figure>
          <figure class="testimonial-card">
            <div class="stars">★★★★☆</div>
            <blockquote>“Great curation, but I wish the sizing details were more prominent before adding to cart. Still, the top rated section helped me avoid a mistake.”</blockquote>
            <figcaption class="reviewer">
              <img src="https://i.pravatar.cc/96?u=120343" alt="">
              <div>
                <div class="name">Priya S.</div>
                <div class="meta">New shopper · Wellness</div>
              </div>
            </figcaption>
          </figure>
        </div>

        <div class="faq">
          <h3>Frequently asked questions</h3>
          <details>
            <summary>What shipping options do you offer?</summary>
            <p>We offer standard ground, express shipping, and calculated shipping for oversized or international orders. Free standard shipping applies on orders over $75.</p>
          </details>
          <details>
            <summary>What is the return policy?</summary>
            <p>We offer a 30-day return policy for unused items. Final sale items may be excluded unless damaged or defective. Return instructions and labels are provided in the account and order emails.</p>
          </details>
          <details>
            <summary>Do you offer price matching?</summary>
            <p>Yes. We price match eligible items from authorized retailers within 30 days of purchase. Discount codes and limited-time sales may not be combined.</p>
          </details>
          <details>
            <summary>How do gift orders work?</summary>
            <p>Gift orders can include gift wrapping, gift messaging, and delivery estimates. International shipping times vary by destination.</p>
          </details>
        </div>
      </div>
    </section>

    <section class="section section-alt" id="new-arrivals">
      <div class="container">
        <div class="section-head">
          <p class="eyebrow">New Arrivals</p>
          <h2>Fresh picks from the Aveline edit</h2>
          <p>The latest arrivals focus on seasonal rituals, small-batch goods, and gifts that feel personal without being complicated.</p>
        </div>
        <div class="product-grid four">
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-new1/600/750?grayscale&blur=2" alt="Aveline new candle">
            <div class="product-body">
              <span class="product-category">Wellness</span>
              <h3>Sunset Ritual Candle</h3>
              <p>Small batch soy candle with cedar, amber, and smoke notes.</p>
              <div class="product-meta"><span class="price">$42.00</span><del>$55.00</del></div>
              <div class="product-actions"><a href="#" class="btn btn-small">Quick View</a></div>
            </div>
          </article>
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-new2/600/750?grayscale&blur=2" alt="Aveline new table">
            <div class="product-body">
              <span class="product-category">Kitchen</span>
              <h3>Rustic Oak Serving Board</h3>
              <p>End-grain board with juice groove and leather handle.</p>
              <div class="product-meta"><span class="price">$88.00</span><del>$110.00</del></div>
              <div class="product-actions"><a href="#" class="btn btn-small">Quick View</a></div>
            </div>
          </article>
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-new3/600/750?grayscale&blur=2" alt="Aveline new textiles">
            <div class="product-body">
              <span class="product-category">Home</span>
              <h3>Organic Cotton Sheet Set</h3>
              <p>Queen size set with long hem and hidden button placket.</p>
              <div class="product-meta"><span class="price">$168.00</span><del>$210.00</del></div>
              <div class="product-actions"><a href="#" class="btn btn-small">Quick View</a></div>
            </div>
          </article>
          <article class="product-card">
            <img src="https://picsum.photos/seed/av-new4/600/750?grayscale&blur=2" alt="Aveline new desk">
            <div class="product-body">
              <span class="product-category">Workspace</span>
              <h3>Wood Desk Organizer</h3>
              <p>Mixed-media organizer with cable routing and drawer options.</p>
              <div class="product-meta"><span class="price">$76.00</span><del>$95.00</del></div>
              <div class="product-actions"><a href="#" class="btn btn-small">Quick View</a></div>
            </div>
          </article>
        </div>
      </div>
    </section>
  </main>

  <footer class="site-footer" id="contact">
    <div class="container footer-grid">
      <div>
        <img class="footer-logo" src="https://placehold.co/180x48?text=Aveline&font=poppins" alt="Aveline footer logo">
        <p>Thoughtfully made goods for intentional living. Online shopping, curated gift guides, and honest deals.</p>
        <div class="social">
          <a href="#" aria-label="Aveline on Instagram">IG</a>
          <a href="#" aria-label="Aveline on Pinterest">P</a>
          <a href="#" aria-label="Aveline on TikTok">TT</a>
          <a href="#" aria-label="Aveline on Facebook">FB</a>
        </div>
      </div>
      <div>
        <h3>Shop</h3>
        <ul>
          <li><a href="#shop">All Products</a></li>
          <li><a href="#new-arrivals">New Arrivals</a></li>
          <li><a href="#deals">Deals</a></li>
          <li><a href="#clearance">Clearance</a></li>
        </ul>
      </div>
      <div>
        <h3>Company</h3>
        <ul>
          <li><a href="#">Our Story</a></li>
          <li><a href="#">Gift Guides</a></li>
          <li><a href="#">Sustainability</a></li>
          <li><a href="#">Careers</a></li>
        </ul>
      </div>
      <div>
        <h3>Support</h3>
        <ul>
          <li><a href="#">Shipping Options</a></li>
          <li><a href="#">Returns</a></li>
          <li><a href="#">Price Match</a></li>
          <li><a href="#">FAQ</a></li>
        </ul>
      </div>
    </div>
    <div class="container footer-bottom">
      <p>© <span id="year">2026</span> Aveline Goods. All rights reserved.</p>
      <div class="footer-legal">
        <a href="#">Privacy</a>
        <a href="#">Terms</a>
      </div>
    </div>
  </footer>

  <div class="quiz-modal" id="quizModal" aria-hidden="true">
    <div class="quiz-card" role="dialog" aria-modal="true" aria-labelledby="quizTitle">
      <button class="quiz-close" id="quizClose" type="button" aria-label="Close style quiz">×</button>
      <div id="quizContent">
        <p class="eyebrow">Style quiz</p>
        <h2 id="quizTitle">Find your Aveline match</h2>
        <div class="quiz-progress"><div id="quizProgress"></div></div>
        <div id="quizSteps"></div>
      </div>
      <div class="quiz-result" id="quizResult" hidden>
        <h3>Your style match</h3>
        <p id="quizResultText"></p>
        <a href="#shop" class="btn" id="quizResultCTA">Shop this style</a>
      </div>
    </div>
  </div>

  <script>
    document.getElementById("year").textContent = new Date().getFullYear();

    const quizModal = document.getElementById("quizModal");
    const quizClose = document.getElementById("quizClose");
    const quizTitle = document.getElementById("quizTitle");
    const quizStepsEl = document.getElementById("quizSteps");
    const quizProgress = document.getElementById("quizProgress");
    const quizResult = document.getElementById("quizResult");
    const quizResultText = document.getElementById("quizResultText");
    const quizResultCTA = document.getElementById("quizResultCTA");

    const quiz = [
      {
        title: "What is your current ritual?",
        options: [
          { label: "Cozy evenings at home", value: "cozy" },
          { label: "Fresh slow mornings", value: "fresh" },
          { label: "Weekend reset and declutter", value: "reset" }
        ]
      },
      {
        title: "Which mood do you want to feel more of?",
        options: [
          { label: "Calm and grounded", value: "calm" },
          { label: "Bold and expressive", value: "bold" },
          { label: "Playful and curious", value: "playful" }
        ]
      },
      {
        title: "What should the perfect gift or purchase do?",
        options: [
          { label: "Comfort me", value: "comfort" },
          { label: "Inspire me", value: "inspire" },
          { label: "Refresh me", value: "refresh" }
        ]
      }
    ];

    let currentStep = 0;
    let answers = [];

    function openQuiz() {
      currentStep = 0;
      answers = [];
      quizResult.hidden = true;
      quizModal.classList.add("open");
      quizModal.setAttribute("aria-hidden", "false");
      renderQuizStep();
    }

    function closeQuiz() {
      quizModal.classList.remove("open");
      quizModal.setAttribute("aria-hidden", "true");
    }

    function renderQuizStep() {
      const step = quiz[currentStep];
      quizTitle.textContent = step.title;
      quizStepsEl.innerHTML = step.options.map((option, index) => `
        <button class="quiz-option" data-value="${option.value}" type="button">
          <span>${option.label}</span>
        </button>
      `).join("");
      quizProgress.firstElementChild.style.width = "0%";
      quizResult.hidden = true;
    }

    function chooseQuizOption(event) {
      const value = event.currentTarget.dataset.value;
      answers.push(value);
      currentStep += 1;

      if (currentStep < quiz.length) {
        quizProgress.firstElementChild.style.width = `${(currentStep / quiz.length) * 100}%`;
        renderQuizStep();
        return;
      }

      quizProgress.firstElementChild.style.width = "100%";
      const resultKey = answers.join("-");
      const resultCopy = {
        cozy: "Cozy Living: layered textiles, slow evening rituals, and warm lighting.",
        fresh: "Fresh Morning: organic cotton, ritual tools, and calm starter kits.",
        reset: "Weekend Reset: storage, cleaning tools, and decluttering systems.",
        calm: "Calm Living: sensory comfort, wellness routines, and grounding decor.",
        bold: "Bold Living: expressive color, statement pieces, and creative tools.",
        playful: "Playful Living: novelty gifts, fun home goods, and curiosity-driven finds.",
        comfort: "Comfort Focus: plush textiles, self-care sets, and cozy upgrades.",
        inspire: "Inspiration Focus: creative kits, design books, and inspiration collections.",
        refresh: "Refresh Focus: organizational products, seasonal decor, and renewal sets."
      };
      quizResultText.textContent = resultCopy[resultKey] || "Your custom Aveline style is ready.";
      quizResultCTA.href = "#new-arrivals";
      quizResult.hidden = false;
    }

    quizStepsEl.addEventListener("click", (event) => {
      const option = event.target.closest(".quiz-option");
      if (!option) return;
      option.addEventListener("click", (e) => {
        e.preventDefault();
        chooseQuizOption({ currentTarget: option });
      });
      option.click();
    });

    document.getElementById("quizOpen").addEventListener("click", openQuiz);
    quizClose.addEventListener("click", closeQuiz);
    quizModal.addEventListener("click", (event) => {
      if (event.target === quizModal) closeQuiz();
    });
    document.addEventListener("keydown", (event) => {
      if (event.key === "Escape") closeQuiz();
    });

    const newsletterForm = document.getElementById("newsletter");
    newsletterForm.addEventListener("submit", (event) => {
      event.preventDefault();
      const email = document.getElementById("newsletter-email");
      if (email.checkValidity()) {
        newsletterForm.innerHTML = '<p>Thanks — deal alerts are on. Check your inbox to confirm.</p>';
      }
    });
  </script>
</body>
</html>
View Axe Report (JSON)
{
  "testEngine": {
    "name": "axe-core",
    "version": "4.10.2"
  },
  "testRunner": {
    "name": "axe"
  },
  "testEnvironment": {
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
    "windowWidth": 1280,
    "windowHeight": 720,
    "orientationAngle": 0,
    "orientationType": "landscape-primary"
  },
  "timestamp": "2026-11-12T10:13:30.287Z",
  "url": "https://benchmark.aimac.invalid/f1135f83d5acd38c786cbbb5cdc06dddb5a453a4af32760aaeb99e2287ffc21d.html",
  "toolOptions": {
    "runOnly": {
      "type": "tag",
      "values": [
        "wcag2a",
        "wcag2aa",
        "wcag21a",
        "wcag21aa",
        "wcag22a",
        "wcag22aa"
      ]
    },
    "resultTypes": [
      "violations"
    ],
    "reporter": "v1"
  },
  "inapplicable": [
    {
      "id": "area-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <area> elements of image maps have alternative text",
      "help": "Active <area> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-braille-equivalent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
      "help": "aria-braille attributes must have a non-braille equivalent",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-command-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA button, link and menuitem has an accessible name",
      "help": "ARIA commands must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-deprecated-role",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements do not use deprecated roles",
      "help": "Deprecated ARIA roles must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-input-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA input field has an accessible name",
      "help": "ARIA input fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-meter-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA meter node has an accessible name",
      "help": "ARIA meter nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-progressbar-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA progressbar node has an accessible name",
      "help": "ARIA progressbar nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements with ARIA roles have all required ARIA attributes",
      "help": "Required ARIA attributes must be provided",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-children",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure elements with an ARIA role that require child roles contain them",
      "help": "Certain ARIA roles must contain particular children",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-parent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure elements with an ARIA role that require parent roles are contained by them",
      "help": "Certain ARIA roles must be contained by particular parents",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-roles",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all elements with a role attribute use a valid value",
      "help": "ARIA roles used must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-toggle-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA toggle field has an accessible name",
      "help": "ARIA toggle fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-tooltip-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every ARIA tooltip node has an accessible name",
      "help": "ARIA tooltip nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "autocomplete-valid",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag21aa",
        "wcag135",
        "EN-301-549",
        "EN-9.1.3.5",
        "ACT"
      ],
      "description": "Ensure the autocomplete attribute is correct and suitable for the form field",
      "help": "autocomplete attribute must be used correctly",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
      "nodes": []
    },
    {
      "id": "avoid-inline-spacing",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag21aa",
        "wcag1412",
        "EN-301-549",
        "EN-9.1.4.12",
        "ACT"
      ],
      "description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
      "help": "Inline text spacing must be adjustable with custom stylesheets",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
      "nodes": []
    },
    {
      "id": "blink",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag222",
        "section508",
        "section508.22.j",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <blink> elements are not used",
      "help": "<blink> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
      "nodes": []
    },
    {
      "id": "definition-list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dl> elements are structured correctly",
      "help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
      "nodes": []
    },
    {
      "id": "dlitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dt> and <dd> elements are contained by a <dl>",
      "help": "<dt> and <dd> elements must be contained by a <dl>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-focusable-content",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
      "help": "Frames with focusable content must not have tabindex=-1",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title-unique",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
      "help": "Frames must have a unique title attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.i",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements have an accessible name",
      "help": "Frames must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
      "nodes": []
    },
    {
      "id": "html-xml-lang-mismatch",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
      "help": "HTML elements with lang and xml:lang must have the same base language",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure input buttons have discernible text",
      "help": "Input buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <input type=\"image\"> elements have alternative text",
      "help": "Image buttons must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "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": "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": "<nav class=\"main-nav\" aria-label=\"Primary navigation\">",
          "target": [
            "nav"
          ]
        }
      ]
    },
    {
      "id": "aria-conditional-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are used as described in the specification of the element's role",
      "help": "ARIA attributes must be used as specified for the element's role",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-conditional-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<nav class=\"main-nav\" aria-label=\"Primary navigation\">",
          "target": [
            "nav"
          ]
        }
      ]
    },
    {
      "id": "aria-hidden-body",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "wcag412",
        "EN-301-549",
        "EN-9.1.3.1",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-hidden=\"true\" is not present on the document body.",
      "help": "aria-hidden=\"true\" must not be present on the document body",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-hidden-body",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "No aria-hidden attribute is present on document body"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<body>",
          "target": [
            "body"
          ]
        }
      ]
    },
    {
      "id": "aria-hidden-focus",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
      "help": "ARIA hidden element must not be focusable or contain focusable elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "focusable-modal-open",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements while a modal is open"
            },
            {
              "id": "focusable-disabled",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements contained within element"
            },
            {
              "id": "focusable-not-tabbable",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements contained within element"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<div class=\"quiz-modal\" id=\"quizModal\" aria-hidden=\"true\">",
          "target": [
            "#quizModal"
          ]
        }
      ]
    },
    {
      "id": "aria-prohibited-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are not prohibited for an element's role",
      "help": "Elements must only use permitted ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "aria-prohibited-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "impact": null,
          "html": "<nav class=\"main-nav\" aria-label=\"Primary navigation\">",
          "target": [
            "nav"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr-value",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all ARIA attributes have valid values",
      "help": "ARIA attributes must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-valid-attr-value",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute values are valid"
            },
            {
              "id": "aria-errormessage",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
            },
            {
              "id": "aria-level",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-level values are valid"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<nav class=\"main-nav\" aria-label=\"Primary navigation\">",
          "target": [
            "nav"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure attributes that begin with aria- are valid ARIA attributes",
      "help": "ARIA attributes must conform to valid names",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-valid-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute name is valid"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<nav class=\"main-nav\" aria-label=\"Primary navigation\">",
          "target": [
            "nav"
          ]
        }
      ]
    },
    {
      "id": "button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure buttons have discernible text",
      "help": "Buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "button-has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has inner text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<button class=\"btn btn-quiz\" id=\"quizOpen\" type=\"button\">Take the Style Quiz</button>",
          "target": [
            "#quizOpen"
          ]
        }
      ]
    },
    {
      "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>Thoughtfully made goods for everyday rituals.</h1>",
                  "target": [
                    "h1"
                  ]
                },
                {
                  "html": "<h2>Shopping that respects the details</h2>",
                  "target": [
                    "#why > .container > .center.section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Curated catalogs</h3>",
                  "target": [
                    ".feature-card:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Real reviews</h3>",
                  "target": [
                    ".feature-card:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Clear shipping</h3>",
                  "target": [
                    ".feature-card:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Simple returns</h3>",
                  "target": [
                    ".feature-card:nth-child(4) > h3"
                  ]
                },
                {
                  "html": "<h2>The most-loved products this season</h2>",
                  "target": [
                    ".split.container > .section-copy > h2"
                  ]
                },
                {
                  "html": "<h3>Nest &amp; Anchor Throw</h3>",
                  "target": [
                    ".split.container > .product-grid > .product-card:nth-child(1) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Field Bottle 750</h3>",
                  "target": [
                    ".split.container > .product-grid > .product-card:nth-child(2) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Quiet Morning Ritual Kit</h3>",
                  "target": [
                    ".split.container > .product-grid > .product-card:nth-child(3) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h2>Up to 25% off sitewide</h2>",
                  "target": [
                    ".deal-card > h2"
                  ]
                },
                {
                  "html": "<h2>Everyday savings, without the discount bin.</h2>",
                  "target": [
                    ".reverse > .section-copy > h2"
                  ]
                },
                {
                  "html": "<h3>Get deal alerts</h3>",
                  "target": [
                    "#newsletter > h3"
                  ]
                },
                {
                  "html": "<h3>\u26a1 Flash sale</h3>",
                  "target": [
                    "aside > div:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>\ud83d\udd25 Trending now</h3>",
                  "target": [
                    "aside > div:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>\ud83d\udc40 Recently viewed</h3>",
                  "target": [
                    "aside > div:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h2>Final markdowns with extra savings</h2>",
                  "target": [
                    "#clearance > .container > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Handmade Ceramic Pitcher</h3>",
                  "target": [
                    "#clearance > .container > .product-grid > .product-card:nth-child(1) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Flatweave Linen Rug</h3>",
                  "target": [
                    "#clearance > .container > .product-grid > .product-card:nth-child(2) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Small-Batch Candle Set</h3>",
                  "target": [
                    "#clearance > .container > .product-grid > .product-card:nth-child(3) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Need help choosing?</h3>",
                  "target": [
                    ".callout > div > h3"
                  ]
                },
                {
                  "html": "<h2>Gifts for every occasion, curated</h2>",
                  "target": [
                    "#gift-guides > .container > .center.section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Wedding Gifts</h3>",
                  "target": [
                    ".gift-card:nth-child(1) > .body > h3"
                  ]
                },
                {
                  "html": "<h3>Housewarming</h3>",
                  "target": [
                    ".gift-card:nth-child(2) > .body > h3"
                  ]
                },
                {
                  "html": "<h3>Birthday</h3>",
                  "target": [
                    ".gift-card:nth-child(3) > .body > h3"
                  ]
                },
                {
                  "html": "<h3>Stocking Stuffers</h3>",
                  "target": [
                    ".gift-card:nth-child(4) > .body > h3"
                  ]
                },
                {
                  "html": "<h2>Loved by shoppers and gift givers</h2>",
                  "target": [
                    "#reviews > .container > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Frequently asked questions</h3>",
                  "target": [
                    ".faq > h3"
                  ]
                },
                {
                  "html": "<h2>Fresh picks from the Aveline edit</h2>",
                  "target": [
                    "#new-arrivals > .container > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Sunset Ritual Candle</h3>",
                  "target": [
                    ".four > .product-card:nth-child(1) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Rustic Oak Serving Board</h3>",
                  "target": [
                    ".four > .product-card:nth-child(2) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Organic Cotton Sheet Set</h3>",
                  "target": [
                    ".four > .product-card:nth-child(3) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Wood Desk Organizer</h3>",
                  "target": [
                    ".product-card:nth-child(4) > .product-body > h3"
                  ]
                },
                {
                  "html": "<h3>Shop</h3>",
                  "target": [
                    ".footer-grid > div:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Company</h3>",
                  "target": [
                    ".footer-grid > div:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Support</h3>",
                  "target": [
                    "div:nth-child(4) > h3"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a heading"
            },
            {
              "id": "landmark",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<main>",
                  "target": [
                    "main"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a landmark region"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#6f6a63",
                "bgColor": "#faf8f5",
                "contrastRatio": 5.05,
                "fontSize": "8.6pt (11.52px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has sufficient color contrast of 5.05"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<p class=\"tagline\">Goods for intentional living</p>",
          "target": [
            ".tagline"
          ]
        }
      ]
    },
    {
      "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": "quizTitle",
              "relatedNodes": [],
              "impact": "critical",
              "message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<h2 id=\"quizTitle\">Find your Aveline match</h2>",
          "target": [
            "#quizTitle"
          ]
        }
      ]
    },
    {
      "id": "form-field-multiple-labels",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag332",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.3.3.2"
      ],
      "description": "Ensure form field does not have multiple label elements",
      "help": "Form field must not have multiple label elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "multiple-label",
              "data": null,
              "relatedNodes": [],
              "impact": "moderate",
              "message": "Form field does not have multiple label elements"
            }
          ],
          "impact": null,
          "html": "<input id=\"newsletter-email\" type=\"email\" placeholder=\"you@example.com\" required=\"\" aria-label=\"Email address\">",
          "target": [
            "#newsletter-email"
          ]
        }
      ]
    },
    {
      "id": "html-has-lang",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure every HTML document has a lang attribute",
      "help": "<html> element must have a lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-lang",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "The <html> element has a lang attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "html-lang-valid",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure the lang attribute of the <html> element has a valid value",
      "help": "<html> element must have a valid value for the lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "valid-lang",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Value of lang attribute is included in the list of valid languages"
            }
          ],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "TT7.b",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <img> elements have alternative text or a role of none or presentation",
      "help": "Images must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-alt",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has an alt attribute"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "alt-space-value",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has a valid alt attribute value"
            }
          ],
          "impact": null,
          "html": "<img src=\"https://placehold.co/240x64?text=Aveline&amp;font=poppins\" alt=\"Aveline logo\">",
          "target": [
            "img[alt=\"Aveline logo\"]"
          ]
        }
      ]
    },
    {
      "id": "label",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every form element has a label",
      "help": "Form elements must have labels",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-label attribute exists and is not empty"
            },
            {
              "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 id=\"newsletter-email\" type=\"email\" placeholder=\"you@example.com\" required=\"\" aria-label=\"Email address\">",
          "target": [
            "#newsletter-email"
          ]
        }
      ]
    },
    {
      "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>\n            <h3>\u26a1 Flash sale</h3>\n            <p>Today only: extra 10% off clearance home goods, applied automatically at checkout.</p>\n            <a href=\"#sale\">View flash deals</a>\n          </div>",
                  "target": [
                    "aside > div:nth-child(1)"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text by visual styling"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a href=\"#sale\">View flash deals</a>",
          "target": [
            "div:nth-child(1) > a[href$=\"#sale\"]"
          ]
        }
      ]
    },
    {
      "id": "link-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure links have discernible text",
      "help": "Links must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "focusable-no-name",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element is not in tab order or has accessible text"
            }
          ],
          "impact": null,
          "html": "<a class=\"logo\" href=\"#home\">\n        <img src=\"https://placehold.co/240x64?text=Aveline&amp;font=poppins\" alt=\"Aveline logo\">\n      </a>",
          "target": [
            ".logo"
          ]
        }
      ]
    },
    {
      "id": "list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that lists are structured correctly",
      "help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "only-listitems",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "List element only has direct children that are allowed inside <li> elements"
            }
          ],
          "impact": null,
          "html": "<ul>",
          "target": [
            "nav > ul"
          ]
        }
      ]
    },
    {
      "id": "listitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <li> elements are used semantically",
      "help": "<li> elements must be contained in a <ul> or <ol>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "listitem",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "List item has a <ul>, <ol> or role=\"list\" parent element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<li><a href=\"#home\">Home</a></li>",
          "target": [
            "nav > ul > li:nth-child(1)"
          ]
        }
      ]
    },
    {
      "id": "meta-viewport",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag2aa",
        "wcag144",
        "EN-301-549",
        "EN-9.1.4.4",
        "ACT"
      ],
      "description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
      "help": "Zooming and scaling must not be disabled",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "meta-viewport",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "<meta> tag does not disable zooming on mobile devices"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
          "target": [
            "meta[name=\"viewport\"]"
          ]
        }
      ]
    },
    {
      "id": "nested-interactive",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
      "help": "Interactive controls must not be nested",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "no-focusable-content",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element does not have focusable descendants"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<img src=\"https://placehold.co/240x64?text=Aveline&amp;font=poppins\" alt=\"Aveline logo\">",
          "target": [
            "img[alt=\"Aveline logo\"]"
          ]
        }
      ]
    },
    {
      "id": "summary-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure summary elements have discernible text",
      "help": "Summary elements must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<summary>What shipping options do you offer?</summary>",
          "target": [
            "details:nth-child(2) > summary"
          ]
        }
      ]
    },
    {
      "id": "target-size",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag22aa",
        "wcag258"
      ],
      "description": "Ensure touch targets have sufficient size and space",
      "help": "All touch targets must be 24px large, or leave sufficient space",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "target-size",
              "data": {
                "minSize": 24,
                "width": 180,
                "height": 48
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Control has sufficient size (180px by 48px, should be at least 24px by 24px)"
            },
            {
              "id": "target-offset",
              "data": {
                "closestOffset": 24,
                "minOffset": 24
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"logo\" href=\"#home\">\n        <img src=\"https://placehold.co/240x64?text=Aveline&amp;font=poppins\" alt=\"Aveline logo\">\n      </a>",
          "target": [
            ".logo"
          ]
        }
      ]
    }
  ],
  "incomplete": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": null,
                "bgColor": null,
                "contrastRatio": 0,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "bold",
                "messageKey": "bgGradient",
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"hero\" id=\"home\">",
                  "target": [
                    "#home"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element's background color could not be determined due to a background gradient"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"eyebrow\">New season edit</p>",
          "target": [
            ".hero-copy > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element's background color could not be determined due to a background gradient"
        }
      ]
    }
  ],
  "violations": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#c96f4a",
                "contrastRatio": 3.58,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<span class=\"deal-badge\">Limited time</span>",
                  "target": [
                    ".deal-badge"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.58 (foreground color: #ffffff, background color: #c96f4a, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span class=\"deal-badge\">Limited time</span>",
          "target": [
            ".deal-badge"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.58 (foreground color: #ffffff, background color: #c96f4a, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
        }
      ]
    }
  ],
  "coverage": {
    "contract": "main-document-vertical-scroll",
    "complete": true,
    "positions": [
      {
        "y": 0,
        "height": 8257
      },
      {
        "y": 576,
        "height": 8257
      },
      {
        "y": 1152,
        "height": 8257
      },
      {
        "y": 1728,
        "height": 8257
      },
      {
        "y": 2304,
        "height": 8257
      },
      {
        "y": 2880,
        "height": 8257
      },
      {
        "y": 3456,
        "height": 8257
      },
      {
        "y": 4032,
        "height": 8257
      },
      {
        "y": 4608,
        "height": 8257
      },
      {
        "y": 5184,
        "height": 8257
      },
      {
        "y": 5760,
        "height": 8257
      },
      {
        "y": 6336,
        "height": 8257
      },
      {
        "y": 6912,
        "height": 8257
      },
      {
        "y": 7488,
        "height": 8257
      },
      {
        "y": 7537,
        "height": 8257
      }
    ],
    "scans": 16,
    "max_states": 512,
    "settle_ms": 5000,
    "page_timeout_seconds": 150,
    "layout_stability": "consecutive 100ms size samples within one CSS pixel",
    "animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
    "interactive_states": "not exercised",
    "horizontal_scroll": "not exercised"
  }
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "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: "Reviews", "New Arrivals", "Sale".
-   **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: "Clearance", "Top Rated", "Best Sellers".
    -   **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "shipping options", "price match", "return policy".
    -   **Visuals:** Integrate relevant placeholder images logically within the content sections.
    -   **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Quick View", "Subscribe", "Compare".
-   **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: "style quiz".
-   **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "trending products", "flash sales", "recently viewed".
-   **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.