{"id":18002,"date":"2026-10-20T11:40:00","date_gmt":"2026-10-20T17:10:00","guid":{"rendered":"https:\/\/www.journohq.com\/blog\/?p=18002"},"modified":"2026-10-20T11:21:47","modified_gmt":"2026-10-20T16:51:47","slug":"best-travel-destinations-under-2500","status":"publish","type":"post","link":"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/","title":{"rendered":"Best Destinations for $1,000-$2,500 Trips in 2026"},"content":{"rendered":"\n<style data-wp-block-html=\"css\">\n\/* =====================================================================\n   Journo blog post components  \u00b7  v1.2  \u00b7  2026-10\n   Every rule is scoped under .jp-post so nothing leaks into the theme,\n   Elementor widgets, header, footer or sidebar.\n   Load this ONCE sitewide (see wpcode-enqueue.php), or paste it inside\n   a style tag at the top of a single post (see journo-post-standalone.html).\n   ===================================================================== *\/\n\n.jp-post {\n  \/* Brand tokens: swap these for Journo's exact brand values *\/\n  --jp-ink: #14212b;          \/* body text *\/\n  --jp-muted: #5b6b76;        \/* captions, meta *\/\n  --jp-paper: #ffffff;        \/* post background *\/\n  --jp-tint: #eef4f6;         \/* TL;DR + table stripes *\/\n  --jp-line: #d5e0e5;         \/* borders *\/\n  --jp-brand: #0f5c6e;        \/* links, headings accents *\/\n  --jp-cta: #e8552d;          \/* CTA button *\/\n  --jp-cta-ink: #ffffff;\n  --jp-gold: #c99a2e;         \/* score bars, framework badge *\/\n  --jp-radius: 10px;\n  --jp-measure: 70ch;\n\n  color: var(--jp-ink);\n  line-height: 1.7;\n  font-size: 1.0625rem;\n}\n.jp-post *, .jp-post *::before, .jp-post *::after { box-sizing: border-box; }\n.jp-post a { color: var(--jp-brand); text-underline-offset: 3px; }\n.jp-post h2, .jp-post h3 { text-wrap: balance; scroll-margin-top: 96px; }\n.jp-post h2 { margin-top: 2.4em; }\n.jp-post :focus-visible { outline: 3px solid var(--jp-gold); outline-offset: 2px; }\n\n\/* Reading progress bar (injected by JS) *\/\n.jp-progress {\n  position: fixed; top: 0; left: 0; height: 4px; width: 100%;\n  transform-origin: 0 50%; transform: scaleX(0);\n  background: var(--jp-brand); z-index: 99999; pointer-events: none;\n}\n\n\/* Opening image at the very top of the post *\/\n.jp-post figure.jp-hero { margin: 0 0 1.5rem; }\n\n\/* Italic teaser under the hero image *\/\n.jp-post .jp-teaser { font-style: italic; color: var(--jp-muted); font-size: 1.125rem; }\n\n\/* TL;DR \/ The short version *\/\n.jp-post .jp-tldr {\n  background: var(--jp-tint); border: 1px solid var(--jp-line);\n  border-radius: var(--jp-radius); padding: 1.25rem 1.5rem; margin: 1.75rem 0;\n}\n.jp-post .jp-tldr__label {\n  font-size: .78rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase;\n  color: var(--jp-brand); margin: 0 0 .5rem;\n}\n.jp-post .jp-tldr ul { margin: 0; padding-left: 1.2rem; }\n.jp-post .jp-tldr li + li { margin-top: .4rem; }\n\n\/* Jump-to table of contents (JS fills it from the H2s) *\/\n.jp-post .jp-toc { border-left: 3px solid var(--jp-line); padding: .25rem 0 .25rem 1rem; margin: 1.75rem 0; }\n.jp-post .jp-toc__label { font-weight: 700; margin: 0 0 .35rem; }\n.jp-post .jp-toc ol { margin: 0; padding-left: 1.2rem; }\n.jp-post .jp-toc a { text-decoration: none; }\n.jp-post .jp-toc a:hover { text-decoration: underline; }\n.jp-post .jp-toc a[aria-current=\"true\"] { font-weight: 700; }\n\n\/* CTA box: Journo Insider \/ $6,640 gifts *\/\n.jp-post .jp-cta {\n  border: 2px solid var(--jp-ink); border-radius: var(--jp-radius);\n  padding: 1.5rem; margin: 2.25rem 0; background: var(--jp-paper);\n  display: grid; gap: .75rem;\n}\n.jp-post .jp-cta__eyebrow { font-size: .78rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--jp-brand); margin: 0; }\n.jp-post .jp-cta__title { font-size: 1.35rem; line-height: 1.3; margin: 0; }\n.jp-post .jp-cta p { margin: 0; }\n.jp-post .jp-cta__fine { font-size: .85rem; color: var(--jp-muted); }\n.jp-post .jp-btn {\n  display: inline-block; justify-self: start;\n  background: var(--jp-cta); color: var(--jp-cta-ink); text-decoration: none;\n  font-weight: 700; padding: .8rem 1.25rem; border-radius: 999px;\n  transition: transform .15s ease, box-shadow .15s ease;\n}\n.jp-post .jp-btn:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(0,0,0,.15); color: var(--jp-cta-ink); }\n\n\/* Named framework box (Liquidity Test, Travel Decision Stack, 5-Signal Score) *\/\n.jp-post .jp-framework {\n  background: var(--jp-ink); color: #f3f6f8; border-radius: var(--jp-radius);\n  padding: 1.5rem; margin: 2rem 0;\n}\n.jp-post .jp-framework a { color: #ffd27a; }\n.jp-post .jp-framework__badge {\n  display: inline-block; background: var(--jp-gold); color: var(--jp-ink);\n  font-size: .72rem; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;\n  padding: .2rem .6rem; border-radius: 999px; margin-bottom: .6rem;\n}\n.jp-post .jp-framework h3 { color: #fff; margin: 0 0 .5rem; }\n.jp-post .jp-framework ol { margin: 0; padding-left: 1.3rem; }\n.jp-post .jp-framework li + li { margin-top: .45rem; }\n\n\/* Quick answer box *\/\n.jp-post .jp-quick { border-left: 5px solid var(--jp-brand); background: var(--jp-tint); padding: 1rem 1.25rem; margin: 1.75rem 0; border-radius: 0 var(--jp-radius) var(--jp-radius) 0; }\n.jp-post .jp-quick strong:first-child { display: block; margin-bottom: .25rem; }\n\n\/* Tables: scroll inside their own box on phones *\/\n.jp-post .jp-table { overflow-x: auto; margin: 1.75rem 0; border: 1px solid var(--jp-line); border-radius: var(--jp-radius); }\n.jp-post .jp-table table { border-collapse: collapse; width: 100%; min-width: 560px; font-size: .95rem; margin: 0; }\n.jp-post .jp-table th, .jp-post .jp-table td { padding: .7rem .9rem; text-align: left; vertical-align: top; border-bottom: 1px solid var(--jp-line); }\n.jp-post .jp-table thead th { background: var(--jp-ink); color: #fff; font-weight: 700; }\n.jp-post .jp-table tbody tr:nth-child(even) { background: var(--jp-tint); }\n.jp-post .jp-table td.jp-num, .jp-post .jp-table th.jp-num { text-align: right; font-variant-numeric: tabular-nums; }\n.jp-post .jp-table caption { caption-side: bottom; font-size: .85rem; color: var(--jp-muted); padding: .6rem .9rem; text-align: left; }\n\n\/* Score bars for \"Scored Honestly\" app posts *\/\n.jp-post .jp-score { display: grid; gap: .5rem; margin: 1rem 0 1.5rem; }\n.jp-post .jp-score__row { display: grid; grid-template-columns: minmax(8rem, 12rem) 1fr 2.5rem; gap: .75rem; align-items: center; font-size: .95rem; }\n.jp-post .jp-score__bar { height: .6rem; background: var(--jp-tint); border-radius: 999px; overflow: hidden; }\n.jp-post .jp-score__bar span { display: block; height: 100%; width: var(--jp-w, 0%); background: var(--jp-gold); border-radius: inherit; transition: width .8s ease; }\n.jp-post .jp-score__val { font-variant-numeric: tabular-nums; font-weight: 700; text-align: right; }\n.jp-post .jp-bestfor { display: inline-block; background: var(--jp-tint); color: var(--jp-brand); font-size: .8rem; font-weight: 700; padding: .15rem .6rem; border-radius: 999px; }\n\n\/* Numbered steps (How do you start \/ Day 1-7 \/ Step 1-5) *\/\n.jp-post .jp-steps { list-style: none; counter-reset: jp-step; padding: 0; margin: 1.5rem 0; display: grid; gap: 1rem; }\n.jp-post .jp-steps > li { counter-increment: jp-step; position: relative; padding-left: 3rem; }\n.jp-post .jp-steps > li::before {\n  content: counter(jp-step); position: absolute; left: 0; top: .1rem;\n  width: 2.1rem; height: 2.1rem; border-radius: 50%; display: grid; place-items: center;\n  background: var(--jp-brand); color: #fff; font-weight: 800; font-size: .95rem;\n}\n\n\/* Operator line \/ pull quote *\/\n.jp-post .jp-pull { font-size: 1.35rem; line-height: 1.4; font-weight: 700; border-top: 2px solid var(--jp-ink); border-bottom: 2px solid var(--jp-ink); padding: 1rem 0; margin: 2rem 0; }\n\n\/* \"Is this you?\" self-check quiz *\/\n.jp-post .jp-quiz { border: 1px solid var(--jp-line); border-radius: var(--jp-radius); padding: 1.25rem 1.5rem; margin: 2rem 0; }\n.jp-post .jp-quiz fieldset { border: 0; padding: 0; margin: 0 0 1rem; }\n.jp-post .jp-quiz legend { font-weight: 700; margin-bottom: .4rem; }\n.jp-post .jp-quiz label { display: inline-flex; gap: .4rem; align-items: center; margin-right: 1rem; cursor: pointer; }\n.jp-post .jp-quiz__result { background: var(--jp-tint); border-radius: var(--jp-radius); padding: .9rem 1.1rem; margin-top: .5rem; }\n\n\/* FAQ: native <details>, works with JS off *\/\n.jp-post .jp-faq { margin: 1.5rem 0; border-top: 1px solid var(--jp-line); }\n.jp-post .jp-faq details { border-bottom: 1px solid var(--jp-line); padding: .9rem 0; }\n.jp-post .jp-faq summary { cursor: pointer; font-weight: 700; list-style: none; display: flex; justify-content: space-between; gap: 1rem; }\n.jp-post .jp-faq summary::-webkit-details-marker { display: none; }\n.jp-post .jp-faq summary::after { content: \"+\"; font-size: 1.3rem; line-height: 1; color: var(--jp-brand); flex: none; }\n.jp-post .jp-faq details[open] summary::after { content: \"\u2013\"; }\n.jp-post .jp-faq details > div { padding-top: .5rem; }\n\n\/* Closing aphorism *\/\n.jp-post .jp-closer { font-size: 1.2rem; font-weight: 700; margin-top: 2rem; }\n\n\/* Headings: set explicitly so the theme can't shrink them to body size *\/\n.jp-post h2 { font-size: clamp(1.6rem, 3.6vw, 2.25rem); line-height: 1.2; font-weight: 800; margin-bottom: .6rem; }\n.jp-post h3 { font-size: 1.2rem; line-height: 1.3; font-weight: 700; margin: 1.6rem 0 .4rem; }\n\n\/* Destination headings in \"Where to Go If You Want\u2026\" posts: clear break before each place.\n   Markup stays the same as the published series, just <h2 class=\"jp-dest-title\">. *\/\n.jp-post h2.jp-dest-title {\n  margin-top: 3.5rem; padding-top: 2.5rem; border-top: 1px solid var(--jp-line);\n  font-size: clamp(1.8rem, 4vw, 2.5rem);\n}\n.jp-post h2.jp-dest-title ~ h3 { color: var(--jp-brand); }\n\n\/* Destination section: one per place, same layout every time *\/\n.jp-post .jp-dest { margin-top: 3.5rem; padding-top: 2.75rem; border-top: 1px solid var(--jp-line); }\n.jp-post .jp-dest__head { margin-bottom: 1.25rem; }\n.jp-post .jp-dest__num {\n  margin: 0 0 .35rem; font-size: .78rem; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; color: var(--jp-brand);\n}\n.jp-post .jp-dest h2 { margin-top: 0; }\n.jp-post .jp-dest__facts {\n  list-style: none; padding: 0; margin: 1rem 0 0;\n  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .6rem;\n}\n.jp-post .jp-dest__facts li {\n  background: var(--jp-tint); border-radius: var(--jp-radius); padding: .7rem .8rem;\n  font-weight: 700; font-size: .95rem; line-height: 1.35; margin: 0;\n}\n.jp-post .jp-dest__facts span {\n  display: block; font-size: .7rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--jp-muted); margin-bottom: .2rem;\n}\n.jp-post .jp-dest h3 { color: var(--jp-brand); }\n.jp-post .jp-dest h3::before {\n  content: \"\"; display: inline-block; width: .55rem; height: .55rem; border-radius: 50%;\n  background: var(--jp-brand); margin-right: .55rem; vertical-align: .12em;\n}\n\n\/* Operator tip callout *\/\n.jp-post .jp-tip {\n  background: #fff6ef; border-left: 5px solid var(--jp-brand); border-radius: 0 var(--jp-radius) var(--jp-radius) 0;\n  padding: 1rem 1.25rem; margin: 1.75rem 0 0;\n}\n.jp-post .jp-tip p { margin: 0; }\n.jp-post .jp-tip__label { font-size: .75rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--jp-brand); margin-bottom: .3rem !important; }\n\n\/* =====================================================================\n   MOTION (v1.1). The script adds .jp-motion to .jp-post, so with JS off,\n   or with \"reduce motion\" switched on, everything simply shows as normal.\n   ===================================================================== *\/\n.jp-post.jp-motion { --jp-ease: cubic-bezier(.2, .7, .2, 1); }\n\n\/* Scroll reveal: fade + rise as each block enters the screen *\/\n.jp-post.jp-motion .jp-reveal {\n  opacity: 0; transform: translateY(28px);\n  transition: opacity .8s var(--jp-ease), transform .8s var(--jp-ease);\n  transition-delay: var(--jp-d, 0ms);\n  will-change: opacity, transform;\n}\n.jp-post.jp-motion .jp-reveal.is-in { opacity: 1; transform: none; }\n\n\/* Headings slide in from the left with an accent bar that draws itself *\/\n.jp-post.jp-motion h2.jp-reveal { transform: translateX(-24px); position: relative; }\n.jp-post.jp-motion h2.jp-reveal.is-in { transform: none; }\n.jp-post.jp-motion h2::after {\n  content: \"\"; display: block; height: 4px; width: 64px; margin-top: .5rem; border-radius: 4px;\n  background: linear-gradient(90deg, var(--jp-brand), var(--jp-gold));\n  transform: scaleX(0); transform-origin: 0 50%; transition: transform .9s var(--jp-ease) .25s;\n}\n.jp-post.jp-motion h2.is-in::after { transform: scaleX(1); }\n\n\/* Images: soft zoom-out reveal, then gentle parallax while scrolling *\/\n.jp-post figure { margin: 2rem 0; overflow: hidden; border-radius: var(--jp-radius); }\n.jp-post figure img { display: block; width: 100%; height: auto; }\n.jp-post.jp-motion figure.jp-reveal {\n  clip-path: inset(6% 6% 6% 6% round 18px); opacity: 0; transform: none;\n  transition: clip-path 1.1s var(--jp-ease), opacity .8s var(--jp-ease);\n}\n.jp-post.jp-motion figure.jp-reveal.is-in { clip-path: inset(0 0 0 0 round var(--jp-radius)); opacity: 1; }\n.jp-post.jp-motion figure img {\n  scale: 1.14; translate: 0 var(--jp-par, 0px);\n  transition: scale 1.6s var(--jp-ease);\n}\n.jp-post.jp-motion figure.is-in img { scale: 1.07; }\n\n\/* CTA boxes: lift on hover, button shimmer every few seconds, arrow nudge *\/\n.jp-post .jp-cta { transition: box-shadow .3s ease, transform .3s ease; }\n.jp-post .jp-cta:hover, .jp-post.jp-motion .jp-cta.jp-reveal.is-in:hover { box-shadow: 0 14px 40px rgba(20, 33, 43, .14); transform: translateY(-3px); }\n.jp-post .jp-btn { position: relative; overflow: hidden; isolation: isolate; }\n.jp-post.jp-motion .jp-btn::after {\n  content: \"\"; position: absolute; inset: 0; z-index: -1;\n  background: linear-gradient(110deg, transparent 30%, rgba(255,255,255,.45) 50%, transparent 70%);\n  transform: translateX(-120%); animation: jp-shimmer 4.5s ease-in-out infinite 1.5s;\n}\n@keyframes jp-shimmer { 0%, 70% { transform: translateX(-120%); } 100% { transform: translateX(120%); } }\n.jp-post .jp-btn:hover { transform: translateY(-2px) scale(1.02); }\n\n\/* \"Best for\" pills pop in *\/\n.jp-post.jp-motion .jp-bestfor.jp-reveal { transform: scale(.8); }\n.jp-post.jp-motion .jp-bestfor.jp-reveal.is-in { transform: none; transition-timing-function: cubic-bezier(.34, 1.56, .64, 1); }\n\n\/* Pull quote: rules draw in from the centre *\/\n.jp-post.jp-motion .jp-pull {\n  border-color: transparent;\n  background:\n    linear-gradient(var(--jp-ink), var(--jp-ink)) top center \/ 0% 2px no-repeat,\n    linear-gradient(var(--jp-ink), var(--jp-ink)) bottom center \/ 0% 2px no-repeat;\n  transition: background-size 1.1s var(--jp-ease) .2s, opacity .8s var(--jp-ease), transform .8s var(--jp-ease);\n}\n.jp-post.jp-motion .jp-pull.is-in { background-size: 100% 2px, 100% 2px; }\n\n\/* Tables: rows slide in one after another, row hover highlight *\/\n.jp-post.jp-motion .jp-table tbody tr.jp-reveal { transform: translateX(18px); }\n.jp-post.jp-motion .jp-table tbody tr.jp-reveal.is-in { transform: none; }\n.jp-post .jp-table tbody tr { transition: background-color .2s ease; }\n.jp-post .jp-table tbody tr:hover { background: #fff6ef; }\n\n\/* Numbered steps: the number circle pops when the step arrives *\/\n.jp-post.jp-motion .jp-steps > li.jp-reveal::before { transform: scale(0); transition: transform .6s cubic-bezier(.34, 1.56, .64, 1) .2s; }\n.jp-post.jp-motion .jp-steps > li.jp-reveal.is-in::before { transform: scale(1); }\n\n\/* Framework box: a slow light sweep across the dark panel *\/\n.jp-post .jp-framework { position: relative; overflow: hidden; }\n.jp-post.jp-motion .jp-framework::before {\n  content: \"\"; position: absolute; inset: -40%; pointer-events: none;\n  background: radial-gradient(circle at center, rgba(201,154,46,.18), transparent 45%);\n  animation: jp-glow 9s ease-in-out infinite alternate;\n}\n.jp-post .jp-framework > * { position: relative; }\n@keyframes jp-glow { from { transform: translate(-25%, -15%); } to { transform: translate(25%, 15%); } }\n\n\/* FAQ answers ease open *\/\n.jp-post .jp-faq details[open] > div { animation: jp-open .45s var(--jp-ease); }\n.jp-post .jp-faq summary::after { transition: transform .3s ease; }\n.jp-post .jp-faq details[open] summary::after { transform: rotate(180deg); }\n.jp-post .jp-faq summary:hover { color: var(--jp-brand); }\n@keyframes jp-open { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }\n\n\/* Back-to-top button (added by the script) *\/\n.jp-top {\n  position: fixed; right: 18px; bottom: calc(18px + env(safe-area-inset-bottom, 0px)); z-index: 9999;\n  width: 46px; height: 46px; border-radius: 50%; border: 0; cursor: pointer;\n  background: #14212b; color: #fff; font-size: 20px; line-height: 46px; text-align: center;\n  box-shadow: 0 8px 24px rgba(0,0,0,.2);\n  opacity: 0; transform: translateY(16px) scale(.9); pointer-events: none;\n  transition: opacity .3s ease, transform .3s ease;\n}\n.jp-top.is-on { opacity: 1; transform: none; pointer-events: auto; }\n.jp-top:hover { transform: translateY(-3px); }\n\n@media (max-width: 600px) {\n  .jp-post .jp-dest__facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n  .jp-post .jp-score__row { grid-template-columns: 1fr 2.5rem; }\n  .jp-post .jp-score__bar { grid-column: 1 \/ -1; grid-row: 2; }\n  .jp-post .jp-cta, .jp-post .jp-framework { padding: 1.15rem; }\n}\n@media (prefers-reduced-motion: reduce) {\n  .jp-post .jp-score__bar span, .jp-post .jp-btn, .jp-post .jp-cta { transition: none; }\n  .jp-post .jp-btn::after, .jp-post .jp-framework::before, .jp-post .jp-faq details[open] > div { animation: none; }\n  .jp-post .jp-cta:hover { transform: none; }\n  .jp-progress { display: none; }\n}\n\n\n\/* =====================================================================\n   Today's layout extras: \"Trip Receipt\" (Article 41, Best Destinations for $1,000-$2,500 Trips in 2026)\n   Layered on top of journo-post.css; only applies to .jp-theme-receipt.\n   Journo colours and fonts are NOT changed (they come from journo-post.css).\n   New this time: hanging price-tag \"From $1,110\" labels on destination headings,\n   a Civilian vs Operator split panel, a printed trip receipt per destination\n   (Civilian and Operator columns, torn bottom edge, stacked cost bar against\n   your budget) and a budget slider with a Civilian \/ Operator switch that\n   updates every receipt and highlights the trips that fit in the table.\n   The stamped postcard Operator tip stays.\n   Dane's rule: orange is used ONLY on real buttons, so non-button accents here are teal or gold.\n   ===================================================================== *\/\n\n\/* Orange only on buttons: move the base non-button accents to teal and gold *\/\nbody:has(.jp-theme-receipt) .jp-progress { background: var(--jp-brand, #0f5c6e); }\n.jp-post.jp-theme-receipt .jp-cta__eyebrow { color: var(--jp-brand); }\n.jp-post.jp-theme-receipt.jp-motion h2::after { background: linear-gradient(90deg, var(--jp-brand), var(--jp-gold)); }\n.jp-post.jp-theme-receipt .jp-table tbody tr:hover { background: var(--jp-tint); }\n\n\/* Destination headings: hanging price tag above the name (no extra markup) *\/\n.jp-post.jp-theme-receipt h2.jp-dest-title::before {\n  content: attr(data-tag);\n  display: table; position: relative; margin: 0 0 .9rem; padding: .5rem 1rem .5rem 1.7rem;\n  font-size: .82rem; line-height: 1.2; font-weight: 800; letter-spacing: .06em; text-transform: uppercase;\n  color: var(--jp-ink); background:\n    radial-gradient(circle at .75rem 50%, var(--jp-paper) .22rem, transparent .26rem),\n    var(--jp-gold);\n  clip-path: polygon(.6rem 0, 100% 0, 100% 100%, .6rem 100%, 0 50%);\n  transform: rotate(-2deg); transform-origin: 0 50%;\n}\n.jp-post.jp-theme-receipt h2.jp-dest-title.jp-rc-swing::before { animation: jp-rc-swing 1s ease 1; }\n@keyframes jp-rc-swing { 0%, 100% { transform: rotate(-2deg); } 30% { transform: rotate(-7deg); } 60% { transform: rotate(1deg); } }\n\n\/* Civilian vs Operator split panel *\/\n.jp-theme-receipt .jp-versus {\n  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0;\n  margin: 1.6rem 0; border: 1px solid var(--jp-line); border-radius: var(--jp-radius); overflow: hidden;\n}\n.jp-theme-receipt .jp-versus__col { padding: 1.2rem 1.3rem; background: var(--jp-tint); }\n.jp-theme-receipt .jp-versus__col.is-op { background: var(--jp-brand); color: #fff; }\n.jp-post.jp-theme-receipt .jp-versus__label {\n  margin: 0 0 .5rem; font-size: .78rem; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; color: var(--jp-muted);\n}\n.jp-post.jp-theme-receipt .jp-versus__col.is-op .jp-versus__label { color: #ffd27a; }\n.jp-theme-receipt .jp-versus ul { margin: 0; padding-left: 1.1rem; }\n.jp-theme-receipt .jp-versus li + li { margin-top: .4rem; }\n\n\/* Budget checker (shown only once the script is running) *\/\n.jp-theme-receipt .jp-budget {\n  display: none; margin: 2.5rem 0 0; padding: 1.3rem 1.5rem 1.1rem;\n  border: 2px solid var(--jp-brand); border-radius: var(--jp-radius); background: var(--jp-paper);\n}\n.jp-theme-receipt.jp-budget-on .jp-budget { display: block; }\n.jp-post.jp-theme-receipt .jp-budget__q { font-size: 1.3rem; font-weight: 800; margin: 0; }\n.jp-post.jp-theme-receipt .jp-budget__hint { margin: .2rem 0 .9rem; color: var(--jp-muted); font-size: .95rem; }\n.jp-theme-receipt .jp-budget__row { display: grid; grid-template-columns: auto 1fr auto; gap: .9rem; align-items: center; }\n.jp-theme-receipt .jp-budget__label { font-size: .75rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--jp-muted); }\n.jp-theme-receipt .jp-budget__range { width: 100%; margin: 0; accent-color: var(--jp-brand); cursor: pointer; }\n.jp-theme-receipt .jp-budget__out {\n  min-width: 5.2rem; text-align: center; font-size: 1.25rem; font-weight: 800; font-variant-numeric: tabular-nums;\n  color: var(--jp-brand); background: var(--jp-tint); border-radius: 8px; padding: .25rem .6rem;\n}\n.jp-theme-receipt .jp-budget__modes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .45rem; margin: 1rem 0 0; }\n.jp-theme-receipt .jp-budget__mode {\n  font: inherit; font-weight: 700; font-size: .95rem; cursor: pointer; margin: 0;\n  padding: .6rem .5rem; border: 1px solid var(--jp-line); border-radius: 8px;\n  background: var(--jp-paper); color: var(--jp-brand); transition: background .2s ease, color .2s ease, border-color .2s ease;\n}\n.jp-theme-receipt .jp-budget__mode:hover { background: var(--jp-tint); border-color: var(--jp-brand); }\n.jp-theme-receipt .jp-budget__mode[aria-pressed=\"true\"] { background: var(--jp-brand); border-color: var(--jp-brand); color: #fff; }\n.jp-post.jp-theme-receipt .jp-budget__sum { margin: .9rem 0 0; font-weight: 700; color: var(--jp-ink); }\n.jp-theme-receipt .jp-budget__sum strong { color: var(--jp-brand); }\n\n\/* Printed trip receipt *\/\n.jp-theme-receipt .jp-rc {\n  position: relative; max-width: 34rem; margin: 1.4rem auto 2.2rem; padding: 1.3rem 1.4rem 1.6rem;\n  background: #fffdf8; border: 1px solid var(--jp-line); border-bottom: 0;\n  box-shadow: 0 16px 34px rgba(20, 33, 43, .1);\n  font-variant-numeric: tabular-nums;\n}\n.jp-theme-receipt .jp-rc::after {\n  content: \"\"; position: absolute; left: -1px; right: -1px; bottom: -12px; height: 12px;\n  background:\n    linear-gradient(-45deg, transparent 8px, #fffdf8 8px) 0 0 \/ 16px 12px repeat-x,\n    linear-gradient(45deg, transparent 8px, #fffdf8 8px) 0 0 \/ 16px 12px repeat-x;\n  filter: drop-shadow(0 2px 0 var(--jp-line));\n}\n.jp-post.jp-theme-receipt .jp-rc__head {\n  display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap;\n  margin: 0 0 .8rem; padding-bottom: .7rem; border-bottom: 2px dashed var(--jp-line);\n  font-size: .75rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--jp-muted);\n}\n.jp-post.jp-theme-receipt .jp-rc__head span:first-child { color: var(--jp-brand); }\n.jp-post.jp-theme-receipt .jp-rc__table { width: 100%; border-collapse: collapse; margin: 0; font-size: .95rem; }\n.jp-post.jp-theme-receipt .jp-rc__table th, .jp-post.jp-theme-receipt .jp-rc__table td {\n  padding: .4rem .3rem; border: 0; text-align: left; vertical-align: baseline; background: none;\n}\n.jp-post.jp-theme-receipt .jp-rc__table .jp-num { text-align: right; white-space: nowrap; }\n.jp-post.jp-theme-receipt .jp-rc__table thead th {\n  font-size: .7rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; color: var(--jp-muted);\n}\n.jp-post.jp-theme-receipt .jp-rc__table tbody td { border-bottom: 1px dotted var(--jp-line); }\n.jp-post.jp-theme-receipt .jp-rc__table tfoot th, .jp-post.jp-theme-receipt .jp-rc__table tfoot td {\n  padding-top: .7rem; border-top: 2px solid var(--jp-ink); font-size: 1.1rem; font-weight: 800;\n}\n.jp-post.jp-theme-receipt .jp-rc__table tr td:last-child, .jp-post.jp-theme-receipt .jp-rc__table tr th:last-child { color: var(--jp-brand); font-weight: 700; }\n.jp-post.jp-theme-receipt .jp-rc__table tfoot td:last-child { font-weight: 800; }\n.jp-theme-receipt .jp-rc.is-civ .jp-rc__table tr > :nth-child(3) { opacity: .45; }\n.jp-theme-receipt .jp-rc.is-op .jp-rc__table tr > :nth-child(2) { opacity: .45; }\n.jp-theme-receipt .jp-rc__table tr > * { transition: opacity .3s ease; }\n.jp-post.jp-theme-receipt .jp-rc__lever { margin: .9rem 0 0; font-size: .95rem; line-height: 1.55; }\n.jp-post.jp-theme-receipt .jp-rc__lever strong { color: var(--jp-brand); }\n\n\/* Stacked cost bar against the budget (built by the script) *\/\n.jp-theme-receipt .jp-rc__meter:empty { display: none; }\n.jp-theme-receipt .jp-rc__meter { margin: 1.9rem 0 0; }\n.jp-theme-receipt .jp-rc__bar {\n  position: relative; display: flex; height: 16px; border-radius: 999px; overflow: visible; background: var(--jp-tint);\n}\n.jp-theme-receipt .jp-rc__seg { display: block; height: 100%; width: 0; transition: width .7s cubic-bezier(.2, .7, .2, 1); }\n.jp-theme-receipt .jp-rc__seg:first-child { border-radius: 999px 0 0 999px; }\n.jp-theme-receipt .jp-rc__seg.k-flight { background: var(--jp-ink); }\n.jp-theme-receipt .jp-rc__seg.k-stay { background: var(--jp-brand); }\n.jp-theme-receipt .jp-rc__seg.k-food { background: var(--jp-gold); }\n.jp-theme-receipt .jp-rc__seg.k-fun { background: #5f9fae; }\n.jp-theme-receipt .jp-rc__seg.k-move { background: #a9c3cb; }\n.jp-theme-receipt .jp-rc__cap {\n  position: absolute; top: -6px; bottom: -6px; width: 3px; margin-left: -1px; border-radius: 2px;\n  background: var(--jp-ink); transition: left .5s ease;\n}\n.jp-theme-receipt .jp-rc__cap::after {\n  content: \"Budget\"; position: absolute; top: -1.15rem; left: 50%; transform: translateX(-50%);\n  font-size: .62rem; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; color: var(--jp-muted); white-space: nowrap;\n}\n.jp-theme-receipt .jp-rc__keys { display: flex; flex-wrap: wrap; gap: .3rem .9rem; margin: .55rem 0 0; padding: 0; list-style: none; font-size: .78rem; color: var(--jp-muted); }\n.jp-theme-receipt .jp-rc__keys li { margin: 0; display: inline-flex; align-items: center; gap: .35rem; }\n.jp-theme-receipt .jp-rc__keys i { display: inline-block; width: .7rem; height: .7rem; border-radius: 2px; }\n.jp-post.jp-theme-receipt .jp-rc__verdict {\n  display: inline-block; margin: .75rem 0 0; padding: .3rem .8rem; border-radius: 999px;\n  font-size: .85rem; font-weight: 800; line-height: 1.3;\n}\n.jp-theme-receipt .jp-rc__verdict.is-fit { background: var(--jp-brand); color: #fff; }\n.jp-theme-receipt .jp-rc__verdict.is-over { background: #f7efd9; color: #7a5a12; }\n.jp-theme-receipt .jp-rc.jp-rc-stamp .jp-rc__verdict { animation: jp-rc-stamp .5s cubic-bezier(.34, 1.56, .64, 1) 1; }\n@keyframes jp-rc-stamp { from { transform: scale(1.25) rotate(-4deg); opacity: .3; } to { transform: none; opacity: 1; } }\n\n\/* Receipt prints in as it scrolls into view *\/\n.jp-post.jp-motion.jp-theme-receipt .jp-rc.jp-reveal { clip-path: inset(0 0 100% 0); opacity: 1; transform: none; transition: clip-path 1.1s cubic-bezier(.2, .7, .2, 1); }\n.jp-post.jp-motion.jp-theme-receipt .jp-rc.jp-reveal.is-in { clip-path: inset(0 0 -20px 0); }\n\n\/* Comparison table: rows that fit the chosen budget *\/\n.jp-post.jp-theme-receipt .jp-table tbody tr.is-fit td { background: rgba(15, 92, 110, .08); }\n.jp-post.jp-theme-receipt .jp-table tbody tr.is-fit td:first-child { box-shadow: inset 4px 0 0 var(--jp-brand); font-weight: 700; }\n.jp-post.jp-theme-receipt .jp-table.is-civ tbody td:nth-child(4), .jp-post.jp-theme-receipt .jp-table.is-op tbody td:nth-child(3) { color: var(--jp-muted); }\n\n\/* Operator tip as a stamped paper postcard (recurring feature) *\/\n.jp-theme-receipt .jp-postcard {\n  position: relative; margin: 2rem 0 0; padding: 1.4rem 7.5rem 1.4rem 1.5rem;\n  background:\n    repeating-linear-gradient(180deg, transparent 0 1.9rem, rgba(15, 92, 110, .08) 1.9rem calc(1.9rem + 1px)),\n    #fffaf3;\n  border: 1px solid var(--jp-line); border-radius: 6px;\n  box-shadow: 0 12px 28px rgba(20, 33, 43, .08);\n  transform: rotate(-.4deg);\n}\n.jp-post.jp-theme-receipt .jp-postcard h3 {\n  margin: 0 0 .35rem; font-size: .78rem; letter-spacing: .14em; text-transform: uppercase; color: var(--jp-brand);\n}\n.jp-post.jp-theme-receipt .jp-postcard h3::before { display: none; }\n.jp-theme-receipt .jp-postcard p { margin: 0; }\n.jp-theme-receipt .jp-postcard::after {\n  content: attr(data-stamp);\n  position: absolute; top: 1rem; right: 1rem; width: 5.25rem; height: 5.25rem;\n  display: grid; place-items: center; text-align: center; padding: .4rem;\n  font-size: .78rem; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; line-height: 1.1;\n  color: var(--jp-brand); border: 2px dashed var(--jp-brand); border-radius: 50%; opacity: .7; transform: rotate(-9deg);\n}\n.jp-post.jp-motion.jp-theme-receipt .jp-postcard.jp-reveal { transform: rotate(-2deg) translateY(20px); }\n.jp-post.jp-motion.jp-theme-receipt .jp-postcard.jp-reveal.is-in { transform: rotate(-.4deg); }\n\n\/* TL;DR label, FAQ questions and Quick answer label are h3s (for Yoast) but keep their usual look *\/\n.jp-post.jp-theme-receipt .jp-tldr h3.jp-tldr__label {\n  font-size: .78rem; line-height: 1.4; font-weight: 800; letter-spacing: .12em; text-transform: uppercase;\n  color: var(--jp-brand); margin: 0 0 .5rem;\n}\n.jp-post.jp-theme-receipt .jp-faq summary h3.jp-faq__q {\n  display: inline; margin: 0; font-size: inherit; line-height: inherit; font-weight: 700; color: inherit;\n}\n.jp-post.jp-theme-receipt .jp-quick h3.jp-quick__label { font-size: 1.0625rem; line-height: 1.7; font-weight: 700; color: inherit; margin: 0 0 .25rem; }\n\n@media (max-width: 600px) {\n  .jp-theme-receipt .jp-versus { grid-template-columns: minmax(0, 1fr); }\n  .jp-theme-receipt .jp-budget { padding: 1.1rem 1rem .9rem; }\n  .jp-theme-receipt .jp-budget__row { grid-template-columns: 1fr auto; }\n  .jp-theme-receipt .jp-budget__label { display: none; }\n  .jp-theme-receipt .jp-budget__modes { grid-template-columns: minmax(0, 1fr); }\n  .jp-theme-receipt .jp-rc { padding: 1.1rem 1rem 1.4rem; }\n  .jp-post.jp-theme-receipt .jp-rc__table { font-size: .88rem; }\n  .jp-theme-receipt .jp-postcard { padding: 4.6rem 1.15rem 1.2rem; }\n  .jp-theme-receipt .jp-postcard::after { width: 3.9rem; height: 3.9rem; font-size: .6rem; top: .6rem; }\n}\n@media (prefers-reduced-motion: reduce) {\n  .jp-theme-receipt .jp-postcard, .jp-post.jp-motion.jp-theme-receipt .jp-postcard.jp-reveal { transform: none; }\n  .jp-post.jp-theme-receipt h2.jp-dest-title.jp-rc-swing::before, .jp-theme-receipt .jp-rc.jp-rc-stamp .jp-rc__verdict { animation: none; }\n  .jp-theme-receipt .jp-rc__seg, .jp-theme-receipt .jp-rc__cap { transition: none; }\n}\n\n\/* Destination photo sits above its place name (Kurt, Oct 20): the divider moves above the photo *\/\n.jp-post.jp-theme-receipt figure.jp-dest-photo { margin: 4rem 0 0; }\n.jp-post.jp-theme-receipt figure.jp-dest-photo + h2.jp-dest-title { margin-top: 1.6rem; padding-top: 0; border-top: 0; }\n\n<\/style>\n\n<script data-wp-block-html=\"js\">\n\/* =====================================================================\n   Journo blog post behaviour  \u00b7  v1.2  \u00b7  2026-10\n   Vanilla JS, no dependencies, safe to load deferred or inline.\n   Does nothing on pages without a .jp-post wrapper, and every feature\n   degrades gracefully: with JS off the post still reads fully.\n   ===================================================================== *\/\n(function () {\n  'use strict';\n\n  function ready(fn) {\n    if (document.readyState !== 'loading') fn();\n    else document.addEventListener('DOMContentLoaded', fn);\n  }\n\n  function slugify(text) {\n    return text.toLowerCase()\n      .replace(\/[^\\w\\s-]\/g, '')\n      .trim()\n      .replace(\/\\s+\/g, '-')\n      .slice(0, 60);\n  }\n\n  ready(function () {\n    var post = document.querySelector('.jp-post');\n    if (!post || post.dataset.jpInit) return;\n    post.dataset.jpInit = '1';\n\n    \/* 1. Give every H2 a stable id so \"Jump to\" links and shares work *\/\n    var headings = Array.prototype.slice.call(post.querySelectorAll('h2'))\n      .filter(function (h) { return !h.closest('.jp-cta, .jp-tldr, .jp-toc, [data-jp-no-toc]'); });\n    var used = {};\n    headings.forEach(function (h) {\n      if (!h.id) {\n        var id = slugify(h.textContent) || 'section';\n        while (used[id] || document.getElementById(id)) id += '-x';\n        h.id = id;\n      }\n      used[h.id] = true;\n    });\n\n    \/* 2. Build the Jump-to list inside any empty .jp-toc *\/\n    var toc = post.querySelector('.jp-toc');\n    var tocLinks = [];\n    if (toc && headings.length) {\n      var list = toc.querySelector('ol') || toc.appendChild(document.createElement('ol'));\n      if (!list.children.length) {\n        headings.forEach(function (h) {\n          var li = document.createElement('li');\n          var a = document.createElement('a');\n          a.href = '#' + h.id;\n          a.textContent = h.dataset.tocLabel || h.textContent.replace(\/^\\W+\\s*\/, '');\n          li.appendChild(a);\n          list.appendChild(li);\n        });\n      }\n      tocLinks = Array.prototype.slice.call(list.querySelectorAll('a'));\n    }\n\n    \/* 3. Reading progress bar + current-section highlight *\/\n    if (!document.querySelector('.jp-progress')) {\n      var bar = document.createElement('div');\n      bar.className = 'jp-progress';\n      bar.setAttribute('aria-hidden', 'true');\n      document.body.appendChild(bar);\n      var ticking = false;\n      var update = function () {\n        var r = post.getBoundingClientRect();\n        var total = r.height - window.innerHeight;\n        var p = total > 0 ? Math.min(1, Math.max(0, -r.top \/ total)) : 1;\n        bar.style.transform = 'scaleX(' + p + ')';\n        if (tocLinks.length) {\n          var current = null;\n          headings.forEach(function (h) { if (h.getBoundingClientRect().top < 140) current = h.id; });\n          tocLinks.forEach(function (a) { a.setAttribute('aria-current', a.hash === '#' + current ? 'true' : 'false'); });\n        }\n        ticking = false;\n      };\n      window.addEventListener('scroll', function () {\n        if (!ticking) { ticking = true; requestAnimationFrame(update); }\n      }, { passive: true });\n      update();\n    }\n\n    \/* 4. Score bars: <div class=\"jp-score__bar\" data-score=\"4\" data-max=\"5\"> *\/\n    var bars = post.querySelectorAll('.jp-score__bar[data-score]');\n    var fill = function (el) {\n      var pct = (parseFloat(el.dataset.score) \/ parseFloat(el.dataset.max || 5)) * 100;\n      var span = el.querySelector('span') || el.appendChild(document.createElement('span'));\n      span.style.setProperty('--jp-w', Math.max(0, Math.min(100, pct)) + '%');\n    };\n    if ('IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function (entries) {\n        entries.forEach(function (e) { if (e.isIntersecting) { fill(e.target); io.unobserve(e.target); } });\n      }, { threshold: 0.3 });\n      Array.prototype.forEach.call(bars, function (b) { io.observe(b); });\n    } else {\n      Array.prototype.forEach.call(bars, fill);\n    }\n\n    \/* 5. \"Is this you?\" quiz: count \"yes\" answers, show matching result *\/\n    Array.prototype.forEach.call(post.querySelectorAll('.jp-quiz'), function (quiz) {\n      var out = quiz.querySelector('.jp-quiz__result');\n      var results = quiz.querySelectorAll('[data-jp-result]');\n      var render = function () {\n        var groups = quiz.querySelectorAll('fieldset');\n        var answered = 0, yes = 0;\n        Array.prototype.forEach.call(groups, function (g) {\n          var picked = g.querySelector('input:checked');\n          if (picked) { answered++; if (picked.value === 'yes') yes++; }\n        });\n        if (!out || answered < groups.length) return;\n        var match = null;\n        Array.prototype.forEach.call(results, function (r) {\n          if (yes >= parseInt(r.dataset.jpResult, 10)) match = r;\n        });\n        out.innerHTML = match ? match.innerHTML : '';\n        out.hidden = !match;\n      };\n      quiz.addEventListener('change', render);\n    });\n\n    \/* 6. FAQ: keep one answer open at a time (optional, opt-in) *\/\n    Array.prototype.forEach.call(post.querySelectorAll('.jp-faq[data-single]'), function (faq) {\n      faq.addEventListener('toggle', function (e) {\n        if (!e.target.open) return;\n        Array.prototype.forEach.call(faq.querySelectorAll('details[open]'), function (d) {\n          if (d !== e.target) d.open = false;\n        });\n      }, true);\n    });\n\n    \/* 7. CTA click tracking: pushes to GA4\/GTM dataLayer if present *\/\n    post.addEventListener('click', function (e) {\n      var a = e.target.closest && e.target.closest('a.jp-btn, .jp-cta a');\n      if (!a) return;\n      var box = a.closest('.jp-cta');\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push({\n        event: 'journo_cta_click',\n        cta_id: (box && box.dataset.ctaId) || 'unlabelled',\n        cta_text: a.textContent.trim(),\n        cta_url: a.href,\n        post_path: location.pathname\n      });\n    });\n\n    \/* 8. MOTION: scroll reveals, staggered lists, image parallax,\n          number count-up, back-to-top. Skipped for \"reduce motion\". *\/\n    var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    if (reduce || !('IntersectionObserver' in window)) return;\n\n    var targets = [];\n    var add = function (el, delay) {\n      if (!el || el.classList.contains('jp-reveal')) return;\n      if (delay) el.style.setProperty('--jp-d', delay + 'ms');\n      targets.push(el);\n    };\n    \/\/ Top-level blocks of the post\n    var BLOCK = \/^(P|H2|H3|UL|OL|FIGURE|NAV|DIV|ASIDE|BLOCKQUOTE|HEADER)$\/;\n    var addBlocks = function (parent) {\n      Array.prototype.forEach.call(parent.children, function (el) {\n        if (el.tagName === 'SECTION') { addBlocks(el); return; }\n        if (el.classList.contains('jp-dest__head')) { addBlocks(el); return; }\n        if (el.classList.contains('jp-dest__facts')) return;\n        if (BLOCK.test(el.tagName) && !el.classList.contains('jp-steps')) add(el);\n      });\n    };\n    addBlocks(post);\n    \/\/ Staggered children\n    var stagger = function (sel, step) {\n      Array.prototype.forEach.call(post.querySelectorAll(sel), function (list) {\n        Array.prototype.forEach.call(list.children, function (child, i) { add(child, i * step); });\n      });\n    };\n    stagger('.jp-steps', 120);\n    stagger('.jp-table tbody', 90);\n    stagger('.jp-faq', 70);\n    stagger('.jp-dest__facts', 100);\n    Array.prototype.forEach.call(post.querySelectorAll('.jp-tldr li, .jp-framework li'), function (li, i, all) {\n      add(li, 150 + (Array.prototype.indexOf.call(li.parentNode.children, li) * 110));\n    });\n    Array.prototype.forEach.call(post.querySelectorAll('.jp-bestfor'), function (el) { add(el, 120); });\n\n    \/\/ Anything already on screen shows instantly; the rest waits for scroll\n    var vh = window.innerHeight;\n    targets.forEach(function (el) {\n      el.classList.add('jp-reveal');\n      if (el.getBoundingClientRect().top < vh * 0.92) el.classList.add('is-in');\n    });\n    post.classList.add('jp-motion');\n\n    var countUp = function (table) {\n      Array.prototype.forEach.call(table.querySelectorAll('td.jp-num'), function (td) {\n        var text = td.textContent;\n        var nums = text.match(\/\\d[\\d,]*\/g);\n        if (!nums) return;\n        var t0 = null, dur = 1200;\n        var tick = function (t) {\n          if (!t0) t0 = t;\n          var k = Math.min(1, (t - t0) \/ dur);\n          var e = 1 - Math.pow(1 - k, 3);\n          var i = 0;\n          td.textContent = text.replace(\/\\d[\\d,]*\/g, function (n) {\n            var v = Math.round(parseInt(n.replace(\/,\/g, ''), 10) * e);\n            i++;\n            return n.indexOf(',') > -1 ? v.toLocaleString('en-US') : String(v);\n          });\n          if (k < 1) requestAnimationFrame(tick); else td.textContent = text;\n        };\n        requestAnimationFrame(tick);\n      });\n    };\n\n    var revealer = new IntersectionObserver(function (entries) {\n      entries.forEach(function (e) {\n        if (!e.isIntersecting) return;\n        e.target.classList.add('is-in');\n        if (e.target.classList.contains('jp-table')) countUp(e.target);\n        revealer.unobserve(e.target);\n      });\n    }, { rootMargin: '0px 0px -8% 0px', threshold: 0.12 });\n    targets.forEach(function (el) { if (!el.classList.contains('is-in')) revealer.observe(el); });\n\n    \/\/ Parallax on in-body images + back-to-top button\n    var figs = Array.prototype.slice.call(post.querySelectorAll('figure'));\n    var topBtn = document.createElement('button');\n    topBtn.type = 'button';\n    topBtn.className = 'jp-top';\n    topBtn.setAttribute('aria-label', 'Back to top');\n    topBtn.textContent = '\u2191';\n    topBtn.addEventListener('click', function () { window.scrollTo({ top: 0, behavior: 'smooth' }); });\n    document.body.appendChild(topBtn);\n\n    var moving = false;\n    var onScroll = function () {\n      var h = window.innerHeight;\n      figs.forEach(function (f) {\n        var r = f.getBoundingClientRect();\n        if (r.bottom < 0 || r.top > h) return;\n        var off = ((r.top + r.height \/ 2) - h \/ 2) * -0.06;\n        f.style.setProperty('--jp-par', off.toFixed(1) + 'px');\n      });\n      var pr = post.getBoundingClientRect();\n      topBtn.classList.toggle('is-on', -pr.top > h * 0.8);\n      moving = false;\n    };\n    window.addEventListener('scroll', function () {\n      if (!moving) { moving = true; requestAnimationFrame(onScroll); }\n    }, { passive: true });\n    onScroll();\n  });\n})();\n\n\/* Today's extra behaviour (\"Trip Receipt\"): the budget slider and the\n   Civilian \/ Operator switch. Every trip receipt gets a stacked cost bar with\n   a budget marker and a \"fits with $X to spare\" or \"over by $X\" verdict, the\n   comparison table highlights the trips that fit, and a summary line lists them.\n   Written without less-than signs, line comments or non-ASCII characters so it\n   runs inside the WordPress code block. *\/\n(function () {\n  'use strict';\n  function ready(fn) { if (document.readyState !== 'loading') fn(); else document.addEventListener('DOMContentLoaded', fn); }\n  ready(function () {\n    var post = document.querySelector('.jp-post.jp-theme-receipt');\n    if (!post || post.dataset.jpThemeInit) return;\n    post.dataset.jpThemeInit = '1';\n\n    var box = post.querySelector('.jp-budget');\n    if (!box) return;\n    var range = box.querySelector('.jp-budget__range');\n    var out = box.querySelector('.jp-budget__out');\n    var modes = Array.prototype.slice.call(box.querySelectorAll('.jp-budget__mode'));\n    var sum = box.querySelector('.jp-budget__sum');\n    var receipts = Array.prototype.slice.call(post.querySelectorAll('.jp-rc'));\n    var table = post.querySelector('.jp-table');\n    var rows = Array.prototype.slice.call(post.querySelectorAll('.jp-table tr[data-civ]'));\n    var SCALE = 2500;\n    var KEY = 'jpReceiptState';\n    var LABELS = { flight: 'Flight', stay: 'Stay', food: 'Food', fun: 'Activities', move: 'Transport' };\n    var COLORS = { flight: '#14212b', stay: '#0f5c6e', food: '#c99a2e', fun: '#5f9fae', move: '#a9c3cb' };\n\n    var money = function (n) { return '$' + Math.round(n).toLocaleString('en-US'); };\n    var num = function (el) { return el ? parseInt(el.textContent.replace(\/[^0-9]\/g, ''), 10) || 0 : 0; };\n    var join = function (list) {\n      if (list.length === 1) return list[0];\n      return list.slice(0, -1).join(', ') + ' and ' + list[list.length - 1];\n    };\n    var findHeading = function (el) {\n      var h = el.previousElementSibling;\n      while (h && h.tagName !== 'H2') h = h.previousElementSibling;\n      return h;\n    };\n\n    var cards = receipts.map(function (rc) {\n      var lines = Array.prototype.slice.call(rc.querySelectorAll('tbody tr[data-k]')).map(function (tr) {\n        return { k: tr.dataset.k, civ: num(tr.querySelector('.jp-rc__civ')), op: num(tr.querySelector('.jp-rc__op')) };\n      });\n      var meter = rc.querySelector('.jp-rc__meter');\n      var bar = document.createElement('div');\n      bar.className = 'jp-rc__bar';\n      bar.setAttribute('aria-hidden', 'true');\n      var segs = {};\n      lines.forEach(function (l) {\n        var s = document.createElement('span');\n        s.className = 'jp-rc__seg k-' + l.k;\n        bar.appendChild(s);\n        segs[l.k] = s;\n      });\n      var cap = document.createElement('span');\n      cap.className = 'jp-rc__cap';\n      bar.appendChild(cap);\n      var keys = document.createElement('ul');\n      keys.className = 'jp-rc__keys';\n      keys.setAttribute('aria-hidden', 'true');\n      lines.forEach(function (l) {\n        var li = document.createElement('li');\n        var i = document.createElement('i');\n        i.style.background = COLORS[l.k] || '#a9c3cb';\n        li.appendChild(i);\n        li.appendChild(document.createTextNode(LABELS[l.k] || l.k));\n        keys.appendChild(li);\n      });\n      var verdict = document.createElement('p');\n      verdict.className = 'jp-rc__verdict';\n      if (meter) { meter.appendChild(bar); meter.appendChild(keys); meter.appendChild(verdict); }\n      return { el: rc, name: rc.dataset.name || '', lines: lines, segs: segs, cap: cap, verdict: verdict };\n    });\n\n    var state = { budget: parseInt(range.value, 10) || 1500, mode: 'op' };\n    try {\n      var saved = JSON.parse(localStorage.getItem(KEY) || 'null');\n      if (saved && saved.budget >= 1000 && 2500 >= saved.budget) state.budget = saved.budget;\n      if (saved && (saved.mode === 'civ' || saved.mode === 'op')) state.mode = saved.mode;\n    } catch (e) {}\n\n    var apply = function (animate) {\n      var b = state.budget, m = state.mode;\n      range.value = String(b);\n      out.textContent = money(b);\n      modes.forEach(function (btn) { btn.setAttribute('aria-pressed', btn.dataset.mode === m ? 'true' : 'false'); });\n      var fits = [];\n      cards.forEach(function (c) {\n        var total = 0;\n        c.lines.forEach(function (l) {\n          var v = m === 'op' ? l.op : l.civ;\n          total += v;\n          c.segs[l.k].style.width = Math.min(100, (v \/ SCALE) * 100) + '%';\n        });\n        c.cap.style.left = Math.min(100, (b \/ SCALE) * 100) + '%';\n        c.el.classList.toggle('is-op', m === 'op');\n        c.el.classList.toggle('is-civ', m === 'civ');\n        var gap = b - total;\n        var label = m === 'op' ? 'Operator' : 'Civilian';\n        c.verdict.classList.remove('is-fit', 'is-over');\n        if (gap >= 0) {\n          fits.push(c.name);\n          c.verdict.classList.add('is-fit');\n          c.verdict.textContent = label + ' total ' + money(total) + ': fits with ' + money(gap) + ' to spare';\n        } else {\n          c.verdict.classList.add('is-over');\n          c.verdict.textContent = label + ' total ' + money(total) + ': over by ' + money(-gap);\n        }\n        if (animate) {\n          c.el.classList.remove('jp-rc-stamp'); void c.el.offsetWidth; c.el.classList.add('jp-rc-stamp');\n          if (gap >= 0) {\n            var h = findHeading(c.el);\n            if (h) { h.classList.remove('jp-rc-swing'); void h.offsetWidth; h.classList.add('jp-rc-swing'); }\n          }\n        }\n      });\n      rows.forEach(function (tr) {\n        var t = parseInt(m === 'op' ? tr.dataset.op : tr.dataset.civ, 10);\n        tr.classList.toggle('is-fit', b >= t);\n      });\n      if (table) { table.classList.toggle('is-op', m === 'op'); table.classList.toggle('is-civ', m === 'civ'); }\n      if (sum) {\n        while (sum.firstChild) sum.removeChild(sum.firstChild);\n        sum.appendChild(document.createTextNode('At ' + money(b) + ' per person, booked like ' + (m === 'op' ? 'an Operator' : 'a Civilian') + ': '));\n        var s = document.createElement('strong');\n        if (fits.length) {\n          s.textContent = fits.length + ' of ' + cards.length + ' trips fit';\n          sum.appendChild(s);\n          sum.appendChild(document.createTextNode(' (' + join(fits) + ').'));\n          if (m === 'civ' && cards.length > fits.length) sum.appendChild(document.createTextNode(' Switch to Operator to see what else fits.'));\n        } else {\n          s.textContent = 'none of these trips fit yet';\n          sum.appendChild(s);\n          sum.appendChild(document.createTextNode(m === 'civ' ? '. Try booking like an Operator.' : '. Try a shorter trip or points for the flight.'));\n        }\n      }\n    };\n\n    var save = function () { try { localStorage.setItem(KEY, JSON.stringify(state)); } catch (e) {} };\n    var track = function () {\n      if (window.dataLayer) window.dataLayer.push({ event: 'journo_budget_check', budget: state.budget, mode: state.mode });\n    };\n\n    apply(false);\n    range.addEventListener('input', function () { state.budget = parseInt(range.value, 10) || 1500; apply(false); });\n    range.addEventListener('change', function () { apply(true); save(); track(); });\n    modes.forEach(function (btn) {\n      btn.addEventListener('click', function () { state.mode = btn.dataset.mode; apply(true); save(); track(); });\n    });\n    post.classList.add('jp-budget-on');\n  });\n})();\n<\/script>\n\n<div class=\"jp-post jp-theme-receipt\" data-jp-version=\"1.0\" data-jp-theme=\"trip-receipt\">\n\n  <figure class=\"jp-hero\">\n    <img decoding=\"async\" src=\"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/best-travel-destinations-under-2500-trip-budget-journo.jpeg\" alt=\"A traveler planning a trip with a notebook and boarding pass, looking for the best travel destinations under $2500\" width=\"1200\" height=\"630\" fetchpriority=\"high\">\n  <\/figure>\n\n  <p class=\"jp-teaser\">The best travel destinations under $2500 are not the cheapest places on the map; they are the places where $1,000 to $2,500 per person still pays for the flight, a good room, great food and the thing you actually came for.<\/p>\n\n  <p>Most &#8220;cheap trip&#8221; lists quote a hostel bed and a street-food lunch, and then the real bill arrives. In fact, the flight alone can eat half a $2,000 budget before you have booked a single night. So this guide prices the whole trip: the round-trip flight from the US, 7 nights sharing a room, food, activities and local transport.<\/p>\n  <p>Then it does something most budget guides skip. Each destination gets two receipts side by side: what a Civilian usually pays, and what an Operator pays for the same trip by changing the timing, the neighborhood and a few bookings. Our picks for the best travel destinations under $2500 are Oaxaca in Mexico, Antigua and Lake Atitl\u00e1n in Guatemala, Cartagena in Colombia, Seville and Granada in Spain, and Hanoi and Hoi An in Vietnam. Also, set your own budget in the trip checker below, and every receipt tells you whether that trip fits.<\/p>\n\n  <div class=\"jp-tldr\" role=\"note\" aria-label=\"Summary\">\n    <h3 class=\"jp-tldr__label\">TL;DR: the best travel destinations under $2500<\/h3>\n    <ul>\n      <li>Five trips fit a $1,000 to $2,500 per-person budget with flights included: Oaxaca, Guatemala, Cartagena, Andalusia (Seville and Granada) and northern and central Vietnam.<\/li>\n      <li>Booked like a Civilian, they cost about $1,600 to $2,300 per person for 7 nights. Booked like an Operator, the same trips cost about $1,100 to $1,700.<\/li>\n      <li>The savings rarely come from staying somewhere worse. Instead, they come from four levers: the right month, the right neighborhood, booking the scarce thing direct and using points for the flight.<\/li>\n      <li>The Travel Decision Stack (Experience, Real Cost, Timing, Execution) is how to choose, and this guide starts from the Real Cost layer.<\/li>\n      <li>Not sure which fits? Set your budget in the trip checker below and see which receipts still come in under it.<\/li>\n    <\/ul>\n  <\/div>\n\n  <div class=\"jp-cta\" data-cta-id=\"gifts-top\">\n    <p class=\"jp-cta__eyebrow\">Journo Insider<\/p>\n    <p class=\"jp-cta__title\">Get $6,640 in travel gifts \u2014 just for saying &#8220;maybe&#8221;<\/p>\n    <p>Start the 14-day free trial and keep the gifts even if you cancel.<\/p>\n    <a class=\"jp-btn\" href=\"https:\/\/www.journotravelhub.com\/mifge\">Claim your free gifts \u2192<\/a>\n    <p class=\"jp-cta__fine\">No credit card required. Cancel any time.<\/p>\n  <\/div>\n\n  <nav class=\"jp-toc\" aria-label=\"Jump to\">\n    <p class=\"jp-toc__label\">Jump to<\/p>\n    <ol><\/ol>\n  <\/nav>\n\n  <h2>What does $1,000 to $2,500 actually buy in 2026?<\/h2>\n  <p>More than most people think, as long as you count everything. A budget of $1,000 to $2,500 per person covers a full week abroad in a lot of places. However, it only works where two things are true at once: the flight from the US is reasonable, and a comfortable room and a good dinner still cost far less than at home.<\/p>\n  <p>That second part is where a budget quietly breaks. For example, a place with $40 hotel rooms and a $1,400 flight can cost more than a place with $120 rooms and a $400 flight. Our guide to <a href=\"https:\/\/www.journohq.com\/blog\/true-cost-of-travel\/\">why cheap destinations aren&#8217;t always cheap<\/a> shows this in detail, so here we simply price every line. Every receipt below assumes:<\/p>\n  <ul>\n    <li><strong>One traveler&#8217;s share<\/strong> of a double room, in a well-reviewed small hotel or guesthouse, not a hostel.<\/li>\n    <li><strong>A round-trip economy flight<\/strong> from a major US hub, booked two to four months ahead.<\/li>\n    <li><strong>Three real meals a day<\/strong>, a few nicer dinners, plus coffee and the odd drink.<\/li>\n    <li><strong>The signature activity<\/strong> of each place, plus local transport and entry fees.<\/li>\n  <\/ul>\n  <p>As a result, these are the best travel destinations under $2500 for a real trip, not a stunt.<\/p>\n\n  <h2>Civilian vs Operator: why the same trip has two prices<\/h2>\n  <p>A Civilian books the obvious version: the most famous neighborhood, the peak week, the tour from the first search result and a cash fare whenever they get around to it. In contrast, an Operator books the same experience in a smarter order, which is the core idea behind the <a href=\"https:\/\/www.journohq.com\/blog\/operator-mindset-travel\/\">Operator mindset<\/a>.<\/p>\n  <div class=\"jp-versus\">\n    <div class=\"jp-versus__col\">\n      <p class=\"jp-versus__label\">Civilian<\/p>\n      <ul>\n        <li>Picks dates first, then finds out what they cost.<\/li>\n        <li>Stays in the postcard district at postcard prices.<\/li>\n        <li>Books every activity through a resale site.<\/li>\n        <li>Pays cash for the flight, whatever the fare is that day.<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"jp-versus__col is-op\">\n      <p class=\"jp-versus__label\">Operator<\/p>\n      <ul>\n        <li>Picks the shoulder window where weather is good and prices drop.<\/li>\n        <li>Stays one neighborhood over, a short walk from the same sights.<\/li>\n        <li>Books the scarce thing direct and early, and everything else locally.<\/li>\n        <li>Times the fare, or covers it with points and pays only the taxes.<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n  <p>Across the five trips below, those four moves cut about $480 to $660 per person. In other words, the Operator version of a $2,300 trip can land under $1,700, and that gap is what turns a &#8220;maybe next year&#8221; into a booked week.<\/p>\n\n  <h2>How does the Travel Decision Stack apply to a $2,500 budget?<\/h2>\n  <div class=\"jp-framework\">\n    <span class=\"jp-framework__badge\">Journo framework<\/span>\n    <h3>The Travel Decision Stack, starting from Real Cost<\/h3>\n    <ol>\n      <li><strong>Experience.<\/strong> First, decide what the week is for: food, ruins, beaches, a volcano at sunrise. A budget trip still needs a reason, or it turns into a cheap week you forget.<\/li>\n      <li><strong>Real Cost.<\/strong> Next, price the full trip, flight included, before you fall for a place. Our guide to <a href=\"https:\/\/www.journohq.com\/blog\/how-to-travel-affordably-without-sacrificing-the-experience\/\">traveling affordably without sacrificing the experience<\/a> covers where to cut and where not to. If you have more room in the budget, our <!-- FORWARD LINK: Article 42 \"Best Destinations for $2,500-$5,000 Trips in 2026\" is not live yet. Kurt: wrap the next phrase in a link once it is published. -->best destinations for $2,500 to $5,000 trips shows what the next tier buys.<\/li>\n      <li><strong>Timing.<\/strong> Then match the place to the month, because timing moves the receipt more than any coupon. Our <a href=\"https:\/\/www.journohq.com\/blog\/shoulder-season-destinations-2026\/\">shoulder season guide<\/a> shows the cheap-but-good windows, and our <!-- FORWARD LINK: Article 45 \"Best Destinations by Month: The Full 2026 Travel Calendar\" is not live yet. Kurt: wrap the next phrase in a link once it is published. -->month-by-month 2026 travel calendar shows what peaks when.<\/li>\n      <li><strong>Execution.<\/strong> Finally, book in the right order and protect the budget from leaks. For example, the <a href=\"https:\/\/www.journohq.com\/tools\/goldilocks-booking-forecaster\/\">Goldilocks Booking Forecaster<\/a> tells you whether to book the flight and hotel now, wait or keep watching.<\/li>\n    <\/ol>\n  <\/div>\n  <p>Furthermore, all four layers sit inside the wider <a href=\"https:\/\/www.journohq.com\/blog\/the-travel-optimization-system\/\">Travel Optimization System<\/a>.<\/p>\n\n  <div class=\"jp-budget\" id=\"jp-trip-checker\" data-jp-no-toc>\n    <p class=\"jp-budget__q\">What is your budget per person?<\/p>\n    <p class=\"jp-budget__hint\">Slide to your budget, pick how you book, and every trip receipt below shows whether it fits, flights included.<\/p>\n    <div class=\"jp-budget__row\">\n      <label class=\"jp-budget__label\" for=\"jp-budget-range\">Budget<\/label>\n      <input class=\"jp-budget__range\" id=\"jp-budget-range\" type=\"range\" min=\"1000\" max=\"2500\" step=\"50\" value=\"1500\">\n      <output class=\"jp-budget__out\" for=\"jp-budget-range\">$1,500<\/output>\n    <\/div>\n    <div class=\"jp-budget__modes\" role=\"group\" aria-label=\"How do you book?\">\n      <button type=\"button\" class=\"jp-budget__mode\" data-mode=\"civ\" aria-pressed=\"false\">Book like a Civilian<\/button>\n      <button type=\"button\" class=\"jp-budget__mode\" data-mode=\"op\" aria-pressed=\"true\">Book like an Operator<\/button>\n    <\/div>\n    <p class=\"jp-budget__sum\" aria-live=\"polite\"><\/p>\n  <\/div>\n\n  <figure class=\"jp-dest-photo\">\n    <img decoding=\"async\" src=\"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/oaxaca-market-grill-hall-journo.jpeg\" alt=\"Travelers eating grilled meat and tortillas in a market grill hall in Oaxaca, one of the best travel destinations under $2500\" width=\"1200\" height=\"800\" loading=\"lazy\">\n  <\/figure>\n  <h2 class=\"jp-dest-title\" id=\"oaxaca\" data-tag=\"From $1,110\">Oaxaca, Mexico<\/h2>\n  <p>First up, Oaxaca is the best food trip you can take on this budget. The city in southern Mexico is famous for its seven moles, its markets and its mezcal, and the old center is a grid of colorful, walkable streets around a shady main square.<\/p>\n  <h3>The experience in specific terms<\/h3>\n  <p>Spend the mornings in the Benito Ju\u00e1rez and 20 de Noviembre markets, where you choose raw meat in the smoke-filled grill hall and eat it with tortillas at a shared table. Then take one day for Monte Alb\u00e1n, the Zapotec hilltop city above the valley, and another for Hierve el Agua, the mineral pools on a cliff edge. Also, book a cooking class and a visit to a family mezcal distillery, which are the two things people mention most when they get home. Prices are low across the board, and the <a href=\"https:\/\/www.journohq.com\/tools\/wobbly-pop-index\/\">Wobbly Pop Index<\/a> shows just how far your money goes, using the price of a local beer.<\/p>\n  <p><strong>Entry reality.<\/strong> US citizens need only a valid passport for a tourist stay. Most US travelers connect through Mexico City, Houston or Dallas.<\/p>\n  <h3>Real cost range<\/h3>\n  <p>Booked like a Civilian, budget about $1,600 per person for 7 nights, flights included. Booked like an Operator, the same week costs about $1,110. The biggest gap is the flight, followed by the room: Centro hotels on the main pedestrian street cost far more than equally good guesthouses a ten-minute walk away.<\/p>\n  <div class=\"jp-rc\" data-name=\"Oaxaca\">\n    <p class=\"jp-rc__head\"><span>Trip receipt: Oaxaca<\/span><span>7 nights, per person<\/span><\/p>\n    <table class=\"jp-rc__table\">\n      <thead><tr><th>Line item<\/th><th class=\"jp-num\">Civilian<\/th><th class=\"jp-num\">Operator<\/th><\/tr><\/thead>\n      <tbody>\n        <tr data-k=\"flight\"><td>Round-trip flight from the US<\/td><td class=\"jp-num jp-rc__civ\">$550<\/td><td class=\"jp-num jp-rc__op\">$380<\/td><\/tr>\n        <tr data-k=\"stay\"><td>7 nights, shared room<\/td><td class=\"jp-num jp-rc__civ\">$420<\/td><td class=\"jp-num jp-rc__op\">$280<\/td><\/tr>\n        <tr data-k=\"food\"><td>Food and drinks<\/td><td class=\"jp-num jp-rc__civ\">$330<\/td><td class=\"jp-num jp-rc__op\">$220<\/td><\/tr>\n        <tr data-k=\"fun\"><td>Activities and entry fees<\/td><td class=\"jp-num jp-rc__civ\">$220<\/td><td class=\"jp-num jp-rc__op\">$170<\/td><\/tr>\n        <tr data-k=\"move\"><td>Local transport<\/td><td class=\"jp-num jp-rc__civ\">$80<\/td><td class=\"jp-num jp-rc__op\">$60<\/td><\/tr>\n      <\/tbody>\n      <tfoot><tr><th>Total<\/th><td class=\"jp-num\">$1,600<\/td><td class=\"jp-num\">$1,110<\/td><\/tr><\/tfoot>\n    <\/table>\n    <p class=\"jp-rc__lever\"><strong>The Operator move:<\/strong> fly midweek outside the Day of the Dead week, stay in Jalatlaco, and eat lunch in the markets.<\/p>\n    <div class=\"jp-rc__meter\" aria-live=\"polite\"><\/div>\n  <\/div>\n  <h3>Timing verdict: November to March<\/h3>\n  <p>The dry season brings warm, sunny days and cool nights, which is ideal for walking and day trips. However, the Day of the Dead (late October to November 2) is the most expensive week of the year, with hotel prices often doubling. So for late 2026, aim for mid-November or the first half of December. For early 2027, January to March is reliably dry, while June to September brings afternoon rain.<\/p>\n  <div class=\"jp-postcard\" data-stamp=\"Oaxaca\">\n    <h3>Operator tip<\/h3>\n    <p>Stay in Jalatlaco, not on the main pedestrian street. This quiet barrio of murals and cobbled lanes is about a ten-minute walk from the Z\u00f3calo and the Santo Domingo church, and its small guesthouses often cost a third less than Centro hotels of the same quality. As a result, you get the same city, a quieter night&#8217;s sleep and an extra $140 to spend on food.<\/p>\n  <\/div>\n\n  <figure class=\"jp-dest-photo\">\n    <img decoding=\"async\" src=\"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/antigua-guatemala-volcano-street-journo.jpeg\" alt=\"A cobblestone street in Antigua, Guatemala with a volcano rising behind colorful colonial buildings\" width=\"1200\" height=\"800\" loading=\"lazy\">\n  <\/figure>\n  <h2 class=\"jp-dest-title\" id=\"guatemala\" data-tag=\"From $1,140\">Antigua and Lake Atitl\u00e1n, Guatemala<\/h2>\n  <p>Next, Guatemala packs the most variety into a short flight. In one week you get a cobblestoned colonial town ringed by volcanoes, an overnight hike to watch another volcano erupt, and a deep blue lake surrounded by Maya villages.<\/p>\n  <h3>The experience in specific terms<\/h3>\n  <p>Base yourself in Antigua for four nights. Walk the arches and ruined churches, take a coffee farm tour on the slopes outside town, and then do the big one: the overnight hike up Acatenango, at about 13,045 feet, to watch Volc\u00e1n de Fuego throw lava into the dark sky. After that, take a shuttle to Lake Atitl\u00e1n for three nights, and hop between villages such as San Juan, San Marcos and Santa Cruz by public boat. Tour quality varies a lot here, so paste the reviews into <a href=\"https:\/\/www.journohq.com\/tools\/review-genie\/\">Review Genie<\/a> before you book the hike, to catch red flags such as missing gear or overcrowded camps.<\/p>\n  <p><strong>Entry reality.<\/strong> US citizens do not need a visa for tourist stays of up to 90 days, which covers Guatemala, El Salvador, Honduras and Nicaragua together. Flights land in Guatemala City, about an hour from Antigua by shuttle.<\/p>\n  <h3>Real cost range<\/h3>\n  <p>Booked like a Civilian, budget about $1,620 per person for 7 nights, flights included. Booked like an Operator, about $1,140. Overnight Acatenango tours run about $70 to $150 per person, and the cheapest ones often charge extra for jackets and boots, so compare the full price.<\/p>\n  <div class=\"jp-rc\" data-name=\"Guatemala\">\n    <p class=\"jp-rc__head\"><span>Trip receipt: Guatemala<\/span><span>7 nights, per person<\/span><\/p>\n    <table class=\"jp-rc__table\">\n      <thead><tr><th>Line item<\/th><th class=\"jp-num\">Civilian<\/th><th class=\"jp-num\">Operator<\/th><\/tr><\/thead>\n      <tbody>\n        <tr data-k=\"flight\"><td>Round-trip flight from the US<\/td><td class=\"jp-num jp-rc__civ\">$520<\/td><td class=\"jp-num jp-rc__op\">$380<\/td><\/tr>\n        <tr data-k=\"stay\"><td>7 nights, shared room<\/td><td class=\"jp-num jp-rc__civ\">$450<\/td><td class=\"jp-num jp-rc__op\">$300<\/td><\/tr>\n        <tr data-k=\"food\"><td>Food and drinks<\/td><td class=\"jp-num jp-rc__civ\">$280<\/td><td class=\"jp-num jp-rc__op\">$200<\/td><\/tr>\n        <tr data-k=\"fun\"><td>Activities and entry fees<\/td><td class=\"jp-num jp-rc__civ\">$250<\/td><td class=\"jp-num jp-rc__op\">$190<\/td><\/tr>\n        <tr data-k=\"move\"><td>Local transport<\/td><td class=\"jp-num jp-rc__civ\">$120<\/td><td class=\"jp-num jp-rc__op\">$70<\/td><\/tr>\n      <\/tbody>\n      <tfoot><tr><th>Total<\/th><td class=\"jp-num\">$1,620<\/td><td class=\"jp-num\">$1,140<\/td><\/tr><\/tfoot>\n    <\/table>\n    <p class=\"jp-rc__lever\"><strong>The Operator move:<\/strong> use shared tourist shuttles instead of private drivers, and book the Acatenango hike with gear included.<\/p>\n    <div class=\"jp-rc__meter\" aria-live=\"polite\"><\/div>\n  <\/div>\n  <h3>Timing verdict: November to April<\/h3>\n  <p>The dry season gives clear volcano views, which matters most on the Acatenango night. In particular, late November and early December 2026 are a sweet spot, after the rains and before the holiday rush. Then January to March 2027 is also excellent. Meanwhile, Holy Week (the week before Easter, March 21 to 28 in 2027) brings Antigua&#8217;s famous processions but also its highest prices, and May to October is the rainy season.<\/p>\n  <div class=\"jp-postcard\" data-stamp=\"Antigua\">\n    <h3>Operator tip<\/h3>\n    <p>Do the volcano hike on day three, not day one. Antigua sits at about 5,000 feet and the camp on Acatenango at roughly 11,800, so two easy days in town first make the climb far less brutal. Also, book a company that includes the warm jacket, gloves and boots in the price, because the summit can drop below freezing at dawn.<\/p>\n  <\/div>\n\n  <div class=\"jp-cta\" data-cta-id=\"insider-mid\">\n    <p class=\"jp-cta__title\">The flight is the biggest line on every receipt here. The Syndicate shows how Operators cover it with points and pay only the taxes.<\/p>\n    <a class=\"jp-btn\" href=\"https:\/\/www.journotravelhub.com\/mifge\">Try Journo Insider free for 14 days \u2192<\/a>\n  <\/div>\n\n  <figure class=\"jp-dest-photo\">\n    <img decoding=\"async\" src=\"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/cartagena-getsemani-colorful-street-journo.jpeg\" alt=\"A traveler walking a colorful street with hanging umbrellas in Getseman\u00ed, Cartagena, one of the best travel destinations under $2500\" width=\"1200\" height=\"800\" loading=\"lazy\">\n  <\/figure>\n  <h2 class=\"jp-dest-title\" id=\"cartagena\" data-tag=\"From $1,140\">Cartagena, Colombia<\/h2>\n  <p>Cartagena is the easiest beach-and-city trip on this list. The walled old town on Colombia&#8217;s Caribbean coast is all bougainvillea balconies, pastel squares and sunset on the city walls, and the Rosario Islands sit about an hour away by boat.<\/p>\n  <h3>The experience in specific terms<\/h3>\n  <p>Spend the first days on foot. Walk the walled city in the early morning before the heat, climb the San Felipe fortress, and watch the sunset from the old walls with a drink. The <a href=\"https:\/\/www.journohq.com\/tools\/walkable-route\/\">Walkable Route Designer<\/a> links the main squares, the cathedral and the street-art lanes of Getseman\u00ed into one loop. Then take a day on the water, either at the Rosario Islands or a quieter beach club on Isla Bar\u00fa, and add an evening of salsa and live music in Getseman\u00ed&#8217;s Plaza de la Trinidad.<\/p>\n  <p><strong>Entry reality.<\/strong> US citizens do not need a visa for tourist stays of up to 90 days. However, you must complete Colombia&#8217;s free online Check-Mig form between 72 hours and 1 hour before your flight, both on the way in and on the way out. Direct flights run from Miami, Fort Lauderdale, New York and other hubs.<\/p>\n  <h3>Real cost range<\/h3>\n  <p>Booked like a Civilian, budget about $1,800 per person for 7 nights, flights included. Booked like an Operator, about $1,140, the biggest swing on this list. That is because boutique hotels inside the walls cost two to three times as much as equally stylish ones in Getseman\u00ed, just outside them.<\/p>\n  <div class=\"jp-rc\" data-name=\"Cartagena\">\n    <p class=\"jp-rc__head\"><span>Trip receipt: Cartagena<\/span><span>7 nights, per person<\/span><\/p>\n    <table class=\"jp-rc__table\">\n      <thead><tr><th>Line item<\/th><th class=\"jp-num\">Civilian<\/th><th class=\"jp-num\">Operator<\/th><\/tr><\/thead>\n      <tbody>\n        <tr data-k=\"flight\"><td>Round-trip flight from the US<\/td><td class=\"jp-num jp-rc__civ\">$500<\/td><td class=\"jp-num jp-rc__op\">$320<\/td><\/tr>\n        <tr data-k=\"stay\"><td>7 nights, shared room<\/td><td class=\"jp-num jp-rc__civ\">$610<\/td><td class=\"jp-num jp-rc__op\">$340<\/td><\/tr>\n        <tr data-k=\"food\"><td>Food and drinks<\/td><td class=\"jp-num jp-rc__civ\">$350<\/td><td class=\"jp-num jp-rc__op\">$250<\/td><\/tr>\n        <tr data-k=\"fun\"><td>Activities and entry fees<\/td><td class=\"jp-num jp-rc__civ\">$250<\/td><td class=\"jp-num jp-rc__op\">$170<\/td><\/tr>\n        <tr data-k=\"move\"><td>Local transport<\/td><td class=\"jp-num jp-rc__civ\">$90<\/td><td class=\"jp-num jp-rc__op\">$60<\/td><\/tr>\n      <\/tbody>\n      <tfoot><tr><th>Total<\/th><td class=\"jp-num\">$1,800<\/td><td class=\"jp-num\">$1,140<\/td><\/tr><\/tfoot>\n    <\/table>\n    <p class=\"jp-rc__lever\"><strong>The Operator move:<\/strong> sleep in Getseman\u00ed, travel after mid-January, and book the island day directly with a beach club.<\/p>\n    <div class=\"jp-rc__meter\" aria-live=\"polite\"><\/div>\n  <\/div>\n  <h3>Timing verdict: late January to April<\/h3>\n  <p>December to April is the dry season, with steady breezes that take the edge off the heat. However, Christmas to mid-January is peak season for both foreign and Colombian visitors, so prices jump. By contrast, late January to April 2027 keeps the dry weather and loses the crowds. In addition, October and November are the wettest months, which makes the rest of 2026 a weaker window.<\/p>\n  <div class=\"jp-postcard\" data-stamp=\"Cartagena\">\n    <h3>Operator tip<\/h3>\n    <p>Skip the all-in island &#8220;party boat&#8221; sold on the street. Instead, book a day pass straight from a beach club on Isla Bar\u00fa or the Rosario Islands, which usually includes the boat, lunch and a lounger. You pay about the same or less, leave on a smaller boat and spend the day on a quiet beach instead of a crowded one.<\/p>\n  <\/div>\n\n  <figure class=\"jp-dest-photo\">\n    <img decoding=\"async\" src=\"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/seville-plaza-de-espana-andalusia-journo.jpeg\" alt=\"Travelers walking through the Plaza de Espa\u00f1a in Seville, Spain, on a sunny winter day\" width=\"1200\" height=\"800\" loading=\"lazy\">\n  <\/figure>\n  <h2 class=\"jp-dest-title\" id=\"andalusia\" data-tag=\"From $1,450\">Seville and Granada, Spain<\/h2>\n  <p>Andalusia is proof that Europe still fits this budget if you pick the right months. Southern Spain gives you Moorish palaces, orange-tree plazas, flamenco and some of the best-value tapas in Western Europe.<\/p>\n  <h3>The experience in specific terms<\/h3>\n  <p>Fly into Madrid, then take the high-speed train to Seville for four nights. See the Royal Alc\u00e1zar and the cathedral, cross the river to the Triana neighborhood, and catch a flamenco show in a small venue rather than a dinner-theater. Then take the train or bus to Granada for three nights, where the Alhambra is the reason for the trip. The <a href=\"https:\/\/www.journohq.com\/tools\/trip-day-optimizer\/\">Trip Day Optimizer<\/a> helps you build your Granada day around your Nasrid Palaces time slot, so the rest of the day does not clash with it.<\/p>\n  <p><strong>Entry reality.<\/strong> US citizens can visit Spain without a visa for up to 90 days in any 180-day period in the Schengen area. The EU&#8217;s ETIAS travel authorization is not expected before 2027, so check its status before you book a spring trip.<\/p>\n  <h3>Real cost range<\/h3>\n  <p>Booked like a Civilian, budget about $2,100 per person for 7 nights, flights included. Booked like an Operator, about $1,450. A general Alhambra ticket costs about \u20ac22 when bought online in advance, and the lunchtime men\u00fa del d\u00eda, usually a starter, main, bread and a drink, is the best food deal in Spain.<\/p>\n  <div class=\"jp-rc\" data-name=\"Andalusia\">\n    <p class=\"jp-rc__head\"><span>Trip receipt: Andalusia<\/span><span>7 nights, per person<\/span><\/p>\n    <table class=\"jp-rc__table\">\n      <thead><tr><th>Line item<\/th><th class=\"jp-num\">Civilian<\/th><th class=\"jp-num\">Operator<\/th><\/tr><\/thead>\n      <tbody>\n        <tr data-k=\"flight\"><td>Round-trip flight from the US<\/td><td class=\"jp-num jp-rc__civ\">$800<\/td><td class=\"jp-num jp-rc__op\">$520<\/td><\/tr>\n        <tr data-k=\"stay\"><td>7 nights, shared room<\/td><td class=\"jp-num jp-rc__civ\">$560<\/td><td class=\"jp-num jp-rc__op\">$400<\/td><\/tr>\n        <tr data-k=\"food\"><td>Food and drinks<\/td><td class=\"jp-num jp-rc__civ\">$400<\/td><td class=\"jp-num jp-rc__op\">$300<\/td><\/tr>\n        <tr data-k=\"fun\"><td>Activities and entry fees<\/td><td class=\"jp-num jp-rc__civ\">$160<\/td><td class=\"jp-num jp-rc__op\">$120<\/td><\/tr>\n        <tr data-k=\"move\"><td>Trains and local transport<\/td><td class=\"jp-num jp-rc__civ\">$180<\/td><td class=\"jp-num jp-rc__op\">$110<\/td><\/tr>\n      <\/tbody>\n      <tfoot><tr><th>Total<\/th><td class=\"jp-num\">$2,100<\/td><td class=\"jp-num\">$1,450<\/td><\/tr><\/tfoot>\n    <\/table>\n    <p class=\"jp-rc__lever\"><strong>The Operator move:<\/strong> fly in November or February, book trains early on the low-cost operators, and make lunch your big meal.<\/p>\n    <div class=\"jp-rc__meter\" aria-live=\"polite\"><\/div>\n  <\/div>\n  <h3>Timing verdict: November, or February to March<\/h3>\n  <p>November 2026 brings mild, sunny days in the 60s and some of the lowest transatlantic fares of the year. Similarly, February and March 2027 are bright and pleasant, with the orange trees in blossom by March. However, Holy Week and the April Fair in Seville push prices way up, and July and August regularly pass 100\u00b0F, which makes sightseeing miserable.<\/p>\n  <div class=\"jp-postcard\" data-stamp=\"Granada\">\n    <h3>Operator tip<\/h3>\n    <p>Book the Alhambra before you book anything else in Granada. Tickets with a Nasrid Palaces slot sell out weeks ahead, and the palaces only let you in at your exact time. So buy on the official Alhambra ticket site as soon as your dates are firm, then plan the Granada nights around your slot, not the other way round.<\/p>\n  <\/div>\n\n  <figure class=\"jp-dest-photo\">\n    <img decoding=\"async\" src=\"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/hoi-an-lantern-old-town-vietnam-journo.jpeg\" alt=\"A traveler walking under silk lanterns in Hoi An old town, Vietnam, one of the best travel destinations under $2500\" width=\"1200\" height=\"800\" loading=\"lazy\">\n  <\/figure>\n  <h2 class=\"jp-dest-title\" id=\"vietnam\" data-tag=\"From $1,695\">Hanoi, Ha Long Bay and Hoi An, Vietnam<\/h2>\n  <p>Finally, Vietnam is the long-haul trip that still fits. The flight is the most expensive line on this list, yet daily costs are so low that a week with a bay cruise, a lantern-lit old town and some of the best street food on Earth still lands under the cap.<\/p>\n  <h3>The experience in specific terms<\/h3>\n  <p>Start with three nights in Hanoi: the Old Quarter at dawn, a bowl of pho at a plastic stool, egg coffee and a street-food walk at night. Then take an overnight cruise in Lan Ha Bay, the quieter neighbor of Ha Long Bay, with kayaking between the limestone islands. After that, fly about 80 minutes to Da Nang and spend three nights in Hoi An, where the old town glows with silk lanterns and a tailor can make a suit in a day. A few words of Vietnamese go a long way at the markets, and the <a href=\"https:\/\/www.journohq.com\/tools\/language-helper\/\">Local Language Helper<\/a> gives you the right phrase and pronunciation.<\/p>\n  <p><strong>Entry reality.<\/strong> US citizens need an e-visa, which costs $25 for a single entry and allows stays of up to 90 days. Apply only on Vietnam&#8217;s official immigration portal, since many look-alike sites charge several times the real fee.<\/p>\n  <h3>Real cost range<\/h3>\n  <p>Booked like a Civilian, budget about $2,315 per person for 7 nights, flights included. Booked like an Operator, about $1,695. Flights from the US to Hanoi usually run $900 to $1,400 round trip with one stop, often in Tokyo, Seoul or Taipei. If yours has a long connection, the <a href=\"https:\/\/www.journohq.com\/tools\/layover-maximizer\/\">Layover Maximizer<\/a> shows whether you can get out of the airport and see something.<\/p>\n  <div class=\"jp-rc\" data-name=\"Vietnam\">\n    <p class=\"jp-rc__head\"><span>Trip receipt: Vietnam<\/span><span>7 nights, per person<\/span><\/p>\n    <table class=\"jp-rc__table\">\n      <thead><tr><th>Line item<\/th><th class=\"jp-num\">Civilian<\/th><th class=\"jp-num\">Operator<\/th><\/tr><\/thead>\n      <tbody>\n        <tr data-k=\"flight\"><td>Round-trip flight from the US<\/td><td class=\"jp-num jp-rc__civ\">$1,300<\/td><td class=\"jp-num jp-rc__op\">$950<\/td><\/tr>\n        <tr data-k=\"stay\"><td>7 nights, shared room (one on the boat)<\/td><td class=\"jp-num jp-rc__civ\">$350<\/td><td class=\"jp-num jp-rc__op\">$250<\/td><\/tr>\n        <tr data-k=\"food\"><td>Food and drinks<\/td><td class=\"jp-num jp-rc__civ\">$210<\/td><td class=\"jp-num jp-rc__op\">$150<\/td><\/tr>\n        <tr data-k=\"fun\"><td>Bay cruise, activities and visa<\/td><td class=\"jp-num jp-rc__civ\">$325<\/td><td class=\"jp-num jp-rc__op\">$255<\/td><\/tr>\n        <tr data-k=\"move\"><td>Domestic flight and transport<\/td><td class=\"jp-num jp-rc__civ\">$130<\/td><td class=\"jp-num jp-rc__op\">$90<\/td><\/tr>\n      <\/tbody>\n      <tfoot><tr><th>Total<\/th><td class=\"jp-num\">$2,315<\/td><td class=\"jp-num\">$1,695<\/td><\/tr><\/tfoot>\n    <\/table>\n    <p class=\"jp-rc__lever\"><strong>The Operator move:<\/strong> time the long-haul fare carefully (or use points), and cruise Lan Ha Bay instead of the busiest Ha Long routes.<\/p>\n    <div class=\"jp-rc__meter\" aria-live=\"polite\"><\/div>\n  <\/div>\n  <h3>Timing verdict: February to April<\/h3>\n  <p>This route crosses two climates, so timing matters. Hanoi is cool and pleasant from October to April, while Hoi An is best from February to May and has its heaviest rain and typhoon risk from September to December. As a result, February to April 2027 works for the whole trip. Just avoid the Lunar New Year (Tet) week around February 6, 2027, when many places close and transport sells out.<\/p>\n  <div class=\"jp-postcard\" data-stamp=\"Lan Ha Bay\">\n    <h3>Operator tip<\/h3>\n    <p>Choose the route, not the boat. Most cruises follow the same crowded Ha Long Bay loop, while boats that sail into Lan Ha Bay pass the same limestone scenery with a fraction of the traffic. So check the itinerary map before you book, and pick a one-night cruise that includes kayaking; a second night rarely adds much.<\/p>\n  <\/div>\n\n  <h2>How do the best travel destinations under $2500 compare?<\/h2>\n  <p>For example, here is the side-by-side per person for 7 nights, sharing a room, with the round-trip flight from the US included. Trips that fit the budget you set in the checker above are highlighted.<\/p>\n  <div class=\"jp-table\">\n    <table>\n      <thead>\n        <tr><th>Destination<\/th><th>Best for<\/th><th class=\"jp-num\">Civilian total<\/th><th class=\"jp-num\">Operator total<\/th><th>Best window<\/th><th>Visa for US citizens<\/th><\/tr>\n      <\/thead>\n      <tbody>\n        <tr data-civ=\"1600\" data-op=\"1110\"><td>Oaxaca, Mexico<\/td><td>Food and markets<\/td><td class=\"jp-num\">$1,600<\/td><td class=\"jp-num\">$1,110<\/td><td>Nov\u2013Mar<\/td><td>No<\/td><\/tr>\n        <tr data-civ=\"1620\" data-op=\"1140\"><td>Antigua and Lake Atitl\u00e1n, Guatemala<\/td><td>Volcanoes and lakes<\/td><td class=\"jp-num\">$1,620<\/td><td class=\"jp-num\">$1,140<\/td><td>Nov\u2013Apr<\/td><td>No<\/td><\/tr>\n        <tr data-civ=\"1800\" data-op=\"1140\"><td>Cartagena, Colombia<\/td><td>Beach and old town<\/td><td class=\"jp-num\">$1,800<\/td><td class=\"jp-num\">$1,140<\/td><td>Late Jan\u2013Apr<\/td><td>No (online Check-Mig)<\/td><\/tr>\n        <tr data-civ=\"2100\" data-op=\"1450\"><td>Seville and Granada, Spain<\/td><td>Palaces and tapas<\/td><td class=\"jp-num\">$2,100<\/td><td class=\"jp-num\">$1,450<\/td><td>Nov; Feb\u2013Mar<\/td><td>No<\/td><\/tr>\n        <tr data-civ=\"2315\" data-op=\"1695\"><td>Hanoi and Hoi An, Vietnam<\/td><td>Street food and scenery<\/td><td class=\"jp-num\">$2,315<\/td><td class=\"jp-num\">$1,695<\/td><td>Feb\u2013Apr<\/td><td>Yes, $25 e-visa<\/td><\/tr>\n      <\/tbody>\n      <caption>Journo estimates, October 2026. Round-trip economy flight from a major US hub, 7 nights in a well-reviewed small hotel (shared double room), food, activities, entry fees and local transport, per person. Fares and entry rules change, so check the official source before you book.<\/caption>\n    <\/table>\n  <\/div>\n\n  <p class=\"jp-pull\">Civilians ask where is cheap. Operators ask where their budget buys the most trip.<\/p>\n\n  <h2>How do you plan a trip for under $2,500?<\/h2>\n  <ol class=\"jp-steps\">\n    <li><strong>Set the number first.<\/strong> Decide your all-in budget per person, flights included, before you pick a place. Then use the <a href=\"#jp-trip-checker\">trip checker<\/a> above to see which of the best travel destinations under $2500 fit it.<\/li>\n    <li><strong>Pick the window, then the dates.<\/strong> Next, choose a shoulder month from each timing verdict, and stay flexible by a few days. Our <a href=\"https:\/\/www.journohq.com\/blog\/timing-optimization-framework-travel\/\">Timing Optimization Framework<\/a> explains why a week can change the price so much.<\/li>\n    <li><strong>Cover the flight with points if you can.<\/strong> The flight is the biggest line on every receipt, so it is where points do the most work. Our guide to <a href=\"https:\/\/www.journohq.com\/blog\/transferable-points-vs-airline-miles\/\">transferable points vs airline miles<\/a> shows which points to collect, and our <a href=\"https:\/\/www.journohq.com\/blog\/award-travel-sweet-spots\/\">12 award sweet spots<\/a> show where they stretch furthest.<\/li>\n    <li><strong>Book the scarce thing direct.<\/strong> Then lock in whatever sells out: the Alhambra slot, the Acatenango hike with gear, a holiday-week room in Oaxaca. Everything else can wait.<\/li>\n    <li><strong>Run a ten-minute audit.<\/strong> Finally, before you pay, check the timing, real cost and logistics with the <a href=\"https:\/\/www.journohq.com\/blog\/regret-free-trip-audit\/\">Regret-Free Trip Audit<\/a>. If you want a slightly bigger splurge on the same budget, our guide to <a href=\"https:\/\/www.journohq.com\/blog\/affordable-luxury-travel-destinations\/\">luxury without luxury prices<\/a> shows where five-star stays cost the least.<\/li>\n  <\/ol>\n\n  <div class=\"jp-quick\">\n    <h3 class=\"jp-quick__label\">Quick answer<\/h3>\n    The best travel destinations under $2500 per person, flights included, are Oaxaca in Mexico (about $1,110 to $1,600 for 7 nights, best November to March), Antigua and Lake Atitl\u00e1n in Guatemala ($1,140 to $1,620, November to April), Cartagena in Colombia ($1,140 to $1,800, late January to April), Seville and Granada in Spain ($1,450 to $2,100, November or February to March) and Hanoi and Hoi An in Vietnam ($1,695 to $2,315, February to April). The lower number is the Operator price: shoulder timing, a smarter neighborhood and points for the flight.\n  <\/div>\n\n  <div class=\"jp-cta\" data-cta-id=\"gifts-bottom\">\n    <p class=\"jp-cta__title\">Try Journo Insider \u2014 keep the gifts no matter what<\/p>\n    <a class=\"jp-btn\" href=\"https:\/\/www.journotravelhub.com\/mifge\">Say &#8220;maybe&#8221; and claim your gifts \u2192<\/a>\n  <\/div>\n\n  <h2>Frequently asked questions about trips under $2,500<\/h2>\n  <div class=\"jp-faq\">\n    <details>\n      <summary><h3 class=\"jp-faq__q\">What are the best travel destinations under $2500?<\/h3><\/summary>\n      <div><p>The best travel destinations under $2500 per person, including flights from the US, are Oaxaca in Mexico, Antigua and Lake Atitl\u00e1n in Guatemala, Cartagena in Colombia, Seville and Granada in Spain, and Hanoi and Hoi An in Vietnam. Each costs about $1,100 to $1,700 for 7 nights when booked smartly, and under $2,400 even at typical prices.<\/p><\/div>\n    <\/details>\n    <details>\n      <summary><h3 class=\"jp-faq__q\">Where can I travel internationally for $1,000?<\/h3><\/summary>\n      <div><p>Oaxaca and Guatemala come closest, at about $1,100 per person for 7 nights with flights, booked in a shoulder month from a hub such as Houston, Dallas or Miami. For a strict $1,000, cut the trip to 5 nights or cover the flight with points.<\/p><\/div>\n    <\/details>\n    <details>\n      <summary><h3 class=\"jp-faq__q\">Is $2,500 enough for a week in Europe?<\/h3><\/summary>\n      <div><p>Yes, if you choose the region and the month carefully. Seville and Granada cost about $1,450 to $2,100 per person for 7 nights with flights, in November or February to March. However, Paris, London or the Greek islands in summer usually pass $2,500.<\/p><\/div>\n    <\/details>\n    <details>\n      <summary><h3 class=\"jp-faq__q\">What is the cheapest international trip from the US in 2026?<\/h3><\/summary>\n      <div><p>For a full week with a comfortable room, Mexico and Central America are the cheapest, because the flights are short and daily costs are low. Oaxaca and Guatemala both come in around $1,100 to $1,600 per person for 7 nights, flights included.<\/p><\/div>\n    <\/details>\n    <details>\n      <summary><h3 class=\"jp-faq__q\">How much should I budget per day on a trip abroad?<\/h3><\/summary>\n      <div><p>On these five trips, budget about $100 to $190 per person per day for a shared room, food, activities and local transport, before the flight. Vietnam and Guatemala sit at the low end, while Spain and Cartagena&#8217;s old town sit at the high end.<\/p><\/div>\n    <\/details>\n    <details>\n      <summary><h3 class=\"jp-faq__q\">Can you go to Asia for under $2,500?<\/h3><\/summary>\n      <div><p>Yes. Vietnam is the best example: about $1,695 to $2,315 per person for 7 nights, including a $900 to $1,400 round-trip flight. Because daily costs are so low, the flight is the only big line, so points make the biggest difference here.<\/p><\/div>\n    <\/details>\n    <details>\n      <summary><h3 class=\"jp-faq__q\">When is the cheapest time to book these trips?<\/h3><\/summary>\n      <div><p>Book flights two to four months ahead for Mexico, Central America and Colombia, and three to six months ahead for Spain and Vietnam. Avoid the big holiday weeks, such as Day of the Dead, Holy Week, Christmas and Lunar New Year, when prices can double.<\/p><\/div>\n    <\/details>\n  <\/div>\n\n  <p class=\"jp-closer\">In the end, a great trip is not about finding the cheapest place. It is about finding where your budget buys the most trip, and every one of the best travel destinations under $2500 above does exactly that once you book it like an Operator.<\/p>\n\n<\/div>\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What are the best travel destinations under $2500?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The best travel destinations under $2500 per person, including flights from the US, are Oaxaca in Mexico, Antigua and Lake Atitl\u00e1n in Guatemala, Cartagena in Colombia, Seville and Granada in Spain, and Hanoi and Hoi An in Vietnam. Each costs about $1,100 to $1,700 for 7 nights when booked smartly, and under $2,400 even at typical prices.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Where can I travel internationally for $1,000?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Oaxaca and Guatemala come closest, at about $1,100 per person for 7 nights with flights, booked in a shoulder month from a hub such as Houston, Dallas or Miami. For a strict $1,000, cut the trip to 5 nights or cover the flight with points.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Is $2,500 enough for a week in Europe?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes, if you choose the region and the month carefully. Seville and Granada cost about $1,450 to $2,100 per person for 7 nights with flights, in November or February to March. However, Paris, London or the Greek islands in summer usually pass $2,500.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is the cheapest international trip from the US in 2026?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"For a full week with a comfortable room, Mexico and Central America are the cheapest, because the flights are short and daily costs are low. Oaxaca and Guatemala both come in around $1,100 to $1,600 per person for 7 nights, flights included.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How much should I budget per day on a trip abroad?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"On these five trips, budget about $100 to $190 per person per day for a shared room, food, activities and local transport, before the flight. Vietnam and Guatemala sit at the low end, while Spain and Cartagena's old town sit at the high end.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Can you go to Asia for under $2,500?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. Vietnam is the best example: about $1,695 to $2,315 per person for 7 nights, including a $900 to $1,400 round-trip flight. Because daily costs are so low, the flight is the only big line, so points make the biggest difference here.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"When is the cheapest time to book these trips?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Book flights two to four months ahead for Mexico, Central America and Colombia, and three to six months ahead for Spain and Vietnam. Avoid the big holiday weeks, such as Day of the Dead, Holy Week, Christmas and Lunar New Year, when prices can double.\"\n      }\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The best travel destinations under $2500 per person, flights included: Oaxaca, Guatemala, Cartagena, Seville and Granada, and Vietnam, with Civilian vs Operator receipts.<\/p>\n","protected":false},"author":2,"featured_media":17996,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[14759,852],"tags":[14989,14987,14821,14991,14990,14986,14988,14949,14992,14865,14993],"class_list":["post-18002","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destinations","category-travel-tips","tag-affordable-international-trips","tag-best-travel-destinations-under-2500","tag-budget-travel-destinations","tag-cartagena","tag-cheap-international-trips-2026","tag-guatemala","tag-oaxaca","tag-operator-tips","tag-seville","tag-travel-decision-stack","tag-vietnam"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Best Destinations for $1,000-$2,500 Trips in 2026<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Best Destinations for $1,000-$2,500 Trips in 2026\" \/>\n<meta property=\"og:description\" content=\"The best travel destinations under $2500 per person, flights included: Oaxaca, Guatemala, Cartagena, Seville and Granada, and Vietnam, with Civilian vs Operator receipts.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/\" \/>\n<meta property=\"og:site_name\" content=\"Journo Travel Journal\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/JournoHQ\/\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/JournoHQ\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-20T17:10:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/best-travel-destinations-under-2500-trip-budget-journo.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"541\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Dane Homenick\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@danehomenick\" \/>\n<meta name=\"twitter:site\" content=\"@journohq\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dane Homenick\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/best-travel-destinations-under-2500\\\/\",\"url\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/best-travel-destinations-under-2500\\\/\",\"name\":\"Best Destinations for $1,000-$2,500 Trips in 2026\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/best-travel-destinations-under-2500\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/best-travel-destinations-under-2500\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/best-travel-destinations-under-2500-trip-budget-journo.jpeg\",\"datePublished\":\"2026-10-20T17:10:00+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.journohq.com\\\/blog\\\/best-travel-destinations-under-2500\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/best-travel-destinations-under-2500\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/best-travel-destinations-under-2500-trip-budget-journo.jpeg\",\"contentUrl\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/best-travel-destinations-under-2500-trip-budget-journo.jpeg\",\"width\":1024,\"height\":541,\"caption\":\"A traveler planning a trip with a notebook and boarding pass, looking for the best travel destinations under $2500\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/\",\"name\":\"Journo Travel Journal\",\"description\":\"Travel More, For Less,  &amp; Share It In A More Beautiful Way\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/#organization\",\"name\":\"Journo Travel Journal\",\"url\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/logo1.png\",\"contentUrl\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/logo1.png\",\"width\":484,\"height\":95,\"caption\":\"Journo Travel Journal\"},\"image\":{\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/JournoHQ\\\/\",\"https:\\\/\\\/x.com\\\/journohq\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.journohq.com\\\/blog\\\/#\\\/schema\\\/person\\\/d1486e120db18ac12a8ad856d7f1bbb8\",\"name\":\"Dane Homenick\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/442c1e18b8c50ee122d3d535c1fc7a4da1d124402fff0c8a5ee7a411dc87e9af?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/442c1e18b8c50ee122d3d535c1fc7a4da1d124402fff0c8a5ee7a411dc87e9af?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/442c1e18b8c50ee122d3d535c1fc7a4da1d124402fff0c8a5ee7a411dc87e9af?s=96&d=mm&r=g\",\"caption\":\"Dane Homenick\"},\"description\":\"Founder and Chief Coffee Getter of Journo Travel Co., this dude wants nothing more than to explore the world with his fam by his side and to help others do the same in their lives. Oh, and maybe put back a few beers with new and old friends here and there :)\",\"sameAs\":[\"https:\\\/\\\/www.journohq.com\",\"https:\\\/\\\/www.facebook.com\\\/JournoHQ\\\/\",\"https:\\\/\\\/x.com\\\/danehomenick\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Best Destinations for $1,000-$2,500 Trips in 2026","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/","og_locale":"en_US","og_type":"article","og_title":"Best Destinations for $1,000-$2,500 Trips in 2026","og_description":"The best travel destinations under $2500 per person, flights included: Oaxaca, Guatemala, Cartagena, Seville and Granada, and Vietnam, with Civilian vs Operator receipts.","og_url":"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/","og_site_name":"Journo Travel Journal","article_publisher":"https:\/\/www.facebook.com\/JournoHQ\/","article_author":"https:\/\/www.facebook.com\/JournoHQ\/","article_published_time":"2026-10-20T17:10:00+00:00","og_image":[{"width":1024,"height":541,"url":"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/best-travel-destinations-under-2500-trip-budget-journo.jpeg","type":"image\/jpeg"}],"author":"Dane Homenick","twitter_card":"summary_large_image","twitter_creator":"@danehomenick","twitter_site":"@journohq","twitter_misc":{"Written by":"Dane Homenick","Est. reading time":"20 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/","url":"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/","name":"Best Destinations for $1,000-$2,500 Trips in 2026","isPartOf":{"@id":"https:\/\/www.journohq.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/#primaryimage"},"image":{"@id":"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/#primaryimage"},"thumbnailUrl":"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/best-travel-destinations-under-2500-trip-budget-journo.jpeg","datePublished":"2026-10-20T17:10:00+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.journohq.com\/blog\/best-travel-destinations-under-2500\/#primaryimage","url":"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/best-travel-destinations-under-2500-trip-budget-journo.jpeg","contentUrl":"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2026\/10\/best-travel-destinations-under-2500-trip-budget-journo.jpeg","width":1024,"height":541,"caption":"A traveler planning a trip with a notebook and boarding pass, looking for the best travel destinations under $2500"},{"@type":"WebSite","@id":"https:\/\/www.journohq.com\/blog\/#website","url":"https:\/\/www.journohq.com\/blog\/","name":"Journo Travel Journal","description":"Travel More, For Less,  &amp; Share It In A More Beautiful Way","publisher":{"@id":"https:\/\/www.journohq.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.journohq.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.journohq.com\/blog\/#organization","name":"Journo Travel Journal","url":"https:\/\/www.journohq.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.journohq.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2025\/09\/logo1.png","contentUrl":"https:\/\/www.journohq.com\/blog\/wp-content\/uploads\/2025\/09\/logo1.png","width":484,"height":95,"caption":"Journo Travel Journal"},"image":{"@id":"https:\/\/www.journohq.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/JournoHQ\/","https:\/\/x.com\/journohq"]},{"@type":"Person","@id":"https:\/\/www.journohq.com\/blog\/#\/schema\/person\/d1486e120db18ac12a8ad856d7f1bbb8","name":"Dane Homenick","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/442c1e18b8c50ee122d3d535c1fc7a4da1d124402fff0c8a5ee7a411dc87e9af?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/442c1e18b8c50ee122d3d535c1fc7a4da1d124402fff0c8a5ee7a411dc87e9af?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/442c1e18b8c50ee122d3d535c1fc7a4da1d124402fff0c8a5ee7a411dc87e9af?s=96&d=mm&r=g","caption":"Dane Homenick"},"description":"Founder and Chief Coffee Getter of Journo Travel Co., this dude wants nothing more than to explore the world with his fam by his side and to help others do the same in their lives. Oh, and maybe put back a few beers with new and old friends here and there :)","sameAs":["https:\/\/www.journohq.com","https:\/\/www.facebook.com\/JournoHQ\/","https:\/\/x.com\/danehomenick"]}]}},"_links":{"self":[{"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/posts\/18002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/comments?post=18002"}],"version-history":[{"count":3,"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/posts\/18002\/revisions"}],"predecessor-version":[{"id":18005,"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/posts\/18002\/revisions\/18005"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/media\/17996"}],"wp:attachment":[{"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/media?parent=18002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/categories?post=18002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.journohq.com\/blog\/wp-json\/wp\/v2\/tags?post=18002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}