/* Trip Thirsty — integration adjustments only (fit real content into the theme).
   Loaded once after main.css. No redesign; targeted fixes to layout/overflow. */

/* --- primary nav: keep it on one line, tighten spacing --- */
.tgmenu__main-menu .navigation { flex-wrap: nowrap; white-space: nowrap; }
.tgmenu__nav.ml-50 { margin-left: 28px; }
.tgmenu__nav.ml-30 { margin-left: 12px; }
.navigation > li > a { padding-left: 13px; padding-right: 13px; }
.logo a img { max-height: 46px; width: auto; }
.tgmobile__menu .nav-logo img, .offCanvas__logo img { max-height: 44px; width: auto; }
.tg-footer-logo img { max-height: 42px; width: auto; }

/* --- no shopping cart (not an e-commerce site) --- */
.tg-header-cart, .cart-button, .minicart, .tg-header-cart-count { display: none !important; }

/* --- standard header's search + theme-toggle buttons sit outside the nav, so
   the theme's own "white while transparent, black once scrolled" rule (which
   only targets .tgmenu__navbar-wrap links) never reaches them. Match it. --- */
.tg-header-btn .search-open-btn,
.tg-header-btn .tt-theme-toggle { color: var(--tg-common-white); }
.tg-header-btn .tt-theme-toggle { border-color: rgba(255, 255, 255, .55); }
.header-sticky .tg-header-btn .search-open-btn,
.header-sticky .tg-header-btn .tt-theme-toggle { color: var(--tg-common-black); }
.header-sticky .tg-header-btn .tt-theme-toggle { border-color: var(--tg-border-1, #e1e1e1); }

/* the phone header keeps the theme toggle beside the hamburger (.tt-mobile-theme-toggle), outside .tg-header-btn, so the rules
   above never reached it: it stayed dark on the transparent header. Same white-then-dark behaviour here. */
.tt-mobile-theme-toggle .tt-theme-toggle { color: var(--tg-common-white); border-color: rgba(255, 255, 255, .55); }
.header-sticky .tt-mobile-theme-toggle .tt-theme-toggle { color: var(--tg-common-black); border-color: var(--tg-border-1, #e1e1e1); }

/* --- reviews widget credit line --- */
.tt-widget-credit { margin-top: 16px; font-size: 12px; opacity: .65; }
.tt-widget-credit a { color: inherit; text-decoration: underline; display: inline-flex; align-items: center; gap: 4px; }
.tt-widget-credit-mark { width: 14px; height: 14px; border-radius: 3px; }

/* --- enquiry form: Adults/Children are the only fields that lose all
   context once filled in (a plain number with no unit is meaningless —
   "Your name"/"Budget…" etc. stay legible via their own placeholder text
   even when a browser autofills a value, but "2" alone tells no one
   anything) — give just those two a small persistent label above the box */
.tt-input-label { display: block; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .02em; margin-bottom: 6px; color: var(--tg-grey-4, #767676); }

/* --- packages booking bar: single "Tour" tab only, keep fields readable --- */
.tg-booking-form-tabs .nav-links:not(#nav-platform-tab) { display: none; }
.tg-filter-price-input .input, .tg-filter-price-in .input { min-width: 84px; }
.tg-filter-price-input form { flex-wrap: wrap; gap: 8px; }

/* --- homepage hero booking widget (Destinations/Check in/Check out/Guest):
   the theme only drops these fields to width:100% below 576px — from 576 to
   767px they're a fixed 200px each, which is wider than the card holding
   them on most phones (especially landscape/phablet), pushing the row past
   the card edge. Stack them cleanly, full-width, for the whole phone range. --- */
@media (max-width: 767.98px) {
  .tg-booking-form-input-group { flex-direction: column; align-items: stretch !important; }
  .tg-booking-form-parent-inner { width: 100% !important; margin-right: 0 !important; }
  .tg-booking-add-input-field,
  .tg-booking-add-input-date .input { width: 100% !important; box-sizing: border-box; }
  .tg-booking-form-location-list { width: 100%; }
}

/* --- package detail gallery: main image + thumbs sit tight --- */
.tg-tour-details-gallery-slider-wrap { max-width: 860px; }
.tg-tour-details-gallery-active .swiper-slide img { height: 440px; object-fit: cover; border-radius: 12px; }
.tg-tour-details-gallery-active.pb-20 { padding-bottom: 0 !important; }
.tg-tour-details-gallery-thumb-active { margin-top: 12px; }
.tg-tour-details-gallery-thumb-active .swiper-slide img { height: 88px; object-fit: cover; border-radius: 8px; cursor: pointer; }
.tg-tour-details-gallery-thumb-active .swiper-slide-thumb-active img { outline: 2px solid var(--tg-theme-primary, #1a78d0); }

/* --- inline SVG map from Google embed --- */
.tg-tour-about-map iframe, .tg-contact-map iframe, .tg-contact-map { width: 100%; min-height: 420px; border: 0; border-radius: 12px; }

/* --- don't title-case real data (emails, urls, addresses) --- */
.tg-contact-info-wrap .item a, .tg-contact-info-wrap .item span,
.offCanvas__side-info .contact-list p, .offCanvas__side-info a,
.tg-tour-details-location a, a[href^="mailto:"], a[href^="tel:"] { text-transform: none; }

/* --- wishlist heart toggle state --- */
/* saved heart: real red, and actually filled — tt.js swaps fa-regular -> fa-solid
   (Font Awesome picks outline/filled by class prefix, so font-weight did nothing).
   .tt-pop is added on click only, so already-saved hearts don't re-animate on load. */
.tg-listing-item-wishlist a.is-saved, .tg-tour-details-video-share a.is-saved { color: #ff2d46; }
.tt-heart, a .fa-heart { display: inline-block; transition: color .2s; }
/* listing-card hearts are inline SVG outlines (fill="none"), not Font Awesome — so "saved" must fill the shape itself */
.tg-listing-item-wishlist a svg path { transition: fill .2s ease, stroke .2s ease; }
.tg-listing-item-wishlist a:hover { color: #ff2d46; }
.tg-listing-item-wishlist a.is-saved svg path { fill: currentColor; }
.tg-listing-item-wishlist a svg { overflow: visible; }
.tg-listing-item-wishlist a svg.tt-pop { animation: tt-heart-pop .5s cubic-bezier(.2, .9, .3, 1.3); transform-origin: 50% 55%; }
@keyframes tt-heart-pop {
  0%   { transform: scale(.5); }
  40%  { transform: scale(1.45); }
  70%  { transform: scale(.92); }
  100% { transform: scale(1); }
}
.fa-heart.tt-pop { animation: tt-heart-pop .5s cubic-bezier(.2, .9, .3, 1.3); }
/* dark mode: the root invert+hue-rotate can't hand back a saturated red like
   #ff2d46 (channels clip, and a second re-invert only makes it duller). #fe5c5c
   is a near fixed point of that filter — it comes out ~rgb(255,94,94) whether it
   passes through once or twice — so it stays a clear red on the dark page. */
html[data-theme="dark"] .tg-listing-item-wishlist a.is-saved,
html[data-theme="dark"] .tg-tour-details-video-share a.is-saved,
html[data-theme="dark"] .tg-listing-item-wishlist a:hover { color: #fe5c5c; }

/* --- header search overlay: live-filtered package cards --- */
.search__popup.search-opened { bottom: 0; height: 100%; overflow-y: auto; }
.search__popup .tt-results { max-height: 62vh; overflow-y: auto; margin-top: 26px; }
.search__popup .tt-results .row { margin: 0 -8px; }
.search__popup .tt-card { display: block; padding: 8px; }
.search__popup .tt-card .inner { display: flex; gap: 12px; align-items: center; background: #fff; border: 1px solid #eee; border-radius: 12px; padding: 10px; transition: border-color .15s; }
.search__popup .tt-card:hover .inner, .search__popup .tt-card.tt-active .inner { border-color: var(--tg-theme-primary, #1a78d0); }
.search__popup .tt-card img { width: 92px; height: 62px; object-fit: cover; border-radius: 8px; flex: none; }
.search__popup .tt-card h6 { margin: 0 0 3px; font-size: 15px; }
.search__popup .tt-card span { font-size: 13px; opacity: .7; }
.search__popup .tt-empty { padding: 30px; text-align: center; opacity: .6; }
.search-input-field { width: 100%; }

/* --- homepage isotope grid: normal flow when JS lays it out --- */
.project-menu-active, .tg-listing-menu-wrap { display: none; }

/* --- testimonials: consistent avatar, default placeholder --- */
.tg-testimonial-avatar-thumb img { width: 56px; height: 56px; object-fit: cover; border-radius: 50%; }

/* --- sliders rebuilt for a small CMS: centre the few items, no dead space --- */
.tg-testimonial-slider.tt-few .swiper-wrapper { justify-content: center; }
.tg-testimonial-slider.tt-few .swiper-slide { height: auto; }
.tg-testimonial-slider .swiper-slide { display: flex; }
.tg-testimonial-slider .tg-testimonial-item { width: 100%; }
.tg-tour-details-gallery-thumb-active.tt-few .swiper-wrapper { justify-content: center; }
.tg-tour-details-gallery-active .swiper-slide-active img { border-radius: 12px; }
.tg-tour-details-gallery-navigation button { cursor: pointer; }
/* hero: keep the caption legible while the images cross-fade */
.tg-hero-slider-active .swiper-slide { background-position: center; background-size: cover; }

/* perf: main.css's zoom keyframe (scale 1→1.1→1, 20s) runs on EVERY slide's
   .tg-hero-thumb unconditionally, not just the visible one. With loop mode
   duplicating slides, that's several full-viewport 4K background layers all
   continuously animating/compositing at once even though only one is ever
   shown (fade effect keeps the rest at opacity 0, not display:none) — real,
   wasted GPU work behind every scroll/repaint, worse still in dark mode
   where each one also sits inside the page's own filter. Only the active
   slide needs to actually be running the animation. */
.tg-hero-thumb { animation: none; transform: scale(1); }
/* hero rhythm: a slide's photo pushes in over ~1.5 s the moment it becomes active (the footage dissolves in over it after
   about a second — assets/js/tt.js), then keeps drifting slowly. Only the active slide animates. */
.tg-hero-slider-active .swiper-slide-active .tg-hero-thumb {
  animation: tt-hero-push 1.5s cubic-bezier(.16, .8, .3, 1) both, tt-hero-drift 22s ease-in-out 1.5s infinite alternate;
  will-change: transform;
}
@keyframes tt-hero-push  { from { transform: scale(1); }    to { transform: scale(1.1); } }
@keyframes tt-hero-drift { from { transform: scale(1.1); }  to { transform: scale(1.17); } }
@media (prefers-reduced-motion: reduce) { .tg-hero-slider-active .swiper-slide-active .tg-hero-thumb { animation: none; } }

/* --- homepage listing price badge: real (longer) prices were overflowing the
   fixed-width ribbon and spilling over its diagonal edge. Stack amount / unit
   instead of side-by-side so only the widest single line has to fit. --- */
.tg-listing-card-price-wrap.price-bg {
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  gap: 0;
}
.tg-listing-card-price-wrap.price-bg .tg-listing-card-currency-amount {
  font-size: 16px;
  line-height: 1.3;
  margin-right: 0;
  white-space: nowrap;
}
.tg-listing-card-price-wrap.price-bg .tg-listing-card-activity-person {
  font-size: 9px;
  line-height: 1.2;
}

/* about-page "Where We Take You" banner: it also carries .tg-grey-bg, whose
   `background:` shorthand resets size/position to auto / 0 0 and beats the
   theme's .include-bg cover rule — so the photo only ever spanned its own
   1920px width and left a blank strip on any wider screen. Re-assert cover. */
.tg-banner-area.tg-grey-bg.include-bg { background-size: cover; background-position: center; background-repeat: no-repeat; }

/* ================= Brand blue replaces the theme's purple (both modes) =================
   The template's accent is a purple (#560CE3). The brand is the logo's blue, so the
   accent variable — which ~190 rules across main.css read — becomes a blue that still
   clears ~4.5:1 with white text (the logo's own light #5FB3FF is only 2.2:1, fine for
   the hero/price accents it's already used on, too pale for text and small buttons).
   Dark mode re-points the same variable at a pre-compensated value (see below) so it
   lands on the light logo blue on screen. */
:root {
  --tg-theme-primary: #1a78d0;
  --tg-grey-8: #f3f7fc;          /* was a lavender-grey (#f6f4fa) */
  --tt-blue-tint: #e3f0fc;       /* pale blue chip/button fill — replaces the lavender tints */
}
/* inline SVGs drawn with the literal purple (About page icon cards, search icons) */
svg [fill="#560CE3"], svg [fill="#560ce3"] { fill: var(--tg-theme-primary); }
svg [stroke="#560CE3"], svg [stroke="#560ce3"] { stroke: var(--tg-theme-primary); }
/* lavender tints hard-coded behind buttons / icon chips / tags */
.tg-btn-transparent, .tg-btn-su-transparent, .tg-listing-avai-btn, .tg-chose-6-wrap .icon,
.tg-process-list .tg-chose-list-icon, .tg-blog-sidebar-tag-list ul li a,
.tg-tour-details-video-feature-list ul li .icon, .tg-pricing-btn .tg-btn, .tg-team-social a,
.tg-section-su-subtitle, .tg-section-su-subtitle.su-subtitle-2 { background: var(--tt-blue-tint); }
/* nav: dropdown hover + hero-transparent hover/active tints were pale purples */
.tgmenu__navbar-wrap ul li .sub-menu li:hover > a,
.tgmenu__navbar-wrap ul li .sub-menu li.active > a { color: var(--tg-theme-primary); }
/* (scoped to the not-yet-sticky transparent header: the same selector in main.css also
   drives the opaque inner-page header, where a pale tint would vanish on white) */
.tg-transparent:not(.header-sticky) .tgmenu__navbar-wrap > ul > li.active > a,
.tg-transparent:not(.header-sticky) .tgmenu__navbar-wrap > ul > li:hover > a { color: #cfe6ff; }

/* ================= Light / dark mode ================= */
:root { color-scheme: light; }
html[data-theme="dark"] { color-scheme: dark; }

/* the theme's default accent (--tg-theme-primary, #1a78d0, a blue-purple)
   drives ~190 rules across main.css — buttons, underlines, borders, hover
   states, the cookie/enquire buttons, etc. None of those are individually
   exempted from the root invert below, so on screen it was never actually
   showing as purple: invert(1) hue-rotate(180deg) turns #1a78d0 into a
   washed-out pink/magenta (rgb 255,180,255). Rather than exempting ~190
   scattered rules, redefine the variable itself to a pre-compensated value
   — #1165B1 — chosen so that after the SAME filter it lands back on
   exactly the site's own brand blue (#5FB3FF, the logo's icon colour,
   already used for buttons/price banners elsewhere). One variable change
   fixes every element that reads it, site-wide, desktop and mobile alike. */
html[data-theme="dark"] { --tg-theme-primary: #1165B1; }

html[data-theme="dark"] { filter: invert(1) hue-rotate(180deg); }
/* re-invert real photography, video and embedded 3rd-party widgets so they
   stay true-to-life instead of looking like photo negatives */
html[data-theme="dark"] img,
html[data-theme="dark"] video,
html[data-theme="dark"] iframe,
html[data-theme="dark"] .include-bg,
html[data-theme="dark"] .tg-hero-thumb,
html[data-theme="dark"] .tt-promo-img,
html[data-theme="dark"] .tt-flag,
html[data-theme="dark"] .tt-whatsapp-bubble {
  filter: invert(1) hue-rotate(180deg);
}
/* .tg-hero-top-shadow only needs its OWN re-invert on the homepage hero,
   where it's a sibling of the (separately re-inverted) slide background —
   two filter passes total (its own + html's), which cancel out correctly.
   On every breadcrumb page it's instead nested INSIDE the .include-bg
   banner div, which is ALSO re-inverted — adding a re-invert here too gave
   it three passes (own + include-bg's + html's), an odd number that does
   NOT cancel out, so it rendered as a pale wash instead of staying
   invisible/black. .tg-breadcrumb-shadow only ever appears in that nested
   position, so it must never get its own filter at all. */
html[data-theme="dark"] .tg-hero-area .tg-hero-top-shadow {
  filter: invert(1) hue-rotate(180deg);
}
/* same odd-pass trap for any <img> nested inside an .include-bg block (the
   footer wordmark is the visible case): its own generic re-invert + the
   parent's + the root's = 3 passes, which nets out to ONE inversion — a white
   wordmark came out near-black on the footer photo. Drop the img's own pass
   so only the parent's + root's remain (2 = true colour). */
html[data-theme="dark"] .include-bg img { filter: none; }
/* the footer's photo is a purple (hue ~262°) baked into the JPG, so no colour variable
   can reach it — footer-grey.jpg is the same artwork desaturated to a neutral dark grey
   (no colour cast at all), used in both modes. It has its own filename on purpose:
   replacing a file in place leaves CDN/browser caches serving the old copy for days.
   !important because .include-bg sets the original inline. */
.tg-footer-area { background-image: url(../img/footer/footer-grey.jpg) !important; }
/* same for the "Ready when you are" banner: banner-blue.jpg is a new filename on purpose —
   replacing banner.jpg in place left CDN/browser caches (7-day max-age) serving the old
   purple copy to some visitors. */
.tg-cta-wrap { background-image: url(../img/cta/banner-blue.jpg) !important; }
.tt-flag { display: inline-block; }

/* brand-colour overrides below (hero CTA blue, Browse-button yellow, price
   banner blue) are flat CSS colours, not photos, so none of them were on
   the re-invert list above — the root filter was quietly shifting each one
   to an off, muddy tone (and flipping their white text to black) instead of
   leaving the real brand colour alone. Re-invert each one back to true. */
html[data-theme="dark"] .tg-hero-btn-box .tg-btn,
html[data-theme="dark"] .tg-listing-card-price-wrap.price-bg,
html[data-theme="dark"] .tg-listing-2-price {
  filter: invert(1) hue-rotate(180deg);
}

/* "Browse": the logo yellow (#FFC95C) can't survive the dark-mode filter — invert +
   hue-rotate clip a saturated yellow, so a double-inverted copy came out pale peach
   (rgb 246,192,145). The closest gold the filter can actually reach is ~rgb(220,162,82),
   which a single pass produces from #8a5000 (text #e8e8e8 lands on near-black). */
html[data-theme="dark"] .tg-booking-form-search-btn .bk-search-button {
  background: #8a5000;
  color: #e8e8e8;
}

/* main.css hardcodes a pale lavender (#f0e9ff / #f5efff / #f4eeff) as the tint
   behind several buttons and icon chips — light-mode-only by design. Under
   the root filter that flips to a dark PURPLE (rgb 23,16,38), which is the
   purple left over on the "View packages" button in the About section.
   #c6dcf8 is a pale blue pre-compensated to land on a dark blue tint
   (rgb 18,40,68) on screen, matching the blue accent everywhere else. */
html[data-theme="dark"] .tg-btn-transparent,
html[data-theme="dark"] .tg-listing-avai-btn,
html[data-theme="dark"] .tg-chose-6-wrap .icon,
html[data-theme="dark"] .tg-process-list .tg-chose-list-icon,
html[data-theme="dark"] .tg-blog-sidebar-tag-list ul li a,
html[data-theme="dark"] .tg-tour-details-video-feature-list ul li .icon,
html[data-theme="dark"] .tg-pricing-btn .tg-btn,
html[data-theme="dark"] .tg-team-social a,
html[data-theme="dark"] .tg-section-su-subtitle {
  background: #c6dcf8;
}

/* transparent header (over the hero photo, before scrolling): the theme
   hardcodes this state's text/icons to white — correct in light mode, but
   not exempted from the page filter, so in dark mode it silently inverts to
   black and goes unreadable against the (still true-colour) photo behind it.
   Re-invert it back, but ONLY while not yet sticky — the sticky state's
   black-on-white styling already self-corrects to white-on-dark once its
   own (unexempted) white background inverts to dark, so re-inverting it too
   would cancel that out and turn the text invisible again.

   Scoped to .tg-transparent specifically (the homepage-style hero header) —
   every inner page (packages, package, guides, about, faq, contact) reuses
   the same #header-sticky id for its OWN, always-opaque header, which is
   hardcoded dark-on-white from the start and never was white-on-photo. That
   variant needs no re-invert at all: it should just take the single root
   invert like normal content and self-correct to light-on-dark. Matching it
   here too was re-inverting it back to its true dark colour, making the
   inner-page nav links/hamburger/search/theme-toggle invisible against
   their own (correctly, singly-inverted) now-dark header background. */
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tgmenu__navbar-wrap > ul > li > a,
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tg-header-contact-number,
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tg-header-contact-icon,
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tg-btn-header,
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tg-header-border,
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tgmenu-offcanvas-open-btn span,
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tg-header-btn .search-open-btn,
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tg-header-btn .tt-theme-toggle,
html[data-theme="dark"] #header-sticky.tg-transparent:not(.header-sticky) .tt-mobile-theme-toggle .tt-theme-toggle {
  filter: invert(1) hue-rotate(180deg);
}
/* Top-level links only. This list used to say `.tgmenu__navbar-wrap ul li a`, which is
   every link at any depth — so the dropdown's own links were re-inverted back to dark
   text while the dropdown panel itself (white in light mode) is NOT re-inverted and goes
   black: dark text on a black panel, i.e. an "empty" About / Destinations menu. Dropdown
   links now take the plain single invert like the panel, so they read white-on-black.
   The header's Enquire pill, its "Favorites" label and the vertical divider were also
   missing here and rendered dark on the photo. */

/* Dropdowns open on click / tap / keyboard as well as hover (tt.js adds .tt-open / .tt-shut). */
.tgmenu__navbar-wrap ul li.tt-open > .sub-menu { opacity: 1; visibility: visible; transform: scale(1); }
.tgmenu__navbar-wrap ul li.tt-shut > .sub-menu { opacity: 0 !important; visibility: hidden !important; transform: scale(1, 0) !important; }
.tgmenu__main-menu li.menu-item-has-children > a { cursor: pointer; }
.tgmenu__main-menu li.menu-item-has-children > a::after { transition: transform .2s ease; }
.tgmenu__main-menu li.menu-item-has-children.tt-open > a::after { transform: rotate(180deg); }
/* same story for the homepage hero's overlaid title/subtitle/price text —
   always white-on-photo by design, not part of the header so no sticky
   state to worry about */
html[data-theme="dark"] .tg-hero-subtitle,
html[data-theme="dark"] .tg-hero-title,
html[data-theme="dark"] .tg-hero-para,
html[data-theme="dark"] .tg-hero-price-wrap p,
html[data-theme="dark"] .tg-hero-price {
  filter: invert(1) hue-rotate(180deg);
}
/* .tg-hero-price (the ₹ / amount / "Per Person" spans) was the one piece of
   that hero price line missing from the list — its sibling "Starting from"
   label stayed true white while the big number went black. Its spans are
   plain children, so one filter on the wrapper covers all three. */

/* the logo is a plain <img>, so it's already covered by the generic re-invert
   rule above — the double-invert round-trips its blue mark and white/dark
   wordmark text losslessly; only the small yellow accent dot drifts to a
   slightly paler gold, an acceptable trade for keeping the real brand colour
   instead of falling back to a flat-white version.

   EXCEPT for .logo-2 (tt-logo.png) once the header is sticky: that variant's
   wordmark is a dark navy rgb(45,73,110), drawn for a white sticky bar —
   not near-black, so a single root invert doesn't turn it clean white
   either, just a washed-out grey-tan that's still low-contrast (this was
   tried first; still hard to read, especially at mobile sizes). Simplest
   correct fix: in dark mode, don't switch logos at all — keep showing
   .logo-1 (tt-logo-light.png, a TRUE white wordmark already, same asset
   used pre-scroll) even once .header-sticky would normally swap to
   .logo-2. It's already covered by the generic <img> double-invert above,
   so this needs no filter math of its own. */
html[data-theme="dark"] .header-sticky .logo-1 { display: block !important; }
html[data-theme="dark"] .header-sticky .logo-2 { display: none !important; }

/* every other spot the dark-wordmark logo appears (inner-page header, the
   mobile menu and off-canvas panels) is emitted as a pair of images by
   build_partials.php — show the white-wordmark one in dark mode */
.tt-logo-dm { display: none; }
html[data-theme="dark"] .tt-logo-dm { display: inline-block; }
html[data-theme="dark"] .tt-logo-lm { display: none; }

.tt-mobile-theme-toggle { display: inline-flex; align-items: center; margin-right: 14px; }

/* on phones (< 576px) .tg-header-menu-bar holds the mobile theme toggle and
   the hamburger button side by side, but the div has no layout rule of its
   own — it falls back to block, so its inline children wrap onto their own
   line the moment the row runs a little tight, stacking the toggle above
   the hamburger instead of next to it. Force them to stay on one row. */
.tg-header-menu-bar { display: flex; align-items: center; flex-wrap: nowrap; }

/* theme toggle — one icon, sun/moon swap by mode */
.tt-theme-toggle {
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; margin-left: 10px; flex: none;
  border-radius: 50%; border: 1px solid var(--tg-border-1, #e1e1e1);
  background: transparent; color: inherit; cursor: pointer; font-size: 15px; padding: 0;
}
.tt-theme-toggle:hover { border-color: var(--tg-theme-primary, #1a78d0); color: var(--tg-theme-primary, #1a78d0); }
.tt-theme-toggle svg { display: block; }
.tt-theme-toggle .tt-icon-sun { display: none; }
html[data-theme="dark"] .tt-theme-toggle .tt-icon-sun { display: block; }
html[data-theme="dark"] .tt-theme-toggle .tt-icon-moon { display: none; }

/* decorative background "shape" watermarks (map/line-art PNGs behind the
   listing, chose, location and blog sections, etc.) are pale grey line art
   drawn to sit almost invisibly on a light page background. The root invert
   flips their section's light background to black but leaves the watermark
   itself looking like bold, high-contrast line art on top of real content —
   harsh instead of the subtle texture it was designed to be. They carry no
   information (alt="" / decorative), so just dim them steeply in dark mode
   rather than trying to re-invert them back to their "true" pale colour. */
html[data-theme="dark"] .tg-listing-shape,
html[data-theme="dark"] .tg-listing-shape-2,
html[data-theme="dark"] .tg-listing-shape-3,
html[data-theme="dark"] .tg-chose-shape,
html[data-theme="dark"] .tg-chose-shape-2,
html[data-theme="dark"] .tg-chose-6-shape,
html[data-theme="dark"] .tg-location-shape,
html[data-theme="dark"] .tg-blog-shape,
html[data-theme="dark"] .tg-blog-shape-2,
html[data-theme="dark"] .tg-about-details-shape,
html[data-theme="dark"] .tg-team-shape-2,
html[data-theme="dark"] .tg-cta-price-shape,
html[data-theme="dark"] .tg-cta-price-shape-2 {
  opacity: 0.08;
}

/* --- cards: 2 per row on phones, everywhere .tg-grid-full is used
   (packages listing, homepage package grid + related-tours + destinations +
   guides teaser) --- */
@media (max-width: 767.98px) {
  .tg-listing-grid-wrap .tg-grid-full,
  .row .tg-grid-full {
    flex: 0 0 50%; max-width: 50%; padding-left: 6px; padding-right: 6px;
    /* the homepage grid is absolute-positioned by Isotope (percentPosition),
       which ignores flex-basis on its items — an explicit width is what
       Isotope actually measures/renders against */
    width: 50%;
  }
  .tg-grid-full .tg-listing-card-item { margin-bottom: 14px; }
  .tg-grid-full .tg-listing-2-price .new,
  .tg-grid-full .tg-listing-card-price .new { font-size: 15px; }
  .tg-grid-full .tg-listing-card-content,
  .tg-grid-full .tg-listing-2-card-content { padding: 12px; }
  .tg-grid-full .tg-listing-card-title,
  .tg-grid-full .tg-listing-2-title { font-size: 15px; line-height: 1.3; }
  .tg-grid-full .tg-listing-avai-btn { padding: 6px 12px; font-size: 12px; }
  .tg-grid-full .tg-listing-card-meta-list,
  .tg-grid-full .tg-listing-card-location { font-size: 12px; }
  /* star rating: at half-card width the 5 icons + "(0 reviews)" text no
     longer fit on one line and wrap one-per-line; every package is at 0
     reviews right now anyway, so just drop it on the compact mobile card */
  .tg-grid-full .tg-listing-card-review { display: none; }

  /* destination cards (homepage "Where we take you") */
  .tg-grid-full .tg-location-title { font-size: 15px; }
  .tg-grid-full .tg-location-time { font-size: 11px; }

  /* guide/blog teaser cards (homepage "Travel guides") */
  .tg-grid-full .tg-blog-content { padding: 12px; }
  .tg-grid-full .tg-blog-title { font-size: 15px; line-height: 1.3; }
  .tg-grid-full .tg-blog-meta span { font-size: 11px; }
  .tg-grid-full .tg-blog-content p { font-size: 13px; -webkit-line-clamp: 2; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; }
  .tg-grid-full .tg-blog-btn { font-size: 13px; }
}

/* --- homepage "about" thumbs: hide on phones (two stacked photos don't
   leave room for the copy next to them at this width) --- */
@media (max-width: 767.98px) {
  .tg-about-thumb-wrap { display: none; }
}

/* --- founder's note (about page) --- */
.tt-founder-thumb-wrap img { aspect-ratio: 1 / 1; object-fit: cover; max-width: 260px; margin: 0 auto; display: block; }
.tt-founder-note { font-size: 18px; line-height: 1.6; font-style: italic; position: relative; padding-left: 22px; border-left: 3px solid var(--tg-theme-primary, #1a78d0); }
.tt-founder-signoff span { opacity: .7; }

/* --- package-detail title price line: the big price sat flush against
   "Per Person" with no breathing room (theme only gave it margin-left) --- */
.tg-tour-details-video-feature-price p span { margin-right: 8px; }

/* --- country scroller: centring the active chip can leave a neighbour
   sliced in half at the edge — fade it out instead of hard-clipping it --- */
.tt-country-scroll {
  scroll-padding-inline: 26px; padding-left: 26px; padding-right: 26px;
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%);
  mask-image: linear-gradient(to right, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%);
}

/* --- guest picker dropdown: real adult/child steppers in the theme's own
   .tg-quantity panel (which shipped CSS but no content) --- */
[data-tt-guestpanel] .tt-guest-row { display: flex; align-items: center; justify-content: space-between; padding: 8px 6px; }
[data-tt-guestpanel] .tt-guest-row + .tt-guest-row { border-top: 1px solid #eee; }
.tt-stepper { display: flex; align-items: center; gap: 10px; }
.tt-stepper button {
  width: 26px; height: 26px; border-radius: 50%; border: 1px solid #ddd;
  background: #fff; color: inherit; font-size: 15px; line-height: 1; cursor: pointer;
}
.tt-stepper button:hover { border-color: var(--tg-theme-primary, #1a78d0); color: var(--tg-theme-primary, #1a78d0); }
.tt-stepper .tt-step-val { min-width: 16px; text-align: center; font-weight: 600; }
[data-tt-guestpanel] .tt-guest-row em { display: block; font-style: normal; font-size: 11px; opacity: .55; margin-top: 1px; }
[data-tt-guestpanel] .tt-guest-note { font-size: 11.5px; opacity: .6; margin: 8px 6px 0; padding-top: 8px; border-top: 1px solid #eee; }

/* --- country filter: horizontal, scrollable, active chip auto-centres --- */
.tt-country-scroll {
  display: flex; gap: 8px; overflow-x: auto; overflow-y: hidden;
  -webkit-overflow-scrolling: touch; scrollbar-width: none;
  padding: 4px 2px 10px; margin-bottom: 18px; scroll-behavior: smooth;
}
.tt-country-scroll::-webkit-scrollbar { display: none; }
.tt-country-scroll a {
  flex: 0 0 auto; white-space: nowrap; padding: 8px 16px; border-radius: 999px;
  border: 1px solid #e3e3e8; background: #fff; color: inherit;
  font-size: 14px; font-weight: 500; transition: background .15s, border-color .15s, color .15s;
}
.tt-country-scroll a:hover { border-color: var(--tg-theme-primary, #1a78d0); }
.tt-country-scroll a.is-active {
  background: var(--tg-theme-primary, #1a78d0); border-color: var(--tg-theme-primary, #1a78d0); color: #fff;
}

/* --- "Watch clip" link in the itinerary --- */
a.tt-video:not(.tg-video-play) { display: inline-flex; align-items: center; gap: 6px; margin-top: 6px;
  font-weight: 600; color: var(--tg-theme-primary, #1a78d0); }
a.tt-video i { font-size: 1.05em; }

/* --- YouTube lightbox --- */
.tt-video-modal { position: fixed; inset: 0; z-index: 99999; display: flex; align-items: center; justify-content: center; }
.tt-video-backdrop { position: absolute; inset: 0; background: rgba(6, 8, 20, .82); }
.tt-video-box { position: relative; width: min(960px, 92vw); }
.tt-video-frame { position: relative; padding-top: 56.25%; border-radius: 12px; overflow: hidden; background: #000; }
.tt-video-frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.tt-video-close { position: absolute; top: -44px; right: 0; width: 36px; height: 36px; border: 0;
  border-radius: 50%; background: #fff; color: #111; font-size: 22px; line-height: 1; cursor: pointer; }

/* --- 10% off popup: edge-to-edge photo, X close, name+phone --- */
.tt-promo-modal { position: fixed; inset: 0; z-index: 99998; display: flex; align-items: center; justify-content: center; padding: 16px; }
.tt-promo-backdrop { position: absolute; inset: 0; background: rgba(6, 8, 20, .78); }
.tt-promo-box {
  position: relative; z-index: 1; width: min(760px, 100%); max-height: 90vh; overflow: hidden;
  background: var(--tg-common-white); border-radius: 16px; display: flex;
  box-shadow: 0 30px 60px rgba(0, 0, 0, .35);
}
.tt-promo-img { flex: 1 1 45%; background-size: cover; background-position: center; min-height: 320px; }
.tt-promo-body { flex: 1 1 55%; padding: 34px 30px; display: flex; flex-direction: column; justify-content: center; }
.tt-promo-body h3 { font-size: 24px; }
.tt-promo-body .input { width: 100%; }
.tt-promo-fine { font-size: 11px; opacity: .65; margin: 14px 0 0; }
.tt-promo-fine a { text-decoration: underline; }
.tt-promo-msg { font-size: 13px; margin: 10px 0 0; min-height: 1em; }
.tt-promo-msg.is-ok { color: #16a34a; }
.tt-promo-msg.is-err { color: #dc2626; }
.tt-promo-close {
  position: absolute; top: 12px; right: 12px; z-index: 2; width: 34px; height: 34px; border: 0;
  border-radius: 50%; background: rgba(255, 255, 255, .92); color: #111; font-size: 20px; line-height: 1; cursor: pointer;
}
@media (max-width: 700px) {
  .tt-promo-box { flex-direction: column; max-height: 92vh; overflow-y: auto; }
  .tt-promo-img { min-height: 160px; }
  .tt-promo-body { padding: 24px 20px; }
}

/* --- accessible/SEO-only heading text: present in the DOM (for screen
   readers and search engines) without taking up visual space — used where
   the design has no room for a visible page title (e.g. the packages
   listing, which opens straight into the booking bar) --- */
.tt-visually-hidden {
  position: absolute !important;
  width: 1px !important; height: 1px !important;
  padding: 0 !important; margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* --- date pickers (Check in/out, package enquiry dates): flatpickr's
   calendar popup is a fixed 307.875px wide, position:absolute, with no
   responsive handling at all — on a narrow phone it can extend past the
   input's edge and off the side of the screen. Cap it to the viewport and
   centre it instead of letting flatpickr's own left-offset math place it. --- */
@media (max-width: 480px) {
  .flatpickr-calendar {
    width: 300px !important;
    max-width: calc(100vw - 24px) !important;
    left: 50% !important;
    transform: translateX(-50%);
  }
}

/* --- fullscreen preloader: favicon mark + wordmark instead of the theme's
   abstract spinner shape, on the same #loading fullscreen overlay/fade-out
   the theme already drives (main.js: $("#loading").fadeOut(500) on window
   load) — only what's INSIDE it changed. tt.js picks one of 3 animations
   at random per page load ("random animations of the logo"). --- */
.tt-preloader { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; }
.tt-preloader-logo { width: 64px; height: 64px; display: block; margin: 0 auto 12px; }
.tt-preloader-text { display: block; font-family: var(--tg-ff-heading, inherit); font-weight: 700; font-size: 18px; letter-spacing: .02em; color: var(--tg-theme-primary, #1a78d0); }

@keyframes tt-preload-blink { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }
@keyframes tt-preload-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.18); } }
@keyframes tt-preload-spin-pop { 0% { transform: rotate(0deg) scale(1); } 50% { transform: rotate(180deg) scale(1.15); } 100% { transform: rotate(360deg) scale(1); } }
.tt-anim-blink .tt-preloader-logo { animation: tt-preload-blink 0.9s ease-in-out infinite; }
.tt-anim-pulse .tt-preloader-logo { animation: tt-preload-pulse 0.9s ease-in-out infinite; }
.tt-anim-spin .tt-preloader-logo { animation: tt-preload-spin-pop 1.1s ease-in-out infinite; }
.tt-anim-blink .tt-preloader-text,
.tt-anim-pulse .tt-preloader-text,
.tt-anim-spin .tt-preloader-text { animation: tt-preload-blink 1.4s ease-in-out infinite; animation-delay: .15s; }

/* --- WhatsApp bubble: stacked directly above the scroll-top button, same
   right edge, same size/breakpoints (see .scroll__top / .scroll__top.open
   in main.css — 50px/right:50px/bottom:30px desktop, 35px/15px/15px mobile). --- */
.tt-whatsapp-bubble {
  position: fixed;
  right: 50px;
  bottom: 92px;   /* scroll-top's 30px + its 50px height + 12px gap */
  width: 50px;
  height: 50px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: #25D366;
  color: #fff;
  font-size: 24px;
  z-index: 99;
  box-shadow: 0 6px 18px rgba(0,0,0,.2);
  transition: transform .2s ease;
}
.tt-whatsapp-bubble:hover { color: #fff; transform: scale(1.08); }
@media (max-width: 1500px) { .tt-whatsapp-bubble { right: 25px; } }
@media (max-width: 575px) {
  .tt-whatsapp-bubble { right: 15px; bottom: 60px; width: 35px; height: 35px; font-size: 18px; }
}

/* --- carousel nav buttons: the visible circle is only 45px and sits right at
   the slide edge, so on touch it's easy to miss — pad the real hit area
   without changing how it looks (both are already position:absolute from
   the theme, which is itself a valid containing block for this ::before). --- */
.tg-hero-next, .tg-hero-prev,
.tg-tour-details-gallery-next, .tg-tour-details-gallery-prev {
  cursor: pointer;
}
.tg-hero-next::before, .tg-hero-prev::before,
.tg-tour-details-gallery-next::before, .tg-tour-details-gallery-prev::before {
  content: "";
  position: absolute;
  inset: -8px;
}

/* --- Destinations dropdown: "Domestic Packages" + the "International" label
   stay pinned while the (potentially long) country list scrolls beneath
   them — one flat <ul>, no nested lists, so the theme's existing hover/
   offcanvas dropdown JS needs no changes. --- */
.tt-dest-menu { max-height: min(440px, 70vh); overflow-y: auto; }
/* Domestic is a minor line for us — last in the list, set apart by a hairline and
   toned down, not pinned to the top (the old sticky top rows overlapped as the
   list scrolled). */
.tt-dest-domestic { border-top: 1px solid rgba(0,0,0,.08); margin-top: 4px; padding-top: 4px; }
.tt-dest-domestic a { font-size: .92em; opacity: .75; }
.tt-dest-domestic a:hover { opacity: 1; }

/* --- favourites page: cards are cloned from the (differently-styled, compact
   horizontal-row) search popup markup — restyle as a proper vertical grid card. --- */
#tt-fav-grid .inner {
  display: flex; flex-direction: column; gap: 0;
  background: var(--tg-common-white, #fff); border: 1px solid #eee; border-radius: 14px;
  overflow: hidden; height: 100%; transition: box-shadow .2s, border-color .2s;
}
#tt-fav-grid .inner:hover { border-color: var(--tg-theme-primary, #1a78d0); box-shadow: 0 10px 30px rgba(0,0,0,.08); }
#tt-fav-grid .inner img { width: 100%; height: 190px; object-fit: cover; border-radius: 0; }
#tt-fav-grid .inner div { padding: 16px 18px 20px; }
#tt-fav-grid .inner h6 { margin: 0 0 6px; font-size: 17px; }
#tt-fav-grid .inner span { font-size: 13.5px; opacity: .7; }

/* the footer pulls itself up 120px (.tg-footer-space, by design, for its
   decorative curved top edge) and relies on the preceding section having
   enough bottom padding to absorb that overlap. Most pages have plenty; the
   empty-favourites message sits close enough to the section's own bottom
   edge that the footer was overlapping — swallowing part of the "browse
   packages" button — so give it its own clearance below. */
#tt-fav-empty { margin-bottom: 140px; }
#tt-fav-grid:not(:empty) { margin-bottom: 120px; }

/* favourites: "Unlike" pill on each saved card, top-right over the photo */
.tt-fav-col { position: relative; transition: opacity .25s ease, transform .25s ease; }
.tt-fav-col.tt-fav-leaving { opacity: 0; transform: scale(.94); pointer-events: none; }
.tt-fav-remove {
  position: absolute; top: 24px; right: 27px; z-index: 3;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 13px 7px 11px; border: 0; border-radius: 999px; cursor: pointer;
  background: #fff; color: #ff2d46; font-size: 13px; font-weight: 600; line-height: 1;
  box-shadow: 0 4px 14px rgba(0, 0, 0, .18); transition: transform .15s ease, box-shadow .15s ease;
}
.tt-fav-remove i { font-size: 14px; }
.tt-fav-remove:hover { transform: scale(1.06); box-shadow: 0 6px 18px rgba(0, 0, 0, .25); }
.tt-fav-remove:active { transform: scale(.96); }
html[data-theme="dark"] .tt-fav-remove { color: #fe5c5c; }

/* --- one-time "no account needed" hint toast --- */
.tt-fav-hint {
  position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%);
  background: #111; color: #fff; padding: 12px 18px; border-radius: 10px;
  font-size: 13.5px; z-index: 9999; display: flex; align-items: center; gap: 12px;
  max-width: calc(100vw - 32px); box-shadow: 0 10px 30px rgba(0,0,0,.25);
  animation: tt-fav-hint-in .25s ease;
}
.tt-fav-hint button { background: none; border: 0; color: #fff; opacity: .7; font-size: 18px; line-height: 1; cursor: pointer; flex: none; }
.tt-fav-hint button:hover { opacity: 1; }
@keyframes tt-fav-hint-in { from { opacity: 0; transform: translate(-50%, 12px); } to { opacity: 1; transform: translate(-50%, 0); } }

/* --- legal pages (terms/privacy): plain readable prose --- */
.tt-legal h3 { margin: 34px 0 12px; font-size: 19px; }
.tt-legal h3:first-of-type { margin-top: 10px; }
.tt-legal p, .tt-legal li { line-height: 1.75; color: var(--tg-grey-4, #555); }
.tt-legal ul { padding-left: 20px; }

/* --- cookie consent banner --- */
.tt-cookie-banner {
  position: fixed; left: 16px; right: 16px; bottom: 16px; z-index: 9998;
  max-width: 640px; margin: 0 auto;
  background: var(--tg-common-white, #fff); color: #111;
  border: 1px solid #eee; border-radius: 14px; padding: 18px 20px;
  box-shadow: 0 12px 34px rgba(0,0,0,.16);
  display: flex; flex-wrap: wrap; align-items: center; gap: 14px;
}
.tt-cookie-banner p { margin: 0; font-size: 13.5px; line-height: 1.6; flex: 1 1 280px; }
.tt-cookie-banner p a { text-decoration: underline; }
.tt-cookie-banner .tt-cookie-actions { display: flex; gap: 10px; flex: none; }
.tt-cookie-banner button { border: 0; border-radius: 8px; padding: 9px 16px; font-size: 13px; font-weight: 600; cursor: pointer; }
.tt-cookie-accept { background: var(--tg-theme-primary, #1a78d0); color: #fff; }
.tt-cookie-dismiss { background: transparent; color: #666; }

/* --- real 5% promo discount display: honest "was / now", no fake inflation --- */
/* --- price tags/banners: the logo's own light blue (sampled from
   tt-logo.png's icon, #5FB3FF), not the theme's default purple. The
   homepage card version is an angled ribbon shape baked into a PNG
   (angle-4.png) rather than a plain background-color — recolour it with
   a CSS mask instead of needing a second image asset. --- */
.tg-listing-card-price-wrap.price-bg {
  background-image: none;
  background-color: #5FB3FF;
  -webkit-mask-image: url(../img/listing/angle-4.png);
  mask-image: url(../img/listing/angle-4.png);
  -webkit-mask-size: cover;
  mask-size: cover;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
}
.tg-listing-2-price { background: #5FB3FF; }
.tg-listing-2-price del { color: #eaf4ff; }

/* --- "Browse" search button: the logo's own yellow (sampled from
   tt-logo.png's accent dot, #FFC95C), not the theme's default orange --- */
.tg-booking-form-search-btn .bk-search-button {
  background: #FFC95C;
  color: #17151c;
}

/* --- hero "View Packages" button: the logo's blue, not the theme's default
   purple. Scoped to just the hero CTA, not every .tg-btn site-wide. --- */
.tg-hero-btn-box .tg-btn { background: #5FB3FF; }
.tg-hero-btn-box .tg-btn:hover { background: #4AA3F5; }

/* --- hero "Starting from ₹X Per Person" line: at true phone widths the
   theme's fixed 24px/40px font sizes for this row don't leave room to wrap
   correctly and the row overflows past both edges of the viewport (visible
   as text clipped at the left edge). Shrink it and force a clean wrap. --- */
.tg-hero-area { overflow-x: hidden; }
@media (max-width: 575px) {
  .tg-hero-price-wrap {
    flex-wrap: wrap;
    justify-content: center;
    row-gap: 4px;
  }
  .tg-hero-price-wrap p { font-size: 16px; }
  .tg-hero-price { flex-wrap: wrap; justify-content: center; }
  .tg-hero-price .hero-dolar { font-size: 16px; transform: none; }
  .tg-hero-price .hero-price { font-size: 26px; }
  .tg-hero-price .night { font-size: 13px; transform: none; }
}

/* --- customer photos/videos strip --- */
.tt-custmedia-row { display: flex; flex-wrap: wrap; justify-content: center; gap: 14px; }
.tt-custmedia-row .tt-custmedia-item { flex: 0 0 calc((100% - 5 * 14px) / 6); }
@media (max-width: 991.98px) { .tt-custmedia-row .tt-custmedia-item { flex-basis: calc((100% - 3 * 14px) / 4); } }
@media (max-width: 575.98px) { .tt-custmedia-row { gap: 8px; } .tt-custmedia-row .tt-custmedia-item { flex-basis: calc((100% - 8px) / 2); } }
.tt-custmedia-item { position: relative; display: block; border-radius: 12px; overflow: hidden; aspect-ratio: 1; background: #f3f3f4; }
.tt-custmedia-item img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .3s; }
.tt-custmedia-item:hover img { transform: scale(1.06); }
.tt-custmedia-play { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,.25); color: #fff; font-size: 22px; }
.tt-custmedia-cap { position: absolute; left: 0; right: 0; bottom: 0; padding: 22px 10px 9px; font-size: 12px; line-height: 1.35; color: #fff; background: linear-gradient(0deg, rgba(0,0,0,.65), transparent); }

/* --- partner logos strip --- */
.tt-partners-label { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; opacity: .5; font-weight: 600; }
.tt-partners-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 40px 56px; }
.tt-partner-logo { display: inline-flex; align-items: center; filter: grayscale(1); opacity: .55; transition: filter .2s, opacity .2s; }
.tt-partner-logo:hover { filter: grayscale(0); opacity: 1; }
.tt-partner-logo img { max-height: 34px; max-width: 140px; width: auto; object-fit: contain; }
html[data-theme="dark"] .tt-partner-logo { filter: grayscale(1) invert(1) hue-rotate(180deg); }
html[data-theme="dark"] .tt-partner-logo:hover { filter: invert(1) hue-rotate(180deg); }

/* --- section intro headings ("Why Trip Thirsty" / "Most Popular Tour" and
   similar) read too heavy at the theme's default 700 — tone down just these,
   not every heading site-wide. --- */
.tg-about-section-title h2,
.tg-chose-section-title h2 { font-weight: 600; }

.tt-price-was { opacity: .55; font-size: .8em; font-weight: 400; text-decoration: line-through; margin-right: 4px; }
.tt-price-now { font-weight: inherit; }
.tt-date-field { position: relative; }
.tt-date-field .input { padding-right: 38px; }
.tt-date-icon { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); opacity: .45; pointer-events: none; font-size: 14px; }

.tt-price-badge {
  display: inline-block; font-size: 10px; font-weight: 700; letter-spacing: .03em;
  background: #16a34a; color: #fff; border-radius: 5px; padding: 2px 6px; margin-left: 6px;
  vertical-align: middle;
}


/* --- flag emoji: Windows (Chrome/Edge) has no flag glyphs and shows the two
   regional-indicator letters ("AE", "VN"…) instead. head.php's tiny canvas test adds
   .tt-noflags when flags can't be drawn in colour, so we hide them rather than show
   stray letters. macOS / iOS / Android / Firefox are untouched. --- */
.tt-noflags .tt-flag { display: none !important; }

/* --- country chips: click-and-drag with the mouse (touch already scrolls natively) --- */
.tt-country-scroll { cursor: grab; }
.tt-country-scroll.is-dragging { cursor: grabbing; scroll-behavior: auto; user-select: none; -webkit-user-select: none; }
.tt-country-scroll.is-dragging a { pointer-events: none; }


/* --- homepage hero: shared text block cross-fades between slides; optional muted video layer --- */
.tg-hero-content { transition: opacity .22s ease, transform .22s ease; }
.tg-hero-content.tt-swap { opacity: 0; transform: translateY(8px); }
.tt-hero-videos { position: absolute; top: 0; left: 0; width: 100%; height: 740px; z-index: 1; overflow: hidden; pointer-events: none; }
.tt-hero-vpane { position: absolute; inset: 0; opacity: 0; transition: opacity 1s ease; }      /* the footage dissolves in over the photo */
.tt-hero-vpane.is-live { opacity: 1; }
.tt-hero-vpane.is-leaving { transition-duration: .45s; }                                            /* ...and leaves quickly when the slide changes */
.tt-hero-vpane iframe { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 0; max-width: none; pointer-events: none; }
/* the slides' own bottom gradient sits underneath the video — restate it (only while footage is showing) so the text stays legible on bright shots */
.tt-hero-videos::after {
  content: ""; position: absolute; inset: 0; opacity: 0; transition: opacity .6s ease;
  background: linear-gradient(180deg, rgba(0,0,0,.30) 0%, rgba(0,0,0,.14) 38%, rgba(0,0,0,.50) 100%);
}
.tt-hero-videos.has-live::after { opacity: 1; }
.tt-hero-credit {
  position: absolute; left: 22px; bottom: 96px; z-index: 2; pointer-events: auto;
  font-size: 11.5px; letter-spacing: .02em; color: rgba(255,255,255,.85); text-shadow: 0 1px 3px rgba(0,0,0,.65);
}
.tt-hero-credit:hover { color: #fff; text-decoration: underline; }
html[data-theme="dark"] .tt-hero-videos::after,
html[data-theme="dark"] .tt-hero-credit { filter: invert(1) hue-rotate(180deg); }   /* same double-pass as the slide photos */
@media (max-width: 575px) { .tt-hero-videos { height: 650px; } .tt-hero-credit { left: 14px; bottom: 82px; } }

/* --- "no packages yet" state (packages page for a destination added in admin) --- */
.tt-empty-state { text-align: center; padding: 48px 16px 56px; }
.tt-empty-state .tt-empty-link { margin-left: 14px; font-weight: 600; }

.tt-grid-empty { text-align: center; padding: 26px 16px 8px; }
.tt-grid-empty p { margin-bottom: 16px; }


/* ================= date-range dialog (assets/js/tt-daterange.js) =================
   One "Travel dates" field opens this Material-style dialog wherever a Check in / Check out
   pair used to be. Designed in light colours; dark mode inverts it like the rest of the page. */
html.tt-dr-lock { overflow: hidden; }
.tt-dr-backdrop { position: fixed; inset: 0; z-index: 100000; display: flex; align-items: center; justify-content: center;
  padding: 12px; background: rgba(15, 20, 30, .55); opacity: 0; transition: opacity .16s ease; }
.tt-dr-backdrop[hidden] { display: none; }
.tt-dr-backdrop.is-open { opacity: 1; }
.tt-dr { --tt-dr-band: rgba(26, 120, 208, .16);
  width: min(360px, 100%); background: #fff; color: #1b1f27; border-radius: 18px; padding: 14px 12px 8px;
  box-shadow: 0 24px 60px rgba(0, 0, 0, .35); transform: translateY(10px) scale(.98); transition: transform .18s ease; }
.tt-dr-backdrop.is-open .tt-dr { transform: none; }
.tt-dr-head { display: flex; align-items: center; justify-content: space-between; padding: 0 4px 8px; }
.tt-dr-title { background: none; border: 0; font: 600 15px/1.2 inherit; color: inherit; cursor: pointer;
  display: inline-flex; align-items: center; gap: 6px; padding: 7px 10px; border-radius: 8px; }
.tt-dr-title:hover { background: rgba(0, 0, 0, .05); }
.tt-dr-nav button { width: 36px; height: 36px; border: 0; border-radius: 50%; background: none; color: inherit; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; }
.tt-dr-nav button:hover:not(:disabled) { background: rgba(0, 0, 0, .06); }
.tt-dr-nav button:disabled { opacity: .3; cursor: default; }
.tt-dr-dow, .tt-dr-grid { display: grid; grid-template-columns: repeat(7, 1fr); }
.tt-dr-dow span { text-align: center; font-size: 12px; font-weight: 500; color: #6b7280; padding: 6px 0; }
.tt-dr-cell { position: relative; height: 44px; display: flex; align-items: center; justify-content: center; }
.tt-dr-cell.in-range::before, .tt-dr-cell.band-start::before, .tt-dr-cell.band-end::before {
  content: ""; position: absolute; top: 4px; bottom: 4px; background: var(--tt-dr-band); }
.tt-dr-cell.in-range::before { left: 0; right: 0; }
.tt-dr-cell.band-start::before { left: 50%; right: 0; }
.tt-dr-cell.band-end::before { left: 0; right: 50%; }
.tt-dr-cell.band-end.row-start::before, .tt-dr-cell.band-start.row-end::before { display: none; }   /* nothing to join to inside this row */
.tt-dr-cell.in-range.row-start::before { border-radius: 20px 0 0 20px; }
.tt-dr-cell.in-range.row-end::before { border-radius: 0 20px 20px 0; }
.tt-dr-cell.in-range.row-start.row-end::before { border-radius: 20px; }
.tt-dr-day { position: relative; z-index: 1; width: 40px; height: 40px; border: 0; border-radius: 50%; background: none;
  color: inherit; font: 400 14px inherit; cursor: pointer; transition: background .12s ease; }
.tt-dr-day:hover:not(:disabled):not(.is-start):not(.is-end) { background: rgba(0, 0, 0, .07); }
.tt-dr-day:disabled { color: #c2c7cf; cursor: default; }
.tt-dr-day.is-today:not(.is-start):not(.is-end) { box-shadow: inset 0 0 0 1.5px var(--tg-theme-primary); }
.tt-dr-day.is-start, .tt-dr-day.is-end { background: var(--tg-theme-primary); color: #fff; font-weight: 600; }
.tt-dr-day:focus-visible, .tt-dr-title:focus-visible, .tt-dr-nav button:focus-visible, .tt-dr-months button:focus-visible,
.tt-dr-actions button:focus-visible { outline: 2px solid var(--tg-theme-primary); outline-offset: 2px; }
.tt-dr-years { display: flex; align-items: center; justify-content: space-between; padding: 4px 8px 10px; }
.tt-dr-years button { width: 34px; height: 34px; border: 0; border-radius: 50%; background: none; font-size: 22px; line-height: 1; color: inherit; cursor: pointer; }
.tt-dr-years button:disabled { opacity: .3; cursor: default; }
.tt-dr-months { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; padding: 0 6px 6px; }
.tt-dr-months button { height: 46px; border: 0; border-radius: 12px; background: rgba(0, 0, 0, .04); font: 500 14px inherit; color: inherit; cursor: pointer; }
.tt-dr-months button:hover:not(:disabled) { background: rgba(0, 0, 0, .09); }
.tt-dr-months button.is-cur { background: var(--tg-theme-primary); color: #fff; }
.tt-dr-months button:disabled { opacity: .3; cursor: default; }
.tt-dr-sum { min-height: 24px; font-size: 13px; color: #4b5563; padding: 8px 8px 0; }
.tt-dr-actions { display: flex; align-items: center; gap: 2px; padding: 4px 0 2px; }
.tt-dr-actions button { border: 0; background: none; font: 600 13px inherit; letter-spacing: .06em; text-transform: uppercase;
  color: var(--tg-theme-primary); padding: 10px 12px; border-radius: 8px; cursor: pointer; }
.tt-dr-actions button:hover:not(:disabled) { background: rgba(26, 120, 208, .10); }
.tt-dr-actions .tt-dr-ok:disabled { opacity: .4; cursor: default; }
.tt-dr-actions .tt-dr-clear { color: #6b7280; }
.tt-dr-spacer { flex: 1; }
html[data-theme="dark"] .tt-dr { --tt-dr-band: rgba(17, 101, 177, .5); }
html[data-theme="dark"] .tt-dr-backdrop { background: rgba(255, 255, 255, .6); }   /* the page filter inverts this to a dark dim */
/* the trigger field */
input[data-tt-range] { cursor: pointer; text-overflow: ellipsis; }
.tg-booking-form-parent-inner.tt-daterange-field { width: 300px; }
.tt-daterange-field .tg-booking-add-input-date, .tt-daterange-field .tg-booking-add-input-date .input { width: 100%; }
@media (max-width: 767.98px) { .tg-booking-form-parent-inner.tt-daterange-field { width: 100% !important; } }
@media (prefers-reduced-motion: reduce) { .tt-dr-backdrop, .tt-dr { transition: none; } }


/* ================= reviews + customer photos (package page) — inc/package-reviews.php ================= */
.tt-rv-summary { display: grid; grid-template-columns: 210px 1fr; gap: 28px; align-items: center; padding: 22px 26px;
  border: 1px solid #e4e8ee; border-radius: 16px; margin-bottom: 8px; }
.tt-rv-score { text-align: center; }
.tt-rv-avg { display: block; font-weight: 700; font-size: 46px; line-height: 1; color: var(--tg-common-black, #020615); }
.tt-rv-stars { display: inline-flex; gap: 2px; margin: 8px 0 4px; }
.tt-rv-stars i { color: var(--tg-common-yellow, #ffc95c); font-size: 15px; }
.tt-rv-stars i.is-off { color: #d3d8e0; }
.tt-rv-stars-lg i { font-size: 19px; }
.tt-rv-count { display: block; font-size: 13px; color: #6b7280; }
.tt-rv-dist { list-style: none; margin: 0; padding: 0; display: grid; gap: 9px; }
.tt-rv-dist li { display: grid; grid-template-columns: 58px 1fr 26px; align-items: center; gap: 12px; font-size: 13px; color: #4b5563; }
.tt-rv-bar { height: 8px; border-radius: 8px; background: #e9edf3; overflow: hidden; display: block; }
.tt-rv-bar i { display: block; height: 100%; border-radius: 8px; background: var(--tg-theme-primary); }
.tt-rv-dn { text-align: right; color: #6b7280; }
.tt-rv-none { color: #6b7280; margin-bottom: 18px; }
.tt-rv-list { list-style: none; margin: 0; padding: 0; }
.tt-rv-item { display: flex; gap: 16px; padding: 22px 0; border-bottom: 1px solid #e9edf3; }
.tt-rv-item:last-child { border-bottom: 0; }
.tt-rv-avatar { flex: 0 0 46px; width: 46px; height: 46px; border-radius: 50%; background: var(--tg-theme-primary); color: #fff;
  display: inline-flex; align-items: center; justify-content: center; font-weight: 600; font-size: 18px; line-height: 1; }
.tt-rv-body { min-width: 0; flex: 1; }
.tt-rv-head { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px; }
.tt-rv-head .tt-rv-stars { margin: 0; }
.tt-rv-name { font-weight: 600; color: var(--tg-common-black, #020615); }
.tt-rv-meta { font-size: 13px; color: #6b7280; margin: 2px 0 8px; }
.tt-rv-title { font-weight: 600; margin: 0 0 4px; color: var(--tg-common-black, #020615); }
.tt-rv-text { margin: 0; line-height: 1.7; overflow-wrap: anywhere; }
.tt-rv-photos { list-style: none; margin: 12px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.tt-rv-photos a { display: block; width: 88px; height: 88px; border-radius: 10px; overflow: hidden; background: #e9edf3; }
.tt-rv-photos img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .25s ease; }
.tt-rv-photos a:hover img { transform: scale(1.06); }

.tt-rv-write { margin-top: 20px; }
.tt-rv-write > summary { list-style: none; cursor: pointer; display: inline-flex; }
.tt-rv-write > summary::-webkit-details-marker { display: none; }
.tt-rv-write[open] > summary { margin-bottom: 22px; }
.tt-rv-form { padding: 24px; border: 1px solid #e4e8ee; border-radius: 16px; }
.tt-rv-form .textarea { min-height: 150px; height: auto; padding: 12px 16px; width: 100%; resize: vertical; line-height: 1.6; }
.tt-rv-form input[type=file].input { height: auto; padding: 10px 12px; }
.tt-rv-rate { border: 0; padding: 0; margin: 0 0 20px; min-width: 0; }
.tt-rv-rate legend { float: none; width: auto; padding: 0; margin: 0 0 6px; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .02em; color: var(--tg-grey-4, #767676); }
.tt-rv-rate-in { display: inline-flex; flex-direction: row-reverse; justify-content: flex-end; gap: 4px; }
.tt-rv-rate-in input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.tt-rv-rate-in label { cursor: pointer; font-size: 28px; line-height: 1; color: #d3d8e0; padding: 2px; transition: color .12s ease, transform .12s ease; }
.tt-rv-rate-in label:hover { transform: scale(1.12); }
.tt-rv-rate-in input:checked ~ label, .tt-rv-rate-in label:hover, .tt-rv-rate-in label:hover ~ label { color: var(--tg-common-yellow, #ffc95c); }
.tt-rv-rate-in input:focus-visible + label { outline: 2px solid var(--tg-theme-primary); outline-offset: 2px; border-radius: 6px; }
.tt-rv-hint { display: block; margin-top: 6px; font-size: 12.5px; color: #6b7280; line-height: 1.5; }
.tt-rv-previews { list-style: none; margin: 10px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.tt-rv-previews[hidden] { display: none; }
.tt-rv-previews li { width: 72px; height: 72px; border-radius: 8px; overflow: hidden; background: #e9edf3; }
.tt-rv-previews img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tt-rv-consent { display: flex; gap: 10px; align-items: flex-start; font-size: 13.5px; line-height: 1.55; cursor: pointer; }
.tt-rv-consent input { margin-top: 4px; flex: 0 0 auto; }
.tt-rv-note { margin: 12px 0 0; font-size: 12.5px; color: #6b7280; }
.tt-rv-msg { padding: 12px 16px; border-radius: 10px; margin: 0 0 16px; font-size: 14px; line-height: 1.55; }
.tt-rv-msg.is-ok { background: #e8f6ee; color: #14663a; }
.tt-rv-msg.is-err { background: #fdecec; color: #a02020; }
.tt-rv-msg[hidden] { display: none; }
#tt-rv-send[disabled] { opacity: .6; cursor: progress; }

/* tile decorations shared by the package-page strip, the gallery and the homepage strip */
.tt-gal-play { position: absolute; left: 50%; top: 50%; width: 48px; height: 48px; margin: -24px 0 0 -24px; border-radius: 50%;
  background: rgba(2, 6, 21, .62); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 15px; padding-left: 3px;
  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); pointer-events: none; }
.tt-gal-tag { position: absolute; left: 8px; top: 8px; padding: 3px 9px; border-radius: 20px; background: rgba(2, 6, 21, .66); color: #fff;
  font-size: 10.5px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; pointer-events: none; }

.tt-cph-sub, .tt-cph-empty { color: #6b7280; }
.tt-cph-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 138px; gap: 8px; }
.tt-cph-grid--big .tt-cph-item:first-child { grid-column: span 2; grid-row: span 2; }
.tt-cph-item, .tt-cph-all { position: relative; border-radius: 12px; overflow: hidden; background: #e9edf3; }
.tt-cph-item a { position: absolute; inset: 0; display: block; }
.tt-cph-item img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .45s ease; }
.tt-cph-item:hover img { transform: scale(1.05); }
.tt-cph-all a { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-end; gap: 4px; padding: 16px;
  background: var(--tg-theme-primary); color: #fff; }
.tt-cph-all a:hover { filter: brightness(1.08); color: #fff; }
.tt-cph-all-n { font-weight: 700; font-size: 30px; line-height: 1; }
.tt-cph-all-t { font-size: 14px; font-weight: 600; line-height: 1.3; }
.tt-cph-all i { position: absolute; right: 14px; top: 14px; }
@media (max-width: 767.98px) {
  .tt-rv-summary { grid-template-columns: 1fr; gap: 18px; padding: 18px; }
  .tt-rv-form { padding: 16px; }
  .tt-cph-grid { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 132px; }
}
/* stars: the gold can't survive the dark-mode filter (saturated colours clip on the double inversion) — pre-compensated, lands on a warm gold */
html[data-theme="dark"] .tt-rv-stars i:not(.is-off),
html[data-theme="dark"] .tt-rv-rate-in input:checked ~ label,
html[data-theme="dark"] .tt-rv-rate-in label:hover,
html[data-theme="dark"] .tt-rv-rate-in label:hover ~ label { color: #8a5000; }
/* tile badges sit over photos, not on the page: re-invert so the dark pill / play button keep their designed look in dark mode */
html[data-theme="dark"] .tt-gal-tag, html[data-theme="dark"] .tt-gal-play { filter: invert(1) hue-rotate(180deg); }


/* ============================== site-wide loading screen (inc/cinematic-loader.php, assets/js/tt-preload.js) ==============================
   Real progress: the bar is what has actually loaded (its own cloud art, the parsed page, the pictures on the first screen,
   the load event + fonts).  Light = pale daylight sky, dark = black night sky (same markup). */
html.tt-cine-on { overflow: hidden; }
.tt-cine { position: fixed; inset: 0; z-index: 100001; overflow: hidden; color: #0a1929;
  background: linear-gradient(180deg, #c6dff7 0%, #e4f0fb 46%, #fbfdff 100%);
  transition: opacity .9s ease .15s, visibility 0s linear 1.05s; }
.tt-cine.is-out { opacity: 0; visibility: hidden; pointer-events: none; }
.tt-cine-glow { position: absolute; left: 50%; top: 44%; width: 90vmax; height: 90vmax; transform: translate(-50%, -50%);
  background: radial-gradient(closest-side, rgba(255, 255, 255, .95), rgba(255, 255, 255, 0)); opacity: .9; }
.tt-cine-layer { position: absolute; left: 0; overflow: hidden; width: 100%; opacity: 0; transition: opacity 1.4s ease, transform 1.15s cubic-bezier(.5, 0, .2, 1); will-change: transform, opacity; }
.tt-cine-layer.is-ready { opacity: 1; }
.tt-cine-far  { top: 7%;  height: 420px; --w: 1800px; }
.tt-cine-near { bottom: -3%; height: 520px; --w: 2200px; }
.tt-cine-belt { position: absolute; inset: 0 auto 0 0; width: calc(100% + var(--w)); background-repeat: repeat-x; background-position: 0 0; background-size: var(--w) 100%;
  animation: tt-cine-drift 120s linear infinite; will-change: transform; }
.tt-cine-near .tt-cine-belt { animation-duration: 64s; }
@keyframes tt-cine-drift { from { transform: translate3d(0, 0, 0); } to { transform: translate3d(calc(var(--w) * -1), 0, 0); } }
@media (min-width: 1700px) { .tt-cine-far { height: 588px; --w: 2520px; } .tt-cine-near { height: 728px; --w: 3080px; } }
.tt-cine.is-out .tt-cine-far  { transform: scale(1.35) translateY(-4%); opacity: 0; }
.tt-cine.is-out .tt-cine-near { transform: scale(1.6) translateY(6%);  opacity: 0; }

.tt-cine-center { position: absolute; left: 50%; top: 46%; width: min(90vw, 520px); transform: translate(-50%, -50%); text-align: center; }
.tt-cine-mark { width: 54px; height: 54px; display: block; margin: 0 auto 14px; animation: tt-cine-rise 1s ease both; }
.tt-cine-brand { margin: 0 0 18px; font-size: 12px; font-weight: 600; letter-spacing: .42em; text-transform: uppercase; color: rgba(10, 25, 41, .62); animation: tt-cine-rise 1s ease .12s both; }
.tt-cine-title { margin: 0 0 8px; font-size: clamp(26px, 5.2vw, 40px); font-weight: 600; line-height: 1.15; color: #0a1929; animation: tt-cine-title 1.7s cubic-bezier(.2, .7, .2, 1) .25s both; }
.tt-cine-sub { margin: 0 0 26px; font-size: 14px; color: rgba(10, 25, 41, .62); animation: tt-cine-rise 1s ease .6s both; }
.tt-cine-bar { position: relative; height: 3px; margin: 0 auto; width: min(72vw, 300px); border-radius: 3px; background: rgba(10, 25, 41, .13); overflow: hidden; animation: tt-cine-rise 1s ease .75s both; }
.tt-cine-fill { position: absolute; inset: 0; transform-origin: 0 50%; transform: scaleX(var(--p, 0)); border-radius: 3px; background: var(--tg-theme-primary); transition: transform .08s linear; }
.tt-cine-pct { margin: 12px 0 0; font-size: 12.5px; font-weight: 500; letter-spacing: .14em; color: rgba(10, 25, 41, .55); font-variant-numeric: tabular-nums; animation: tt-cine-rise 1s ease .9s both; }
@keyframes tt-cine-rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes tt-cine-title { from { opacity: 0; letter-spacing: .3em; filter: blur(7px); transform: translateY(8px); } to { opacity: 1; letter-spacing: .01em; filter: blur(0); transform: none; } }

/* night: the site-wide filter already turns the sky black and the type white; the clouds are re-inverted so they read as moonlit, and dimmed */
html[data-theme="dark"] .tt-cine { background: linear-gradient(180deg, #f1f4f8 0%, #f8fafc 52%, #fefefe 100%); }   /* inverts to near-black */
html[data-theme="dark"] .tt-cine-glow { background: radial-gradient(closest-side, rgba(150, 190, 255, .55), rgba(150, 190, 255, 0)); opacity: .55; }
html[data-theme="dark"] .tt-cine-belt { filter: invert(1) hue-rotate(180deg); }
html[data-theme="dark"] .tt-cine-layer.is-ready { opacity: .3; }
html[data-theme="dark"] .tt-cine-near.is-ready { opacity: .38; }
html.tt-cine-skip .tt-cine { display: none !important; }
/* pages after a visitor's first: same screen, but brisk */
.tt-cine.is-quick { transition: opacity .4s ease, visibility 0s linear .45s; }
.tt-cine.is-quick .tt-cine-layer { transition-duration: .4s; }
.tt-cine.is-quick .tt-cine-mark, .tt-cine.is-quick .tt-cine-brand, .tt-cine.is-quick .tt-cine-title,
.tt-cine.is-quick .tt-cine-sub, .tt-cine.is-quick .tt-cine-bar, .tt-cine.is-quick .tt-cine-pct { animation-duration: .4s; animation-delay: 0s; }
@media (prefers-reduced-motion: reduce) {
  .tt-cine-belt { animation: none; }
  .tt-cine-mark, .tt-cine-brand, .tt-cine-title, .tt-cine-sub, .tt-cine-bar, .tt-cine-pct { animation: none; }
  .tt-cine, .tt-cine-layer { transition-duration: .2s; transition-delay: 0s; }
}


/* ================= closing call-to-action: the two buttons (was: second one wrapped under the first, offset and touching) ================= */
.tg-cta-apps { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
.tg-cta-apps .tg-btn { margin: 0 !important; }
@media (max-width: 767.98px) {
  .tg-cta-apps { margin-right: 29px; }
  .tg-cta-apps .tg-btn { flex: 1 1 100%; text-align: center; }
}

/* ================= homepage offer banner: the picture kept its height only through the play button's padding ================= */
.tg-banner-video-wrap { height: 100%; min-height: 280px; background-size: cover; background-position: center; position: relative; }
@media (max-width: 991.98px) { .tg-banner-video-wrap { min-height: 220px; } }
.tg-banner-video-wrap .tg-banner-video-inner { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 0; }
/* the play triangle's own SVG box is flat-edge-left / point-right, so centering its bounding box
   still reads as left-shifted — nudge right so the ink looks centred in the white circle. */
.tg-video-play span { display: inline-block; transform: translateX(2px); }
.tt-banner-credit { position: absolute; left: 14px; bottom: 10px; z-index: 2; font-size: 11.5px; letter-spacing: .02em; color: rgba(255, 255, 255, .92); text-shadow: 0 1px 3px rgba(0, 0, 0, .7); }
.tt-banner-credit a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
html[data-theme="dark"] .tt-banner-credit { filter: invert(1) hue-rotate(180deg); }

/* ================= uniform forms (enquiry forms, review form, offer popup, filters) =================
   One look for every control: same height, radius, border, focus ring and placeholder; selects drawn by us (the browser's own
   select changes shape between phone and desktop modes, which is what made a form "scatter" after resizing); the same 20px
   rhythm; a 2-column grid that becomes 1 column on phones, where a lone last field spans the row. */
.tt-form { --tt-fh: 48px; --tt-fgap: 20px; }
.tt-form .input, .tt-form .textarea, .tt-form select.input, .tt-promo-body .input, .tt-pf .input, .tt-pf select {
  display: block; width: 100%; min-width: 0; height: var(--tt-fh, 48px); padding: 0 16px; margin: 0;
  font: 400 15px/1.4 var(--tg-ff-body, inherit); color: var(--tg-common-black, #020615);
  background-color: #fff; border: 1px solid #d9dfe8; border-radius: 10px; box-shadow: none; outline: 0;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.tt-form .textarea, .tt-form textarea.input { height: auto; min-height: 140px; padding: 13px 16px; resize: vertical; line-height: 1.6; }
.tt-form .input::placeholder, .tt-form .textarea::placeholder, .tt-promo-body .input::placeholder, .tt-pf .input::placeholder { color: #8b94a5; opacity: 1; }
.tt-form .input:focus, .tt-form .textarea:focus, .tt-promo-body .input:focus, .tt-pf .input:focus, .tt-pf select:focus {
  border-color: var(--tg-theme-primary); box-shadow: 0 0 0 3px rgba(26, 120, 208, .16);
}
.tt-form select.input, .tt-pf select {
  -webkit-appearance: none; -moz-appearance: none; appearance: none; cursor: pointer; padding-right: 42px; text-overflow: ellipsis;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23697386' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 16px center; background-size: 14px;
}
.tt-form select.input:has(option[value=""]:checked) { color: #8b94a5; }
.tt-form select.input option { color: #020615; }
.tt-form .input[readonly] { cursor: pointer; }
.tt-form input[type=number] { -moz-appearance: textfield; }
.tt-form input[type=number]::-webkit-outer-spin-button, .tt-form input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

.tt-fgrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--tt-fgap, 20px); margin-bottom: var(--tt-fgap, 20px); }
.tt-fgrid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-bottom: 8px; }
.tt-f { min-width: 0; }
.tt-f--full { grid-column: 1 / -1; }
.tt-f--stack { margin-bottom: var(--tt-fgap, 20px); }
.tt-f .tt-input-label { margin-bottom: 7px; }
.tt-fset { border: 0; margin: 0 0 var(--tt-fgap, 20px); padding: 0; min-width: 0; }
.tt-fset > legend { float: none; width: auto; padding: 0; margin: 0 0 10px; }
.tt-form p, .tt-form label, .tt-form legend, .tt-form-note { text-transform: none; }
.tt-form-note { margin: 4px 0 0; font-size: 12.5px; line-height: 1.5; color: #6b7280; }
.tt-form-errors { list-style: none; margin: 0 0 var(--tt-fgap, 20px); padding: 12px 16px; border-radius: 10px; background: #fdecec; color: #a02020; font-size: 14px; }
.tt-form-errors li + li { margin-top: 4px; }
.tt-check { display: flex; align-items: center; gap: 10px; margin: 0 0 var(--tt-fgap, 20px); font-size: 14.5px; line-height: 1.5; cursor: pointer; }
.tt-check input { width: 18px; height: 18px; margin: 0; flex: none; }
.tt-rv-consent.tt-check { align-items: flex-start; font-size: 13.5px; }
.tt-rv-consent.tt-check input { margin-top: 3px; }
.tt-form-captcha { margin: 0 0 var(--tt-fgap, 20px); }
.tt-form-submit { min-width: 170px; }
.tt-form .tt-date-field { position: relative; }
.tt-form .tt-date-field .input { padding-right: 42px; }
.tt-form .tt-date-icon { right: 16px; }
@media (max-width: 575.98px) {
  .tt-fgrid { grid-template-columns: minmax(0, 1fr); }
  .tt-fgrid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
  .tt-fgrid--3 .tt-input-label { font-size: 10.5px; line-height: 1.3; }
  .tt-fgrid--3 .tt-input-label .muted { display: block; }
  .tt-form { --tt-fgap: 16px; }
  .tt-form-submit { width: 100%; }
}
/* the offer pop-up shares the controls */
.tt-promo-body .tg-btn { width: 100%; text-align: center; }

/* ================= packages page: filter panel under the booking bar (inc/packages-filters.php, assets/js/tt-filters.js) ================= */
.tt-pf-area { padding: 26px 0 0; position: relative; z-index: 2; }
.tt-pf-area ~ .tg-listing-grid-area { padding-top: 26px !important; }
.tt-pf { background: #fff; border: 1px solid #e4e8ee; border-radius: 16px; padding: 20px 22px 18px; box-shadow: 0 10px 30px rgba(15, 25, 45, .05); }
.tt-pf-grid { display: grid; grid-template-columns: minmax(200px, 1.35fr) minmax(140px, .8fr) minmax(150px, .85fr) minmax(300px, 1.7fr) auto; gap: 18px 20px; align-items: start; }
.tt-pf-cell { min-width: 0; }
.tt-pf-cell .tt-input-label { display: block; margin-bottom: 7px; }
.tt-pf-out { font-weight: 600; text-transform: none; letter-spacing: 0; color: var(--tg-theme-primary); margin-left: 2px; }
.tt-pf-searchbox { position: relative; }
.tt-pf-searchbox input { padding-right: 40px; }
.tt-pf-searchbox i { position: absolute; right: 15px; top: 50%; transform: translateY(-50%); color: #8b94a5; pointer-events: none; font-size: 14px; }
.tt-pf input[type=search]::-webkit-search-cancel-button { display: none; }
.tt-pf-price { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 10px; }
.tt-pf-price input { -moz-appearance: textfield; }
.tt-pf-price input::-webkit-outer-spin-button, .tt-pf-price input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.tt-pf-dash { color: #8b94a5; font-size: 13px; }
.tt-pf-range { position: relative; height: 22px; margin-top: 10px; }
.tt-pf-track { position: absolute; left: 10px; right: 10px; top: 9px; height: 4px; border-radius: 4px; background: #e3e8f0; }
.tt-pf-fill { position: absolute; top: 0; bottom: 0; border-radius: 4px; background: var(--tg-theme-primary); }
.tt-pf-r { position: absolute; left: 0; top: 0; width: 100%; height: 22px; margin: 0; padding: 0; background: none; pointer-events: none; -webkit-appearance: none; appearance: none; outline: 0; }
.tt-pf-r::-webkit-slider-runnable-track { -webkit-appearance: none; background: transparent; height: 22px; }
.tt-pf-r::-moz-range-track { background: transparent; height: 22px; }
.tt-pf-r::-webkit-slider-thumb { -webkit-appearance: none; pointer-events: auto; width: 20px; height: 20px; margin-top: 1px; border-radius: 50%; background: #fff; border: 2px solid var(--tg-theme-primary); box-shadow: 0 1px 4px rgba(0, 0, 0, .22); cursor: grab; }
.tt-pf-r::-moz-range-thumb { pointer-events: auto; width: 16px; height: 16px; border-radius: 50%; background: #fff; border: 2px solid var(--tg-theme-primary); box-shadow: 0 1px 4px rgba(0, 0, 0, .22); cursor: grab; }
.tt-pf-r:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 4px rgba(26, 120, 208, .25); }
.tt-pf-r:active::-webkit-slider-thumb { cursor: grabbing; }
.tt-pf-actions { min-width: 0; }
.tt-pf-actions .tt-input-label { display: block; margin-bottom: 7px; }
.tt-pf-actions-row { display: flex; align-items: center; gap: 16px; }
.tt-pf-apply { white-space: nowrap; height: var(--tt-fh, 48px); display: inline-flex; align-items: center; }
.tt-pf-reset, .tt-pf-clear { font-size: 13.5px; color: #6b7280; text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
.tt-pf-reset:hover, .tt-pf-clear:hover { color: var(--tg-theme-primary); }
.tt-pf-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 16px 0 0; }
.tt-pf-chips-l { font-size: 12.5px; color: #6b7280; margin-right: 2px; }
.tt-pf-chip { display: inline-flex; align-items: center; gap: 8px; padding: 6px 8px 6px 14px; border-radius: 999px; background: rgba(26, 120, 208, .10); color: var(--tg-theme-primary); font-size: 13px; font-weight: 600; text-decoration: none; transition: background .15s ease; }
.tt-pf-chip span[aria-hidden] { width: 18px; height: 18px; border-radius: 50%; background: rgba(26, 120, 208, .18); display: inline-flex; align-items: center; justify-content: center; font-size: 13px; line-height: 1; transition: background .15s ease, color .15s ease; }
.tt-pf-chip:hover { background: rgba(26, 120, 208, .16); }
.tt-pf-chip:hover span[aria-hidden] { background: var(--tg-theme-primary); color: #fff; }
.tt-pf-clear { margin-left: 4px; }

/* the two dropdown toggles exist only on phones and tablets */
.tt-pf-toggles { display: none; }
@media (max-width: 991.98px) {
  .tt-pf-toggles { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 14px 0 6px; }
  .tt-pf-toggle { display: flex; align-items: center; gap: 8px; height: 46px; padding: 0 14px; border: 1px solid #d9dfe8; border-radius: 12px; background: #fff; color: var(--tg-common-black, #020615); font-weight: 600; font-size: 14.5px; cursor: pointer; text-align: left; }
  .tt-pf-toggle > span { flex: 1; }
  .tt-pf-toggle .tt-pf-chev { flex: none; opacity: .7; transition: transform .2s ease; }
  .tt-pf-toggle.is-on { border-color: var(--tg-theme-primary); color: var(--tg-theme-primary); box-shadow: 0 0 0 3px rgba(26, 120, 208, .12); }
  .tt-pf-toggle.is-on .tt-pf-chev { transform: rotate(180deg); opacity: 1; }
  .tt-pf-count { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 20px; background: var(--tg-theme-primary); color: #fff; font-size: 11.5px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; }
  [data-tt-pf-panel]:not(.is-open) { display: none; }
  .tt-pf-area { padding-top: 12px; }
  .tt-pf-area:has(.tt-pf:not(.is-open)) { padding-top: 0; }
  .tt-pf { padding: 16px; border-radius: 14px; box-shadow: none; }
  .tt-pf-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
  .tt-pf-cell--q, .tt-pf-cell--price, .tt-pf-actions { grid-column: 1 / -1; }
  .tt-pf-actions .tt-input-label { display: none; }
  .tt-pf-apply { flex: 1; justify-content: center; }
  .tt-pf-area ~ .tg-listing-grid-area { padding-top: 16px !important; }
}
@media (max-width: 420px) { .tt-pf-toggle { padding: 0 10px; font-size: 13.5px; gap: 6px; } .tt-pf-toggle > svg:first-child { display: none; } }
@media (max-width: 991.98px) { .tg-cta-content { margin-right: 29px; } }


/* ================= About page: the round turning badge (tt_ring_badge() in inc/content.php) ================= */
.tt-ring { display: block; width: 141px; height: 141px; max-width: 100%; }
.tt-ring .tt-ring-disc { fill: #fff; stroke: #e3e6ec; stroke-width: 1; }
.tt-ring .tt-ring-txt text { font: 600 var(--tt-ring-fs, 10.5px)/1 var(--tg-ff-body, "Poppins", sans-serif); fill: #1f2430; text-anchor: middle; letter-spacing: 0; }
@media (prefers-reduced-motion: reduce) { .tt-ring.rotate-infinite-2 { animation: none; } }
/* dark mode: the ring is inline SVG so the page filter inverts it once (black ring, light text); the compass image would be re-inverted back to dark on a dark page, so let it invert too */
html[data-theme="dark"] .tg-chose-3-rounded .tg-chose-3-star { filter: none; }


/* ================= packages page: "N packages" + Sort share one row at every width =================
   The theme's own columns (col-lg-5/col-md-5 and col-lg-7/col-md-7) only get a width rule at their own
   breakpoint, so below 768px they fall back to content-sized flex items and stack — and the theme also
   right-aligns the count text on phones, so it and "Sort by" both drifted to the right with a dead gap on
   the left. Force the pair onto one row, count on the left as a proper pill (matching the Sort dropdown's
   own size), Sort/view-icons on the right, at any width. */
.tg-listing-box-filter .row.align-items-center { flex-wrap: nowrap; gap: 10px; }
.tg-listing-box-filter .row.align-items-center > .col-lg-5.col-md-5.mb-15,
.tg-listing-box-filter .row.align-items-center > .col-lg-7.col-md-7.mb-15 {
  width: auto !important; max-width: none !important; margin-bottom: 0 !important;
}
/* the count is informational text: it shrinks and truncates first. Sort is a live control: it never shrinks or wraps. */
.tg-listing-box-filter .row.align-items-center > .col-lg-5.col-md-5.mb-15 { flex: 1 1 auto !important; min-width: 0; }
.tg-listing-box-filter .row.align-items-center > .col-lg-7.col-md-7.mb-15 { flex: 0 0 auto !important; }
.tg-listing-box-view-type { flex-wrap: nowrap; }
.tg-listing-sort { white-space: nowrap; flex: none; }
.tg-listing-select-price { flex: none; }
.tg-listing-box-number-found { text-align: left !important; min-width: 0; overflow: hidden; }
.tg-listing-box-number-found span {
  display: inline-flex; align-items: center; max-width: 100%; box-sizing: border-box; height: 36px; padding: 0 16px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  border-radius: 6px; background: #f3f3f4; color: var(--tg-common-black); font-weight: 500; font-size: 14px;
}
@media (max-width: 480px) {
  .tg-listing-box-number-found span { height: 34px; padding: 0 12px; font-size: 12.5px; }
  .tg-listing-select-price .nice-select { height: 34px !important; line-height: 32px !important; }
  .tg-listing-sort span { font-size: 13px; }
}
