MiniMax MiniMax M3 – Travel
via CoreWeave · Generated
- AIMAC Debt 27.42
- Cost $0.017
- Total Violations 47
- HTML Size 58 KB
- Em Dashes 37
Screenshot
View Live Page
Accessibility Issues Found
6 Critical 41 Serious
-
color-contrast serious 41 instances
Elements must meet minimum color contrast ratio thresholds
Example HTML
<span>ly</span> -
label critical 3 instances
Form elements must have labels
Example HTML
<input type="date" value="2026-03-12"> -
select-name critical 3 instances
Select element must have an accessible name
Example HTML
<select><option>1 Adult</option><option selected="">2 Adults</option><option>2 Adults, 1 Child</option><option>Family of 4</option></select>
Artifacts
View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Wanderly — expertly curated travel guides, destinations, flights, and booking resources for every kind of traveler. Plan your next adventure with confidence.">
<title>Wanderly — Travel Guides, Destinations & Booking Resources</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=Poppins:wght@300;400;500;600;700;800&family=Playfair+Display:ital,wght@0,500;0,700;1,500&display=swap" rel="stylesheet">
<style>
:root{
--teal:#0c4a52;
--teal-dark:#083640;
--teal-light:#1a6973;
--coral:#e87a5d;
--coral-dark:#d36549;
--cream:#faf6f0;
--sand:#efe5d3;
--ink:#1f2a2e;
--charcoal:#2a2a2a;
--gray:#6b6b6b;
--gray-light:#9aa1a3;
--line:#e6e2d8;
--white:#ffffff;
--shadow:0 12px 30px rgba(12,74,82,.08);
--shadow-lg:0 24px 60px rgba(12,74,82,.18);
--radius:14px;
--radius-sm:8px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
font-family:'Poppins',system-ui,-apple-system,sans-serif;
color:var(--ink);
background:var(--cream);
line-height:1.65;
-webkit-font-smoothing:antialiased;
}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none}
.container{max-width:1240px;margin:0 auto;padding:0 28px}
/* ===== HEADER ===== */
.topbar{
background:var(--teal-dark);
color:#d9e7e9;
font-size:13px;
padding:8px 0;
}
.topbar .container{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap}
.topbar a{opacity:.85;transition:opacity .2s}
.topbar a:hover{opacity:1;color:var(--coral)}
.topbar-left span{margin-right:18px}
.topbar-left i{color:var(--coral);margin-right:6px}
.topbar-right a{margin-left:14px;font-size:14px}
header.main{
background:var(--white);
position:sticky;top:0;z-index:100;
border-bottom:1px solid var(--line);
box-shadow:0 2px 14px rgba(12,74,82,.05);
}
nav.primary{display:flex;align-items:center;justify-content:space-between;padding:18px 0}
.brand{display:flex;align-items:center;gap:12px}
.brand-logo{
width:46px;height:46px;border-radius:12px;
background:linear-gradient(135deg,var(--teal) 0%,var(--teal-light) 100%);
display:flex;align-items:center;justify-content:center;
color:var(--white);font-weight:800;font-size:22px;
box-shadow:0 6px 16px rgba(12,74,82,.25);
position:relative;overflow:hidden;
}
.brand-logo::after{
content:"";position:absolute;top:-8px;right:-8px;
width:18px;height:18px;background:var(--coral);border-radius:50%;
}
.brand-name{font-family:'Playfair Display',serif;font-size:24px;font-weight:700;color:var(--teal);letter-spacing:-.5px}
.brand-name span{color:var(--coral)}
.tagline{font-size:11px;color:var(--gray);letter-spacing:2px;text-transform:uppercase;margin-top:-2px}
.nav-links{display:flex;align-items:center;gap:6px;list-style:none}
.nav-links a{
padding:10px 14px;border-radius:8px;
font-size:14px;font-weight:500;color:var(--ink);
transition:all .2s ease;position:relative;
}
.nav-links a:hover{color:var(--teal);background:var(--cream)}
.nav-links a.active{color:var(--teal);font-weight:600}
.nav-links a.active::after{
content:"";position:absolute;bottom:4px;left:14px;right:14px;
height:2px;background:var(--coral);border-radius:2px;
}
.nav-cta{
background:var(--coral);color:var(--white)!important;
padding:10px 18px!important;border-radius:8px!important;
font-weight:600!important;
}
.nav-cta:hover{background:var(--coral-dark);transform:translateY(-1px)}
/* ===== HERO ===== */
.hero{
position:relative;min-height:620px;
background:linear-gradient(180deg,rgba(8,54,64,.55) 0%,rgba(8,54,64,.75) 100%),
url('https://picsum.photos/1920/900?random=20') center/cover no-repeat;
color:var(--white);
display:flex;align-items:center;
padding:80px 0 90px;
}
.hero-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:60px;align-items:center}
.hero-eyebrow{
display:inline-flex;align-items:center;gap:8px;
background:rgba(232,122,93,.18);border:1px solid rgba(232,122,93,.4);
color:#ffd5c5;padding:6px 14px;border-radius:30px;
font-size:12px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;
margin-bottom:22px;
}
.hero-eyebrow::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--coral);box-shadow:0 0 8px var(--coral)}
h1.hero-title{
font-family:'Playfair Display',serif;
font-size:clamp(36px,5vw,58px);font-weight:700;line-height:1.08;
margin-bottom:20px;letter-spacing:-1px;
}
h1.hero-title em{font-style:italic;color:#ffc7a8}
.hero-sub{font-size:17px;color:#dfe9eb;max-width:540px;margin-bottom:32px}
.hero-actions{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:36px}
.btn{
display:inline-flex;align-items:center;gap:8px;
padding:14px 24px;border-radius:10px;
font-size:15px;font-weight:600;
transition:all .25s ease;
}
.btn-primary{background:var(--coral);color:var(--white)}
.btn-primary:hover{background:var(--coral-dark);transform:translateY(-2px);box-shadow:0 12px 24px rgba(232,122,93,.35)}
.btn-ghost{border:1.5px solid rgba(255,255,255,.3);color:var(--white)}
.btn-ghost:hover{background:rgba(255,255,255,.1);border-color:#fff}
.hero-stats{display:flex;gap:32px;padding-top:24px;border-top:1px solid rgba(255,255,255,.15)}
.stat-number{font-family:'Playfair Display',serif;font-size:30px;font-weight:700;color:#ffc7a8}
.stat-label{font-size:12px;color:#b8c8cb;letter-spacing:1px;text-transform:uppercase}
/* Search Card */
.search-card{
background:var(--white);color:var(--ink);
border-radius:var(--radius);
padding:28px;
box-shadow:var(--shadow-lg);
}
.search-tabs{display:flex;gap:4px;margin-bottom:20px;border-bottom:1px solid var(--line)}
.search-tab{
padding:10px 16px;font-size:13px;font-weight:600;color:var(--gray);
border-bottom:2px solid transparent;margin-bottom:-1px;
}
.search-tab.active{color:var(--teal);border-bottom-color:var(--coral)}
.search-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}
.field{display:flex;flex-direction:column;gap:4px}
.field label{font-size:11px;font-weight:600;color:var(--gray);letter-spacing:.5px;text-transform:uppercase}
.field input,.field select{
padding:11px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);
font-family:inherit;font-size:14px;color:var(--ink);background:var(--white);
transition:border .2s;
}
.field input:focus,.field select:focus{outline:none;border-color:var(--teal)}
.field-full{grid-column:1 / -1}
.search-submit{
width:100%;margin-top:8px;
background:var(--teal);color:var(--white);
padding:14px;border-radius:10px;font-size:15px;font-weight:600;
transition:background .2s;
}
.search-submit:hover{background:var(--teal-dark)}
.search-trust{font-size:11px;color:var(--gray);text-align:center;margin-top:12px;display:flex;align-items:center;justify-content:center;gap:6px}
.search-trust::before{content:"🔒";font-size:10px}
/* ===== TRUST STRIP ===== */
.trust-strip{padding:32px 0;background:var(--white);border-bottom:1px solid var(--line)}
.trust-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:30px}
.trust-label{font-size:12px;font-weight:600;color:var(--gray);letter-spacing:2px;text-transform:uppercase}
.trust-logos{display:flex;align-items:center;gap:36px;flex-wrap:wrap;opacity:.7}
.trust-logos span{font-family:'Playfair Display',serif;font-size:20px;color:var(--teal);font-weight:600}
/* ===== SECTIONS ===== */
section{padding:80px 0}
.section-head{text-align:center;max-width:680px;margin:0 auto 56px}
.section-eyebrow{
display:inline-block;font-size:12px;font-weight:700;color:var(--coral);
letter-spacing:3px;text-transform:uppercase;margin-bottom:14px;
}
h2.section-title{
font-family:'Playfair Display',serif;font-size:clamp(30px,4vw,42px);
font-weight:700;color:var(--teal);letter-spacing:-.5px;line-height:1.15;
margin-bottom:16px;
}
.section-sub{font-size:16px;color:var(--gray);max-width:600px;margin:0 auto}
/* ===== FEATURED DESTINATIONS ===== */
.dest-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.dest-card{
background:var(--white);border-radius:var(--radius);overflow:hidden;
box-shadow:var(--shadow);transition:all .3s ease;cursor:pointer;
position:relative;
}
.dest-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg)}
.dest-img{height:240px;position:relative;overflow:hidden}
.dest-img img{width:100%;height:100%;object-fit:cover;transition:transform .5s}
.dest-card:hover .dest-img img{transform:scale(1.08)}
.dest-badge{
position:absolute;top:14px;left:14px;
background:rgba(255,255,255,.95);color:var(--teal);
padding:5px 11px;border-radius:20px;font-size:11px;font-weight:700;
letter-spacing:.5px;
}
.dest-badge.deal{background:var(--coral);color:#fff}
.dest-price{
position:absolute;bottom:14px;right:14px;
background:rgba(8,54,64,.92);color:#fff;
padding:7px 12px;border-radius:8px;font-size:13px;font-weight:600;
}
.dest-price strong{font-size:16px;color:#ffc7a8}
.dest-info{padding:22px}
.dest-meta{display:flex;justify-content:space-between;font-size:12px;color:var(--gray);margin-bottom:8px}
.dest-meta span::before{content:"★";color:var(--coral);margin-right:4px}
.dest-name{font-family:'Playfair Display',serif;font-size:20px;font-weight:600;color:var(--ink);margin-bottom:6px}
.dest-desc{font-size:13px;color:var(--gray);margin-bottom:14px;line-height:1.55}
.dest-link{font-size:13px;color:var(--coral);font-weight:600;display:inline-flex;align-items:center;gap:6px}
.dest-link::after{content:"→";transition:transform .2s}
.dest-card:hover .dest-link::after{transform:translateX(4px)}
/* ===== TRAVEL STYLES ===== */
.styles{background:linear-gradient(180deg,var(--cream) 0%,var(--sand) 100%)}
.styles-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.style-card{
background:var(--white);padding:32px 26px;border-radius:var(--radius);
border:1px solid var(--line);transition:all .3s;
position:relative;overflow:hidden;
}
.style-card::before{
content:"";position:absolute;top:0;left:0;right:0;height:3px;
background:var(--coral);transform:scaleX(0);transform-origin:left;
transition:transform .3s;
}
.style-card:hover{transform:translateY(-4px);box-shadow:var(--shadow);border-color:transparent}
.style-card:hover::before{transform:scaleX(1)}
.style-icon{
width:56px;height:56px;border-radius:14px;
background:linear-gradient(135deg,var(--teal-light),var(--teal));
color:#fff;display:flex;align-items:center;justify-content:center;
font-size:26px;margin-bottom:18px;
}
.style-card h3{font-family:'Playfair Display',serif;font-size:22px;color:var(--teal);margin-bottom:10px}
.style-card p{font-size:14px;color:var(--gray);margin-bottom:16px;line-height:1.6}
.style-card ul{list-style:none;font-size:13px;color:var(--ink)}
.style-card ul li{padding:5px 0;padding-left:22px;position:relative}
.style-card ul li::before{content:"✓";position:absolute;left:0;color:var(--coral);font-weight:700}
/* ===== WHY US ===== */
.why-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}
.why-card{
text-align:center;padding:36px 24px;
background:var(--white);border-radius:var(--radius);
box-shadow:var(--shadow);transition:transform .3s;
}
.why-card:hover{transform:translateY(-4px)}
.why-icon{
width:72px;height:72px;border-radius:50%;
background:var(--cream);color:var(--teal);
display:flex;align-items:center;justify-content:center;
margin:0 auto 18px;font-size:30px;
border:2px solid var(--sand);
}
.why-card h4{font-size:18px;font-weight:600;color:var(--ink);margin-bottom:10px}
.why-card p{font-size:14px;color:var(--gray);line-height:1.65}
/* ===== PACKING GENERATOR ===== */
.packer{background:var(--teal);color:#fff;border-radius:var(--radius-lg,20px);position:relative;overflow:hidden}
.packer::before{
content:"";position:absolute;top:-50%;right:-10%;
width:500px;height:500px;border-radius:50%;
background:radial-gradient(circle,rgba(232,122,93,.25) 0%,transparent 70%);
}
.packer-wrap{display:grid;grid-template-columns:1fr 1fr;gap:50px;align-items:center;position:relative}
.packer h2{font-family:'Playfair Display',serif;font-size:36px;margin-bottom:18px;line-height:1.2}
.packer h2 em{color:#ffc7a8;font-style:italic}
.packer-intro{color:#b8c8cb;font-size:15px;margin-bottom:24px}
.packer-features{list-style:none;margin-bottom:0}
.packer-features li{padding:8px 0;color:#dfe9eb;font-size:14px;display:flex;align-items:center;gap:10px}
.packer-features li::before{content:"→";color:var(--coral);font-weight:700}
.packer-card{background:var(--white);color:var(--ink);padding:28px;border-radius:14px;box-shadow:var(--shadow-lg)}
.packer-card h3{font-size:18px;color:var(--teal);margin-bottom:18px;display:flex;align-items:center;gap:10px}
.packer-card h3::before{content:"🎒";font-size:22px}
.pack-types{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:20px}
.pack-type{
padding:12px;border:1.5px solid var(--line);border-radius:8px;
font-size:13px;font-weight:500;color:var(--ink);cursor:pointer;
text-align:center;transition:all .2s;
}
.pack-type:hover{border-color:var(--teal)}
.pack-type.active{background:var(--teal);color:#fff;border-color:var(--teal)}
.pack-field{margin-bottom:14px}
.pack-field label{display:block;font-size:12px;font-weight:600;color:var(--gray);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}
.pack-field input,.pack-field select{
width:100%;padding:11px 14px;border:1px solid var(--line);border-radius:8px;
font-family:inherit;font-size:14px;
}
.pack-go{
width:100%;background:var(--coral);color:#fff;padding:13px;border-radius:10px;
font-size:14px;font-weight:600;margin-top:10px;
}
.pack-go:hover{background:var(--coral-dark)}
.pack-result{
margin-top:18px;padding:18px;background:var(--cream);border-radius:10px;
display:none;
}
.pack-result.show{display:block;animation:fadeUp .4s ease}
.pack-result h4{font-size:14px;color:var(--teal);margin-bottom:10px;display:flex;justify-content:space-between;align-items:center}
.pack-result h4 span{font-size:11px;color:var(--gray);font-weight:400}
.pack-list{list-style:none;font-size:13px;max-height:200px;overflow-y:auto}
.pack-list li{padding:7px 0;border-bottom:1px dashed var(--line);display:flex;align-items:center;gap:10px}
.pack-list li:last-child{border-bottom:none}
.pack-list input[type="checkbox"]{accent-color:var(--coral);width:16px;height:16px;cursor:pointer}
.pack-list label{cursor:pointer;color:var(--ink)}
.pack-list input:checked+label{text-decoration:line-through;color:var(--gray-light)}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
/* ===== CONTENT + SIDEBAR ===== */
.content-with-side{display:grid;grid-template-columns:1fr 340px;gap:40px;align-items:start}
.blog-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}
.blog-card{
background:var(--white);border-radius:var(--radius);overflow:hidden;
box-shadow:var(--shadow);transition:all .3s;cursor:pointer;
}
.blog-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.blog-img{height:200px;position:relative;overflow:hidden}
.blog-img img{width:100%;height:100%;object-fit:cover;transition:transform .5s}
.blog-card:hover .blog-img img{transform:scale(1.06)}
.blog-cat{
position:absolute;top:14px;left:14px;
background:var(--coral);color:#fff;
padding:4px 10px;border-radius:6px;font-size:11px;font-weight:700;letter-spacing:.5px;
}
.blog-body{padding:22px}
.blog-meta{font-size:11px;color:var(--gray);letter-spacing:1px;text-transform:uppercase;margin-bottom:8px;display:flex;gap:12px}
.blog-meta span::before{content:"•";margin-right:8px;color:var(--coral)}
.blog-meta span:first-child::before{display:none}
.blog-title{font-family:'Playfair Display',serif;font-size:20px;font-weight:600;color:var(--ink);line-height:1.3;margin-bottom:10px}
.blog-excerpt{font-size:13px;color:var(--gray);line-height:1.6;margin-bottom:14px}
.blog-author{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--gray)}
.blog-author img{width:30px;height:30px;border-radius:50%;object-fit:cover}
/* SIDEBAR */
aside.sidebar{position:sticky;top:100px;display:flex;flex-direction:column;gap:24px}
.side-card{background:var(--white);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow)}
.side-title{
font-family:'Playfair Display',serif;font-size:18px;color:var(--teal);
margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--line);
display:flex;align-items:center;justify-content:space-between;
}
.side-title::after{content:"";font-size:11px;color:var(--coral);font-family:'Poppins',sans-serif;font-weight:600}
.deal-list{list-style:none}
.deal-item{
display:flex;gap:12px;padding:12px 0;border-bottom:1px dashed var(--line);
}
.deal-item:last-child{border-bottom:none}
.deal-img{width:64px;height:64px;border-radius:8px;object-fit:cover;flex-shrink:0}
.deal-info h5{font-size:14px;color:var(--ink);margin-bottom:4px;font-weight:600}
.deal-meta{font-size:11px;color:var(--gray);margin-bottom:4px}
.deal-price{font-size:14px;font-weight:700;color:var(--coral)}
.deal-price s{color:var(--gray-light);font-weight:400;font-size:11px;margin-right:4px}
.hack-list{list-style:none}
.hack-item{display:flex;gap:10px;padding:10px 0;border-bottom:1px dashed var(--line);font-size:13px}
.hack-item:last-child{border-bottom:none}
.hack-num{
flex-shrink:0;width:24px;height:24px;border-radius:50%;
background:var(--cream);color:var(--coral);font-weight:700;font-size:12px;
display:flex;align-items:center;justify-content:center;
}
.hack-text{color:var(--ink);line-height:1.5}
.newsletter-card{
background:linear-gradient(135deg,var(--coral) 0%,#d36549 100%);
color:#fff;border-radius:var(--radius);padding:28px;position:relative;overflow:hidden;
}
.newsletter-card::before{
content:"";position:absolute;bottom:-30px;right:-30px;
width:120px;height:120px;border-radius:50%;
background:rgba(255,255,255,.08);
}
.newsletter-card h4{font-family:'Playfair Display',serif;font-size:20px;margin-bottom:8px;position:relative}
.newsletter-card p{font-size:13px;color:rgba(255,255,255,.9);margin-bottom:14px;position:relative}
.newsletter-input{
width:100%;padding:11px 14px;border:none;border-radius:8px;
font-family:inherit;font-size:13px;margin-bottom:8px;position:relative;
}
.newsletter-btn{
width:100%;background:var(--teal-dark);color:#fff;padding:11px;border-radius:8px;
font-size:13px;font-weight:600;position:relative;
}
.newsletter-btn:hover{background:var(--teal)}
/* ===== TESTIMONIALS ===== */
.testimonials{background:var(--white)}
.test-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px}
.test-card{
background:var(--cream);padding:32px 28px;border-radius:var(--radius);
position:relative;border:1px solid var(--line);
}
.test-card::before{
content:"\201C";position:absolute;top:8px;left:20px;
font-family:'Playfair Display',serif;font-size:80px;color:var(--coral);opacity:.25;
line-height:1;
}
.test-text{font-size:14px;color:var(--ink);line-height:1.7;margin-bottom:20px;font-style:italic;position:relative}
.test-author{display:flex;align-items:center;gap:12px}
.test-author img{width:46px;height:46px;border-radius:50%;object-fit:cover;border:2px solid var(--white)}
.test-name{font-size:14px;font-weight:600;color:var(--ink)}
.test-trip{font-size:12px;color:var(--gray)}
.test-stars{color:#f5b942;margin-bottom:8px;font-size:13px;letter-spacing:1px}
/* ===== FAQ ===== */
.faq-wrap{max-width:820px;margin:0 auto}
.faq-item{
background:var(--white);border:1px solid var(--line);border-radius:12px;
margin-bottom:14px;overflow:hidden;transition:border .2s;
}
.faq-item[open]{border-color:var(--teal);box-shadow:var(--shadow)}
.faq-q{
padding:20px 24px;cursor:pointer;font-weight:600;color:var(--ink);
font-size:15px;display:flex;justify-content:space-between;align-items:center;gap:14px;
list-style:none;
}
.faq-q::-webkit-details-marker{display:none}
.faq-q::after{
content:"+";font-size:22px;color:var(--coral);font-weight:400;
transition:transform .3s;
}
.faq-item[open] .faq-q::after{content:"−"}
.faq-a{padding:0 24px 22px;color:var(--gray);font-size:14px;line-height:1.75}
/* ===== CTA BANNER ===== */
.cta-banner{
background:linear-gradient(135deg,var(--teal-dark) 0%,var(--teal) 100%);
color:#fff;text-align:center;padding:70px 30px;border-radius:20px;
position:relative;overflow:hidden;
}
.cta-banner::before,.cta-banner::after{
content:"";position:absolute;border-radius:50%;
background:radial-gradient(circle,rgba(232,122,93,.3) 0%,transparent 70%);
}
.cta-banner::before{top:-100px;left:-100px;width:300px;height:300px}
.cta-banner::after{bottom:-100px;right:-100px;width:300px;height:300px}
.cta-banner h2{font-family:'Playfair Display',serif;font-size:40px;margin-bottom:14px;position:relative}
.cta-banner p{color:#b8c8cb;font-size:16px;max-width:560px;margin:0 auto 28px;position:relative}
.cta-banner .btn-primary{position:relative;font-size:16px;padding:16px 32px}
/* ===== FOOTER ===== */
footer{background:var(--teal-dark);color:#aac4c8;padding:64px 0 24px;margin-top:0}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr 1fr;gap:40px;margin-bottom:48px}
.foot-brand .brand-name{color:#fff}
.foot-brand p{font-size:14px;color:#8aa4a8;margin:18px 0 22px;line-height:1.65;max-width:300px}
.foot-social{display:flex;gap:10px}
.foot-social a{
width:36px;height:36px;border-radius:50%;
background:rgba(255,255,255,.08);color:#aac4c8;
display:flex;align-items:center;justify-content:center;font-size:14px;
transition:all .2s;
}
.foot-social a:hover{background:var(--coral);color:#fff;transform:translateY(-2px)}
.foot-col h5{color:#fff;font-size:14px;font-weight:600;margin-bottom:18px;letter-spacing:1px;text-transform:uppercase}
.foot-col ul{list-style:none;font-size:13px}
.foot-col ul li{padding:6px 0}
.foot-col ul li a{color:#8aa4a8;transition:color .2s}
.foot-col ul li a:hover{color:var(--coral)}
.foot-contact li{display:flex;gap:10px;padding:6px 0;font-size:13px;color:#8aa4a8}
.foot-contact li::before{content:attr(data-icon);color:var(--coral);flex-shrink:0;font-weight:700}
.foot-bottom{
border-top:1px solid rgba(255,255,255,.08);
padding-top:24px;display:flex;justify-content:space-between;align-items:center;
font-size:13px;color:#7d959a;flex-wrap:wrap;gap:14px;
}
.foot-bottom a{color:#7d959a;margin-left:18px}
.foot-bottom a:hover{color:var(--coral)}
.foot-pay{display:flex;gap:10px;align-items:center;font-size:11px;color:#7d959a}
.foot-pay span{padding:4px 8px;background:rgba(255,255,255,.05);border-radius:4px}
/* ===== RESPONSIVE ===== */
@media (max-width:1024px){
.hero-grid,.packer-wrap,.content-with-side{grid-template-columns:1fr;gap:40px}
aside.sidebar{position:static}
.dest-grid,.styles-grid,.why-grid,.test-grid{grid-template-columns:repeat(2,1fr)}
.foot-grid{grid-template-columns:1fr 1fr}
.nav-links{display:none}
}
@media (max-width:640px){
.container{padding:0 18px}
section{padding:60px 0}
.dest-grid,.styles-grid,.why-grid,.test-grid,.blog-grid,.pack-types{grid-template-columns:1fr}
.hero-stats{flex-wrap:wrap;gap:20px}
.search-row{grid-template-columns:1fr}
.foot-grid{grid-template-columns:1fr;gap:30px}
.foot-bottom{flex-direction:column;text-align:center}
.foot-bottom a{margin:0 9px}
.topbar{display:none}
}
</style>
</head>
<body>
<!-- TOP BAR -->
<div class="topbar">
<div class="container">
<div class="topbar-left">
<span><i>✉</i> hello@wanderly.travel</span>
<span><i>☎</i> +1 (415) 555-0142</span>
</div>
<div class="topbar-right">
<a href="#">USD $</a>
<a href="#">EN</a>
<a href="#">24/7 Support</a>
</div>
</div>
</div>
<!-- HEADER -->
<header class="main">
<div class="container">
<nav class="primary">
<div class="brand">
<div class="brand-logo">W</div>
<div>
<div class="brand-name">Wander<span>ly</span></div>
<div class="tagline">Your Journey, Expertly Curated</div>
</div>
</div>
<ul class="nav-links">
<li><a href="#" class="active">Home</a></li>
<li><a href="#destinations">Destinations</a></li>
<li><a href="#">Flights</a></li>
<li><a href="#">Hotels</a></li>
<li><a href="#blog">Blog</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#" class="nav-cta">Find Deals</a></li>
</ul>
</nav>
</div>
</header>
<!-- HERO -->
<section class="hero">
<div class="container">
<div class="hero-grid">
<div class="hero-text">
<div class="hero-eyebrow">Over 12,000 curated experiences worldwide</div>
<h1 class="hero-title">Travel further.<br>Pay <em>smarter</em>.<br>Worry less.</h1>
<p class="hero-sub">From hidden beaches in Southeast Asia to all-inclusive retreats in the Mediterranean, Wanderly connects you with hand-picked flights, hotels, and excursions — all backed by 24/7 concierge support and price-match guarantees.</p>
<div class="hero-actions">
<a href="#destinations" class="btn btn-primary">Explore Destinations →</a>
<a href="#" class="btn btn-ghost">▶ Watch Trailer</a>
</div>
<div class="hero-stats">
<div><div class="stat-number">1.2M+</div><div class="stat-label">Happy Travelers</div></div>
<div><div class="stat-number">180+</div><div class="stat-label">Countries</div></div>
<div><div class="stat-number">4.9★</div><div class="stat-label">TripAdvisor Score</div></div>
</div>
</div>
<div class="search-card">
<div class="search-tabs">
<button class="search-tab active" data-tab="flights">✈ Flights</button>
<button class="search-tab" data-tab="hotels">🏨 Hotels</button>
<button class="search-tab" data-tab="packages">📦 Packages</button>
</div>
<div class="search-row">
<div class="field"><label>From</label><input type="text" placeholder="San Francisco (SFO)" value="San Francisco (SFO)"></div>
<div class="field"><label>To</label><input type="text" placeholder="Where to?"></div>
</div>
<div class="search-row">
<div class="field"><label>Depart</label><input type="date" value="2026-03-12"></div>
<div class="field"><label>Return</label><input type="date" value="2026-03-22"></div>
</div>
<div class="search-row">
<div class="field">
<label>Travellers</label>
<select><option>1 Adult</option><option selected>2 Adults</option><option>2 Adults, 1 Child</option><option>Family of 4</option></select>
</div>
<div class="field">
<label>Class</label>
<select><option>Economy</option><option selected>Premium Economy</option><option>Business</option><option>First</option></select>
</div>
</div>
<button class="search-submit">Compare Prices & Find Deals →</button>
<div class="search-trust">No booking fees · Free cancellation within 24h</div>
</div>
</div>
</div>
</section>
<!-- TRUST STRIP -->
<div class="trust-strip">
<div class="container">
<div class="trust-row">
<div class="trust-label">Featured in</div>
<div class="trust-logos">
<span>Forbes Travel</span>
<span>Condé Nast</span>
<span>Travel + Leisure</span>
<span>National Geographic</span>
<span>The New York Times</span>
</div>
</div>
</div>
</div>
<!-- DESTINATIONS -->
<section id="destinations">
<div class="container">
<div class="section-head">
<div class="section-eyebrow">Trending Destinations</div>
<h2 class="section-title">Where will this year take you?</h2>
<p class="section-sub">Hand-picked destinations loved by our community of travelers — from sun-soaked coasts to cultural capitals, each verified by our in-country experts.</p>
</div>
<div class="dest-grid">
<div class="dest-card">
<div class="dest-img">
<img src="https://picsum.photos/600/400?random=31" alt="Bali rice terraces">
<span class="dest-badge deal">20% OFF</span>
<div class="dest-price">From <strong>$899</strong></div>
</div>
<div class="dest-info">
<div class="dest-meta"><span>4.9</span><span>Asia · Indonesia</span></div>
<h3 class="dest-name">Bali, Indonesia</h3>
<p class="dest-desc">Volcanic peaks, sacred temples, and world-class surf — the Island of the Gods delivers on every front.</p>
<a href="#" class="dest-link">Explore Destination</a>
</div>
</div>
<div class="dest-card">
<div class="dest-img">
<img src="https://picsum.photos/600/400?random=32" alt="Santorini sunset">
<span class="dest-badge">Editor's Pick</span>
<div class="dest-price">From <strong>$1,249</strong></div>
</div>
<div class="dest-info">
<div class="dest-meta"><span>4.8</span><span>Europe · Greece</span></div>
<h3 class="dest-name">Santorini, Greece</h3>
<p class="dest-desc">Whitewashed villages perched above the Aegean, legendary sunsets in Oia, and unforgettable wine trails.</p>
<a href="#" class="dest-link">Explore Destination</a>
</div>
</div>
<div class="dest-card">
<div class="dest-img">
<img src="https://picsum.photos/600/400?random=33" alt="Kyoto temples">
<span class="dest-badge deal">Best Seller</span>
<div class="dest-price">From <strong>$1,099</strong></div>
</div>
<div class="dest-info">
<div class="dest-meta"><span>4.9</span><span>Asia · Japan</span></div>
<h3 class="dest-name">Kyoto, Japan</h3>
<p class="dest-desc">Bamboo groves, tea ceremonies, and 1,600 temples — discover Japan's soul in its former imperial capital.</p>
<a href="#" class="dest-link">Explore Destination</a>
</div>
</div>
<div class="dest-card">
<div class="dest-img">
<img src="https://picsum.photos/600/400?random=34" alt="Marrakech market">
<div class="dest-price">From <strong>$749</strong></div>
</div>
<div class="dest-info">
<div class="dest-meta"><span>4.7</span><span>Africa · Morocco</span></div>
<h3 class="dest-name">Marrakech, Morocco</h3>
<p class="dest-desc">Spice-filled souks, riad hideaways, and gateway routes to the Atlas Mountains and Sahara dunes.</p>
<a href="#" class="dest-link">Explore Destination</a>
</div>
</div>
</div>
<div style="text-align:center;margin-top:42px">
<a href="#" class="btn btn-primary" style="background:var(--teal);">View All 180+ Destinations →</a>
</div>
</div>
</section>
<!-- TRAVEL STYLES -->
<section class="styles">
<div class="container">
<div class="section-head">
<div class="section-eyebrow">Find Your Travel Style</div>
<h2 class="section-title">Built for every kind of traveler</h2>
<p class="section-sub">Whether you're stretching a backpacker's budget or planning a once-in-a-lifetime luxury escape, our guides and itineraries are tailored to how you actually travel.</p>
</div>
<div class="styles-grid">
<div class="style-card">
<div class="style-icon">💰</div>
<h3>Budget Travel</h3>
<p>Stretch every dollar without sacrificing experience. We've mastered the art of authentic travel on a shoestring — hostels, street food, and free walking tours included.</p>
<ul>
<li>Hostel & guesthouse reviews under $30/night</li>
<li>Public transit guides and flight hacks</li>
<li>Free and low-cost attractions in every city</li>
</ul>
</div>
<div class="style-card">
<div class="style-icon">🥂</div>
<h3>Luxury Escapes</h3>
<p>All-inclusive resorts, private guides, and first-class upgrades — hand-selected properties where every detail is curated for an unforgettable stay.</p>
<ul>
<li>5-star & boutique hotel partnerships</li>
<li>Private excursion and yacht charters</li>
<li>VIP airport lounge access worldwide</li>
</ul>
</div>
<div class="style-card">
<div class="style-icon">🎒</div>
<h3>Solo Travel</h3>
<p>Traveling alone doesn't mean traveling lonely. Connect with vetted small-group tours and female-friendly routes designed for independent explorers.</p>
<ul>
<li>Verified single-room bookings</li>
<li>Solo-friendly neighborhoods ranked by safety</li>
<li>Group tours with 12 travelers or fewer</li>
</ul>
</div>
<div class="style-card">
<div class="style-icon">👨👩👧👦</div>
<h3>Family Adventures</h3>
<p>Kid-approved itineraries with built-in downtime, family suites, and excursions that entertain all ages — from toddlers to teens.</p>
<ul>
<li>Family suite filters on every booking</li>
<li>Stroller-friendly routes & attractions</li>
<li>Travel insurance with family coverage</li>
</ul>
</div>
</div>
</div>
</section>
<!-- WHY US -->
<section>
<div class="container">
<div class="section-head">
<div class="section-eyebrow">Why Wanderly</div>
<h2 class="section-title">Travel planning, reimagined</h2>
<p class="section-sub">We combine cutting-edge technology with human expertise so you can book in minutes — and travel with total confidence.</p>
</div>
<div class="why-grid">
<div class="why-card">
<div class="why-icon">🔒</div>
<h4>Price Match Guarantee</h4>
<p>Find a lower price within 24 hours of booking? We'll refund the difference. No fine print, no runaround.</p>
</div>
<div class="why-card">
<div class="why-icon">🛡️</div>
<h4>Built-in Travel Insurance</h4>
<p>Every package includes baseline coverage for trip cancellation, medical emergencies, and lost luggage — upgrade for adventure sports.</p>
</div>
<div class="why-card">
<div class="why-icon">💬</div>
<h4>24/7 Concierge Support</h4>
<p>Real human experts on WhatsApp, phone, and email — average response time of 90 seconds, anywhere on the planet.</p>
</div>
<div class="why-card">
<div class="why-icon">🌱</div>
<h4>Carbon-Balanced Travel</h4>
<p>We calculate and offset the CO₂ of every itinerary at no extra cost, partnering with verified reforestation projects.</p>
</div>
<div class="why-card">
<div class="why-icon">🗺️</div>
<h4>Local Expert Guides</h4>
<p>Every destination guide is written by writers living in-country — never recycled content from affiliate farms.</p>
</div>
<div class="why-card">
<div class="why-icon">⚡</div>
<h4>Free Cancellation</h4>
<p>Plans change. Cancel up to 24 hours before departure on most bookings with zero fees — full refund, every time.</p>
</div>
</div>
</div>
</section>
<!-- PACKING GENERATOR -->
<section style="padding-top:0">
<div class="container">
<div class="packer" style="padding:60px 50px">
<div class="packer-wrap">
<div>
<div class="section-eyebrow" style="color:#ffc7a8">Interactive Tool</div>
<h2>Your custom <em>packing list</em><br>in under 30 seconds</h2>
<p class="packer-intro">Stop overpacking — or forgetting essentials. Tell us about your trip and we'll generate a smart, climate-aware packing checklist tailored to your destination, duration, and activities.</p>
<ul class="packer-features">
<li>Climate-adjusted recommendations</li>
<li>Activity-specific gear suggestions</li>
<li>Save & print your checklist</li>
<li>No signup required — completely free</li>
</ul>
</div>
<div class="packer-card">
<h3>Packing List Generator</h3>
<div class="pack-types">
<button class="pack-type" data-type="beach">🏖 Beach</button>
<button class="pack-type active" data-type="city">🏙 City</button>
<button class="pack-type" data-type="mountain">🏔 Mountain</button>
<button class="pack-type" data-type="business">💼 Business</button>
</div>
<div class="pack-field">
<label>Destination climate</label>
<select id="packClimate">
<option>Tropical / Warm</option>
<option selected>Temperate / Mild</option>
<option>Cold / Winter</option>
<option>Variable</option>
</select>
</div>
<div class="pack-field">
<label>Trip length (nights)</label>
<input type="number" id="packDays" value="7" min="1" max="60">
</div>
<button class="pack-go" id="packGenerate">Generate My Packing List →</button>
<div class="pack-result" id="packResult">
<h4>Your Smart Packing List <span id="packCount">0 items</span></h4>
<ul class="pack-list" id="packList"></ul>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- BLOG + SIDEBAR -->
<section id="blog" style="padding-top:60px">
<div class="container">
<div class="section-head">
<div class="section-eyebrow">From the Journal</div>
<h2 class="section-title">Stories, guides & inspiration</h2>
<p class="section-sub">In-depth travel writing from our network of local journalists, plus practical guides tested on the road.</p>
</div>
<div class="content-with-side">
<div class="blog-grid">
<div class="blog-card">
<div class="blog-img">
<img src="https://picsum.photos/600/400?random=41" alt="Lisbon tram">
<span class="blog-cat">GUIDE</span>
</div>
<div class="blog-body">
<div class="blog-meta"><span>10 min read</span><span>Feb 18, 2026</span></div>
<h3 class="blog-title">48 hours in Lisbon: a slow-travel itinerary for first-time visitors</h3>
<p class="blog-excerpt">Skip the crowds and discover the Portuguese capital through its fado bars, azulejo-covered alleys, and pastel de nata pilgrimages — all walkable from a single tram line.</p>
<div class="blog-author"><img src="https://i.pravatar.cc/80?u=sofia" alt="Sofia Marques">By Sofia Marques · Lisbon correspondent</div>
</div>
</div>
<div class="blog-card">
<div class="blog-img">
<img src="https://picsum.photos/600/400?random=42" alt="Travel insurance">
<span class="blog-cat">TIPS</span>
</div>
<div class="blog-body">
<div class="blog-meta"><span>7 min read</span><span>Feb 14, 2026</span></div>
<h3 class="blog-title">Travel insurance decoded: what actually matters in the fine print</h3>
<p class="blog-excerpt">Most travelers overpay for coverage they don't need and skip the clauses that save them. A breakdown of medical, cancellation, and adventure add-ons — with real claim scenarios.</p>
<div class="blog-author"><img src="https://i.pravatar.cc/80?u=marcus" alt="Marcus Chen">By Marcus Chen · Senior editor</div>
</div>
</div>
<div class="blog-card">
<div class="blog-img">
<img src="https://picsum.photos/600/400?random=43" alt="Iceland northern lights">
<span class="blog-cat">DESTINATION</span>
</div>
<div class="blog-body">
<div class="blog-meta"><span>14 min read</span><span>Feb 09, 2026</span></div>
<h3 class="blog-title">Chasing the Northern Lights: Iceland's Ring Road in winter</h3>
<p class="blog-excerpt">A 10-day self-drive itinerary covering the best aurora vantage points, hot springs, and glacier excursions — with practical advice on 4WD rental, road closures, and weather apps.</p>
<div class="blog-author"><img src="https://i.pravatar.cc/80?u=ingrid" alt="Ingrid Sigurdsson">By Ingrid Sigurdsson · Reykjavík correspondent</div>
</div>
</div>
<div class="blog-card">
<div class="blog-img">
<img src="https://picsum.photos/600/400?random=44" alt="Solo travel beach">
<span class="blog-cat">SOLO</span>
</div>
<div class="blog-body">
<div class="blog-meta"><span>9 min read</span><span>Feb 02, 2026</span></div>
<h3 class="blog-title">Solo female travel in Southeast Asia: routes, etiquette, and safety</h3>
<p class="blog-excerpt">A region beloved by solo travelers for good reason. From temple stays in Chiang Mai to scooter tips in Da Nang, here's how to do it confidently and respectfully.</p>
<div class="blog-author"><img src="https://i.pravatar.cc/80?u=amelia" alt="Amelia Tan">By Amelia Tan · Travel writer</div>
</div>
</div>
</div>
<!-- SIDEBAR -->
<aside class="sidebar">
<div class="side-card">
<h4 class="side-title">⚡ Deal Alerts</h4>
<ul class="deal-list">
<li class="deal-item">
<img src="https://picsum.photos/120/120?random=51" alt="" class="deal-img">
<div class="deal-info">
<h5>Roundtrip to Lisbon</h5>
<div class="deal-meta">Mar–May 2026</div>
<div class="deal-price"><s>$890</s> $549</div>
</div>
</li>
<li class="deal-item">
<img src="https://picsum.photos/120/120?random=52" alt="" class="deal-img">
<div class="deal-info">
<h5>Tokyo 7-night package</h5>
<div class="deal-meta">All-inclusive</div>
<div class="deal-price"><s>$2,400</s> $1,799</div>
</div>
</li>
<li class="deal-item">
<img src="https://picsum.photos/120/120?random=53" alt="" class="deal-img">
<div class="deal-info">
<h5>Bali villa week</h5>
<div class="deal-meta">Apr 2026 · 5★</div>
<div class="deal-price"><s>$1,650</s> $1,099</div>
</div>
</li>
</ul>
</div>
<div class="side-card">
<h4 class="side-title">💡 Travel Hacks</h4>
<ul class="hack-list">
<li class="hack-item"><span class="hack-num">1</span><span class="hack-text">Book flights on Tuesday 3pm EST — airlines typically drop fares then.</span></li>
<li class="hack-item"><span class="hack-num">2</span><span class="hack-text">Use incognito mode when searching — sites raise prices on repeat visits.</span></li>
<li class="hack-item"><span class="hack-num">3</span><span class="hack-text">Roll clothes instead of folding — saves 30% suitcase space.</span></li>
<li class="hack-item"><span class="hack-num">4</span><span class="hack-text">Photocopy your passport; email a copy to yourself for emergencies.</span></li>
<li class="hack-item"><span class="hack-num">5</span><span class="hack-text">Free walking tours exist in 90% of major cities — bookended by tipping guides.</span></li>
</ul>
</div>
<div class="side-card" style="padding:0;overflow:hidden;border:1px solid var(--line)">
<img src="https://picsum.photos/600/400?random=60" alt="Patagonia" style="width:100%;height:160px;object-fit:cover">
<div style="padding:20px">
<h4 class="side-title" style="border:none;padding:0;margin-bottom:6px">📍 Destination Spotlight</h4>
<h5 style="font-family:'Playfair Display',serif;font-size:18px;color:var(--ink);margin-bottom:8px">Patagonia, Argentina</h5>
<p style="font-size:13px;color:var(--gray);margin-bottom:14px">Glacial fjords, granite spires, and the legendary W-trek. Our 12-day itinerary covers both Argentine and Chilean sides — with refugio bookings handled for you.</p>
<a href="#" style="font-size:13px;color:var(--coral);font-weight:600">View itinerary →</a>
</div>
</div>
<div class="newsletter-card">
<h4>The Sunday Dispatch</h4>
<p>Hand-picked destinations, flight deals, and travel essays — delivered weekly. Join 87,000 readers.</p>
<input type="email" class="newsletter-input" placeholder="your@email.com">
<button class="newsletter-btn">Subscribe Free</button>
</div>
</aside>
</div>
</div>
</section>
<!-- TESTIMONIALS -->
<section class="testimonials">
<div class="container">
<div class="section-head">
<div class="section-eyebrow">Traveler Stories</div>
<h2 class="section-title">1.2 million trips, countless memories</h2>
<p class="section-sub">Don't take our word for it — here's what our community says after returning home.</p>
</div>
<div class="test-grid">
<div class="test-card">
<div class="test-stars">★★★★★</div>
<p class="test-text">The Wanderly concierge rebooked our connection in Tokyo within minutes when our flight was cancelled. Saved our entire honeymoon. We've used them four times since.</p>
<div class="test-author">
<img src="https://i.pravatar.cc/120?u=priya" alt="Priya & Arjun">
<div><div class="test-name">Priya & Arjun Mehta</div><div class="test-trip">Tokyo & Kyoto · Anniversary trip</div></div>
</div>
</div>
<div class="test-card">
<div class="test-stars">★★★★★</div>
<p class="test-text">I've planned dozens of solo trips over fifteen years. Wanderly's packing list generator alone is worth it — and the price-match guarantee saved me $420 on a Lisbon flight.</p>
<div class="test-author">
<img src="https://i.pravatar.cc/120?u=david" alt="David">
<div><div class="test-name">David Okonkwo</div><div class="test-trip">Lisbon & Porto · Solo getaway</div></div>
</div>
</div>
<div class="test-card">
<div class="test-stars">★★★★★</div>
<p class="test-text">We were nervous about an all-inclusive in Costa Rica with two kids under five. The family-friendly filters were spot-on — the resort matched the photos exactly. The trip insurance paid for itself when one of us needed a clinic visit.</p>
<div class="test-author">
<img src="https://i.pravatar.cc/120?u=jennifer" alt="The Rivera Family">
<div><div class="test-name">The Rivera Family</div><div class="test-trip">Costa Rica · All-inclusive</div></div>
</div>
</div>
</div>
</div>
</section>
<!-- FAQ -->
<section>
<div class="container">
<div class="section-head">
<div class="section-eyebrow">Frequently Asked</div>
<h2 class="section-title">Questions, answered</h2>
<p class="section-sub">Everything you need to know before you book — and what to expect if plans change.</p>
</div>
<div class="faq-wrap">
<details class="faq-item" open>
<summary class="faq-q">How does Wanderly's price-match guarantee actually work?</summary>
<div class="faq-a">If you find the same flight, hotel, or package listed cheaper on a verified competitor site within 24 hours of booking, submit the link through your Wanderly dashboard. Our team verifies the claim — typically within 2 hours during business hours — and refunds the difference back to your original payment method. There are no caps, no blackout dates, and no limit on how many claims you file per trip.</div>
</details>
<details class="faq-item">
<summary class="faq-q">What does the built-in travel insurance actually cover?</summary>
<div class="faq-a">Every Wanderly package automatically includes baseline coverage: trip cancellation up to 100% of cost, emergency medical expenses up to $100,000, emergency evacuation, and lost or delayed baggage compensation. Adventure sports coverage, cancel-for-any-reason upgrades, and "interrupted for work" extensions can be added at checkout for a small additional fee. We partner with World Nomads Group and Allianz to underwrite all policies.</div>
</details>
<details class="faq-item">
<summary class="faq-q">Can I cancel or change my booking after I've paid?</summary>
<div class="faq-a">Yes — free cancellation is available on over 92% of our inventory up to 24 hours before departure. After that window, individual supplier policies apply (clearly shown before you pay). Date changes are subject to availability and any fare difference; our support team can usually re-route you onto a similar itinerary without fees if you give them at least 72 hours' notice.</div>
</details>
<details class="faq-item">
<summary class="faq-q">Do you offer payment plans or financing?</summary>
<div class="faq-a">Yes. For any booking over $500, you can split the cost into 3, 6, or 12 monthly installments at checkout through our partner Affirm — with 0% APR on 3-month plans for qualified travelers. There are no hidden fees, no impact on your credit score to check eligibility, and the booking is confirmed immediately even if you choose to pay over time.</div>
</details>
<details class="faq-item">
<summary class="faq-q">How are your destination guides different from other travel sites?</summary>
<div class="faq-a">Every Wanderly guide is written by a writer who lives in or near the destination — never recycled press releases or AI-generated summaries. Each piece is fact-checked quarterly for hotel closures, price changes, visa updates, and safety conditions. We disclose any commercial relationships at the bottom of every article, and our writers never accept compensation for positive coverage.</div>
</details>
<details class="faq-item">
<summary class="faq-q">Is Wanderly a real booking agency or just a search engine?</summary>
<div class="faq-a">We're a fully licensed travel agency (IATA #23-7-2148, ASTA member) — when you book through us, we're your contractually responsible partner, not just a redirect to a third party. That means if anything goes wrong before, during, or after your trip, our 24/7 support team has the authority to rebook, refund, or escalate on your behalf without passing you back to airlines or hotels.</div>
</details>
</div>
</div>
</section>
<!-- CTA -->
<section style="padding-bottom:100px">
<div class="container">
<div class="cta-banner">
<h2>Ready when you are.</h2>
<p>Tell us where you've been dreaming of — we'll handle the flights, the hotels, the insurance, and the nerves. You focus on the experience.</p>
<a href="#" class="btn btn-primary">Start Planning Your Trip →</a>
</div>
</div>
</section>
<!-- FOOTER -->
<footer>
<div class="container">
<div class="foot-grid">
<div class="foot-brand">
<div class="brand">
<div class="brand-logo">W</div>
<div>
<div class="brand-name">Wander<span>ly</span></div>
<div class="tagline" style="color:#7d959a">Your Journey, Expertly Curated</div>
</div>
</div>
<p>A modern travel agency built for independent minds. Hand-curated guides, fair prices, and 24/7 real-human support — wherever the road takes you.</p>
<div class="foot-social">
<a href="#" aria-label="Instagram">IG</a>
<a href="#" aria-label="TikTok">TT</a>
<a href="#" aria-label="YouTube">YT</a>
<a href="#" aria-label="Pinterest">PI</a>
<a href="#" aria-label="Twitter/X">X</a>
</div>
</div>
<div class="foot-col">
<h5>Explore</h5>
<ul>
<li><a href="#">Destinations</a></li>
<li><a href="#">Flights</a></li>
<li><a href="#">Hotels</a></li>
<li><a href="#">All-inclusive Packages</a></li>
<li><a href="#">Excursions</a></li>
<li><a href="#">Travel Insurance</a></li>
</ul>
</div>
<div class="foot-col">
<h5>Travelers</h5>
<ul>
<li><a href="#">Budget Travel</a></li>
<li><a href="#">Luxury Escapes</a></li>
<li><a href="#">Solo Travel</a></li>
<li><a href="#">Family Adventures</a></li>
<li><a href="#">Group Tours</a></li>
<li><a href="#">Gift Cards</a></li>
</ul>
</div>
<div class="foot-col">
<h5>Company</h5>
<ul>
<li><a href="#">About Us</a></li>
<li><a href="#">Editorial Team</a></li>
<li><a href="#">Careers</a></li>
<li><a href="#">Press Kit</a></li>
<li><a href="#">Sustainability</a></li>
<li><a href="#">Partners</a></li>
</ul>
</div>
<div class="foot-col">
<h5>Contact</h5>
<ul class="foot-contact">
<li data-icon="✉">hello@wanderly.travel</li>
<li data-icon="☎">+1 (415) 555-0142</li>
<li data-icon="⌖">418 Valencia Street<br>San Francisco, CA 94103</li>
<li data-icon="⏰">Support 24/7 · Office Mon–Fri</li>
</ul>
</div>
</div>
<div class="foot-bottom">
<div>© 2026 Wanderly Travel Co. All rights reserved. IATA #23-7-2148 · ASTA #9012743</div>
<div>
<a href="#">Privacy</a>
<a href="#">Terms</a>
<a href="#">Cookies</a>
<a href="#">Sitemap</a>
</div>
<div class="foot-pay">
<span>VISA</span><span>MC</span><span>AMEX</span><span>PAYPAL</span><span>APPLE PAY</span>
</div>
</div>
</div>
</footer>
<script>
// ===== SEARCH TABS =====
document.querySelectorAll('.search-tab').forEach(tab=>{
tab.addEventListener('click',()=>{
document.querySelectorAll('.search-tab').forEach(t=>t.classList.remove('active'));
tab.classList.add('active');
});
});
// ===== PACKING LIST GENERATOR =====
const packItems = {
beach:{
base:['Passport & ID','Phone & charger','Universal adapter','Toothbrush & toothpaste','Deodorant','Daily medications','Sunscreen SPF 50','Insect repellent','Reusable water bottle','Snacks'],
warm:['Swimwear (x2)','Sandals','Beach towel','Sunglasses','Wide-brim hat','Light cover-up','Flip-flops'],
cold:['Light rain jacket','Quick-dry pants','Long-sleeve shirts'],
variable:['Light fleece','Compact umbrella','Layering pieces'],
extras:['Beach bag','Snorkel mask','Waterproof phone pouch','After-sun lotion','Flip-flop socks (for rocky entries)']
},
city:{
base:['Passport & ID','Phone & charger','Universal adapter','Toothbrush & toothpaste','Deodorant','Daily medications','Sunscreen','Reusable water bottle','Day backpack','Comfortable walking shoes'],
warm:['Light linen shirts','Breathable sneakers','Cap or hat','Compact umbrella'],
cold:['Warm coat','Beanie & gloves','Thermal base layers','Waterproof boots'],
variable:['Packable rain shell','Layering sweater','Scarf'],
extras:['Crossbody bag (anti-theft)','Portable power bank','City map or offline maps','Phrasebook','Small umbrella']
},
mountain:{
base:['Passport & ID','Phone & charger','Universal adapter','Toothbrush & toothpaste','Deodorant','Daily medications','High-SPF sunscreen','Headlamp','First-aid kit','Reusable water bottle'],
warm:['Sun hoodie','Trail running shoes','Convertible pants','Cap'],
cold:['Insulated parka','Thermal underwear','Snow boots','Wool socks','Gloves & beanie','Hand warmers'],
variable:['Mid-layer fleece','Shell jacket','Waterproof gloves'],
extras:['Trekking poles','GPS device or offline topo','Altitude sickness meds','Energy bars','Dry bags for electronics']
},
business:{
base:['Passport & ID','Phone & charger','Universal adapter','Toothbrush & toothpaste','Deodorant','Daily medications','Laptop & charger','Business cards','Notebook & pen','Garment bag'],
warm:['Lightweight blazer','Breathable dress shirts','Dress shoes'],
cold:['Wool overcoat','Cashmere scarf','Leather gloves'],
variable:['Packable blazer','Layering pieces'],
extras:['Travel steamer','Portable mouse','Conference badge holder','Luggage scale','Premium headphones']
}
};
document.querySelectorAll('.pack-type').forEach(btn=>{
btn.addEventListener('click',()=>{
document.querySelectorAll('.pack-type').forEach(b=>b.classList.remove('active'));
btn.classList.add('active');
});
});
document.getElementById('packGenerate').addEventListener('click',()=>{
const type = document.querySelector('.pack-type.active').dataset.type;
const climate = document.getElementById('packClimate').selectedIndex;
const climateKey = ['warm','cold','variable'][climate] || 'variable';
const days = parseInt(document.getElementById('packDays').value) || 7;
const items = [
...packItems[type].base,
...packItems[type][climateKey],
...packItems[type].extras
];
// Clothing multiplier
const tops = ['T-shirt','Underwear','Socks'];
const topsNeeded = Math.min(Math.max(days, 4), 10);
for(let i=0;i<topsNeeded;i++) items.push(tops[i%3]+' ('+(i+1)+')');
const list = document.getElementById('packList');
list.innerHTML = '';
items.forEach((item,i)=>{
const li = document.createElement('li');
li.innerHTML = `<input type="checkbox" id="p${i}"><label for="p${i}">${item}</label>`;
list.appendChild(li);
});
document.getElementById('packCount').textContent = items.length + ' items';
const result = document.getElementById('packResult');
result.classList.remove('show');
void result.offsetWidth;
result.classList.add('show');
});
// ===== SMOOTH SCROLL =====
document.querySelectorAll('a[href^="#"]').forEach(a=>{
a.addEventListener('click',e=>{
const id = a.getAttribute('href');
if(id.length>1){
const el = document.querySelector(id);
if(el){e.preventDefault();el.scrollIntoView({behavior:'smooth',block:'start'})}
}
});
});
</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:41:55.135Z",
"url": "https://benchmark.aimac.invalid/1cfe6f1613b0cc72a1078d2442d8483a0b51dbcc914edd549b3a23dd665669b3.html",
"toolOptions": {
"runOnly": {
"type": "tag",
"values": [
"wcag2a",
"wcag2aa",
"wcag21a",
"wcag21aa",
"wcag22a",
"wcag22aa"
]
},
"resultTypes": [
"violations"
],
"reporter": "v1"
},
"inapplicable": [
{
"id": "area-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure <area> elements of image maps have alternative text",
"help": "Active <area> elements must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
"nodes": []
},
{
"id": "aria-braille-equivalent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
"help": "aria-braille attributes must have a non-braille equivalent",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
"nodes": []
},
{
"id": "aria-command-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA button, link and menuitem has an accessible name",
"help": "ARIA commands must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-deprecated-role",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements do not use deprecated roles",
"help": "Deprecated ARIA roles must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
"nodes": []
},
{
"id": "aria-hidden-focus",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
"help": "ARIA hidden element must not be focusable or contain focusable elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
"nodes": []
},
{
"id": "aria-input-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA input field has an accessible name",
"help": "ARIA input fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-meter-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA meter node has an accessible name",
"help": "ARIA meter nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-progressbar-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag111",
"EN-301-549",
"EN-9.1.1.1"
],
"description": "Ensure every ARIA progressbar node has an accessible name",
"help": "ARIA progressbar nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure elements with ARIA roles have all required ARIA attributes",
"help": "Required ARIA attributes must be provided",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-children",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require child roles contain them",
"help": "Certain ARIA roles must contain particular children",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
"nodes": []
},
{
"id": "aria-required-parent",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure elements with an ARIA role that require parent roles are contained by them",
"help": "Certain ARIA roles must be contained by particular parents",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
"nodes": []
},
{
"id": "aria-roles",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure all elements with a role attribute use a valid value",
"help": "ARIA roles used must conform to valid values",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
"nodes": []
},
{
"id": "aria-toggle-field-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"TTv5",
"TT5.c",
"EN-301-549",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure every ARIA toggle field has an accessible name",
"help": "ARIA toggle fields must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
"nodes": []
},
{
"id": "aria-tooltip-name",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure every ARIA tooltip node has an accessible name",
"help": "ARIA tooltip nodes must have an accessible name",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
"nodes": []
},
{
"id": "autocomplete-valid",
"impact": null,
"tags": [
"cat.forms",
"wcag21aa",
"wcag135",
"EN-301-549",
"EN-9.1.3.5",
"ACT"
],
"description": "Ensure the autocomplete attribute is correct and suitable for the form field",
"help": "autocomplete attribute must be used correctly",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
"nodes": []
},
{
"id": "blink",
"impact": null,
"tags": [
"cat.time-and-media",
"wcag2a",
"wcag222",
"section508",
"section508.22.j",
"TTv5",
"TT2.b",
"EN-301-549",
"EN-9.2.2.2"
],
"description": "Ensure <blink> elements are not used",
"help": "<blink> elements are deprecated and must not be used",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
"nodes": []
},
{
"id": "definition-list",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dl> elements are structured correctly",
"help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
"nodes": []
},
{
"id": "dlitem",
"impact": null,
"tags": [
"cat.structure",
"wcag2a",
"wcag131",
"EN-301-549",
"EN-9.1.3.1"
],
"description": "Ensure <dt> and <dd> elements are contained by a <dl>",
"help": "<dt> and <dd> elements must be contained by a <dl>",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
"nodes": []
},
{
"id": "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": "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 href=\"#\" aria-label=\"Instagram\">IG</a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"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 href=\"#\" aria-label=\"Instagram\">IG</a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"id": "aria-hidden-body",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag131",
"wcag412",
"EN-301-549",
"EN-9.1.3.1",
"EN-9.4.1.2"
],
"description": "Ensure aria-hidden=\"true\" is not present on the document body.",
"help": "aria-hidden=\"true\" must not be present on the document body",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "aria-hidden-body",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "No aria-hidden attribute is present on document body"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<body>",
"target": [
"body"
]
}
]
},
{
"id": "aria-prohibited-attr",
"impact": null,
"tags": [
"cat.aria",
"wcag2a",
"wcag412",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure ARIA attributes are not prohibited for an element's role",
"help": "Elements must only use permitted ARIA attributes",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "aria-prohibited-attr",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "ARIA attribute is allowed"
}
],
"impact": null,
"html": "<a href=\"#\" aria-label=\"Instagram\">IG</a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"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 href=\"#\" aria-label=\"Instagram\">IG</a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"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 href=\"#\" aria-label=\"Instagram\">IG</a>",
"target": [
"a[aria-label=\"Instagram\"]"
]
}
]
},
{
"id": "avoid-inline-spacing",
"impact": null,
"tags": [
"cat.structure",
"wcag21aa",
"wcag1412",
"EN-301-549",
"EN-9.1.4.12",
"ACT"
],
"description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
"help": "Inline text spacing must be adjustable with custom stylesheets",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
"nodes": [
{
"any": [],
"all": [
{
"id": "important-letter-spacing",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Letter-spacing in the style attribute is not set to !important, or meets the minimum"
},
{
"id": "important-word-spacing",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "word-spacing in the style attribute is not set to !important, or meets the minimum"
},
{
"id": "important-line-height",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "line-height in the style attribute is not set to !important, or meets the minimum"
}
],
"none": [],
"impact": null,
"html": "<div style=\"text-align:center;margin-top:42px\">\n <a href=\"#\" class=\"btn btn-primary\" style=\"background:var(--teal);\">View All 180+ Destinations \u2192</a>\n </div>",
"target": [
".container > div:nth-child(3)"
]
}
]
},
{
"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=\"search-tab active\" data-tab=\"flights\">\u2708 Flights</button>",
"target": [
"button[data-tab=\"flights\"]"
]
}
]
},
{
"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 class=\"hero-title\">Travel further.<br>Pay <em>smarter</em>.<br>Worry less.</h1>",
"target": [
"h1"
]
},
{
"html": "<h2 class=\"section-title\">Where will this year take you?</h2>",
"target": [
"#destinations > .container > .section-head > .section-title"
]
},
{
"html": "<h3 class=\"dest-name\">Bali, Indonesia</h3>",
"target": [
".dest-card:nth-child(1) > .dest-info > .dest-name"
]
},
{
"html": "<h3 class=\"dest-name\">Santorini, Greece</h3>",
"target": [
".dest-card:nth-child(2) > .dest-info > .dest-name"
]
},
{
"html": "<h3 class=\"dest-name\">Kyoto, Japan</h3>",
"target": [
".dest-card:nth-child(3) > .dest-info > .dest-name"
]
},
{
"html": "<h3 class=\"dest-name\">Marrakech, Morocco</h3>",
"target": [
".dest-card:nth-child(4) > .dest-info > .dest-name"
]
},
{
"html": "<h2 class=\"section-title\">Built for every kind of traveler</h2>",
"target": [
".styles > .container > .section-head > .section-title"
]
},
{
"html": "<h3>Budget Travel</h3>",
"target": [
".style-card:nth-child(1) > h3"
]
},
{
"html": "<h3>Luxury Escapes</h3>",
"target": [
".style-card:nth-child(2) > h3"
]
},
{
"html": "<h3>Solo Travel</h3>",
"target": [
".style-card:nth-child(3) > h3"
]
},
{
"html": "<h3>Family Adventures</h3>",
"target": [
".style-card:nth-child(4) > h3"
]
},
{
"html": "<h2 class=\"section-title\">Travel planning, reimagined</h2>",
"target": [
"section:nth-child(7) > .container > .section-head > .section-title"
]
},
{
"html": "<h4>Price Match Guarantee</h4>",
"target": [
".why-card:nth-child(1) > h4"
]
},
{
"html": "<h4>Built-in Travel Insurance</h4>",
"target": [
".why-card:nth-child(2) > h4"
]
},
{
"html": "<h4>24/7 Concierge Support</h4>",
"target": [
".why-card:nth-child(3) > h4"
]
},
{
"html": "<h4>Carbon-Balanced Travel</h4>",
"target": [
".why-card:nth-child(4) > h4"
]
},
{
"html": "<h4>Local Expert Guides</h4>",
"target": [
".why-card:nth-child(5) > h4"
]
},
{
"html": "<h4>Free Cancellation</h4>",
"target": [
".why-card:nth-child(6) > h4"
]
},
{
"html": "<h2>Your custom <em>packing list</em><br>in under 30 seconds</h2>",
"target": [
".packer-wrap > div:nth-child(1) > h2"
]
},
{
"html": "<h3>Packing List Generator</h3>",
"target": [
".packer-card > h3"
]
},
{
"html": "<h2 class=\"section-title\">Stories, guides & inspiration</h2>",
"target": [
"#blog > .container > .section-head > .section-title"
]
},
{
"html": "<h3 class=\"blog-title\">48 hours in Lisbon: a slow-travel itinerary for first-time visitors</h3>",
"target": [
".blog-card:nth-child(1) > .blog-body > .blog-title"
]
},
{
"html": "<h3 class=\"blog-title\">Travel insurance decoded: what actually matters in the fine print</h3>",
"target": [
".blog-card:nth-child(2) > .blog-body > .blog-title"
]
},
{
"html": "<h3 class=\"blog-title\">Chasing the Northern Lights: Iceland's Ring Road in winter</h3>",
"target": [
".blog-card:nth-child(3) > .blog-body > .blog-title"
]
},
{
"html": "<h3 class=\"blog-title\">Solo female travel in Southeast Asia: routes, etiquette, and safety</h3>",
"target": [
".blog-card:nth-child(4) > .blog-body > .blog-title"
]
},
{
"html": "<h4 class=\"side-title\">\u26a1 Deal Alerts</h4>",
"target": [
".side-card:nth-child(1) > .side-title"
]
},
{
"html": "<h5>Roundtrip to Lisbon</h5>",
"target": [
".deal-item:nth-child(1) > .deal-info > h5"
]
},
{
"html": "<h5>Tokyo 7-night package</h5>",
"target": [
".deal-item:nth-child(2) > .deal-info > h5"
]
},
{
"html": "<h5>Bali villa week</h5>",
"target": [
".deal-item:nth-child(3) > .deal-info > h5"
]
},
{
"html": "<h4 class=\"side-title\">\ud83d\udca1 Travel Hacks</h4>",
"target": [
".side-card:nth-child(2) > .side-title"
]
},
{
"html": "<h4 class=\"side-title\" style=\"border:none;padding:0;margin-bottom:6px\">\ud83d\udccd Destination Spotlight</h4>",
"target": [
".side-card:nth-child(3) > div > .side-title"
]
},
{
"html": "<h5 style=\"font-family:'Playfair Display',serif;font-size:18px;color:var(--ink);margin-bottom:8px\">Patagonia, Argentina</h5>",
"target": [
".side-card:nth-child(3) > div > h5"
]
},
{
"html": "<h4>The Sunday Dispatch</h4>",
"target": [
".newsletter-card > h4"
]
},
{
"html": "<h2 class=\"section-title\">1.2 million trips, countless memories</h2>",
"target": [
".testimonials > .container > .section-head > .section-title"
]
},
{
"html": "<h2 class=\"section-title\">Questions, answered</h2>",
"target": [
"section:nth-child(11) > .container > .section-head > .section-title"
]
},
{
"html": "<h2>Ready when you are.</h2>",
"target": [
".cta-banner > h2"
]
},
{
"html": "<h5>Explore</h5>",
"target": [
".foot-col:nth-child(2) > h5"
]
},
{
"html": "<h5>Travelers</h5>",
"target": [
".foot-col:nth-child(3) > h5"
]
},
{
"html": "<h5>Company</h5>",
"target": [
".foot-col:nth-child(4) > h5"
]
},
{
"html": "<h5>Contact</h5>",
"target": [
".foot-col:nth-child(5) > h5"
]
}
],
"impact": "serious",
"message": "Page has a heading"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#d9e7e9",
"bgColor": "#083640",
"contrastRatio": 10.27,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [],
"impact": "serious",
"message": "Element has sufficient color contrast of 10.27"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<span><i>\u2709</i> hello@wanderly.travel</span>",
"target": [
".topbar-left > 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": "<input type=\"text\" placeholder=\"San Francisco (SFO)\" value=\"San Francisco (SFO)\">",
"target": [
"input[placeholder=\"San Francisco (SFO)\"]"
]
}
]
},
{
"id": "html-has-lang",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure every HTML document has a lang attribute",
"help": "<html> element must have a lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "The <html> element has a lang attribute"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "html-lang-valid",
"impact": null,
"tags": [
"cat.language",
"wcag2a",
"wcag311",
"TTv5",
"TT11.a",
"EN-301-549",
"EN-9.3.1.1",
"ACT"
],
"description": "Ensure the lang attribute of the <html> element has a valid value",
"help": "<html> element must have a valid value for the lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
"nodes": [
{
"any": [],
"all": [],
"none": [
{
"id": "valid-lang",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Value of lang attribute is included in the list of valid languages"
}
],
"impact": null,
"html": "<html lang=\"en\">",
"target": [
"html"
]
}
]
},
{
"id": "image-alt",
"impact": null,
"tags": [
"cat.text-alternatives",
"wcag2a",
"wcag111",
"section508",
"section508.22.a",
"TTv5",
"TT7.a",
"TT7.b",
"EN-301-549",
"EN-9.1.1.1",
"ACT"
],
"description": "Ensure <img> elements have alternative text or a role of none or presentation",
"help": "Images must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-alt",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has an alt attribute"
}
],
"all": [],
"none": [
{
"id": "alt-space-value",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "Element has a valid alt attribute value"
}
],
"impact": null,
"html": "<img src=\"https://picsum.photos/600/400?random=31\" alt=\"Bali rice terraces\">",
"target": [
"img[alt=\"Bali rice terraces\"]"
]
}
]
},
{
"id": "label",
"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 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=\"text\" placeholder=\"San Francisco (SFO)\" value=\"San Francisco (SFO)\">",
"target": [
"input[placeholder=\"San Francisco (SFO)\"]"
]
}
]
},
{
"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=\"dest-info\">",
"target": [
".dest-card:nth-child(1) > .dest-info"
]
}
],
"impact": "serious",
"message": "Links can be distinguished from surrounding text by visual styling"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<a href=\"#\" class=\"dest-link\">Explore Destination</a>",
"target": [
".dest-card:nth-child(1) > .dest-info > .dest-link[href=\"#\"]"
]
}
]
},
{
"id": "link-name",
"impact": null,
"tags": [
"cat.name-role-value",
"wcag2a",
"wcag244",
"wcag412",
"section508",
"section508.22.a",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.2.4.4",
"EN-9.4.1.2",
"ACT"
],
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "has-visible-text",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element has text that is visible to screen readers"
}
],
"all": [],
"none": [
{
"id": "focusable-no-name",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element is not in tab order or has accessible text"
}
],
"impact": null,
"html": "<a href=\"#\">USD $</a>",
"target": [
".topbar-right > a[href=\"#\"]:nth-child(1)"
]
}
]
},
{
"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 class=\"nav-links\">",
"target": [
".nav-links"
]
}
]
},
{
"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=\"#\" class=\"active\">Home</a></li>",
"target": [
".nav-links > li:nth-child(1)"
]
}
]
},
{
"id": "meta-viewport",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag2aa",
"wcag144",
"EN-301-549",
"EN-9.1.4.4",
"ACT"
],
"description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
"help": "Zooming and scaling must not be disabled",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "meta-viewport",
"data": null,
"relatedNodes": [],
"impact": "critical",
"message": "<meta> tag does not disable zooming on mobile devices"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
"target": [
"meta[name=\"viewport\"]"
]
}
]
},
{
"id": "nested-interactive",
"impact": null,
"tags": [
"cat.keyboard",
"wcag2a",
"wcag412",
"TTv5",
"TT6.a",
"EN-301-549",
"EN-9.4.1.2"
],
"description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
"help": "Interactive controls must not be nested",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "no-focusable-content",
"data": null,
"relatedNodes": [],
"impact": "serious",
"message": "Element does not have focusable descendants"
}
],
"all": [],
"none": [],
"impact": null,
"html": "<button class=\"search-tab active\" data-tab=\"flights\">\u2708 Flights</button>",
"target": [
"button[data-tab=\"flights\"]"
]
}
]
},
{
"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 class=\"faq-q\">How does Wanderly's price-match guarantee actually work?</summary>",
"target": [
"details[open=\"\"] > summary"
]
}
]
},
{
"id": "target-size",
"impact": null,
"tags": [
"cat.sensory-and-visual-cues",
"wcag22aa",
"wcag258"
],
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "target-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=\"#\">USD $</a>",
"target": [
".topbar-right > a[href=\"#\"]:nth-child(1)"
]
}
]
}
],
"incomplete": [
{
"id": "color-contrast",
"impact": "serious",
"tags": [
"cat.color",
"wcag2aa",
"wcag143",
"TTv5",
"TT13.c",
"EN-301-549",
"EN-9.1.4.3",
"ACT"
],
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": null,
"bgColor": null,
"contrastRatio": 0,
"fontSize": "16.5pt (22px)",
"fontWeight": "bold",
"messageKey": "shortTextContent",
"expectedContrastRatio": "3:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"brand-logo\">W</div>",
"target": [
"nav > .brand > .brand-logo"
]
}
],
"impact": "serious",
"message": "Element content is too short to determine if it is actual text content"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"brand-logo\">W</div>",
"target": [
"nav > .brand > .brand-logo"
],
"failureSummary": "Fix any of the following:\n Element content is too short to determine if it is actual text content"
}
]
}
],
"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": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "18.0pt (24px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "3:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<header class=\"main\">",
"target": [
"header"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 18.0pt (24px), font weight: bold). Expected contrast ratio of 3:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>ly</span>",
"target": [
"nav > .brand > div:nth-child(2) > .brand-name > span"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 18.0pt (24px), font weight: bold). Expected contrast ratio of 3:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#e87a5d",
"contrastRatio": 2.84,
"fontSize": "10.5pt (14px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#\" class=\"nav-cta\">Find Deals</a>",
"target": [
".nav-cta"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"nav-cta\">Find Deals</a>",
"target": [
".nav-cta"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#e87a5d",
"contrastRatio": 2.84,
"fontSize": "11.3pt (15px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<a href=\"#destinations\" class=\"btn btn-primary\">Explore Destinations \u2192</a>",
"target": [
".btn-primary.btn[href$=\"#destinations\"]"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 11.3pt (15px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#destinations\" class=\"btn btn-primary\">Explore Destinations \u2192</a>",
"target": [
".btn-primary.btn[href$=\"#destinations\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 11.3pt (15px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#558086",
"bgColor": "#ffffff",
"contrastRatio": 4.35,
"fontSize": "15.0pt (20px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-strip\">",
"target": [
".trust-strip"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Forbes Travel</span>",
"target": [
".trust-logos > span:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#558086",
"bgColor": "#ffffff",
"contrastRatio": 4.35,
"fontSize": "15.0pt (20px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-strip\">",
"target": [
".trust-strip"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Cond\u00e9 Nast</span>",
"target": [
".trust-logos > span:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#558086",
"bgColor": "#ffffff",
"contrastRatio": 4.35,
"fontSize": "15.0pt (20px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-strip\">",
"target": [
".trust-strip"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>Travel + Leisure</span>",
"target": [
".trust-logos > span:nth-child(3)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#558086",
"bgColor": "#ffffff",
"contrastRatio": 4.35,
"fontSize": "15.0pt (20px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-strip\">",
"target": [
".trust-strip"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>National Geographic</span>",
"target": [
".trust-logos > span:nth-child(4)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#558086",
"bgColor": "#ffffff",
"contrastRatio": 4.35,
"fontSize": "15.0pt (20px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"trust-strip\">",
"target": [
".trust-strip"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>The New York Times</span>",
"target": [
".trust-logos > span:nth-child(5)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.35 (foreground color: #558086, background color: #ffffff, font size: 15.0pt (20px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#faf6f0",
"contrastRatio": 2.64,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.64 (foreground color: #e87a5d, background color: #faf6f0, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-eyebrow\">Trending Destinations</div>",
"target": [
"#destinations > .container > .section-head > .section-eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.64 (foreground color: #e87a5d, background color: #faf6f0, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#e87a5d",
"contrastRatio": 2.84,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"dest-badge deal\">20% OFF</span>",
"target": [
".dest-card:nth-child(1) > .dest-img > .deal.dest-badge"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"dest-badge deal\">20% OFF</span>",
"target": [
".dest-card:nth-child(1) > .dest-img > .deal.dest-badge"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"dest-card\">",
"target": [
".dest-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"dest-link\">Explore Destination</a>",
"target": [
".dest-card:nth-child(1) > .dest-info > .dest-link[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"dest-card\">",
"target": [
".dest-card:nth-child(2)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"dest-link\">Explore Destination</a>",
"target": [
".dest-card:nth-child(2) > .dest-info > .dest-link[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#e87a5d",
"contrastRatio": 2.84,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"dest-badge deal\">Best Seller</span>",
"target": [
".dest-card:nth-child(3) > .dest-img > .deal.dest-badge"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"dest-badge deal\">Best Seller</span>",
"target": [
".dest-card:nth-child(3) > .dest-img > .deal.dest-badge"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"dest-card\">",
"target": [
".dest-card:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"dest-link\">Explore Destination</a>",
"target": [
".dest-card:nth-child(3) > .dest-info > .dest-link[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"dest-card\">",
"target": [
".dest-card:nth-child(4)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" class=\"dest-link\">Explore Destination</a>",
"target": [
".dest-card:nth-child(4) > .dest-info > .dest-link[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#faf6f0",
"contrastRatio": 2.64,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.64 (foreground color: #e87a5d, background color: #faf6f0, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-eyebrow\">Why Wanderly</div>",
"target": [
"section:nth-child(7) > .container > .section-head > .section-eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.64 (foreground color: #e87a5d, background color: #faf6f0, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#faf6f0",
"contrastRatio": 2.64,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.64 (foreground color: #e87a5d, background color: #faf6f0, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-eyebrow\">From the Journal</div>",
"target": [
"#blog > .container > .section-head > .section-eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.64 (foreground color: #e87a5d, background color: #faf6f0, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#e87a5d",
"contrastRatio": 2.84,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"blog-cat\">GUIDE</span>",
"target": [
".blog-card:nth-child(1) > .blog-img > .blog-cat"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"blog-cat\">GUIDE</span>",
"target": [
".blog-card:nth-child(1) > .blog-img > .blog-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#e87a5d",
"contrastRatio": 2.84,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"blog-cat\">TIPS</span>",
"target": [
".blog-card:nth-child(2) > .blog-img > .blog-cat"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"blog-cat\">TIPS</span>",
"target": [
".blog-card:nth-child(2) > .blog-img > .blog-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#e87a5d",
"contrastRatio": 2.84,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"blog-cat\">DESTINATION</span>",
"target": [
".blog-card:nth-child(3) > .blog-img > .blog-cat"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"blog-cat\">DESTINATION</span>",
"target": [
".blog-card:nth-child(3) > .blog-img > .blog-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#ffffff",
"bgColor": "#e87a5d",
"contrastRatio": 2.84,
"fontSize": "8.3pt (11px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span class=\"blog-cat\">SOLO</span>",
"target": [
".blog-card:nth-child(4) > .blog-img > .blog-cat"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span class=\"blog-cat\">SOLO</span>",
"target": [
".blog-card:nth-child(4) > .blog-img > .blog-cat"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #ffffff, background color: #e87a5d, font size: 8.3pt (11px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "10.5pt (14px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 10.5pt (14px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"deal-price\"><s>$890</s> $549</div>",
"target": [
".deal-item:nth-child(1) > .deal-info > .deal-price"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 10.5pt (14px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#9aa1a3",
"bgColor": "#ffffff",
"contrastRatio": 2.62,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.62 (foreground color: #9aa1a3, background color: #ffffff, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<s>$890</s>",
"target": [
".deal-item:nth-child(1) > .deal-info > .deal-price > s"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.62 (foreground color: #9aa1a3, background color: #ffffff, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "10.5pt (14px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 10.5pt (14px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"deal-price\"><s>$2,400</s> $1,799</div>",
"target": [
".deal-item:nth-child(2) > .deal-info > .deal-price"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 10.5pt (14px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#9aa1a3",
"bgColor": "#ffffff",
"contrastRatio": 2.62,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.62 (foreground color: #9aa1a3, background color: #ffffff, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<s>$2,400</s>",
"target": [
".deal-item:nth-child(2) > .deal-info > .deal-price > s"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.62 (foreground color: #9aa1a3, background color: #ffffff, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "10.5pt (14px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 10.5pt (14px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"deal-price\"><s>$1,650</s> $1,099</div>",
"target": [
".deal-item:nth-child(3) > .deal-info > .deal-price"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 10.5pt (14px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#9aa1a3",
"bgColor": "#ffffff",
"contrastRatio": 2.62,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\">",
"target": [
".side-card:nth-child(1)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.62 (foreground color: #9aa1a3, background color: #ffffff, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<s>$1,650</s>",
"target": [
".deal-item:nth-child(3) > .deal-info > .deal-price > s"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.62 (foreground color: #9aa1a3, background color: #ffffff, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<div class=\"side-card\" style=\"padding:0;overflow:hidden;border:1px solid var(--line)\">",
"target": [
".side-card:nth-child(3)"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\" style=\"font-size:13px;color:var(--coral);font-weight:600\">View itinerary \u2192</a>",
"target": [
".side-card:nth-child(3) > div > a[href=\"#\"]"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#ffffff",
"contrastRatio": 2.84,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<section class=\"testimonials\">",
"target": [
".testimonials"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-eyebrow\">Traveler Stories</div>",
"target": [
".testimonials > .container > .section-head > .section-eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.84 (foreground color: #e87a5d, background color: #ffffff, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#e87a5d",
"bgColor": "#faf6f0",
"contrastRatio": 2.64,
"fontSize": "9.0pt (12px)",
"fontWeight": "bold",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<body>",
"target": [
"body"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 2.64 (foreground color: #e87a5d, background color: #faf6f0, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"section-eyebrow\">Frequently Asked</div>",
"target": [
"section:nth-child(11) > .container > .section-head > .section-eyebrow"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.64 (foreground color: #e87a5d, background color: #faf6f0, font size: 9.0pt (12px), font weight: bold). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#083640",
"contrastRatio": 4.11,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div class=\"tagline\" style=\"color:#7d959a\">Your Journey, Expertly Curated</div>",
"target": [
".foot-brand > .brand > div:nth-child(2) > .tagline"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#083640",
"contrastRatio": 4.11,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<div>\u00a9 2026 Wanderly Travel Co. All rights reserved. IATA #23-7-2148 \u00b7 ASTA #9012743</div>",
"target": [
".foot-bottom > div:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#083640",
"contrastRatio": 4.11,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\">Privacy</a>",
"target": [
".foot-bottom > div:nth-child(2) > a[href=\"#\"]:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#083640",
"contrastRatio": 4.11,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\">Terms</a>",
"target": [
".foot-bottom > div:nth-child(2) > a[href=\"#\"]:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#083640",
"contrastRatio": 4.11,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\">Cookies</a>",
"target": [
".foot-bottom > div:nth-child(2) > a[href=\"#\"]:nth-child(3)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#083640",
"contrastRatio": 4.11,
"fontSize": "9.8pt (13px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<a href=\"#\">Sitemap</a>",
"target": [
".foot-bottom > div:nth-child(2) > a[href=\"#\"]:nth-child(4)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.11 (foreground color: #7d959a, background color: #083640, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#14404a",
"contrastRatio": 3.56,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>VISA</span>",
"target": [
".foot-pay > span:nth-child(1)"
]
},
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>VISA</span>",
"target": [
".foot-pay > span:nth-child(1)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#14404a",
"contrastRatio": 3.56,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>MC</span>",
"target": [
".foot-pay > span:nth-child(2)"
]
},
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>MC</span>",
"target": [
".foot-pay > span:nth-child(2)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#14404a",
"contrastRatio": 3.56,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>AMEX</span>",
"target": [
".foot-pay > span:nth-child(3)"
]
},
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>AMEX</span>",
"target": [
".foot-pay > span:nth-child(3)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#14404a",
"contrastRatio": 3.56,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>PAYPAL</span>",
"target": [
".foot-pay > span:nth-child(4)"
]
},
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>PAYPAL</span>",
"target": [
".foot-pay > span:nth-child(4)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"any": [
{
"id": "color-contrast",
"data": {
"fgColor": "#7d959a",
"bgColor": "#14404a",
"contrastRatio": 3.56,
"fontSize": "8.3pt (11px)",
"fontWeight": "normal",
"messageKey": null,
"expectedContrastRatio": "4.5:1",
"shadowColor": null
},
"relatedNodes": [
{
"html": "<span>APPLE PAY</span>",
"target": [
".foot-pay > span:nth-child(5)"
]
},
{
"html": "<footer>",
"target": [
"footer"
]
}
],
"impact": "serious",
"message": "Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
],
"all": [],
"none": [],
"impact": "serious",
"html": "<span>APPLE PAY</span>",
"target": [
".foot-pay > span:nth-child(5)"
],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.56 (foreground color: #7d959a, background color: #14404a, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
},
{
"id": "label",
"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 every form element has a label",
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
"nodes": [
{
"any": [
{
"id": "implicit-label",
"data": 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": "non-empty-placeholder",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no placeholder 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": "<input type=\"date\" value=\"2026-03-12\">",
"target": [
"input[value=\"2026-03-12\"]"
],
"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 has no placeholder attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"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": "non-empty-placeholder",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no placeholder 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": "<input type=\"date\" value=\"2026-03-22\">",
"target": [
"input[value=\"2026-03-22\"]"
],
"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 has no placeholder attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
},
{
"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": "non-empty-placeholder",
"data": {
"messageKey": "noAttr"
},
"relatedNodes": [],
"impact": "critical",
"message": "Element has no placeholder 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": "<input type=\"number\" id=\"packDays\" value=\"7\" min=\"1\" max=\"60\">",
"target": [
"#packDays"
],
"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 has no placeholder attribute\n Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
}
]
},
{
"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><option>1 Adult</option><option selected=\"\">2 Adults</option><option>2 Adults, 1 Child</option><option>Family of 4</option></select>",
"target": [
".field:nth-child(1) > select"
],
"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\""
},
{
"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><option>Economy</option><option selected=\"\">Premium Economy</option><option>Business</option><option>First</option></select>",
"target": [
".field:nth-child(2) > select"
],
"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\""
},
{
"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=\"packClimate\">\n <option>Tropical / Warm</option>\n <option selected=\"\">Temperate / Mild</option>\n <option>Cold / Winter</option>\n <option>Variable</option>\n </select>",
"target": [
"#packClimate"
],
"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": 9111
},
{
"y": 576,
"height": 9111
},
{
"y": 1152,
"height": 9111
},
{
"y": 1728,
"height": 9111
},
{
"y": 2304,
"height": 9111
},
{
"y": 2880,
"height": 9111
},
{
"y": 3456,
"height": 9111
},
{
"y": 4032,
"height": 9111
},
{
"y": 4608,
"height": 9111
},
{
"y": 5184,
"height": 9111
},
{
"y": 5760,
"height": 9111
},
{
"y": 6336,
"height": 9111
},
{
"y": 6912,
"height": 9111
},
{
"y": 7488,
"height": 9111
},
{
"y": 8064,
"height": 9111
},
{
"y": 8391,
"height": 9111
}
],
"scans": 17,
"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 "Travel" 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: "Travel"
- Description: Travel guides, destinations, booking resources, and tourism tips.
**Your Creative Task:**
1. **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Travel" 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", "Flights", "About".
- **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
- Address key topics relevant to the "Travel" category. Consider themes similar to: "Budget Travel", "Luxury Escapes", "Solo Travel".
- **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "all-inclusive", "travel insurance", "excursion".
- **Visuals:** Integrate relevant placeholder images logically within the content sections.
- **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Compare Prices", "Find Deals", "Explore Destination".
- **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Travel" sector. Ideas similar but not limited to: "packing list generator".
- **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "travel hacks", "destination spotlights", "deal alerts".
- **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.