/* ═══════════════════════════════════════════════════════════════════════════
   My Tour Planners — global stylesheet.

   Styling is mostly inline, on the elements themselves. This file covers what
   an inline style cannot express: the header's scroll and dark states, the
   1080px breakpoint, animation, and hover and focus states.
   ═══════════════════════════════════════════════════════════════════════════ */

* { box-sizing: border-box; }
body { margin: 0; background: #F3F3F1; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
       font-family: Manrope, system-ui, sans-serif; color: #16181A; min-height: 100vh; }
/* No `overflow-x: hidden` on body. It creates a clipping context around every
   positioned descendant and can cut off fixed layers, and nothing on the widest
   pages overflows horizontally at 390, 768 or 1440px, so it is not needed. */
html { scroll-behavior: smooth; }
a { color: #2F4A3C; text-decoration: none; }
a:hover { color: #16181A; }
/* …but never on a surface that is already dark. */
.skip-link:hover, .crumbs a:hover, .hdr-logo:hover, footer a:hover { color: inherit; }
button { font: inherit; cursor: pointer; }
a, button, summary, input, select, textarea { touch-action: manipulation; -webkit-tap-highlight-color: rgba(201,169,97,.2); }
/* Anchor targets clear the fixed header. */
[id] { scroll-margin-top: 96px; }
img { display: block; max-width: 100%; }
summary::-webkit-details-marker { display: none; }
::selection { background: #E3D9C9; color: #16181A; }

/* The hidden attribute must win.
   Several overlays — the mobile menu, the planner drawer, the planner's final
   pane — carry an inline `display: flex` for their layout, and an inline style
   beats the browser's own `[hidden] { display: none }`. Without this rule they
   render open on every page. */
[hidden] { display: none !important; }

@keyframes mtpFadeUp { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
@keyframes mtpFade   { from { opacity: 0; } to { opacity: 1; } }
@keyframes mtpSlideUp { from { transform: translateY(100%); } to { transform: none; } }

/* ── Anchors used as buttons ───────────────────────────────────────────────
   Navigation controls are links so the site is crawlable; these rules make them
   render the same as the buttons beside them. */
a[style*="inline-flex"], a[style*="display: flex"], a[style*="display: block"] { text-decoration: none; }
a[style] { color: inherit; }
main a[href^="/"]:hover, footer a[href^="/"]:hover { color: inherit; }

/* Destination chips on the home page. They are a row of links, so none carries
   a permanent dark fill that would read as a selected state; the dark treatment
   appears on hover and focus instead. */
.chip:hover, .chip:focus-visible {
  background: #16181A !important; border-color: #16181A !important; color: #FAF7F2 !important;
  transform: translateY(-1px);
}

.skip-link { position: absolute; left: -9999px; top: 0; z-index: 200; background: #16181A; color: #FAF7F2;
             padding: 12px 18px; font-size: 14px; font-weight: 600; }
.skip-link:focus,
.skip-link:hover { left: 8px; top: 8px; color: #FAF7F2; }

:focus-visible { outline: 2px solid #C9A961; outline-offset: 3px; }

/* ── Header ────────────────────────────────────────────────────────────────
   Two attributes drive its appearance: [data-dark-hero] on <body> and
   [data-scrolled] on the header. Defaults below are the light (scrolled or
   non-hero) treatment. */
[data-header] {
  position: fixed; top: 0; left: 0; right: 0; z-index: 80; height: 84px;
  background: rgba(250,247,242,.96); backdrop-filter: blur(12px);
  border-bottom: 1px solid #E9E1D4; color: #16181A;
  transition: height .3s, background .3s, color .3s, border-color .3s;
}
[data-header][data-scrolled] { height: 66px; }

/* Dark hero pages start transparent with light text, until the page scrolls. */
[data-dark-hero] [data-header]:not([data-scrolled]) {
  background: transparent; backdrop-filter: none; border-bottom-color: transparent; color: #FAF7F2;
}

.hdr-inner { max-width: 1400px; margin: 0 auto;
             padding: 0 max(clamp(18px, 4vw, 44px), env(safe-area-inset-right)) 0 max(clamp(18px, 4vw, 44px), env(safe-area-inset-left));
             display: flex; align-items: center; gap: 28px; height: 100%; }

.hdr-logo { display: flex; align-items: center; flex-shrink: 0; color: currentColor; }
.hdr-logo:hover { color: currentColor; }

/* Logo. The <picture> sets the height and the image follows it. */
.brand-mark { display: block; }
.brand-mark img { display: block; height: 100%; width: auto; max-width: none; }
.hdr-logo .brand-mark { height: 64px; transition: height .3s; }
[data-header][data-scrolled] .hdr-logo .brand-mark { height: 50px; }
.menu-logo { height: 56px; }
.ftr-logo { height: 72px; margin: 0 0 18px; }

/* Over a dark hero the reversed logo shows until the header turns solid. */
.hdr-logo-light { display: none; }
[data-dark-hero] [data-header]:not([data-scrolled]) .hdr-logo-dark { display: none; }
[data-dark-hero] [data-header]:not([data-scrolled]) .hdr-logo-light { display: block; }

/* The reversed logo is thin white linework; over a bright frame of hero video it
   needs a soft shadow to hold its edge. */
[data-dark-hero] [data-header]:not([data-scrolled]) .hdr-logo-light img { filter: drop-shadow(0 1px 6px rgba(14,16,17,.45)); }

/* Below 1080px the logo scales with the viewport. At a fixed 52px the tagline
   rendered around 7px tall and could not be read; 64px keeps it legible, and at
   320px the mark still fits beside the WhatsApp and menu buttons. */
@media (max-width: 1079px) {
  .hdr-inner { gap: 12px; }
  .hdr-logo { min-width: 0; flex-shrink: 1; }
  .hdr-logo .brand-mark { height: clamp(48px, 16vw, 64px); }
  [data-header][data-scrolled] .hdr-logo .brand-mark { height: clamp(44px, 13.5vw, 54px); }
}

.hdr-nav { display: flex; align-items: center; gap: clamp(14px, 1.8vw, 26px); margin-left: auto; }
.hdr-nav a:hover { border-bottom-color: currentColor; color: currentColor; }
.hdr-actions { display: flex; align-items: center; gap: 14px; flex-shrink: 0; }

.hdr-cta { background: #16181A; color: #FAF7F2; border: 0; border-radius: 2px; padding: 12px 20px;
           font-size: 13px; font-weight: 700; letter-spacing: .02em; white-space: nowrap; min-height: 44px;
           transition: background .3s, color .3s; }
[data-dark-hero] [data-header]:not([data-scrolled]) .hdr-cta { background: #F3F3F1; color: #16181A; }

.hdr-mobile { display: none; align-items: center; gap: 10px; margin-left: auto; }
.hdr-burger { width: 42px; height: 42px; border: 1px solid #DCD2C2; background: none; color: currentColor;
              border-radius: 50%; display: flex; flex-direction: column; align-items: center;
              justify-content: center; gap: 5px; padding: 0; }
.hdr-burger span { display: block; width: 18px; height: 1.5px; background: currentColor; }
[data-dark-hero] [data-header]:not([data-scrolled]) .hdr-burger { border-color: rgba(250,247,242,.35); }

/* ── The 1080px breakpoint ────────────────────────────────────────────────
   Handled in CSS rather than by measuring the window in JS, so the wrong
   header never flashes before the first measurement. */
.wa-float { position: fixed; right: 24px; bottom: 24px; z-index: 70;
            display: flex; flex-direction: column; align-items: flex-end; gap: 10px; }
.wa-bar, .wa-bar-spacer { display: none; }

@media (max-width: 1079px) {
  .hdr-nav, .hdr-actions { display: none; }
  .hdr-mobile { display: flex; }
  .wa-float { display: none; }
  .wa-bar-spacer { display: block; height: calc(72px + env(safe-area-inset-bottom)); background: #0E1011; }
  .wa-bar {
    display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 70;
    background: rgba(250,247,242,.94); backdrop-filter: blur(10px); border-top: 1px solid #E3D9C9;
    padding: 10px 14px calc(10px + env(safe-area-inset-bottom)); gap: 10px; align-items: center;
  }
}

/* ── FAQ accordion ────────────────────────────────────────────────────────
   <details> so it works without JS; the icon rotates to a close mark in CSS. */
details[open] [data-faq-icon] { transform: rotate(45deg); }
[data-faq] summary { list-style: none; }
[data-faq] summary::marker { content: ''; }
[data-faq] summary:hover span:first-child { color: #2F4A3C; }

/* ── Itinerary accordion ──────────────────────────────────────────────────*/
[data-day][open] [data-day-icon] { transform: rotate(45deg); }
[data-day] > summary { list-style: none; }
[data-day] > summary::marker { content: ''; }
[data-day][open] > summary { background: #FFFFFF; }

/* ── Card hover, matching the transitions declared inline ─────────────────*/
article:hover { border-color: #DCD2C2; box-shadow: 0 14px 40px rgba(14,16,17,.07); transform: translateY(-2px); }
[data-dest-region]:hover span:first-child { filter: brightness(1.06); }
.exp-tile:hover { transform: scale(1.02); }

/* Filter and tab buttons flip to the charcoal "selected" treatment. */
[data-filter][aria-pressed="true"], [data-region-tab][aria-pressed="true"],
[data-chip][aria-pressed="true"], [data-tier][aria-pressed="true"] {
  background: #16181A !important; color: #FAF7F2 !important; border-color: #16181A !important;
}
[data-tier][aria-pressed="true"] [data-tier-line] { color: rgba(250,247,242,.7) !important; }
[data-review-dot][aria-pressed="true"] { width: 28px !important; background: #16181A !important; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}

/* ── The two-CTA pattern ──────────────────────────────────────────────────
   Enquire Now above, Enquire on WhatsApp directly below it. On the phone
   sticky bar they sit side by side instead — stacking two 54px buttons there
   costs a third of the screen. */
.cta-pair { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; max-width: 340px; }
.cta-pair--block { max-width: none; }
.cta-pair--block > * { width: 100%; }
.cta-centre .cta-pair { margin: 0 auto; align-items: stretch; }
.cta-pair > a:hover { filter: brightness(1.05); }

/* ── Destination fact strip ───────────────────────────────────────────────*/
.sec-facts { background: #16181A; color: #FAF7F2; padding: clamp(26px, 3.5vw, 40px) clamp(20px, 4vw, 44px); }
.sec-facts .wrap { max-width: 1400px; margin: 0 auto; }
.facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 22px 28px; }
.facts__item span:first-child { color: rgba(250,247,242,.5) !important; }
.facts__val { display: block; font-size: 14.5px; line-height: 1.5; color: #FAF7F2; font-weight: 500; }
.facts__note { margin: 22px 0 0; padding-top: 16px; border-top: 1px solid rgba(250,247,242,.15);
               font-size: 12.5px; line-height: 1.6; color: rgba(250,247,242,.55); max-width: 80ch; }

/* ── Overview with a sticky enquiry panel ────────────────────────────────*/
.split { display: grid; grid-template-columns: 1fr; gap: clamp(28px, 4vw, 56px); align-items: start; }
@media (min-width: 900px) { .split { grid-template-columns: minmax(0, 1.6fr) minmax(300px, 1fr); } }
.side-cta { border: 1px solid #E3D9C9; background: #FFFFFF; padding: clamp(22px, 3vw, 30px); }
@media (min-width: 900px) { .side-cta { position: sticky; top: 100px; } }

/* ── Package variants ─────────────────────────────────────────────────────*/
.variants { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
            gap: clamp(16px, 2vw, 24px); margin-top: 32px; }
.variant { border: 1px solid #EDE6DA; background: #F3F3F1; padding: 24px;
           display: flex; flex-direction: column; gap: 10px;
           transition: border-color .3s, box-shadow .3s, transform .3s; }
.variant:hover { border-color: #DCD2C2; box-shadow: 0 14px 40px rgba(14,16,17,.07); transform: translateY(-2px); }
.variant__head { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.variant__title { font-family: Newsreader, serif; font-size: 24px; font-weight: 400;
                  letter-spacing: -.015em; margin: 0; line-height: 1.2; }
.variant__circuit { margin: 0; font-size: 12.5px; color: #6A6A66; letter-spacing: .04em; }
.variant__who { margin: 0; font-size: 14px; color: #55554F; line-height: 1.5; }
.variant__price { margin: 0 0 4px; font-size: 13px; color: #6A6A66; line-height: 1.55;
                  padding-top: 12px; border-top: 1px solid #E3D9C9; }
.variant .cta-pair { margin-top: auto; padding-top: 8px; }

/* ── Breadcrumbs ──────────────────────────────────────────────────────────*/
.crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
          font-size: 12px; letter-spacing: .08em; text-transform: uppercase;
          font-weight: 600; color: rgba(250,247,242,.62); }
.crumbs a { color: rgba(250,247,242,.62); padding: 4px 0; }
.crumbs a:hover { color: #FAF7F2; }
.crumbs [aria-current] { color: rgba(250,247,242,.9); }

/* ── Places on a circuit ──────────────────────────────────────────────────*/
.spots { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
         gap: clamp(14px, 2vw, 22px); margin-top: 34px; }
.spot { border: 1px solid #E3D9C9; background: #FFFFFF; padding: 24px; }
.spot__num { display: block; font-family: Newsreader, serif; font-size: 15px;
             color: #7C683C; letter-spacing: .1em; margin-bottom: 14px; }
.spot__title { font-family: Newsreader, serif; font-size: 22px; font-weight: 400;
               letter-spacing: -.015em; margin: 0 0 8px; }
.spot__line { margin: 0; font-size: 14px; line-height: 1.6; color: #55554F; }

/* ── Trip highlights ──────────────────────────────────────────────────────*/
.hl-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
           gap: 0; margin-top: 34px; border-top: 1px solid #DCD2C2; }
.hl { display: flex; gap: 14px; padding: 20px 24px 20px 0; border-bottom: 1px solid #DCD2C2;
      font-size: 15.5px; line-height: 1.55; color: #2A2A26; }
.hl__tick { color: #2F4A3C; font-weight: 700; flex-shrink: 0; }

/* ── Why-book row under the review ────────────────────────────────────────*/
.why-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
           gap: 24px; margin-top: 44px; padding-top: 30px; border-top: 1px solid #E3D9C9; }
.why__t { margin: 0 0 6px; font-size: 15px; font-weight: 700; letter-spacing: -.01em; }
.why__b { margin: 0; font-size: 13.5px; line-height: 1.6; color: #55554F; }

/* ── Destination index cards ──────────────────────────────────────────────*/
.dgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
         gap: clamp(14px, 1.8vw, 24px); }
.dcard { display: block; border: 1px solid #EDE6DA; background: #FFFFFF; overflow: hidden;
         transition: border-color .3s, box-shadow .3s, transform .3s; color: inherit; }
.dcard:hover { border-color: #DCD2C2; box-shadow: 0 14px 40px rgba(14,16,17,.07);
               transform: translateY(-2px); color: inherit; }
.dcard__img { display: block; width: 100%; height: 210px; object-fit: cover; background: #2A2C2A; }
.dcard__body { display: block; padding: 18px 20px 22px; }
.dcard__title { display: block; font-family: Newsreader, serif; font-size: 23px;
                font-weight: 400; letter-spacing: -.01em; color: #16181A; }
.dcard__line { display: block; font-size: 13.5px; color: #6A6A66; line-height: 1.55; margin-top: 6px; }
.dcard__go { display: inline-block; margin-top: 14px; font-size: 12px; font-weight: 700;
             letter-spacing: .1em; color: #2F4A3C; text-transform: uppercase;
             border-bottom: 1px solid #C9A961; padding-bottom: 3px; }

/* ── Forms: the popup and the inline callback ────────────────────────────*/
.modal { border: 0; padding: 0; background: transparent; max-width: min(620px, 94vw); width: 100%; }
.modal::backdrop { background: rgba(14,16,17,.62); backdrop-filter: blur(2px); }
.modal__panel { position: relative; background: #F3F3F1; border: 1px solid #E3D9C9;
                border-radius: 4px; padding: clamp(24px, 4vw, 36px); max-height: 88vh; overflow-y: auto;
                overscroll-behavior: contain; }
.modal__close { position: absolute; top: 14px; right: 14px; width: 38px; height: 38px;
                border-radius: 50%; border: 1px solid #DCD2C2; background: #FFFFFF;
                font-size: 15px; line-height: 1; color: #55554F; }
.modal__head { margin-bottom: 24px; padding-right: 44px; }
.modal__pkg { margin: 12px 0 0; font-size: 13px; font-weight: 700; letter-spacing: .06em;
              text-transform: uppercase; color: #2F4A3C; }
.modal__alt { margin: 18px 0 0; font-size: 13.5px; color: #6A6A66; text-align: center; }
.modal__alt a { color: #2F4A3C; text-decoration: underline; text-underline-offset: 3px; }

#enqform, .cbform { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; }
#enqform .full, .cbform .full { grid-column: 1 / -1; }
#enqform label, .cbform label { display: block; margin-bottom: 7px; font-size: 12px;
                                letter-spacing: .1em; text-transform: uppercase;
                                font-weight: 600; color: #6A6A66; }
#enqform .opt, .cbform .opt { font-weight: 400; text-transform: none; letter-spacing: normal; }
#enqform input, #enqform select, #enqform textarea,
.cbform input, .cbform select, .cbform textarea {
  width: 100%; min-height: 52px; padding: 14px 16px; border: 1px solid #DCD2C2;
  background: #FFFFFF; border-radius: 2px; font-family: Manrope, system-ui, sans-serif;
  font-size: 15px; color: #16181A;
}
#enqform textarea, .cbform textarea { min-height: 90px; resize: vertical; }
#enqform input:focus, #enqform select:focus, #enqform textarea:focus,
.cbform input:focus, .cbform select:focus, .cbform textarea:focus { border-color: #16181A; outline: none;
  box-shadow: 0 0 0 1px #16181A; }
.cbform { margin-top: 30px; }

.formmsg { margin: 4px 0 0; font-size: 13.5px; line-height: 1.6; }
.formmsg--ok { color: #2F4A3C; font-weight: 600; }
.formmsg--warn { color: #87643E; font-weight: 600; }

/* ── Responsive photographs ───────────────────────────────────────────────*/
picture { display: block; }
picture img { display: block; width: 100%; height: auto; }

@media (max-width: 599px) {
  .cta-pair { max-width: none; }
  .cta-pair > * { width: 100%; }
}

/* ── Hero video ───────────────────────────────────────────────────────────
   The photograph is the section's CSS background and the video's poster, so
   the hero paints identically whether or not the video ever loads. The video
   sits above the background and below the gradient and the copy, and fades in
   only once it is actually playing. */
.hero { position: relative; overflow: hidden; }
.hero__inner { position: relative; z-index: 3; }

.hero-vid {
  position: absolute; inset: 0; z-index: 1;
  width: 100%; height: 100%; object-fit: cover;
  opacity: 0; transition: opacity .9s ease;
  pointer-events: none;
}
.hero-vid[data-playing] { opacity: 1; }

/* The destination, package and campaign heroes carry their gradient in the
   section's background-image, which the video covers. --hero-grad, set inline
   by tokens.js, lays that same gradient back over the video — each hero type
   has its own, so it cannot be hardcoded here. The home hero paints its
   gradient as a real element instead and sets no custom property, so nothing
   is drawn for it. */
.hero::after {
  content: ''; position: absolute; inset: 0; z-index: 2; pointer-events: none;
  background: var(--hero-grad, none);
  opacity: 0; transition: opacity .9s ease;
}
.hero[data-video-playing]::after { opacity: 1; }

/* Hero video plays regardless of prefers-reduced-motion, by decision of the
   site owner. The global reduced-motion rule further down still shortens every
   transition, so the fade-in is instant rather than animated for those users. */

/* ── Flying times ─────────────────────────────────────────────────────────
   Sits under the fact strip on the dark band, so it inherits that colouring. */
.flights { margin-top: 26px; padding-top: 22px; border-top: 1px solid rgba(250,247,242,.15); }
.flights > span:first-child { color: rgba(250,247,242,.5) !important; }
.flights__list { margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px 26px; }
.flights__row { display: flex; align-items: baseline; gap: 10px; justify-content: space-between;
                padding-bottom: 8px; border-bottom: 1px solid rgba(250,247,242,.1); }
.flights__row dt { font-size: 13px; font-weight: 600; color: rgba(250,247,242,.85); flex-shrink: 0; }
.flights__row dd { margin: 0; font-size: 13px; color: rgba(250,247,242,.6); text-align: right; }

/* ── Itinerary plan switcher ──────────────────────────────────────────────
   Both plans render into the page; only the selected one is shown, so a
   crawler still reads the lot. */
.plan-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 26px;
             border: 1px solid #E3D9C9; background: #F3F3F1; padding: 4px; width: fit-content; }
.plan-tabs button { border: 0; background: transparent; color: #6A6A66; padding: 11px 20px;
                    font-size: 13px; font-weight: 700; letter-spacing: .04em; min-height: 44px;
                    transition: background .2s, color .2s; }
.plan-tabs button[aria-pressed="true"] { background: #16181A; color: #FAF7F2; }
.plan__note { margin: 0 0 20px; font-size: 14px; line-height: 1.6; color: #6A6A66;
              max-width: 62ch; font-style: italic; }
