OpenAI GPT 6.1 Sol – Food and Drink

via OpenAI · Generated

  • AIMAC Debt 2.66
  • Cost $0.17
  • Total Violations 2
  • HTML Size 60 KB
  • Em Dashes 5

Screenshot

View OpenAI GPT 6.1 Sol Food and Drink page View Live Page

Accessibility Issues Found

2 Serious

  • color-contrast serious 2 instances

    Elements must meet minimum color contrast ratio thresholds

    Example HTML <p>Match the weight of the wine to the dish, then look for a little acidity. A crisp Sauvignon Blanc loves lemony greens; a light Pinot Noir feels ...

Artifacts

View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="theme-color" content="#f7f5ee">
  <meta name="description" content="Table & Field is your guide to seasonal recipes, thoughtful meal plans, neighborhood restaurants, and a more joyful everyday kitchen.">
  <title>Table & Field — Eat well. Live a little.</title>
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Playfair+Display:wght@400;500;600;700&display=swap" rel="stylesheet">
  <style>
    :root{--paper:#f7f5ee;--ink:#263b2e;--muted:#656b5e;--orange:#b74725;--line:#dcded1;--white:#fffefa;--serif:'Playfair Display',Georgia,serif;--sans:'DM Sans',Arial,sans-serif}
    *{box-sizing:border-box}
    html{scroll-behavior:smooth;scroll-padding-top:100px}
    body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.65}
    button,input,select{font:inherit}
    button,a,input,select{touch-action:manipulation}
    a{color:inherit;text-decoration:none}
    button{cursor:pointer}
    img{display:block;width:100%;height:100%;object-fit:cover}
    h1,h2,h3,h4,p{margin:0}
    h1,h2,h3,h4{font-family:var(--serif);font-weight:500;line-height:1.15}
    button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid var(--orange);outline-offset:5px}
    .container{width:min(1240px,calc(100% - 96px));margin:auto}
    .eyebrow{font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase}
    .announcement{background:var(--ink);color:var(--paper);text-align:center;padding:9px 20px;font-size:11px;letter-spacing:1.1px}
    .announcement a{border-bottom:1px solid #a5b09d;padding-bottom:2px;margin-left:8px}
    .site-header{background:var(--paper);border-bottom:1px solid var(--line);position:relative;z-index:10}
    .header-inner{display:flex;align-items:center;justify-content:space-between;min-height:102px;gap:24px}
    .brand{display:flex;align-items:center;gap:12px;flex-shrink:0}
    .brand img{width:43px;height:43px;border-radius:50%}
    .brand-name{display:block;font-family:var(--serif);font-weight:600;font-size:25px;letter-spacing:-1px;line-height:1.2}
    .brand-tagline{display:block;font-size:10px;letter-spacing:1.5px;text-transform:uppercase;margin-top:5px}
    nav{display:flex;align-items:center;gap:25px}
    nav a{font-size:12px;font-weight:600;white-space:nowrap}
    nav a:hover{color:var(--orange)}
    .nav-news{padding:10px 15px;border:1px solid var(--ink)}
    .menu-toggle{display:none;background:none;border:1px solid var(--line);padding:8px 12px}
    .button{display:inline-flex;align-items:center;justify-content:center;gap:22px;padding:14px 22px;border:1px solid var(--ink);background:var(--ink);color:var(--white);font-size:12px;font-weight:600;line-height:1.5;transition:background .2s,transform .2s}
    .button:hover{background:#3d5541;transform:translateY(-2px)}
    .button.orange{background:var(--orange);border-color:var(--orange)}
    .button.orange:hover{background:#94371c}
    .button.light{color:var(--ink);background:transparent}
    .button.light:hover{background:#eaece2}
    .text-link{display:inline-flex;align-items:center;gap:15px;font-size:12px;font-weight:700;border-bottom:1px solid currentColor;padding-bottom:4px}
    .text-link:hover{color:var(--orange)}
    .hero{display:grid;grid-template-columns:1fr 1.13fr;gap:65px;align-items:center;padding:58px 0 64px}
    .hero .eyebrow{color:var(--orange);display:flex;align-items:center;gap:10px}
    .hero .eyebrow:before{content:"";width:7px;height:7px;background:var(--orange);border-radius:50%}
    h1{font-size:clamp(48px,5.8vw,78px);letter-spacing:-3.2px;margin:21px 0}
    h1 em{font-weight:400;color:var(--orange)}
    .hero-copy>p{color:var(--muted);font-size:15px;max-width:400px;line-height:1.9}
    .hero-actions{display:flex;align-items:center;gap:25px;margin-top:30px;flex-wrap:wrap}
    .reader-note{display:flex;align-items:center;gap:12px;margin-top:38px;font-size:11px;color:var(--muted)}
    .avatars{display:flex;padding-left:0}
    .avatars img{width:31px;height:31px;border:2px solid var(--paper);border-radius:50%;margin-right:-9px}
    .avatars img:last-child{margin-right:0}
    .hero-visual{position:relative}
    .hero-photo{height:490px;border-radius:100px 0 0 0;background:#e7dcd0}
    .image-label{position:absolute;top:22px;right:22px;background:var(--paper);padding:7px 11px;font-size:10px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase}
    .hero-feature{position:absolute;bottom:22px;left:-25px;right:35px;background:var(--white);padding:22px 25px;display:flex;justify-content:space-between;align-items:center;gap:20px;box-shadow:0 8px 30px #263b2e10}
    .hero-feature .eyebrow{font-size:9px;color:var(--orange)}
    .hero-feature h3{font-size:24px;margin:6px 0}
    .hero-feature p{font-size:11px;color:var(--muted)}
    .round-button{flex-shrink:0;width:43px;height:43px;border-radius:50%;border:1px solid var(--line);background:none;color:var(--ink);font-size:23px}
    .round-button:hover{background:var(--ink);color:white}
    .values-strip{border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;grid-template-columns:repeat(4,1fr);padding:23px 0;gap:20px}
    .value{display:flex;align-items:center;gap:13px}
    .value-icon{font-size:24px;font-family:Georgia,serif;color:var(--orange)}
    .value strong{font-size:12px;display:block}
    .value span:last-child{font-size:11px;color:var(--muted)}
    .section{padding:76px 0}
    .section-heading{display:flex;justify-content:space-between;align-items:end;gap:30px;margin-bottom:30px}
    .section-heading h2{font-size:40px;letter-spacing:-1.2px;margin-top:10px}
    .section-heading>p{max-width:340px;font-size:13px;color:var(--muted)}
    .section-heading .text-link{flex-shrink:0}
    .recipes-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
    .recipe-card{display:flex;flex-direction:column}
    .card-image{height:245px;position:relative;overflow:hidden;background:#e6e5db}
    .card-image img{transition:transform .45s}
    .recipe-card:hover .card-image img{transform:scale(1.04)}
    .pill{position:absolute;left:14px;top:14px;background:var(--paper);font-size:9px;letter-spacing:1px;font-weight:700;text-transform:uppercase;padding:6px 10px}
    .recipe-meta{font-size:10px;letter-spacing:.7px;text-transform:uppercase;color:var(--orange);margin-top:19px}
    .recipe-card h3{font-size:25px;margin:8px 0 12px;letter-spacing:-.4px}
    .recipe-card p{font-size:13px;color:var(--muted);margin-bottom:20px}
    .recipe-card .text-link{align-self:flex-start;margin-top:auto;background:none;border-width:0 0 1px;padding-left:0;padding-right:0;color:var(--ink)}
    .recipe-card .text-link:hover{color:var(--orange)}
    .small-note{font-size:10px;color:var(--muted);margin-top:18px}
    .meal-section{background:#e9ecdf;border-top:1px solid #dde1d1;border-bottom:1px solid #dde1d1}
    .meal-layout{display:grid;grid-template-columns:.9fr 1.1fr;gap:75px;align-items:center}
    .meal-copy h2{font-size:46px;letter-spacing:-1.5px;margin:15px 0 23px}
    .meal-copy p{font-size:14px;color:var(--muted);margin-bottom:15px}
    .meal-copy .text-link{margin-top:12px}
    .planner{background:var(--white);padding:30px;border:1px solid #d7ddca;box-shadow:8px 8px 0 #dce1d1}
    .planner-title{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:18px;margin-bottom:20px}
    .planner-title h3{font-size:24px}
    .planner-title span{font-size:10px;color:var(--muted)}
    .form-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}
    label{font-size:11px;font-weight:700;display:block}
    select,input{width:100%;background:var(--white);border:1px solid #cbd1c2;border-radius:0;padding:11px 12px;color:var(--ink);margin-top:7px;font-size:12px}
    .planner-result{margin:22px 0;padding:20px;background:var(--paper)}
    .planner-result .eyebrow{color:var(--orange);font-size:9px}
    .planner-result h4{font-size:23px;margin:7px 0 10px}
    .planner-result p{font-size:12px;color:var(--muted)}
    .nutrition{display:flex;gap:25px;border-top:1px solid var(--line);padding-top:12px;margin-top:15px}
    .nutrition strong{display:block;font-size:17px}
    .nutrition span{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.7px}
    .planner .button{width:100%}
    .planner .small-note{margin-top:12px;line-height:1.6}
    .culture-layout{display:grid;grid-template-columns:1.07fr 1fr;gap:65px;align-items:center}
    .culture-image{height:470px;position:relative}
    .photo-credit{position:absolute;bottom:12px;left:14px;background:#f7f5eee8;padding:5px 9px;font-size:9px;letter-spacing:1px;text-transform:uppercase}
    .culture-copy h2{font-size:43px;letter-spacing:-1.1px;margin:15px 0 20px}
    .culture-copy p{font-size:14px;color:var(--muted);margin:0 0 16px}
    .culture-copy .text-link{margin-top:10px}
    .mini-feature{display:flex;align-items:center;gap:17px;padding:18px 0;margin-top:28px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
    .mini-feature .icon{font-size:30px;color:var(--orange)}
    .mini-feature strong{display:block;font-size:12px;margin-bottom:4px}
    .mini-feature p{margin:0;font-size:12px}
    .restaurants{background:var(--ink);color:var(--paper)}
    .restaurants .section-heading>p,.restaurants .eyebrow{color:#c8d0bc}
    .restaurant-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
    .restaurant-card img{height:210px}
    .restaurant-card .location{font-size:10px;color:#c7cfbb;letter-spacing:1px;text-transform:uppercase;margin:18px 0 8px}
    .restaurant-card h3{font-size:26px}
    .restaurant-card p{font-size:13px;color:#d1d7c8;margin:12px 0 18px}
    .restaurant-card button{color:var(--paper);background:transparent;border-width:0 0 1px;padding-left:0;padding-right:0}
    .restaurant-card button:hover{color:#f1b995}
    .restaurant-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}
    .restaurant-heading span{border:1px solid #60735e;border-radius:50%;width:37px;height:37px;display:grid;place-items:center;font-size:12px}
    .restaurants .small-note{color:#c7cfbb;margin-top:27px}
    .kitchen-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:35px}
    .kitchen-feature{display:grid;grid-template-columns:1fr 1fr;background:#eae6db}
    .kitchen-feature img{min-height:340px}
    .kitchen-feature .copy{padding:30px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center}
    .kitchen-feature h3{font-size:29px;margin:14px 0}
    .kitchen-feature p{font-size:13px;color:var(--muted);margin-bottom:20px}
    .tips{padding:0 6px}
    .tip{padding:22px 0;border-bottom:1px solid var(--line)}
    .tip:first-child{padding-top:0}
    .tip:last-child{border-bottom:0}
    .tip .eyebrow{color:var(--orange);font-size:9px}
    .tip h3{font-size:23px;margin:8px 0}
    .tip p{font-size:13px;color:var(--muted)}
    .community{border-top:1px solid var(--line);padding:55px 0 70px}
    .community-heading{text-align:center;margin-bottom:28px}
    .community-heading h2{font-size:32px;margin:9px 0}
    .quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
    .quote{border:1px solid var(--line);background:var(--white);padding:25px}
    .stars{color:var(--orange);letter-spacing:3px;font-size:12px}
    blockquote{margin:14px 0 20px;font-size:14px;line-height:1.8}
    .quote-person{display:flex;align-items:center;gap:12px}
    .quote-person img{width:36px;height:36px;border-radius:50%}
    .quote-person strong{display:block;font-size:11px}
    .quote-person span{font-size:10px;color:var(--muted)}
    .newsletter{background:#ecdccb;padding:52px 0}
    .newsletter-inner{display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:70px}
    .newsletter h2{font-size:40px;margin:10px 0 14px;letter-spacing:-1px}
    .newsletter p{font-size:13px;color:#625e50;max-width:450px}
    .subscribe-row{display:flex;gap:8px}
    .subscribe-row input{margin:0;background:var(--paper);min-width:0}
    .subscribe-row .button{flex-shrink:0}
    .newsletter label{margin-bottom:8px}
    .newsletter .small-note{margin-top:10px;font-size:10px}
    #subscribe-status{font-size:12px;margin-top:10px}
    .faq{padding:55px 0;display:grid;grid-template-columns:.8fr 1.2fr;gap:80px}
    .faq h2{font-size:33px;margin-top:10px}
    details{border-bottom:1px solid var(--line);padding:17px 0}
    details:first-child{padding-top:0}
    summary{cursor:pointer;font-size:13px;font-weight:600;list-style:none;display:flex;justify-content:space-between;gap:20px}
    summary::-webkit-details-marker{display:none}
    summary:after{content:"+";font-size:20px;font-weight:400;line-height:1}
    details[open] summary:after{content:"−"}
    details p{font-size:13px;color:var(--muted);margin-top:13px}
    footer{border-top:1px solid var(--line);padding:40px 0 20px}
    .footer-top{display:grid;grid-template-columns:1.7fr 1fr 1fr 1fr;gap:40px;padding-bottom:35px}
    .footer-intro p{font-size:12px;color:var(--muted);max-width:270px;margin-top:15px}
    footer h4{font-family:var(--sans);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;margin:5px 0 17px}
    .footer-links{display:flex;flex-direction:column;align-items:flex-start;gap:9px;font-size:12px;color:var(--muted)}
    .footer-links a:hover{color:var(--orange)}
    .footer-bottom{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding-top:20px;font-size:10px;color:var(--muted)}
    .footer-bottom div{display:flex;gap:20px}
    .legal-link{border:0;background:none;padding:0;font-size:10px;color:var(--muted)}
    dialog{width:min(680px,calc(100% - 32px));max-height:85vh;border:1px solid var(--line);padding:35px;background:var(--paper);color:var(--ink)}
    dialog::backdrop{background:#14221bc9;backdrop-filter:blur(4px)}
    .dialog-close{position:absolute;top:12px;right:14px;border:none;background:none;font-size:26px;color:var(--ink)}
    dialog h2{font-size:32px;letter-spacing:-.7px;padding-right:20px;margin:8px 0 18px}
    dialog h3{font-size:21px;margin:22px 0 10px}
    dialog p,dialog li{font-size:14px;color:var(--muted)}
    dialog p{margin:12px 0}
    dialog li{margin-bottom:9px}
    .dialog-meta{color:var(--orange)!important;font-size:11px!important;text-transform:uppercase;letter-spacing:1px}
    .skip-link{position:fixed;top:-100px;left:15px;padding:10px;background:var(--ink);color:white;z-index:100}
    .skip-link:focus{top:10px}
    @media(min-width:1500px){.container{width:min(1360px,calc(100% - 120px))}.hero-photo{height:540px}}
    @media(max-width:1100px){.container{width:calc(100% - 60px)}nav{gap:16px}nav a{font-size:11px}.brand-name{font-size:22px}.brand img{width:36px;height:36px}.hero{gap:40px}.hero-photo{height:450px}.meal-layout{gap:40px}.kitchen-grid{grid-template-columns:1fr 1fr}.kitchen-feature{grid-template-columns:1fr}.kitchen-feature img{height:210px;min-height:0}.kitchen-feature .copy{padding:25px}.culture-layout{gap:40px}}
    @media(max-width:850px){.header-inner{min-height:82px}.menu-toggle{display:block}nav{display:none;position:absolute;top:100%;left:0;right:0;background:var(--paper);padding:25px 30px;border-bottom:1px solid var(--line);flex-direction:column;align-items:stretch;gap:20px}nav.open{display:flex}nav a{font-size:14px}.hero{grid-template-columns:1fr 1fr;gap:28px;padding-top:35px}h1{font-size:53px;letter-spacing:-2px}.hero-photo{height:420px}.hero-feature{left:-15px;right:15px;padding:17px}.hero-feature h3{font-size:20px}.hero-actions{gap:20px}.reader-note{margin-top:25px}.values-strip{grid-template-columns:repeat(2,1fr)}.section{padding:55px 0}.section-heading h2{font-size:34px}.card-image{height:190px}.recipe-card h3{font-size:22px}.recipes-grid,.restaurant-grid{gap:18px}.meal-layout,.culture-layout{gap:30px}.meal-copy h2,.culture-copy h2{font-size:36px}.planner{padding:23px}.form-row{gap:10px}.nutrition{gap:20px}.culture-image{height:430px}.restaurant-card img{height:165px}.restaurant-card h3{font-size:23px}.newsletter-inner{gap:30px}.newsletter h2{font-size:33px}.quotes{gap:15px}.quote{padding:20px}.footer-top{gap:25px;grid-template-columns:1.4fr 1fr 1fr}.footer-top>div:last-child{grid-column:2 / 4}.faq{gap:35px}}
    @media(max-width:620px){.container{width:calc(100% - 36px)}.announcement{font-size:9px;letter-spacing:.3px}.brand-name{font-size:22px}.brand-tagline{font-size:8px}.hero{grid-template-columns:1fr;gap:35px;padding:35px 0 40px}h1{font-size:58px;max-width:400px;margin:17px 0}.hero-copy>p{font-size:14px}.reader-note{margin-top:25px}.hero-photo{height:360px;border-radius:75px 0 0 0}.hero-feature{left:15px;right:15px;bottom:15px}.hero-feature h3{font-size:23px}.value{gap:9px}.value strong{font-size:11px}.value span:last-child{font-size:10px}.values-strip{gap:17px;padding:20px 0}.section-heading{flex-wrap:wrap;gap:17px;margin-bottom:25px}.section-heading h2{font-size:34px}.section-heading>p{max-width:100%}.recipes-grid,.restaurant-grid,.quotes{grid-template-columns:1fr;gap:32px}.card-image{height:270px}.recipe-card h3{font-size:27px}.recipe-card p{margin-bottom:14px}.meal-layout,.culture-layout,.newsletter-inner,.faq{grid-template-columns:1fr;gap:30px}.meal-copy h2,.culture-copy h2{font-size:39px}.planner{padding:23px;box-shadow:5px 5px 0 #dce1d1}.culture-image{height:340px}.restaurant-card img{height:250px}.restaurant-card h3{font-size:28px}.kitchen-grid{grid-template-columns:1fr;gap:30px}.kitchen-feature{grid-template-columns:1fr 1fr}.kitchen-feature img{height:100%;min-height:330px}.kitchen-feature .copy{padding:22px}.kitchen-feature h3{font-size:26px}.quote{padding:24px}.quotes{gap:15px}.newsletter{padding:40px 0}.newsletter-inner{gap:25px}.subscribe-row{gap:7px}.subscribe-row .button{padding:13px 16px}.faq{padding:40px 0}.footer-top{grid-template-columns:1fr 1fr;gap:30px}.footer-intro{grid-column:1 / -1}.footer-top>div:last-child{grid-column:auto}.footer-bottom{flex-direction:column;gap:12px}.community{padding:40px 0}.section{padding:45px 0}.nutrition{gap:28px}dialog{padding:28px 22px}}
    @media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important}}
  </style>
</head>
<body>
  <a class="skip-link" href="#main">Skip to content</a>
  <div class="announcement">A little inspiration for your everyday table. <a href="#newsletter">Meet your new Sunday read ↗</a></div>

  <header class="site-header">
    <div class="container header-inner">
      <a class="brand" href="#home" aria-label="Table and Field home">
        <img src="https://placehold.co/86x86/263b2e/f7f5ee?text=T%26F&amp;font=playfair%20display" alt="Table & Field monogram" width="43" height="43">
        <span><span class="brand-name">Table &amp; Field<span style="color:var(--orange)">.</span></span><span class="brand-tagline">Eat well. Live a little.</span></span>
      </a>
      <button class="menu-toggle" aria-expanded="false" aria-controls="primary-nav" type="button">Menu ☰</button>
      <nav id="primary-nav" aria-label="Primary navigation">
        <a href="#recipes">Recipes</a>
        <a href="#meal-plans">Meal Plans</a>
        <a href="#restaurants">Restaurant Reviews</a>
        <a href="#culture">Food Culture</a>
        <a href="#kitchen">Kitchen Notes</a>
        <a class="nav-news" href="#newsletter">The Sunday Edit ↗</a>
      </nav>
    </div>
  </header>

  <main id="main">
    <div class="container" id="home">
      <section class="hero" aria-labelledby="hero-title">
        <div class="hero-copy">
          <div class="eyebrow">Seasonal food. Everyday joy.</div>
          <h1 id="hero-title">A good life<br>starts at<br><em>the table.</em></h1>
          <p>Recipes worth repeating. Places worth finding. A little know-how for a kitchen that feels like you. Pull up a chair — there’s always room for one more.</p>
          <div class="hero-actions">
            <a class="button orange" href="#recipes">Find your next favorite <span aria-hidden="true">↗</span></a>
            <a class="text-link" href="#culture">Our philosophy <span aria-hidden="true">→</span></a>
          </div>
          <div class="reader-note">
            <div class="avatars" aria-hidden="true">
              <img src="https://i.pravatar.cc/64?u=tablefield1" alt="" width="31" height="31">
              <img src="https://i.pravatar.cc/64?u=tablefield2" alt="" width="31" height="31">
              <img src="https://i.pravatar.cc/64?u=tablefield3" alt="" width="31" height="31">
            </div>
            <span>For curious cooks and very good eaters.</span>
          </div>
        </div>
        <div class="hero-visual">
          <img class="hero-photo" src="https://picsum.photos/id/1080/900/950" alt="Fresh strawberries, ready for a seasonal dessert" width="900" height="950" fetchpriority="high">
          <span class="image-label">The seasonal table / No. 01</span>
          <div class="hero-feature">
            <div>
              <div class="eyebrow">This week’s little obsession</div>
              <h3>Strawberries, meet simplicity.</h3>
              <p>15 minutes · 5 ingredients · A very happy ending</p>
            </div>
            <button class="round-button" type="button" data-recipe="strawberries" aria-label="Open strawberries and whipped yogurt recipe">↗</button>
          </div>
        </div>
      </section>

      <div class="values-strip" aria-label="Our approach">
        <div class="value"><span class="value-icon" aria-hidden="true">✳</span><div><strong>Led by the seasons</strong><span>Better flavor, less fuss</span></div></div>
        <div class="value"><span class="value-icon" aria-hidden="true">◷</span><div><strong>Made for real life</strong><span>Good food on your schedule</span></div></div>
        <div class="value"><span class="value-icon" aria-hidden="true">♧</span><div><strong>A balanced approach</strong><span>Nourishment, not rules</span></div></div>
        <div class="value"><span class="value-icon" aria-hidden="true">↗</span><div><strong>Curiosity on the menu</strong><span>New flavors, familiar joy</span></div></div>
      </div>

      <section class="section" id="recipes" aria-labelledby="recipes-title">
        <div class="section-heading">
          <div><div class="eyebrow">From our kitchen to yours</div><h2 id="recipes-title">On the menu this week.</h2></div>
          <button class="text-link" id="download-cookbook" type="button" style="background:none;border-width:0 0 1px;color:inherit">Download Cookbook <span aria-hidden="true">↓</span></button>
        </div>
        <div class="recipes-grid">
          <article class="recipe-card">
            <div class="card-image">
              <img src="https://picsum.photos/id/292/700/520" alt="Seasonal food inspiration for a homemade grain bowl" width="700" height="520" loading="lazy">
              <span class="pill">Weeknight favorite</span>
            </div>
            <div class="recipe-meta">30 minutes &nbsp; / &nbsp; Vegetarian</div>
            <h3>Roasted vegetable &amp; herby farro bowls</h3>
            <p>Golden-edged vegetables, chewy grains, and a bright lemon-tahini dressing. Roast an extra tray and tomorrow’s lunch practically makes itself.</p>
            <button class="text-link" type="button" data-recipe="farro">Try Recipe <span aria-hidden="true">↗</span></button>
          </article>
          <article class="recipe-card">
            <div class="card-image">
              <img src="https://picsum.photos/seed/lemon-table/700/520" alt="Editorial photograph illustrating a relaxed weeknight supper" width="700" height="520" loading="lazy">
              <span class="pill">One pan, less washing up</span>
            </div>
            <div class="recipe-meta">35 minutes &nbsp; / &nbsp; High protein</div>
            <h3>Lemon chicken with white beans &amp; greens</h3>
            <p>A skillet supper with crisp chicken, creamy cannellini beans, and plenty of greens. The trick? Let the lemon and pan juices do the heavy lifting.</p>
            <button class="text-link" type="button" data-recipe="chicken">Try Recipe <span aria-hidden="true">↗</span></button>
          </article>
          <article class="recipe-card">
            <div class="card-image">
              <img src="https://picsum.photos/id/1080/700/520" alt="Ripe strawberries for a yogurt and honey dessert" width="700" height="520" loading="lazy">
              <span class="pill">Something sweet</span>
            </div>
            <div class="recipe-meta">15 minutes &nbsp; / &nbsp; No oven needed</div>
            <h3>Honeyed strawberries &amp; whipped yogurt</h3>
            <p>Juicy berries, a spoonful of tangy yogurt, and toasted pistachios. A pinch of salt makes this wonderfully simple dessert taste anything but ordinary.</p>
            <button class="text-link" type="button" data-recipe="strawberries">Try Recipe <span aria-hidden="true">↗</span></button>
          </article>
        </div>
        <p class="small-note">Our recipes include ingredient weights, practical substitutions, and clear instructions. Photography is illustrative.</p>
      </section>
    </div>

    <section class="section meal-section" id="meal-plans" aria-labelledby="plans-title">
      <div class="container meal-layout">
        <div class="meal-copy">
          <div class="eyebrow">Less “what’s for dinner?”</div>
          <h2 id="plans-title">A little planning.<br>A lot more breathing room.</h2>
          <p>A good meal plan isn’t a rigid schedule. It’s a handful of useful ingredients, a little mise en place, and enough flexibility for the evening that doesn’t go to plan.</p>
          <p>Start with a bowl you’ll actually look forward to. Choose your preference and portion size, then use the same grains and vegetables for lunch tomorrow. Balanced eating can be satisfying, economical, and wonderfully uncomplicated.</p>
          <a class="text-link" href="#kitchen">Learn the prep-ahead basics <span aria-hidden="true">→</span></a>
        </div>
        <div class="planner">
          <div class="planner-title"><h3>Your dinner, sorted.</h3><span>THE BOWL BUILDER</span></div>
          <div class="form-row">
            <label for="preference">How do you like to eat?
              <select id="preference">
                <option value="plant">Plant-based</option>
                <option value="vegetarian">Vegetarian</option>
                <option value="chicken">A little of everything</option>
              </select>
            </label>
            <label for="portion">Tonight’s appetite
              <select id="portion">
                <option value="1">Regular portion</option>
                <option value="1.3">Extra hungry</option>
                <option value="0.8">A lighter bowl</option>
              </select>
            </label>
          </div>
          <div class="planner-result" aria-live="polite" aria-atomic="true">
            <div class="eyebrow">Your dinner suggestion</div>
            <h4 id="bowl-name">Chickpea &amp; roasted vegetable bowl</h4>
            <p id="bowl-description">Brown rice, chickpeas, seasonal vegetables, and a spoonful of lemon-tahini dressing.</p>
            <div class="nutrition">
              <div><strong id="calories">540</strong><span>kcal / serving</span></div>
              <div><strong id="protein">18g</strong><span>Protein</span></div>
              <div><strong id="fiber">13g</strong><span>Fiber</span></div>
            </div>
          </div>
          <button class="button" id="bowl-recipe" type="button">Make this bowl <span aria-hidden="true">↗</span></button>
          <p class="small-note">Approximate nutrition for one serving, not personalized dietary advice. Values vary with brands, quantities, and preparation. Check ingredients for your allergies.</p>
        </div>
      </div>
    </section>

    <section class="container section culture-layout" id="culture" aria-labelledby="culture-title">
      <div class="culture-image">
        <img src="https://picsum.photos/seed/neighborhood-market/800/900" alt="Atmospheric editorial image for our stories about food and place" width="800" height="900" loading="lazy">
        <span class="photo-credit">Field notes / Food &amp; belonging</span>
      </div>
      <div class="culture-copy">
        <div class="eyebrow">Beyond the recipe</div>
        <h2 id="culture-title">Good food has<br>a story to tell.</h2>
        <p>The best meals connect us to something: a grower at the market, a family recipe scribbled on a card, or a neighborhood café that remembers our order. We’re interested in those stories as much as what’s on the plate.</p>
        <p>Our approach to food culture starts with curiosity, not a hunt for the next trend. Fermentation, whole-grain baking, and root-to-stem cooking are finding fresh audiences, but they’re also longstanding traditions. We celebrate the people and places behind them.</p>
        <p>Cooking seasonally is one small way to pay attention. Ask what tastes good right now, learn one new technique, and leave space for a meal shared with someone else. That’s our kind of food culture.</p>
        <button class="text-link" type="button" data-story="culture" style="background:none;border-width:0 0 1px;color:inherit">Read our field notes <span aria-hidden="true">↗</span></button>
        <div class="mini-feature">
          <span class="icon" aria-hidden="true">✺</span>
          <div><strong>A small shift with a big impact</strong><p>Buy what’s abundant. Use what you have. Make something delicious.</p></div>
        </div>
      </div>
    </section>

    <section class="section restaurants" id="restaurants" aria-labelledby="restaurants-title">
      <div class="container">
        <div class="section-heading">
          <div><div class="eyebrow">The neighborhood shortlist</div><h2 id="restaurants-title">Worth going out for.</h2></div>
          <p>Warm welcomes, thoughtful menus, and the kind of cooking you talk about on the way home. These are the places we’d send a friend.</p>
        </div>
        <div class="restaurant-grid">
          <article class="restaurant-card">
            <img src="https://picsum.photos/seed/restaurant-olive/700/460" alt="Illustrative scene for a neighborhood restaurant guide" width="700" height="460" loading="lazy">
            <p class="location">Portland, OR · Seasonal American</p>
            <div class="restaurant-heading"><h3>The Olive Room</h3><span aria-label="Editorial score 9.1 out of 10">9.1</span></div>
            <p>A short, changing menu that lets local produce lead. Come for the wood-roasted vegetables; stay for a glass of something unexpected and a generous slice of olive oil cake.</p>
            <button class="text-link" type="button" data-review="olive">Read the review <span aria-hidden="true">↗</span></button>
          </article>
          <article class="restaurant-card">
            <img src="https://picsum.photos/seed/restaurant-noodle/700/460" alt="Illustrative scene for an intimate noodle bar" width="700" height="460" loading="lazy">
            <p class="location">Seattle, WA · Noodle bar</p>
            <div class="restaurant-heading"><h3>Little Lantern</h3><span aria-label="Editorial score 8.8 out of 10">8.8</span></div>
            <p>Deeply savory broth, springy noodles, and a counter with a front-row view of the kitchen. A relaxed spot for a solo supper, with excellent vegetable-forward options.</p>
            <button class="text-link" type="button" data-review="lantern">Read the review <span aria-hidden="true">↗</span></button>
          </article>
          <article class="restaurant-card">
            <img src="https://picsum.photos/seed/restaurant-bread/700/460" alt="Illustrative scene for a bakery and wine bar" width="700" height="460" loading="lazy">
            <p class="location">San Francisco, CA · Bakery &amp; wine</p>
            <div class="restaurant-heading"><h3>Sunday Bread</h3><span aria-label="Editorial score 9.0 out of 10">9.0</span></div>
            <p>Sourdough by morning, small plates by evening. Thoughtful fermentation is at the heart of both, with a wine list that makes trying something new feel easy.</p>
            <button class="text-link" type="button" data-review="bread">Read the review <span aria-hidden="true">↗</span></button>
          </article>
        </div>
        <p class="small-note">An imagined neighborhood guide: restaurant names, scores, and reviews are fictional editorial examples, not real listings or bookings.</p>
      </div>
    </section>

    <section class="container section" id="kitchen" aria-labelledby="kitchen-title">
      <div class="section-heading">
        <div><div class="eyebrow">A little kitchen confidence</div><h2 id="kitchen-title">Small skills. Better meals.</h2></div>
        <p>Practical advice without the perfectionism. Build a few good habits and let the ingredients take care of the rest.</p>
      </div>
      <div class="kitchen-grid">
        <article class="kitchen-feature">
          <img src="https://picsum.photos/seed/wine-and-table/600/780" alt="Editorial table setting inspiration for a relaxed dinner" width="600" height="780" loading="lazy">
          <div class="copy">
            <div class="eyebrow">The pairing notebook</div>
            <h3>Good wine.<br>No guesswork.</h3>
            <p>Match the weight of the wine to the dish, then look for a little acidity. A crisp Sauvignon Blanc loves lemony greens; a light Pinot Noir feels at home with earthy mushrooms.</p>
            <p>Prefer to skip the alcohol? Try chilled hibiscus tea with roasted vegetables or sparkling water with citrus and herbs. The point is a delicious meal, not a rulebook.</p>
            <button class="text-link" type="button" data-story="pairings" style="background:none;border-width:0 0 1px;color:inherit">Explore the pairings <span aria-hidden="true">↗</span></button>
          </div>
        </article>
        <div class="tips">
          <article class="tip">
            <div class="eyebrow">01 / Before you switch on the stove</div>
            <h3>Mise en place is your quiet superpower.</h3>
            <p>Read the recipe through, wash your produce, and measure your spices first. Keep a bowl for scraps nearby. Ten calm minutes of preparation can save a surprising amount of mid-cook scrambling.</p>
          </article>
          <article class="tip">
            <div class="eyebrow">02 / Let the pan do its job</div>
            <h3>The secret to better sautéing.</h3>
            <p>Preheat your pan, pat ingredients dry, and avoid overcrowding. Moisture makes vegetables steam; space helps them brown. Work in batches and season as you go for deeper flavor and better texture.</p>
          </article>
          <article class="tip">
            <div class="eyebrow">03 / Think in building blocks</div>
            <h3>Prep once. Eat differently.</h3>
            <p>Cook a grain, roast a tray of vegetables, and mix one punchy sauce. Combine them into bowls, tuck them into wraps, or add an egg. Refrigerate promptly and use cooked leftovers within three to four days.</p>
          </article>
        </div>
      </div>
    </section>

    <section class="community">
      <div class="container">
        <div class="community-heading"><div class="eyebrow">Around our table</div><h2>Made for the way we really eat.</h2></div>
        <div class="quotes">
          <article class="quote">
            <div class="stars" aria-label="5 out of 5 stars">★★★★★</div>
            <blockquote>“The grain bowl formula finally made meal prep click. I’m buying fewer ingredients and actually looking forward to my packed lunch.”</blockquote>
            <div class="quote-person"><img src="https://i.pravatar.cc/80?u=tablefield-maya" alt="" loading="lazy" width="36" height="36"><div><strong>Maya R.</strong><span>The weeknight cook</span></div></div>
          </article>
          <article class="quote">
            <div class="stars" aria-label="5 out of 5 stars">★★★★★</div>
            <blockquote>“It feels like advice from a friend who knows their way around a kitchen. Nothing precious, just thoughtful recipes I want to make again.”</blockquote>
            <div class="quote-person"><img src="https://i.pravatar.cc/80?u=tablefield-daniel" alt="" loading="lazy" width="36" height="36"><div><strong>Daniel L.</strong><span>The curious beginner</span></div></div>
          </article>
          <article class="quote">
            <div class="stars" aria-label="5 out of 5 stars">★★★★★</div>
            <blockquote>“I came for dinner inspiration and stayed for the little kitchen lessons. The reminder to slow down and prep first is a game changer.”</blockquote>
            <div class="quote-person"><img src="https://i.pravatar.cc/80?u=tablefield-alex" alt="" loading="lazy" width="36" height="36"><div><strong>Alex P.</strong><span>The weekend host</span></div></div>
          </article>
        </div>
        <p class="small-note" style="text-align:center">Illustrative reader stories for this fictional publication.</p>
      </div>
    </section>

    <section class="newsletter" id="newsletter" aria-labelledby="newsletter-title">
      <div class="container newsletter-inner">
        <div>
          <div class="eyebrow">A good Sunday ritual</div>
          <h2 id="newsletter-title">Something delicious<br>in your inbox.</h2>
          <p>The Sunday Edit brings you a seasonal recipe, a smart kitchen tip, and one delicious thing to discover. A thoughtful little read for the week ahead — never a daily deluge.</p>
        </div>
        <form id="newsletter-form">
          <label for="email">Your email address</label>
          <div class="subscribe-row">
            <input id="email" name="email" type="email" placeholder="you@example.com" autocomplete="email" required maxlength="254">
            <button class="button orange" type="submit">Subscribe <span aria-hidden="true">↗</span></button>
          </div>
          <p class="small-note">Opens your email app to request a subscription. Send the prepared message to complete your request. Unsubscribe anytime.</p>
          <p id="subscribe-status" role="status"></p>
        </form>
      </div>
    </section>

    <section class="container faq" aria-labelledby="faq-title">
      <div><div class="eyebrow">A few things worth knowing</div><h2 id="faq-title">Before you pull<br>up a chair.</h2></div>
      <div>
        <details>
          <summary>Can I adapt your recipes to my dietary needs?</summary>
          <p>Absolutely. Each recipe includes practical swaps where possible, including plant-based alternatives. Check product labels and avoid ingredients that trigger allergies. Our recipes and estimates are general information; a registered dietitian can help with individual medical or nutritional needs.</p>
        </details>
        <details>
          <summary>How do you approach nutrition?</summary>
          <p>We favor variety, satisfying portions, and a mix of vegetables, whole grains, and protein sources. The bowl builder’s numbers are rounded estimates, not a prescription or a precise laboratory analysis. Food is also about pleasure, culture, and connection.</p>
        </details>
        <details>
          <summary>What’s included in the free cookbook?</summary>
          <p>A printable, three-recipe collection with the dishes featured above: herby farro bowls, lemon chicken with white beans, and honeyed strawberries. Download the HTML booklet, open it in your browser, and print or save it as a PDF.</p>
        </details>
        <details>
          <summary>Can I share a recipe or pitch a story?</summary>
          <p>We love a good kitchen story. Email <a class="text-link" href="mailto:hello@tableandfield.example">hello@tableandfield.example</a> with a short introduction, the idea, and any relevant background. Credit the original cook or source when sharing a recipe inspired by someone else.</p>
        </details>
      </div>
    </section>
  </main>

  <footer>
    <div class="container">
      <div class="footer-top">
        <div class="footer-intro">
          <a class="brand" href="#home"><span class="brand-name">Table &amp; Field<span style="color:var(--orange)">.</span></span></a>
          <p>Eat well. Live a little.<br>An independent guide to good food, everyday cooking, and the stories around the table.</p>
        </div>
        <div>
          <h4>Pull up a chair</h4>
          <div class="footer-links"><a href="#recipes">Recipes</a><a href="#meal-plans">Meal Plans</a><a href="#restaurants">Restaurant Reviews</a><a href="#kitchen">Kitchen Notes</a></div>
        </div>
        <div>
          <h4>Say hello</h4>
          <div class="footer-links"><a href="mailto:hello@tableandfield.example">hello@tableandfield.example</a><a href="tel:+15035550148">+1 (503) 555-0148</a><span>42 Alder Lane, Suite 3<br>Portland, OR 97205</span></div>
        </div>
        <div>
          <h4>Follow your appetite</h4>
          <div class="footer-links"><a href="https://www.instagram.com/" target="_blank" rel="noopener noreferrer">Instagram ↗</a><a href="https://www.pinterest.com/" target="_blank" rel="noopener noreferrer">Pinterest ↗</a><a href="https://www.youtube.com/" target="_blank" rel="noopener noreferrer">YouTube ↗</a><a href="#newsletter">The Sunday Edit</a></div>
        </div>
      </div>
      <div class="footer-bottom">
        <span>© <span id="year">2026</span> Table &amp; Field. All rights reserved. Made with good taste.</span>
        <div><button class="legal-link" type="button" data-story="privacy">Privacy</button><button class="legal-link" type="button" data-story="terms">Terms</button><span>Fictional publication · Illustrative imagery</span></div>
      </div>
    </div>
  </footer>

  <dialog id="content-dialog" aria-labelledby="dialog-title">
    <button class="dialog-close" type="button" aria-label="Close dialog">×</button>
    <div id="dialog-content"></div>
  </dialog>

  <script>
    const recipes = {
      farro: {
        title: 'Roasted vegetable & herby farro bowls',
        meta: '30 minutes · Serves 2 · Vegetarian',
        intro: 'A flexible, produce-forward dinner with a creamy dressing. Use quick-cooking farro to keep dinner within half an hour.',
        ingredients: ['150g quick-cooking farro, dry', '400g mixed vegetables, cut into bite-size pieces', '1½ tbsp olive oil', '2 tbsp tahini', '1 lemon, juice and zest', 'A small handful of parsley, chopped', 'Salt and black pepper'],
        steps: ['Heat the oven to 220°C / 425°F. Toss vegetables with the oil, a pinch of salt, and pepper. Spread on a tray and roast for 20–25 minutes, turning once.', 'Cook farro according to its package instructions, then drain. Quick-cooking varieties usually take 10–15 minutes.', 'Whisk tahini with lemon juice and 2–4 tbsp water until pourable. Add a little salt and lemon zest.', 'Divide farro and vegetables between bowls. Spoon over the dressing and finish with parsley.'],
        note: 'Swap farro for brown rice for a gluten-free base; check all labels. Tahini contains sesame. Add chickpeas for a more substantial bowl.'
      },
      chicken: {
        title: 'Lemon chicken with white beans & greens',
        meta: '35 minutes · Serves 2 · One-pan supper',
        intro: 'A quick skillet dinner that balances golden chicken, tender beans, and a bright, savory pan sauce.',
        ingredients: ['2 small boneless chicken breasts, about 150g each', '1 tbsp olive oil', '2 garlic cloves, sliced', '1 × 400g can cannellini beans, drained and rinsed', '150g spinach or chopped kale', '150ml low-sodium chicken stock', '1 lemon, juice and zest', 'Salt and black pepper'],
        steps: ['Pat the chicken dry and season lightly. Heat the oil in a large skillet over medium-high heat.', 'Sear chicken for 4–5 minutes per side, then transfer to a plate. Thick pieces may need longer to finish cooking in the next step.', 'Lower the heat. Add garlic and stir for 30 seconds. Add beans, stock, and lemon zest, scraping up the browned bits.', 'Return chicken to the skillet. Cover and simmer gently until its thickest part reaches 74°C / 165°F, usually another 5–10 minutes.', 'Stir in greens and cook until wilted. Finish with lemon juice and black pepper. Divide between two plates.'],
        note: 'Use firm tofu and vegetable stock for a plant-based variation. Refrigerate cooked leftovers promptly and use within three to four days.'
      },
      strawberries: {
        title: 'Honeyed strawberries & whipped yogurt',
        meta: '15 minutes · Serves 2 · No oven needed',
        intro: 'Five ingredients, a few minutes of chopping, and a dessert that makes the most of good berries.',
        ingredients: ['300g ripe strawberries, hulled and sliced', '200g thick Greek yogurt', '1 tbsp honey, divided', '20g shelled pistachios, roughly chopped', 'A small pinch of fine sea salt'],
        steps: ['Toss the sliced berries with half the honey and a tiny pinch of salt. Leave for 10 minutes so the berries release their juices.', 'Whisk yogurt with the remaining honey for 30–60 seconds until smooth and a little lighter.', 'Toast pistachios in a dry pan over medium-low heat for 2–3 minutes, stirring often. Cool briefly.', 'Spoon yogurt into two bowls, add berries and their juices, then scatter over the pistachios.'],
        note: 'For a dairy-free version, use thick plant-based yogurt. Maple syrup can replace honey. Omit pistachios for a nut-free version and check alternative ingredients carefully.'
      }
    };

    const bowlOptions = {
      plant: {title:'Chickpea & roasted vegetable bowl', description:'Brown rice, chickpeas, seasonal vegetables, and a spoonful of lemon-tahini dressing.', kcal:540, protein:18, fiber:13, topping:'120g cooked chickpeas'},
      vegetarian: {title:'Feta & herby vegetable bowl', description:'Brown rice, roasted vegetables, chickpeas, and crumbled feta with lemon dressing.', kcal:570, protein:22, fiber:10, topping:'80g cooked chickpeas and 40g feta'},
      chicken: {title:'Lemon chicken & vegetable bowl', description:'Brown rice, juicy chicken, roasted vegetables, and a bright lemon-tahini dressing.', kcal:610, protein:42, fiber:8, topping:'120g cooked chicken breast'}
    };

    const reviews = {
      olive:{title:'The Olive Room',meta:'Portland, OR · Seasonal American · Editorial example',
        paragraphs:['The menu imagined here is deliberately short: a few vegetable-led starters, two substantial mains, and a dessert worth making room for. Wood roasting gives carrots and cabbage a smoky depth without overpowering their sweetness.',
        'Our ideal order starts with bitter leaves and a citrus dressing, followed by roasted mushrooms over creamy beans. The olive oil cake brings the meal back to something beautifully familiar. Service is relaxed and happy to explain the growers behind the menu.',
        'Best for: a leisurely date night or catching up with a friend. Suggested spend: $45–65 per person before drinks and gratuity. Score: 9.1/10. This is a fictional review; no venue, prices, or reservations are real.']},
      lantern:{title:'Little Lantern',meta:'Seattle, WA · Noodle bar · Editorial example',
        paragraphs:['This imagined counter-service noodle bar is all about broth and texture. A slow-developed mushroom broth is a highlight, with springy noodles, wilted greens, and a spoonful of fragrant chili oil.',
        'Sit at the counter if you like watching a kitchen work. We would order cucumber salad, the mushroom noodle bowl, and tea. The menu offers vegetable-forward choices, though guests with allergies should always ask about stocks, sauces, and shared equipment.',
        'Best for: a solo supper or a quick dinner with two friends. Suggested spend: $22–35 per person before drinks and gratuity. Score: 8.8/10. This is a fictional review, not a listing for a real business.']},
      bread:{title:'Sunday Bread',meta:'San Francisco, CA · Bakery & wine · Editorial example',
        paragraphs:['An imagined all-day spot where long fermentation shapes the morning bread and thoughtful sourcing shapes the evening plates. The room shifts from coffee and warm toast to a small, convivial wine bar.',
        'A plate of sourdough with cultured butter sets the tone. Later, roasted seasonal vegetables and a bean salad make a satisfying light dinner. The staff’s pairing approach is refreshingly direct: tell them what you like and let them offer a taste.',
        'Best for: an unhurried afternoon that becomes dinner. Suggested spend: $30–50 per person before drinks and gratuity. Score: 9.0/10. The restaurant and this editorial review are fictional.']}
    };

    const stories = {
      culture:{title:'A slower kind of food discovery',meta:'Field notes · A Table & Field perspective',html:'<p>A farmers’ market is a good place to start a conversation, not just a shopping list. Ask a grower what is at its best this week and how they like to cook it. Often the answer is simpler than the recipe you had in mind.</p><h3>Old techniques, renewed curiosity</h3><p>Fermentation transforms ingredients through the work of microorganisms. Bread, yogurt, and many pickles owe their flavor to these living processes. Before trying a home fermentation project, use a tested recipe, clean equipment, and appropriate temperature and salt controls; a social-media shortcut is not a food-safety guide.</p><h3>Make room for the whole ingredient</h3><p>Root-to-stem cooking is less about a challenge and more about attention. Well-washed carrot tops can become a herb sauce; broccoli stems can be peeled and sliced into a stir-fry. Use only parts known to be edible, and compost what is not.</p><p>Our favorite culinary trend is a lasting one: learning the origin of a dish, crediting the people who developed it, and bringing a little of that knowledge back to our own tables.</p>'},
      pairings:{title:'The easygoing pairing notebook',meta:'Kitchen notes · Enjoy thoughtfully',html:'<p>Start with the dominant flavor and the weight of the dish, rather than automatically choosing red for meat or white for fish. Fresh acidity can balance richness; softer wines are often friendlier to spicy food.</p><h3>Lemony greens & Sauvignon Blanc</h3><p>A bright, dry Sauvignon Blanc mirrors a citrus dressing and works with fresh herbs. For an alcohol-free option, try sparkling water with lemon peel and gently crushed mint.</p><h3>Roasted mushrooms & Pinot Noir</h3><p>A light-bodied Pinot Noir complements earthy mushrooms without overwhelming them. Unsweetened chilled hibiscus tea offers tartness and a pleasingly food-friendly finish.</p><h3>Spice & off-dry Riesling</h3><p>A touch of sweetness can soften the impression of chili heat. Look for a lower-alcohol, off-dry Riesling, or choose a lightly sweetened ginger and lime spritz without alcohol.</p><p>These are starting points, not rules. Choose what you enjoy, drink responsibly, and follow your local legal drinking age. Alcohol-free pairings deserve the same care as every other glass on the table.</p>'},
      privacy:{title:'Privacy, plainly explained',meta:'Website privacy notice',html:'<p>This standalone website does not send your email to a server, set analytics cookies, or store your bowl-builder selections. Those selections exist only while you use this page.</p><p>The subscription form opens your email application with a prepared request. No subscription is created automatically. Your email provider handles any message you choose to send. Contact addresses on this fictional publication use the reserved .example domain and are not working mailboxes.</p><p>Images and fonts are loaded from external providers including Picsum Photos, Placehold, Pravatar, and Google Fonts. Those providers receive normal connection information, such as your IP address, when your browser requests their resources. Their own privacy policies apply.</p><p>External social links open the platforms’ homepages, not verified Table & Field profiles. Cookbook downloads are generated locally in your browser.</p>'},
      terms:{title:'Terms of use',meta:'A few practical ground rules',html:'<p>Table & Field is a fictional editorial website. Business details, reader stories, and restaurant reviews are illustrative. Images are placeholders and may not depict the named recipes or venues.</p><p>Recipes, meal suggestions, and nutritional estimates are provided for general educational purposes, not medical advice. Check allergens, follow safe food-handling practices, and consult a qualified professional for your individual dietary needs.</p><p>The free cookbook is for personal, noncommercial use. Credit Table & Field if sharing an adapted recipe. Third-party websites and services are governed by their own terms.</p><p>This page has no booking, payment, or automated mailing-list service. Any email action is completed through your own email application.</p>'}
    };

    const dialog = document.getElementById('content-dialog');
    const dialogContent = document.getElementById('dialog-content');
    let previousFocus;

    function escapeHTML(value) {
      return String(value).replace(/[&<>"']/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
    }
    function recipeMarkup(recipe, headingId) {
      return '<p class="dialog-meta">'+escapeHTML(recipe.meta)+'</p><h2'+(headingId?' id="'+headingId+'"':'')+'>'+escapeHTML(recipe.title)+'</h2><p>'+escapeHTML(recipe.intro)+'</p><h3>Ingredients</h3><ul>'+recipe.ingredients.map(i=>'<li>'+escapeHTML(i)+'</li>').join('')+'</ul><h3>Let’s cook</h3><ol>'+recipe.steps.map(s=>'<li>'+escapeHTML(s)+'</li>').join('')+'</ol><h3>Make it your own</h3><p>'+escapeHTML(recipe.note)+'</p>';
    }
    function openDialog(html) {
      previousFocus = document.activeElement;
      dialogContent.innerHTML = html;
      dialog.showModal();
      dialog.scrollTop = 0;
    }
    document.querySelectorAll('[data-recipe]').forEach(button => {
      button.addEventListener('click', () => openDialog(recipeMarkup(recipes[button.dataset.recipe], 'dialog-title')));
    });
    document.querySelectorAll('[data-story]').forEach(button => {
      button.addEventListener('click', () => {
        const story = stories[button.dataset.story];
        openDialog('<p class="dialog-meta">'+escapeHTML(story.meta)+'</p><h2 id="dialog-title">'+escapeHTML(story.title)+'</h2>'+story.html);
      });
    });
    document.querySelectorAll('[data-review]').forEach(button => {
      button.addEventListener('click', () => {
        const review = reviews[button.dataset.review];
        openDialog('<p class="dialog-meta">'+escapeHTML(review.meta)+'</p><h2 id="dialog-title">'+escapeHTML(review.title)+'</h2>'+review.paragraphs.map(p=>'<p>'+escapeHTML(p)+'</p>').join(''));
      });
    });
    document.querySelector('.dialog-close').addEventListener('click', () => dialog.close());
    dialog.addEventListener('click', event => {
      const box = dialog.getBoundingClientRect();
      if(event.clientX < box.left || event.clientX > box.right || event.clientY < box.top || event.clientY > box.bottom) dialog.close();
    });
    dialog.addEventListener('close', () => previousFocus?.focus());

    const preference = document.getElementById('preference');
    const portion = document.getElementById('portion');
    function updateBowl() {
      const bowl = bowlOptions[preference.value];
      const scale = Number(portion.value);
      document.getElementById('bowl-name').textContent = bowl.title;
      document.getElementById('bowl-description').textContent = bowl.description;
      document.getElementById('calories').textContent = Math.round(bowl.kcal * scale / 10) * 10;
      document.getElementById('protein').textContent = Math.round(bowl.protein * scale) + 'g';
      document.getElementById('fiber').textContent = Math.round(bowl.fiber * scale) + 'g';
    }
    preference.addEventListener('change', updateBowl);
    portion.addEventListener('change', updateBowl);
    document.getElementById('bowl-recipe').addEventListener('click', () => {
      const bowl = bowlOptions[preference.value];
      const scale = Number(portion.value);
      const size = portion.options[portion.selectedIndex].text;
      const recipe = {
        title: bowl.title,
        meta: '30 minutes · Serves 1 · '+size,
        intro: 'Prepare the quantities below for a regular bowl. Your selected portion uses '+Math.round(scale*100)+'% of each quantity. The displayed nutritional values are illustrative estimates.',
        ingredients: ['150g cooked brown rice', '200g mixed seasonal vegetables', bowl.topping, '1 tsp olive oil', '15g tahini, 1 tbsp lemon juice, and water to loosen', 'Chopped parsley, salt, and pepper to taste'],
        steps: ['Heat your oven to 220°C / 425°F. Toss chopped vegetables with olive oil and a little salt. Spread over a tray and roast for 20–25 minutes.', 'Cook brown rice according to its package instructions, or reheat a prepared portion until steaming hot throughout.', 'Whisk tahini with lemon juice and a little water until smooth. Adjust seasoning.', 'Arrange rice, vegetables, and your chosen topping in a bowl. If preparing chicken from raw, cook it separately until its thickest part reaches 74°C / 165°F.', 'Finish with dressing and parsley. Refrigerate any extra components promptly for another meal.'],
        note: 'Tahini contains sesame; feta contains milk. Check ingredient labels and use suitable alternatives for your dietary needs. Quantities and nutrition are approximate.'
      };
      openDialog(recipeMarkup(recipe,'dialog-title'));
    });

    document.getElementById('download-cookbook').addEventListener('click', () => {
      const content = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Table & Field — The Everyday Table</title><style>body{font:16px/1.7 Georgia,serif;max-width:760px;margin:48px auto;padding:0 24px;color:#263b2e}h1{font-size:42px}h2{font-size:30px;line-height:1.2}h3{font-size:21px}.dialog-meta{font:12px Arial,sans-serif;text-transform:uppercase;color:#b74725}article{margin:50px 0;border-top:1px solid #ddd;padding-top:25px}li{margin:8px 0}@media print{article{break-before:page}body{margin:0;max-width:none}}</style></head><body><h1>Table &amp; Field.</h1><p>The Everyday Table · A three-recipe mini cookbook</p><p>Seasonal food, simple techniques, and a little everyday joy. Open your browser’s print menu to print this booklet or save it as a PDF.</p>'+Object.values(recipes).map(r=>'<article>'+recipeMarkup(r)+'</article>').join('')+'<p>General cooking information only. Check allergens and follow safe food-handling practices. © '+new Date().getFullYear()+' Table &amp; Field.</p></body></html>';
      const url = URL.createObjectURL(new Blob([content], {type:'text/html;charset=utf-8'}));
      const link = document.createElement('a');
      link.href = url;
      link.download = 'table-and-field-everyday-cookbook.html';
      document.body.appendChild(link);
      link.click();
      link.remove();
      setTimeout(() => URL.revokeObjectURL(url), 10000);
    });

    document.getElementById('newsletter-form').addEventListener('submit', event => {
      event.preventDefault();
      const email = document.getElementById('email').value.trim();
      const body = 'Hello Table & Field,\n\nPlease subscribe '+email+' to The Sunday Edit.\n\nThank you!';
      document.getElementById('subscribe-status').textContent = 'Your email app will open with a subscription request. This fictional site uses a sample address; no subscription is created here.';
      window.location.href = 'mailto:subscribe@tableandfield.example?subject='+encodeURIComponent('The Sunday Edit — subscription request')+'&body='+encodeURIComponent(body);
    });

    const menuButton = document.querySelector('.menu-toggle');
    const nav = document.getElementById('primary-nav');
    function closeMenu() {
      nav.classList.remove('open');
      menuButton.setAttribute('aria-expanded','false');
      menuButton.textContent = 'Menu ☰';
    }
    menuButton.addEventListener('click', () => {
      const open = nav.classList.toggle('open');
      menuButton.setAttribute('aria-expanded', String(open));
      menuButton.textContent = open ? 'Close ×' : 'Menu ☰';
    });
    nav.querySelectorAll('a').forEach(a => a.addEventListener('click', closeMenu));
    document.addEventListener('keydown', event => {
      if(event.key === 'Escape' && nav.classList.contains('open')) {
        closeMenu();
        menuButton.focus();
      }
    });
    document.getElementById('year').textContent = new Date().getFullYear();
  </script>
</body>
</html>
View Axe Report (JSON)
{
  "testEngine": {
    "name": "axe-core",
    "version": "4.10.2"
  },
  "testRunner": {
    "name": "axe"
  },
  "testEnvironment": {
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
    "windowWidth": 1280,
    "windowHeight": 720,
    "orientationAngle": 0,
    "orientationType": "landscape-primary"
  },
  "timestamp": "2026-11-12T09:58:05.862Z",
  "url": "https://benchmark.aimac.invalid/fa3459d79cf35c28896e0adfec3d00bec37313c498a3545a3b8ddda866838c14.html",
  "toolOptions": {
    "runOnly": {
      "type": "tag",
      "values": [
        "wcag2a",
        "wcag2aa",
        "wcag21a",
        "wcag21aa",
        "wcag22a",
        "wcag22aa"
      ]
    },
    "resultTypes": [
      "violations"
    ],
    "reporter": "v1"
  },
  "inapplicable": [
    {
      "id": "area-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <area> elements of image maps have alternative text",
      "help": "Active <area> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-braille-equivalent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
      "help": "aria-braille attributes must have a non-braille equivalent",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-command-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA button, link and menuitem has an accessible name",
      "help": "ARIA commands must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-input-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA input field has an accessible name",
      "help": "ARIA input fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-meter-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA meter node has an accessible name",
      "help": "ARIA meter nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-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-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-toggle-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA toggle field has an accessible name",
      "help": "ARIA toggle fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-tooltip-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every ARIA tooltip node has an accessible name",
      "help": "ARIA tooltip nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "blink",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag222",
        "section508",
        "section508.22.j",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <blink> elements are not used",
      "help": "<blink> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
      "nodes": []
    },
    {
      "id": "definition-list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dl> elements are structured correctly",
      "help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
      "nodes": []
    },
    {
      "id": "dlitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dt> and <dd> elements are contained by a <dl>",
      "help": "<dt> and <dd> elements must be contained by a <dl>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-focusable-content",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
      "help": "Frames with focusable content must not have tabindex=-1",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title-unique",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
      "help": "Frames must have a unique title attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.i",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements have an accessible name",
      "help": "Frames must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
      "nodes": []
    },
    {
      "id": "html-xml-lang-mismatch",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
      "help": "HTML elements with lang and xml:lang must have the same base language",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure input buttons have discernible text",
      "help": "Input buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <input type=\"image\"> elements have alternative text",
      "help": "Image buttons must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "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": []
    },
    {
      "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": []
    },
    {
      "id": "marquee",
      "impact": null,
      "tags": [
        "cat.parsing",
        "wcag2a",
        "wcag222",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <marquee> elements are not used",
      "help": "<marquee> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
      "nodes": []
    },
    {
      "id": "meta-refresh",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag221",
        "TTv5",
        "TT8.a",
        "EN-301-549",
        "EN-9.2.2.1"
      ],
      "description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
      "help": "Delayed refresh under 20 hours must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
      "nodes": []
    },
    {
      "id": "object-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure <object> elements have alternative text",
      "help": "<object> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "role-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure [role=\"img\"] elements have alternative text",
      "help": "[role=\"img\"] elements must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "scrollable-region-focusable",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "wcag213",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1",
        "EN-9.2.1.3"
      ],
      "description": "Ensure elements that have scrollable content are accessible by keyboard",
      "help": "Scrollable region must have keyboard access",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
      "nodes": []
    },
    {
      "id": "server-side-image-map",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag211",
        "section508",
        "section508.22.f",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure that server-side image maps are not used",
      "help": "Server-side image maps must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
      "nodes": []
    },
    {
      "id": "svg-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
      "help": "<svg> elements with an img role must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "td-headers-attr",
      "impact": null,
      "tags": [
        "cat.tables",
        "wcag2a",
        "wcag131",
        "section508",
        "section508.22.g",
        "TTv5",
        "TT14.b",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
      "help": "Table cells that use the headers attribute must only refer to cells in the same table",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
      "nodes": []
    },
    {
      "id": "th-has-data-cells",
      "impact": null,
      "tags": [
        "cat.tables",
        "wcag2a",
        "wcag131",
        "section508",
        "section508.22.g",
        "TTv5",
        "TT14.b",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
      "help": "Table headers in a data table must refer to data cells",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
      "nodes": []
    },
    {
      "id": "valid-lang",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2aa",
        "wcag312",
        "TTv5",
        "TT11.b",
        "EN-301-549",
        "EN-9.3.1.2",
        "ACT"
      ],
      "description": "Ensure lang attributes have valid values",
      "help": "lang attribute must have a valid value",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
      "nodes": []
    },
    {
      "id": "video-caption",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag122",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT17.a",
        "EN-301-549",
        "EN-9.1.2.2"
      ],
      "description": "Ensure <video> elements have captions",
      "help": "<video> elements must have captions",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
      "nodes": []
    },
    {
      "id": "no-autoplay-audio",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag142",
        "TTv5",
        "TT2.a",
        "EN-301-549",
        "EN-9.1.4.2",
        "ACT"
      ],
      "description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
      "help": "<video> or <audio> elements must not play automatically",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
      "nodes": []
    }
  ],
  "passes": [
    {
      "id": "aria-allowed-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure an element's role supports its ARIA attributes",
      "help": "Elements must only use supported ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-allowed-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attributes are used correctly for the defined role"
            }
          ],
          "none": [
            {
              "id": "aria-unsupported-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute is supported"
            }
          ],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#home\" aria-label=\"Table and Field home\">",
          "target": [
            "a[aria-label=\"Table and Field home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-conditional-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are used as described in the specification of the element's role",
      "help": "ARIA attributes must be used as specified for the element's role",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-conditional-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#home\" aria-label=\"Table and Field home\">",
          "target": [
            "a[aria-label=\"Table and Field home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-deprecated-role",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements do not use deprecated roles",
      "help": "Deprecated ARIA roles must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "deprecatedrole",
              "data": null,
              "relatedNodes": [],
              "impact": "minor",
              "message": "ARIA role is not deprecated"
            }
          ],
          "impact": null,
          "html": "<p id=\"subscribe-status\" role=\"status\"></p>",
          "target": [
            "#subscribe-status"
          ]
        }
      ]
    },
    {
      "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": "<span aria-hidden=\"true\">\u2197</span>",
          "target": [
            ".orange.button[href$=\"#recipes\"] > span[aria-hidden=\"true\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-prohibited-attr",
      "impact": "serious",
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are not prohibited for an element's role",
      "help": "Elements must only use permitted ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "aria-prohibited-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#home\" aria-label=\"Table and Field home\">",
          "target": [
            "a[aria-label=\"Table and Field home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-required-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements with ARIA roles have all required ARIA attributes",
      "help": "Required ARIA attributes must be provided",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-required-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "All required ARIA attributes are present"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<p id=\"subscribe-status\" role=\"status\"></p>",
          "target": [
            "#subscribe-status"
          ]
        }
      ]
    },
    {
      "id": "aria-roles",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all elements with a role attribute use a valid value",
      "help": "ARIA roles used must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "invalidrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA role is valid"
            },
            {
              "id": "abstractrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Abstract roles are not used"
            },
            {
              "id": "unsupportedrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA role is supported"
            }
          ],
          "impact": null,
          "html": "<p id=\"subscribe-status\" role=\"status\"></p>",
          "target": [
            "#subscribe-status"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr-value",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all ARIA attributes have valid values",
      "help": "ARIA attributes must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-valid-attr-value",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute values are valid"
            },
            {
              "id": "aria-errormessage",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
            },
            {
              "id": "aria-level",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-level values are valid"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#home\" aria-label=\"Table and Field home\">",
          "target": [
            "a[aria-label=\"Table and Field home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure attributes that begin with aria- are valid ARIA attributes",
      "help": "ARIA attributes must conform to valid names",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-valid-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute name is valid"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#home\" aria-label=\"Table and Field home\">",
          "target": [
            "a[aria-label=\"Table and Field home\"]"
          ]
        }
      ]
    },
    {
      "id": "autocomplete-valid",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag21aa",
        "wcag135",
        "EN-301-549",
        "EN-9.1.3.5",
        "ACT"
      ],
      "description": "Ensure the autocomplete attribute is correct and suitable for the form field",
      "help": "autocomplete attribute must be used correctly",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "autocomplete-valid",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "the autocomplete attribute is correctly formatted"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<input id=\"email\" name=\"email\" type=\"email\" placeholder=\"you@example.com\" autocomplete=\"email\" required=\"\" maxlength=\"254\">",
          "target": [
            "#email"
          ]
        }
      ]
    },
    {
      "id": "avoid-inline-spacing",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag21aa",
        "wcag1412",
        "EN-301-549",
        "EN-9.1.4.12",
        "ACT"
      ],
      "description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
      "help": "Inline text spacing must be adjustable with custom stylesheets",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "important-letter-spacing",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Letter-spacing in the style attribute is not set to !important, or meets the minimum"
            },
            {
              "id": "important-word-spacing",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "word-spacing in the style attribute is not set to !important, or meets the minimum"
            },
            {
              "id": "important-line-height",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "line-height in the style attribute is not set to !important, or meets the minimum"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<span style=\"color:var(--orange)\">.</span>",
          "target": [
            "span > .brand-name > span"
          ]
        }
      ]
    },
    {
      "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"
            },
            {
              "id": "aria-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-label attribute exists and is not empty"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<button class=\"round-button\" type=\"button\" data-recipe=\"strawberries\" aria-label=\"Open strawberries and whipped yogurt recipe\">\u2197</button>",
          "target": [
            ".round-button"
          ]
        }
      ]
    },
    {
      "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 id=\"hero-title\">A good life<br>starts at<br><em>the table.</em></h1>",
                  "target": [
                    "#hero-title"
                  ]
                },
                {
                  "html": "<h3>Strawberries, meet simplicity.</h3>",
                  "target": [
                    ".hero-feature > div > h3"
                  ]
                },
                {
                  "html": "<h2 id=\"recipes-title\">On the menu this week.</h2>",
                  "target": [
                    "#recipes-title"
                  ]
                },
                {
                  "html": "<h3>Roasted vegetable &amp; herby farro bowls</h3>",
                  "target": [
                    ".recipe-card:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Lemon chicken with white beans &amp; greens</h3>",
                  "target": [
                    ".recipe-card:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Honeyed strawberries &amp; whipped yogurt</h3>",
                  "target": [
                    ".recipe-card:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h2 id=\"plans-title\">A little planning.<br>A lot more breathing room.</h2>",
                  "target": [
                    "#plans-title"
                  ]
                },
                {
                  "html": "<h3>Your dinner, sorted.</h3>",
                  "target": [
                    ".planner-title > h3"
                  ]
                },
                {
                  "html": "<h4 id=\"bowl-name\">Chickpea &amp; roasted vegetable bowl</h4>",
                  "target": [
                    "#bowl-name"
                  ]
                },
                {
                  "html": "<h2 id=\"culture-title\">Good food has<br>a story to tell.</h2>",
                  "target": [
                    "#culture-title"
                  ]
                },
                {
                  "html": "<h2 id=\"restaurants-title\">Worth going out for.</h2>",
                  "target": [
                    "#restaurants-title"
                  ]
                },
                {
                  "html": "<h3>The Olive Room</h3>",
                  "target": [
                    ".restaurant-card:nth-child(1) > .restaurant-heading > h3"
                  ]
                },
                {
                  "html": "<h3>Little Lantern</h3>",
                  "target": [
                    ".restaurant-card:nth-child(2) > .restaurant-heading > h3"
                  ]
                },
                {
                  "html": "<h3>Sunday Bread</h3>",
                  "target": [
                    ".restaurant-card:nth-child(3) > .restaurant-heading > h3"
                  ]
                },
                {
                  "html": "<h2 id=\"kitchen-title\">Small skills. Better meals.</h2>",
                  "target": [
                    "#kitchen-title"
                  ]
                },
                {
                  "html": "<h3>Good wine.<br>No guesswork.</h3>",
                  "target": [
                    ".copy > h3"
                  ]
                },
                {
                  "html": "<h3>Mise en place is your quiet superpower.</h3>",
                  "target": [
                    ".tip:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>The secret to better saut\u00e9ing.</h3>",
                  "target": [
                    ".tip:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Prep once. Eat differently.</h3>",
                  "target": [
                    ".tip:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h2>Made for the way we really eat.</h2>",
                  "target": [
                    ".community-heading > h2"
                  ]
                },
                {
                  "html": "<h2 id=\"newsletter-title\">Something delicious<br>in your inbox.</h2>",
                  "target": [
                    "#newsletter-title"
                  ]
                },
                {
                  "html": "<h2 id=\"faq-title\">Before you pull<br>up a chair.</h2>",
                  "target": [
                    "#faq-title"
                  ]
                },
                {
                  "html": "<h4>Pull up a chair</h4>",
                  "target": [
                    "div:nth-child(2) > h4"
                  ]
                },
                {
                  "html": "<h4>Say hello</h4>",
                  "target": [
                    ".footer-top > div:nth-child(3) > h4"
                  ]
                },
                {
                  "html": "<h4>Follow your appetite</h4>",
                  "target": [
                    "div:nth-child(4) > h4"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a heading"
            },
            {
              "id": "landmark",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<main id=\"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": "#f7f5ee",
                "bgColor": "#263b2e",
                "contrastRatio": 11.01,
                "fontSize": "8.3pt (11px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has sufficient color contrast of 11.01"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<div class=\"announcement\">A little inspiration for your everyday table. <a href=\"#newsletter\">Meet your new Sunday read \u2197</a></div>",
          "target": [
            ".announcement"
          ]
        }
      ]
    },
    {
      "id": "document-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag242",
        "TTv5",
        "TT12.a",
        "EN-301-549",
        "EN-9.2.4.2",
        "ACT"
      ],
      "description": "Ensure each HTML document contains a non-empty <title> element",
      "help": "Documents must have <title> element to aid in navigation",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "doc-has-title",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Document has a non-empty <title> element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "duplicate-id-aria",
      "impact": null,
      "tags": [
        "cat.parsing",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every id attribute value used in ARIA and in labels is unique",
      "help": "IDs used in ARIA and labels must be unique",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "duplicate-id-aria",
              "data": "primary-nav",
              "relatedNodes": [],
              "impact": "critical",
              "message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<nav id=\"primary-nav\" aria-label=\"Primary navigation\">",
          "target": [
            "#primary-nav"
          ]
        }
      ]
    },
    {
      "id": "form-field-multiple-labels",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag332",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.3.3.2"
      ],
      "description": "Ensure form field does not have multiple label elements",
      "help": "Form field must not have multiple label elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "multiple-label",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<label for=\"preference\">",
                  "target": [
                    "label[for=\"preference\"]"
                  ]
                }
              ],
              "impact": "moderate",
              "message": "Form field does not have multiple label elements"
            }
          ],
          "impact": null,
          "html": "<select id=\"preference\">\n                <option value=\"plant\">Plant-based</option>\n                <option value=\"vegetarian\">Vegetarian</option>\n                <option value=\"chicken\">A little of everything</option>\n              </select>",
          "target": [
            "#preference"
          ]
        }
      ]
    },
    {
      "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/86x86/263b2e/f7f5ee?text=T%26F&amp;font=playfair%20display\" alt=\"Table &amp; Field monogram\" width=\"43\" height=\"43\">",
          "target": [
            "img[alt=\"Table & Field monogram\"]"
          ]
        }
      ]
    },
    {
      "id": "label",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every form element has a label",
      "help": "Form elements must have labels",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "explicit-label",
              "data": {
                "explicitLabel": "Your email address"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"email\">Your email address</label>",
                  "target": [
                    "label[for=\"email\"]"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an explicit <label>"
            },
            {
              "id": "non-empty-placeholder",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has a placeholder attribute"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "hidden-explicit-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Form element has a visible explicit <label>"
            }
          ],
          "impact": null,
          "html": "<input id=\"email\" name=\"email\" type=\"email\" placeholder=\"you@example.com\" autocomplete=\"email\" required=\"\" maxlength=\"254\">",
          "target": [
            "#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",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<div class=\"announcement\">A little inspiration for your everyday table. <a href=\"#newsletter\">Meet your new Sunday read \u2197</a></div>",
                  "target": [
                    ".announcement"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text in some way other than by color"
            },
            {
              "id": "link-in-text-block-style",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<div class=\"announcement\">A little inspiration for your everyday table. <a href=\"#newsletter\">Meet your new Sunday read \u2197</a></div>",
                  "target": [
                    ".announcement"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text by visual styling"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a href=\"#newsletter\">Meet your new Sunday read \u2197</a>",
          "target": [
            ".announcement > a[href$=\"#newsletter\"]"
          ]
        }
      ]
    },
    {
      "id": "link-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure links have discernible text",
      "help": "Links must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "focusable-no-name",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element is not in tab order or has accessible text"
            }
          ],
          "impact": null,
          "html": "<a class=\"skip-link\" href=\"#main\">Skip to content</a>",
          "target": [
            ".skip-link"
          ]
        }
      ]
    },
    {
      "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/86x86/263b2e/f7f5ee?text=T%26F&amp;font=playfair%20display\" alt=\"Table &amp; Field monogram\" width=\"43\" height=\"43\">",
          "target": [
            "img[alt=\"Table & Field monogram\"]"
          ]
        }
      ]
    },
    {
      "id": "select-name",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure select element has an accessible name",
      "help": "Select element must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "implicit-label",
              "data": {
                "implicitLabel": "How do you like to eat?"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"preference\">",
                  "target": [
                    "label[for=\"preference\"]"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an implicit (wrapped) <label>"
            },
            {
              "id": "explicit-label",
              "data": {
                "explicitLabel": "How do you like to eat?"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"preference\">",
                  "target": [
                    "label[for=\"preference\"]"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an explicit <label>"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "hidden-explicit-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Form element has a visible explicit <label>"
            }
          ],
          "impact": null,
          "html": "<select id=\"preference\">\n                <option value=\"plant\">Plant-based</option>\n                <option value=\"vegetarian\">Vegetarian</option>\n                <option value=\"chicken\">A little of everything</option>\n              </select>",
          "target": [
            "#preference"
          ]
        }
      ]
    },
    {
      "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>Can I adapt your recipes to my dietary needs?</summary>",
          "target": [
            "details:nth-child(1) > summary"
          ]
        }
      ]
    },
    {
      "id": "target-size",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag22aa",
        "wcag258"
      ],
      "description": "Ensure touch targets have sufficient size and space",
      "help": "All touch targets must be 24px large, or leave sufficient space",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "target-size",
              "data": {
                "minSize": 24,
                "width": 133.7,
                "height": 46.4
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Control has sufficient size (133.7px by 46.4px, should be at least 24px by 24px)"
            },
            {
              "id": "target-offset",
              "data": {
                "closestOffset": 24,
                "minOffset": 24
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"skip-link\" href=\"#main\">Skip to content</a>",
          "target": [
            ".skip-link"
          ]
        }
      ]
    }
  ],
  "incomplete": [
    {
      "id": "aria-prohibited-attr",
      "impact": "serious",
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are not prohibited for an element's role",
      "help": "Elements must only use permitted ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "aria-prohibited-attr",
              "data": {
                "role": null,
                "nodeName": "div",
                "messageKey": "noRoleSingular",
                "prohibited": [
                  "aria-label"
                ]
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "aria-label attribute is not well supported on a div with no valid role attribute."
            }
          ],
          "impact": "serious",
          "html": "<div class=\"values-strip\" aria-label=\"Our approach\">",
          "target": [
            ".values-strip"
          ],
          "failureSummary": "Fix all of the following:\n  aria-label attribute is not well supported on a div with no valid role attribute."
        }
      ]
    },
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "messageKey": "nonBmp"
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element content contains only non-text characters"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span aria-hidden=\"true\">\u2192</span>",
          "target": [
            ".text-link[href$=\"#culture\"] > span[aria-hidden=\"true\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element content contains only non-text characters"
        }
      ]
    }
  ],
  "violations": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#656b5e",
                "bgColor": "#eae6db",
                "contrastRatio": 4.41,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<article class=\"kitchen-feature\">",
                  "target": [
                    ".kitchen-feature"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.41 (foreground color: #656b5e, background color: #eae6db, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p>Match the weight of the wine to the dish, then look for a little acidity. A crisp Sauvignon Blanc loves lemony greens; a light Pinot Noir feels at home with earthy mushrooms.</p>",
          "target": [
            ".copy > p:nth-child(3)"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.41 (foreground color: #656b5e, background color: #eae6db, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#656b5e",
                "bgColor": "#eae6db",
                "contrastRatio": 4.41,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<article class=\"kitchen-feature\">",
                  "target": [
                    ".kitchen-feature"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.41 (foreground color: #656b5e, background color: #eae6db, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p>Prefer to skip the alcohol? Try chilled hibiscus tea with roasted vegetables or sparkling water with citrus and herbs. The point is a delicious meal, not a rulebook.</p>",
          "target": [
            ".copy > p:nth-child(4)"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.41 (foreground color: #656b5e, background color: #eae6db, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
        }
      ]
    }
  ],
  "coverage": {
    "contract": "main-document-vertical-scroll",
    "complete": true,
    "positions": [
      {
        "y": 0,
        "height": 5903
      },
      {
        "y": 576,
        "height": 5903
      },
      {
        "y": 1152,
        "height": 5903
      },
      {
        "y": 1728,
        "height": 5903
      },
      {
        "y": 2304,
        "height": 5903
      },
      {
        "y": 2880,
        "height": 5903
      },
      {
        "y": 3456,
        "height": 5903
      },
      {
        "y": 4032,
        "height": 5903
      },
      {
        "y": 4608,
        "height": 5903
      },
      {
        "y": 5183,
        "height": 5903
      }
    ],
    "scans": 11,
    "max_states": 512,
    "settle_ms": 5000,
    "page_timeout_seconds": 150,
    "layout_stability": "consecutive 100ms size samples within one CSS pixel",
    "animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
    "interactive_states": "not exercised",
    "horizontal_scroll": "not exercised"
  }
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Food and Drink" 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: "Food and Drink"
- Description: Recipes, restaurant guides, cooking tips, and nutrition resources.

**Your Creative Task:**
1.  **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Food and Drink" 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: "Meal Plans", "Restaurant Reviews", "Recipes".
-   **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
    -   Address key topics relevant to the "Food and Drink" category. Consider themes similar to: "Food Culture", "Culinary Trends", "Wine Pairings".
    -   **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "mise en place", "sautéing", "fermentation".
    -   **Visuals:** Integrate relevant placeholder images logically within the content sections.
    -   **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Download Cookbook", "Try Recipe", "Subscribe".
-   **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Food and Drink" sector. Ideas similar but not limited to: "nutrition calculator".
-   **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "restaurant picks", "seasonal ingredients", "food news".
-   **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.