Z.ai GLM 4.7 Flash – Food and Drink
via Cloudflare · Generated
- AIMAC Debt 13.09
- Cost $0.004
- Total Violations 14
- HTML Size 35 KB
- Em Dashes 2
Screenshot
View Live Page
Accessibility Issues Found
1 Critical 13 Serious
-
color-contrast serious 9 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<span>Culinary Excellence & Fine Dining</span> -
link-name serious 4 instances
Links must have discernible text
Example HTML
<a href="#"><i class="fab fa-facebook-f"></i></a> -
select-name critical 1 instance
Select element must have an accessible name
Example HTML
<select id="dishSelect">
Artifacts
View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Savor & Vine | Culinary Excellence & Fine Dining Guide</title>
<!-- Fonts: Playfair Display for headings, Lato for body -->
<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=Lato:wght@300;400;700&family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400&display=swap" rel="stylesheet">
<!-- Icons (FontAwesome CDN for standard icons) -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root {
/* Color Palette */
--primary-dark: #1a1a1a;
--secondary-dark: #2c3e50;
--accent: #d35400; /* Burnt Orange */
--accent-hover: #a04000;
--bg-light: #f9f9f9;
--text-color: #4a4a4a;
--white: #ffffff;
/* Typography */
--font-heading: 'Playfair Display', serif;
--font-body: 'Lato', sans-serif;
/* Spacing */
--container-width: 1200px;
--section-padding: 80px 20px;
--border-radius: 8px;
}
/* Reset & Base Styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: var(--font-body);
color: var(--text-color);
line-height: 1.6;
background-color: var(--white);
}
h1, h2, h3, h4 {
font-family: var(--font-heading);
color: var(--primary-dark);
margin-bottom: 1rem;
line-height: 1.2;
}
a {
text-decoration: none;
color: inherit;
transition: color 0.3s ease;
}
ul {
list-style: none;
}
img {
max-width: 100%;
display: block;
border-radius: var(--border-radius);
}
/* Utility Classes */
.container {
max-width: var(--container-width);
margin: 0 auto;
padding: 0 20px;
}
.btn {
display: inline-block;
padding: 12px 30px;
background-color: var(--accent);
color: var(--white);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
border-radius: 4px;
border: none;
cursor: pointer;
transition: background 0.3s ease, transform 0.2s ease;
font-size: 0.9rem;
}
.btn:hover {
background-color: var(--accent-hover);
transform: translateY(-2px);
}
.btn-outline {
background-color: transparent;
border: 2px solid var(--primary-dark);
color: var(--primary-dark);
}
.btn-outline:hover {
background-color: var(--primary-dark);
color: var(--white);
}
.section-title {
text-align: center;
font-size: 2.5rem;
margin-bottom: 1rem;
position: relative;
padding-bottom: 15px;
}
.section-title::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 80px;
height: 3px;
background-color: var(--accent);
}
.section-subtitle {
text-align: center;
max-width: 600px;
margin: 0 auto 50px auto;
font-size: 1.1rem;
}
/* HEADER */
header {
background-color: var(--white);
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
position: sticky;
top: 0;
z-index: 1000;
}
.top-bar {
background-color: var(--primary-dark);
color: var(--white);
font-size: 0.85rem;
padding: 8px 0;
}
.top-bar .container {
display: flex;
justify-content: space-between;
}
.nav-container {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 0;
}
.logo {
display: flex;
align-items: center;
gap: 15px;
}
.logo img {
width: 50px;
height: 50px;
border-radius: 50%;
object-fit: cover;
}
.logo-text h1 {
font-size: 1.8rem;
margin: 0;
font-weight: 700;
color: var(--primary-dark);
}
.logo-text span {
display: block;
font-size: 0.8rem;
font-family: var(--font-body);
color: var(--accent);
text-transform: uppercase;
letter-spacing: 2px;
font-weight: 700;
}
nav ul {
display: flex;
gap: 30px;
}
nav a {
font-size: 0.95rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
position: relative;
}
nav a::after {
content: '';
position: absolute;
width: 0;
height: 2px;
bottom: -5px;
left: 0;
background-color: var(--accent);
transition: width 0.3s;
}
nav a:hover::after {
width: 100%;
}
.header-cta {
padding: 10px 25px;
font-size: 0.85rem;
}
/* HERO SECTION */
.hero {
position: relative;
height: 600px;
background-image: url('https://picsum.photos/1920/1080?blur=1'); /* Soft focus base */
background-size: cover;
background-position: center;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: var(--white);
}
.hero::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(rgba(0,0,0,0.4), rgba(0,0,0,0.7));
}
.hero-content {
position: relative;
z-index: 1;
max-width: 800px;
padding: 20px;
}
.hero h2 {
font-size: 3.5rem;
color: var(--white);
margin-bottom: 20px;
text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
}
.hero p {
font-size: 1.25rem;
margin-bottom: 30px;
font-weight: 300;
}
/* MAIN LAYOUT (Grid + Sidebar) */
.content-wrapper {
display: grid;
grid-template-columns: 2.5fr 1fr;
gap: 50px;
margin-bottom: 60px;
}
/* FEATURED SECTION: INGREDIENT SPOTLIGHT */
.ingredient-spotlight {
margin-bottom: 50px;
}
.spotlight-header {
display: flex;
justify-content: space-between;
align-items: flex-end;
margin-bottom: 30px;
border-bottom: 1px solid #eee;
padding-bottom: 15px;
}
.spotlight-text h3 {
font-size: 1.8rem;
}
.spotlight-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30px;
align-items: center;
}
.spotlight-img {
height: 400px;
width: 100%;
object-fit: cover;
box-shadow: 10px 10px 0px var(--bg-light);
}
.spotlight-content p {
margin-bottom: 20px;
font-size: 1.05rem;
}
/* INTERACTIVE: WINE PAIRING WIZARD */
.wine-pairing {
background-color: var(--bg-light);
padding: 40px;
border-radius: var(--border-radius);
text-align: center;
}
.pairing-form select {
padding: 12px 20px;
font-size: 1rem;
border: 1px solid #ddd;
border-radius: 4px;
margin-right: 10px;
width: 200px;
font-family: var(--font-body);
}
.pairing-result {
margin-top: 20px;
padding: 20px;
background: var(--white);
border-left: 5px solid var(--accent);
display: none; /* Hidden by default */
animation: fadeIn 0.5s ease;
}
.pairing-result h4 {
margin-bottom: 10px;
color: var(--accent);
}
/* BLOG / ARTICLE STYLE SECTION */
.journal-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
}
.journal-card {
background: var(--white);
border-radius: var(--border-radius);
overflow: hidden;
box-shadow: 0 5px 15px rgba(0,0,0,0.05);
transition: transform 0.3s ease;
}
.journal-card:hover {
transform: translateY(-5px);
}
.journal-img {
height: 200px;
width: 100%;
object-fit: cover;
}
.journal-content {
padding: 25px;
}
.journal-meta {
font-size: 0.8rem;
color: #888;
margin-bottom: 10px;
text-transform: uppercase;
}
.journal-content h3 {
font-size: 1.3rem;
margin-bottom: 15px;
}
.journal-content p {
font-size: 0.95rem;
margin-bottom: 20px;
color: #666;
}
/* SIDEBAR */
aside {
position: sticky;
top: 100px;
height: fit-content;
}
.widget {
margin-bottom: 40px;
background: var(--bg-light);
padding: 25px;
border-radius: var(--border-radius);
}
.widget h4 {
font-size: 1.2rem;
border-bottom: 2px solid #ddd;
padding-bottom: 10px;
margin-bottom: 20px;
}
.special-list li {
margin-bottom: 15px;
padding-bottom: 15px;
border-bottom: 1px dashed #ddd;
display: flex;
justify-content: space-between;
}
.special-list li span {
font-weight: bold;
color: var(--primary-dark);
}
.newsletter-form input {
width: 100%;
padding: 10px;
margin-bottom: 10px;
border: 1px solid #ddd;
border-radius: 4px;
}
.instagram-feed {
display: flex;
gap: 10px;
}
.insta-item {
width: 60px;
height: 60px;
object-fit: cover;
border-radius: 4px;
}
/* WIDEBOTTOM: TESTIMONIALS & FAQ */
.wide-bottom {
background-color: var(--primary-dark);
color: var(--white);
padding: 80px 20px;
}
.wide-bottom .section-title {
color: var(--white);
}
.wide-bottom .section-title::after {
background-color: var(--accent);
}
.testimonials-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 30px;
margin-bottom: 60px;
}
.testimonial-card {
background-color: rgba(255,255,255,0.05);
padding: 30px;
border-radius: var(--border-radius);
}
.stars {
color: #f1c40f;
margin-bottom: 15px;
}
.quote {
font-style: italic;
margin-bottom: 20px;
opacity: 0.9;
}
.author {
display: flex;
align-items: center;
gap: 15px;
}
.author img {
width: 40px;
height: 40px;
border-radius: 50%;
}
.faq-container {
max-width: 800px;
margin: 0 auto;
}
.accordion-item {
border-bottom: 1px solid rgba(255,255,255,0.1);
}
.accordion-header {
width: 100%;
background: none;
border: none;
padding: 20px 0;
color: var(--white);
text-align: left;
font-size: 1.1rem;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
font-family: var(--font-heading);
}
.accordion-header i {
transition: transform 0.3s;
}
.accordion-header.active i {
transform: rotate(180deg);
}
.accordion-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease;
color: #ccc;
}
.accordion-content p {
padding-bottom: 20px;
}
/* FOOTER */
footer {
background-color: #111;
color: #888;
padding: 70px 0 20px;
font-size: 0.9rem;
}
.footer-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 40px;
margin-bottom: 50px;
}
.footer-col h5 {
color: var(--white);
font-family: var(--font-heading);
font-size: 1.2rem;
margin-bottom: 20px;
}
.footer-col ul li {
margin-bottom: 10px;
}
.footer-col ul li a:hover {
color: var(--accent);
}
.social-links a {
display: inline-flex;
width: 35px;
height: 35px;
background: rgba(255,255,255,0.1);
color: var(--white);
align-items: center;
justify-content: center;
border-radius: 50%;
margin-right: 10px;
transition: background 0.3s;
}
.social-links a:hover {
background: var(--accent);
}
.footer-bottom {
border-top: 1px solid #333;
padding-top: 20px;
text-align: center;
display: flex;
justify-content: space-between;
align-items: center;
}
/* Mobile Responsive */
@media (max-width: 900px) {
.spotlight-grid {
grid-template-columns: 1fr;
}
.spotlight-img {
height: 300px;
}
.content-wrapper {
grid-template-columns: 1fr;
}
aside {
position: static;
}
}
@media (max-width: 768px) {
.nav-container {
flex-direction: column;
gap: 20px;
}
nav ul {
gap: 15px;
flex-wrap: wrap;
justify-content: center;
}
.hero h2 {
font-size: 2.5rem;
}
.testimonials-grid {
grid-template-columns: 1fr;
}
.footer-bottom {
flex-direction: column;
gap: 15px;
}
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body>
<!-- Header & Nav -->
<header>
<div class="top-bar">
<div class="container">
<span>Open Daily: 11:00 AM - 10:00 PM</span>
<span>Call for Reservations: (555) 123-4567</span>
</div>
</div>
<div class="container nav-container">
<a href="#" class="logo">
<img src="https://placehold.co/100x100/1a1a1a/ffffff?text=S&font=playfair+display" alt="Savor & Vine Logo">
<div class="logo-text">
<h1>Savor & Vine</h1>
<span>Culinary Excellence & Fine Dining</span>
</div>
</a>
<nav>
<ul>
<li><a href="#">Recipes</a></li>
<li><a href="#">Wine</a></li>
<li><a href="#">Travel</a></li>
<li><a href="#">Journal</a></li>
<li><a href="#">Events</a></li>
<li><a href="#">Shop</a></li>
</ul>
</nav>
<a href="#" class="btn header-cta">Subscribe</a>
</div>
</header>
<!-- Hero Section -->
<section class="hero">
<div class="hero-content">
<h2>Discover the Art of Food & Wine</h2>
<p>From farm-to-table recipes to exclusive sommelier insights, we curate the ultimate guide for the modern epicurean.</p>
<a href="#journal" class="btn">Read Journal</a>
<a href="#booking" class="btn btn-outline" style="color:white; border-color:white;">Book Private Event</a>
</div>
</section>
<!-- Main Content Wrapper -->
<main class="container content-wrapper">
<!-- Left Column: Content Sections -->
<section class="main-content">
<!-- Section 1: Ingredient Spotlight (Feature Grid) -->
<article class="ingredient-spotlight">
<div class="spotlight-header">
<div class="spotlight-text">
<span style="color:var(--accent); text-transform:uppercase; font-weight:bold; letter-spacing:1px;">Ingredient Spotlight</span>
<h3>Saffron: The World's Most Expensive Spice</h3>
</div>
<a href="#" class="btn btn-outline" style="border-color:var(--primary-dark); color:var(--primary-dark);">Learn More</a>
</div>
<div class="spotlight-grid">
<img src="https://placehold.co/800x600/fff3e0/2e7d32?text=Saffron+Pods&font=playfair+display" alt="Saffron Pods" class="spotlight-img">
<div class="spotlight-content">
<p>Often referred to as "red gold," Saffron is a filament derived from the crocus flower. Originating from the Mediterranean, it has traveled across continents to become a staple in everything from Italian Risotto to Iranian Paella. Understanding the grading of Saffron is crucial for any chef looking to achieve the perfect balance of metallic, hay-like, and floral notes.</p>
<p>When buying, always look for deep crimson threads with an orange-red tip. Cheap substitutes are usually imitated with the stigma of the saffron crocus or, worse, non-edible dyes. To fully release its flavor, steep saffron threads in warm liquid—like broth or wine—before adding them to your dish. This technique ensures an even distribution of color and taste.</p>
<a href="#" class="btn">Download Saffron Guide</a>
</div>
</div>
</article>
<!-- Section 2: Interactive Wine Pairing -->
<section class="wine-pairing">
<h3>Wine Pairing Wizard</h3>
<p style="margin-bottom: 20px;">Not sure what to drink with your main course? Let our algorithm suggest the perfect pairing.</p>
<div class="pairing-form">
<select id="dishSelect">
<option value="">Select Main Dish...</option>
<option value="beef">Grilled Ribeye Steak</option>
<option value="salmon">Pan-Seared Salmon</option>
<option value="chicken">Herb Roasted Chicken</option>
<option value="pasta">Truffle Mushroom Risotto</option>
<option value="dessert">Dark Chocolate Tart</option>
</select>
<button class="btn" id="pairBtn">Find Pairing</button>
</div>
<div id="pairingResult" class="pairing-result">
<h4 id="wineName">Tuscany Chianti Classico</h4>
<p id="wineDesc">A classic pairing for Grilled Ribeye. The acidity and tannins cut through the rich fat of the meat, while the cherry notes complement the char. Served slightly cooler at 62°F.</p>
</div>
</section>
<!-- Section 3: Journal & Articles (Grid) -->
<div id="journal" class="journal-grid" style="margin-top: 50px;">
<article class="journal-card">
<img src="https://picsum.photos/400/250?grayscale" alt="Chef cooking" class="journal-img">
<div class="journal-content">
<div class="journal-meta"><i class="far fa-calendar"></i> Oct 24, 2023</div>
<h3>Mastering the Mise en Place</h3>
<p>Why organization is the secret ingredient to stress-free cooking. We break down the professional technique used in busy restaurant kitchens.</p>
<a href="#" class="btn-outline" style="padding: 5px 15px; font-size: 0.8rem; border-radius: 4px;">Read Article</a>
</div>
</article>
<article class="journal-card">
<img src="https://picsum.photos/400/250?grayscale" alt="Wine pouring" class="journal-img">
<div class="journal-content">
<div class="journal-meta"><i class="far fa-calendar"></i> Oct 18, 2023</div>
<h3>Sommelier's Corner: Tannins</h3>
<p>Deep dive into red wine structure. What are tannins, and how do they affect the mouthfeel of Pinot Noir versus Cabernet Sauvignon?</p>
<a href="#" class="btn-outline" style="padding: 5px 15px; font-size: 0.8rem; border-radius: 4px;">Read Article</a>
</div>
</article>
<article class="journal-card">
<img src="https://picsum.photos/400/250?grayscale" alt="Salad ingredients" class="journal-img">
<div class="journal-content">
<div class="journal-meta"><i class="far fa-calendar"></i> Oct 10, 2023</div>
<h3>Nutrition 101: Healthy Fats</h3>
<p>Clarifying fats. From avocado oil to olive oil, learn which healthy fats are best for high-heat cooking versus finishing a dish.</p>
<a href="#" class="btn-outline" style="padding: 5px 15px; font-size: 0.8rem; border-radius: 4px;">Read Article</a>
</div>
</article>
</div>
</section>
<!-- Right Column: Sidebar -->
<aside>
<!-- Widget: Daily Specials -->
<div class="widget">
<h4><i class="fas fa-utensils" style="margin-right: 10px; color:var(--accent);"></i>Daily Specials</h4>
<ul class="special-list">
<li>
<span>Shallot Tart</span>
<span>$18</span>
</li>
<li>
<span>Butter-poached Halibut</span>
<span>$32</span>
</li>
<li>
<span>Brie & Fig Bruschetta</span>
<span>$14</span>
</li>
<li>
<span>Lavender Vanilla Gelato</span>
<span>$9</span>
</li>
</ul>
</div>
<!-- Widget: Newsletter -->
<div class="widget">
<h4>Seasonal Culinary Guide</h4>
<p style="margin-bottom: 15px; font-size: 0.9rem;">Get our free winter root vegetable PDF delivered to your inbox.</p>
<form class="newsletter-form">
<input type="email" placeholder="Your email address">
<button type="button" class="btn" style="width: 100%;">Sign Up</button>
</form>
</div>
<!-- Widget: Instagram -->
<div class="widget">
<h4>@SavorVine on IG</h4>
<div class="instagram-feed">
<img src="https://placehold.co/100x100/f5f5f5/333?text=1" alt="Instagram 1" class="insta-item">
<img src="https://placehold.co/100x100/f5f5f5/333?text=2" alt="Instagram 2" class="insta-item">
<img src="https://placehold.co/100x100/f5f5f5/333?text=3" alt="Instagram 3" class="insta-item">
<img src="https://placehold.co/100x100/f5f5f5/333?text=4" alt="Instagram 4" class="insta-item">
</div>
</div>
</aside>
</main>
<!-- Bottom Section: Testimonials & FAQ -->
<section class="wide-bottom">
<div class="container">
<h2 class="section-title">What Our Community Says</h2>
<div class="testimonials-grid">
<div class="testimonial-card">
<div class="stars">
<i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i>
</div>
<p class="quote">"Savor & Vine completely changed how I approach wine pairing. The interactive tool saved me during dinner with the in-laws!"</p>
<div class="author">
<img src="https://pravatar.cc/100?u=1" alt="User Avatar">
<div>
<strong>Jessica M.</strong><br>
<span style="font-size: 0.8rem;">Food Blogger</span>
</div>
</div>
</div>
<div class="testimonial-card">
<div class="stars">
<i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i>
</div>
<p class="quote">"The depth of the ingredient spotlights is unmatched. I feel like I'm studying under a master chef just by reading the articles."</p>
<div class="author">
<img src="https://pravatar.cc/100?u=2" alt="User Avatar">
<div>
<strong>David R.</strong><br>
<span style="font-size: 0.8rem;">Home Cook</span>
</div>
</div>
</div>
<div class="testimonial-card">
<div class="stars">
<i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star-half-alt"></i>
</div>
<p class="quote">"Professional, elegant, and incredibly informative. A must-read for anyone in the hospitality industry."</p>
<div class="author">
<img src="https://pravatar.cc/100?u=3" alt="User Avatar">
<div>
<strong>Sarah L.</strong><br>
<span style="font-size: 0.8rem;">Restaurant Manager</span>
</div>
</div>
</div>
</div>
<!-- FAQ Accordion -->
<div class="faq-container">
<h3>Frequently Asked Questions</h3>
<div class="accordion-item">
<button class="accordion-header active">
How do I care for my olive oil?
<i class="fas fa-chevron-down"></i>
</button>
<div class="accordion-content">
<p>Store your premium olive oil in a cool, dark place away from heat and light. Ideally, keep it in a pantry or cupboard. It is best used within 18-24 months of opening for peak flavor profile.</p>
</div>
</div>
<div class="accordion-item">
<button class="accordion-header">
Do you offer cooking classes?
<i class="fas fa-chevron-down"></i>
</button>
<div class="accordion-content">
<p>Yes! We host monthly classes at our flagship kitchen in Downtown. Check our Events calendar or subscribe to our newsletter to get early access to registration for "Wine 101" and "Advanced Sausage Making" workshops.</p>
</div>
</div>
<div class="accordion-item">
<button class="accordion-header">
Can I book a private tasting event?
<i class="fas fa-chevron-down"></i>
</button>
<div class="accordion-content">
<p>Absolutely. We offer private sommelier-led tasting flights for groups of 6-12. Contact our events coordinator at events@savorvine.com for customized menus based on your preference.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer>
<div class="container">
<div class="footer-grid">
<div class="footer-col">
<h5>Savor & Vine</h5>
<p>Curating the finest culinary experiences, recipes, and wine guides for the modern epicurean. From the farm to your fork.</p>
</div>
<div class="footer-col">
<h5>Explore</h5>
<ul>
<li><a href="#">All Recipes</a></li>
<li><a href="#">Wine Cellar</a></li>
<li><a href="#">Restaurants</a></li>
<li><a href="#">Seasonal Guides</a></li>
</ul>
</div>
<div class="footer-col">
<h5>Support</h5>
<ul>
<li><a href="#">Contact Us</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Terms of Service</a></li>
</ul>
</div>
<div class="footer-col">
<h5>Follow Us</h5>
<div class="social-links">
<a href="#"><i class="fab fa-facebook-f"></i></a>
<a href="#"><i class="fab fa-instagram"></i></a>
<a href="#"><i class="fab fa-twitter"></i></a>
<a href="#"><i class="fab fa-pinterest"></i></a>
</div>
</div>
</div>
<div class="footer-bottom">
<p>© 2023 Savor & Vine Media. All rights reserved.</p>
<div style="display: flex; gap: 20px;">
<a href="#">Privacy</a>
<a href="#">Cookies</a>
<a href="#">Sitemap</a>
</div>
</div>
</div>
</footer>
<!-- Interactive Scripts -->
<script>
// Wine Pairing Logic
const dishSelect = document.getElementById('dishSelect');
const pairBtn = document.getElementById('pairBtn');
const resultBox = document.getElementById('pairingResult');
const wineName = document.getElementById('wineName');
const wineDesc = document.getElementById('wineDesc');
const pairings = {
'beef': {
name: "Tuscany Chianti Classico",
desc: "A classic pairing for Grilled Ribeye. The acidity and tannins cut through the rich fat of the meat, while the cherry notes complement the char. Served slightly cooler at 62°F."
},
'salmon': {
name: "Crisp Sauvignon Blanc",
desc: "The high acidity of this white wine balances the natural oils in the salmon. Citrus and grassy notes enhance the fresh flavor of the fish. Best paired with a lemon-butter sauce."
},
'chicken': {
name: "Pinot Noir",
desc: "Lighter reds pair beautifully with roasted poultry. The earthy undertones of the wine match the herbs used in the roasting process without overpowering the chicken."
},
'pasta': {
name: "Arneis or Nebbiolo",
desc: "Complex enough for mushrooms but dry enough for cream. This Italian white will stand up to the earthiness of truffles while cleansing the palate between bites."
},
'dessert': {
name: "Late Harvest Riesling",
desc: "The residual sugar in the wine mirrors the sweetness of the tart, creating a 'blowout' of flavor. Avoid dry whites or tannic reds."
}
};
pairBtn.addEventListener('click', () => {
const choice = dishSelect.value;
if (pairings[choice]) {
// Update content
wineName.textContent = pairings[choice].name;
wineDesc.textContent = pairings[choice].desc;
// Show box
resultBox.style.display = 'block';
} else {
resultBox.style.display = 'none';
alert("Please select a dish first!");
}
});
// FAQ Accordion Logic
const accHeaders = document.querySelectorAll('.accordion-header');
accHeaders.forEach(header => {
header.addEventListener('click', () => {
// Toggle active class
header.classList.toggle('active');
const content = header.nextElementSibling;
const icon = header.querySelector('i');
if (header.classList.contains('active')) {
content.style.maxHeight = content.scrollHeight + "px";
icon.style.transform = "rotate(180deg)";
} else {
content.style.maxHeight = 0;
icon.style.transform = "rotate(0deg)";
}
// Close other items
accHeaders.forEach(otherHeader => {
if (otherHeader !== header && otherHeader.classList.contains('active')) {
otherHeader.classList.remove('active');
otherHeader.nextElementSibling.style.maxHeight = 0;
otherHeader.querySelector('i').style.transform = "rotate(0deg)";
}
});
});
});
</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:40:48.109Z",
"url": "https://benchmark.aimac.invalid/a8169c9b397736372b8d6ddb27ba44d551b2d1a98dd5e18db36f34511d118b18.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-allowed-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure an element's role supports its ARIA attributes",
"help": "Elements must only use supported ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-conditional-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are used as described in the specification of the element's role",
"help": "ARIA attributes must be used as specified for the element's role",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": []
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-prohibited-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-children",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require child roles contain them",
"help": "Certain ARIA roles must contain particular children",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-valid-attr-value",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all ARIA attributes have valid values",
"help": "ARIA attributes must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
"nodes": []
},
{
"id": "aria-valid-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure attributes that begin with aria- are valid ARIA attributes",
"help": "ARIA attributes must conform to valid names",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
"nodes": []
},
{
"id": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": []
},
{
"id": "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": "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": []
},
{
"id": "frame-focusable-content",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
"help": "Frames with focusable content must not have tabindex=-1",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
"nodes": []
},
{
"id": "frame-title-unique",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
"help": "Frames must have a unique title attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
"nodes": []
},
{
"id": "frame-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag412",
"section508",
"section508.22.i",
"TTv5",
"TT12.d",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure <iframe> and <frame> elements have an accessible name",
"help": "Frames must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
"nodes": []
},
{
"id": "html-xml-lang-mismatch",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
"help": "HTML elements with lang and xml:lang must have the same base language",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
"nodes": []
},
{
"id": "input-button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure input buttons have discernible text",
"help": "Input buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
"nodes": []
},
{
"id": "input-image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <input type=\"image\"> elements have alternative text",
"help": "Image buttons must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
"nodes": []
},
{
"id": "marquee",
"impact": null,
"tags": [
"cat.parsing",
"wcag2a",
"wcag222",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <marquee> elements are not used",
"help": "<marquee> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
"nodes": []
},
{
"id": "meta-refresh",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag221",
"TTv5",
"TT8.a",
"EN-301-549",
"EN-9.2.2.1"
],
"description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
"help": "Delayed refresh under 20 hours must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
"nodes": []
},
{
"id": "object-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure <object> elements have alternative text",
"help": "<object> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
"nodes": []
},
{
"id": "role-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure [role=\"img\"] elements have alternative text",
"help": "[role=\"img\"] elements must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "scrollable-region-focusable",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag211",
"wcag213",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1",
"EN-9.2.1.3"
],
"description": "Ensure elements that have scrollable content are accessible by keyboard",
"help": "Scrollable region must have keyboard access",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
"nodes": []
},
{
"id": "server-side-image-map",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag211",
"section508",
"section508.22.f",
"TTv5",
"TT4.a",
"EN-301-549",
"EN-9.2.1.1"
],
"description": "Ensure that server-side image maps are not used",
"help": "Server-side image maps must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
"nodes": []
},
{
"id": "summary-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure summary elements have discernible text",
"help": "Summary elements must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
"nodes": []
},
{
"id": "svg-img-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
"help": "<svg> elements with an img role must have an alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
"nodes": []
},
{
"id": "td-headers-attr",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
"help": "Table cells that use the headers attribute must only refer to cells in the same table",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
"nodes": []
},
{
"id": "th-has-data-cells",
"impact": null,
"tags": [
"cat.tables",
"wcag2a",
"wcag131",
"section508",
"section508.22.g",
"TTv5",
"TT14.b",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
"help": "Table headers in a data table must refer to data cells",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
"nodes": []
},
{
"id": "valid-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2aa",
"wcag312",
"TTv5",
"TT11.b",
"EN-301-549",
"EN-9.3.1.2",
"ACT"
],
"description": "Ensure lang attributes have valid values",
"help": "lang attribute must have a valid value",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
"nodes": []
},
{
"id": "video-caption",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag122",
"section508",
"section508.22.a",
"TTv5",
"TT17.a",
"EN-301-549",
"EN-9.1.2.2"
],
"description": "Ensure <video> elements have captions",
"help": "<video> elements must have captions",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
"nodes": []
},
{
"id": "no-autoplay-audio",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag142",
"TTv5",
"TT2.a",
"EN-301-549",
"EN-9.1.4.2",
"ACT"
],
"description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
"help": "<video> or <audio> elements must not play automatically",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
"nodes": []
}
],
"passes": [
{
"id": "aria-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": "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": "<a href=\"#booking\" class=\"btn btn-outline\" style=\"color:white; border-color:white;\">Book Private Event</a>",
"target": [
"a[href$=\"#booking\"]"
]
}
]
},
{
"id": "button-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure buttons have discernible text",
"help": "Buttons must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "button-has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has inner text that is visible to screen readers"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button class=\"btn\" id=\"pairBtn\">Find Pairing</button>",
"target": [
"#pairBtn"
]
}
]
},
{
"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>Savor & Vine</h1>",
"target": [
"h1"
]
},
{
"html": "<h2>Discover the Art of Food & Wine</h2>",
"target": [
".hero-content > h2"
]
},
{
"html": "<h3>Saffron: The World's Most Expensive Spice</h3>",
"target": [
".spotlight-text > h3"
]
},
{
"html": "<h3>Wine Pairing Wizard</h3>",
"target": [
".wine-pairing > h3"
]
},
{
"html": "<h3>Mastering the Mise en Place</h3>",
"target": [
".journal-card:nth-child(1) > .journal-content > h3"
]
},
{
"html": "<h3>Sommelier's Corner: Tannins</h3>",
"target": [
".journal-card:nth-child(2) > .journal-content > h3"
]
},
{
"html": "<h3>Nutrition 101: Healthy Fats</h3>",
"target": [
".journal-card:nth-child(3) > .journal-content > h3"
]
},
{
"html": "<h4><i class=\"fas fa-utensils\" style=\"margin-right: 10px; color:var(--accent);\"></i>Daily Specials</h4>",
"target": [
".widget:nth-child(1) > h4"
]
},
{
"html": "<h4>Seasonal Culinary Guide</h4>",
"target": [
".widget:nth-child(2) > h4"
]
},
{
"html": "<h4>@SavorVine on IG</h4>",
"target": [
".widget:nth-child(3) > h4"
]
},
{
"html": "<h2 class=\"section-title\">What Our Community Says</h2>",
"target": [
".section-title"
]
},
{
"html": "<h3>Frequently Asked Questions</h3>",
"target": [
".faq-container > h3"
]
},
{
"html": "<h5>Savor & Vine</h5>",
"target": [
".footer-col:nth-child(1) > h5"
]
},
{
"html": "<h5>Explore</h5>",
"target": [
".footer-col:nth-child(2) > h5"
]
},
{
"html": "<h5>Support</h5>",
"target": [
".footer-col:nth-child(3) > h5"
]
},
{
"html": "<h5>Follow Us</h5>",
"target": [
".footer-col:nth-child(4) > h5"
]
}
],
"impact": "serious",
"message": "Page has a heading"
},
{
"id": "landmark",
"data": null,
"relatedNodes": [
{
"html": "<main class=\"container content-wrapper\">",
"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": "#ffffff",
"bgColor": "#1a1a1a",
"contrastRatio": 17.4,
"fontSize": "10.2pt (13.6px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 17.4"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<span>Open Daily: 11:00 AM - 10:00 PM</span>",
"target": [
".container > span:nth-child(1)"
]
}
]
},
{
"id": "document-title",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag242",
"TTv5",
"TT12.a",
"EN-301-549",
"EN-9.2.4.2",
"ACT"
],
"description": "Ensure each HTML document contains a non-empty <title> element",
"help": "Documents must have <title> element to aid in navigation",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "doc-has-title",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Document has a non-empty <title> element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "form-field-multiple-labels",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag332",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.3.3.2"
],
"description": "Ensure form field does not have multiple label elements",
"help": "Form field must not have multiple label elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "multiple-label",
"data": null,
"relatedNodes": [],
"impact": "moderate",
"message": "Form field does not have multiple label elements"
}
],
"impact": null,
"html": "<select id=\"dishSelect\">",
"target": [
"#dishSelect"
]
}
]
},
{
"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/100x100/1a1a1a/ffffff?text=S&font=playfair+display\" alt=\"Savor & Vine Logo\">",
"target": [
"img[alt=\"Savor & Vine Logo\"]"
]
}
]
},
{
"id": "label",
"impact": null,
"tags": [
"cat.forms",
"wcag2a",
"wcag412",
"section508",
"section508.22.n",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "non-empty-placeholder",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a placeholder attribute"
}
],
"all": [],
"none": [
{
"id": "hidden-explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Form element has a visible explicit <label>"
}
],
"impact": null,
"html": "<input type=\"email\" placeholder=\"Your email address\">",
"target": [
"input"
]
}
]
},
{
"id": "link-in-text-block",
"impact": null,
"tags": [
"cat.color",
"wcag2a",
"wcag141",
"TTv5",
"TT13.a",
"EN-301-549",
"EN-9.1.4.1"
],
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "link-in-text-block-style",
"data": null,
"relatedNodes": [
{
"html": "<div class=\"journal-content\">",
"target": [
".journal-card:nth-child(1) > .journal-content"
]
}
],
"impact": "serious",
"message": "Links can be distinguished from surrounding text by visual styling"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"btn-outline\" style=\"padding: 5px 15px; font-size: 0.8rem; border-radius: 4px;\">Read Article</a>",
"target": [
".journal-card:nth-child(1) > .journal-content > .btn-outline[href=\"#\"]"
]
}
]
},
{
"id": "link-name",
"impact": "serious",
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a href=\"#\" class=\"logo\">",
"target": [
".logo"
]
}
]
},
{
"id": "list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure that lists are structured correctly",
"help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "only-listitems",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List element only has direct children that are allowed inside <li> elements"
}
],
"impact": null,
"html": "<ul>",
"target": [
"nav > ul"
]
}
]
},
{
"id": "listitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <li> elements are used semantically",
"help": "<li> elements must be contained in a <ul> or <ol>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "listitem",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "List item has a <ul>, <ol> or role=\"list\" parent element"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<li><a href=\"#\">Recipes</a></li>",
"target": [
"nav > ul > li:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<img src=\"https://placehold.co/100x100/1a1a1a/ffffff?text=S&font=playfair+display\" alt=\"Savor & Vine Logo\">",
"target": [
"img[alt=\"Savor & Vine Logo\"]"
]
}
]
},
{
"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": 366.4,
"height": 55
},
"relatedNodes": [],
"impact": "serious",
"message": "Control has sufficient size (366.4px by 55px, should be at least 24px by 24px)"
},
{
"id": "target-offset",
"data": {
"closestOffset": 24,
"minOffset": 24
},
"relatedNodes": [],
"impact": "serious",
"message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"logo\">",
"target": [
".logo"
]
}
]
}
],
"incomplete": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fontSize": "42.0pt (56px)",
"fontWeight": "bold",
"messageKey": "pseudoContent",
"expectedContrastRatio": "3:1"
},
"relatedNodes": [
{
"html": "<section class=\"hero\">",
"target": [
".hero"
]
}
],
"impact": "serious",
"message": "Element's background color could not be determined due to a pseudo element"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<h2>Discover the Art of Food & Wine</h2>",
"target": [
".hero-content > h2"
],
"failureSummary": "Fix any of the following:\n Element's background color could not be determined due to a pseudo element"
}
]
}
],
"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": "#d35400",
"bgColor": "#ffffff",
"contrastRatio": 4.16,
"fontSize": "9.6pt (12.8px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header>",
"target": [
"header"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.16 (foreground color: #d35400, background color: #ffffff, font size: 9.6pt (12.8px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Culinary Excellence & Fine Dining</span>",
"target": [
".logo-text > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.16 (foreground color: #d35400, background color: #ffffff, font size: 9.6pt (12.8px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d35400",
"contrastRatio": 4.16,
"fontSize": "10.2pt (13.6px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#\" class=\"btn header-cta\">Subscribe</a>",
"target": [
".header-cta"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.16 (foreground color: #ffffff, background color: #d35400, font size: 10.2pt (13.6px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"btn header-cta\">Subscribe</a>",
"target": [
".header-cta"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.16 (foreground color: #ffffff, background color: #d35400, font size: 10.2pt (13.6px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d35400",
"bgColor": "#ffffff",
"contrastRatio": 4.16,
"fontSize": "12.0pt (16px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.16 (foreground color: #d35400, background color: #ffffff, font size: 12.0pt (16px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span style=\"color:var(--accent); text-transform:uppercase; font-weight:bold; letter-spacing:1px;\">Ingredient Spotlight</span>",
"target": [
".spotlight-text > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.16 (foreground color: #d35400, background color: #ffffff, font size: 12.0pt (16px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d35400",
"contrastRatio": 4.16,
"fontSize": "10.8pt (14.4px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#\" class=\"btn\">Download Saffron Guide</a>",
"target": [
".spotlight-content > .btn[href=\"#\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.16 (foreground color: #ffffff, background color: #d35400, font size: 10.8pt (14.4px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"btn\">Download Saffron Guide</a>",
"target": [
".spotlight-content > .btn[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.16 (foreground color: #ffffff, background color: #d35400, font size: 10.8pt (14.4px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d35400",
"contrastRatio": 4.16,
"fontSize": "10.8pt (14.4px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<button class=\"btn\" id=\"pairBtn\">Find Pairing</button>",
"target": [
"#pairBtn"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.16 (foreground color: #ffffff, background color: #d35400, font size: 10.8pt (14.4px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button class=\"btn\" id=\"pairBtn\">Find Pairing</button>",
"target": [
"#pairBtn"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.16 (foreground color: #ffffff, background color: #d35400, font size: 10.8pt (14.4px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#888888",
"bgColor": "#ffffff",
"contrastRatio": 3.54,
"fontSize": "9.6pt (12.8px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"journal-card\">",
"target": [
".journal-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.54 (foreground color: #888888, background color: #ffffff, font size: 9.6pt (12.8px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"journal-meta\"><i class=\"far fa-calendar\"></i> Oct 24, 2023</div>",
"target": [
".journal-card:nth-child(1) > .journal-content > .journal-meta"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.54 (foreground color: #888888, background color: #ffffff, font size: 9.6pt (12.8px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#888888",
"bgColor": "#ffffff",
"contrastRatio": 3.54,
"fontSize": "9.6pt (12.8px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"journal-card\">",
"target": [
".journal-card:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.54 (foreground color: #888888, background color: #ffffff, font size: 9.6pt (12.8px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"journal-meta\"><i class=\"far fa-calendar\"></i> Oct 18, 2023</div>",
"target": [
".journal-card:nth-child(2) > .journal-content > .journal-meta"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.54 (foreground color: #888888, background color: #ffffff, font size: 9.6pt (12.8px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#888888",
"bgColor": "#ffffff",
"contrastRatio": 3.54,
"fontSize": "9.6pt (12.8px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<article class=\"journal-card\">",
"target": [
".journal-card:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.54 (foreground color: #888888, background color: #ffffff, font size: 9.6pt (12.8px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"journal-meta\"><i class=\"far fa-calendar\"></i> Oct 10, 2023</div>",
"target": [
".journal-card:nth-child(3) > .journal-content > .journal-meta"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.54 (foreground color: #888888, background color: #ffffff, font size: 9.6pt (12.8px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#d35400",
"contrastRatio": 4.16,
"fontSize": "10.8pt (14.4px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<button type=\"button\" class=\"btn\" style=\"width: 100%;\">Sign Up</button>",
"target": [
"button[type=\"button\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.16 (foreground color: #ffffff, background color: #d35400, font size: 10.8pt (14.4px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<button type=\"button\" class=\"btn\" style=\"width: 100%;\">Sign Up</button>",
"target": [
"button[type=\"button\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.16 (foreground color: #ffffff, background color: #d35400, font size: 10.8pt (14.4px), font weight: bold). Expected contrast ratio of 4.5:1"
}
]
},
{
"id": "link-name",
"impact": "serious",
"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 does not have text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has no title attribute"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is in tab order and does not have accessible text"
}
],
"impact": "serious",
"html": "<a href=\"#\"><i class=\"fab fa-facebook-f\"></i></a>",
"target": [
".social-links > a[href=\"#\"]:nth-child(1)"
],
"failureSummary": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute"
},
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has no title attribute"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is in tab order and does not have accessible text"
}
],
"impact": "serious",
"html": "<a href=\"#\"><i class=\"fab fa-instagram\"></i></a>",
"target": [
".social-links > a[href=\"#\"]:nth-child(2)"
],
"failureSummary": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute"
},
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has no title attribute"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is in tab order and does not have accessible text"
}
],
"impact": "serious",
"html": "<a href=\"#\"><i class=\"fab fa-twitter\"></i></a>",
"target": [
".social-links > a[href=\"#\"]:nth-child(3)"
],
"failureSummary": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute"
},
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have text that is visible to screen readers"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has no title attribute"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is in tab order and does not have accessible text"
}
],
"impact": "serious",
"html": "<a href=\"#\"><i class=\"fab fa-pinterest\"></i></a>",
"target": [
".social-links > a[href=\"#\"]:nth-child(4)"
],
"failureSummary": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute"
}
]
},
{
"id": "select-name",
"impact": "critical",
"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": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an implicit (wrapped) <label>"
},
{
"id": "explicit-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element does not have an explicit <label>"
},
{
"id": "aria-label",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-label attribute does not exist or is empty"
},
{
"id": "aria-labelledby",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty"
},
{
"id": "non-empty-title",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no title attribute"
},
{
"id": "presentational-role",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
],
"all": [],
"none": [],
"impact": "critical",
"html": "<select id=\"dishSelect\">",
"target": [
"#dishSelect"
],
"failureSummary": "Fix any of the following:\n Element does not have an implicit (wrapped) <label>\n Element does not have an explicit <label>\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
]
}
],
"coverage": {
"contract": "main-document-vertical-scroll",
"complete": true,
"positions": [
{
"y": 0,
"height": 3793
},
{
"y": 576,
"height": 3793
},
{
"y": 1152,
"height": 3793
},
{
"y": 1728,
"height": 3793
},
{
"y": 2304,
"height": 3793
},
{
"y": 2880,
"height": 3793
},
{
"y": 3073,
"height": 3793
}
],
"scans": 8,
"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: "Blog", "Wine", "Events".
- **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: "Wine Pairings", "Kitchen Essentials", "Ingredient Spotlight".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "mise en place", "braising", "sommelier".
- **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", "Book Event", "Join Cooking Class".
- **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: "wine pairing finder".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "food news", "daily specials", "restaurant picks".
- **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.