OpenAI GPT 6.1 Sol Pro – Travel

via OpenAI · Generated

  • AIMAC Debt 3.85
  • Cost $0.37
  • Total Violations 7
  • HTML Size 51 KB
  • Em Dashes 7

Screenshot

View OpenAI GPT 6.1 Sol Pro Travel page View Live Page

Accessibility Issues Found

7 Serious

  • color-contrast serious 7 instances

    Elements must meet minimum color contrast ratio thresholds

    Example HTML <span class="tip-number">01</span>

Artifacts

View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#173d32">
<meta name="description" content="Travel a little further with Elsewhere. Discover thoughtful destination guides, independent stays, flight-search tips, and a personal itinerary builder.">
<title>Elsewhere — Go further. Travel better.</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Playfair+Display:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
:root{--paper:#faf8f2;--white:#fff;--green:#173d32;--sage:#e5ebdf;--ink:#252c28;--muted:#657068;--line:#dedfd5;--orange:#da653d;--serif:"Playfair Display",Georgia,serif;--sans:"DM Sans",Arial,sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.65}button,input,select{font:inherit}button,a,input,select{ -webkit-tap-highlight-color:transparent}a{color:inherit}button{cursor:pointer}img{display:block;width:100%;object-fit:cover}h1,h2,h3,p{margin-top:0}h1,h2,h3{line-height:1.15}h1,h2{font-family:var(--serif);font-weight:500}h1{font-size:clamp(48px,5.6vw,78px);letter-spacing:-3px}h2{font-size:clamp(34px,3.5vw,48px);letter-spacing:-1.5px}h3{font-size:21px}p{margin-bottom:18px}a{text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:5px}:focus-visible{outline:3px solid var(--orange);outline-offset:5px}.container{max-width:1200px;margin:auto;padding:0 32px}.eyebrow{font-size:11px;font-weight:700;letter-spacing:2.2px;text-transform:uppercase;color:var(--green);display:block;margin-bottom:16px}.muted{color:var(--muted)}.btn{border:1px solid var(--green);border-radius:5px;background:var(--green);color:white;padding:13px 22px;font-size:13px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:18px;text-decoration:none;transition:background .2s,transform .2s}.btn:hover{background:#285644;transform:translateY(-2px);text-decoration:none}.btn.outline{background:transparent;color:var(--green)}.btn.outline:hover{background:var(--sage)}.text-link{font-size:13px;font-weight:700;display:inline-flex;gap:18px;align-items:center;color:var(--green)}.section{padding:88px 0}.section-top{display:flex;align-items:flex-end;justify-content:space-between;gap:32px;margin-bottom:35px}.section-top h2{margin-bottom:15px}.section-top p{max-width:560px;color:var(--muted);margin-bottom:0}.pill{display:inline-block;padding:5px 11px;border-radius:30px;font-size:10px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;background:var(--sage);color:var(--green)}.skip{position:absolute;left:15px;top:-100px;background:white;padding:12px;z-index:100}.skip:focus{top:10px}
.announcement{background:var(--green);color:#edf2e8;text-align:center;font-size:11px;letter-spacing:.5px;padding:9px 15px}.announcement span{color:#d8b489}.header{background:rgba(250,248,242,.97);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.header-inner{height:88px;display:flex;align-items:center;justify-content:space-between;gap:25px}.brand{display:flex;align-items:center;gap:10px}.brand:hover{text-decoration:none}.brand img{width:36px;height:36px;border-radius:50%}.brand-name{font-family:var(--serif);font-weight:600;font-size:26px;line-height:1.1;letter-spacing:-1px}.brand-tag{font-size:9px;letter-spacing:1.5px;text-transform:uppercase;margin-top:5px;color:var(--muted)}.nav{display:flex;align-items:center;gap:24px;font-size:12px;font-weight:600}.menu-toggle{display:none;border:1px solid var(--line);background:transparent;padding:8px 12px;border-radius:4px}
.hero{padding:58px 0 55px}.hero-grid{display:grid;grid-template-columns:1fr 1.08fr;gap:60px;align-items:center}.hero h1{margin-bottom:24px}.hero h1 em{font-weight:400;color:var(--green)}.hero-copy>p{color:var(--muted);max-width:420px;font-size:16px;line-height:1.8}.hero-actions{display:flex;gap:25px;align-items:center;margin:30px 0 36px}.hero-proof{display:flex;gap:13px;align-items:center;font-size:11px;color:var(--muted)}.avatars{display:flex;padding-left:5px}.avatars img{width:32px;height:32px;border-radius:50%;border:2px solid var(--paper);margin-left:-5px}.hero-proof strong{display:block;color:var(--green);font-size:12px}.hero-visual{position:relative;padding-bottom:22px}.hero-visual>img{height:540px;border-radius:150px 150px 8px 8px;filter:brightness(.86)}.photo-caption{position:absolute;bottom:53px;left:28px;color:white;font-size:11px}.photo-caption strong{display:block;font-family:var(--serif);font-size:25px;font-weight:500;margin-bottom:3px}.hero-note{position:absolute;right:-17px;top:35px;background:var(--paper);border:1px solid var(--line);width:110px;height:110px;border-radius:50%;display:flex;align-items:center;justify-content:center;text-align:center;transform:rotate(10deg);font-size:10px;letter-spacing:1px;color:var(--green)}.hero-note b{font-family:var(--serif);font-size:24px;display:block;font-weight:500;letter-spacing:0}.image-credit{font-size:9px;color:var(--muted);text-align:right;position:absolute;bottom:0;right:0}
.values{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.values-inner{display:grid;grid-template-columns:repeat(3,1fr);padding-top:25px;padding-bottom:25px;gap:35px}.value{display:flex;align-items:center;gap:16px}.value-symbol{font-size:26px;color:var(--green)}.value strong{font-size:12px;display:block}.value p{font-size:11px;color:var(--muted);margin:2px 0 0}
.tabs{display:flex;gap:8px;margin-bottom:26px;flex-wrap:wrap}.tab{background:transparent;border:1px solid var(--line);border-radius:25px;padding:8px 18px;font-size:12px;color:var(--muted)}.tab.active{background:var(--green);border-color:var(--green);color:white}.destination-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.destination{background:white;border:1px solid var(--line);border-radius:8px;overflow:hidden}.destination-photo{position:relative}.destination-photo img{height:255px;transition:transform .5s}.destination:hover .destination-photo img{transform:scale(1.03)}.destination-photo{overflow:hidden}.destination-photo .pill{position:absolute;top:16px;left:16px;background:var(--paper)}.destination-body{padding:24px}.destination-body .location{font-size:10px;letter-spacing:1.5px;color:var(--muted);text-transform:uppercase;margin-bottom:8px}.destination h3{font-family:var(--serif);font-size:27px;font-weight:500;margin-bottom:13px}.destination p{font-size:13px;color:var(--muted);min-height:84px}.card-bottom{border-top:1px solid var(--line);padding-top:16px;display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:10px;color:var(--muted)}.link-button{border:0;background:none;padding:0;color:var(--green);font-weight:700;font-size:12px}.link-button:hover{text-decoration:underline}
.planner-section{background:var(--sage)}.planner-grid{display:grid;grid-template-columns:.85fr 1.15fr;gap:75px;align-items:start}.planner-copy h2{max-width:380px}.planner-copy p{color:#556459}.planner-list{list-style:none;padding:0;margin:27px 0 0}.planner-list li{padding:9px 0;font-size:12px;display:flex;gap:12px}.planner-list span{color:var(--green);font-weight:bold}.planner-card{background:white;border-radius:10px;padding:30px;box-shadow:0 10px 35px #173d3208}.form-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.form-heading h3{font-size:18px;margin:0}.form-heading span{font-size:10px;color:var(--muted)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}label{display:block;font-size:11px;font-weight:700;margin-bottom:7px}select,input{width:100%;border:1px solid var(--line);border-radius:4px;background:var(--paper);padding:12px;color:var(--ink);min-width:0}.planner-card .btn{width:100%;margin-top:24px}.fine-print{font-size:10px;color:var(--muted);margin:11px 0 0}.plan-result{border-top:1px solid var(--line);padding-top:20px;margin-top:24px}.plan-result h4{font-family:var(--serif);font-size:23px;margin:0 0 10px}.plan-result p,.plan-result li{font-size:12px}.plan-result ol{padding-left:20px}.plan-result .btn{margin-top:8px;width:auto}.plan-result[hidden]{display:none}
.deals-grid{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}.deal-photo{position:relative}.deal-photo img{height:430px;border-radius:8px}.floating-card{position:absolute;bottom:24px;left:24px;right:24px;background:var(--paper);padding:20px;border-radius:5px;display:flex;justify-content:space-between;align-items:center}.floating-card small{display:block;color:var(--muted);font-size:10px}.floating-card strong{font-family:var(--serif);font-weight:500;font-size:24px}.deal-copy>p{color:var(--muted);font-size:14px}.tips{border-top:1px solid var(--line);margin:24px 0}.tip{display:flex;gap:17px;padding:17px 0;border-bottom:1px solid var(--line)}.tip-number{font-family:var(--serif);color:var(--orange);font-size:22px}.tip strong{font-size:12px;display:block}.tip p{font-size:12px;color:var(--muted);margin:4px 0 0}
.stays{background:#f0eee6}.stays-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:25px}.stay-photo{position:relative;min-height:420px}.stay-photo img{height:100%;position:absolute;border-radius:8px}.stay-photo .overlay{position:absolute;inset:0;border-radius:8px;background:linear-gradient(transparent 25%,#11261fe0)}.stay-caption{position:absolute;bottom:30px;left:30px;right:30px;color:white}.stay-caption h3{font-family:var(--serif);font-size:32px;font-weight:500;margin:12px 0}.stay-caption p{font-size:12px;max-width:410px;color:#f0f2e9}.stay-caption .text-link{color:white}.stay-notes{display:flex;flex-direction:column;gap:16px}.stay-note{background:var(--paper);border:1px solid var(--line);border-radius:7px;padding:25px;flex:1}.stay-note h3{font-family:var(--serif);font-size:25px;font-weight:500;margin:12px 0}.stay-note p{font-size:13px;color:var(--muted)}.stay-note .meta{font-size:11px;color:var(--muted);margin-bottom:15px}
.guide-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}.guide img{height:205px;border-radius:6px;margin-bottom:20px}.guide .eyebrow{font-size:9px;margin-bottom:10px}.guide h3{font-family:var(--serif);font-size:24px;font-weight:500;margin-bottom:12px}.guide p{color:var(--muted);font-size:13px}.guide .reading{font-size:10px;color:var(--muted);margin-top:15px}
.about{background:var(--green);color:var(--paper)}.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:85px}.about .eyebrow{color:#c6d3b8}.about h2{max-width:420px}.about p{font-size:14px;color:#c6d3c9}.about .text-link{color:#fff}.principles{display:grid;grid-template-columns:1fr 1fr;gap:25px;margin-top:28px}.principles strong{font-family:var(--serif);font-size:25px;font-weight:400;display:block}.principles span{font-size:11px;color:#c6d3c9}
.faq-grid{display:grid;grid-template-columns:.7fr 1.3fr;gap:70px}.faq-intro p{color:var(--muted);font-size:13px}details{border-bottom:1px solid var(--line);padding:21px 0}details:first-child{border-top:1px solid var(--line)}summary{font-size:14px;font-weight:600;cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:20px}summary::-webkit-details-marker{display:none}summary:after{content:"+";color:var(--green);font-size:20px;line-height:1}details[open] summary:after{content:"−"}details p{font-size:13px;color:var(--muted);margin:16px 25px 0 0}
.newsletter{padding:0 0 80px}.newsletter-box{border:1px solid var(--line);border-radius:8px;background:#efe9db;padding:42px;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}.newsletter h2{font-size:33px;margin-bottom:12px}.newsletter p{font-size:13px;color:var(--muted);margin-bottom:0}.email-row{display:flex;gap:10px}.email-row input{background:var(--paper)}.email-row .btn{white-space:nowrap}.newsletter .fine-print{font-size:10px;margin-top:10px}.newsletter-status{margin-top:10px!important;color:var(--green)!important}
footer{border-top:1px solid var(--line);padding:45px 0 23px}.footer-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1.2fr;gap:35px}.footer-brand p{max-width:260px;font-size:12px;color:var(--muted);margin-top:17px}.footer-title{font-size:11px;font-weight:bold;margin-bottom:15px}.footer-links{display:flex;flex-direction:column;gap:8px;font-size:12px;color:var(--muted)}.footer-bottom{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding-top:20px;margin-top:38px;font-size:10px;color:var(--muted)}.legal-links{display:flex;gap:18px}.legal-links button{font-size:10px;font-weight:400;color:var(--muted)}
dialog{border:0;border-radius:12px;padding:0;width:min(620px,calc(100% - 32px));max-height:85vh;color:var(--ink);background:var(--paper);box-shadow:0 25px 80px #0003}dialog::backdrop{background:#10271f99;backdrop-filter:blur(4px)}.dialog-inner{padding:35px}.dialog-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.dialog-top .eyebrow{margin:0}.close{border:1px solid var(--line);border-radius:50%;background:transparent;width:34px;height:34px;font-size:20px}.dialog-inner h2{font-size:34px}.dialog-inner p,.dialog-inner li{font-size:14px;color:var(--muted)}.dialog-inner h3{font-size:17px;margin-top:25px}.dialog-inner ul{padding-left:20px}.comparison{border-collapse:collapse;width:100%;font-size:12px;margin:20px 0}.comparison th,.comparison td{text-align:left;padding:12px 8px;border-bottom:1px solid var(--line)}
@media(min-width:1450px){.container{max-width:1280px}.hero-visual>img{height:580px}}
@media(max-width:1000px){.nav{gap:14px;font-size:11px}.hero-grid{gap:35px}.hero-visual>img{height:490px}.hero h1{font-size:60px}.hero-actions{gap:15px}.planner-grid{gap:35px}.deals-grid{gap:35px}.about-grid{gap:45px}.destination-body{padding:18px}.card-bottom{align-items:flex-start;flex-direction:column}.newsletter-box{gap:30px;padding:30px}}
@media(max-width:760px){.container{padding:0 22px}.announcement{font-size:10px}.header-inner{height:73px}.brand-name{font-size:24px}.menu-toggle{display:block}.nav{display:none;position:absolute;top:73px;left:0;right:0;background:var(--paper);padding:20px 24px;border-bottom:1px solid var(--line);flex-direction:column;align-items:flex-start;gap:18px;font-size:14px}.nav.open{display:flex}.hero{padding:35px 0}.hero-grid{grid-template-columns:1fr;gap:30px}.hero h1{font-size:58px;letter-spacing:-2px;max-width:500px}.hero-copy>p{max-width:100%}.hero-actions{margin:25px 0}.hero-visual>img{height:390px;border-radius:100px 100px 8px 8px}.hero-note{right:0;width:90px;height:90px;top:18px}.values-inner{grid-template-columns:1fr;gap:18px;padding-top:22px;padding-bottom:22px}.section{padding:58px 0}.section-top{align-items:flex-start;flex-direction:column;gap:18px}.destination-grid{grid-template-columns:1fr}.destination-photo img{height:280px}.destination p{min-height:0}.card-bottom{flex-direction:row;align-items:center}.planner-grid,.deals-grid,.stays-grid,.about-grid,.faq-grid,.newsletter-box{grid-template-columns:1fr;gap:30px}.planner-card{padding:23px}.planner-copy h2{max-width:100%}.deal-photo img{height:350px}.stay-photo{min-height:400px}.guide-grid{grid-template-columns:1fr;gap:35px}.guide img{height:260px}.about-grid{gap:25px}.newsletter{padding-bottom:55px}.newsletter-box{padding:25px}.footer-grid{grid-template-columns:1fr 1fr;gap:30px}.footer-brand{grid-column:1/-1}.footer-bottom{flex-direction:column;gap:12px}.dialog-inner{padding:25px}.comparison{font-size:11px}}
@media(max-width:380px){.hero h1{font-size:49px}.form-grid{grid-template-columns:1fr}.email-row{flex-direction:column}.hero-actions{align-items:flex-start;flex-direction:column}.footer-grid{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important}}
@media print{header,.announcement,footer,.newsletter,.menu-toggle,dialog,.hero-actions,.tabs{display:none}.section{padding:25px 0}.planner-card{box-shadow:none}.hero-visual>img{height:250px}body{background:white}.container{max-width:100%}}
</style>
</head>
<body>
<a class="skip" href="#main">Skip to content</a>
<div class="announcement">Less scrolling. More exploring. <span>Meet your next great escape.</span></div>
<header class="header">
<div class="container header-inner">
<a href="#home" class="brand" aria-label="Elsewhere home">
<img src="https://placehold.co/72x72/173d32/ffffff?text=e.&amp;font=lora" alt="Elsewhere logo" width="36" height="36">
<div><div class="brand-name">elsewhere.</div><div class="brand-tag">Go further. Travel better.</div></div>
</a>
<button class="menu-toggle" id="menuToggle" aria-expanded="false" aria-controls="primaryNav">Menu ☰</button>
<nav class="nav" id="primaryNav" aria-label="Primary navigation">
<a href="#destinations">Destinations</a><a href="#planner">Trip Planner</a><a href="#deals">Flight Deals</a><a href="#stays">Stays</a><a href="#guides">Guides</a><a href="#about">About</a>
</nav>
</div>
</header>
<main id="main">
<section class="hero" id="home">
<div class="container hero-grid">
<div class="hero-copy">
<span class="eyebrow">For the beautifully curious</span>
<h1>The world is<br>still full of<br><em>elsewhere.</em></h1>
<p>Take the side street. Stay another night. Find the places that stay with you, with thoughtful guides and practical tools for a better kind of travel.</p>
<div class="hero-actions"><a href="#destinations" class="btn">Find your elsewhere <span aria-hidden="true">↗</span></a><a href="#planner" class="text-link">Build a trip <span aria-hidden="true">→</span></a></div>
<div class="hero-proof">
<div class="avatars" aria-hidden="true"><img src="https://i.pravatar.cc/64?u=elsewhere-maya" alt=""><img src="https://i.pravatar.cc/64?u=elsewhere-jules" alt=""><img src="https://i.pravatar.cc/64?u=elsewhere-noah" alt=""></div>
<div><strong>Curiosity is better shared.</strong>For solo explorers, slow travelers & everyone in between.</div>
</div>
</div>
<div class="hero-visual">
<img src="https://picsum.photos/id/1018/900/1050" alt="A sweeping mountain valley framed by forest and distant peaks" fetchpriority="high" width="900" height="1050">
<div class="hero-note"><div>LESS ORDINARY<b>More alive.</b>GO ELSEWHERE</div></div>
<div class="photo-caption"><strong>A change of scenery.</strong>A fresh perspective is closer than you think.</div>
<span class="image-credit">Illustrative travel photography · Unsplash via Picsum</span>
</div>
</div>
</section>
<div class="values">
<div class="container values-inner">
<div class="value"><span class="value-symbol" aria-hidden="true">⌁</span><div><strong>Thoughtfully chosen, not endlessly listed</strong><p>Good places. Useful context. Less decision fatigue.</p></div></div>
<div class="value"><span class="value-symbol" aria-hidden="true">↗</span><div><strong>Your trip, your pace</strong><p>Flexible itineraries with room for the unexpected.</p></div></div>
<div class="value"><span class="value-symbol" aria-hidden="true">♧</span><div><strong>A lighter footprint</strong><p>Local stays, slower routes, meaningful experiences.</p></div></div>
</div>
</div>

<section class="section" id="destinations">
<div class="container">
<div class="section-top"><div><span class="eyebrow">Where will curiosity take you?</span><h2>Places worth getting lost in.</h2><p>Big landscapes, little discoveries, and neighborhoods with a story. Start with a mood, then find a destination that fits your season and your sense of adventure.</p></div><a class="text-link" href="#planner">Make it your itinerary <span aria-hidden="true">↗</span></a></div>
<div class="tabs" role="group" aria-label="Filter destinations">
<button class="tab active" data-filter="all" aria-pressed="true">All escapes</button>
<button class="tab" data-filter="nature" aria-pressed="false">Into nature</button>
<button class="tab" data-filter="culture" aria-pressed="false">Culture & city</button>
<button class="tab" data-filter="slow" aria-pressed="false">The slow lane</button>
</div>
<div class="destination-grid">
<article class="destination" data-category="nature">
<div class="destination-photo"><img src="https://picsum.photos/id/1015/650/480" alt="River winding through a dramatic mountain landscape" loading="lazy" width="650" height="480"><span class="pill">Into nature</span></div>
<div class="destination-body"><div class="location">Slovenia · Europe</div><h3>The quieter side of the Alps</h3><p>Follow the Soča Valley from riverside villages to high mountain trails. Pair an active morning with a long local lunch, and leave room for a lakeside detour.</p><div class="card-bottom"><span>7 days · Best May–September</span><button class="link-button" data-story="slovenia">Explore guide ↗</button></div></div>
</article>
<article class="destination" data-category="culture">
<div class="destination-photo"><img src="https://picsum.photos/id/1040/650/480" alt="Historic stone architecture surrounded by greenery" loading="lazy" width="650" height="480"><span class="pill">Culture & city</span></div>
<div class="destination-body"><div class="location">Portugal · Europe</div><h3>Porto, one street at a time</h3><p>Azulejo-lined streets, independent cafés, and late afternoons on the Douro. Our city itinerary balances the celebrated sights with everyday neighborhood life.</p><div class="card-bottom"><span>4 days · Best April–October</span><button class="link-button" data-story="porto">Explore guide ↗</button></div></div>
</article>
<article class="destination" data-category="slow">
<div class="destination-photo"><img src="https://picsum.photos/id/1016/650/480" alt="Quiet mountain scenery with layered hills and open sky" loading="lazy" width="650" height="480"><span class="pill">The slow lane</span></div>
<div class="destination-body"><div class="location">Japan · Asia</div><h3>A little further into Japan</h3><p>Beyond the big-city rush, the Kiso Valley invites you to walk old forest paths and linger in post towns. Think small inns, seasonal food, and fewer daily stops.</p><div class="card-bottom"><span>6 days · Best April–November</span><button class="link-button" data-story="japan">Explore guide ↗</button></div></div>
</article>
</div>
<p class="fine-print">Photography is illustrative; destination guides describe the places, not the pictured locations.</p>
</div>
</section>

<section class="section planner-section" id="planner">
<div class="container planner-grid">
<div class="planner-copy"><span class="eyebrow">A little planning. A lot of possibility.</span><h2>Your next trip starts right here.</h2><p>No twenty-tab research session required. Tell us where you're drawn to, how long you have, and how you like to travel. We'll turn that into a practical starting itinerary.</p><p>Our planner keeps the essentials in view: a sensible pace, a realistic on-the-ground budget, and time to explore off-the-beaten-path. Use it as a starting point—not a schedule you have to obey.</p><ul class="planner-list"><li><span>✓</span> A route that makes sense for your time</li><li><span>✓</span> Suggestions for your travel style</li><li><span>✓</span> Budget guidance, without hidden assumptions</li></ul></div>
<div class="planner-card">
<div class="form-heading"><h3>Make room for adventure</h3><span>01 / Your preferences</span></div>
<form id="tripForm">
<div class="form-grid">
<div><label for="destination">Where are you headed?</label><select id="destination" name="destination"><option value="slovenia">Slovenia · Alps & rivers</option><option value="porto">Portugal · Porto & Douro</option><option value="japan">Japan · Kiso Valley</option></select></div>
<div><label for="duration">How much time do you have?</label><select id="duration" name="duration"><option value="4">4 days · A little escape</option><option value="7" selected>7 days · Time to explore</option><option value="10">10 days · Take it slowly</option></select></div>
<div><label for="style">Your travel style</label><select id="style" name="style"><option value="balanced">A little of everything</option><option value="solo">Solo & independent</option><option value="nature">Nature & eco-tourism</option><option value="food">Food & local culture</option></select></div>
<div><label for="budget">Daily budget, per person</label><select id="budget" name="budget"><option value="85">Around €85 · Keep it simple</option><option value="150" selected>Around €150 · A little comfort</option><option value="250">Around €250 · Something special</option></select></div>
</div>
<button class="btn" type="submit">Build my itinerary <span aria-hidden="true">→</span></button>
<p class="fine-print">Free to use. No account needed. Estimates exclude international flights.</p>
</form>
<div class="plan-result" id="planResult" role="status" aria-live="polite" hidden></div>
</div>
</div>
</section>

<section class="section" id="deals">
<div class="container deals-grid">
<div class="deal-photo"><img src="https://picsum.photos/id/1036/750/650" alt="Expansive alpine scenery inviting a journey into the outdoors" loading="lazy" width="750" height="650"><div class="floating-card"><div><small>A SMARTER SEARCH STARTS WITH</small><strong>A little flexibility.</strong></div><span aria-hidden="true" style="font-size:30px;color:var(--green)">↗</span></div></div>
<div class="deal-copy"><span class="eyebrow">Flight deals, without the guesswork</span><h2>Spend less getting there.<br>Do more when you arrive.</h2><p>A low headline fare isn't always a good deal. We help you compare the full journey: baggage, transfer costs, arrival times, and the value of a day you won't spend in transit.</p><p>Rather than promise prices that disappear, our flight resources help you search intelligently. Check nearby airports, compare a full week of dates, and set an alert before you're ready to book.</p>
<div class="tips">
<div class="tip"><span class="tip-number">01</span><div><strong>Search the shoulder season</strong><p>Try the weeks just before or after peak season. Check local weather and public holidays before committing.</p></div></div>
<div class="tip"><span class="tip-number">02</span><div><strong>Compare the final price</strong><p>Add bags, seats, and airport transfers. A direct flight may be better value than the cheapest connection.</p></div></div>
<div class="tip"><span class="tip-number">03</span><div><strong>Watch the route, not the rumor</strong><p>Use price alerts for your exact route and dates. There is no universal cheapest day to buy a ticket.</p></div></div>
</div>
<a class="btn" href="https://www.google.com/travel/flights" target="_blank" rel="noopener noreferrer">Find deals on Google Flights <span aria-hidden="true">↗</span></a>
<p class="fine-print">Opens an external flight-search service. Elsewhere does not sell tickets or display live fares.</p>
</div>
</div>
</section>

<section class="section stays" id="stays">
<div class="container">
<div class="section-top"><div><span class="eyebrow">Sleep somewhere with a story</span><h2>Good stays. Better mornings.</h2><p>The right base changes a trip. Our hotel-review checklist looks beyond the lobby: walkability, soundproofing, honest sustainability practices, and whether the welcome feels genuinely local.</p></div><button class="text-link link-button" data-story="compare">Compare stay styles <span aria-hidden="true">↗</span></button></div>
<div class="stays-grid">
<article class="stay-photo"><img src="https://picsum.photos/id/1031/800/650" alt="Quiet green landscape offering inspiration for a countryside retreat" loading="lazy" width="800" height="650"><div class="overlay"></div><div class="stay-caption"><span class="pill">The countryside reset</span><h3>Small inn. Big sense of place.</h3><p>Choose a locally owned guesthouse close to trailheads and village restaurants. Look for seasonal breakfasts, accessible transport, and clear information about heating and water use.</p><button class="link-button text-link" data-story="inn">Find your ideal inn <span aria-hidden="true">↗</span></button></div></article>
<div class="stay-notes">
<article class="stay-note"><span class="eyebrow">For the city explorer</span><h3>The neighborhood boutique</h3><p>Trade a distant landmark view for a great street on your doorstep. A small hotel near public transport can save both money and hours of crossing town.</p><div class="meta">Look for: quiet rooms · transit access · flexible cancellation</div><a class="text-link" href="https://www.booking.com/city/pt/porto.html" target="_blank" rel="noopener noreferrer">Compare prices in Porto ↗</a></article>
<article class="stay-note"><span class="eyebrow">For the slower journey</span><h3>A traditional Japanese inn</h3><p>A ryokan is part of the experience, not just a bed. Check meal times, bathing etiquette, and dietary options in advance, especially in smaller towns.</p><div class="meta">Look for: included meals · station pickup · house rules</div><a class="text-link" href="https://www.booking.com/country/jp.html" target="_blank" rel="noopener noreferrer">Reserve a hotel in Japan ↗</a></article>
</div>
</div>
<p class="fine-print">Stay recommendations are selection advice, not property reviews. Booking links open an independent provider; availability, terms, and payment are handled there.</p>
</div>
</section>

<section class="section" id="guides">
<div class="container">
<div class="section-top"><div><span class="eyebrow">The field notes</span><h2>A little insight goes a long way.</h2><p>Practical travel guides for the moments between booking and boarding. Get the details right, so you can spend less time worrying and more time being somewhere new.</p></div></div>
<div class="guide-grid">
<article class="guide"><img src="https://picsum.photos/id/669/650/430" alt="Woodland path surrounded by tall trees" loading="lazy" width="650" height="430"><span class="eyebrow">Solo travel</span><h3>Your first solo trip, without the overwhelm</h3><p>Start with a walkable base, plan your first arrival in daylight, and keep a trusted person in the loop. Independence works best with a few reassuring routines.</p><button class="link-button" data-story="solo">Read the guide →</button><div class="reading">5-minute field note · Planning & confidence</div></article>
<article class="guide"><img src="https://picsum.photos/id/106/650/430" alt="Flowers and green foliage in soft natural light" loading="lazy" width="650" height="430"><span class="eyebrow">Responsible travel</span><h3>Travel lighter. Leave a better impression.</h3><p>Eco-tourism isn't a label to take at face value. Ask who benefits, choose wildlife experiences carefully, and spend with the communities you came to meet.</p><button class="link-button" data-story="responsible">Read the guide →</button><div class="reading">4-minute field note · People & planet</div></article>
<article class="guide"><img src="https://picsum.photos/id/225/650/430" alt="Warm-toned details of an everyday travel setting" loading="lazy" width="650" height="430"><span class="eyebrow">Travel essentials</span><h3>Pack for the trip, not every possibility</h3><p>A flexible capsule wardrobe beats an overfilled suitcase. Build around layers, leave space for local finds, and keep medication and essentials in your carry-on.</p><button class="link-button" data-story="packing">Read the guide →</button><div class="reading">3-minute field note · Before you go</div></article>
</div>
</div>
</section>

<section class="section about" id="about">
<div class="container about-grid">
<div><span class="eyebrow">Hello, we're Elsewhere.</span><h2>Not more travel.<br>More from your travel.</h2><a href="#planner" class="text-link">Let's find your next chapter <span aria-hidden="true">→</span></a></div>
<div><p>We believe a memorable trip is rarely a race through a list of landmarks. It's the conversation over breakfast, the train through a new landscape, the afternoon you didn't plan. Elsewhere is an independent travel resource built around that idea.</p><p>Our approach combines destination inspiration with the less glamorous details that make a journey work: sensible connections, seasonal context, realistic budgets, and thoughtful places to stay. We encourage slower routes and local businesses wherever practical.</p><p>We aren't a booking agency. We're your starting point—and a reminder to leave a little room for discovery.</p><div class="principles"><div><strong>Independent minds.</strong><span>Clear guidance, without the hard sell.</span></div><div><strong>Local perspective.</strong><span>Respect for the places that welcome us.</span></div></div></div>
</div>
</section>

<section class="section" id="faq">
<div class="container faq-grid">
<div class="faq-intro"><span class="eyebrow">Before you go</span><h2>A few good questions.</h2><p>Travel has enough moving parts. Here's how Elsewhere fits into your planning.</p><a class="text-link" href="mailto:hello@elsewhere.travel">Ask us something else ↗</a></div>
<div>
<details open><summary>Can I book my entire trip with Elsewhere?</summary><p>We provide inspiration, planning tools, and links to independent booking resources. Flights and accommodation are reserved directly with your chosen provider. Always review cancellation policies, baggage allowances, and the final price before paying.</p></details>
<details><summary>What does the itinerary budget include?</summary><p>The planner provides a rough per-person estimate for accommodation, food, local transport, and everyday activities. It excludes international flights, travel insurance, visas, and major splurges. Season, room sharing, and exchange rates can change actual costs considerably.</p></details>
<details><summary>Are these trips suitable for solo travelers?</summary><p>Yes—the routes can be adapted for independent travel. Choose accommodation with recent reviews, check transport times, and avoid arriving in an unfamiliar place late at night if possible. Consult your government's current travel advice and share your itinerary with someone you trust.</p></details>
<details><summary>How do I make a trip more sustainable?</summary><p>Stay longer in fewer places, use trains or buses where practical, and favor locally owned businesses. Look for specific evidence behind environmental claims, not just a green badge. Respect wildlife, water restrictions, and local customs, and avoid experiences that exploit animals or communities.</p></details>
</div>
</div>
</section>

<section class="newsletter" aria-labelledby="newsletter-title">
<div class="container"><div class="newsletter-box">
<div><span class="eyebrow">A postcard for your inbox</span><h2 id="newsletter-title">Keep a little elsewhere close.</h2><p>Destination inspiration, smarter planning tips, and a reason to look up from your routine. Thoughtful travel notes, never daily noise.</p></div>
<form id="newsletterForm"><label for="email">Your email address</label><div class="email-row"><input type="email" id="email" name="email" placeholder="you@example.com" required autocomplete="email"><button class="btn" type="submit">Count me in ↗</button></div><p class="fine-print">Preview signup: no email is sent or stored. Read our <button type="button" class="link-button" data-story="privacy">privacy note</button>.</p><p class="newsletter-status" id="newsletterStatus" role="status" aria-live="polite"></p></form>
</div></div>
</section>
</main>
<footer>
<div class="container">
<div class="footer-grid">
<div class="footer-brand"><a class="brand" href="#home"><img src="https://placehold.co/72x72/173d32/ffffff?text=e.&amp;font=lora" width="36" height="36" alt="Elsewhere logo" loading="lazy"><div><div class="brand-name">elsewhere.</div><div class="brand-tag">Go further. Travel better.</div></div></a><p>Thoughtful journeys for curious people.<br>Make the plan. Leave room for the story.</p></div>
<div><div class="footer-title">Explore</div><div class="footer-links"><a href="#destinations">Destinations</a><a href="#planner">Trip Planner</a><a href="#deals">Flight Deals</a><a href="#stays">Places to Stay</a></div></div>
<div><div class="footer-title">Get to know us</div><div class="footer-links"><a href="#about">Our philosophy</a><a href="#guides">Travel Guides</a><a href="#faq">FAQs</a><a href="mailto:hello@elsewhere.travel">Get in touch</a></div></div>
<div><div class="footer-title">Say hello</div><div class="footer-links"><a href="mailto:hello@elsewhere.travel">hello@elsewhere.travel</a><a href="tel:+442079460128">+44 (0)20 7946 0128</a><span>18 Compass Lane<br>London, UK</span><div><a href="https://www.instagram.com/" target="_blank" rel="noopener noreferrer" aria-label="Visit Instagram (external)">Instagram ↗</a> &nbsp; <a href="https://www.pinterest.com/" target="_blank" rel="noopener noreferrer" aria-label="Visit Pinterest (external)">Pinterest ↗</a></div></div></div>
</div>
<div class="footer-bottom"><span>© <span id="year">2026</span> Elsewhere Travel. All rights reserved.</span><div class="legal-links"><button class="link-button" data-story="privacy">Privacy</button><button class="link-button" data-story="terms">Terms</button><span>Made for the journey.</span></div></div>
</div>
</footer>

<dialog id="contentDialog" aria-labelledby="dialogTitle">
<div class="dialog-inner"><div class="dialog-top"><span class="eyebrow">Elsewhere · Field notes</span><button class="close" id="closeDialog" aria-label="Close dialog">×</button></div><h2 id="dialogTitle"></h2><div id="dialogBody"></div></div>
</dialog>
<script>
const menuToggle=document.getElementById('menuToggle');
const nav=document.getElementById('primaryNav');
menuToggle.addEventListener('click',()=>{const open=menuToggle.getAttribute('aria-expanded')!=='true';menuToggle.setAttribute('aria-expanded',String(open));nav.classList.toggle('open',open)});
nav.querySelectorAll('a').forEach(a=>a.addEventListener('click',()=>{nav.classList.remove('open');menuToggle.setAttribute('aria-expanded','false')}));
document.addEventListener('keydown',e=>{if(e.key==='Escape'){nav.classList.remove('open');menuToggle.setAttribute('aria-expanded','false')}});
document.querySelectorAll('[data-filter]').forEach(button=>button.addEventListener('click',()=>{
document.querySelectorAll('[data-filter]').forEach(b=>{b.classList.toggle('active',b===button);b.setAttribute('aria-pressed',String(b===button))});
document.querySelectorAll('.destination').forEach(card=>{card.hidden=button.dataset.filter!=='all'&&card.dataset.category!==button.dataset.filter});
}));
const routes={
slovenia:{name:'Slovenia',base:'Ljubljana → Lake Bled → Soča Valley',start:'Settle into Ljubljana, explore the old center on foot, and confirm onward bus connections.',middle:'Move to Lake Bled or the Soča Valley. Choose one base for walks, riverside stops, and a full day outdoors.',end:'Leave a generous return-travel buffer, with a relaxed café stop before heading home.',extra:'Add Lake Bohinj and a low-key village stay. Check mountain weather and trail conditions before hiking.'},
porto:{name:'Porto & the Douro',base:'Porto → Douro Valley → Porto',start:'Stay in a walkable Porto neighborhood. Explore the riverfront and tiled churches without rushing.',middle:'Take a Douro rail day trip, visit a producer by appointment, and make time for neighborhood markets.',end:'Return to Porto for an unhurried morning and allow extra time for your airport transfer.',extra:'Spend two nights in the Douro instead of making a long day trip. Reserve regional transport in advance.'},
japan:{name:'Japan’s Kiso Valley',base:'Nagoya → Magome & Tsumago → Kiso-Fukushima',start:'Arrive via Nagoya, check regional rail schedules, and keep your first afternoon easy.',middle:'Walk a suitable section of the Nakasendō, stay in a traditional inn, and explore the post towns.',end:'Return to your rail hub with a buffer for connections. Avoid pairing a rural transfer with a tight flight departure.',extra:'Add a second valley base and a rest day. Verify trail closures, luggage-forwarding options, and seasonal bus services.'}
};
const styleNotes={
balanced:'Balance one main activity each day with an open afternoon. A flexible plan is often the most memorable one.',
solo:'Choose a centrally located, well-reviewed stay. Arrive in daylight, share your route with a trusted person, and consider a small-group walk for easy company.',
nature:'Use public transport where feasible, stay on marked paths, and choose local guides who explain conservation practices. Check weather and access restrictions each morning.',
food:'Visit food markets early, book one special local meal, and confirm dietary needs in advance. Leave room for recommendations from your hosts.'
};
document.getElementById('tripForm').addEventListener('submit',e=>{
e.preventDefault();
const key=document.getElementById('destination').value;
const route=routes[key],days=Number(document.getElementById('duration').value),daily=Number(document.getElementById('budget').value),style=document.getElementById('style').value;
const result=document.getElementById('planResult');
const money=new Intl.NumberFormat('en-IE',{style:'currency',currency:'EUR',maximumFractionDigits:0});
result.innerHTML=`<span class="eyebrow">Your starting itinerary</span><h4>${days} days in ${route.name}</h4><p><strong>Your route:</strong> ${route.base}</p><ol><li><strong>Arrive & settle in:</strong> ${route.start}</li><li><strong>Explore at your pace:</strong> ${route.middle}</li>${days>=7?`<li><strong>Make space for more:</strong> ${route.extra}</li>`:''}<li><strong>A gentle finish:</strong> ${route.end}</li></ol><p>${styleNotes[style]}</p><p><strong>Planning budget: ${money.format(days*daily)} per person</strong> (${money.format(daily)} × ${days} days). This is your selected spending target, not a destination quote. Excludes international flights, insurance, and visas; verify real accommodation and transport costs.</p><button type="button" class="btn outline" id="downloadPlan">Save itinerary as text ↓</button>`;
result.hidden=false;
document.getElementById('downloadPlan').addEventListener('click',()=>{
const text=`ELSEWHERE — YOUR STARTING ITINERARY\n\n${result.innerText.replace('Save itinerary as text ↓','')}`;
const url=URL.createObjectURL(new Blob([text],{type:'text/plain;charset=utf-8'}));
const a=document.createElement('a');a.href=url;a.download=`elsewhere-${key}-${days}-days.txt`;document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(url),1000);
});
});
const stories={
slovenia:{title:'The quieter side of the Alps',body:'<p>Start in Ljubljana, a compact base with riverside cafés and an easy-to-explore old center. Continue toward Lake Bled or Bohinj, then choose a Soča Valley base rather than changing hotels every night.</p><h3>A sensible seven-day route</h3><ul><li>Days 1–2: Ljubljana, local markets, and a relaxed arrival.</li><li>Days 3–4: Lake Bled or Bohinj, with a marked walk suited to your ability.</li><li>Days 5–6: Soča Valley viewpoints and time in a riverside village.</li><li>Day 7: Return to your departure hub with a connection buffer.</li></ul><p>Summer is busiest, especially at famous lakes. Shoulder-season travel can be quieter, but bus frequency and mountain access may be reduced. Check current timetables and weather; book a qualified guide for technical activities.</p>'},
porto:{title:'Porto, one street at a time',body:'<p>Porto rewards walking, but its steep streets deserve a comfortable pair of shoes. Base yourself near reliable transport and explore one neighborhood at a time rather than crisscrossing the city.</p><h3>A four-day city escape</h3><ul><li>Day 1: Arrive, find your neighborhood café, and stroll the riverfront.</li><li>Day 2: Historic architecture, a market lunch, and independent shops.</li><li>Day 3: A Douro rail excursion or a booked tasting across the river.</li><li>Day 4: A slow breakfast and a final neighborhood walk.</li></ul><p>Reserve popular experiences, check opening days, and avoid assuming every restaurant accepts walk-ins. For a greener itinerary, use the metro and regional trains, carrying a reusable bottle where potable tap water is available.</p>'},
japan:{title:'A little further into Japan',body:'<p>The Kiso Valley pairs historic post towns with forested stretches of the Nakasendō. Travel light and allow time for infrequent rural connections. Traditional inns may serve dinner at a fixed time, so communicate your arrival plan.</p><h3>Build a six-day journey</h3><ul><li>Start with a night in Nagoya to recover and check onward travel.</li><li>Spend two nights around Magome and Tsumago, walking only suitable, open trail sections.</li><li>Add Kiso-Fukushima for local streets, food, and a slower afternoon.</li><li>Return to your transport hub before a major departure.</li></ul><p>Spring and autumn bring appealing walking conditions, but rain, trail maintenance, and seasonal closures can affect access. Check official local guidance, carry cash for small businesses, and book inns ahead during holiday periods.</p>'},
compare:{title:'Which stay fits your journey?',body:'<p>Compare the experience and total cost—not just the room rate. These are stay types, not specific hotels or live offers.</p><table class="comparison"><thead><tr><th scope="col">Stay</th><th scope="col">Best for</th><th scope="col">Check first</th></tr></thead><tbody><tr><td>Local guesthouse</td><td>Walks & warm welcomes</td><td>Transport, bathroom setup</td></tr><tr><td>City boutique</td><td>Neighborhood exploring</td><td>Noise, transit, room size</td></tr><tr><td>Traditional ryokan</td><td>A cultural stay</td><td>Meals, bathing, arrival time</td></tr></tbody></table><p>Compare taxes, breakfast, cancellation rules, accessibility, and transfer costs. Read recent reviews for recurring patterns rather than relying on a single rating.</p><a class="btn" href="https://www.booking.com/" target="_blank" rel="noopener noreferrer">Compare prices on Booking.com ↗</a>'},
inn:{title:'Find an inn that feels like the place',body:'<p>Start with the practicalities: how you will get there, where you can eat, and whether the location works without a car. A beautiful remote stay is less relaxing if every meal requires a long drive.</p><h3>Ask before you reserve</h3><ul><li>Is there a station pickup or a dependable local bus?</li><li>Are meals available, and can dietary requirements be accommodated?</li><li>What does the business actually do to reduce waste and water use?</li><li>Are rooms accessible, and what are the cancellation terms?</li></ul><p>Look for recent guest feedback, clear contact details, and transparent pricing. Reserve directly when the terms suit you, or compare through an established booking provider.</p><a class="btn" href="https://www.booking.com/country/si.html" target="_blank" rel="noopener noreferrer">Find stays in Slovenia ↗</a>'},
solo:{title:'Your first solo trip, made simpler',body:'<p>You don’t need to be fearless to travel alone. A manageable destination, a good base, and a clear arrival plan can do much of the work. Keep your first journey short enough that planning feels exciting rather than exhausting.</p><h3>Build a reassuring first day</h3><p>Save your hotel address offline, research the official airport transfer, and try to arrive in daylight. Have a backup payment method and a way to contact your accommodation. Avoid sharing your room number or real-time location publicly.</p><h3>Make connection easy</h3><p>A small-group walking tour or cooking class provides company without committing your whole trip. Eat at a counter, bring a book, and give yourself permission to rest. Solo travel does not mean every moment has to be independent.</p><h3>Keep safety practical</h3><p>Share your itinerary with someone you trust, arrange regular check-ins, and consult current government travel advice. Learn the local emergency number, keep copies of key documents secure, and choose insurance that covers your activities.</p>'},
responsible:{title:'A lighter footprint, a better visit',body:'<p>Responsible travel starts with questions. Who owns the experience? Who is paid? What happens to local resources when visitor numbers rise? A specific answer is more valuable than a vague sustainability promise.</p><h3>Stay longer in fewer places</h3><p>Reduce unnecessary transfers and use rail or bus connections when practical. Book locally owned stays and guides, buy regional produce, and be considerate about water and energy use—particularly in destinations under resource pressure.</p><h3>Choose wildlife experiences carefully</h3><p>Avoid performances, handling, or rides involving wild animals. Look for observation at a respectful distance with qualified guides, transparent conservation practices, and clear limits on visitor impact.</p><h3>Respect everyday life</h3><p>Ask before photographing people, follow dress and access rules, and avoid geotagging sensitive sites. Off-the-beaten-path travel is not an invitation to enter private land or overwhelm a small community.</p>'},
packing:{title:'Pack for the trip you’re actually taking',body:'<p>Build your bag around the forecast, your laundry options, and the activities you have booked. Choose clothes that layer and work together. Comfortable shoes you already trust are more useful than a new pair bought for the photograph.</p><h3>Keep the essentials close</h3><ul><li>Passport, required visas, and secure document copies.</li><li>Medication in appropriate packaging, with relevant documentation.</li><li>Payment backup, phone charger, and a destination-compatible adapter.</li><li>A light weather layer, refillable bottle, and small day bag.</li></ul><p>Check your airline’s exact baggage limits and local rules for medication before departure. Put essential medication and a change of clothes in your personal bag, and leave a little empty space for the journey home.</p>'},
privacy:{title:'Your privacy, clearly explained',body:'<p>This demonstration page has no account system, advertising trackers, or newsletter backend. Planner selections are processed in your browser, and the email form does not transmit or store your address.</p><p>Images and fonts are loaded from external providers, which receive standard connection information such as your IP address. Following a booking or social link takes you to an independent service with its own privacy policy.</p><p>Downloaded itineraries are saved only where you choose on your device. For questions about this page, contact hello@elsewhere.travel. A live newsletter service would require a separate consent and data-handling policy before launch.</p>'},
terms:{title:'A few important travel notes',body:'<p>Elsewhere is a fictional travel-resource concept. Guides and itinerary estimates are general inspiration, not a booking contract, verified property review, or guarantee of current conditions.</p><p>Confirm entry requirements, health advice, accessibility, seasonal closures, and transport schedules with official sources before traveling. Budget estimates are not quotes and exclude international flights, visas, and insurance.</p><p>External booking providers control their own pricing, availability, payments, and cancellation policies. Review their terms before reserving. The sample contact details and social destinations on this page are illustrative.</p>'}
};
const dialog=document.getElementById('contentDialog');
document.querySelectorAll('[data-story]').forEach(button=>button.addEventListener('click',()=>{
const story=stories[button.dataset.story];document.getElementById('dialogTitle').textContent=story.title;document.getElementById('dialogBody').innerHTML=story.body;dialog.showModal();dialog.scrollTop=0;
}));
document.getElementById('closeDialog').addEventListener('click',()=>dialog.close());
dialog.addEventListener('click',e=>{const r=dialog.getBoundingClientRect();if(e.clientX<r.left||e.clientX>r.right||e.clientY<r.top||e.clientY>r.bottom)dialog.close()});
document.getElementById('newsletterForm').addEventListener('submit',e=>{e.preventDefault();document.getElementById('newsletterStatus').textContent="Thanks for your interest! This is a preview signup, so no subscription has been created and your address hasn't been saved.";e.target.reset()});
document.getElementById('year').textContent=new Date().getFullYear();
</script>
</body>
</html>
View Axe Report (JSON)
{
  "testEngine": {
    "name": "axe-core",
    "version": "4.10.2"
  },
  "testRunner": {
    "name": "axe"
  },
  "testEnvironment": {
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
    "windowWidth": 1280,
    "windowHeight": 720,
    "orientationAngle": 0,
    "orientationType": "landscape-primary"
  },
  "timestamp": "2026-11-12T09:58:35.233Z",
  "url": "https://benchmark.aimac.invalid/1bd827b52245b1984bf6cccbd1a7f90077845693f12eec4631246f1b2965e7c8.html",
  "toolOptions": {
    "runOnly": {
      "type": "tag",
      "values": [
        "wcag2a",
        "wcag2aa",
        "wcag21a",
        "wcag21aa",
        "wcag22a",
        "wcag22aa"
      ]
    },
    "resultTypes": [
      "violations"
    ],
    "reporter": "v1"
  },
  "inapplicable": [
    {
      "id": "area-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <area> elements of image maps have alternative text",
      "help": "Active <area> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-braille-equivalent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
      "help": "aria-braille attributes must have a non-braille equivalent",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-command-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA button, link and menuitem has an accessible name",
      "help": "ARIA commands must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-input-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA input field has an accessible name",
      "help": "ARIA input fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-meter-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA meter node has an accessible name",
      "help": "ARIA meter nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-progressbar-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA progressbar node has an accessible name",
      "help": "ARIA progressbar nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-children",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure elements with an ARIA role that require child roles contain them",
      "help": "Certain ARIA roles must contain particular children",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-parent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure elements with an ARIA role that require parent roles are contained by them",
      "help": "Certain ARIA roles must be contained by particular parents",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-toggle-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA toggle field has an accessible name",
      "help": "ARIA toggle fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-tooltip-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every ARIA tooltip node has an accessible name",
      "help": "ARIA tooltip nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "avoid-inline-spacing",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag21aa",
        "wcag1412",
        "EN-301-549",
        "EN-9.1.4.12",
        "ACT"
      ],
      "description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
      "help": "Inline text spacing must be adjustable with custom stylesheets",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
      "nodes": []
    },
    {
      "id": "blink",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag222",
        "section508",
        "section508.22.j",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <blink> elements are not used",
      "help": "<blink> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
      "nodes": []
    },
    {
      "id": "definition-list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dl> elements are structured correctly",
      "help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
      "nodes": []
    },
    {
      "id": "dlitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dt> and <dd> elements are contained by a <dl>",
      "help": "<dt> and <dd> elements must be contained by a <dl>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-focusable-content",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
      "help": "Frames with focusable content must not have tabindex=-1",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title-unique",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
      "help": "Frames must have a unique title attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.i",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements have an accessible name",
      "help": "Frames must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
      "nodes": []
    },
    {
      "id": "html-xml-lang-mismatch",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
      "help": "HTML elements with lang and xml:lang must have the same base language",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure input buttons have discernible text",
      "help": "Input buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <input type=\"image\"> elements have alternative text",
      "help": "Image buttons must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "marquee",
      "impact": null,
      "tags": [
        "cat.parsing",
        "wcag2a",
        "wcag222",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <marquee> elements are not used",
      "help": "<marquee> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
      "nodes": []
    },
    {
      "id": "meta-refresh",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag221",
        "TTv5",
        "TT8.a",
        "EN-301-549",
        "EN-9.2.2.1"
      ],
      "description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
      "help": "Delayed refresh under 20 hours must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
      "nodes": []
    },
    {
      "id": "object-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure <object> elements have alternative text",
      "help": "<object> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "role-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure [role=\"img\"] elements have alternative text",
      "help": "[role=\"img\"] elements must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "scrollable-region-focusable",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "wcag213",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1",
        "EN-9.2.1.3"
      ],
      "description": "Ensure elements that have scrollable content are accessible by keyboard",
      "help": "Scrollable region must have keyboard access",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
      "nodes": []
    },
    {
      "id": "server-side-image-map",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag211",
        "section508",
        "section508.22.f",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure that server-side image maps are not used",
      "help": "Server-side image maps must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
      "nodes": []
    },
    {
      "id": "svg-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
      "help": "<svg> elements with an img role must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "td-headers-attr",
      "impact": null,
      "tags": [
        "cat.tables",
        "wcag2a",
        "wcag131",
        "section508",
        "section508.22.g",
        "TTv5",
        "TT14.b",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
      "help": "Table cells that use the headers attribute must only refer to cells in the same table",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
      "nodes": []
    },
    {
      "id": "th-has-data-cells",
      "impact": null,
      "tags": [
        "cat.tables",
        "wcag2a",
        "wcag131",
        "section508",
        "section508.22.g",
        "TTv5",
        "TT14.b",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
      "help": "Table headers in a data table must refer to data cells",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
      "nodes": []
    },
    {
      "id": "valid-lang",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2aa",
        "wcag312",
        "TTv5",
        "TT11.b",
        "EN-301-549",
        "EN-9.3.1.2",
        "ACT"
      ],
      "description": "Ensure lang attributes have valid values",
      "help": "lang attribute must have a valid value",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
      "nodes": []
    },
    {
      "id": "video-caption",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag122",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT17.a",
        "EN-301-549",
        "EN-9.1.2.2"
      ],
      "description": "Ensure <video> elements have captions",
      "help": "<video> elements must have captions",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
      "nodes": []
    },
    {
      "id": "no-autoplay-audio",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag142",
        "TTv5",
        "TT2.a",
        "EN-301-549",
        "EN-9.1.4.2",
        "ACT"
      ],
      "description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
      "help": "<video> or <audio> elements must not play automatically",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
      "nodes": []
    }
  ],
  "passes": [
    {
      "id": "aria-allowed-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure an element's role supports its ARIA attributes",
      "help": "Elements must only use supported ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-allowed-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attributes are used correctly for the defined role"
            }
          ],
          "none": [
            {
              "id": "aria-unsupported-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute is supported"
            }
          ],
          "impact": null,
          "html": "<a href=\"#home\" class=\"brand\" aria-label=\"Elsewhere home\">\n<img src=\"https://placehold.co/72x72/173d32/ffffff?text=e.&amp;font=lora\" alt=\"Elsewhere logo\" width=\"36\" height=\"36\">\n<div><div class=\"brand-name\">elsewhere.</div><div class=\"brand-tag\">Go further. Travel better.</div></div>\n</a>",
          "target": [
            "a[aria-label=\"Elsewhere home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-conditional-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are used as described in the specification of the element's role",
      "help": "ARIA attributes must be used as specified for the element's role",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-conditional-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<a href=\"#home\" class=\"brand\" aria-label=\"Elsewhere home\">\n<img src=\"https://placehold.co/72x72/173d32/ffffff?text=e.&amp;font=lora\" alt=\"Elsewhere logo\" width=\"36\" height=\"36\">\n<div><div class=\"brand-name\">elsewhere.</div><div class=\"brand-tag\">Go further. Travel better.</div></div>\n</a>",
          "target": [
            "a[aria-label=\"Elsewhere home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-deprecated-role",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements do not use deprecated roles",
      "help": "Deprecated ARIA roles must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "deprecatedrole",
              "data": null,
              "relatedNodes": [],
              "impact": "minor",
              "message": "ARIA role is not deprecated"
            }
          ],
          "impact": null,
          "html": "<div class=\"tabs\" role=\"group\" aria-label=\"Filter destinations\">",
          "target": [
            ".tabs"
          ]
        }
      ]
    },
    {
      "id": "aria-hidden-body",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "wcag412",
        "EN-301-549",
        "EN-9.1.3.1",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-hidden=\"true\" is not present on the document body.",
      "help": "aria-hidden=\"true\" must not be present on the document body",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-hidden-body",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "No aria-hidden attribute is present on document body"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<body>",
          "target": [
            "body"
          ]
        }
      ]
    },
    {
      "id": "aria-hidden-focus",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
      "help": "ARIA hidden element must not be focusable or contain focusable elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "focusable-modal-open",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements while a modal is open"
            },
            {
              "id": "focusable-disabled",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements contained within element"
            },
            {
              "id": "focusable-not-tabbable",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements contained within element"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<span aria-hidden=\"true\">\u2197</span>",
          "target": [
            ".btn[href$=\"#destinations\"] > span[aria-hidden=\"true\"]"
          ]
        }
      ]
    },
    {
      "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=\"#home\" class=\"brand\" aria-label=\"Elsewhere home\">\n<img src=\"https://placehold.co/72x72/173d32/ffffff?text=e.&amp;font=lora\" alt=\"Elsewhere logo\" width=\"36\" height=\"36\">\n<div><div class=\"brand-name\">elsewhere.</div><div class=\"brand-tag\">Go further. Travel better.</div></div>\n</a>",
          "target": [
            "a[aria-label=\"Elsewhere home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-required-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements with ARIA roles have all required ARIA attributes",
      "help": "Required ARIA attributes must be provided",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-required-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "All required ARIA attributes are present"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<div class=\"tabs\" role=\"group\" aria-label=\"Filter destinations\">",
          "target": [
            ".tabs"
          ]
        }
      ]
    },
    {
      "id": "aria-roles",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all elements with a role attribute use a valid value",
      "help": "ARIA roles used must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "invalidrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA role is valid"
            },
            {
              "id": "abstractrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Abstract roles are not used"
            },
            {
              "id": "unsupportedrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA role is supported"
            }
          ],
          "impact": null,
          "html": "<div class=\"tabs\" role=\"group\" aria-label=\"Filter destinations\">",
          "target": [
            ".tabs"
          ]
        }
      ]
    },
    {
      "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=\"#home\" class=\"brand\" aria-label=\"Elsewhere home\">\n<img src=\"https://placehold.co/72x72/173d32/ffffff?text=e.&amp;font=lora\" alt=\"Elsewhere logo\" width=\"36\" height=\"36\">\n<div><div class=\"brand-name\">elsewhere.</div><div class=\"brand-tag\">Go further. Travel better.</div></div>\n</a>",
          "target": [
            "a[aria-label=\"Elsewhere home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure attributes that begin with aria- are valid ARIA attributes",
      "help": "ARIA attributes must conform to valid names",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-valid-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute name is valid"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a href=\"#home\" class=\"brand\" aria-label=\"Elsewhere home\">\n<img src=\"https://placehold.co/72x72/173d32/ffffff?text=e.&amp;font=lora\" alt=\"Elsewhere logo\" width=\"36\" height=\"36\">\n<div><div class=\"brand-name\">elsewhere.</div><div class=\"brand-tag\">Go further. Travel better.</div></div>\n</a>",
          "target": [
            "a[aria-label=\"Elsewhere home\"]"
          ]
        }
      ]
    },
    {
      "id": "autocomplete-valid",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag21aa",
        "wcag135",
        "EN-301-549",
        "EN-9.1.3.5",
        "ACT"
      ],
      "description": "Ensure the autocomplete attribute is correct and suitable for the form field",
      "help": "autocomplete attribute must be used correctly",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "autocomplete-valid",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "the autocomplete attribute is correctly formatted"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<input type=\"email\" id=\"email\" name=\"email\" placeholder=\"you@example.com\" required=\"\" autocomplete=\"email\">",
          "target": [
            "#email"
          ]
        }
      ]
    },
    {
      "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=\"tab active\" data-filter=\"all\" aria-pressed=\"true\">All escapes</button>",
          "target": [
            ".active"
          ]
        }
      ]
    },
    {
      "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>The world is<br>still full of<br><em>elsewhere.</em></h1>",
                  "target": [
                    "h1"
                  ]
                },
                {
                  "html": "<h2>Places worth getting lost in.</h2>",
                  "target": [
                    "#destinations > .container > .section-top > div > h2"
                  ]
                },
                {
                  "html": "<h3>The quieter side of the Alps</h3>",
                  "target": [
                    "article[data-category=\"nature\"] > .destination-body > h3"
                  ]
                },
                {
                  "html": "<h3>Porto, one street at a time</h3>",
                  "target": [
                    "article[data-category=\"culture\"] > .destination-body > h3"
                  ]
                },
                {
                  "html": "<h3>A little further into Japan</h3>",
                  "target": [
                    "article[data-category=\"slow\"] > .destination-body > h3"
                  ]
                },
                {
                  "html": "<h2>Your next trip starts right here.</h2>",
                  "target": [
                    ".planner-copy > h2"
                  ]
                },
                {
                  "html": "<h3>Make room for adventure</h3>",
                  "target": [
                    ".form-heading > h3"
                  ]
                },
                {
                  "html": "<h2>Spend less getting there.<br>Do more when you arrive.</h2>",
                  "target": [
                    ".deal-copy > h2"
                  ]
                },
                {
                  "html": "<h2>Good stays. Better mornings.</h2>",
                  "target": [
                    "#stays > .container > .section-top > div > h2"
                  ]
                },
                {
                  "html": "<h3>Small inn. Big sense of place.</h3>",
                  "target": [
                    ".stay-caption > h3"
                  ]
                },
                {
                  "html": "<h3>The neighborhood boutique</h3>",
                  "target": [
                    ".stay-note:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>A traditional Japanese inn</h3>",
                  "target": [
                    ".stay-note:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h2>A little insight goes a long way.</h2>",
                  "target": [
                    "#guides > .container > .section-top > div > h2"
                  ]
                },
                {
                  "html": "<h3>Your first solo trip, without the overwhelm</h3>",
                  "target": [
                    ".guide:nth-child(1) > h3"
                  ]
                },
                {
                  "html": "<h3>Travel lighter. Leave a better impression.</h3>",
                  "target": [
                    ".guide:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>Pack for the trip, not every possibility</h3>",
                  "target": [
                    ".guide:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h2>Not more travel.<br>More from your travel.</h2>",
                  "target": [
                    ".about-grid > div:nth-child(1) > h2"
                  ]
                },
                {
                  "html": "<h2>A few good questions.</h2>",
                  "target": [
                    ".faq-intro > h2"
                  ]
                },
                {
                  "html": "<h2 id=\"newsletter-title\">Keep a little elsewhere close.</h2>",
                  "target": [
                    "#newsletter-title"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a heading"
            },
            {
              "id": "landmark",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<main id=\"main\">",
                  "target": [
                    "#main"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a landmark region"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#edf2e8",
                "bgColor": "#173d32",
                "contrastRatio": 10.55,
                "fontSize": "8.3pt (11px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has sufficient color contrast of 10.55"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<div class=\"announcement\">Less scrolling. More exploring. <span>Meet your next great escape.</span></div>",
          "target": [
            ".announcement"
          ]
        }
      ]
    },
    {
      "id": "document-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag242",
        "TTv5",
        "TT12.a",
        "EN-301-549",
        "EN-9.2.4.2",
        "ACT"
      ],
      "description": "Ensure each HTML document contains a non-empty <title> element",
      "help": "Documents must have <title> element to aid in navigation",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "doc-has-title",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Document has a non-empty <title> element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "duplicate-id-aria",
      "impact": null,
      "tags": [
        "cat.parsing",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every id attribute value used in ARIA and in labels is unique",
      "help": "IDs used in ARIA and labels must be unique",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "duplicate-id-aria",
              "data": "primaryNav",
              "relatedNodes": [],
              "impact": "critical",
              "message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<nav class=\"nav\" id=\"primaryNav\" aria-label=\"Primary navigation\">\n<a href=\"#destinations\">Destinations</a><a href=\"#planner\">Trip Planner</a><a href=\"#deals\">Flight Deals</a><a href=\"#stays\">Stays</a><a href=\"#guides\">Guides</a><a href=\"#about\">About</a>\n</nav>",
          "target": [
            "#primaryNav"
          ]
        }
      ]
    },
    {
      "id": "form-field-multiple-labels",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag332",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.3.3.2"
      ],
      "description": "Ensure form field does not have multiple label elements",
      "help": "Form field must not have multiple label elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "multiple-label",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<label for=\"destination\">Where are you headed?</label>",
                  "target": [
                    "label[for=\"destination\"]"
                  ]
                }
              ],
              "impact": "moderate",
              "message": "Form field does not have multiple label elements"
            }
          ],
          "impact": null,
          "html": "<select id=\"destination\" name=\"destination\"><option value=\"slovenia\">Slovenia \u00b7 Alps &amp; rivers</option><option value=\"porto\">Portugal \u00b7 Porto &amp; Douro</option><option value=\"japan\">Japan \u00b7 Kiso Valley</option></select>",
          "target": [
            "#destination"
          ]
        }
      ]
    },
    {
      "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/72x72/173d32/ffffff?text=e.&amp;font=lora\" alt=\"Elsewhere logo\" width=\"36\" height=\"36\">",
          "target": [
            "a[aria-label=\"Elsewhere home\"] > img[alt=\"Elsewhere logo\"][width=\"36\"][height=\"36\"]"
          ]
        }
      ]
    },
    {
      "id": "label",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every form element has a label",
      "help": "Form elements must have labels",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "explicit-label",
              "data": {
                "explicitLabel": "Your email address"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"email\">Your email address</label>",
                  "target": [
                    "label[for=\"email\"]"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an explicit <label>"
            },
            {
              "id": "non-empty-placeholder",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has a placeholder attribute"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "hidden-explicit-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Form element has a visible explicit <label>"
            }
          ],
          "impact": null,
          "html": "<input type=\"email\" id=\"email\" name=\"email\" placeholder=\"you@example.com\" required=\"\" autocomplete=\"email\">",
          "target": [
            "#email"
          ]
        }
      ]
    },
    {
      "id": "link-in-text-block",
      "impact": null,
      "tags": [
        "cat.color",
        "wcag2a",
        "wcag141",
        "TTv5",
        "TT13.a",
        "EN-301-549",
        "EN-9.1.4.1"
      ],
      "description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
      "help": "Links must be distinguishable without relying on color",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "link-in-text-block-style",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<div class=\"deal-copy\">",
                  "target": [
                    ".deal-copy"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text by visual styling"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"btn\" href=\"https://www.google.com/travel/flights\" target=\"_blank\" rel=\"noopener noreferrer\">Find deals on Google Flights <span aria-hidden=\"true\">\u2197</span></a>",
          "target": [
            ".btn[target=\"_blank\"][rel=\"noopener noreferrer\"]"
          ]
        }
      ]
    },
    {
      "id": "link-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure links have discernible text",
      "help": "Links must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "focusable-no-name",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element is not in tab order or has accessible text"
            }
          ],
          "impact": null,
          "html": "<a class=\"skip\" href=\"#main\">Skip to content</a>",
          "target": [
            ".skip"
          ]
        }
      ]
    },
    {
      "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=\"planner-list\"><li><span>\u2713</span> A route that makes sense for your time</li><li><span>\u2713</span> Suggestions for your travel style</li><li><span>\u2713</span> Budget guidance, without hidden assumptions</li></ul>",
          "target": [
            "ul"
          ]
        }
      ]
    },
    {
      "id": "listitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <li> elements are used semantically",
      "help": "<li> elements must be contained in a <ul> or <ol>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "listitem",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "List item has a <ul>, <ol> or role=\"list\" parent element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<li><span>\u2713</span> A route that makes sense for your time</li>",
          "target": [
            "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/72x72/173d32/ffffff?text=e.&amp;font=lora\" alt=\"Elsewhere logo\" width=\"36\" height=\"36\">",
          "target": [
            "a[aria-label=\"Elsewhere home\"] > img[alt=\"Elsewhere logo\"][width=\"36\"][height=\"36\"]"
          ]
        }
      ]
    },
    {
      "id": "select-name",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure select element has an accessible name",
      "help": "Select element must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "explicit-label",
              "data": {
                "explicitLabel": "Where are you headed?"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"destination\">Where are you headed?</label>",
                  "target": [
                    "label[for=\"destination\"]"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an explicit <label>"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "hidden-explicit-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Form element has a visible explicit <label>"
            }
          ],
          "impact": null,
          "html": "<select id=\"destination\" name=\"destination\"><option value=\"slovenia\">Slovenia \u00b7 Alps &amp; rivers</option><option value=\"porto\">Portugal \u00b7 Porto &amp; Douro</option><option value=\"japan\">Japan \u00b7 Kiso Valley</option></select>",
          "target": [
            "#destination"
          ]
        }
      ]
    },
    {
      "id": "summary-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure summary elements have discernible text",
      "help": "Summary elements must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<summary>Can I book my entire trip with Elsewhere?</summary>",
          "target": [
            "details[open=\"\"] > summary"
          ]
        }
      ]
    },
    {
      "id": "target-size",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag22aa",
        "wcag258"
      ],
      "description": "Ensure touch targets have sufficient size and space",
      "help": "All touch targets must be 24px large, or leave sufficient space",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "target-size",
              "data": {
                "minSize": 24,
                "width": 130.6,
                "height": 48.8
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Control has sufficient size (130.6px by 48.8px, should be at least 24px by 24px)"
            },
            {
              "id": "target-offset",
              "data": {
                "closestOffset": 24,
                "minOffset": 24
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"skip\" href=\"#main\">Skip to content</a>",
          "target": [
            ".skip"
          ]
        }
      ]
    }
  ],
  "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": {
                "messageKey": "nonBmp"
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element content contains only non-text characters"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span aria-hidden=\"true\">\u2192</span>",
          "target": [
            ".hero-actions > .text-link[href$=\"#planner\"] > span[aria-hidden=\"true\"]"
          ],
          "failureSummary": "Fix any of the following:\n  Element content contains only non-text characters"
        }
      ]
    }
  ],
  "violations": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#da653d",
                "bgColor": "#faf8f2",
                "contrastRatio": 3.34,
                "fontSize": "16.5pt (22px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body>",
                  "target": [
                    "body"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.34 (foreground color: #da653d, background color: #faf8f2, font size: 16.5pt (22px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span class=\"tip-number\">01</span>",
          "target": [
            ".tip:nth-child(1) > .tip-number"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.34 (foreground color: #da653d, background color: #faf8f2, font size: 16.5pt (22px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#da653d",
                "bgColor": "#faf8f2",
                "contrastRatio": 3.34,
                "fontSize": "16.5pt (22px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body>",
                  "target": [
                    "body"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.34 (foreground color: #da653d, background color: #faf8f2, font size: 16.5pt (22px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span class=\"tip-number\">02</span>",
          "target": [
            ".tip:nth-child(2) > .tip-number"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.34 (foreground color: #da653d, background color: #faf8f2, font size: 16.5pt (22px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#da653d",
                "bgColor": "#faf8f2",
                "contrastRatio": 3.34,
                "fontSize": "16.5pt (22px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<body>",
                  "target": [
                    "body"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 3.34 (foreground color: #da653d, background color: #faf8f2, font size: 16.5pt (22px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span class=\"tip-number\">03</span>",
          "target": [
            ".tip:nth-child(3) > .tip-number"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 3.34 (foreground color: #da653d, background color: #faf8f2, font size: 16.5pt (22px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#657068",
                "bgColor": "#f0eee6",
                "contrastRatio": 4.44,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section stays\" id=\"stays\">",
                  "target": [
                    "#stays"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.44 (foreground color: #657068, background color: #f0eee6, font size: 11.3pt (15px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p>The right base changes a trip. Our hotel-review checklist looks beyond the lobby: walkability, soundproofing, honest sustainability practices, and whether the welcome feels genuinely local.</p>",
          "target": [
            "#stays > .container > .section-top > div > p"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.44 (foreground color: #657068, background color: #f0eee6, font size: 11.3pt (15px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#657068",
                "bgColor": "#f0eee6",
                "contrastRatio": 4.44,
                "fontSize": "7.5pt (10px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section stays\" id=\"stays\">",
                  "target": [
                    "#stays"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.44 (foreground color: #657068, background color: #f0eee6, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"fine-print\">Stay recommendations are selection advice, not property reviews. Booking links open an independent provider; availability, terms, and payment are handled there.</p>",
          "target": [
            "#stays > .container > .fine-print"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.44 (foreground color: #657068, background color: #f0eee6, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#657068",
                "bgColor": "#efe9db",
                "contrastRatio": 4.26,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"newsletter-box\">",
                  "target": [
                    ".newsletter-box"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.26 (foreground color: #657068, background color: #efe9db, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p>Destination inspiration, smarter planning tips, and a reason to look up from your routine. Thoughtful travel notes, never daily noise.</p>",
          "target": [
            ".newsletter-box > div > p"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.26 (foreground color: #657068, background color: #efe9db, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#657068",
                "bgColor": "#efe9db",
                "contrastRatio": 4.26,
                "fontSize": "7.5pt (10px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"newsletter-box\">",
                  "target": [
                    ".newsletter-box"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.26 (foreground color: #657068, background color: #efe9db, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p class=\"fine-print\">Preview signup: no email is sent or stored. Read our <button type=\"button\" class=\"link-button\" data-story=\"privacy\">privacy note</button>.</p>",
          "target": [
            "#newsletterForm > .fine-print"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.26 (foreground color: #657068, background color: #efe9db, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
        }
      ]
    }
  ],
  "coverage": {
    "contract": "main-document-vertical-scroll",
    "complete": true,
    "positions": [
      {
        "y": 0,
        "height": 6990
      },
      {
        "y": 576,
        "height": 6990
      },
      {
        "y": 1152,
        "height": 6990
      },
      {
        "y": 1728,
        "height": 6990
      },
      {
        "y": 2304,
        "height": 6990
      },
      {
        "y": 2880,
        "height": 6990
      },
      {
        "y": 3456,
        "height": 6990
      },
      {
        "y": 4032,
        "height": 6990
      },
      {
        "y": 4608,
        "height": 6990
      },
      {
        "y": 5184,
        "height": 6990
      },
      {
        "y": 5760,
        "height": 6990
      },
      {
        "y": 6270,
        "height": 6990
      }
    ],
    "scans": 13,
    "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: "Trip Planner", "Guides", "About".
-   **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
    -   Address key topics relevant to the "Travel" category. Consider themes similar to: "Flight Deals", "Solo Travel", "Hotel Reviews".
    -   **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "eco-tourism", "itinerary", "off-the-beaten-path".
    -   **Visuals:** Integrate relevant placeholder images logically within the content sections.
    -   **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "Reserve Hotel", "Find Deals", "Compare Prices".
-   **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: "flight tracker".
-   **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "seasonal picks", "destination spotlights", "deal alerts".
-   **FOOTER:** Include a professional footer with invented contact details, copyright (current year), social media links, and standard links (Privacy, Terms).
-   **MODERN WEB PATTERNS:** Include modern web patterns like testimonial cards, feature grids, or FAQ accordions where appropriate.