/* =====================================================================
   Beyond Journey - site header
   ---------------------------------------------------------------------
   One sticky header for every page, based on the flights.html markup.

   WHY STICKY AND NOT FIXED
   The previous behaviour came from two places that fought each other:
   custom-nav.js added `fixed-top` past 70px of scroll (which pulls the
   header out of flow and makes the page jump up by its height), and a
   second scroll handler added a `.hide` class on scroll-down, so the
   header disappeared entirely.

   `position: sticky` fixes both at once. The header stays in normal flow,
   so nothing below it ever shifts - no jump, no spacer to maintain, no
   flicker - and it pins to the top on its own without a scroll listener.

   THE NEGATIVE TOP
   The header is two rows: a contact strip and the navigation. Pinning all
   165px of it would eat a fifth of a laptop viewport. Sticking it at a
   negative offset equal to the strip's height lets the strip scroll away
   while the navigation row pins. --bjh-strip is measured at runtime by
   bj-header.js, because the strip wraps to a taller two-line layout in
   the 992-1100px range and a hard-coded value would be wrong there.

   Branding, fonts and logo are untouched; this file only positions and
   polishes what was already there.
   ===================================================================== */

:root {
  --bjh-strip: 65px;          /* overwritten at runtime by bj-header.js */
  --bjh-navy: #17233e;
  --bjh-orange: #f5761a;
  --bjh-ease: cubic-bezier(.4, 0, .2, 1);
}

/* ---------------------------------------------------------------
   Sticky shell
   --------------------------------------------------------------- */
.main_header_area {
  position: sticky;
  top: calc(-1 * var(--bjh-strip));
  z-index: 1000;              /* above page content, below modals (2000) */
  background: #fff;
  transition: box-shadow .28s var(--bjh-ease);
  /* isolate so page transforms cannot create a new containing block that
     would break the sticky positioning */
  will-change: box-shadow;
}

/* Soft shadow only once the page has actually scrolled. */
.main_header_area.is-scrolled { box-shadow: 0 4px 18px -6px rgba(23, 35, 62, .22); }

