Meta Muse Spark 1.3 – Travel

via Meta · Generated

  • AIMAC Debt 25.51
  • Cost $0.08
  • Total Violations 31
  • HTML Size 57 KB
  • Em Dashes 26

Screenshot

View Meta Muse Spark 1.3 Travel page View Live Page

Accessibility Issues Found

8 Critical 23 Serious

  • color-contrast serious 23 instances

    Elements must meet minimum color contrast ratio thresholds

    Example HTML <a href="#deals" class="btn btn-primary nav-cta">Book Adventure <i class="fa-solid fa-arrow-right"></i></a>
  • label critical 1 instance

    Form elements must have labels

    Example HTML <input type="range" id="dailyRange" min="45" max="280" value="110">
  • select-name critical 7 instances

    Select element must have an accessible name

    Example HTML <select id="destSelect"><option>Kyoto, Japan</option><option>Santorini, Greece</option><option>Marrakech, Morocco</option><option>Bali, Indonesia</...

Artifacts

View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Roamora — Guides, Flights & Journeys Worth Taking</title>
<meta name="description" content="Roamora is your trusted travel companion: expert destination guides, vetted flight deals, solo travel resources, and custom itineraries.">
<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=Fraunces:opsz,ital,wght@9..144,0,600;9..144,1,600&family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
<style>
:root{
  --ink:#0d2228;
  --teal:#0e4a53;
  --teal-dark:#083239;
  --sand:#faf6ef;
  --sand-2:#f2e9d8;
  --coral:#ff5a5f;
  --coral-dark:#e14a4f;
  --sun:#ffb400;
  --mint:#c7f0d6;
  --sky:#d9eef2;
  --muted:#5b7378;
  --line:#e5ddd0;
  --card:#ffffff;
  --radius:20px;
  --shadow:0 20px 50px rgba(8,50,57,.12);
  --shadow-sm:0 8px 24px rgba(8,50,57,.10);
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:'Plus Jakarta Sans',system-ui,sans-serif;color:var(--ink);background:var(--sand);line-height:1.65;overflow-x:hidden}
h1,h2,h3,.serif{font-family:'Fraunces',serif;line-height:1.1;letter-spacing:-.02em}
img{display:block;max-width:100%}
a{text-decoration:none;color:inherit}
.container{max-width:1200px;margin:0 auto;padding:0 24px}
.eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--teal);background:#fff;border:1px solid var(--line);padding:8px 14px;border-radius:100px}
.eyebrow i{color:var(--coral)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;font-weight:800;border-radius:100px;padding:15px 26px;font-size:15px;transition:.25s;border:2px solid transparent;cursor:pointer}
.btn-primary{background:var(--coral);color:#fff}
.btn-primary:hover{background:var(--coral-dark);transform:translateY(-2px);box-shadow:0 12px 24px rgba(255,90,95,.35)}
.btn-dark{background:var(--ink);color:#fff}
.btn-dark:hover{background:var(--teal-dark)}
.btn-ghost{background:#fff;border-color:var(--line);color:var(--ink)}
.btn-ghost:hover{border-color:var(--ink)}
.btn-light{background:#fff;color:var(--ink)}
/* utility bar */
.topbar{background:var(--ink);color:#d8e8ea;font-size:13px}
.topbar-inner{display:flex;justify-content:space-between;align-items:center;padding:9px 24px;max-width:1200px;margin:0 auto;gap:16px}
.topbar a{color:#fff;font-weight:700;text-decoration:underline}
/* header */
header{position:sticky;top:0;z-index:50;background:rgba(250,246,239,.92);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
.nav-wrap{max-width:1200px;margin:0 auto;padding:14px 24px;display:flex;align-items:center;gap:20px}
.brand{display:flex;align-items:center;gap:12px}
.brand img{width:52px;height:52px;border-radius:14px;object-fit:cover}
.brand-text strong{font-family:'Fraunces',serif;font-size:24px;letter-spacing:-.02em;display:block;line-height:1}
.brand-text span{font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
nav.main{display:flex;gap:4px;margin-left:auto}
nav.main a{font-weight:700;font-size:14.5px;padding:10px 14px;border-radius:100px;color:#2b4449}
nav.main a:hover,nav.main a.active{background:var(--ink);color:#fff}
.nav-cta{margin-left:8px}
.hamburger{display:none;margin-left:auto;background:var(--ink);color:#fff;border:0;width:46px;height:46px;border-radius:12px;font-size:20px}
/* hero */
.hero{position:relative;background:var(--teal-dark);color:#fff;overflow:hidden}
.hero-bg{position:absolute;inset:0}
.hero-bg img{width:100%;height:100%;object-fit:cover;opacity:.55}
.hero-bg:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg, rgba(8,50,57,.92) 20%, rgba(8,50,57,.55) 55%, rgba(8,50,57,.15) 100%), linear-gradient(0deg, rgba(8,50,57,.7), transparent 60%)}
.hero-inner{position:relative;z-index:2;max-width:1200px;margin:0 auto;padding:70px 24px 36px;display:grid;grid-template-columns:1.05fr .95fr;gap:40px;align-items:center}
.hero h1{font-size:clamp(42px,5.2vw,68px);color:#fff}
.hero h1 em{font-style:italic;color:var(--sun);font-weight:600}
.hero p.lead{margin:18px 0 22px;color:#e6f1f2;font-size:18px;max-width:560px}
.hero-badges{display:flex;gap:12px;flex-wrap:wrap;margin:20px 0}
.hero-badges div{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);backdrop-filter:blur(8px);border-radius:14px;padding:10px 14px;font-size:13px;font-weight:700}
.hero-badges div span{display:block;font-size:22px}
.search-card{background:#fff;color:var(--ink);border-radius:24px;padding:22px;box-shadow:var(--shadow)}
.search-card h3{font-size:22px;margin-bottom:4px}
.search-card>p{font-size:14px;color:var(--muted);margin-bottom:16px}
.search-tabs{display:flex;background:#f3ece0;border-radius:100px;padding:4px;margin-bottom:16px}
.search-tabs button{flex:1;border:0;background:transparent;padding:10px;border-radius:100px;font-weight:800;font-size:13px;cursor:pointer;color:var(--muted)}
.search-tabs button.active{background:var(--ink);color:#fff}
.search-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.field{background:#faf6ef;border:1px solid var(--line);border-radius:14px;padding:10px 12px}
.field label{font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);display:block}
.field select,.field input{width:100%;border:0;background:transparent;font-weight:700;font-size:15px;font-family:inherit;color:var(--ink);outline:none}
.search-foot{display:flex;gap:10px;margin-top:14px}
.search-foot .btn{flex:1}
.trust{display:flex;gap:18px;align-items:center;margin-top:18px;font-size:13px;color:#cde0e2}
.avatars{display:flex}
.avatars img{width:34px;height:34px;border-radius:50%;border:2px solid #fff;margin-left:-10px}
.avatars img:first-child{margin:0}
.hero-stats{position:relative;z-index:2;max-width:1200px;margin:0 auto;padding:0 24px 46px;display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.hero-stats div{background:#fff;border-radius:18px;padding:16px 18px;display:flex;gap:12px;align-items:center}
.hero-stats strong{font-size:22px;display:block;line-height:1}
.hero-stats small{color:var(--muted);font-weight:600}
.icon-dot{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;font-size:18px;flex-shrink:0}
/* press */
.press{background:#fff;border-bottom:1px solid var(--line)}
.press-inner{max-width:1200px;margin:0 auto;padding:16px 24px;display:flex;justify-content:space-between;align-items:center;gap:18px;flex-wrap:wrap;font-size:13px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#8a9ca0}
/* sections */
section{padding:84px 0}
.section-head{max-width:760px;margin-bottom:36px}
.section-head h2{font-size:clamp(30px,3.6vw,46px);margin:14px 0 14px}
.section-head p{color:var(--muted);font-size:17px}
.split{display:grid;grid-template-columns:1fr 1fr;gap:36px;align-items:start}
/* destinations */
.dest-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.dest-card{background:var(--card);border-radius:var(--radius);overflow:hidden;border:1px solid var(--line);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;transition:.25s}
.dest-card:hover{transform:translateY(-6px);box-shadow:var(--shadow)}
.dest-card .img-wrap{position:relative;height:230px;overflow:hidden}
.dest-card .img-wrap img{width:100%;height:100%;object-fit:cover;transition:.6s}
.dest-card:hover .img-wrap img{transform:scale(1.06)}
.price-tag{position:absolute;top:14px;left:14px;background:#fff;border-radius:100px;padding:7px 12px;font-weight:800;font-size:13px}
.wish{position:absolute;top:14px;right:14px;width:38px;height:38px;border-radius:50%;border:0;background:rgba(255,255,255,.9);cursor:pointer;font-size:16px}
.tag-row{position:absolute;bottom:12px;left:14px;display:flex;gap:8px}
.tag-row span{background:rgba(13,34,40,.85);color:#fff;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;padding:6px 10px;border-radius:100px;backdrop-filter:blur(6px)}
.dest-body{padding:20px 20px 22px}
.dest-body h3{font-size:22px;margin-bottom:6px}
.meta{display:flex;gap:12px;font-size:13px;font-weight:700;color:var(--muted);margin-bottom:12px}
.meta i{color:var(--sun)}
.dest-body p{font-size:14.5px;color:#425d62;margin-bottom:16px}
.card-foot{display:flex;justify-content:space-between;align-items:center;margin-top:auto;border-top:1px dashed var(--line);padding-top:16px}
.card-foot strong{font-size:18px}
.card-foot small{display:block;font-size:12px;color:var(--muted);font-weight:600}
.link-arrow{font-weight:800;color:var(--teal);font-size:14px}
/* experiences */
.exp-section{background:var(--ink);color:#e8f1f2;border-radius:32px;margin:0 16px;overflow:hidden}
.exp-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:0}
.exp-media{position:relative;min-height:560px}
.exp-media img.main{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.exp-float{position:absolute;left:24px;right:24px;bottom:24px;background:#fff;color:var(--ink);border-radius:18px;padding:18px;display:flex;gap:14px;align-items:center}
.exp-content{padding:56px 48px}
.exp-content h2{color:#fff;font-size:clamp(30px,3.4vw,44px);margin:14px 0}
.exp-content>p{color:#b9cfd2}
.feature-list{margin:26px 0;display:grid;gap:14px}
.feature-list li{list-style:none;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);border-radius:16px;padding:16px;display:flex;gap:14px}
.feature-list li i{width:42px;height:42px;border-radius:12px;background:var(--sun);color:var(--ink);display:grid;place-items:center;flex-shrink:0}
.timeline{margin-top:18px;border-left:2px dashed rgba(255,255,255,.25);padding-left:20px;display:grid;gap:16px}
.timeline div{position:relative}
.timeline div:before{content:"";position:absolute;left:-29px;top:6px;width:14px;height:14px;border-radius:50%;background:var(--coral);border:3px solid #fff}
.timeline strong{color:#fff}
.timeline p{font-size:14px;color:#b9cfd2}
/* deals */
.deals-head{display:flex;justify-content:space-between;align-items:end;gap:20px;flex-wrap:wrap;margin-bottom:26px}
.filter-pills{display:flex;gap:10px;flex-wrap:wrap}
.filter-pills button{border:1px solid var(--line);background:#fff;padding:10px 18px;border-radius:100px;font-weight:800;font-size:14px;cursor:pointer}
.filter-pills button.active{background:var(--ink);color:#fff;border-color:var(--ink)}
.deal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.deal-card{background:#fff;border:1px solid var(--line);border-radius:20px;overflow:hidden;display:flex;flex-direction:column}
.deal-card img{height:180px;width:100%;object-fit:cover}
.deal-body{padding:20px}
.deal-body h3{font-size:19px}
.deal-route{display:flex;align-items:center;gap:10px;font-weight:800;margin:10px 0;font-size:14px}
.deal-route span.dot{width:8px;height:8px;border-radius:50%;background:var(--coral)}
.deal-meta{display:flex;justify-content:space-between;font-size:13px;color:var(--muted);font-weight:600;background:var(--sand);border-radius:12px;padding:10px 12px;margin:12px 0}
.deal-price{display:flex;justify-content:space-between;align-items:center}
.deal-price strong{font-size:26px}
.deal-price s{color:#9aaeB2;font-size:14px}
/* compare tool */
.tool-wrap{background:#fff;border:1px solid var(--line);border-radius:28px;box-shadow:var(--shadow);overflow:hidden}
.tool-top{background:var(--teal);color:#fff;padding:28px 32px;display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap}
.tool-top h3{font-size:26px}
.tool-controls{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;padding:24px 32px;background:var(--sand-2);border-bottom:1px solid var(--line)}
.tool-controls .field{background:#fff}
.compare-grid{display:grid;grid-template-columns:1fr 1fr;gap:0}
.compare-col{padding:28px 32px}
.compare-col:first-child{border-right:1px solid var(--line)}
.compare-col img{height:220px;width:100%;object-fit:cover;border-radius:18px;margin-bottom:18px}
.compare-table{width:100%;border-collapse:collapse;font-size:14.5px;margin-top:14px}
.compare-table th,.compare-table td{text-align:left;padding:12px;border-bottom:1px solid var(--line)}
.compare-table th{width:38%;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.08em}
.budget-box{display:grid;grid-template-columns:1.2fr .8fr;gap:24px;padding:28px 32px;align-items:center}
input[type=range]{width:100%;accent-color:var(--coral);height:6px}
.budget-output{background:var(--ink);color:#fff;border-radius:18px;padding:22px}
/* layout with sidebar */
.two-col{display:grid;grid-template-columns:1fr 360px;gap:28px;align-items:start}
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:28px}
.step{background:#fff;border:1px solid var(--line);border-radius:18px;padding:22px}
.step span.num{font-family:'Fraunces',serif;font-size:40px;color:var(--coral);font-style:italic}
.sidebar{display:grid;gap:18px;position:sticky;top:96px}
.side-card{background:#fff;border:1px solid var(--line);border-radius:20px;padding:24px;box-shadow:var(--shadow-sm)}
.side-card.dark{background:var(--ink);color:#fff;border-color:var(--ink)}
.side-card h4{font-family:'Fraunces',serif;font-size:20px;margin-bottom:10px}
.side-card p{font-size:14px;color:inherit;opacity:.85;margin-bottom:14px}
.side-card ul{list-style:none;display:grid;gap:10px;font-size:14px;margin-bottom:14px}
.side-card ul i{color:var(--coral);margin-right:8px}
.input-row{display:flex;gap:8px}
.input-row input{flex:1;border:1px solid var(--line);border-radius:100px;padding:12px 16px;font-family:inherit}
.visa-list li{display:flex;justify-content:space-between;background:var(--sand);border-radius:12px;padding:10px 12px;font-size:13px;font-weight:700}
.badge{font-size:11px;font-weight:800;padding:4px 10px;border-radius:100px;background:var(--mint);color:#0b4a2b}
.badge.warn{background:#ffe8a3;color:#7a5a00}
/* testimonials */
.testi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.testi{background:#fff;border:1px solid var(--line);border-radius:20px;padding:24px;display:flex;flex-direction:column;gap:14px}
.stars{color:var(--sun);letter-spacing:2px}
.testi-head{display:flex;gap:12px;align-items:center}
.testi-head img{width:52px;height:52px;border-radius:50%;object-fit:cover}
.testi-head strong{display:block}
.testi-head small{color:var(--muted)}
/* faq */
.faq-wrap{max-width:820px;margin:0 auto}
.faq-item{background:#fff;border:1px solid var(--line);border-radius:16px;margin-bottom:12px;overflow:hidden}
.faq-q{width:100%;background:none;border:0;padding:20px 22px;display:flex;justify-content:space-between;align-items:center;gap:16px;font-weight:800;font-size:16px;cursor:pointer;text-align:left;font-family:inherit;color:var(--ink)}
.faq-a{max-height:0;overflow:hidden;transition:.35s ease}
.faq-a p{padding:0 22px 20px;color:var(--muted);font-size:15px}
.faq-item.open .faq-a{max-height:300px}
.faq-item.open{border-color:var(--ink)}
/* newsletter */
.cta-banner{background:linear-gradient(120deg,#ff5a5f,#ff8a5c);border-radius:28px;padding:48px;color:#fff;display:grid;grid-template-columns:1.1fr .9fr;gap:28px;align-items:center;position:relative;overflow:hidden}
.cta-banner img{border-radius:20px;height:280px;width:100%;object-fit:cover;box-shadow:0 20px 40px rgba(0,0,0,.25)}
/* footer */
footer{background:var(--ink);color:#c8dbdd;padding:64px 0 0;margin-top:84px}
.foot-grid{display:grid;grid-template-columns:1.3fr 1fr 1fr 1fr;gap:32px;max-width:1200px;margin:0 auto;padding:0 24px 40px}
.foot-grid h5{color:#fff;font-size:13px;letter-spacing:.14em;text-transform:uppercase;margin-bottom:16px}
.foot-grid a{display:block;font-size:14.5px;margin-bottom:10px;opacity:.85}
.foot-grid a:hover{opacity:1;color:#fff}
.foot-brand p{font-size:14.5px;margin:14px 0}
.socials{display:flex;gap:10px;margin-top:16px}
.socials a{width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.1);display:grid;place-items:center;color:#fff;margin:0}
.foot-bottom{border-top:1px solid rgba(255,255,255,.14);padding:20px 24px;max-width:1200px;margin:0 auto;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px}
.toast{position:fixed;bottom:24px;right:24px;background:var(--ink);color:#fff;padding:16px 20px;border-radius:14px;box-shadow:var(--shadow);transform:translateY(120px);transition:.4s;z-index:99;font-weight:700;font-size:14px;max-width:360px}
.toast.show{transform:none}
@media(max-width:1020px){
  nav.main{display:none}
  .hamburger{display:block}
  nav.main.mobile-open{display:flex;position:absolute;top:100%;left:0;right:0;background:#fff;flex-direction:column;padding:16px;border-bottom:1px solid var(--line)}
  .hero-inner,.exp-grid,.cta-banner{grid-template-columns:1fr}
  .exp-media{min-height:380px}
  .dest-grid,.deal-grid,.testi-grid,.steps{grid-template-columns:1fr 1fr}
  .hero-stats{grid-template-columns:1fr 1fr}
  .two-col{grid-template-columns:1fr}
  .sidebar{position:static}
  .tool-controls,.budget-box{grid-template-columns:1fr}
  .compare-grid{grid-template-columns:1fr}
  .compare-col:first-child{border-right:0;border-bottom:1px solid var(--line)}
  .foot-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:640px){
  .dest-grid,.deal-grid,.testi-grid,.steps,.search-grid{grid-template-columns:1fr}
  .hero-stats{grid-template-columns:1fr}
  section{padding:56px 0}
  .nav-cta{display:none}
  .foot-grid{grid-template-columns:1fr}
}
</style>
</head>
<body>

<div class="topbar">
  <div class="topbar-inner">
    <div>✈️ Fall Sale: Save up to 35% on flights + hotels — ends in <strong id="countdown" style="color:#fff">02:14:55</strong></div>
    <div style="display:flex;gap:16px"><span>🛡️ Free travel insurance on trips over $1,500</span><a href="#deals">Claim offer</a></div>
  </div>
</div>

<header>
  <div class="nav-wrap">
    <a class="brand" href="#">
      <img src="https://placehold.co/120x120/0e4a53/ffffff?text=R&font=poppins" alt="Roamora logo">
      <span class="brand-text"><strong>Roamora</strong><span>Guides • Flights • Journeys</span></span>
    </a>
    <nav class="main" id="mainNav">
      <a href="#destinations" class="active">Destinations</a>
      <a href="#experiences">Experiences</a>
      <a href="#deals">Flights</a>
      <a href="#planner">Guides</a>
      <a href="#stories">Stories</a>
      <a href="#faq">FAQ</a>
      <a href="#contact">Contact</a>
    </nav>
    <a href="#deals" class="btn btn-primary nav-cta">Book Adventure <i class="fa-solid fa-arrow-right"></i></a>
    <button class="hamburger" id="hamburger" aria-label="Menu"><i class="fa-solid fa-bars"></i></button>
  </div>
</header>

<div class="hero">
  <div class="hero-bg"><img src="https://picsum.photos/1600/900?random=101" alt="Travel hero"></div>
  <div class="hero-inner">
    <div>
      <span class="eyebrow" style="background:rgba(255,255,255,.95)"><i class="fa-solid fa-compass"></i> New: 2026 Slow Travel Report is live</span>
      <h1>See more. <em>Plan less stress.</em> Travel well.</h1>
      <p class="lead">Roamora blends human-vetted destination guides, transparent flight deals, and done-for-you itineraries — so you can book with confidence and actually enjoy the journey. From solo escapes to family safaris, we handle logistics, cultural etiquette, and travel insurance.</p>
      <div class="hero-badges">
        <div><span>4.9★</span> 38k verified reviews</div>
        <div><span>120+</span> countries covered</div>
        <div><span>24/7</span> human trip support</div>
      </div>
      <div class="trust">
        <div class="avatars">
          <img src="https://i.pravatar.cc/68?u=roam1" alt="traveler"><img src="https://i.pravatar.cc/68?u=roam2" alt="traveler"><img src="https://i.pravatar.cc/68?u=roam3" alt="traveler"><img src="https://i.pravatar.cc/68?u=roam4" alt="traveler">
        </div>
        <span>Joined by <strong style="color:#fff">210,000+ travelers</strong> planning smarter this year</span>
      </div>
    </div>
    <div class="search-card">
      <h3>Where to next?</h3>
      <p>Search live deals, guides and hand-built itineraries in seconds.</p>
      <div class="search-tabs"><button class="active" data-tab="Stays">Stays + Flights</button><button data-tab="Guides">Guides</button><button data-tab="Solo">Solo Travel</button></div>
      <div class="search-grid">
        <div class="field"><label>Destination</label><select id="destSelect"><option>Kyoto, Japan</option><option>Santorini, Greece</option><option>Marrakech, Morocco</option><option>Bali, Indonesia</option><option>Reykjavik, Iceland</option><option>Patagonia, Chile</option></select></div>
        <div class="field"><label>Departure Month</label><select><option>Oct 2026</option><option>Nov 2026</option><option>Dec 2026</option><option>Jan 2027</option><option>Flexible</option></select></div>
        <div class="field"><label>Travelers</label><select><option>2 adults</option><option>1 adult • Solo</option><option>2 adults + 1 child</option><option>Group 4+</option></select></div>
        <div class="field"><label>Travel Style</label><select><option>Culture + Food</option><option>Adventure</option><option>Relaxation</option><option>Luxury</option><option>Budget smart</option></select></div>
      </div>
      <div class="search-foot">
        <button class="btn btn-primary" onclick="showToast('✨ Found 24 itineraries + 11 flight deals for your dates! Scroll to explore.')">Plan Itinerary <i class="fa-solid fa-route"></i></button>
        <button class="btn btn-ghost" onclick="document.getElementById('compare').scrollIntoView({behavior:'smooth'})">Compare</button>
      </div>
      <p style="font-size:12px;color:var(--muted);margin-top:12px;text-align:center">✓ No booking fees &nbsp; ✓ Free cancellation on most stays &nbsp; ✓ ATOL protected</p>
    </div>
  </div>
  <div class="hero-stats">
    <div><span class="icon-dot" style="background:#ffe8a3">🧭</span><span><strong>2,400+ guides</strong><small>Written by locals, updated monthly</small></span></div>
    <div><span class="icon-dot" style="background:#d9eef2">💸</span><span><strong>Avg. $320 saved</strong><small>Per booking vs. public fares</small></span></div>
    <div><span class="icon-dot" style="background:#c7f0d6">🛂</span><span><strong>Visa + insurance help</strong><small>Included with every itinerary</small></span></div>
    <div><span class="icon-dot" style="background:#ffd9db">❤️</span><span><strong>Solo-friendly picks</strong><small>Safety-rated for solo travel</small></span></div>
  </div>
</div>

<div class="press"><div class="press-inner"><span>As featured in</span><span>Condé Wander • Lonely Earth • Travel+Leisure • AFAR • Skift</span><span style="color:#0e4a53">★ ★ ★ ★ ★ 4.9 on TrustPilot</span></div></div>

<!-- DESTINATIONS -->
<section id="destinations">
<div class="container">
  <div class="section-head"><span class="eyebrow"><i class="fa-solid fa-map-location-dot"></i> Destination Guides</span><h2>Guides written by people who actually live there</h2><p>Forget generic top-10 lists. Each Roamora guide covers neighborhoods, cultural etiquette, tipping norms, transit hacks, safety after dark, and realistic daily budgets — researched on foot and refreshed every 30 days. Here’s what’s trending for fall and winter.</p></div>
  <div class="dest-grid">
    <article class="dest-card"><div class="img-wrap"><img src="https://picsum.photos/600/400?random=21" alt="Kyoto"><span class="price-tag">From $89 / day</span><button class="wish" onclick="showToast('Saved Kyoto to your wishlist ♥')">♥</button><div class="tag-row"><span>Cultural etiquette</span><span>Solo: 9.6</span></div></div><div class="dest-body"><h3>Kyoto, Japan</h3><div class="meta"><span><i class="fa-solid fa-star"></i> 4.96 (2,314)</span><span>• 7-day itinerary</span><span>• Best Oct–Nov</span></div><p>Temples at dawn, kissaten coffee, and machiya stays. Our Kyoto guide decodes shrine manners, rail passes, and how to book that impossible-to-get kaiseki dinner. Includes a 7-day slow itinerary with day trips to Uji and Nara, plus essential Japanese phrases and onsen etiquette.</p><div class="card-foot"><span><small>Flights from</small><strong>$642 return</strong></span><a class="link-arrow" href="#planner">Explore Destination →</a></div></div></article>
    <article class="dest-card"><div class="img-wrap"><img src="https://picsum.photos/600/400?random=22" alt="Santorini"><span class="price-tag">From $112 / day</span><button class="wish" onclick="showToast('Saved Santorini to your wishlist ♥')">♥</button><div class="tag-row"><span>Honeymoon</span><span>Ferry Guide</span></div></div><div class="dest-body"><h3>Santorini, Greece</h3><div class="meta"><span><i class="fa-solid fa-star"></i> 4.91 (1,876)</span><span>• 5-day itinerary</span><span>• Best May–Oct</span></div><p>Beyond Oia sunsets: volcanic hikes, Assyrtiko wine caves, and caldera swims without the crowds. Learn ferry vs. fly trade-offs, which villages stay authentic after 8pm, and how to dodge cruise-ship peaks. Full breakdown of cave hotel tiers and travel insurance tips for island hopping.</p><div class="card-foot"><span><small>Flights from</small><strong>$489 return</strong></span><a class="link-arrow" href="#planner">Explore Destination →</a></div></div></article>
    <article class="dest-card"><div class="img-wrap"><img src="https://picsum.photos/600/400?random=23" alt="Marrakech"><span class="price-tag">From $58 / day</span><button class="wish" onclick="showToast('Saved Marrakech to your wishlist ♥')">♥</button><div class="tag-row"><span>Food Markets</span><span>Solo: 8.9</span></div></div><div class="dest-body"><h3>Marrakech, Morocco</h3><div class="meta"><span><i class="fa-solid fa-star"></i> 4.88 (1,540)</span><span>• 6-day itinerary</span><span>• Best Sep–Nov</span></div><p>Souks, riads, and Atlas Mountain escapes. Our local team covers haggling with grace, riad vs. hotel safety, dress codes, and the exact SIM + eSIM setup to get at the airport. Plus a food crawl itinerary from Jemaa el-Fnaa to Le Jardin Secret with vetted tour operators.</p><div class="card-foot"><span><small>Flights from</small><strong>$412 return</strong></span><a class="link-arrow" href="#planner">Explore Destination →</a></div></div></article>
    <article class="dest-card"><div class="img-wrap"><img src="https://picsum.photos/600/400?random=24" alt="Bali"><span class="price-tag">From $47 / day</span><button class="wish" onclick="showToast('Saved Bali to your wishlist ♥')">♥</button><div class="tag-row"><span>Wellness</span><span>Digital Nomad</span></div></div><div class="dest-body"><h3>Bali, Indonesia</h3><div class="meta"><span><i class="fa-solid fa-star"></i> 4.84 (3,102)</span><span>• 10-day itinerary</span><span>• Best Apr–Oct</span></div><p>Ubud jungle, Uluwatu surf, and sidestreet warungs only locals know. Covers scooter safety, temple dress and offering etiquette, monsoon-season backup plans, and co-working visas. Includes Nusa Penida day-trip math: when the fast boat is (and isn’t) worth it.</p><div class="card-foot"><span><small>Flights from</small><strong>$718 return</strong></span><a class="link-arrow" href="#planner">Explore Destination →</a></div></div></article>
    <article class="dest-card"><div class="img-wrap"><img src="https://picsum.photos/600/400?random=25" alt="Reykjavik"><span class="price-tag">From $145 / day</span><button class="wish" onclick="showToast('Saved Reykjavik to your wishlist ♥')">♥</button><div class="tag-row"><span>Northern Lights</span><span>Road Trip</span></div></div><div class="dest-body"><h3>Reykjavik & South Coast</h3><div class="meta"><span><i class="fa-solid fa-star"></i> 4.93 (987)</span><span>• 5-day itinerary</span><span>• Best Sep–Mar</span></div><p>Chase auroras, soak in geothermal lagoons, and self-drive the Golden Circle safely. Guide explains wind insurance for rentals, daylight hours by week, thermal pool etiquette, and how to read Vedur aurora forecasts like a local. Packing list included.</p><div class="card-foot"><span><small>Flights from</small><strong>$398 return</strong></span><a class="link-arrow" href="#planner">Explore Destination →</a></div></div></article>
    <article class="dest-card"><div class="img-wrap"><img src="https://picsum.photos/600/400?random=26" alt="Patagonia"><span class="price-tag">From $98 / day</span><button class="wish" onclick="showToast('Saved Patagonia to your wishlist ♥')">♥</button><div class="tag-row"><span>Trekking</span><span>W-Trek</span></div></div><div class="dest-body"><h3>Patagonia, Chile</h3><div class="meta"><span><i class="fa-solid fa-star"></i> 4.95 (642)</span><span>• 9-day itinerary</span><span>• Best Nov–Mar</span></div><p>Torres del Paine W-trek refugios, estancia stays, and condor viewpoints. Detailed permit timelines, bus vs. rental breakdowns, layering systems for 4-seasons-in-a-day weather, and evacuation + travel insurance requirements every trekker must know.</p><div class="card-foot"><span><small>Flights from</small><strong>$892 return</strong></span><a class="link-arrow" href="#planner">Explore Destination →</a></div></div></article>
  </div>
  <div style="text-align:center;margin-top:28px;display:flex;gap:12px;justify-content:center;flex-wrap:wrap">
    <a href="#compare" class="btn btn-dark">Plan Itinerary <i class="fa-solid fa-route"></i></a>
    <a href="#deals" class="btn btn-ghost">View all 120+ guides</a>
  </div>
</div>
</section>

<!-- EXPERIENCES / SOLO -->
<section id="experiences" style="padding-top:0">
<div class="container">
<div class="exp-section">
<div class="exp-grid">
<div class="exp-media"><img class="main" src="https://picsum.photos/800/900?random=31" alt="Solo traveler"><div class="exp-float"><img src="https://i.pravatar.cc/100?u=sololead" alt="" style="width:58px;height:58px;border-radius:50%"><div><strong>Solo Travel, Perfected</strong><br><small style="color:var(--muted)">Safety-rated stays, group dinners, no single supplement on 80+ trips</small></div><span style="margin-left:auto;background:var(--ink);color:#fff;font-weight:800;padding:10px 16px;border-radius:100px;font-size:13px">9.6/10</span></div></div>
<div class="exp-content">
<span class="eyebrow" style="background:#fff">✨ Experiences • Solo Travel</span>
<h2>Travel solo, never feel alone.</h2>
<p>Nearly 42% of Roamora trips are booked by solo travelers. We pair independence with thoughtful safety nets: vetted boutique hostels and riads, small-group experiences capped at 12, 24/7 check-ins, and community dinners you can join — or skip — with zero pressure.</p>
<ul class="feature-list">
<li><i class="fa-solid fa-shield-halved"></i><span><strong>Safety-first curation.</strong> Every solo pick is scored on night-time walkability, verified reviews from solo women travelers, and on-ground support. Plus clear guidance on cultural etiquette and local emergency numbers.</span></li>
<li><i class="fa-solid fa-people-group"></i><span><strong>Small-group magic.</strong> Sunrise food tours, pottery classes, desert camps. Meet people naturally without forced icebreakers. Average group size: 8 travelers.</span></li>
<li><i class="fa-solid fa-file-shield"></i><span><strong>Insurance + flexibility included.</strong> Comprehensive travel insurance options, free date changes up to 14 days before, and transparent refund timelines in plain English.</span></li>
</ul>
<div class="timeline">
<div><strong>Day 1–2: Arrive + orient</strong><p>Airport pickup, SIM setup, neighborhood walk with local host, welcome dinner (optional).</p></div>
<div><strong>Day 3–5: Dive deep</strong><p>Hands-on experiences — cooking, hiking, craft workshops — with free afternoons to wander.</p></div>
<div><strong>Day 6–7: Your pace</strong><p>Spa, surf, or side-trip. Your host builds a flexible itinerary you can shuffle same-day.</p></div>
</div>
<div style="display:flex;gap:12px;margin-top:26px;flex-wrap:wrap"><a href="#planner" class="btn btn-primary">Book Adventure</a><a href="#stories" class="btn btn-light">Read solo stories</a></div>
</div>
</div>
</div>
</div>
</section>

<!-- FLIGHT DEALS -->
<section id="deals" style="padding-top:20px">
<div class="container">
<div class="deals-head">
<div class="section-head" style="margin:0"><span class="eyebrow"><i class="fa-solid fa-plane"></i> Flight Deals & Booking</span><h2>Real flight deals, refreshed hourly</h2><p>We track 900+ routes and only publish fares we’d book ourselves — with bags, seats, and cancellation terms spelled out. No bait fares, no hidden fees. Filter by region:</p></div>
<div class="filter-pills" id="filterPills"><button class="active" data-f="all">All deals</button><button data-f="asia">Asia</button><button data-f="europe">Europe</button><button data-f="africa">Africa & Mid-East</button><button data-f="americas">Americas</button></div>
</div>
<div class="deal-grid" id="dealGrid">
<article class="deal-card" data-cat="asia"><img src="https://picsum.photos/600/350?random=41" alt="Tokyo"><div class="deal-body"><span class="badge">🔥 32% below avg</span><h3>San Francisco → Tokyo</h3><div class="deal-route">SFO <span class="dot"></span> ✈ <span class="dot"></span> HND • Nonstop • 11h 20m</div><div class="deal-meta"><span>📅 Nov 12–19</span><span>🧳 2x checked incl.</span><span>↩ Free cancel 24h</span></div><div class="deal-price"><span><s>$1,102</s><br><strong>$642</strong> <small>return</small></span><button class="btn btn-primary" style="padding:12px 20px" onclick="showToast('Hold placed on SFO → Tokyo $642! Check email to confirm.')">Book</button></div></div></article>
<article class="deal-card" data-cat="europe"><img src="https://picsum.photos/600/350?random=42" alt="Santorini"><div class="deal-body"><span class="badge">🔥 28% below avg</span><h3>New York → Athens</h3><div class="deal-route">JFK <span class="dot"></span> ✈ <span class="dot"></span> ATH • 1 stop • 12h 45m</div><div class="deal-meta"><span>📅 Oct 08–15</span><span>🧳 Carry-on incl.</span><span>🛡️ Insurance $18</span></div><div class="deal-price"><span><s>$689</s><br><strong>$489</strong> <small>return</small></span><button class="btn btn-primary" style="padding:12px 20px" onclick="showToast('Hold placed on JFK → Athens $489!')">Book</button></div></div></article>
<article class="deal-card" data-cat="europe"><img src="https://picsum.photos/600/350?random=43" alt="Iceland"><div class="deal-body"><span class="badge">✨ Northern lights season</span><h3>Boston → Reykjavik</h3><div class="deal-route">BOS <span class="dot"></span> ✈ <span class="dot"></span> KEF • Nonstop • 5h 40m</div><div class="deal-meta"><span>📅 Jan 16–21</span><span>🧳 1x checked incl.</span><span>❄ Aurora forecast 4/5</span></div><div class="deal-price"><span><s>$610</s><br><strong>$398</strong> <small>return</small></span><button class="btn btn-primary" style="padding:12px 20px" onclick="showToast('Hold placed on BOS → Reykjavik $398!')">Book</button></div></div></article>
<article class="deal-card" data-cat="africa"><img src="https://picsum.photos/600/350?random=44" alt="Marrakech"><div class="deal-body"><span class="badge">🔥 35% below avg</span><h3>Miami → Marrakech</h3><div class="deal-route">MIA <span class="dot"></span> ✈ <span class="dot"></span> RAK • 1 stop • 13h 10m</div><div class="deal-meta"><span>📅 Nov 02–09</span><span>🧳 2x checked incl.</span><span>🛂 Visa on arrival</span></div><div class="deal-price"><span><s>$634</s><br><strong>$412</strong> <small>return</small></span><button class="btn btn-primary" style="padding:12px 20px" onclick="showToast('Hold placed on MIA → Marrakech $412!')">Book</button></div></div></article>
<article class="deal-card" data-cat="asia"><img src="https://picsum.photos/600/350?random=45" alt="Bali"><div class="deal-body"><span class="badge warn">⏳ 4 seats left</span><h3>Los Angeles → Bali</h3><div class="deal-route">LAX <span class="dot"></span> ✈ <span class="dot"></span> DPS • 1 stop • 19h 05m</div><div class="deal-meta"><span>📅 Dec 05–16</span><span>🧳 2x checked incl.</span><span>🏝 11-day itinerary</span></div><div class="deal-price"><span><s>$1,240</s><br><strong>$718</strong> <small>return</small></span><button class="btn btn-primary" style="padding:12px 20px" onclick="showToast('Hold placed on LAX → Bali $718!')">Book</button></div></div></article>
<article class="deal-card" data-cat="americas"><img src="https://picsum.photos/600/350?random=46" alt="Patagonia"><div class="deal-body"><span class="badge">🥾 Trek season</span><h3>Dallas → Santiago + Torres</h3><div class="deal-route">DFW <span class="dot"></span> ✈ <span class="dot"></span> SCL • 1 stop • 13h 50m</div><div class="deal-meta"><span>📅 Feb 10–20</span><span>🧳 Trek bag incl.</span><span>🛡️ Evac cover incl.</span></div><div class="deal-price"><span><s>$1,180</s><br><strong>$892</strong> <small>return</small></span><button class="btn btn-primary" style="padding:12px 20px" onclick="showToast('Hold placed on DFW → Patagonia $892!')">Book</button></div></div></article>
</div>
<p style="margin-top:18px;font-size:14px;color:var(--muted);background:#fff;border:1px dashed var(--line);border-radius:14px;padding:14px 18px">💡 <strong>How we vet fares:</strong> Every deal is checked for realistic layovers (90 min+), included baggage, change fees under $99, andRefund timelines. We also bundle optional travel insurance from $18 and show total trip cost — never just the teaser fare.</p>
</div>
</section>

<!-- COMPARE TOOL -->
<section id="compare" style="background:#fff;border-top:1px solid var(--line);border-bottom:1px solid var(--line)">
<div class="container">
<div class="section-head"><span class="eyebrow"><i class="fa-solid fa-scale-balanced"></i> Interactive • Destination Comparison</span><h2>Can’t decide? Compare side-by-side</h2><p>Pick any two destinations to compare daily costs, flight times, visa rules, best seasons, and solo safety scores. Then slide to estimate your total trip budget including flights, stays, food, and experiences.</p></div>
<div class="tool-wrap" id="planner">
<div class="tool-top"><div><h3>Destination Comparison Tool</h3><p style="opacity:.8;font-size:14px">Live data • Updated Oct 2026 • Sources: local editors + DOT fares</p></div><span style="background:var(--sun);color:var(--ink);font-weight:800;padding:10px 16px;border-radius:100px;font-size:13px">★ Trusted by 210k travelers</span></div>
<div class="tool-controls">
<div class="field"><label>Destination A</label><select id="compA"><option value="kyoto">Kyoto, Japan</option><option value="santorini">Santorini, Greece</option><option value="marrakech" selected>Marrakech, Morocco</option><option value="bali">Bali, Indonesia</option><option value="reykjavik">Reykjavik, Iceland</option><option value="patagonia">Patagonia, Chile</option></select></div>
<div class="field"><label>Destination B</label><select id="compB"><option value="kyoto" selected>Kyoto, Japan</option><option value="santorini">Santorini, Greece</option><option value="marrakech">Marrakech, Morocco</option><option value="bali">Bali, Indonesia</option><option value="reykjavik">Reykjavik, Iceland</option><option value="patagonia">Patagonia, Chile</option></select></div>
<div class="field"><label>Trip Length</label><select id="tripLen"><option value="5">5 days</option><option value="7" selected>7 days</option><option value="10">10 days</option><option value="14">14 days</option></select></div>
</div>
<div class="compare-grid">
<div class="compare-col" id="colA"></div>
<div class="compare-col" id="colB"></div>
</div>
<div class="budget-box">
<div><h4 style="font-family:'Fraunces',serif;font-size:22px;margin-bottom:8px">Estimate your total budget</h4><p style="font-size:14px;color:var(--muted);margin-bottom:16px">Adjust daily comfort level. We include stays, food, local transport, one paid experience per day, plus average return flight.</p><label style="font-weight:800;font-size:13px">DAILY SPEND PER PERSON: $<span id="dailyVal">110</span> — <span id="styleLabel">Comfort</span></label><input type="range" id="dailyRange" min="45" max="280" value="110"><div style="display:flex;justify-content:space-between;font-size:12px;color:var(--muted);font-weight:700"><span>$45 Backpacker</span><span>$140 Comfort</span><span>$280 Luxe</span></div></div>
<div class="budget-output"><small style="letter-spacing:.12em;font-weight:800;opacity:.7">ESTIMATED TOTAL (7 DAYS, 1 PERSON)</small><div style="display:flex;gap:18px;margin-top:10px"><div style="flex:1"><span style="font-size:12px;opacity:.7" id="nameA">Marrakech</span><div style="font-size:28px;font-weight:800" id="totalA">$1,182</div></div><div style="flex:1"><span style="font-size:12px;opacity:.7" id="nameB">Kyoto</span><div style="font-size:28px;font-weight:800;color:var(--sun)" id="totalB">$1,412</div></div></div><button class="btn btn-primary" style="width:100%;margin-top:14px" onclick="showToast('Itinerary draft sent! Check your inbox for full cost breakdown.')">Plan Itinerary with these numbers</button></div>
</div>
</div>
</div>
</section>

<!-- PLANNER + SIDEBAR -->
<section id="guides">
<div class="container">
<div class="section-head"><span class="eyebrow"><i class="fa-solid fa-route"></i> Booking Resources • How it works</span><h2>From “someday” to booked in three steps</h2><p>Whether you want a fully custom itinerary or just a nudge in the right direction, Roamora meets you where you are. All plans include vetted stays, transport passes, restaurant shortlists, cultural etiquette cheat-sheets, and 24/7 WhatsApp support while you travel.</p></div>
<div class="two-col">
<div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px">
<img src="https://picsum.photos/600/400?random=61" alt="Itinerary planning" style="border-radius:20px;height:260px;width:100%;object-fit:cover">
<img src="https://picsum.photos/600/400?random=62" alt="Traveler map" style="border-radius:20px;height:260px;width:100%;object-fit:cover">
</div>
<div class="steps">
<div class="step"><span class="num">01</span><h4>Tell us your style</h4><p style="font-size:14px;color:var(--muted);margin-top:8px">Two-minute quiz: pace, budget, must-sees, dietary needs, and travel insurance preferences. Solo travelers can flag safety priorities and social vs. solitude balance.</p></div>
<div class="step"><span class="num">02</span><h4>Get your itinerary</h4><p style="font-size:14px;color:var(--muted);margin-top:8px">A local specialist builds your day-by-day plan within 48 hours — with bookable flights, stays, and experiences. Unlimited tweaks until it feels exactly right.</p></div>
<div class="step"><span class="num">03</span><h4>Book & go protected</h4><p style="font-size:14px;color:var(--muted);margin-top:8px">One checkout for everything. Free cancellation windows, transparent change fees, eSIM + visa letters included, and live help if flights shift.</p></div>
</div>
<div style="background:var(--sky);border-radius:20px;padding:26px;margin-top:20px;display:flex;gap:18px;align-items:center;flex-wrap:wrap">
<img src="https://placehold.co/200x140/0e4a53/ffffff?text=Sample+Itinerary&font=poppins" alt="sample" style="border-radius:14px">
<div style="flex:1;min-width:240px"><h4 style="font-family:'Fraunces',serif;font-size:20px">Sample: 7 days in Kyoto — $1,840 pp</h4><p style="font-size:14px;color:#33565c">Flights + machiya stay + JR Pass + tea ceremony, ramen tour, Nara deer park, and travel insurance. <a href="#" style="font-weight:800;text-decoration:underline">Download PDF sample →</a></p></div>
<a href="#deals" class="btn btn-dark">Book Adventure</a>
</div>
</div>
<aside class="sidebar">
<div class="side-card dark"><h4>🔔 Deal Alerts — never miss a fare drop</h4><p>Get WhatsApp + email alerts when your route drops 20%+ below average. Free forever.</p><div class="input-row"><input id="alertEmail" type="email" placeholder="you@email.com" style="color:#000"><button class="btn btn-primary" style="padding:12px 18px" onclick="subscribeAlert()">Join</button></div><small style="font-size:12px;opacity:.7">Join 84,200 smart bookers • Unsubscribe anytime</small></div>
<div class="side-card"><h4>🛂 Visa snapshot</h4><p>Do you need a visa? Quick check for US passport holders:</p><ul class="visa-list"><li>Japan <span class="badge">Visa-free 90d</span></li><li>Morocco <span class="badge">Visa-free 90d</span></li><li>Indonesia <span class="badge warn">VOA $35</span></li><li>Iceland / Greece <span class="badge">ETIAS from 2027</span></li></ul><p style="font-size:13px">We provide invitation letters, onward-ticket holds, and insurance certificates for applications.</p><a href="#" class="link-arrow">Check your passport →</a></div>
<div class="side-card"><h4>🎒 5 travel hacks this week</h4><ul><li><i class="fa-solid fa-check"></i>Book Tue–Wed departures, save 18% avg.</li><li><i class="fa-solid fa-check"></i>Use HND over NRT for faster Tokyo transit.</li><li><i class="fa-solid fa-check"></i>eSIM: 10GB Asia plan $12 vs $60 roaming.</li><li><i class="fa-solid fa-check"></i>Carry $40 cash in Marrakech souks.</li><li><i class="fa-solid fa-check"></i>Photo of luggage = faster lost-bag claims.</li></ul><img src="https://picsum.photos/400/220?random=63" alt="hack" style="border-radius:12px"></div>
</aside>
</div>
</div>
</section>

<!-- TESTIMONIALS -->
<section id="stories" style="background:#fff;border-top:1px solid var(--line)">
<div class="container">
<div class="section-head" style="text-align:center;margin:0 auto 36px"><span class="eyebrow"><i class="fa-solid fa-heart"></i> Traveler Stories</span><h2>Loved by first-timers and frequent flyers</h2><p>38,400+ verified reviews averaging 4.9 stars. Here’s why travelers switch to Roamora and never go back to tab-hell planning.</p></div>
<div class="testi-grid">
<div class="testi"><div class="stars">★★★★★</div><p>“As a solo woman traveler, safety is everything. Roamora’s Kyoto itinerary flagged exactly which stations to avoid late, booked a female-owned machiya, and even added a group ramen night. I felt free — and looked after.”</p><div class="testi-head"><img src="https://i.pravatar.cc/104?u=maya22" alt="Maya"><span><strong>Maya R. — Solo, Kyoto 7 days</strong><small>Saved $310 vs. DIY booking</small></span></div></div>
<div class="testi"><div class="stars">★★★★★</div><p>“Flight got cancelled in Lisbon and I panicked. Messaged Roamora at 2am and by 2:20am I was rebooked + hotel voucher sorted, with travel insurance covering the rest. That alone is worth every penny.”</p><div class="testi-head"><img src="https://i.pravatar.cc/104?u=daniel8" alt="Daniel"><span><strong>Daniel & Priya — Honeymoon, Greece</strong><small>14 days, Santorini + Naxos</small></span></div></div>
<div class="testi"><div class="stars">★★★★★</div><p>“The Marrakech cultural etiquette guide saved us so many awkward moments — from souk bargaining to riad tipping. Our driver, cooking class, and Atlas day trip were all flawless. Best-planned trip we’ve taken.”</p><div class="testi-head"><img src="https://i.pravatar.cc/104?u=sofia11" alt="Sofia"><span><strong>Sofia L. — Family of 4, Morocco</strong><small>6 days, private driver included</small></span></div></div>
</div>
</div>
</section>

<!-- FAQ -->
<section id="faq">
<div class="container">
<div class="section-head" style="text-align:center;margin:0 auto 30px"><span class="eyebrow"><i class="fa-solid fa-circle-question"></i> Good to know</span><h2>Questions? Answers.</h2><p>Everything about booking, changing, canceling, and traveling protected with Roamora.</p></div>
<div class="faq-wrap">
<div class="faq-item open"><button class="faq-q">Do you include travel insurance? <span>+</span></button><div class="faq-a"><p>Yes. Every itinerary can bundle comprehensive travel insurance covering trip cancellation, medical emergencies up to $100k, lost baggage, and adventure activities like snorkeling and guided treks. For trips over $1,500, basic coverage is free. You can upgrade to Cancel-For-Any-Reason at checkout, and we handle claims paperwork with you.</p></div></div>
<div class="faq-item"><button class="faq-q">How do flight deals work — are bags and seats included? <span>+</span></button><div class="faq-a"><p>We only list fares after verifying baggage allowance, seat selection cost, and change fees. What you see is the true total. Once you hit Book Adventure, we place a 24-hour courtesy hold while you confirm your itinerary, so the price won’t jump mid-checkout.</p></div></div>
<div class="faq-item"><button class="faq-q">I’m traveling solo. Is it safe? <span>+</span></button><div class="faq-a"><p>Solo travel is our specialty. We score every stay and neighborhood forsolo safety, provide 24/7 check-ins, share live location options with emergency contacts, and include cultural etiquette briefings (dress, nightlife, transport). 93% of solo travelers rate feeling “very safe” on post-trip surveys.</p></div></div>
<div class="faq-item"><button class="faq-q">Can I change or cancel my itinerary? <span>+</span></button><div class="faq-a"><p>Absolutely. Date changes are free up to 14 days before departure on most trips; full refunds are available within the stated cancellation window (typically 7–14 days depending on suppliers). Flights follow airline fare rules which we show in plain English before you pay — no surprises.</p></div></div>
<div class="faq-item"><button class="faq-q">Do you help with visas and cultural etiquette? <span>+</span></button><div class="faq-a"><p>Yes. You’ll get a visa checklist tailored to your passport, plus supporting documents (hotel confirmations, insurance letters, onward tickets). Each destination also includes a one-page etiquette card: greetings, tipping, temple/mosque dress, photography rules, and useful local phrases.</p></div></div>
</div>
<div class="container" style="margin-top:36px"><div class="cta-banner"><div><span class="eyebrow" style="border:0">🌍 October inspiration</span><h2 style="font-size:clamp(28px,3.5vw,42px);margin:12px 0">Get $150 off your first custom itinerary</h2><p style="opacity:.9;margin-bottom:20px">Tell us where you dream of going. A local specialist will craft your day-by-day plan in 48 hours — flights, stays, experiences, and insurance sorted. Offer ends Oct 31.</p><div style="display:flex;gap:12px;flex-wrap:wrap"><a href="#compare" class="btn btn-dark">Plan Itinerary — $150 off</a><a href="#contact" class="btn btn-light">Talk to a specialist</a></div><small style="display:block;margin-top:14px;opacity:.8">No spam. No booking required to get your draft plan.</small></div><img src="https://picsum.photos/600/500?random=77" alt="Travel inspiration"></div></div>
</div>
</section>

<footer id="contact">
<div class="foot-grid">
<div class="foot-brand"><a class="brand" href="#" style="color:#fff"><img src="https://placehold.co/120x120/ff5a5f/ffffff?text=R&font=poppins" alt="logo"><span class="brand-text"><strong style="color:#fff">Roamora</strong><span style="color:#8fb0b4">Guides • Flights • Journeys</span></span></a><p>Stories, guides & journeys worth taking. Expert-built itineraries, honest flight deals, and 24/7 human support for 120+ countries.</p><p>📍 540 Post Street, Suite 800<br>San Francisco, CA 94102<br>✉️ hello@roamora.travel<br>📞 +1 (415) 555-0132</p><div class="socials"><a href="#" aria-label="Instagram"><i class="fa-brands fa-instagram"></i></a><a href="#" aria-label="TikTok"><i class="fa-brands fa-tiktok"></i></a><a href="#" aria-label="YouTube"><i class="fa-brands fa-youtube"></i></a><a href="#" aria-label="X"><i class="fa-brands fa-x-twitter"></i></a><a href="#" aria-label="Pinterest"><i class="fa-brands fa-pinterest"></i></a></div></div>
<div><h5>Destinations</h5><a href="#destinations">Kyoto Guides</a><a href="#destinations">Santorini Guides</a><a href="#destinations">Marrakech Guides</a><a href="#destinations">Bali Guides</a><a href="#destinations">Iceland Road Trips</a><a href="#destinations">View all 120+</a></div>
<div><h5>Company</h5><a href="#experiences">Experiences</a><a href="#deals">Flights</a><a href="#planner">Custom Itineraries</a><a href="#stories">Reviews</a><a href="#faq">Help Center</a><a href="#contact">Contact</a></div>
<div><h5>Resources</h5><a href="#">Visa Checker</a><a href="#">Travel Insurance</a><a href="#">Solo Travel Hub</a><a href="#">Packing Lists</a><a href="#">Affiliates</a><a href="#">Careers — we’re hiring!</a></div>
</div>
<div class="foot-bottom"><span>© 2026 Roamora Travel Inc. All rights reserved. Made with care in San Francisco & Lisbon.</span><span style="display:flex;gap:18px"><a href="#">Privacy Policy</a><a href="#">Terms of Service</a><a href="#">Cookies</a><a href="#">Sitemap</a></span></div>
</footer>

<div class="toast" id="toast">Saved!</div>

<script>
const hamburger=document.getElementById('mainNav');
document.getElementById('hamburger').onclick=()=>hamburger.classList.toggle('mobile-open');
document.querySelectorAll('.search-tabs button').forEach(b=>b.onclick=()=>{document.querySelectorAll('.search-tabs button').forEach(x=>x.classList.remove('active'));b.classList.add('active');showToast(b.dataset.tab+' search activated — try the comparison tool below!')});
function showToast(msg){const t=document.getElementById('toast');t.textContent=msg;t.classList.add('show');clearTimeout(t._h);t._h=setTimeout(()=>t.classList.remove('show'),3200)}
function subscribeAlert(){const e=document.getElementById('alertEmail').value;if(!e||!e.includes('@')){showToast('Please enter a valid email to get deal alerts.');return}showToast('🎉 You’re in! Fare alerts activated for '+e)}
// countdown
let s=2*3600+14*60+55;setInterval(()=>{s=Math.max(0,s-1);const h=String(Math.floor(s/3600)).padStart(2,'0'),m=String(Math.floor(s%3600/60)).padStart(2,'0'),sec=String(s%60).padStart(2,'0');document.getElementById('countdown').textContent=h+':'+m+':'+sec},1000);
// filter
document.querySelectorAll('#filterPills button').forEach(b=>b.onclick=()=>{document.querySelectorAll('#filterPills button').forEach(x=>x.classList.remove('active'));b.classList.add('active');const f=b.dataset.f;document.querySelectorAll('#dealGrid .deal-card').forEach(c=>{c.style.display=(f==='all'||c.dataset.cat===f)?'':'none'})});
// FAQ
document.querySelectorAll('.faq-item').forEach(it=>{it.querySelector('.faq-q').onclick=()=>{it.classList.toggle('open');it.querySelector('.faq-q span').textContent=it.classList.contains('open')?'−':'+'}});
// comparison data
const DATA={
kyoto:{name:'Kyoto, Japan',img:'https://picsum.photos/600/350?random=51',flight:642,daily:89,best:'Oct–Nov & Mar–Apr',visa:'Visa-free 90 days',flytime:'11h 20m from SFO',safety:'9.6/10 Solo-safe',blurb:'Temples, tea houses & bullet-train day trips.'},
santorini:{name:'Santorini, Greece',img:'https://picsum.photos/600/350?random=52',flight:489,daily:112,best:'May–Oct',visa:'Visa-free 90 days (ETIAS 2027)',flytime:'12h 45m from JFK',safety:'9.2/10 Solo-safe',blurb:'Caldera views, wineries & ferry hopping.'},
marrakech:{name:'Marrakech, Morocco',img:'https://picsum.photos/600/350?random=53',flight:412,daily:58,best:'Sep–Nov & Mar–May',visa:'Visa-free 90 days',flytime:'13h 10m from MIA',safety:'8.9/10 + guide tips',blurb:'Souks, riads & Atlas Mountains.'},
bali:{name:'Bali, Indonesia',img:'https://picsum.photos/600/350?random=54',flight:718,daily:47,best:'Apr–Oct dry season',visa:'Visa on arrival $35',flytime:'19h from LAX',safety:'9.0/10 Solo-safe',blurb:'Surf, temples & jungle wellness.'},
reykjavik:{name:'Reykjavik, Iceland',img:'https://picsum.photos/600/350?random=55',flight:398,daily:145,best:'Sep–Mar aurora',visa:'Visa-free 90 days',flytime:'5h 40m from BOS',safety:'9.8/10 Solo-safe',blurb:'Auroras, lagoons & Golden Circle.'},
patagonia:{name:'Patagonia, Chile',img:'https://picsum.photos/600/350?random=56',flight:892,daily:98,best:'Nov–Mar summer',visa:'Visa-free 90 days',flytime:'13h 50m from DFW',safety:'9.1/10 + trek guide',blurb:'W-trek, glaciers & estancias.'}
};
const compA=document.getElementById('compA'),compB=document.getElementById('compB'),tripLen=document.getElementById('tripLen');
function renderCol(el,key){const d=DATA[key];el.innerHTML='<img src="'+d.img+'" alt="'+d.name+'"><span class="eyebrow">'+d.blurb+'</span><h3 style="font-size:26px;margin-top:10px">'+d.name+'</h3><table class="compare-table"><tr><th>Avg. Flight</th><td><strong>$'+d.flight+'</strong> return</td></tr><tr><th>Daily base</th><td>$'+d.daily+' / day</td></tr><tr><th>Best season</th><td>'+d.best+'</td></tr><tr><th>Visa (US)</th><td>'+d.visa+'</td></tr><tr><th>Flight time</th><td>'+d.flytime+'</td></tr><tr><th>Solo safety</th><td>⭐ '+d.safety+'</td></tr></table><button class="btn btn-ghost" style="width:100%;margin-top:16px" onclick="showToast(\'Exploring '+d.name+' guide — 7-day itinerary loaded!\')">Explore Destination</button>'}
function updateBudget(){const a=DATA[compA.value],b=DATA[compB.value];const days=parseInt(tripLen.value);const daily=parseInt(document.getElementById('dailyRange').value);document.getElementById('dailyVal').textContent=daily;document.getElementById('styleLabel').textContent=daily<70?'Backpacker':daily<150?'Comfort':daily<210?'Premium':'Luxe';document.getElementById('nameA').textContent=a.name+' • '+days+' days';document.getElementById('nameB').textContent=b.name+' • '+days+' days';document.getElementById('totalA').textContent='$'+(a.flight+daily*days).toLocaleString();document.getElementById('totalB').textContent='$'+(b.flight+daily*days).toLocaleString()}
function refresh(){renderCol(document.getElementById('colA'),compA.value);renderCol(document.getElementById('colB'),compB.value);updateBudget()}
compA.onchange=refresh;compB.onchange=refresh;tripLen.onchange=updateBudget;document.getElementById('dailyRange').oninput=updateBudget;refresh();
</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:55:00.405Z",
  "url": "https://benchmark.aimac.invalid/7830254a1efdaffec3ed0255336ebb9206021b8051746f524bcc7c11f0405439.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": "summary-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure summary elements have discernible text",
      "help": "Summary elements must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "svg-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
      "help": "<svg> elements with an img role must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "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\"><i class=\"fa-brands fa-instagram\"></i></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\"><i class=\"fa-brands fa-instagram\"></i></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\"><i class=\"fa-brands fa-instagram\"></i></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\"><i class=\"fa-brands fa-instagram\"></i></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\"><i class=\"fa-brands fa-instagram\"></i></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": "<strong id=\"countdown\" style=\"color:#fff\">02:14:55</strong>",
          "target": [
            "#countdown"
          ]
        }
      ]
    },
    {
      "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=\"active\" data-tab=\"Stays\">Stays + Flights</button>",
          "target": [
            "button[data-tab=\"Stays\"]"
          ]
        }
      ]
    },
    {
      "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>See more. <em>Plan less stress.</em> Travel well.</h1>",
                  "target": [
                    "h1"
                  ]
                },
                {
                  "html": "<h3>Where to next?</h3>",
                  "target": [
                    ".search-card > h3"
                  ]
                },
                {
                  "html": "<h2>Guides written by people who actually live there</h2>",
                  "target": [
                    "#destinations > .container > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Kyoto, Japan</h3>",
                  "target": [
                    ".dest-card:nth-child(1) > .dest-body > h3"
                  ]
                },
                {
                  "html": "<h3>Santorini, Greece</h3>",
                  "target": [
                    ".dest-card:nth-child(2) > .dest-body > h3"
                  ]
                },
                {
                  "html": "<h3>Marrakech, Morocco</h3>",
                  "target": [
                    ".dest-card:nth-child(3) > .dest-body > h3"
                  ]
                },
                {
                  "html": "<h3>Bali, Indonesia</h3>",
                  "target": [
                    ".dest-card:nth-child(4) > .dest-body > h3"
                  ]
                },
                {
                  "html": "<h3>Reykjavik &amp; South Coast</h3>",
                  "target": [
                    ".dest-card:nth-child(5) > .dest-body > h3"
                  ]
                },
                {
                  "html": "<h3>Patagonia, Chile</h3>",
                  "target": [
                    ".dest-card:nth-child(6) > .dest-body > h3"
                  ]
                },
                {
                  "html": "<h2>Travel solo, never feel alone.</h2>",
                  "target": [
                    ".exp-content > h2"
                  ]
                },
                {
                  "html": "<h2>Real flight deals, refreshed hourly</h2>",
                  "target": [
                    ".deals-head > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>San Francisco \u2192 Tokyo</h3>",
                  "target": [
                    ".deal-card[data-cat=\"asia\"]:nth-child(1) > .deal-body > h3"
                  ]
                },
                {
                  "html": "<h3>New York \u2192 Athens</h3>",
                  "target": [
                    ".deal-card[data-cat=\"europe\"]:nth-child(2) > .deal-body > h3"
                  ]
                },
                {
                  "html": "<h3>Boston \u2192 Reykjavik</h3>",
                  "target": [
                    ".deal-card[data-cat=\"europe\"]:nth-child(3) > .deal-body > h3"
                  ]
                },
                {
                  "html": "<h3>Miami \u2192 Marrakech</h3>",
                  "target": [
                    "article[data-cat=\"africa\"] > .deal-body > h3"
                  ]
                },
                {
                  "html": "<h3>Los Angeles \u2192 Bali</h3>",
                  "target": [
                    ".deal-card[data-cat=\"asia\"]:nth-child(5) > .deal-body > h3"
                  ]
                },
                {
                  "html": "<h3>Dallas \u2192 Santiago + Torres</h3>",
                  "target": [
                    "article[data-cat=\"americas\"] > .deal-body > h3"
                  ]
                },
                {
                  "html": "<h2>Can\u2019t decide? Compare side-by-side</h2>",
                  "target": [
                    "#compare > .container > .section-head > h2"
                  ]
                },
                {
                  "html": "<h3>Destination Comparison Tool</h3>",
                  "target": [
                    ".tool-top > div > h3"
                  ]
                },
                {
                  "html": "<h3 style=\"font-size:26px;margin-top:10px\">Marrakech, Morocco</h3>",
                  "target": [
                    "#colA > h3"
                  ]
                },
                {
                  "html": "<h3 style=\"font-size:26px;margin-top:10px\">Kyoto, Japan</h3>",
                  "target": [
                    "#colB > h3"
                  ]
                },
                {
                  "html": "<h4 style=\"font-family:'Fraunces',serif;font-size:22px;margin-bottom:8px\">Estimate your total budget</h4>",
                  "target": [
                    ".budget-box > div:nth-child(1) > h4"
                  ]
                },
                {
                  "html": "<h2>From \u201csomeday\u201d to booked in three steps</h2>",
                  "target": [
                    "#guides > .container > .section-head > h2"
                  ]
                },
                {
                  "html": "<h4>Tell us your style</h4>",
                  "target": [
                    ".step:nth-child(1) > h4"
                  ]
                },
                {
                  "html": "<h4>Get your itinerary</h4>",
                  "target": [
                    ".step:nth-child(2) > h4"
                  ]
                },
                {
                  "html": "<h4>Book &amp; go protected</h4>",
                  "target": [
                    ".step:nth-child(3) > h4"
                  ]
                },
                {
                  "html": "<h4 style=\"font-family:'Fraunces',serif;font-size:20px\">Sample: 7 days in Kyoto \u2014 $1,840 pp</h4>",
                  "target": [
                    "div:nth-child(3) > div > h4"
                  ]
                },
                {
                  "html": "<h4>\ud83d\udd14 Deal Alerts \u2014 never miss a fare drop</h4>",
                  "target": [
                    ".dark > h4"
                  ]
                },
                {
                  "html": "<h4>\ud83d\udec2 Visa snapshot</h4>",
                  "target": [
                    ".side-card:nth-child(2) > h4"
                  ]
                },
                {
                  "html": "<h4>\ud83c\udf92 5 travel hacks this week</h4>",
                  "target": [
                    ".side-card:nth-child(3) > h4"
                  ]
                },
                {
                  "html": "<h2>Loved by first-timers and frequent flyers</h2>",
                  "target": [
                    "#stories > .container > .section-head > h2"
                  ]
                },
                {
                  "html": "<h2>Questions? Answers.</h2>",
                  "target": [
                    "#faq > .container > .section-head > h2"
                  ]
                },
                {
                  "html": "<h2 style=\"font-size:clamp(28px,3.5vw,42px);margin:12px 0\">Get $150 off your first custom itinerary</h2>",
                  "target": [
                    ".cta-banner > div > h2"
                  ]
                },
                {
                  "html": "<h5>Destinations</h5>",
                  "target": [
                    "div:nth-child(2) > h5"
                  ]
                },
                {
                  "html": "<h5>Company</h5>",
                  "target": [
                    "div:nth-child(3) > h5"
                  ]
                },
                {
                  "html": "<h5>Resources</h5>",
                  "target": [
                    "div:nth-child(4) > 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": "#d8e8ea",
                "bgColor": "#0d2228",
                "contrastRatio": 13.04,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has sufficient color contrast of 13.04"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<div>\u2708\ufe0f Fall Sale: Save up to 35% on flights + hotels \u2014 ends in <strong id=\"countdown\" style=\"color:#fff\">02:14:55</strong></div>",
          "target": [
            ".topbar-inner > div:nth-child(1)"
          ]
        }
      ]
    },
    {
      "id": "document-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag242",
        "TTv5",
        "TT12.a",
        "EN-301-549",
        "EN-9.2.4.2",
        "ACT"
      ],
      "description": "Ensure each HTML document contains a non-empty <title> element",
      "help": "Documents must have <title> element to aid in navigation",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "doc-has-title",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Document has a non-empty <title> element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "form-field-multiple-labels",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag332",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.3.3.2"
      ],
      "description": "Ensure form field does not have multiple label elements",
      "help": "Form field must not have multiple label elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "multiple-label",
              "data": null,
              "relatedNodes": [],
              "impact": "moderate",
              "message": "Form field does not have multiple label elements"
            }
          ],
          "impact": null,
          "html": "<select id=\"destSelect\"><option>Kyoto, Japan</option><option>Santorini, Greece</option><option>Marrakech, Morocco</option><option>Bali, Indonesia</option><option>Reykjavik, Iceland</option><option>Patagonia, Chile</option></select>",
          "target": [
            "#destSelect"
          ]
        }
      ]
    },
    {
      "id": "html-has-lang",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure every HTML document has a lang attribute",
      "help": "<html> element must have a lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-lang",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "The <html> element has a lang attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "html-lang-valid",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure the lang attribute of the <html> element has a valid value",
      "help": "<html> element must have a valid value for the lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "valid-lang",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Value of lang attribute is included in the list of valid languages"
            }
          ],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "TT7.b",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <img> elements have alternative text or a role of none or presentation",
      "help": "Images must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-alt",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has an alt attribute"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "alt-space-value",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has a valid alt attribute value"
            }
          ],
          "impact": null,
          "html": "<img src=\"https://placehold.co/120x120/0e4a53/ffffff?text=R&amp;font=poppins\" alt=\"Roamora logo\">",
          "target": [
            "img[alt=\"Roamora logo\"]"
          ]
        }
      ]
    },
    {
      "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 id=\"alertEmail\" type=\"email\" placeholder=\"you@email.com\" style=\"color:#000\">",
          "target": [
            "#alertEmail"
          ]
        }
      ]
    },
    {
      "id": "link-in-text-block",
      "impact": null,
      "tags": [
        "cat.color",
        "wcag2a",
        "wcag141",
        "TTv5",
        "TT13.a",
        "EN-301-549",
        "EN-9.1.4.1"
      ],
      "description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
      "help": "Links must be distinguishable without relying on color",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "link-in-text-block",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<p style=\"font-size:14px;color:#33565c\">Flights + machiya stay + JR Pass + tea ceremony, ramen tour, Nara deer park, and travel insurance. <a href=\"#\" style=\"font-weight:800;text-decoration:underline\">Download PDF sample \u2192</a></p>",
                  "target": [
                    ".two-col > div > div:nth-child(3) > div > p"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text in some way other than by color"
            },
            {
              "id": "link-in-text-block-style",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<p style=\"font-size:14px;color:#33565c\">Flights + machiya stay + JR Pass + tea ceremony, ramen tour, Nara deer park, and travel insurance. <a href=\"#\" style=\"font-weight:800;text-decoration:underline\">Download PDF sample \u2192</a></p>",
                  "target": [
                    ".two-col > div > div:nth-child(3) > div > p"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text by visual styling"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a href=\"#\" style=\"font-weight:800;text-decoration:underline\">Download PDF sample \u2192</a>",
          "target": [
            "p > a[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=\"#deals\">Claim offer</a>",
          "target": [
            "div:nth-child(2) > a[href$=\"#deals\"]"
          ]
        }
      ]
    },
    {
      "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=\"feature-list\">",
          "target": [
            ".feature-list"
          ]
        }
      ]
    },
    {
      "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><i class=\"fa-solid fa-shield-halved\"></i><span><strong>Safety-first curation.</strong> Every solo pick is scored on night-time walkability, verified reviews from solo women travelers, and on-ground support. Plus clear guidance on cultural etiquette and local emergency numbers.</span></li>",
          "target": [
            ".feature-list > li:nth-child(1)"
          ]
        }
      ]
    },
    {
      "id": "meta-viewport",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag2aa",
        "wcag144",
        "EN-301-549",
        "EN-9.1.4.4",
        "ACT"
      ],
      "description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
      "help": "Zooming and scaling must not be disabled",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "meta-viewport",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "<meta> tag does not disable zooming on mobile devices"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
          "target": [
            "meta[name=\"viewport\"]"
          ]
        }
      ]
    },
    {
      "id": "nested-interactive",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
      "help": "Interactive controls must not be nested",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "no-focusable-content",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element does not have focusable descendants"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<img src=\"https://placehold.co/120x120/0e4a53/ffffff?text=R&amp;font=poppins\" alt=\"Roamora logo\">",
          "target": [
            "img[alt=\"Roamora logo\"]"
          ]
        }
      ]
    },
    {
      "id": "target-size",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag22aa",
        "wcag258"
      ],
      "description": "Ensure touch targets have sufficient size and space",
      "help": "All touch targets must be 24px large, or leave sufficient space",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "target-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=\"#deals\">Claim offer</a>",
          "target": [
            "div:nth-child(2) > a[href$=\"#deals\"]"
          ]
        }
      ]
    },
    {
      "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": [
        {
          "any": [],
          "all": [
            {
              "id": "td-headers-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "The headers attribute is exclusively used to refer to other cells in the table"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<table class=\"compare-table\">",
          "target": [
            "#colA > table"
          ]
        }
      ]
    },
    {
      "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": [
        {
          "any": [],
          "all": [
            {
              "id": "th-has-data-cells",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "All table header cells refer to data cells"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<table class=\"compare-table\">",
          "target": [
            "#colA > table"
          ]
        }
      ]
    }
  ],
  "incomplete": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": null,
                "bgColor": null,
                "contrastRatio": 0,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "bold",
                "messageKey": "imgNode",
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<span class=\"eyebrow\" style=\"background:rgba(255,255,255,.95)\"><i class=\"fa-solid fa-compass\"></i> New: 2026 Slow Travel Report is live</span>",
                  "target": [
                    ".hero-inner > div:nth-child(1) > .eyebrow"
                  ]
                },
                {
                  "html": "<img src=\"https://picsum.photos/1600/900?random=101\" alt=\"Travel hero\">",
                  "target": [
                    "img[alt=\"Travel hero\"]"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element's background color could not be determined because element contains an image node"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span class=\"eyebrow\" style=\"background:rgba(255,255,255,.95)\"><i class=\"fa-solid fa-compass\"></i> New: 2026 Slow Travel Report is live</span>",
          "target": [
            ".hero-inner > div:nth-child(1) > .eyebrow"
          ],
          "failureSummary": "Fix any of the following:\n  Element's background color could not be determined because element contains an image node"
        }
      ]
    }
  ],
  "violations": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<a href=\"#deals\" class=\"btn btn-primary nav-cta\">Book Adventure <i class=\"fa-solid fa-arrow-right\"></i></a>",
                  "target": [
                    ".nav-cta"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<a href=\"#deals\" class=\"btn btn-primary nav-cta\">Book Adventure <i class=\"fa-solid fa-arrow-right\"></i></a>",
          "target": [
            ".nav-cta"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#5b7378",
                "bgColor": "#f3ece0",
                "contrastRatio": 4.29,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"search-tabs\"><button class=\"active\" data-tab=\"Stays\">Stays + Flights</button><button data-tab=\"Guides\">Guides</button><button data-tab=\"Solo\">Solo Travel</button></div>",
                  "target": [
                    ".search-tabs"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.29 (foreground color: #5b7378, background color: #f3ece0, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button data-tab=\"Guides\">Guides</button>",
          "target": [
            "button[data-tab=\"Guides\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.29 (foreground color: #5b7378, background color: #f3ece0, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#5b7378",
                "bgColor": "#f3ece0",
                "contrastRatio": 4.29,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"search-tabs\"><button class=\"active\" data-tab=\"Stays\">Stays + Flights</button><button data-tab=\"Guides\">Guides</button><button data-tab=\"Solo\">Solo Travel</button></div>",
                  "target": [
                    ".search-tabs"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.29 (foreground color: #5b7378, background color: #f3ece0, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button data-tab=\"Solo\">Solo Travel</button>",
          "target": [
            "button[data-tab=\"Solo\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.29 (foreground color: #5b7378, background color: #f3ece0, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" onclick=\"showToast('\u2728 Found 24 itineraries + 11 flight deals for your dates! Scroll to explore.')\">Plan Itinerary <i class=\"fa-solid fa-route\"></i></button>",
                  "target": [
                    ".search-foot > .btn-primary.btn"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" onclick=\"showToast('\u2728 Found 24 itineraries + 11 flight deals for your dates! Scroll to explore.')\">Plan Itinerary <i class=\"fa-solid fa-route\"></i></button>",
          "target": [
            ".search-foot > .btn-primary.btn"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#8a9ca0",
                "bgColor": "#ffffff",
                "contrastRatio": 2.85,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"press\"><div class=\"press-inner\"><span>As featured in</span><span>Cond\u00e9 Wander \u2022 Lonely Earth \u2022 Travel+Leisure \u2022 AFAR \u2022 Skift</span><span style=\"color:#0e4a53\">\u2605 \u2605 \u2605 \u2605 \u2605 4.9 on TrustPilot</span></div></div>",
                  "target": [
                    ".press"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.85 (foreground color: #8a9ca0, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span>As featured in</span>",
          "target": [
            ".press-inner > span:nth-child(1)"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.85 (foreground color: #8a9ca0, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#8a9ca0",
                "bgColor": "#ffffff",
                "contrastRatio": 2.85,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"press\"><div class=\"press-inner\"><span>As featured in</span><span>Cond\u00e9 Wander \u2022 Lonely Earth \u2022 Travel+Leisure \u2022 AFAR \u2022 Skift</span><span style=\"color:#0e4a53\">\u2605 \u2605 \u2605 \u2605 \u2605 4.9 on TrustPilot</span></div></div>",
                  "target": [
                    ".press"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.85 (foreground color: #8a9ca0, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span>Cond\u00e9 Wander \u2022 Lonely Earth \u2022 Travel+Leisure \u2022 AFAR \u2022 Skift</span>",
          "target": [
            ".press-inner > span:nth-child(2)"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.85 (foreground color: #8a9ca0, background color: #ffffff, font size: 9.8pt (13px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<a href=\"#planner\" class=\"btn btn-primary\">Book Adventure</a>",
                  "target": [
                    ".btn-primary.btn[href$=\"#planner\"]"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<a href=\"#planner\" class=\"btn btn-primary\">Book Adventure</a>",
          "target": [
            ".btn-primary.btn[href$=\"#planner\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#9aaeb2",
                "bgColor": "#ffffff",
                "contrastRatio": 2.31,
                "fontSize": "10.5pt (14px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<article class=\"deal-card\" data-cat=\"asia\">",
                  "target": [
                    ".deal-card[data-cat=\"asia\"]:nth-child(1)"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<s>$1,102</s>",
          "target": [
            ".deal-card[data-cat=\"asia\"]:nth-child(1) > .deal-body > .deal-price > span > s"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on SFO \u2192 Tokyo $642! Check email to confirm.')\">Book</button>",
                  "target": [
                    ".deal-card[data-cat=\"asia\"]:nth-child(1) > .deal-body > .deal-price > .btn-primary.btn"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on SFO \u2192 Tokyo $642! Check email to confirm.')\">Book</button>",
          "target": [
            ".deal-card[data-cat=\"asia\"]:nth-child(1) > .deal-body > .deal-price > .btn-primary.btn"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#9aaeb2",
                "bgColor": "#ffffff",
                "contrastRatio": 2.31,
                "fontSize": "10.5pt (14px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<article class=\"deal-card\" data-cat=\"europe\">",
                  "target": [
                    ".deal-card[data-cat=\"europe\"]:nth-child(2)"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<s>$689</s>",
          "target": [
            ".deal-card[data-cat=\"europe\"]:nth-child(2) > .deal-body > .deal-price > span > s"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on JFK \u2192 Athens $489!')\">Book</button>",
                  "target": [
                    ".deal-card[data-cat=\"europe\"]:nth-child(2) > .deal-body > .deal-price > .btn-primary.btn"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on JFK \u2192 Athens $489!')\">Book</button>",
          "target": [
            ".deal-card[data-cat=\"europe\"]:nth-child(2) > .deal-body > .deal-price > .btn-primary.btn"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#9aaeb2",
                "bgColor": "#ffffff",
                "contrastRatio": 2.31,
                "fontSize": "10.5pt (14px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<article class=\"deal-card\" data-cat=\"europe\">",
                  "target": [
                    ".deal-card[data-cat=\"europe\"]:nth-child(3)"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<s>$610</s>",
          "target": [
            ".deal-card[data-cat=\"europe\"]:nth-child(3) > .deal-body > .deal-price > span > s"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on BOS \u2192 Reykjavik $398!')\">Book</button>",
                  "target": [
                    ".deal-card[data-cat=\"europe\"]:nth-child(3) > .deal-body > .deal-price > .btn-primary.btn"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on BOS \u2192 Reykjavik $398!')\">Book</button>",
          "target": [
            ".deal-card[data-cat=\"europe\"]:nth-child(3) > .deal-body > .deal-price > .btn-primary.btn"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#9aaeb2",
                "bgColor": "#ffffff",
                "contrastRatio": 2.31,
                "fontSize": "10.5pt (14px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<article class=\"deal-card\" data-cat=\"africa\">",
                  "target": [
                    "article[data-cat=\"africa\"]"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<s>$634</s>",
          "target": [
            "article[data-cat=\"africa\"] > .deal-body > .deal-price > span > s"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on MIA \u2192 Marrakech $412!')\">Book</button>",
                  "target": [
                    "article[data-cat=\"africa\"] > .deal-body > .deal-price > .btn-primary.btn"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on MIA \u2192 Marrakech $412!')\">Book</button>",
          "target": [
            "article[data-cat=\"africa\"] > .deal-body > .deal-price > .btn-primary.btn"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#9aaeb2",
                "bgColor": "#ffffff",
                "contrastRatio": 2.31,
                "fontSize": "10.5pt (14px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<article class=\"deal-card\" data-cat=\"asia\">",
                  "target": [
                    ".deal-card[data-cat=\"asia\"]:nth-child(5)"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<s>$1,240</s>",
          "target": [
            ".deal-card[data-cat=\"asia\"]:nth-child(5) > .deal-body > .deal-price > span > s"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on LAX \u2192 Bali $718!')\">Book</button>",
                  "target": [
                    ".deal-card[data-cat=\"asia\"]:nth-child(5) > .deal-body > .deal-price > .btn-primary.btn"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on LAX \u2192 Bali $718!')\">Book</button>",
          "target": [
            ".deal-card[data-cat=\"asia\"]:nth-child(5) > .deal-body > .deal-price > .btn-primary.btn"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#9aaeb2",
                "bgColor": "#ffffff",
                "contrastRatio": 2.31,
                "fontSize": "10.5pt (14px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<article class=\"deal-card\" data-cat=\"americas\">",
                  "target": [
                    "article[data-cat=\"americas\"]"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<s>$1,180</s>",
          "target": [
            "article[data-cat=\"americas\"] > .deal-body > .deal-price > span > s"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 2.31 (foreground color: #9aaeb2, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on DFW \u2192 Patagonia $892!')\">Book</button>",
                  "target": [
                    "article[data-cat=\"americas\"] > .deal-body > .deal-price > .btn-primary.btn"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" style=\"padding:12px 20px\" onclick=\"showToast('Hold placed on DFW \u2192 Patagonia $892!')\">Book</button>",
          "target": [
            "article[data-cat=\"americas\"] > .deal-body > .deal-price > .btn-primary.btn"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" style=\"width:100%;margin-top:14px\" onclick=\"showToast('Itinerary draft sent! Check your inbox for full cost breakdown.')\">Plan Itinerary with these numbers</button>",
                  "target": [
                    ".budget-output > .btn-primary.btn"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" style=\"width:100%;margin-top:14px\" onclick=\"showToast('Itinerary draft sent! Check your inbox for full cost breakdown.')\">Plan Itinerary with these numbers</button>",
          "target": [
            ".budget-output > .btn-primary.btn"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#fefefd",
                "bgColor": "#faf6ef",
                "contrastRatio": 1.06,
                "fontSize": "10.5pt (14px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body>",
                  "target": [
                    "body"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 1.06 (foreground color: #fefefd, background color: #faf6ef, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p>Get WhatsApp + email alerts when your route drops 20%+ below average. Free forever.</p>",
          "target": [
            ".dark > p"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 1.06 (foreground color: #fefefd, background color: #faf6ef, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#ffffff",
                "bgColor": "#ff5a5f",
                "contrastRatio": 3.05,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "bold",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<button class=\"btn btn-primary\" style=\"padding:12px 18px\" onclick=\"subscribeAlert()\">Join</button>",
                  "target": [
                    "button[onclick=\"subscribeAlert()\"]"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<button class=\"btn btn-primary\" style=\"padding:12px 18px\" onclick=\"subscribeAlert()\">Join</button>",
          "target": [
            "button[onclick=\"subscribeAlert()\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color: #ff5a5f, font size: 11.3pt (15px), font weight: bold). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#fefcfa",
                "bgColor": "#faf6ef",
                "contrastRatio": 1.05,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body>",
                  "target": [
                    "body"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 1.05 (foreground color: #fefcfa, background color: #faf6ef, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<small style=\"font-size:12px;opacity:.7\">Join 84,200 smart bookers \u2022 Unsubscribe anytime</small>",
          "target": [
            ".dark > small"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 1.05 (foreground color: #fefcfa, background color: #faf6ef, font size: 9.0pt (12px), 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=\"range\" id=\"dailyRange\" min=\"45\" max=\"280\" value=\"110\">",
          "target": [
            "#dailyRange"
          ],
          "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 id=\"destSelect\"><option>Kyoto, Japan</option><option>Santorini, Greece</option><option>Marrakech, Morocco</option><option>Bali, Indonesia</option><option>Reykjavik, Iceland</option><option>Patagonia, Chile</option></select>",
          "target": [
            "#destSelect"
          ],
          "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>Oct 2026</option><option>Nov 2026</option><option>Dec 2026</option><option>Jan 2027</option><option>Flexible</option></select>",
          "target": [
            ".search-grid > .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><option>2 adults</option><option>1 adult \u2022 Solo</option><option>2 adults + 1 child</option><option>Group 4+</option></select>",
          "target": [
            ".search-grid > .field:nth-child(3) > 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>Culture + Food</option><option>Adventure</option><option>Relaxation</option><option>Luxury</option><option>Budget smart</option></select>",
          "target": [
            ".field:nth-child(4) > 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=\"compA\">",
          "target": [
            "#compA"
          ],
          "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=\"compB\">",
          "target": [
            "#compB"
          ],
          "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=\"tripLen\"><option value=\"5\">5 days</option><option value=\"7\" selected=\"\">7 days</option><option value=\"10\">10 days</option><option value=\"14\">14 days</option></select>",
          "target": [
            "#tripLen"
          ],
          "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": 11397
      },
      {
        "y": 576,
        "height": 11397
      },
      {
        "y": 1152,
        "height": 11397
      },
      {
        "y": 1728,
        "height": 11397
      },
      {
        "y": 2304,
        "height": 11397
      },
      {
        "y": 2880,
        "height": 11397
      },
      {
        "y": 3456,
        "height": 11397
      },
      {
        "y": 4032,
        "height": 11397
      },
      {
        "y": 4608,
        "height": 11397
      },
      {
        "y": 5184,
        "height": 11397
      },
      {
        "y": 5760,
        "height": 11397
      },
      {
        "y": 6336,
        "height": 11397
      },
      {
        "y": 6912,
        "height": 11397
      },
      {
        "y": 7488,
        "height": 11397
      },
      {
        "y": 8064,
        "height": 11397
      },
      {
        "y": 8640,
        "height": 11397
      },
      {
        "y": 9216,
        "height": 11397
      },
      {
        "y": 9792,
        "height": 11397
      },
      {
        "y": 10368,
        "height": 11397
      },
      {
        "y": 10677,
        "height": 11397
      }
    ],
    "scans": 21,
    "max_states": 512,
    "settle_ms": 5000,
    "page_timeout_seconds": 150,
    "layout_stability": "consecutive 100ms size samples within one CSS pixel",
    "animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
    "interactive_states": "not exercised",
    "horizontal_scroll": "not exercised"
  }
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "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: "Experiences", "Flights", "Contact".
-   **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: "Destination Guides", "Flight Deals", "Solo Travel".
    -   **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "cultural etiquette", "travel insurance", "itinerary".
    -   **Visuals:** Integrate relevant placeholder images logically within the content sections.
    -   **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Plan Itinerary", "Book Adventure", "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: "destination comparison".
-   **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "deal alerts", "travel hacks", "visa info".
-   **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.