/* The nav row must be opaque or page content shows through once pinned. */
.main_header_area .header_menu { background: #fff; }

/* Kill the old behaviour wherever it is still applied.
   custom-nav.js has been cleaned, but these guards mean a cached copy of
   the old script cannot resurrect the hide-on-scroll or the jump. */
.main_header_area .header_menu.hide,
.main_header_area .header_menu.slideInDown,
.main_header_area .header_menu.animated { transform: none !important; animation: none !important; }
.main_header_area .header_menu.fixed-top {
  position: static !important;
  top: auto !important;
  z-index: auto !important;
}

/* Some templates park a stray sticky helper on the body. */
.tab-sticky { top: auto !important; }

/* ---------------------------------------------------------------
   Contact strip
   ---------------------------------------------------------------
   z-index has to beat .header_menu below it. Both are children of the
   same stacking context, and the nav row comes later in the DOM, so at
   equal z-index it painted on top and swallowed the open mega panels. */
.main_header_area .header-content { position: relative; z-index: 3; }
.main_header_area .header_menu { position: relative; z-index: 2; }

/* ---------------------------------------------------------------
   Navigation
   --------------------------------------------------------------- */
.main_header_area .navbar-flex { gap: 20px; }

/* The header logo is an <img> inside a .bj-logo crop box (css/bj-logo.css).
   These selectors are more specific than .bj-logo img, so without the
   :not() they would reset its width and height and undo the crop. They
   stay for any plain bitmap logo that is not cropped. */
.main_header_area .navbar-brand:not(.bj-logo) img {
  max-height: 46px;
  width: auto;
  display: block;
}

.main_header_area .icon-nav {
  display: flex;
  align-items: center;
  gap: 4px;
  margin: 0;
  padding: 0;
  list-style: none;
  flex-wrap: nowrap;          /* laptop widths must not wrap the menu */
}
.main_header_area .icon-nav > li { position: relative; }

.main_header_area .icon-nav > li > a {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  border-radius: 999px;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.2;
  color: var(--bjh-navy);
  text-decoration: none;
  white-space: nowrap;
  transition: color .22s var(--bjh-ease), background-color .22s var(--bjh-ease);
}
.main_header_area .icon-nav > li > a i { font-size: 14px; color: inherit; transition: color .22s var(--bjh-ease); }

.main_header_area .icon-nav > li > a:hover {
  color: var(--bjh-orange);
  background: rgba(245, 118, 26, .08);
}
.main_header_area .icon-nav > li > a:hover i { color: var(--bjh-orange); }

.main_header_area .icon-nav > li > a:focus-visible {
  outline: 3px solid rgba(245, 118, 26, .45);
  outline-offset: 2px;
}

/* --- active page ------------------------------------------------
   One treatment, applied by bj-header.js from the current filename, so
   every page highlights its own item instead of inheriting whatever the
   source page happened to have marked.

   NO BOX, NO BAR. Two earlier versions drew a shape around the active
   item - a 2px underline, then a soft orange chip - and both were wrong
   here. The chip sat a few inches from the SPECIAL OFFERS button, which
   is itself an orange pill: two orange pills in one strip read as a
   repeat rather than as a hierarchy, and turned the masthead into an app
   toolbar. So the state is type only, and half the work is done by
   pushing the other three back rather than by shouting with this one:
   inactive items sit at a muted slate, the active one is orange and
   bold, and its icon takes the accent too. SPECIAL OFFERS is left as the
   only orange object up there, which is right - it is the only button.

   SPECIFICITY, and why these selectors are so long: style.css:2416 sets
   font-weight, padding and background on

       .header_menu .navbar.navbar-default .nav.navbar-nav li a

   at (0,5,2), and style.css:2442 sets colour on `li.active a` at (0,6,2).
   Everything this file wrote against `.icon-nav` is (0,2,2) or (0,3,2),
   so it lost the cascade no matter how late the file loads - the active
   item rendered at weight 400 in navy, identical to its neighbours. The
   rules below carry the template's own chain so they win on specificity
   instead of scattering !important through the file.

   WIDTH: none of this changes a horizontal metric. These items are
   inline-blocks that wrap (style.css sets `display: inline-block` on the
   list and its items at (0,5,0), so `.icon-nav`'s flex rules never
   applied), and at ~1150px the row has about 28px of slack. An earlier
   version added 14px of side padding for the pill and pushed the header
   onto two lines between roughly 1100 and 1250px; another lifted every
   item to weight 600 and cost 20px. Only the active item changes weight,
   and colour is free. */
.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li > a {
  color: var(--bjh-muted, #5a6377);
  /* the template's 400 read as thin next to the buttons, 600 too heavy;
     500 for every item, the active one goes to 700 below */
  font-weight: 500;
}

.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li:hover > a {
  color: var(--bjh-navy);
}

.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li.active > a,
.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li > a[aria-current="page"] {
  color: var(--bjh-orange);
  font-weight: 700;
}

.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li.active > a i,
.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li > a[aria-current="page"] i {
  color: var(--bjh-orange);
}

/* Nothing is drawn on ::after any more. style.css:2438 already sets
   `display: none` there to kill the template's own caret, and that is now
   exactly what this header wants - so the rule is simply gone rather than
   overridden. */

/* --- "you are here" pop -----------------------------------------
   bj-header.js adds .bjh-pop only on a page that belongs to the item's
   own section. index.html gets the highlight WITHOUT it: there the mark
   is a signpost to the main line of business, not a claim about where
   the visitor currently is, and a nav item announcing itself on the home
   page would be noise.

   Two parts. The label lifts and settles once on arrival, and then the
   ICON alone keeps breathing for as long as the page is open.

   The breathing is deliberately on the icon and not on the text. A label
   that pulses is a label you cannot comfortably read or click at - the
   target keeps moving and the eye keeps being pulled back to it. The
   icon carries the same "you are here" signal, sits beside the word
   rather than under the reader's eye, and can move without disturbing
   anything: it is 14px, it is already the accent colour, and a transform
   never reflows the row.

   It is also slow (2.6s) and shallow (a sixth bigger at the top of the
   breath, never fully fading). Fast or deep would read as an alert, and
   nothing here is an alert - it is a location marker.

   Anyone who has asked their system for less motion gets neither part;
   see the prefers-reduced-motion block below. */
@keyframes bjh-pop {
  0%   { transform: translateY(0)      scale(1);    }
  30%  { transform: translateY(-2.5px) scale(1.06); }
  60%  { transform: translateY(0)      scale(.995); }
  100% { transform: translateY(0)      scale(1);    }
}

@keyframes bjh-breathe {
  0%, 100% { transform: scale(1);    opacity: 1;   }
  50%      { transform: scale(1.16); opacity: .62; }
}

/* Transform only on the label. An earlier take also tweened `color` from
   the muted slate up to orange, and the risk is not theoretical: any
   stall leaves the label parked at a muddy brown halfway between the
   two, which is exactly what it did under test. A transform that stalls
   leaves the text the right colour in the wrong place for a moment - a
   far cheaper failure. */
.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li.active.bjh-pop > a {
  animation: bjh-pop .62s cubic-bezier(.34, 1.4, .5, 1) .25s both;
}

/* `display: inline-block` is not decoration - transform does not apply to
   a non-replaced inline box, and the <i> is inline by default. Without it
   the breath silently does nothing until FontAwesome swaps the <i> for an
   <svg>, and then starts working, which is a horrible thing to debug. Both
   selectors for the same reason: the swap replaces the element. */
.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li.active.bjh-pop > a i,
.main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li.active.bjh-pop > a svg {
  display: inline-block;
  transform-origin: center;
  animation: bjh-breathe 2.6s ease-in-out .9s infinite;
}

@media (prefers-reduced-motion: reduce) {
  /* !important, because the rules this cancels had to be written at the
     template's own specificity to beat style.css - a plain override here
     would lose to them and the motion would play anyway. */
  .main_header_area .icon-nav > li.active.bjh-pop > a,
  .main_header_area .icon-nav > li.active.bjh-pop > a i,
  .main_header_area .icon-nav > li.active.bjh-pop > a svg {
    animation: none !important;
    transform: none !important;
    opacity: 1 !important;
  }
}

/* --- Special Offers button --------------------------------------
   It was navy on white at 15px with 14/24 padding: the same treatment as
   every other button on the site, and the largest thing in the header
   bar. Nothing about it said "offers".

   Now it is the one warm element up there - an orange pill with a soft
   sheen that crosses it every few seconds, the gift icon in its own
   translucent disc, and a dashed inner ring, which is the visual language
   of a coupon rather than of a nav link. Smaller, too: 12.5px and a
   tighter pill, so it reads as a flash of colour beside the phone number
   instead of competing with the logo.

   The template's own .nir-btn::before wipes orange across on hover, which
   would be invisible on an orange button - it is switched to a darker
   shade so the hover still registers.
   --------------------------------------------------------------- */
.main_header_area .register-login .nir-btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  white-space: nowrap;
  padding: 8px 15px 8px 9px;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: .01em;
  border-radius: 999px;
  background: linear-gradient(135deg, #f5761a 0%, #ec6a0c 55%, #d9600d 100%);
  color: #fff;
  box-shadow: 0 6px 16px -6px rgba(217, 96, 13, .65),
              inset 0 0 0 1px rgba(255, 255, 255, .18);
  overflow: hidden;
}

/* the coupon ring */
.main_header_area .register-login .nir-btn::after {
  content: "";
  position: absolute; inset: 3px;
  border: 1px dashed rgba(255, 255, 255, .34);
  border-radius: 999px;
  pointer-events: none;
}

/* The gift sits in its own disc, the way a stamp sits on a voucher.
   Styled on a wrapping SPAN, not on the <i>: FontAwesome's JS build swaps
   every <i class="fa"> for an <svg>, so a rule written against `i` stops
   matching the moment the icons load. */
.main_header_area .register-login .nir-btn .bjh-gift {
  display: grid; place-items: center;
  width: 21px; height: 21px; border-radius: 50%;
  background: rgba(255, 255, 255, .22);
  font-size: 10.5px;
}

/* hover: the template wipes #F5761A across from the left, which on an
   orange button is no change at all - deepen it instead */
.main_header_area .register-login .nir-btn::before { background: #b94f08; }
.main_header_area .register-login .nir-btn:hover {
  box-shadow: 0 8px 20px -6px rgba(185, 79, 8, .7),
              inset 0 0 0 1px rgba(255, 255, 255, .24);
}

/* a slow sheen, so the eye catches it once without anything jumping */
.main_header_area .register-login .nir-btn .bjh-shine {
  position: absolute; top: 0; bottom: 0; left: -60%;
  width: 45%; z-index: 2; pointer-events: none;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .38), transparent);
  animation: bjh-shine 4.5s ease-in-out infinite;
}
@keyframes bjh-shine {
  0%, 62% { left: -60%; }
  86%, 100% { left: 115%; }
}
@media (prefers-reduced-motion: reduce) {
  .main_header_area .register-login .nir-btn .bjh-shine { animation: none; opacity: 0; }
}

/* ---------------------------------------------------------------
   Laptop - tighten before anything wraps
   --------------------------------------------------------------- */
/* "Golden Journeys 60+" is the long item: below 1400px the type steps
   down a notch and the items sit closer, so the four stay on one line on
   a 1366 or 1280 laptop with their icons. The template's own chain (see
   the active-page note above) at (0,5,2) beats anything written against
   .icon-nav, so these carry it too. */
@media (max-width: 1399.98px) {
  .main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li > a {
    padding: 9px 6px; font-size: 13px; gap: 5px;
  }
  .main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li > a i,
  .main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li > a svg { font-size: 12px; }
  .main_header_area .icon-nav > li > a { padding: 9px 6px; font-size: 13px; gap: 5px; }
  .main_header_area .navbar-flex { gap: 12px; }
}
@media (max-width: 1199.98px) {
  .main_header_area .header_menu .navbar.navbar-default .nav.navbar-nav > li > a {
    padding: 8px 5px; font-size: 12.5px; gap: 4px;
  }
}

@media (max-width: 1199.98px) {
  .main_header_area .navbar-flex { gap: 14px; }
  .main_header_area .register-login .nir-btn { font-size: 12px; padding-left: 8px; padding-right: 13px; }
  .main_header_area .navbar-brand:not(.bj-logo) img { max-height: 42px; }
}

@media (max-width: 1049.98px) {
  /* Below this the four items plus the button no longer fit comfortably;
     drop the icons rather than let the row wrap. */
  .main_header_area .icon-nav > li > a i,
  .main_header_area .icon-nav > li > a svg { display: none; }
  .main_header_area .icon-nav > li > a { padding: 10px; font-size: 14px; }
}

/* ---------------------------------------------------------------
   Tablet / mobile - slicknav takes over
   --------------------------------------------------------------- */
@media (max-width: 991.98px) {
  /* Strip is hidden at this width, so the header pins flush to the top. */
  :root { --bjh-strip: 0px; }

  .main_header_area .navbar-collapse1 { display: none !important; }
  .main_header_area .navbar-flex { gap: 12px; padding-top: 12px !important; padding-bottom: 12px !important; }
  .main_header_area .navbar-brand:not(.bj-logo) img { max-height: 38px; }

  #slicknav-mobile { order: 3; }

  .slicknav_menu { background: transparent; padding: 0; }
  /* ---- the hamburger ---------------------------------------------
     It was invisible on every page and every screen below 1100px, and
     the cause is a version mismatch nobody would guess at:

       plugin.css:3960  .slicknav_menu .slicknav_icon { display: none }
       plugin.css:3790  .slicknav_btn.slicknav_collapsed:before {
                          font-family: 'FontAwesome'; content: "\f0c9" }

     The plugin hides the three real bars it ships and draws the icon as a
     glyph instead - in `FontAwesome`, which is the Font Awesome 4 family
     name. This site loads Font Awesome 5 (js/fontawesome.min.js), whose
     family is "Font Awesome 5 Free". The name never matches, so the glyph
     never resolves. Add the plugin's own `border: none` on the open and
     collapsed states and an empty .slicknav_menutxt, and what is left is
     a 40x40 box with nothing in it at all: no icon, no border, no label.
     The menu was there the whole time and there was no way to see it.

     So: drop the broken glyph, put the real bars back, and give the
     button a visible box. Both state classes are named because the
     plugin's `border: none` is set on them at (0,2,0). */
  .slicknav_menu .slicknav_btn::before,
  .slicknav_btn.slicknav_open::before,
  .slicknav_btn.slicknav_collapsed::before { content: none !important; }

  .slicknav_menu .slicknav_icon {
    display: block !important;
    float: none;
    width: 20px;
    margin: 0;
  }

  .slicknav_menu .slicknav_menutxt { display: none !important; }

  .slicknav_menu .slicknav_btn,
  .slicknav_btn.slicknav_open,
  .slicknav_btn.slicknav_collapsed {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    float: none;
    width: 42px;
    height: 42px;
    padding: 0 !important;
    margin: 0;
    background: #fff;
    border: 1px solid rgba(23, 35, 62, .18) !important;
    border-radius: 11px;
    transition: border-color .22s var(--bjh-ease), background-color .22s var(--bjh-ease);
  }

  .slicknav_menu .slicknav_btn:hover,
  .slicknav_btn.slicknav_open { border-color: var(--bjh-orange) !important; background: rgba(245, 118, 26, .07); }
  .slicknav_icon-bar {
    display: block;
    width: 20px;
    height: 2px;
    border-radius: 2px;
    background: var(--bjh-navy) !important;
    box-shadow: none !important;
    transition: background-color .22s var(--bjh-ease);
  }
  .slicknav_icon-bar + .slicknav_icon-bar { margin-top: 4px; }

  /* Slide-out panel */
  .slicknav_nav {
    position: absolute;
    left: 0;
    right: 0;
    top: 100%;
    background: #fff;
    border-top: 1px solid #e7e6e1;
    box-shadow: 0 18px 36px -14px rgba(23, 35, 62, .3);
    padding: 8px 0;
    margin: 0;
    max-height: calc(100vh - 88px);
    overflow-y: auto;
  }
  .slicknav_nav li { border-bottom: 1px solid #f2f1ec; }
  .slicknav_nav li:last-child { border-bottom: 0; }
  .slicknav_nav a {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 20px;
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bjh-navy);
    border-radius: 0;
    min-height: 48px;            /* comfortable touch target */
    transition: background-color .2s var(--bjh-ease), color .2s var(--bjh-ease);
  }
  /* plugin.css:3877 sets `color: #B6B3C4 !important` on every link in
     this panel, so the orange has to be !important too or the active row
     is marked by its background alone - which is what was happening: the
     tint applied, the text stayed grey. */
  .slicknav_nav a:hover,
  .slicknav_nav a:focus { background: rgba(245, 118, 26, .08); color: var(--bjh-orange) !important; }
  .slicknav_nav .slicknav_row:hover { background: transparent; }

  /* Same idea as the desktop bar: type, not a box. On this dark panel
     orange at 700 against the grey of every other row is already the
     loudest thing in the list, and a tinted band behind it only made the
     row look like a pressed button. */
  .slicknav_nav li.active > a {
    color: var(--bjh-orange) !important;
    font-weight: 700;
  }

  /* No rule for ::after here. In a stacked panel each row already runs
     the full width, so the tint alone reads as the selected row - a bar
     under it would just be a second line in a list of lines. */

  /* ---- the icons -------------------------------------------------
     The four rows are cloned from the desktop nav, which carries an
     icon in each. slicknav copies them, but nothing sized them, so they
     rendered at whatever the icon font felt like. Both selectors,
     because fontawesome.min.js turns each <i> into an <svg>. */
  .slicknav_nav a i,
  .slicknav_nav a svg {
    flex: 0 0 30px;
    width: 30px;
    height: 30px;
    display: grid;
    place-items: center;
    padding: 8px;
    box-sizing: border-box;
    border-radius: 9px;
    background: rgba(245, 118, 26, .1);
    color: var(--bjh-orange);
    fill: currentColor;
    font-size: 13px;
  }

  .slicknav_nav li.active > a i,
  .slicknav_nav li.active > a svg { background: var(--bjh-orange); color: #fff; }

  /* A chevron on each row, so a list of four destinations reads as four
     ways onward rather than as four labels. */
  .slicknav_nav > li > a::after {
    content: "";
    margin-left: auto;
    width: 7px;
    height: 7px;
    border-right: 2px solid #c3c8d2;
    border-bottom: 2px solid #c3c8d2;
    transform: rotate(-45deg);
    transition: border-color .2s var(--bjh-ease), transform .2s var(--bjh-ease);
  }

  .slicknav_nav > li > a:hover::after,
  .slicknav_nav > li.active > a::after { border-color: var(--bjh-orange); }

  /* Call and WhatsApp, pinned to the foot of the panel. On a phone these
     are the two things someone actually wants from a travel company, and
     they were only reachable as small icons in the header bar. */
  .slicknav_nav .bjh-m-cta {
    display: flex;
    gap: 10px;
    padding: 12px 16px 6px;
    border-bottom: 0 !important;
  }

  .slicknav_nav .bjh-m-cta a {
    flex: 1;
    justify-content: center;
    gap: 8px;
    min-height: 44px;
    padding: 0 12px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 700;
  }

  .slicknav_nav .bjh-m-cta a::after { display: none; }

  .slicknav_nav .bjh-m-cta__call {
    background: var(--bjh-navy);
    color: #fff !important;
  }

  .slicknav_nav .bjh-m-cta__wa {
    background: #25d366;
    color: #fff !important;
  }

  .slicknav_nav .bjh-m-cta a i,
  .slicknav_nav .bjh-m-cta a svg {
    flex: 0 0 auto;
    width: 15px;
    height: 15px;
    padding: 0;
    border-radius: 0;
    background: none;
    color: inherit;
    font-size: 14px;
  }

  /* The panel is positioned against the nav row. */
  .main_header_area .header_menu { position: relative; }
}

@media (max-width: 575.98px) {
  .main_header_area .register-login .nir-btn {
    font-size: 11.5px;
    padding: 7px 12px 7px 8px;
  }
  .main_header_area .register-login .nir-btn span { display: none; }
  .main_header_area .navbar-brand:not(.bj-logo) img { max-height: 34px; }
}

@media (prefers-reduced-motion: reduce) {
  .main_header_area,
  .main_header_area .icon-nav > li > a,
  .slicknav_btn, .slicknav_nav a { transition: none !important; }
  .main_header_area .header_menu { animation: none !important; }
}

/* =====================================================================
   Top-strip mega menus
   ---------------------------------------------------------------------
   The five programme entries in the navy strip (BJ MATE, BJ Desk, BJ
   Royale, Explore Bharat, Join BJPro) open a rich panel on hover, the
   way MakeMyTrip's "My Business" / "MyPartner" entries do.

   Hover alone is not enough to be usable:
     - keyboard users get the same panel on focus, and Escape closes it
     - touch users get it on tap (the first tap opens instead of
       following the link)
     - a short close delay lets the pointer travel from the trigger down
       into the panel without it vanishing on the way
   That behaviour lives in js/bj-header.js; this file is the styling.
   ===================================================================== */

.bjh-mega { position: relative; }

/* --- trigger ---------------------------------------------------- */
.bjh-mega__trigger {
  display: block;
  width: 100%;
  padding: 4px 22px 4px 0;
  background: none;
  border: 0;
  text-align: left;
  font-family: inherit;
  color: #fff;
  cursor: pointer;
  line-height: 1.35;
  position: relative;
  border-radius: 6px;
  transition: opacity .2s var(--bjh-ease);
}
.bjh-mega__trigger:hover { opacity: .92; }
.bjh-mega__trigger:focus-visible {
  outline: 2px solid var(--bjh-orange);
  outline-offset: 3px;
}
.bjh-mega__label {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 13px;
  font-weight: 700;
  white-space: nowrap;
}
.bjh-mega__label i { font-size: 12px; }
.bjh-mega__sub {
  display: block;
  font-size: 12px;
  opacity: .82;
  white-space: nowrap;
}
.bjh-mega__caret {
  position: absolute;
  right: 4px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 11px;
  opacity: .7;
  transition: transform .26s var(--bjh-ease), opacity .2s var(--bjh-ease);
}
.bjh-mega.is-open .bjh-mega__caret { transform: translateY(-50%) rotate(180deg) !important; opacity: 1; }

/* --- panel ------------------------------------------------------- */
.bjh-mega__panel {
  position: absolute;
  top: calc(100% + 14px);
  left: -14px;
  z-index: 1200;
  width: 340px;
  background: #fff;
  border-radius: 16px;
  box-shadow: 0 12px 28px -12px rgba(23, 35, 62, .28),
              0 32px 64px -24px rgba(23, 35, 62, .40);
  padding: 8px;
  /* Hidden with display rather than opacity/visibility. On this template
     an opacity/visibility default could not be overridden even from an
     inline style, so the panel never appeared; display toggles cleanly.
     The fade below is layered on top once the panel is displayed. */
  display: none;
}

@keyframes bjhMegaIn {
  from { opacity: 0; transform: translateY(-8px); }
  to   { opacity: 1; transform: none; }
}
/* The fade runs only once the panel is actually shown. Declaring the
   animation on the base rule left it filling its `from` keyframe (opacity
   0) while the panel was display:none, so the panel stayed invisible even
   after being displayed. */
.bjh-mega.is-open > .bjh-mega__panel {
  display: block;
  /* No fill-mode: the panel's resting state must be fully visible. With
     `both` the animation filled its `from` keyframe and pinned opacity to
     0 whenever the animation had not advanced. */
  animation: bjhMegaIn .2s var(--bjh-ease);
}

/* Keeps the pointer "inside" the menu while it crosses the 14px gap
   between the trigger and the panel, so the panel does not flicker. */
.bjh-mega__panel::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -16px;
  height: 16px;
}

/* Little arrow pointing back at the trigger. */
.bjh-mega__panel::after {
  content: "";
  position: absolute;
  top: -6px;
  left: 30px;
  width: 12px;
  height: 12px;
  background: #fff;
  transform: rotate(45deg);
  border-radius: 2px;
}

/* Panels near the right edge open leftwards instead of overflowing. */
.bjh-mega--right .bjh-mega__panel { left: auto; right: -14px; }
.bjh-mega--right .bjh-mega__panel::after { left: auto; right: 30px; }

/* --- panel head --------------------------------------------------- */
.bjh-mega__head {
  padding: 14px 14px 12px;
  border-bottom: 1px solid #f0efea;
  margin-bottom: 6px;
}
.bjh-mega__head strong {
  display: block;
  font-size: 14.5px;
  font-weight: 700;
  color: var(--bjh-navy);
  margin-bottom: 3px;
}
.bjh-mega__head span {
  display: block;
  font-size: 12.5px;
  line-height: 1.55;
  color: #56607a;
}

/* --- rows ---------------------------------------------------------- */
.bjh-mega__item {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 11px 14px;
  border-radius: 10px;
  text-decoration: none;
  color: var(--bjh-navy);
  transition: background-color .18s var(--bjh-ease);
}
.bjh-mega__item:hover,
.bjh-mega__item:focus-visible {
  background: rgba(245, 118, 26, .08);
  color: var(--bjh-navy);
  outline: none;
}
.bjh-mega__item:focus-visible { box-shadow: inset 0 0 0 2px rgba(245, 118, 26, .5); }

.bjh-mega__ico {
  width: 34px;
  height: 34px;
  flex: none;
  display: grid;
  place-items: center;
  border-radius: 9px;
  background: #fff6ee;
  color: var(--bjh-orange);
  font-size: 14px;
}
.bjh-mega__txt strong {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.35;
  margin-bottom: 2px;
}
.bjh-mega__txt span {
  display: block;
  font-size: 12px;
  line-height: 1.5;
  color: #56607a;
}

/* --- footer CTA ----------------------------------------------------- */
.bjh-mega__foot {
  margin-top: 6px;
  padding: 12px 14px;
  border-top: 1px solid #f0efea;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.bjh-mega__foot span { font-size: 12px; color: #56607a; }
.bjh-mega__cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--bjh-orange);
  text-decoration: none;
  white-space: nowrap;
}
.bjh-mega__cta:hover { color: #dd660f; text-decoration: underline; }

/* ---------------------------------------------------------------
   The strip is hidden below 992px, so the panels never reach mobile.
   Guard anyway in case the strip is ever shown at that size.
   --------------------------------------------------------------- */
@media (max-width: 991.98px) {
  .bjh-mega__panel { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .bjh-mega__panel,
  .bjh-mega__caret,
  .bjh-mega__item { transition: none !important; }
  .bjh-mega.is-open > .bjh-mega__panel { transform: none; }
}

/* ---------------------------------------------------------------
   Panel text colour
   ---------------------------------------------------------------
   style.css forces every span/strong/p/li inside .header-content to
   #fff !important so the navy strip reads white. The mega panels live
   inside that same container but sit on a white card, so their text
   inherited white-on-white and vanished. These re-assert the real
   colours; !important is required to beat the blanket rule.
   --------------------------------------------------------------- */
.main_header_area .header-content .bjh-mega__panel,
.main_header_area .header-content .bjh-mega__panel a,
.main_header_area .header-content .bjh-mega__panel p,
.main_header_area .header-content .bjh-mega__panel li,
.main_header_area .header-content .bjh-mega__head strong,
.main_header_area .header-content .bjh-mega__txt strong {
  color: var(--bjh-navy) !important;
}
.main_header_area .header-content .bjh-mega__head span,
.main_header_area .header-content .bjh-mega__txt span,
.main_header_area .header-content .bjh-mega__foot span {
  color: #56607a !important;
}
.main_header_area .header-content .bjh-mega__ico,
.main_header_area .header-content .bjh-mega__ico i,
.main_header_area .header-content .bjh-mega__cta,
.main_header_area .header-content .bjh-mega__cta i {
  color: var(--bjh-orange) !important;
}
.main_header_area .header-content .bjh-mega__item:hover,
.main_header_area .header-content .bjh-mega__item:hover strong {
  color: var(--bjh-navy) !important;
}

/* WhatsApp link beside the phone number in the top strip */
.main_header_area .bjh-wa { color: #fff; font-weight: 600; white-space: nowrap; }
.main_header_area .bjh-wa:hover { color: #25d366; }

/* =====================================================================
   Contact actions in the main header row
   ---------------------------------------------------------------------
   Call and WhatsApp belong beside the Special Offers button, not buried
   in the thin navy strip above - that strip is for the business lines
   (BJ Mate, BJ Desk), and a phone number there is easy to miss.
   ===================================================================== */
.main_header_area .register-login { gap: 14px; }

.main_header_area .bjh-call {
  display: inline-flex; align-items: center; gap: 9px;
  color: #17233e; white-space: nowrap;
}
.main_header_area .bjh-call i {
  display: grid; place-items: center;
  width: 32px; height: 32px; border-radius: 50%;
  background: #fdf4ec; color: #d9600d; font-size: 13px;
}
.main_header_area .bjh-call small {
  display: block; font-size: 10px; line-height: 1.2;
  letter-spacing: .06em; text-transform: uppercase; color: #8b93a5;
}
.main_header_area .bjh-call b {
  display: block; font-size: 13.5px; font-weight: 700; line-height: 1.25;
  font-variant-numeric: tabular-nums lining-nums;
}
.main_header_area .bjh-call:hover b { color: #d9600d; }

.main_header_area .bjh-wa {
  display: grid; place-items: center;
  width: 34px; height: 34px; border-radius: 50%;
  background: #25d366; color: #fff;
  transition: transform .18s ease, background .18s ease;
}
.main_header_area .bjh-wa:hover { background: #1eb658; color: #fff; transform: translateY(-1px); }

/* =====================================================================
   Spacing
   ---------------------------------------------------------------------
   The header opened with a 16px band above and below the logo row plus a
   loose navy strip, which pushed every page's real content down by about
   40px more than it needed. These trim the chrome without crowding it.
   ===================================================================== */
.main_header_area .header-content { padding-top: 2px; padding-bottom: 2px; }
.main_header_area .navbar-flex {
  padding-top: 10px !important;
  padding-bottom: 10px !important;
}

@media (max-width: 1199px) {
  .main_header_area .register-login { gap: 10px; }
  .main_header_area .bjh-call small { display: none; }
  .main_header_area .bjh-call b { font-size: 12.5px; }
}
@media (max-width: 991px) {
  /* the number itself goes; the icon still dials */
  .main_header_area .bjh-call span { display: none; }
  .main_header_area .navbar-flex { padding-top: 8px !important; padding-bottom: 8px !important; }
}
@media (max-width: 575px) {
  .main_header_area .bjh-call { display: none; }
  .main_header_area .bjh-wa { width: 30px; height: 30px; }
}

/* js/fontawesome.min.js swaps every <i class="fa ..."> for an <svg>, so a
   selector written against `i` stops matching once the page has run. The
   icon therefore sits in a span of its own, which nothing rewrites. */
.main_header_area .bjh-call__ico {
  display: grid; place-items: center; flex: 0 0 auto;
  width: 32px; height: 32px; border-radius: 50%;
  background: #fdf4ec; color: #d9600d; font-size: 13px;
}
.main_header_area .bjh-call__ico svg,
.main_header_area .bjh-call__ico i { color: #d9600d; width: 13px; height: 13px; }
.main_header_area .bjh-call__txt small {
  display: block; font-size: 10px; line-height: 1.2;
  letter-spacing: .06em; text-transform: uppercase; color: #8b93a5;
}
.main_header_area .bjh-call__txt b {
  display: block; font-size: 13.5px; font-weight: 700; line-height: 1.25;
  color: #17233e; font-variant-numeric: tabular-nums lining-nums;
}
.main_header_area .bjh-call:hover .bjh-call__txt b { color: #d9600d; }
.main_header_area .bjh-wa svg { width: 15px; height: 15px; }

/* =====================================================================
   The header actions on phones and tablets
   ---------------------------------------------------------------------
   style.css:3094 hides .register-login outright below 1100px:

       @media (max-width: 1100px) { .register-login { display: none !important } }

   That takes the phone number, WhatsApp and Special Offers off every
   screen narrower than a laptop. On a site whose only conversion is a
   phone call, and whose visitors are mostly holding a phone, that is the
   most expensive line of CSS on the page.

   They come back here, compact: the "CALL US / +91 …" block collapses to
   a single dialling icon, WhatsApp keeps its disc, and Special Offers
   keeps its coupon pill down to 480px where the row genuinely runs out
   of width. All three sit left of the hamburger.
   ===================================================================== */
@media (max-width: 1100px) {
  .main_header_area .register-login {
    display: flex !important;
    align-items: center;
    gap: 8px !important;
    order: 2;
    margin-left: auto;
  }
  #slicknav-mobile { order: 3; margin-left: 4px; }

  /* The call block becomes one dialling icon.
     Two older rules above have to be undone for this to survive:
       @991  .main_header_area .bjh-call span { display: none }
             - an unqualified `span` rule, so it also caught .bjh-call__ico,
               which IS the icon. Same trap as three other places in this
               codebase; :not() would have avoided it.
       @575  .main_header_area .bjh-call { display: none }
             - hid the dialling button outright on exactly the devices that
               can dial. */
  .main_header_area .register-login .bjh-call {
    display: inline-flex !important;
    align-items: center;
    padding: 0;
    background: transparent;
    border: 0;
  }
  .main_header_area .register-login .bjh-call__txt { display: none !important; }
  .main_header_area .register-login .bjh-call__ico { display: grid !important; }
  .main_header_area .register-login .bjh-call__ico,
  .main_header_area .register-login .bjh-wa {
    width: 38px; height: 38px;
    display: grid; place-items: center;
    border-radius: 50%;
    font-size: 15px;
  }
  .main_header_area .register-login .bjh-wa svg { width: 17px; height: 17px; }
}

@media (max-width: 767px) {
  .main_header_area .register-login { gap: 6px !important; }
  .main_header_area .register-login .bjh-call__ico,
  .main_header_area .register-login .bjh-wa { width: 36px; height: 36px; font-size: 14px; }
  .main_header_area .register-login .nir-btn {
    font-size: 11px !important;
    padding: 6px 11px 6px 7px !important;
  }
  .main_header_area .register-login .nir-btn .bjh-gift { width: 19px; height: 19px; font-size: 9.5px; }
}

@media (max-width: 479px) {
  /* below this the row cannot hold four controls and the logo. Offers is
     the one that can wait - it is in the footer and in the menu; the two
     that dial a human are not. */
  .main_header_area .register-login .nir-btn { display: none !important; }
}

/* the strip's five sections, appended to the mobile menu by js/bj-header.js */
.slicknav_nav .bjh-m-head {
  padding: 14px 18px 6px;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--bjh-orange);
  border-bottom: 0 !important;
}
.slicknav_nav .bjh-m-extra > a {
  font-size: 13.5px;
  color: var(--bjh-navy);
}

/* ---------------------------------------------------------------------
   The open mobile menu has to sit above the page
   ---------------------------------------------------------------------
   .slicknav_nav is absolutely positioned inside the header, and on
   package-listing.html the search dock sits directly beneath it. The panel
   was sliding open UNDER the search card - the same complaint as the blue
   strip on desktop, in a different place.

   The header already carries z-index:1000, but the slicknav wrapper was
   static, so the panel had no stacking of its own to lift it clear of a
   card that establishes one. Positioning the wrapper and the panel fixes
   it wherever the page happens to put a card under the header.
   --------------------------------------------------------------------- */
@media (max-width: 1100px) {
  /* NOT `position: relative` on the wrapper: .slicknav_nav is absolute with
     left:0;right:0, so positioning #slicknav-mobile makes it the containing
     block and the panel collapses to the width of the 38px hamburger. The
     panel is already positioned, so a z-index on it is enough. */
  .slicknav_nav { z-index: 1002; }
  .main_header_area { z-index: 1002; }
}

/* ---------------------------------------------------------------
   The utility strip above the header (BJ MATE, BJ Desk, BJ Royale,
   Explore Bharat, Join BJPro, phone and email) is hidden. The markup
   stays on every page - and the mega menus with it - so bringing the
   strip back is deleting this one rule.
   --------------------------------------------------------------- */
.main_header_area .header-content { display: none !important; }

/* ---------------------------------------------------------------
   Sections parked, not deleted. A section carrying data-bj-hidden is
   kept in the page but not shown; take the attribute off the <section>
   tag and it is back exactly as it was. Used on index.html for the
   services, hotels, flights, experiences and BJPro member blocks.
   --------------------------------------------------------------- */
[data-bj-hidden] { display: none !important; }


