/* ============================================================
   Homepage + rental-search topbar — column widths
   Both pages render the same `.st-banner-search-form.style_2` markup.
   The cloned Traveler theme leaves the three flex children
   (destination / date / search-button) with vague widths:
   - destination has no width set and shrinks to ~120px
   - date field gets a min-width: 32% which still leaves a gap
   - search button floats to the far right with margin-left: auto
   Net result: the destination column is cramped while a big
   empty gap sits between the date field and the button.
   Lock the widths so all three columns render identically on both
   pages — no flex magic, no gaps:
     - destination: 260px (roomy enough for "Bạn muốn đến đâu?")
     - date field: 320px (Nhận phòng / Trả phòng side-by-side)
     - button: auto, hugging the right edge
   ============================================================ */

/* ------------------------------------------------------------
   Global font override — mirror megaticket.vn (system font stack).
   Loaded last so it wins over the cloned theme CSS that pins
   'DM Sans' on headings / body copy. The variable `--mh-system-font`
   is declared in megahomestay-inline.css (:root). `!important` is
   required because some theme rules use `font-family: 'DM Sans', …`
   with the same selector specificity.
   ------------------------------------------------------------ */
html, body,
h1, h2, h3, h4, h5, h6,
p, span, a, li, button, input, select, textarea, label {
    font-family: var(--mh-system-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif) !important;
}

/* ============================================================
   MH HEADER — megaticket.vn style. Overlay mode (no spacer):
   - Fixed top, full width, z-50.
   - At rest: transparent + dark gradient hint behind, white text — sits
     on top of any hero image, mirrors megaticket.vn's home behaviour.
     The `bg-gradient-to-b from-black/30 via-black/10 to-transparent`
     utility class on the <header> softens white backgrounds enough that
     the white text stays readable even when there's no dark hero behind.
   - On scroll (`js-mh-header-stuck` toggled by mh-header.js): border,
     shadow and white bg fade in; text inverts from white → navy.
   - Mobile: same outer chrome; nav collapses into `#mh-mobile-nav`.
   ============================================================ */
.mh-header {
    --mh-header-h: 4rem; /* matches h-16 inner */
}

@media (min-width: 768px) {
    .mh-header { --mh-header-h: 5rem; } /* md:h-20 */
}

/* --- Nav links (desktop pill rows) — initial: white text, hover accent --- */
.mh-nav-link {
    display: inline-flex;
    align-items: center;
    border-radius: 9999px;
    padding: 0.5rem 1rem;
    color: #ffffff;
    font-size: 0.875rem;
    font-weight: 500;
    text-decoration: none;
    transition: color 0.2s ease, background-color 0.2s ease;
}
.mh-nav-link:hover { color: #ffffff; background-color: rgba(255, 255, 255, 0.14); }
.mh-nav-link__label {
    border-bottom: 2px solid transparent;
    padding-bottom: 2px;
    transition: border-color 0.2s ease;
}
.mh-nav-link:hover .mh-nav-link__label { border-bottom-color: #ffffff; }

/* --- CTA button (mirrors megaticket.vn "Đặt vé") — always filled white
       in overlay mode for max contrast against the dark gradient + hero --- */
.mh-nav-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-left: 0.75rem;
    height: 2.5rem;
    padding: 0 1.75rem;
    border-radius: 9999px;
    background-color: #ffffff;
    color: #1A2B48;
    font-size: 0.875rem;
    font-weight: 600;
    text-decoration: none;
    box-shadow: 0 1px 2px rgba(15, 23, 23, 0.08);
    transition: background-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.05s ease;
}
.mh-nav-cta:hover { background-color: #f5f7fa; color: #ff5c02; }
.mh-nav-cta:active { transform: translateY(1px); }

/* --- Hamburger (mobile only, controlled by mh-header.js) --- */
.mh-hamburger { color: #ffffff; }
.mh-hamburger__bar {
    position: absolute;
    right: 0;
    display: block;
    height: 2px;    background-color: currentColor;
    transition: transform 0.2s ease, opacity 0.2s ease, width 0.2s ease, top 0.2s ease, bottom 0.2s ease;
}
.mh-hamburger__bar--top    { top: calc(50% - 7px); width: 100%; }
.mh-hamburger__bar--mid    { top: 50%;          width: 40%;  transform: translateY(-50%); opacity: 1; }
.mh-hamburger__bar--bot    { bottom: calc(50% - 7px); width: 70%; }

/* Open state: bars collapse into an X. */
.mh-hamburger[aria-expanded="true"] .mh-hamburger__bar--top {
    top: 50%;
    transform: translateY(-50%) rotate(45deg);
    width: 100%;
}
.mh-hamburger[aria-expanded="true"] .mh-hamburger__bar--mid { opacity: 0; width: 0; }
.mh-hamburger[aria-expanded="true"] .mh-hamburger__bar--bot {
    bottom: auto;
    top: 50%;
    transform: translateY(-50%) rotate(-45deg);
    width: 100%;
}

/* --- Mobile nav panel visibility (toggled by JS) ---
   !important để thắng các utility class Tailwind (invisible/opacity-0/-
   translate-y-2.5) compile trong app.css với cùng specificity. */
.mh-mobile-nav.is-open { visibility: visible !important; opacity: 1 !important; transform: translateY(0) !important; }

/* --- Mobile nav links --- */
.mh-mobile-link {
    display: block;
    padding: 0.75rem 1rem;
    border-radius: 0.75rem;
    color: #1A2B48;
    font-size: 1rem;
    font-weight: 500;
    text-decoration: none;
    transition: background-color 0.15s ease, color 0.15s ease;
}
.mh-mobile-link:hover { background-color: rgba(0, 0, 0, 0.04); color: #ff5c02; }
.mh-mobile-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-top: 0.5rem;
    width: 100%;
    padding: 0.75rem 1.5rem;
    border-radius: 9999px;
    background-color: #ff5c02;
    color: #fff;
    font-weight: 600;
    text-decoration: none;
}
.mh-mobile-cta:hover { background-color: #e75200; color: #fff; }

/* --- Google Translate widget --- */
/* Script đặt ở <head> của layouts/app.blade.php cho phép click vào item
   ngôn ngữ trong `.mh-lang-menu` dịch TOÀN BỘ trang. UI mặc định của
   Google (banner trên cùng + icon "Trò dịch" + dropdown chọn ngôn ngữ
   trong widget) bị ẩn hoàn toàn — chỉ giữ nút toggle trên header của
   ta. Selector dùng `.goog-*` (class Google tự gắn) + `#google_translate_element`
   (container rỗng ta dựng sẵn). */
.goog-te-banner-frame.skiptranslate,
.goog-te-balloon-frame,
#goog-gt-tt,
.goog-te-spinner-pos,
.goog-tooltip,
.goog-tooltip:hover,
.goog-text-highlight {
    display: none !important;
    visibility: hidden !important;
}
body { top: 0 !important; }
#google_translate_element,
.goog-te-gadget,
.goog-te-gadget-simple {
    display: none !important;
    visibility: hidden !important;
    height: 0 !important;
    width: 0 !important;
    position: absolute !important;
    left: -9999px !important;
}
/* Một số class Google dùng nội bộ — ẩn luôn phòng trường hợp UI
   leak ra khi user mở DevTools hoặc script thay đổi version. */
.goog-te-menu-value,
.goog-te-menu-value span,
.goog-te-menu-value img {
    display: none !important;
}
/* Khi Google đã wrap text bằng <font class="goog-translatable">, không
   cho highlight background mặc định của nó. */
font[style*="vertical-align"] { background: transparent !important; box-shadow: none !important; }

/* --- Language dropdown visibility (toggled by JS click outside / button) ---
   `!important` cần thiết để thắng các utility Tailwind (`invisible`,
   `opacity-0`, `-translate-y-1.5`) được Blade gắn thẳng lên <ul.mh-lang-menu>
   trong resources/views/partials/header.blade.php — vì Tailwind load
   SAU custom.css nên utility của nó sẽ ghi đè nếu không có !important.

   Quan trọng: KHÔNG mở menu bằng `:hover` — chỉ dùng `.is-open` (do JS).
   Mở bằng `:hover` gây lỗi UX: menu có `mt-2` tạo khoảng trống giữa
   button và menu, user di chuột xuống sẽ rời `.mh-lang-switcher` → menu
   fade-out → không click được. */
.mh-lang-switcher.is-open .mh-lang-menu {
    visibility: visible !important;
    opacity: 1 !important;
    transform: translateY(0) !important;
    display: block !important;
}
.mh-lang-switcher.is-open .mh-lang-toggle svg { transform: rotate(180deg); }

/* Override the legacy `.mh-lang-switcher .mh-lang-toggle` rule in the old
   language-switcher block (padding: 35px 30px, font-weight 700) — the new
   pill style is intentionally compact. Selectors are scoped to the header
   so the rest of the dropdown CSS still applies (border, shadow, items). */
.mh-header .mh-lang-switcher .mh-lang-toggle {
    display: inline-flex !important;
    align-items: center;
    padding: 0.5rem 0.75rem !important;
    font-size: 0.875rem !important;
    font-weight: 500 !important;
    line-height: 1.25;
}
@media (max-width: 1399.98px) {
    .mh-header .mh-lang-switcher .mh-lang-toggle { padding: 0.5rem 0.75rem !important; }
}
@media (max-width: 991.98px) {
    .mh-header .mh-lang-switcher .mh-lang-toggle { padding: 0.5rem 0.75rem !important; }
}

/* --- Lang toggle: icon, label and chevron follow header colour
       (white at the top, navy when stuck) via `currentColor`. --- */
.mh-header .mh-lang-switcher .mh-lang-toggle {
    color: #ffffff;
}
.mh-header .mh-lang-switcher .mh-lang-toggle:hover {
    background-color: rgba(255, 255, 255, 0.14) !important;
}
.mh-header .mh-lang-switcher .mh-lang-toggle svg {
    color: currentColor;
}

/* --- Scroll state (added by mh-header.js when window scrollY > 8px):
       invert from overlay (white text on dark gradient) to a clean
       sticky bar (navy text on white). --transitions on colour/bg
       match the duration-500 on `.mh-header`. --- */
.mh-header.js-mh-header-stuck {
    background-color: rgba(255, 255, 255, 0.95);
    background-image: none;
    border-bottom-color: rgba(15, 23, 42, 0.08);
    box-shadow: 0 4px 24px -8px rgba(15, 23, 42, 0.12);
    backdrop-filter: saturate(180%) blur(12px);
    -webkit-backdrop-filter: saturate(180%) blur(12px);
    color: #1A2B48;
}

/* Nav link colour flip: navy + orange underline on hover when stuck. */
.mh-header.js-mh-header-stuck .mh-nav-link {
    color: #1A2B48;
}
.mh-header.js-mh-header-stuck .mh-nav-link:hover {
    background-color: rgba(0, 0, 0, 0.04);
    color: #ff5c02;
}
.mh-header.js-mh-header-stuck .mh-nav-link:hover .mh-nav-link__label {
    border-bottom-color: #ff5c02;
}

/* CTA button flip: filled orange when stuck (matches the original brand
   accent colour, not the white pill on the hero overlay). */
.mh-header.js-mh-header-stuck .mh-nav-cta {
    background-color: #ff5c02;
    color: #ffffff;
}
.mh-header.js-mh-header-stuck .mh-nav-cta:hover {
    background-color: #e75200;
    color: #ffffff;
}

/* Hamburger / lang toggle flip to navy when stuck. */
.mh-header.js-mh-header-stuck .mh-hamburger { color: #1A2B48; }
.mh-header.js-mh-header-stuck .mh-lang-switcher .mh-lang-toggle {
    color: #1A2B48;
}
.mh-header.js-mh-header-stuck .mh-lang-switcher .mh-lang-toggle:hover {
    background-color: rgba(0, 0, 0, 0.04) !important;
}

/* --- Cart button focus / icon alignment --- */
.mh-cart-btn { line-height: 0; }
.mh-cart-btn:focus-visible {
    outline: 2px solid currentColor;
    outline-offset: 2px;
}

/* ============================================================
   END MH HEADER
   ============================================================ */

/* --- Rental detail: luôn hiển thị header ở trạng thái "stuck" ngay từ
       khi y=0 (nền trắng, chữ navy, có border + shadow) — các trang khác
       giữ nguyên hành vi cũ (trong suốt ở top, đổi sang stuck khi scroll).
       Chỉ áp dụng khi <body> có class `.mh-rental-detail` (set từ Blade).
       Rule copy lại các thuộc tính visual của `.js-mh-header-stuck` để
       trạng thái giống hệt khi user thực sự scroll xuống. --- */
body.mh-rental-detail .mh-header {
    background-color: rgba(255, 255, 255, 0.95);
    background-image: none;
    border-bottom-color: rgba(15, 23, 42, 0.08);
    box-shadow: 0 6px 24px -10px rgba(15, 23, 42, 0.18);
}
body.mh-rental-detail .mh-header .mh-nav-link { color: #1A2B48; }
body.mh-rental-detail .mh-header .mh-nav-link:hover {
    background-color: rgba(0, 0, 0, 0.04);
    color: #ff5c02;
}
body.mh-rental-detail .mh-header .mh-nav-link:hover .mh-nav-link__label {
    border-bottom-color: #ff5c02;
}
body.mh-rental-detail .mh-header .mh-nav-cta {
    background-color: #ff5c02;
    color: #ffffff;
}
body.mh-rental-detail .mh-header .mh-nav-cta:hover {
    background-color: #e75200;
    color: #ffffff;
}
body.mh-rental-detail .mh-header .mh-hamburger { color: #1A2B48; }
body.mh-rental-detail .mh-header .mh-lang-switcher .mh-lang-toggle { color: #1A2B48; }
body.mh-rental-detail .mh-header .mh-lang-switcher .mh-lang-toggle:hover {
    background-color: rgba(0, 0, 0, 0.04) !important;
}

/* ============================================================
   HERO OVERLAY — make the homepage hero start flush at the top
   of the viewport so the sticky header sits *on top of* the hero
   image, not above a strip of body background.

   `post-240.css` ships `padding:184px 0` for this section with
   selector `.elementor-240 .elementor-element-…-3a579432` —
   that selector has higher specificity than the inline
   `style="…padding:120px 0 184px"` we set in the Blade partial
   and silently wins, so we override with `!important` here.
   Scoped to this hero's data-id so other sections sharing the
   class chain are not affected.
   ============================================================ */
.elementor-240 .elementor-element.elementor-element-3a579432 {
    padding: 120px 0 184px !important;
}

/* ── Column sizing — specificity note ─────────────────────────────────
   Every rule in this block is anchored on the FULL theme chain
   (`.st-banner-search-form.style_2 .st-search-form-el .st-search-el
   .search-form > <field>`), NOT the shorter
   `.st-banner-search-form.style_2 .st-search-form-el <field>` form.

   Why: the Traveler theme sizes these columns by PERCENTAGE
   (main.css:1216 `.destination-search { width: 25% }`,
   main.css:1402 `.form-date-field { min-width: 32% }`) and its
   selectors carry `.st-search-el .search-form` — two more class names
   than the short form. A 3-class rule therefore LOSES on specificity
   and the columns silently fall back to 25% / 32% of the pill, which is
   what made the 4-column row overlap. Matching the full chain gives an
   equal-specificity rule, and since custom.css is linked after
   main.css, ours wins. */
/* ── Widen the white pill to fit a FOURTH column ───────────────────────
   Three separate ancestors cap this form at 1070px, and the four
   columns now need ≈ 1030px of tracks plus the ~190px search button —
   so the old cap made the last column spill past the rounded edge.
   All three caps are raised to 982px here.

   982px is DERIVED from two measurements, and both matter:

   1. The four tracks are 242 (destination) + 338 (dates) + 200
      (guests) + 190 (button wrapper) = 970px. Every track is itself
      `measured content + 40px`, so no column carries hidden slack.
   2. The pill is 84px tall and the button 60px, so the vertical gap
      above and below the button is 12px. The residual 12px of pill
      width goes to the button's RIGHT side, which makes all four
      sides of the button sit 12px from the pill edge — the user
      asked for exactly that (equal padding on top / bottom / right).

   That is the whole reason for the "+12": with the pill at 1002px the
   residual was 32px and it all landed on the right, leaving the
   button with 12px above, 12px below but 31px to its right — visibly
   lopsided. Do not round this number. If a track or the button height
   changes, recompute as `sum(tracks) + (pillHeight - buttonHeight)/2`.

   Wider candidates all made the row lopsided for the same underlying
   reason: a track wider than its content is a hole the eye reads as
   uneven spacing. 1180px left 170px of slack, 1100px left 90px,
   1040px left 50px, 1002px left 32px.

   1. `main.css:1175` caps `.st-banner-search-form.style_2 #nav-st_rental`
      at 1070px. It is an ID selector, so it needs an ID here too.
   2. The generated `post-240.css` sizes the Elementor widget with
      `width: var(--container-widget-width, 1070px)` AND hard-codes that
      custom property to 1070px on `.elementor-element-5cc8c819`. Raising
      only `max-width` is not enough — the `width` declaration still
      resolves to 1070px, which is what kept the pill at 1070px in the
      browser. Both the property and the `width` fallback have to be
      overridden. That sheet also loads after custom.css, hence
      `!important`.
   3. `.st-search-form-el` itself, for the rental-search topbar path. */
.st-banner-search-form.style_2 #nav-st_rental {
    max-width: 982px;
    margin: auto;
}
.elementor-240 .elementor-element.elementor-element-5cc8c819 {
    max-width: 982px !important;
    width: var(--container-widget-width, 982px) !important;
    --container-widget-width: 982px;
}
.st-banner-search-form.style_2 .st-search-form-el {
    width: 100%;
    max-width: 982px;
    margin-left: auto;
    margin-right: auto;
}
/* `.search-form` — the wrapper that actually holds the <form> — carries a
   hard `max-width: 900px` from the theme. That is the last box still
   squeezing the row: the pill measured 1180px but the form inside it
   stayed pinned at 900px while its content needed 982px, so the
   search button spilled past the rounded right edge. */
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form {
    width: 100%;
    max-width: 100%;
    /* The inline 2-month date picker (`.rate-calendar`) is a wide
       dropdown panel — ~800px on desktop. It is `position: absolute`
       and lives INSIDE this box, so `overflow: hidden` here clipped
       the whole popup (the calendar opened but stayed invisible /
       unclickable because it was cut off outside this 82px-tall row).

       We still need to stop the CLOSED panel from forcing a
       horizontal scrollbar, because while closed the wrapper
       contributes its width to `scrollWidth`. Fix that with
       `clip-path: inset(0)` semantics instead of `overflow: hidden`:
       `clip-path` clips painting/overflow WITHOUT creating a scroll
       container, and — unlike `overflow: hidden` — it does not turn
       the element into a scroll container, so an absolutely
       positioned descendant is only clipped if it actually lands
       inside these bounds. To let the popup escape while closed we
       keep the panel itself out of flow: `.rate-calendar` already
       is, so we simply must not clip here.

       `overflow-x: clip` (unlike `hidden`) does not create a scroll
       container and therefore does not clip absolutely positioned
       descendants vertically — exactly the behaviour we need. */
    overflow-x: clip;
    overflow-y: visible;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form {
    flex-wrap: nowrap;
    /* Uniform gaps between the four columns.

       `space-around` / `space-between` were both tried and rejected.
       They distribute free space by TRACK width (260 / 360 / 200 /
       190px), but what the eye judges is the gap between the visible
       TEXT, and the tracks are nowhere near filled: the date column
       holds ~322px of text in a 360px track, the guests column 111px
       of placeholder in a 124px box. Any free-space distribution
       therefore lands unevenly — measured 108 / 128 / 60 / 13px.

       The fix is not to redistribute space but to stop each track
       from having slack of its own: the date wrappers below are sized
       to their content (`flex: 0 0 auto`), and the row uses a plain
       `gap`. Whatever the pill has spare shows up as ONE equal gap
       after every column plus the pill's own inset, so the four
       dividers sit at even intervals. */
    justify-content: flex-start;
    gap: 0;
    /* The Blade ships `class="form d-flex align-items-center"`, but the
       Traveler theme's own `.search-form .form` rule re-declares
       `display: block`. That silently turns the row into normal flow
       where every field stacks on the same line box and OVERLAPS —
       and it also makes `flex-wrap: wrap` a no-op, so the mobile
       "stack into a column" breakpoints below can't rescue it.
       Re-assert `display: flex` here so the row is a real flex
       container at every viewport. */
    display: flex;
    width: 100%;
    max-width: 100%;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .destination-search {
    /* Fixed track, sized to CONTENT + even padding.

       Measured content (icon + label + input, calendar popup
       excluded): 202px. With 20px of breathing room on each side that
       is a 242px track. The old 260px carried 58px of slack, which
       the eye read as a wider gap after "Điểm đến" than after the
       other labels. */
    flex: 0 0 242px;
    width: 242px;
    min-width: 242px;
    max-width: 242px;
}
/* ── Guests field ("Số khách") ───────────────────────────────────────
   Column order in the row is: Điểm đến → Nhận phòng / Trả phòng →
   Số khách → Tìm kiếm.

   Sizing. The three original tracks are 260 (destination) + 420
   (dates) plus a ~180px search button ≈ 890px, which fit the old
   3-field row. Adding a fourth column needs real estate, so the
   banner white pill is widened below and the guests track is sized to
   170px — wide enough for the "Số khách" label (16px/500) plus a
   2-digit headcount without truncating either.

   Typography. The inner <div> carries the theme's own `field-guest`
   class (not a bespoke one) so main.css's existing
   `.field-detination, .field-guest` rules (main.css:1283-1324) supply
   the identical `padding: 0 20px`, `min-height: 82px`, 500/16px label
   and 400/14px input that the destination column uses. Nothing about
   the font needs overriding — using a class the theme already styles
   is what keeps the three columns visually identical.

   Width. 170px is NOT enough for this column's content. The inner
   `.field-guest` burns `padding: 0 20px` (40px) plus a 20px icon with
   `margin-right: 16px` (36px), which leaves only 94px of text space —
   and the "Bao nhiêu người?" placeholder alone renders 111px wide, so
   it was clipped mid-word ("Bao nhiêu ng…i?"). 200px restores 150px of
   text room: enough for the full placeholder at 14px plus a 3-digit
   headcount, and it also matches the ~200px of visual breathing room
   the destination column gets. */
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search {
    flex: 0 0 200px;
    width: 200px;
    min-width: 200px;
    max-width: 200px;
}
/* Let the label + input stack fill the track. The theme sets
   `.st-form-dropdown-icon` with no flex/min-width, so it inherits
   `min-width:auto` and refuses to shrink — the same flexbox trap the
   destination dropdown needed `min-width:0` to escape. */
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search .field-guest {
    /* The theme's `.form-extra-field` rule adds `padding-left: 30px`
       to this wrapper, while the destination column's icon+text block
       starts at 20px. That 10px offset made "Số khách" sit visibly
       right of "Điểm đến" and "Nhận phòng". Match 20px so all three
       columns share one left inset — this is the padding the column
       spacing is judged on, not the one on `.st-form-dropdown-icon`
       (which the theme already zeroes, main.css:1298). */
    padding-left: 20px;
    padding-right: 20px;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search .st-form-dropdown-icon {
    flex: 1 1 auto;
    min-width: 0;
    width: auto;
    padding-left: 0;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search .st-form-dropdown-icon .render {
    width: 100%;
    min-width: 0;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search .st-form-dropdown-icon .render input {
    width: 100%;
    min-width: 0;
    display: block;
    /* Headcount only — strip spinner arrows so the field matches the
       flat look of the destination input, and keep the caret in a
       numeric field from looking like a number input. */
    -moz-appearance: textfield;
    appearance: textfield;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search .st-form-dropdown-icon .render input::-webkit-outer-spin-button,
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search .st-form-dropdown-icon .render input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field {
    /* Fixed track, sized to CONTENT + even padding.

       Measured content ("Nhận phòng" block + arrow + "Trả phòng"
       block): 298px. With 20px on each side that's a 338px track.
       The old 400px carried ~100px of slack, which is exactly the
       "khoảng trống thừa bên phải của trả phòng" — the leftover sat
       between the checkout label and this column's `:after` divider,
       so that divider looked much further away than the others.

       Two growable attempts (`flex: 1 1 400px`, and `flex: 1 1 0` on
       the wrappers) both made it worse by dumping the slack as
       trailing space inside this column instead.

       `min-width` overrides the theme's 32% so the column can't be
       re-floored on narrower viewports. */
    flex: 0 0 338px;
    width: 338px;
    min-width: 338px;
    max-width: 338px;
    margin-left: 0;
    margin-right: 0;
}
/* Balance the date column's trailing gap.

   This column is 400px wide but its content — the "Nhận phòng" block,
   the arrow, and the "Trả phòng" block — only adds up to ~322px, and
   the theme's `.date-item-wrapper.checkout { padding: 0 30px }` adds
   30px of its own trailing padding. The leftover ~78px sat between the
   checkout label and the column's `:after` divider, so the divider
   looked much further from "Trả phòng" than the other dividers sit
   from their own labels, and the pill read lopsided.

   Fix WITHOUT making the two date blocks grow. `flex: 1 1 0` on
   `.date-item-wrapper` was tried and is wrong: it pushes the checkout
   block to the middle of the track, which opens a ~150px hole between
   "Trả phòng" and the next column while still leaving the block's own
   trailing padding behind. Instead keep both blocks at their content
   width and pull the trailing padding in, so the leftover space
   collects AFTER the padding (inside the column, next to its divider)
   and every column ends up with the same narrow gutter. */
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field .date-item-wrapper {
    flex: 0 0 auto;
    min-width: 0;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field .date-item-wrapper.checkin {
    padding-right: 18px;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field .date-item-wrapper.checkout {
    padding-right: 18px;
}
.st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .button-search-wrapper {
    flex: 0 0 auto;
    /* The theme's base rule is `margin-left: auto`, which shoves the
       button to the far right and opens a gap between it and the
       guests column — that auto margin is also what made the row look
       lopsided. Zero both margins: the row's `space-around` now
       supplies the spacing, so any margin here would double up on it
       and push the button off the pill again. */
    margin-left: 0;
    margin-right: 0;
}
/* Below 1199px the four fixed tracks no longer fit. Rather than
   forcing a horizontal scrollbar, the two WIDE columns (destination,
   dates) shrink while the guests column and the button hold their
   measured widths.

   The guests track must NOT shrink below its content: the theme
   forces `display: block` on the form below 991.98px, so a shrunken
   track there would clip "Bao nhiêu người?" instead of stacking it.
   Allowing the guests track to shrink (`flex: 0 1 200px; min-width:
   150px`) was tried and clipped the placeholder to 81px on the
   rental-search topbar at 992px — that topbar is narrower than the
   homepage banner, so it hits the squeeze first. */
@media (max-width: 1199px) {
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .destination-search {
        flex: 0 1 242px;
        min-width: 200px;
        max-width: 242px;
    }
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field {
        flex: 0 1 338px;
        min-width: 300px;
        max-width: 338px;
    }
}
/* ============================================================
   Homepage search banner — make "Tìm kiếm" button wider
   The Traveler theme ships the .btn-search with only the natural
   icon+label width (looks too narrow on the mega-banner).
   Bump horizontal padding so it reads as a proper pill button.
   ============================================================ */
.st-banner-search-form.style_2 .st-search-form-el .button-search-wrapper .btn-search {
    padding-left: 40px;
    padding-right: 40px;
    border: 0;
    box-shadow: none;
}

/* Destination dropdown — hover state for list items.
   The cloned Traveler theme defines layout (padding, font, color)
   for the dropdown items but never styles :hover, so when the
   panel opens the user can't tell which row they're about to click.
   Add a soft blue background + colored text + pointer cursor. */
.st-banner-search-form.style_2 .destination-search .dropdown-menu li:not(.location-heading).item {
    cursor: pointer;
    border-radius: 8px;
    margin: 2px 6px;
    transition: background-color .15s ease, color .15s ease;
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu li:not(.location-heading).item:hover,
.st-banner-search-form.style_2 .destination-search .dropdown-menu li:not(.location-heading).item:focus,
.st-banner-search-form.style_2 .destination-search .dropdown-menu li:not(.location-heading).item.active {
    background-color: rgba(81, 145, 250, 0.10);
    outline: none;
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu li:not(.location-heading).item:hover span:not(.stt-icon),
.st-banner-search-form.style_2 .destination-search .dropdown-menu li:not(.location-heading).item.active span:not(.stt-icon),
.st-banner-search-form.style_2 .destination-search .dropdown-menu li:not(.location-heading).item:hover span.stt-icon,
.st-banner-search-form.style_2 .destination-search .dropdown-menu li:not(.location-heading).item.active span.stt-icon {
    color: var(--mh-primary, #5191FA);
}

/* Filtered-out destination row (used by megahomestay-search.js).
   We toggle this class instead of removing the <li> so the theme's
   pre-bound click handler keeps firing on the surviving rows. */
.st-banner-search-form.style_2 .destination-search .dropdown-menu li.item.mh-hidden {
    display: none !important;
}

/* Destination dropdown — let the input span the available width.
   The cloned Traveler theme sets the input placeholder/value box to
   width:auto and gives it no min-width, so on mobile a long value like
   "Yên Bài, Sơn Tây, Hà Nội, Việt Nam" gets clipped to a narrow column
   instead of using the full destination-search width. The flex quirks
   here are:
     - .st-form-dropdown-icon is a flex item but has no flex/min-width,
       so it inherits `min-width:auto` (= intrinsic content size) and
       refuses to grow into the empty space left by the icon column.
     - the inner <input> carries no width either, defaulting to the
       browser default ~200px.
   Fix by:
     - making .st-form-dropdown-icon take the remaining flex track
       (flex:1 1 auto; min-width:0;). min-width:0 is mandatory — without
       it flex items refuse to shrink below their intrinsic size, which
       is what causes the text to "stick" to a narrow column.
     - making the input fill that track (width:100%; min-width:0). */
.st-banner-search-form.style_2 .destination-search .field-detination .st-form-dropdown-icon {
    flex: 1 1 auto;
    min-width: 0;
    width: auto;
}
.st-banner-search-form.style_2 .destination-search .field-detination .st-form-dropdown-icon .render {
    width: 100%;
    min-width: 0;
}
.st-banner-search-form.style_2 .destination-search .field-detination .st-form-dropdown-icon .render input {
    width: 100%;
    min-width: 0;
    display: block;
}
   The cloned Traveler theme sets .st-scrollbar max-height:332px but never
   sets overflow, so when the list exceeds 332px the dropdown silently
   clips instead of scrolling (users can't reach rows 5–11 like
   "Quy Nhơn, Gia Lai, Việt Nam").

   Also: each <li> is display:flex with no min-width:0 on the child <span>.
   Per CSS Flexbox spec, a flex item's default min-width is `auto` (= its
   intrinsic content size), so a long name like "Yên Bài, Sơn Tây, Hà Nội,
   Việt Nam" refuses to wrap and pushes the <li> wider than the
   .dropdown-menu (min-width:360px), making the text spill outside the
   rounded border. Fix both by:
     1) enabling vertical scroll on .st-scrollbar
     2) allowing the <span class="parent"> to shrink with min-width:0
     3) letting long unbroken strings break with overflow-wrap:anywhere
*/
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar {
    overflow-y: auto;
    overflow-x: hidden;
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu li.item.parent_li {
    /* keep flex but allow the row to shrink to its container width */
    min-width: 0;
    width: 100%;
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu li.item.parent_li > .parent {
    min-width: 0;
    max-width: 100%;
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Destination dropdown — scrollbar styling.
   The cloned Traveler base rule sets `max-height:332px` on
   .st-scrollbar` but never styles the native scrollbar, so on
   Windows/Linux you get the chunky grey 17px-wide scrollbar that
   visibly pushes the last column ("Vung Tau, ...") past the rounded
   border. On macOS Safari/Chrome the overlay scrollbar is invisible
   by default, but as soon as the user scrolls it draws on top of the
   last ~10px of text and clips against the rounded corner.

   Goal: a slim, rounded, soft-tinted scrollbar that sits *inside* the
   panel's rounded border (not on top of the last column of text),
   with enough inset so the thumb never overlaps the row's right
   padding. Three layers:
     1) `scrollbar-width: thin` (Firefox) — ~6px instead of ~17px.
     2) `scrollbar-color` tints the thumb with our primary blue and
        keeps the track transparent.
     3) WebKit pseudo-elements style Chrome / Safari / Edge the same
        way: 6px-wide thumb with rounded ends, transparent track, no
        buttons.
   Plus a tiny `padding-right` on the <ul> so when the scrollbar
   appears it draws in the gutter (not over the text), keeping the
   last column legible at all times. */
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar {
    /* Firefox — neutral grey thumb so it doesn't compete with the
       blue primary colour used by the rest of the search form. */
    scrollbar-width: thin;
    scrollbar-color: rgba(0, 0, 0, 0.35) transparent;
    /* Reserve a thin gutter on the right of the scroll container so
       the scrollbar draws in empty space rather than overlapping the
       row text or the panel's rounded corner. 6px scrollbar + 6px
       breathing room = 12px inset; row text starts ~20px from the
       left, so the row text gets 280-12-20 = 248px of usable width —
       enough for ~30–35 chars per line, "Yên Bài, Sơn Tây, Hà Nội,
       Việt Nam" fits on 2 lines. */
    padding-right: 6px !important;
}
/* WebKit (Chrome, Safari, Edge) — pseudo-element selectors must be
   written out in plain CSS, no nesting. We target only the dropdown's
   scroll container so we don't accidentally restyle the page-level
   scrollbars. */
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar::-webkit-scrollbar {
    width: 6px;
    height: 6px;
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar::-webkit-scrollbar-track {
    background: transparent;
    margin: 8px 0; /* keep the thumb from reaching the very top/bottom */
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar::-webkit-scrollbar-thumb {
    background-color: rgba(0, 0, 0, 0.30);
    border-radius: 999px;
    border: 0;
    transition: background-color .18s ease;
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar::-webkit-scrollbar-thumb:hover {
    background-color: rgba(0, 0, 0, 0.50);
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar::-webkit-scrollbar-thumb:active {
    background-color: rgba(0, 0, 0, 0.65);
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar::-webkit-scrollbar-button,
.st-banner-search-form.style_2 .destination-search .dropdown-menu .st-scrollbar::-webkit-scrollbar-corner {
    display: none;
    width: 0;
    height: 0;
}

/* Destination dropdown — panel sizing + scroll containment.
   The cloned Traveler rule
   (`.st-banner-search-form.style_2 ... .destination-search .dropdown-menu`)
   gives the panel `min-width:360px` even though the destination column is
   only 260px wide. Combined with `<li>` rows holding long unbroken
   Vietnamese names ("Yên Bài, Sơn Tây, Hà Nội, Việt Nam") the panel
   pops wider than the column, Popper places it absolutely and the text
   spills past the rounded border.

   Bootstrap's Popper positions `.dropdown-menu` via inline
   `transform: translate(...)`. To stop the panel from drifting past
   the column edge on smaller viewports we:
     1) match the panel width to the destination column (`width:100%;
        min-width:0; max-width:340px` — slightly wider for readability
        but never wider than 340px so it fits inside the 260px column
        with a bit of overflow margin) — actually kept at 100% of the
        toggle so it never spills past the column;
     2) cap max-height so 13+ rows don't push the page down;
     3) hide any horizontal overflow on the panel itself (defence in
        depth: even if a row misbehaves it can't poke out of the panel). */
.st-banner-search-form.style_2 .destination-search .dropdown-menu.mh-dest-dropdown {
    /* reset the theme's too-wide min-width so the panel never grows past
       the destination column. On desktop .destination-search is 260px wide
       (see custom.css lines 21-26). Bootstrap's Popper positions the panel
       via `transform: translate(...)` relative to the toggle, so if the
       panel is wider than 260px Popper will pin it to the toggle's left
       edge and the right side spills over the next form column. We let
       the panel grow up to 280px — 20px wider than the column so the
       Popper's "left-start" alignment still sits flush with the toggle's
       left edge instead of shifting the whole panel to the right. */
    min-width: 0;
    width: max-content;
    max-width: 280px;
    /* Contain EVERYTHING inside the rounded border: the WebKit scrollbar
       thumb sits inside <ul.st-scrollbar> already, but if a row text
       ever overflows horizontally we still want the rounded clip to
       mask it. Setting overflow:hidden here also guarantees the
       scrollbar thumb can never poke past the panel's `border-radius:
       20px` corner — the inner <ul>'s own `overflow-y:auto` is what
       actually drives the scroll, this layer just trims the corners. */
    overflow: hidden;
    /* The Traveler base rule sets padding: 30px 15px 30px 10px on this
       panel — 15px right is too tight for a scrollbar (the 6px thumb
       would clip against the rounded edge). Reduce the right padding
       to a uniform 4px so the scrollbar thumb sits in the gutter
       rather than flush against the panel border. Bottom/top padding
       stays at 30px so the first/last row still have breathing room
       from the rounded corners. */
    padding: 30px 4px 30px 10px !important;
    /* vertically clamp the panel itself — the inner <ul.st-scrollbar>
       already has max-height:332px, but on very long lists we also want
       to cap the panel so it never extends past the page fold. */
    max-height: calc(100vh - 32px);
    /* keep the rounded border + shadow drawing cleanly */
    box-sizing: border-box;
}
/* When the destination column is narrow (mobile, or the rental-search
   topbar that already overrides .destination-search width), let the
   panel match its toggle width exactly instead of going to 280px. */
@media (max-width: 991px) {
    .st-banner-search-form.style_2 .destination-search .dropdown-menu.mh-dest-dropdown {
        max-width: calc(100vw - 32px);
    }
}
/* Inner scroll container: also let it shrink below its min content size
   when the panel itself is narrower than the longest row, so the row
   text wraps inside instead of forcing the <ul> to overflow. */
.st-banner-search-form.style_2 .destination-search .dropdown-menu.mh-dest-dropdown .st-scrollbar {
    max-width: 100%;
    min-width: 0;
    /* The earlier generic `.dropdown-menu .st-scrollbar` rule sets
       `overflow-y:auto`, but this more-specific selector (.mh-dest-dropdown)
       wins the cascade and resets overflow back to its initial value, so
       the dropdown silently clips at 332px with no scrollbar. Re-declare
       overflow here so the scroll actually appears on this dropdown. */
    overflow-y: auto;
    overflow-x: hidden;
    /* The dropdown lives inside a Bootstrap .dropdown-menu which itself has
       `overflow: hidden` (we set that on the panel at line 252 to clip the
       rounded corners). Without `position:relative` + a height, the inner
       <ul> would collapse to its content height and the scroll never kicks
       in. Make it a positioning context and force a concrete height so
       `overflow-y` actually produces a thumb. */
    position: relative;
    height: 100%;
    max-height: 332px;
    /* Mirror the panel's `border-radius: 20px` on the inner <ul> so
       the WebKit scrollbar thumb doesn't draw a square cap that
       sticks out past the rounded corner at the very top / bottom of
       the scroll area. The left side stays square (already hidden
       under the panel padding); only the right corners need rounding
       because the scrollbar lives there. */
    border-top-right-radius: 16px;
    border-bottom-right-radius: 16px;
    /* Keep the rounded corners in sync with the panel. The Traveler
       base rule sets `padding-left:0; padding-right:0` on this <ul> —
       we add a tiny `padding-right` here so the scrollbar thumb sits
       in the gutter rather than overlapping the rightmost row text.
       The 6px-gutter + 6px thumb = 12px inset from the row text to
       the panel border. */
    padding-right: 6px !important;
}
.st-banner-search-form.style_2 .destination-search .dropdown-menu.mh-dest-dropdown li {
    /* The Blade used to inject inline `padding-left:20px` which doubled
       the left padding (theme already sets `padding:7px 20px 7px 20px`
       on `li:not(.location-heading)`). We removed the inline one; this
       rule is defensive — if a future edit re-adds inline padding the
       !important wins and the row stays inside the panel. */
    padding-left: 20px !important;
    /* Trim the right padding from 20px to 14px so long row text
       doesn't run straight into the scrollbar gutter. The scrollbar
       thumb is 6px wide and sits in the 6px gutter on the <ul>, so
       14px right padding on the <li> leaves a ~2px breathing gap
       between text and thumb. */
    padding-right: 14px !important;
    /* belt-and-braces: prevent the row from ever being wider than the
       panel even if a child span misbehaves */
    max-width: 100%;
}

/* ============================================================
   MegaHomestay — project overrides on top of cloned Traveler theme
   The Traveler v3 + Elementor CSS already provides ~99% of styles.
   This file only handles Laravel-specific glue (DB integration, etc.)
   ============================================================ */

:root {
    --mh-primary: #5191FA;
    --mh-orange:  #FA5636;
    --mh-text:    #1A2B48;
}

/* Footer social icons */
.footer-social a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: #1A2B48;
    color: #fff !important;
    text-decoration: none;
    transition: all .2s;
}
.footer-social a:hover { background: var(--mh-primary); transform: translateY(-2px); }

/* Newsletter form (section 5) — stacked layout: email on top, submit below */
.stt-mailchimp-form {
    position: relative !important;
    max-width: 460px;
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 12px;
}
.stt-mailchimp-form input[type="email"] {
    width: 100%;
    border: 1px solid #DEDEDE !important;
    border-radius: 80px;
    font-weight: 400;
    font-size: 16px;
    line-height: 26px;
    color: #83929D;
    padding: 17px 30px !important;
    background: #fff;
    box-sizing: border-box;
    position: static !important;
    display: block !important;
    -webkit-appearance: none;
    appearance: none;
    outline: none;
    height: auto !important;
    min-width: 0;
    flex: none !important;
}
.stt-mailchimp-form input[type="submit"] {
    background: rgb(255, 92, 2) !important;
    border: 0 !important;
    border-radius: 50px !important;
    font-weight: 500 !important;
    font-size: 16px !important;
    line-height: 20px !important;
    color: #fff !important;
    padding: 12px 22px !important;
    height: auto !important;
    cursor: pointer;
    transition: opacity .2s;
    position: static !important;
    top: auto !important;
    right: auto !important;
    transform: none !important;
    display: block !important;
    width: 100%;
    margin: 0;
}
.stt-mailchimp-form input[type="submit"]:hover { opacity: .9; }
.stt-mailchimp-form .indianred-warn { color: indianred; margin: 0 0 8px; }

/* Section 5 newsletter — 2 columns, rounded inner section (megahomestay.vn) */
.elementor-element-5d2f7b12 {
    margin-top: 0;
    margin-bottom: 0;
    padding: 50px 20px 100px 20px;
}
.elementor-element-7b9b2079:not(.elementor-motion-effects-element-type-background) > .elementor-widget-wrap {
    background-image: url("../v3/images/Rectangle-7-min-1.png");
    background-repeat: no-repeat;
    background-position: center center;
    background-size: cover;
    min-height: 320px;
}
.elementor-element-7b9b2079 > .elementor-element-populated {
    border-radius: 20px 0 0 20px;
}
.elementor-element-77ea27e0:not(.elementor-motion-effects-element-type-background) > .elementor-widget-wrap {
    background-color: #FCFCFC;
}
.elementor-element-77ea27e0.elementor-column .elementor-widget-wrap {
    align-items: center;
}
.elementor-element-77ea27e0 > .elementor-element-populated {
    border-radius: 0 20px 20px 0;
    padding: 40px 50px;
}
@media (max-width: 767.98px) {
    .elementor-element-7b9b2079 > .elementor-element-populated,
    .elementor-element-77ea27e0 > .elementor-element-populated { border-radius: 20px; }
    .elementor-element-7b9b2079:not(.elementor-motion-effects-element-type-background) > .elementor-widget-wrap { min-height: 200px; }
    .elementor-element-77ea27e0 > .elementor-element-populated { padding: 30px 24px; }
}

/* Contact info (section 6) */
.contact-info-item {
    padding: 20px;
    background: #f7f7f7;
    border-radius: 10px;
    height: 100%;
}
.contact-info-item .stt-icon {
    font-size: 28px;
    color: var(--mh-primary);
    margin-right: 16px;
    flex-shrink: 0;
}
.contact-info-item strong {
    display: block;
    font-size: 14px;
    color: var(--mh-text);
    margin-bottom: 4px;
    font-weight: 700;
}
.contact-info-item p {
    margin: 0;
    color: #5E6D77;
    font-size: 14px;
    line-height: 1.6;
}

/* Testimonial (section 4) */
.testimonial-item {
    background: #fff;
    border-radius: 12px;
    padding: 24px;
    box-shadow: 0 1px 3px rgba(0,0,0,.08);
    margin-bottom: 20px;
}
.testimonial-item .testimonial-header {
    margin-bottom: 12px;
}
.testimonial-item .author-avatar {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    overflow: hidden;
    margin-right: 14px;
    flex-shrink: 0;
}
.testimonial-item .author-name {
    font-size: 15px;
    font-weight: 700;
    margin: 0 0 4px;
    color: var(--mh-text);
}
.testimonial-item .author-date {
    font-size: 13px;
    color: #999;
}
.testimonial-item .author-content {
    color: #5E6D77;
    font-size: 14px;
    line-height: 1.6;
    margin-bottom: 12px;
    margin-top: 12px;
}
.testimonial-item .author-rate { color: #ffb400; font-size: 14px; }
.testimonial-item .author-rate i { margin: 0 1px; }

/* Rental card image fills container */
.services-item .image-feature {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
/* Placeholder shown when a rental has no thumbnail AND no gallery
   (shouldn't happen in practice but keeps the card layout intact). */
.services-item .image-feature--placeholder {
    background: #f0f0f0;
    display: block;
}

/* ============================================================
   CRITICAL: Fix for images showing blank on first load.
   These rules must have HIGH SPECIFICITY to override theme CSS.
   The image container needs explicit height BEFORE the lazy image loads.
   ============================================================ */

/* Container: explicit height with overflow hidden */
.services-item.item-elementor .item .featured-image {
    height: 280px !important;
    min-height: 280px !important;
    max-height: 280px !important;
    overflow: hidden !important;
}

/* Image: fill container completely */
.services-item.item-elementor .item .featured-image .image-feature,
.services-item.item-elementor .item .featured-image img {
    width: 100% !important;
    height: 280px !important;
    object-fit: cover !important;
    object-position: center !important;
    display: block !important;
}

/* Rental card original price — muted color + strike-through (matches demo) */
.services-item .content-item .price-regular {
    color: var(--grey-color, #5E6D77);
    text-decoration: line-through;
    font-weight: 500;
    font-size: 14px;
    line-height: 20px;
}

/* Rental card — số tiền giá (`.price-amount`).
   Trước đây span này mang class `item`, trùng tên với thẻ card cha
   (`.services-item … .item` trong main.css — vốn có `background:#fff`,
   `border-radius: 15px`, `box-shadow`). Selector đó là descendant nên
   span giá cũng dính, cộng dồn 3 thuộc tính đó thành khung tròn bao
   quanh cả dòng giá. Đã đổi markup sang `.price-amount`; các rule dưới
   đây thay thế đúng những gì theme áp qua `.price .item`:

     main.css:2303  .service-list-wrapper.service-tour .services-item.item-elementor
                      .price-wrapper .price .item  → display/width/line-height
     main.css:2317  … .price .sale-top .item      → font của chữ "Từ"
     main.css:2403  .service-list-wrapper…rental-grid … .price .item → margin-left
     main.css:2406  … .stt-item-rental-loop … .price .item       → margin-left

   Selector cố ý KHÔNG dùng `.item` ở đâu cả — nếu vô tình khớp lại thẻ
   card thì tái diễn lỗi trên. */
.services-item .content-item .price-wrapper .price .price-amount {
    /* main.css:2303 — display/width cho phép span chiếm hết chiều ngang
       hàng (theme dựng giá theo dạng block, không phải inline). */
    display: block;
    width: 100%;
    line-height: 16px;
    /* Chống kế thừa khung tròn/box-shadow nếu theme đổi selector. */
    background: transparent;
    border: 0;
    box-shadow: none;
    border-radius: 0;
    overflow: visible;
}
.services-item .content-item .price-wrapper .price .sale-top .price-amount,
.services-item .content-item .price-wrapper .price .price-amount {
    /* main.css:2317 / 2403 / 2406 — chữ "Từ" đậm hơn, giá cách 8px. */
    font-style: normal;
    font-weight: 700;
    font-size: 16px;
    line-height: 26px;
    color: var(--link-color);
    margin-left: 8px;
}

/* Rental card title — black by default, red-orange on hover (matches --main-color) */
.services-item .content-item .title a,
.services-item .content-item .title a.c-main {
    color: var(--heading-color, #232323);
    transition: color .2s ease;
}
.services-item .content-item .title a:hover,
.services-item .content-item .title a.c-main:hover {
    color: var(--main-color, #ff5c02);
}

/* ============================================================
   Rental detail page (megahomestay.vn/st_rental/... style)
   ============================================================ */
#st-content-wrapper.st_single_rental {
    padding-top: 20px;
    padding-bottom: 60px;
}

/* Breadcrumb */
.st-breadcrumb { padding: 12px 0; }
.st-breadcrumb ul {
    display: flex; flex-wrap: wrap; align-items: center;
    list-style: none; padding: 0; margin: 0;
    font-size: 14px; color: var(--grey-color, #5E6D77);
}
.st-breadcrumb ul li { display: flex; align-items: center; }
.st-breadcrumb ul li + li::before {
    content: '/'; margin: 0 10px; color: #DEDEDE;
}
.st-breadcrumb ul li a { color: var(--heading-color, #232323); text-decoration: none; }
.st-breadcrumb ul li a:hover { color: var(--main-color, #ff5c02); }
.st-breadcrumb ul li.active { color: var(--grey-color, #5E6D77); }

/* Service header */
.st-service-header2 {
    display: flex; justify-content: space-between; align-items: flex-start;
    gap: 20px; padding: 20px 0;
}
@media (max-width: 767.98px) {
  /* Trên mobile header trên đã sát mép trang, 20px padding-bottom
     thừa khoảng trống giữa heading và content bên dưới. Giữ padding-top
     để có khoảng thở với header, bỏ padding-bottom. */
  .st-service-header2 { padding-bottom: 0 !important; }
}
.st-service-header2 .left { flex: 1; }
.st-service-header2 .st-heading {
    font-size: 28px; font-weight: 700; line-height: 1.3;
    color: var(--heading-color, #232323); margin: 0 0 12px;
}
@media (max-width: 767.98px) { .st-service-header2 .st-heading { font-size: 22px; } }
.st-service-header2 .sub-heading { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; justify-content: space-between; }
.st-service-header2 .sub-heading__info { flex: 1; min-width: 0; }
.st-service-header2 .sub-heading__share { flex: 0 0 auto; }
.st-service-header2 .sub-heading__share > .share-item {
    width: 40px; height: 40px; border-radius: 50%;
    background: #fff; border: 1px solid #EAEEF3;
    display: inline-flex; align-items: center; justify-content: center;
    color: var(--heading-color, #232323); text-decoration: none;
    transition: all .2s;
}
.st-service-header2 .sub-heading__share > .share-item:hover,
.st-service-header2 .sub-heading__share.open > .share-item {
    background: var(--main-color, #ff5c02); color: #fff; border-color: var(--main-color, #ff5c02);
}
.st-service-header2 .st-review-score .reviews { display: inline-flex; align-items: center; gap: 6px; }
.st-service-header2 .st-review-score .reviews i { color: #ffb400; }
.st-service-header2 .st-review-score .rate { font-weight: 700; color: var(--heading-color, #232323); }
.st-service-header2 .st-review-score .summary { color: var(--grey-color, #5E6D77); font-size: 14px; }
.st-service-header2 .st-dot {
    width: 4px; height: 4px; background: #DEDEDE; border-radius: 50%;
    margin: 0 12px; display: inline-block;
}
.st-service-header2 .st-address { color: var(--grey-color, #5E6D77); font-size: 14px; }
.st-service-header2 .st-address i { color: var(--main-color, #ff5c02); margin-right: 4px; }
.st-service-header2 .right { gap: 12px; flex-shrink: 0; }
.st-service-header2 .right a {
    width: 40px; height: 40px; border-radius: 50%;
    background: #fff; border: 1px solid #EAEEF3;
    display: inline-flex; align-items: center; justify-content: center;
    color: var(--heading-color, #232323); text-decoration: none;
    transition: all .2s;
}
.st-service-header2 .right a:hover { background: var(--main-color, #ff5c02); color: #fff; border-color: var(--main-color, #ff5c02); }

/* Rental-detail share dropdown */
.st-rental-share { position: relative; }
.st-rental-share.open .share-item { background: var(--main-color, #ff5c02); color: #fff; border-color: var(--main-color, #ff5c02); }
.st-rental-share__menu {
    display: none;
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    z-index: 50;
    padding: 8px;
    margin: 0;
    background: #FFFFFF;
    border: 1px solid #EAEEF3;
    border-radius: 12px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
    flex-direction: row;
    align-items: center;
    gap: 6px;
    list-style: none;
}
.st-rental-share.open .st-rental-share__menu { display: inline-flex; }
.st-rental-share__btn {
    width: 36px; height: 36px; border-radius: 50%;
    display: inline-flex; align-items: center; justify-content: center;
    color: #FFFFFF; font-size: 16px; text-decoration: none;
    transition: opacity .15s, transform .05s;
    flex: 0 0 auto;
    padding: 0; line-height: 1; border: 0; cursor: pointer;
    background: transparent;
}
.st-rental-share__btn:hover { opacity: .85; color: #FFFFFF; }
.st-rental-share__btn:active { transform: scale(.95); }
.st-rental-share__btn--fb { background: #1877F2; }
.st-rental-share__btn--tw { background: #1DA1F2; }
.st-rental-share__btn--li { background: #0A66C2; }
.st-rental-share__btn--cp { background: #5191FA; }
.st-rental-share__btn--ok { background: #28a745; }
@media (max-width: 575.98px) {
    .st-rental-share__menu { right: -8px; }
}

/* Gallery masonry */
.st-gallery { margin-top: 16px; }
.st-list-item-gallery {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr;
    grid-template-rows: 240px 240px;
    gap: 8px;
}
.st-list-item-gallery .item-gallery {
    border-radius: 8px; overflow: hidden; display: block;
    position: relative;
}
.st-list-item-gallery .item-gallery:nth-child(1) {
    grid-row: 1 / span 2;
}
.st-list-item-gallery .item-gallery img {
    width: 100%; height: 100%; object-fit: cover;
    transition: transform .4s ease;
}
.st-list-item-gallery .item-gallery:hover img { transform: scale(1.05); }
.st-list-item-gallery .item-gallery.item-hide { display: none; }
@media (max-width: 1199.98px) {
    /* Tablet & mobile: drop the desktop 3-column grid (which puts the
       feature photo in column 1 and the four thumbnails in columns 2-3)
       and switch to a simple stacked 2-column grid. Explicit row/column
       placement is required for every item — auto-placement would put
       thumbnails 2 and 3 back into row 1 and overlap the feature
       photo. The breakpoint is set generously so the rule covers any
       viewport where the 3-column desktop grid looks crowded. */
    .st-list-item-gallery {
        display: grid !important;
        grid-template-columns: 1fr 1fr !important;
        grid-template-rows: 190px 130px 130px !important;
        gap: 8px !important;
    }
    .st-list-item-gallery .item-gallery:nth-child(1) { grid-row: 1; grid-column: 1 / span 2; }
    .st-list-item-gallery .item-gallery:nth-child(2) { grid-row: 2; grid-column: 1; }
    .st-list-item-gallery .item-gallery:nth-child(3) { grid-row: 2; grid-column: 2; }
    .st-list-item-gallery .item-gallery:nth-child(4) { grid-row: 3; grid-column: 1; }
    .st-list-item-gallery .item-gallery:nth-child(5) { grid-row: 3; grid-column: 2; }
    /* Defensive: hard-reset the height on every item so a leftover
       desktop rule can't push the feature photo above the row size. */
    .st-list-item-gallery .item-gallery,
    .st-list-item-gallery .item-gallery img { height: 100%; }
}
.st-gallery .shares { margin-top: 12px; }
.st-gallery .btn-transparent {
    background: transparent; border: 1px solid #DEDEDE; color: var(--heading-color, #232323);
    padding: 8px 16px; border-radius: 8px; font-size: 14px;
    display: inline-flex; align-items: center; gap: 6px;
}
.st-gallery .btn-transparent:hover { background: var(--main-color, #ff5c02); color: #fff; border-color: var(--main-color, #ff5c02); }

/* Section heading */
.st-heading-section {
    font-size: 22px; font-weight: 700; line-height: 1.3;
    color: var(--heading-color, #232323); margin: 0 0 16px;
    font-family: var(--mh-system-font), sans-serif;
}
.st-hr { height: 1px; background: #EAEEF3; margin: 30px 0; }
.st-hr.large { margin: 40px 0; }

/* Quick specs */
.room-featured-items {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0;
    margin-top: 30px;
    margin-bottom: 30px;
    padding-bottom: 30px;
    border-bottom: 1px solid #DEDEDE;
}
.room-featured-items .item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding-right: 40px;
    font-family: var(--bs-font-sans-serif);
    font-weight: 400;
    font-size: 14px;
    line-height: 22px;
    color: var(--grey-color, #5E6D77);
}
.room-featured-items .item span.stt-icon {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    border: 1px solid #DEDEDE;
    border-radius: 10px;
    background: #ffffff;
    color: var(--grey-color, #5E6D77);
    font-size: 20px;
    line-height: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-right: 10px;
}
.room-featured-items .item span.stt-icon:before {
    font-family: "traveler-icon" !important;
}

/* Description */
.st-description { padding: 24px 0 0; }
.st-description p {
    color: var(--body-color, #232323);
    font-family: var(--bs-font-sans-serif);
    font-weight: 400;
    font-size: 16px;
    line-height: 26px;
    margin: 0;
}
.st-description p + p { margin-top: 12px; }

/* Amenities */
.st-attributes { padding: 0; }
.st-attributes .item-attribute { margin-top: 8px; }
.st-attributes .item {
    display: flex !important;
    align-items: center !important;
    padding: 8px 0;
    height: 46px;
    padding-bottom: 20px;
    font-size: 16px;
    line-height: 26px;
    font-weight: 400;
    color: var(--grey-color, #5E6D77);
}
.st-attributes .item .field-icon {
    margin-right: 10px;
    width: 44px;
    height: 44px;
    flex-shrink: 0;
    background: transparent;
    color: var(--grey-color, #5E6D77);
    font-size: 20px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-align: center;
}
.st-attributes .item span {
    color: var(--grey-color, #5E6D77);
    font-size: 16px;
    font-weight: 400;
}

/* Rates & availability */
.st-flex.space-between { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }

/* Mobile: stack heading + side info into two lines */
@media (max-width: 767.98px) {
    .st-flex.st-flex-wrap-mobile {
        flex-direction: column;
        align-items: flex-start;
        gap: 8px;
    }
}

/* Rates & availability — calendar layout fix
   The Traveler theme styles `.table-header` with `padding-bottom: 15px` only
   and assumes it is a table row. Our Blade template uses <div>s, so we must
   set flexbox explicitly; otherwise the prev / month / next cells stack
   vertically and the calendar header spills down, hiding the toolbar. */
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-bottom: 15px;
    width: 100%;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header > div {
    flex: 0 0 auto;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .month {
    flex: 1 1 auto;
    text-align: center;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .prev,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .next {
    width: 32px;
    height: 32px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    border-radius: 50%;
    transition: background .2s;
    color: var(--heading-color, #232323);
    /* Our wrapper owns its own .st-avail-prev / .st-avail-next pair that
       swaps BOTH months at once. The daterangepicker-injected prev/next
       inside each .table-header is leftover markup from the original
       single-month implementation: hide them so their hover ring doesn't
       bleed through under our centered controls. */
    display: none !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .prev:hover,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .next:hover {
    background: rgba(81, 145, 250, .12);
    color: var(--mh-primary, #5191FA);
}

/* Make prev / next always render their glyph (font-family priority) even when
   the original Traveler-specific selector doesn't match because of the
   nested `.st-availability-calendar-wrapper` class. */
.rate-calendar .st-availability-calendar-wrapper .daterangepicker.dropdown-menu .calendar .calendar-table .table-header .prev,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .prev {
    font-family: "traveler-icon" !important;
}
.rate-calendar .st-availability-calendar-wrapper .daterangepicker.dropdown-menu .calendar .calendar-table .table-header .prev:after,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .prev:after {
    content: "\e966";
    font-size: 16px;
    line-height: 1;
}
.rate-calendar .st-availability-calendar-wrapper .daterangepicker.dropdown-menu .calendar .calendar-table .table-header .next,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .next {
    font-family: "traveler-icon" !important;
}
.rate-calendar .st-availability-calendar-wrapper .daterangepicker.dropdown-menu .calendar .calendar-table .table-header .next:after,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .next:after {
    content: "\e968";
    font-size: 16px;
    line-height: 1;
}

/* Ensure calendar left/right take full width when nested inside our wrapper,
   defeating the default daterangepicker `max-width: 270px` so the two months
   sit side by side in the 8/12 column layout of the rental detail page. */
/* Khung ngoài (.st-availability-calendar-wrapper) được áp dụng cho CẢ
   rental-detail VÀ home search apex. Đây là khung bo 14px duy nhất hiển
   thị — phía trong là .daterangepicker.dropdown-menu hoàn toàn trong
   suốt nên không tạo khung thứ 2. */
.rate-calendar .st-availability-calendar-wrapper {
    border: 1px solid #DEDEDE !important;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08) !important;
    border-radius: 14px !important;
    background: #fff !important;
    padding: 20px 18px 18px !important;
    overflow: hidden;
    /* Anchor the absolutely-positioned .st-avail-controls so the prev/next
       buttons hug the left/right edges of the calendar wrapper (not the
       page). Without this, .st-avail-controls resolves its `left:0;
       right:0` against the next ancestor with `position: relative` and
       the buttons end up misplaced. */
    position: relative;
}
/* Trang chủ (home-search-calendar) KHONG muốn khung — chỉ áp dụng cho
   rental-detail. Vì cả 2 component dùng chung .st-availability-calendar-wrapper,
   ta lấy lại các thuộc tính về `none` / `0` cho riêng .home-search-calendar.

   main.css (line ~6015) cho .show-calendar: bg #fff + border + box-shadow +
   border-radius 20px. Cũng phải tắt ở đây. */
.home-search-calendar .st-availability-calendar-wrapper,
.home-search-calendar .st-availability-calendar-wrapper.show-calendar,
.home-search-calendar .show-calendar {
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    padding: 0 !important;
}
/* main.css (line ~6015) đặt .st-availability-calendar-wrapper, .show-calendar
   CHUNG 1 block: border 1px + box-shadow + border-radius 20px + #fff.
   Điều đó vẽ thêm 1 khung thứ 2 trên .daterangepicker.dropdown-menu.show-calendar
   (vì cả wrapper lẫn .show-calendar đều match selector đó). Triệt tiêu khung
   thứ 2 ở đây, KHÔNG ảnh hưởng layout 2 bảng tháng bên trong. */
.rate-calendar .st-availability-calendar-wrapper .daterangepicker.dropdown-menu.show-calendar {
    background: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    padding: 0 !important;
}
/* Bỏ ép border/box-shadow/border-radius trên .show-calendar để picker mở
   giữ được khung trắng + bóng đổ + bo góc (các thuộc tính này sẽ được
   cung cấp bởi rule phía dưới cho .daterangepicker.dropdown-menu). */
/* Triệt tiêu hoàn toàn khung trong của .daterangepicker.dropdown-menu.
   Khung duy nhất là ở .st-availability-calendar-wrapper (rule phía trên).
   Selector này áp dụng cho CẢ rental-detail VÀ home search apex. */
.rate-calendar .st-availability-calendar-wrapper > .daterangepicker.dropdown-menu {
    width: 100% !important;
    max-width: none !important;
    display: flex !important;
    flex-wrap: nowrap;
    margin: 0 !important;
    position: relative !important;
    top: 0 !important;
    left: 0 !important;
    right: auto !important;
    box-sizing: border-box;
    padding: 0 !important;
    background: transparent !important;
    background-color: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    overflow: hidden;
}
/* Triệt tiêu luôn khung của .calendar-table (bo 4px, viền trắng 1px) để
   không tạo khung thứ 3 nằm giữa .daterangepicker.dropdown-menu và
   bảng ngày. Áp dụng cho CẢ rental-detail VÀ home search apex. */
.rate-calendar .st-availability-calendar-wrapper .daterangepicker.dropdown-menu .calendar-table {
    border: 0 !important;
    border-radius: 0 !important;
    padding: 0 !important;
}
/* Day labels (Mo Tu We...) must be a horizontal flex row so they align with the 7 cells below */
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-sub-header {
    display: flex !important;
    flex-wrap: nowrap;
    border-top: 1px solid #DEDEDE;
    margin-top: 8px;
    padding-top: 8px;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-sub-header .day-off-week {
    width: 14.2857% !important;
    height: 32px !important;
    text-align: center;
    font-weight: 500;
    font-size: 13px;
    line-height: 1.4;
    color: var(--grey-color, #5E6D77);
    display: flex !important;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
}
/* SCOPE: desktop only (>=992px). On phone/tablet we drop the 50/50
   side-by-side layout — the mobile-only block at @media (max-width:
   991.98px) below forces .calendar.left to full width and hides
   .calendar.right. */
@media (min-width: 992px) {
.rate-calendar .st-availability-calendar-wrapper .daterangepicker .calendar {
    float: left !important;
    flex: 0 1 auto !important;
    min-width: 0 !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar.left,
.rate-calendar .st-availability-calendar-wrapper .calendar.right {
    flex: 0 0 calc(50% - 12px) !important;
    max-width: calc(50% - 12px) !important;
    width: calc(50% - 12px) !important;
}
}
.rate-calendar .st-availability-calendar-wrapper .calendar-table {
    width: 100% !important;
    table-layout: fixed;
}
/* Scope EXCLUDES .home-search-calendar (used on home + rental-search pages
   where there is no framed wrapper). The home/search layout uses its own
   rule below for margin-left 24px without the calc() shrink.
   SCOPE: desktop only (>=992px). On phone/tablet we drop the 50%
   side-by-side layout and the .calendar.right stack — the mobile-only
   rules below force .calendar.left to 100% width and hide .calendar.right. */
@media (min-width: 992px) {
.rate-calendar:not(.home-search-calendar) .st-availability-calendar-wrapper .calendar.left,
.rate-calendar:not(.home-search-calendar) .st-availability-calendar-wrapper .calendar.right {
    width: 50% !important;
    max-width: none !important;
    box-sizing: border-box;
    float: left !important;
    /* Keep the two calendars side-by-side in the flex container;
       `flex` shorthand is shorthand for flex-grow/shrink/basis, so
       `0 0 50%` makes them rigid 50% columns with no shrinking. */
    flex: 0 0 50% !important;
    display: block !important;
}
}
/* Push the right month 24px away from the left month. The daterangepicker
   wrapper is a flex container; we set flex-basis to calc(50% - 24px) on
   both months so they fit at full 50% width MINUS 24px of empty space
   between them. flex-shrink: 0 keeps them rigid so wrapping doesn't
   accidentally drop the right month onto a new line.

   Scope EXCLUDES .home-search-calendar (used on home + rental-search pages
   where there is no framed wrapper). The home/search layout uses its own
   rule below for margin-left 24px without the calc() shrink.
   SCOPE: desktop only. The 50/50 split is meaningless on phones. */
@media (min-width: 992px) {
.rate-calendar:not(.home-search-calendar) .st-availability-calendar-wrapper .calendar.left {
    flex: 0 0 calc(50% - 12px) !important;
    max-width: calc(50% - 12px) !important;
    width: calc(50% - 12px) !important;
}
.rate-calendar:not(.home-search-calendar) .st-availability-calendar-wrapper .calendar.right {
    flex: 0 0 calc(50% - 12px) !important;
    max-width: calc(50% - 12px) !important;
    width: calc(50% - 12px) !important;
    margin-left: 24px !important;
}
}
/* Trang chủ + trang search (.home-search-calendar): không khung, KHONG dín sát
   2 tháng — vẫn giữ gap 24px. flex-basis 50% (không calc -24px) vì gap tạo bởi
   margin-left thôi. */
.home-search-calendar .st-availability-calendar-wrapper .calendar.left,
.home-search-calendar .st-availability-calendar-wrapper .calendar.right {
    flex: 0 0 50% !important;
    max-width: 50% !important;
    width: 50% !important;
}
.home-search-calendar .st-availability-calendar-wrapper .calendar.right {
    margin-left: 24px !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table {
    width: 100%;
    /* On the left month the .calendar div has the table at 100% of 50%.
       On the right month (calc(50% - 24px)) the table is also at 100%
       of that, which is fine — both tables are visually the same width
       because the left .calendar is 50% wide and the right .calendar is
       also ~half the wrapper minus the gap. */
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed {
    width: 100%;
    table-layout: fixed;
    border-collapse: collapse;
    border-spacing: 0;
    empty-cells: hide;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date {
    width: 14.2857% !important;
    height: 64px !important;
    padding: 4px 2px;
    vertical-align: top;
    border-radius: 6px;
    box-sizing: border-box;
    position: relative;
    cursor: pointer;
}
body.st-mod-style .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date {
    height: 60px !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date .date {
    width: 32px;
    height: 32px !important;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    font-size: 14px;
    line-height: 16px;
    color: var(--heading-color, #232323);
    flex: none !important;
    margin: 8px auto 0;
    border-radius: 50%;
    transition: background 0.15s ease, color 0.15s ease;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date .event-tooltip-wrap {
    display: none !important;
    position: absolute;
    bottom: -28px;
    left: 50%;
    transform: translateX(-50%);
    width: auto;
    min-width: 56px;
    max-width: 110px;
    height: 22px;
    padding: 3px 6px;
    text-align: center;
    font-size: 11px;
    line-height: 14px;
    font-weight: 600;
    color: #ffffff;
    background: #232323;
    border: none;
    border-radius: 4px;
    white-space: nowrap;
    z-index: 5;
    box-shadow: 0 2px 6px rgba(0,0,0,.30);
    pointer-events: none;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date .event-tooltip-wrap::before {
    display: none !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date .event-tooltip {
    display: inline;
    color: #fff;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.active .event-tooltip-wrap,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date:hover .event-tooltip-wrap {
    display: block !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today .event-tooltip-wrap,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.active .event-tooltip-wrap,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.in-range .event-tooltip-wrap,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.start-date .event-tooltip-wrap,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.end-date .event-tooltip-wrap {
    display: none !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today:hover .event-tooltip-wrap {
    display: block !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.off.not-show:hover .event-tooltip-wrap,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.disabled:hover .event-tooltip-wrap {
    display: none !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.off.not-show {
    opacity: 0 !important;
    height: 0 !important;
    min-height: 0 !important;
    max-height: 0 !important;
    width: 14.2857% !important;
    min-width: 0 !important;
    max-width: 14.2857% !important;
    padding: 0 !important;
    margin: 0 !important;
    border: 0 !important;
    line-height: 0 !important;
    font-size: 0 !important;
    overflow: hidden !important;
    pointer-events: none;
    visibility: collapse !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.off.not-show .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.off.not-show .event-tooltip-wrap {
    display: none !important;
    height: 0 !important;
    line-height: 0 !important;
    visibility: hidden;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.disabled {
    color: #B1BAC1;
    cursor: not-allowed;
    background: #efefef;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.disabled .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.disabled .event-tooltip-wrap {
    color: #B1BAC1;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.in-range,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.active,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.start-date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.end-date {
    background: #E8F0FF !important;
    border-radius: 6px !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today:hover,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.in-range:hover,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.active:hover {
    background: #DCE7FF !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today .date {
    background: transparent;
    color: var(--orange-color, #FA5636);
    font-weight: 700;
    border-radius: 50%;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.active .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.in-range .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.start-date .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.end-date .date {
    background: transparent !important;
    color: var(--orange-color, #FA5636) !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.active .date {
    background: transparent;
    color: var(--heading-color, #232323);
    font-weight: 600;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.in-range .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.start-date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.end-date {
    background: transparent;
    color: #ffffff;
    font-weight: 600;
}
/* ============================================================
   Range selection — blue background on the picked date range.
   The booking form calendar popup uses two-click range picking:
   first click = .start-date, second click = .end-date, every date
   in between = .in-range. We paint the cells blue so the user can
   see exactly which nights they have selected. The pill is rounded
   only on the outermost cells (left edge of start, right edge of
   end) so the bar reads as one continuous strip.
   ============================================================ */
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.start-date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.end-date {
    background: var(--mh-primary, #5191FA) !important;
    border-radius: 0 !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.start-date.end-date {
    border-radius: 6px !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.in-range {
    background: var(--mh-primary, #5191FA) !important;
    border-radius: 0 !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.in-range .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.start-date .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.end-date .date {
    color: #ffffff;
}
/* Override the default `.today` highlight when today is part of the
   selected range — the user expects a uniform blue bar, not a today
   pill that interrupts it. We re-declare with the same `.today.X`
   triple-class selector that beats the earlier `.today` rule. */
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.start-date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.end-date {
    background: var(--mh-primary, #5191FA) !important;
    border-radius: 0 !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.start-date .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.end-date .date {
    color: #ffffff !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.in-range {
    background: var(--mh-primary, #5191FA) !important;
    border-radius: 0 !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.today.in-range .date {
    color: #ffffff !important;
}
/* Round only the outer edges so the range looks like one connected bar.
   Edge detection: first cell of the first row in the range = left round;
   last cell of the last row in the range = right round. Implemented with
   `:first-child` (left edge) and `:last-child` (right edge) on the row. */
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.start-date:first-child,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.in-range:first-child {
    border-top-left-radius: 6px !important;
    border-bottom-left-radius: 6px !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.end-date:last-child,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.in-range:last-child {
    border-top-right-radius: 6px !important;
    border-bottom-right-radius: 6px !important;
}
/* When the start and end land on the SAME row, round both ends of that row. */
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.start-date:last-child {
    border-top-right-radius: 6px !important;
    border-bottom-right-radius: 6px !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.end-date:first-child {
    border-top-left-radius: 6px !important;
    border-bottom-left-radius: 6px !important;
}
/* Hover preview — once a start-date is picked, hovering another available
   date paints the would-be range in a lighter blue so the user can see the
   range before committing the second click. */
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.range-hover {
    background: rgba(81, 145, 250, 0.10) !important;
    border-radius: 0 !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.range-hover-end {
    background: rgba(81, 145, 250, 0.45) !important;
    border-radius: 0 !important;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.available:hover {
    background: rgba(81, 145, 250, 0.12);
    border-radius: 6px;
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.available:hover .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.active .date {
    background: transparent;
    color: var(--heading-color, #232323);
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.weekend .date {
    color: var(--orange-color, #FA5636);
}
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.available.weekend:hover .date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date.available.weekend.active .date {
    background: transparent;
    color: var(--orange-color, #FA5636);
}
@media (max-width: 575.98px) {
    .rate-calendar .st-availability-calendar-wrapper .calendar.left,
    .rate-calendar .st-availability-calendar-wrapper .calendar.right {
        width: 100% !important;
    }
}

/* Hide the default daterangepicker popup arrow (the small triangle that points
   up to the input — the user kept reporting a "faint up-arrow" on the left of
   the calendar). The arrow is rendered via the :before/:after pseudo-elements
   of the `.daterangepicker` container, so we null them out entirely. */
.rate-calendar .st-availability-calendar-wrapper .daterangepicker.dropdown-menu:before,
.rate-calendar .st-availability-calendar-wrapper .daterangepicker.dropdown-menu:after {
    display: none !important;
    content: none !important;
}

/* Loading state for the prev/next arrows while we fetch the next month. */
.rate-calendar .st-availability-calendar-wrapper .table-header .next.is-loading,
.rate-calendar .st-availability-calendar-wrapper .table-header .prev.is-loading {
    opacity: .5;
    pointer-events: none;
}

/* ============================================================
   Calendar pills — no rounded circles anywhere.
   The cloned Traveler theme forces `border-radius: 50%` on
   `.td-date.today .date` so the highlighted "today" cell renders
   as a circle. The user wants no circles on the calendar grid at
   all (today, start, end, active, etc. should all read as flat
   rectangles). The previous fix below strips every rounded corner
   on the grid cells and their inner `.date` digits.
   ============================================================ */
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date,
.rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date .date {
    border-radius: 0 !important;
}

/* Same reset for the inner daterangepicker dropdown that the theme
   ships with, so the traveler-style calendar doesn't reintroduce the
   circle when a different page mounts the original picker. */
.st-mod-style .daterangepicker.dropdown-menu .calendar .calendar-table .table-condensed tbody tr .td-date,
.st-mod-style .daterangepicker.dropdown-menu .calendar .calendar-table .table-condensed tbody tr .td-date .date {
    border-radius: 0 !important;
}

/* Centered prev/next controls that swap BOTH calendars at once.
   Positioned absolutely at the outer edges so they don't take up flex
   space and push the two .calendar.left/right columns to a new row. */
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls {
    position: absolute !important;
    top: -5px !important;
    left: 0 !important;
    right: 0 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: 0 16px 0 16px !important;
    background: transparent !important;
    z-index: 50 !important;
    pointer-events: none !important;
    margin: 0 !important;
    width: auto !important;
    height: auto !important;
    transform: none !important;
}
/* Home + rental-search banners both render the calendar inside
   `.st-banner-search-form.style_2`. On those pages the popup sits closer
   to the input so the centered prev/next controls nudge up by 4px to
   stay aligned with the month labels. */
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .st-avail-controls {
    top: -1px !important;
}
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls .st-avail-prev,
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls .st-avail-next {
    background: transparent;
    color: var(--heading-color, #232323);
    cursor: pointer;
    font-size: 22px;
    line-height: 1;
    padding: 4px 8px;
    transition: color 0.15s ease;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    pointer-events: auto;
    border: none;
    border-radius: 0;
    width: auto;
    height: auto;
    position: relative !important;
    z-index: 50 !important;
}
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls .st-avail-prev:hover,
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls .st-avail-next:hover {
    color: var(--mh-primary, #5191FA);
    background: transparent !important;
}
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls .st-avail-prev[disabled],
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls .st-avail-next[disabled],
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls .st-avail-prev.is-loading,
.rate-calendar .st-availability-calendar-wrapper .st-avail-controls .st-avail-next.is-loading {
    opacity: .5;
    cursor: not-allowed;
    pointer-events: none;
}

.st-calendar .calendar_input {
    width: 100%; padding: 14px 18px; border-radius: 8px;
    border: 1px solid #DEDEDE; cursor: pointer;
    background: var(--mh-bg-soft, #f5f7fa) url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%235E6D77'%3e%3cpath d='M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20a2 2 0 002 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V10h14v10zM5 8V6h14v2H5z'/%3e%3c/svg%3e") no-repeat right 16px center / 18px;
    color: var(--heading-color, #232323); font-size: 14px;
}

/* Map */
.st-map-box { margin-top: 16px; }
.st-map-box .mh-map { width: 100%; }

/* Reviews */
.st-reviews .review-box {
    background: var(--mh-bg-soft, #f5f7fa);
    border-radius: 12px; padding: 24px;
}
.st-review-box-top { margin-bottom: 24px; }
.st-review-box-top .stt-icon-star1,
.reviews .stt-icon-star1,
.review-stars .stt-icon-star1,
.st-review-score .reviews .stt-icon-star1 { color: #ffb400 !important; }
.st-review-box-top .stt-icon-star1 { font-size: 24px; margin-right: 8px; }
.st-review-box-top .review-score {
    font-size: 28px; font-weight: 700; color: var(--heading-color, #232323);
    margin-right: 12px;
}
.st-review-box-top .review-score .per-total { font-size: 14px; color: var(--grey-color, #5E6D77); font-weight: 400; }
.st-review-box-top .review-score-text { color: var(--heading-color, #232323); font-weight: 500; margin-right: 12px; }
.st-review-box-top .review-score-base { color: var(--grey-color, #5E6D77); font-size: 14px; }
.st-summany { gap: 16px; }
.st-summany .item { flex: 1 1 45%; margin-bottom: 8px; }
.st-summany .label { color: var(--grey-color, #5E6D77); font-size: 14px; }
.st-summany .progress {
    height: 6px; background: #EAEEF3; border-radius: 3px; overflow: hidden;
    margin: 0 12px;
}
.st-summany .percent { height: 100%; background: var(--main-color, #ff5c02); border-radius: 3px; }
.st-summany .number { color: var(--heading-color, #232323); font-weight: 600; font-size: 14px; }
.review-pagination { margin-top: 16px; }
.review-pagination .summary { color: var(--grey-color, #5E6D77); font-size: 14px; }

/* Override main.css `.reviews .rate` (which paints a blue pill with border).
   Strip the frame + background and use plain black text. */
.services-item.item-elementor .item .content-item .reviews .rate {
    background: transparent !important;
    border: 0 !important;
    padding: 0 !important;
    color: #000 !important;
}

/* Booking form sidebar */
.st-fixed-form-booking { position: sticky; top: 100px; width: 100%; }
.st-form-book-wrapper {
    background: #fff;
    border: 1px solid #DEDEDE;
    border-radius: 20px;
    padding: 0;
    box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.08), 0px 4px 12px rgba(0, 0, 0, 0.05);
    margin-bottom: 30px;
    overflow: hidden;
}
.form-booking-price {
    padding: 24px 24px 20px;
    border-bottom: 1px solid #EAEEF3;
    margin-bottom: 0;
}
.st-form-book-wrapper .close-icon.hide { display: none; }
.st-form-book-wrapper .close-icon {
    position: absolute;
    top: 16px;
    right: 16px;
    font-size: 18px;
    color: var(--grey-color, #5E6D77);
    cursor: pointer;
    z-index: 2;
}
/* Original (struck-through) price — small, muted */
.st-form-book-wrapper .st-price .price-regular span {
    font-size: 13px; font-weight: 400; color: var(--grey-color, #5E6D77);
    text-decoration: line-through;
}
.st-form-book-wrapper .st-price-origin {
    margin-top: 4px; gap: 6px;
    align-items: center;
}
.st-price-origin .st-unit { font-size: 14px; color: var(--grey-color, #5E6D77); margin-right: 4px; vertical-align: baseline; }
/* "From:" sale price — bold, black, slightly larger */
.st-price-origin .price {
    font-size: 22px; font-weight: 700; color: var(--heading-color, #232323);
    text-decoration: none; vertical-align: baseline; line-height: 1; display: inline-block;
}
.st-form-book-wrapper .st-review-score .reviews { font-size: 13px; color: var(--grey-color, #5E6D77); }
.st-form-book-wrapper .st-review-score .reviews i { color: #ffb400; margin-right: 4px; }
.st-form-book-wrapper .st-review-score .rate { font-weight: 700; color: var(--heading-color, #232323); }

/* Form fields — unified card with bordered rows */
.st-form-booking-action { padding: 0; }
.st-group-form {
    display: flex; flex-direction: column; gap: 0;
}
.form-date-field {
    border-bottom: 1px solid #DEDEDE;
    position: relative;
}
.form-date-field .st_grid_date {
    display: grid; grid-template-columns: 1fr 1fr;
    list-style: none; padding: 0; margin: 0;
}
.st_grid_date li {
    border-right: 1px solid #DEDEDE;
}
.st_grid_date li:last-child { border-right: 0; }
.st-item-date {
    padding: 16px 20px; cursor: pointer;
    transition: background .2s;
}
.st-item-date:hover { background: #f8f9fa; }
.st-item-date label {
    display: block; font-size: 12px; color: var(--grey-color, #5E6D77);
    margin-bottom: 4px; text-transform: uppercase; font-weight: 500;
}
.st-item-date .render {
    font-weight: 600; color: var(--heading-color, #232323); font-size: 15px;
}
.check-in-out { display: none; }

.form-guest-search {
    display: flex; flex-direction: column;
    border-bottom: 1px solid #DEDEDE;
}
.guest-wrapper {
    display: flex; align-items: center; justify-content: space-between;
    padding: 14px 20px;
}
.guest-wrapper:not(:last-child) {
    border-bottom: 1px solid #EAEEF3;
}
.check-in-wrapper label { font-size: 15px; color: var(--heading-color, #232323); font-weight: 500; margin: 0; }
.st-number-wrapper {
    background: #fff; border-radius: 6px; padding: 2px;
    min-width: 110px; display: inline-flex; align-items: center; justify-content: space-between;
}
.st-number-wrapper .prev,
.st-number-wrapper .next {
    width: 30px; height: 30px; border-radius: 50%;
    border: 1px solid #DEDEDE; display: inline-flex;
    align-items: center; justify-content: center;
    cursor: pointer; transition: all .2s; user-select: none;
    background: #fff;
}
.st-number-wrapper .prev:hover,
.st-number-wrapper .next:hover { background: var(--main-color, #ff5c02); border-color: var(--main-color, #ff5c02); }
.st-number-wrapper .prev:hover svg path,
.st-number-wrapper .next:hover svg path { stroke: #fff; }
.st-number-wrapper .st-input-number {
    width: 36px; text-align: center; border: 0; background: transparent;
    font-weight: 600; color: var(--heading-color, #232323); padding: 0; font-size: 16px;
}

.guest_name_input {
    padding: 16px 20px;
    border-bottom: 1px solid #DEDEDE;
}
.guest_name_input > label { display: block; font-size: 15px; font-weight: 500; margin-bottom: 10px; color: var(--heading-color, #232323); }
.guest_name_input .required { color: var(--main-color, #ff5c02); }
.guest_name_control .control-item { display: flex; gap: 8px; }
.guest_name_control select { max-width: 90px; }
.guest_name_control .form-control {
    padding: 10px 14px; border: 1px solid #DEDEDE; border-radius: 8px;
    font-size: 14px; flex: 1;
}

.form-more-extra {
    padding: 8px 20px;
    border-bottom: 1px solid #DEDEDE;
}
.form-more-extra a {
    color: var(--mh-primary, #5191FA); text-decoration: none;
    font-size: 14px; font-weight: 500; padding: 8px 0;
}
.form-more-extra a:hover { color: var(--main-color, #ff5c02); }
.extras {
    list-style: none; padding: 12px; margin: 8px 0 0;
    background: var(--mh-bg-soft, #f5f7fa); border-radius: 8px;
}
.extras li { padding: 6px 0; font-size: 14px; color: var(--heading-color, #232323); display: flex; justify-content: space-between; align-items: center; }
.extras .extra-price { color: var(--main-color, #ff5c02); font-weight: 600; }

.total-price-book {
    padding: 16px 20px; background: #fff;
    border-bottom: 1px solid #DEDEDE;
    margin-top: 0;
}
.total-price-book .label { font-weight: 500; color: var(--heading-color, #232323); }
.total-price-book .value { font-weight: 700; color: var(--main-color, #ff5c02); font-size: 18px; }

.submit-group {
    padding: 20px 24px 24px;
    margin-top: 0;
}
.btn-v2.btn-primary {
    width: 100%; background: var(--main-color, #ff5c02); color: #fff;
    border: 0; padding: 14px 24px; border-radius: 50px;
    font-size: 16px; font-weight: 600; transition: opacity .2s;
    display: flex; align-items: center; justify-content: center; gap: 8px;
}
.btn-v2.btn-primary:hover { opacity: .9; }
.btn-v2.btn-primary .fa-spinner { display: none; }

/* Why book with us */
.widget-box.st-badge-widget {
    background: #fff; border: 1px solid #EAEEF3; border-radius: 12px;
    padding: 24px;
}
.widget-box .heading {
    font-size: 18px; font-weight: 700; margin: 0 0 16px;
    color: var(--heading-color, #232323);
}
.st-list-badges { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 16px; }
.st-list-badges li { gap: 14px; }
.st-list-badge { width: 48px; height: 48px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }
.st-list-badge i { font-size: 28px; }
.content-badge .title { font-weight: 600; font-size: 17px; color: var(--heading-color, #232323); margin: 0; }
.content-badge .content { font-size: 15px; color: var(--grey-color, #5E6D77); margin: 0; line-height: 1.5; }

/* Related rentals */
.relate-rooms { margin-top: 30px; }
.relate-rooms .st-heading-section { margin-bottom: 24px; }

/* Mobile: horizontal scroll-snap carousel — each card takes essentially the
   full viewport width so swiping feels like flipping pages, not peeking at
   a sliver of the next card. Cards use the standard Bootstrap markup
   (col-12 col-sm-6 col-md-6 col-lg-4); we override Bootstrap's flex columns
   with !important so the row scrolls horizontally on phones. Desktop
   (≥768px) falls back to the Bootstrap grid (col-sm-6 / col-lg-4). */
@media (max-width: 767.98px) {
    .relate-rooms .mh-related-row {
        display: flex !important;
        flex-wrap: nowrap !important;
        overflow-x: auto !important;
        overflow-y: hidden !important;
        scroll-snap-type: x mandatory !important;
        /* Padding on both sides so cards float nicely inside the viewport,
           snap point matches the left padding so the first card lines up
           flush with that padding (not the viewport edge). */
        scroll-padding-left: 16px !important;
        -webkit-overflow-scrolling: touch !important;
        margin: 0 !important;
        padding: 4px 16px 16px !important;
        gap: 12px !important;
    }
    /* Mobile carousel pattern matches the home-page testimonial swiper:
       one active card fills nearly the full viewport, with a small ~16px
       peek of the next card (matches `margin-right: 16px` in the swiper
       markup). On a 390px viewport the card is 390 − 32 (row padding) − 16
       (peek) = 342px. Peek is small enough that no border/shadow from the
       next card is visible, so the `visibility: hidden` JS hack from the
       earlier revision is no longer needed. */
    .relate-rooms .mh-related-col {
        flex: 0 0 calc(100vw - 32px - 16px) !important;
        max-width: calc(100vw - 32px - 16px) !important;
        width: calc(100vw - 32px - 16px) !important;
        scroll-snap-align: start !important;
        padding-left: 0 !important;
        padding-right: 0 !important;
        margin-bottom: 0 !important;
    }
    /* The outer `.services-item` wrapper: width matches the col exactly. */
    .relate-rooms .mh-related-col > .services-item {
        width: 100% !important;
        padding: 0 !important;
        margin: 0 !important;
        box-sizing: border-box !important;
    }
    /* The actual card. `box-sizing: border-box` so padding is included in
       width; clip overflow so any internal border/shadow can't leak out. */
    .relate-rooms .mh-related-col > .services-item > .item.service-border {
        width: 100% !important;
        box-sizing: border-box !important;
        border-radius: 10px !important;
        overflow: hidden !important;
    }
    /* Featured image uses `aspect-ratio` (not a fixed `height`) so the image
       scales fluidly with the card width. The inline markup hard-codes
       `height: 280px !important`, so we override it here. */
    .relate-rooms .mh-related-col .services-item .featured-image {
        height: auto !important;
        padding-bottom: 0 !important;
        aspect-ratio: 16 / 10;
        width: 100% !important;
    }
    .relate-rooms .mh-related-col .services-item .featured-image .image-feature {
        height: 100% !important;
        width: 100% !important;
        object-fit: cover;
    }
    /* Even, tighter content padding on all sides — clean alignment. */
    .relate-rooms .mh-related-col .services-item .content-item {
        padding: 10px 12px 12px !important;
        width: 100% !important;
        box-sizing: border-box !important;
    }
    /* Force title to wrap (theme default is wrap, but some inherited rules
       can set nowrap). Also allow long words to break cleanly. */
    .relate-rooms .mh-related-col .services-item .content-item .title {
        font-size: clamp(13px, 3.6vw, 15px) !important;
        line-height: 1.3 !important;
        margin: 4px 0 6px !important;
        white-space: normal !important;
        overflow-wrap: break-word !important;
        word-break: break-word !important;
        display: -webkit-box !important;
        -webkit-line-clamp: 2 !important;
        -webkit-box-orient: vertical !important;
        overflow: hidden !important;
    }
    .relate-rooms .mh-related-col .services-item .content-item .sub-title {
        font-size: clamp(11px, 2.8vw, 12px) !important;
        line-height: 1.4 !important;
        margin: 0 0 4px !important;
        white-space: normal !important;
        overflow-wrap: break-word !important;
        display: -webkit-box !important;
        -webkit-line-clamp: 1 !important;
        -webkit-box-orient: vertical !important;
        overflow: hidden !important;
    }
    /* Reviews row: keep label + rating on the same line, allow truncation
       only on the summary text. */
    .relate-rooms .mh-related-col .services-item .amenities,
    .relate-rooms .mh-related-col .services-item .reviews {
        font-size: clamp(11px, 2.8vw, 12px) !important;
        margin: 4px 0 !important;
        display: flex !important;
        flex-wrap: wrap !important;
        align-items: center !important;
        gap: 6px !important;
    }
    .relate-rooms .mh-related-col .services-item .amenities .amenity {
        margin-right: 0 !important;
        font-size: clamp(11px, 2.8vw, 12px) !important;
        white-space: nowrap !important;
    }
    .relate-rooms .mh-related-col .services-item .section-footer {
        margin-top: 8px !important;
        padding-top: 8px !important;
    }
    .relate-rooms .mh-related-col .services-item .price-tour .price {
        font-size: clamp(13px, 3.4vw, 14px) !important;
    }
    .relate-rooms .mh-related-col .services-item .price-tour .unit {
        font-size: clamp(10px, 2.6vw, 11px) !important;
    }
    /* Keep the card itself fully visible (theme has rules that hide/swipe items
       when inside a carousel container). */
    .relate-rooms .mh-related-col .services-item {
        display: block !important;
        visibility: visible !important;
        opacity: 1 !important;
        transform: none !important;
    }
    /* Hide scrollbar for a cleaner mobile look. */
    .relate-rooms .mh-related-row { scrollbar-width: none; -ms-overflow-style: none; }
    .relate-rooms .mh-related-row::-webkit-scrollbar { display: none; }
}

/* Related rentals — mobile carousel pagination dots (rendered by JS in
   pages/rental-detail.blade.php). Styled to look identical to Owl Carousel's
   default `.owl-dots` so they blend with the rest of the theme. */
.relate-rooms .owl-dots {
    text-align: center;
    -webkit-tap-highlight-color: transparent;
    padding-top: 8px;
}
.relate-rooms .owl-dots .owl-dot {
    display: inline-block;
    zoom: 1;
    background: transparent;
    border: 0;
    padding: 0;
    margin: 0 4px;
    cursor: pointer;
    line-height: 1;
}
.relate-rooms .owl-dots .owl-dot span {
    width: 10px;
    height: 10px;
    display: block;
    background: #C9D2DD;
    border-radius: 50%;
    transition: background-color .2s ease, transform .2s ease;
}
.relate-rooms .owl-dots .owl-dot.active span {
    background: var(--orange-color, #FA5636);
    transform: scale(1.15);
}
.relate-rooms .owl-dots .owl-dot:hover span {
    background: rgba(250, 86, 54, 0.55);
}
/* Mobile carousel styling is now inlined in pages/rental-detail.blade.php
   so it's guaranteed to load with the page render (no extra HTTP request,
   no CSS cache issues). Desktop falls back to Bootstrap grid (col-sm-6 /
   col-lg-4) which is already in the markup. */

/* Mapbox-specific */
.mapboxgl-popup-content { padding: 0 !important; border-radius: 8px; overflow: hidden; }
.item-service-map .thumb img { width: 100%; height: 100px; object-fit: cover; }
.item-service-map .content { padding: 10px; }
.item-service-map .service-title { font-size: 14px; margin: 0 0 4px; }

/* ===== Rental search pagination ===== */
.mh-rs-pagination {
    margin-top: 24px;
    margin-bottom: 24px;
}

.mh-rs-pagination .pagination {
    gap: 4px;
    flex-wrap: wrap;
    justify-content: center;
}

.mh-rs-pagination .page-item .page-link {
    border: 1px solid #e0e0e0;
    border-radius: 8px;
    color: #333;
    padding: 8px 14px;
    font-size: 14px;
    transition: all 0.2s ease;
    background: #fff;
}

.mh-rs-pagination .page-item .page-link:hover {
    background-color: #f5f5f5;
    border-color: #ccc;
    color: #333;
}

.mh-rs-pagination .page-item.active .page-link {
    background-color: var(--main-color, #ff5c02);
    border-color: var(--main-color, #ff5c02);
    color: #fff;
}

.mh-rs-pagination .page-item.disabled .page-link {
    color: #aaa;
    border-color: #eee;
    background-color: #fafafa;
    pointer-events: none;
}

/* Mobile responsiveness */
@media (max-width: 991.98px) {
    .st-fixed-form-booking { position: static; }
}
@media (max-width: 767.98px) {
    .st-form-book-wrapper { padding: 18px; }
    /* Keep gallery compact on mobile — see rule above (lines ~412) for the
       canonical mobile sizing. Updated together so the two rules stay in
       sync and don't leave the gallery at the old 180×3 height. */
    .st-list-item-gallery { grid-template-columns: 1fr 1fr; grid-template-rows: 150px 150px; }
    .st-list-item-gallery .item-gallery:nth-child(1) { grid-row: 1; grid-column: 1 / span 2; height: 190px; }
    .st-summany .item { flex: 1 1 100%; }
    /* Drop the 30px top gap between the gallery and the two-column row on
       mobile — the booking form sits right under the gallery on small
       screens, so the extra spacing just creates dead vertical space. The
       desktop `style="margin-top: 30px;"` inline rule is left intact above
       768px. */
    .st-hotel-room-content > .container > .st-hotel-room-content > .row,
    .st-hotel-room-content .row[style*="margin-top"] { margin-top: 0 !important; }
    /* Mobile: hide the right column (.col-lg-4) entirely. The booking
       form inside it (.st-fixed-form-booking) is repurposed on mobile by
       the existing fullscreen-overlay handler further down in this file
       (it gets promoted to a position:fixed overlay when the user taps
       the bottom bar's "Check" button), so it MUST stay in the DOM with
       its styles intact. The "Why book with us" widget sits in the same
       column — hiding it here is the user's request so the mobile flow
       only shows price + booking form, nothing else. */
    .col-lg-4 > *:not(.st-fixed-form-booking) { display: none !important; }
}

/* ===== Rental gallery: standalone "All photos" button ===== */
.st-gallery {
    position: relative;
}
.st-gallery-all-photos-btn {
    position: absolute;
    top: 430px;
    right: 16px;
    z-index: 3;
    flex: 1 1 auto;
    padding: 10px 15px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    background: rgba(0, 0, 0, 0.4);
    border: 1px solid rgba(255, 255, 255, 0.7);
    border-radius: 40px !important;
    box-sizing: border-box;
    color: #FFF;
    font-weight: 500;
    font-size: 16px;
    line-height: 20px;
    text-decoration: none;
    cursor: pointer;
    transition: background .2s ease, transform .2s ease, border-color .2s ease;
    text-align: center;
    vertical-align: middle;
    user-select: none;
    box-shadow: none;
}
.st-gallery-all-photos-btn:hover,
.st-gallery-all-photos-btn:focus {
    background: rgba(0, 0, 0, 0.6);
    border-color: #fff;
    color: #FFF;
    transform: translateY(-1px);
    outline: none;
}
.st-gallery-all-photos-btn svg {
    flex: 0 0 auto;
}

/* Hide magnificPopup close button */
button.mfp-close,
.mfp-close {
    display: none !important;
}

/* ===== MagnificPopup arrows (prev/next) — circular, border + glass bg ===== */
.mfp-arrow {
    position: absolute !important;
    top: 50% !important;
    left: 32px !important;
    right: auto !important;
    width: 56px !important;
    height: 56px !important;
    padding: 0 !important;
    margin: 0 !important;
    background: rgba(255, 255, 255, 0.15) !important;
    border: 0 !important;
    border-radius: 50% !important;
    color: #fff !important;
    box-shadow: none !important;
    outline: none !important;
    opacity: 0.9 !important;
    cursor: pointer !important;
    -webkit-tap-highlight-color: transparent !important;
    -webkit-appearance: none !important;
    appearance: none !important;
    touch-action: manipulation !important;
    user-select: none !important;
    z-index: 9999 !important;
    transition: background .2s ease, border-color .2s ease, opacity .2s ease, transform .2s ease;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    transform: translateY(-50%) !important;
    font-size: 0 !important;
    line-height: 0 !important;
    text-indent: -9999px !important;
    overflow: hidden !important;
}

/* Hide the default solid triangular arrows */
.mfp-arrow::before,
.mfp-arrow::after {
    display: none !important;
    content: none !important;
    width: 0 !important;
    height: 0 !important;
    border: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    opacity: 0 !important;
}

.mfp-arrow:hover,
.mfp-arrow:focus {
    background: rgba(255, 255, 255, 0.25) !important;
    border-color: transparent !important;
    opacity: 1 !important;
    transform: translateY(-50%) scale(1.05) !important;
    outline: none !important;
}

.mfp-arrow-left {
    left: 32px !important;
    right: auto !important;
}
.mfp-arrow-right {
    right: 32px !important;
    left: auto !important;
}

/* Reintroduce a clean chevron icon via ::before (overrides the hidden one above) */
.mfp-arrow-left::before,
.mfp-arrow-right::before {
    display: block !important;
    width: 12px !important;
    height: 12px !important;
    border-left: 2px solid #fff !important;
    border-bottom: 2px solid #fff !important;
    content: "" !important;
    box-sizing: border-box !important;
    transform-origin: center !important;
    margin: 0 !important;
    padding: 0 !important;
    opacity: 1 !important;
    text-indent: 0 !important;
    position: static !important;
    background: transparent !important;
}
.mfp-arrow-left::before {
    transform: rotate(45deg) !important;
    margin-left: 4px !important;
}
.mfp-arrow-right::before {
    transform: rotate(-135deg) !important;
    margin-right: 4px !important;
}

/* Hide the small inner triangle created by ::after */
.mfp-arrow::after {
    display: none !important;
    content: none !important;
}

@media (max-width: 991.98px) {
    /* override MagnificPopup responsive scale */
    .mfp-arrow,
    .mfp-arrow-left,
    .mfp-arrow-right {
        transform: translateY(-50%) !important;
        transform-origin: center !important;
    }
    .mfp-arrow:hover,
    .mfp-arrow:focus {
        transform: translateY(-50%) scale(1.05) !important;
    }
}

/* ============================================================
   Booking sidebar — extras matching demo megahomestay.vn
   ============================================================ */

/* Loader overlay (booking form) */
.st-form-book-wrapper .loader-wrapper {
    position: absolute;
    inset: 0;
    background: rgba(255, 255, 255, 0.75);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 5;
    border-radius: 20px;
}
.st-form-book-wrapper.is-loading .loader-wrapper {
    display: flex;
}
.st-form-book-wrapper .st-loader {
    width: 36px;
    height: 36px;
    border: 3px solid #EAEEF3;
    border-top-color: var(--main-color, #ff5c02);
    border-radius: 50%;
    animation: st-spin 0.8s linear infinite;
}
@keyframes st-spin {
    to { transform: rotate(360deg); }
}

/* Total price row (matches demo h5 + .st-price-origin structure) */
.total-price-book { width: 100%; }
.total-price-book h5 { margin: 0; font-size: 16px; font-weight: 500; }
.total-price-book #total-value h5 { font-size: 18px; }
.total-price-book #total-value .st-price-origin { gap: 6px; }
.total-price-book #total-value .st-price-origin .price {
    color: var(--main-color, #ff5c02);
    text-decoration: none;
    font-weight: 700;
}

/* Badge images inside "Why book with us" */
.widget-box.st-badge-widget .st-list-badge img {
    max-width: 100%;
    max-height: 48px;
    object-fit: contain;
}
.widget-box.st-badge-widget .st-list-badge { overflow: hidden; }

/* Owner info widget */
.owner-info { background: #fff; border: 1px solid #EAEEF3; border-radius: 12px; padding: 24px; margin-bottom: 24px; }
.owner-info h4.heading { display: none; }
.owner-info .media { display: flex; align-items: center; gap: 16px; }
.owner-info .media-left { flex-shrink: 0; }
.owner-info .media-left img {
    border-radius: 50%;
    object-fit: cover;
    width: 90px;
    height: 90px;
}
.owner-info .media-body h4 { margin: 0; }
.owner-info .media-body h4 a {
    font-weight: 500; font-size: 16px;
    color: var(--heading-color, #232323);
    text-decoration: none;
}
.owner-info .media-body p {
    font-weight: 400; font-size: 14px;
    color: var(--grey-color, #5E6D77);
    margin: 4px 0 0;
}

/* Extras dropdown (matches demo `extras` list with select-wrapper) */
.st-form-book-wrapper .extras .item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 6px 0;
}
.st-form-book-wrapper .extras .item .select-wrapper {
    width: 70px;
}
.st-form-book-wrapper .extras .item .select-wrapper select {
    width: 100%;
    padding: 4px 8px;
    border: 1px solid #DEDEDE;
    border-radius: 6px;
    background: #fff;
    font-size: 14px;
    color: var(--heading-color, #232323);
}

/* ============================================================
   Home banner search — inline 2-month date-range picker
   Toggled by clicking the .date-item-wrapper inside
   .form-date-field on the home banner. 2 months side by side,
   sits below the date field, 2-click selection sets start/end.
   ============================================================ */
/* When the date field is the home banner (`.home-banner-search`) it hosts
   an inline <x-home-search-calendar /> instead of a daterangepicker popup.
   Hide the .check-in-out overlay so its absolute positioning can't trap
   clicks or push the layout around — the inline calendar's own JS handles
   everything (toggle on .date-item-wrapper click, 2-click range, close). */
.form-date-field.home-banner-search .check-in-out {
    display: none !important;
}
/* Trang chủ: bỏ viền dưới của .form-date-field vì nó nằm trong thanh
   search bar liền mạch, không cần gạch ngang phân cách phía dưới. */
.form-date-field.home-banner-search {
    border-bottom: 0;
}

/* Position the .rate-calendar wrapper that hosts <x-home-search-calendar />
   as a popover-style panel under the date field. The calendar inside reuses
   the EXACT same CSS as the rental detail page (scoped to
   `.rate-calendar .st-availability-calendar-wrapper …`), so it renders
   pixel-identical to the rental page. */
.form-date-field.home-banner-search > .rate-calendar {
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    z-index: 50;
    margin-top: 8px;
    display: block;
    width: 90vw;
    max-width: 780px;
    /* Allow the calendar to break out of the form bar (which is only
       ~708px wide). When the form bar is wider than 780px the calendar
       still won't exceed 780px thanks to max-width. */
}
.form-date-field.home-banner-search > .rate-calendar > .st-calendar.home-search-calendar[hidden] {
    display: none !important;
}
/* The calendar wrapper itself is the popover card. */
.form-date-field.home-banner-search > .rate-calendar > .st-calendar.home-search-calendar {
    background: #fff !important;
    border: 1px solid #DEDEDE !important;
    border-radius: 14px !important;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08) !important;
    padding: 10px 14px 14px !important;
    box-sizing: border-box;
    width: fit-content;
    max-width: 100%;
    display: inline-block;
}
/* Match the rental detail page's header size (16px there, not 18px). */
.form-date-field.home-banner-search > .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .month {
    font-size: 16px;
}
/* Home banner calendar: hide the dark price tooltip on hover so the
   popover stays minimal. Other calendars (rental detail page, etc.)
   keep their tooltip untouched. */
.form-date-field.home-banner-search > .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date .event-tooltip-wrap {
    display: none !important;
}
/* Home/banner & search-rental: bỏ khoảng cách và khung của daterangepicker
   lồng bên trong để khung chỉ còn 1 lớp ở .home-search-calendar. */
.form-date-field.home-banner-search > .rate-calendar .st-calendar.home-search-calendar .st-availability-calendar-wrapper > .daterangepicker.dropdown-menu {
    margin: 0 !important;
    width: 100% !important;
    background: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    padding: 0 !important;
}
/* Trang chủ + search-rental: bỏ padding của wrapper trong `.style_2`
   để nó khít vào .st-calendar.home-search-calendar, không tạo khoảng
   trắng giả-lớp khung thứ 2 bên trong. */
.form-date-field.home-banner-search > .rate-calendar .st-banner-search-form.style_2 .st-availability-calendar-wrapper,
.form-date-field.home-banner-search > .rate-calendar .st-calendar.home-search-calendar .st-availability-calendar-wrapper {
    padding: 0 !important;
    max-width: 100% !important;
}
/* Hạt nhân: triệt tiêu nền + box-shadow + border của mọi lớp daterangepicker
   lồng bên trong .home-search-calendar để chỉ còn đúng 1 khung duy nhất
   ở .st-calendar.home-search-calendar. Không đụng đến lịch ở rental-detail. */
.form-date-field.home-banner-search .daterangepicker.dropdown-menu,
.form-date-field.home-banner-search .daterangepicker.dropdown-menu * {
    background-color: transparent !important;
    background-image: none !important;
    box-shadow: none !important;
    -webkit-box-shadow: none !important;
    text-shadow: none !important;
}
.form-date-field.home-banner-search .daterangepicker .calendar-table {
    border: 0 !important;
}
/* Selector cụ thể hơn, scope trực tiếp vào container duy nhất của
   <x-home-search-calendar />. Lịch ở rental-detail KHÔNG có class
   .home-search-calendar nên không bị ảnh hưởng. Đây là lớp bảo hiểm
   cuối cùng để chắc chắn không còn khung trong. */
.st-calendar.home-search-calendar .daterangepicker.dropdown-menu,
.st-calendar.home-search-calendar .daterangepicker.dropdown-menu * {
    background-color: transparent !important;
    background-image: none !important;
    box-shadow: none !important;
    -webkit-box-shadow: none !important;
}
.st-calendar.home-search-calendar .daterangepicker .calendar-table {
    border: 0 !important;
}


/* ============================================================
   /rental-search — sidebar + results layout (mirrors
   megahomestay.vn/rental-search-sidebar/).
   ============================================================ */
.mh-rs-shell {
    background: #F7F8FA;
    padding-bottom: 80px;
    min-height: 60vh;
}

/* Lock every `.container` (topbar + main body) to the same width as the
   global header (`max-w-7xl` = 1280px in Tailwind). Without this explicit
   cap Bootstrap's responsive `.container` rules would expand the body past
   1280px on screens ≥1400px (e.g. 1488px at 1500px viewport) while the
   header stayed at 1280, causing a visible misalignment where the search
   results grid spills beyond the header's edges. Centred with auto margins
   so the left/right gutters always match the header's 80px inset. */
.mh-rs-shell .container,
.mh-rs-topbar .container {
    max-width: 1280px !important;
    width: 100%;
    margin-left: auto !important;
    margin-right: auto !important;
    padding-left: 12px;
    padding-right: 12px;
}

/* --- Top search bar (compact, no big banner) --- */
.mh-rs-topbar {
    background-image: url('../images/Banneractivity-min-1.png');
    background-position: center center;
    background-repeat: no-repeat;
    background-size: cover;
    /* Total height target = 320px (doubled from 160 per design request).
       Vertical padding is split 76 top / 76 bottom so the form sits
       exactly in the middle of the bar regardless of content height,
       while the bar itself stays a clean 320px tall
       (76 + 84 + 76 = 236… adjusted with min-height so the rest is
       evenly split as empty space). */
    min-height: 320px;
    padding: 76px 12px;
    display: flex;
    align-items: center;
    margin-bottom: 28px;
}
.mh-rs-topbar .mh-rs-topbar-form {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
}
.mh-rs-topbar .mh-rs-search {
    flex: 1 1 auto;
    min-width: 0;
}
.mh-rs-topbar .mh-rs-search .st-search-form-el {
    box-shadow: 0 2px 8px rgba(26, 43, 72, 0.06);
    border: 1px solid #DEDEDE;
}
/* When the topbar form mirrors the homepage banner (date field has
   `.home-banner-search`) the cloned Traveler default padding/spacing is
   expected to apply — drop the topbar-specific overrides so the inner
   elements (destination / date / button) line up pixel-identical with
   the homepage hero search. */
.mh-rs-topbar .mh-rs-search .form:has(> .home-banner-search) > .destination-search,
.mh-rs-topbar .mh-rs-search .form:has(> .home-banner-search) > .form-date-field,
.mh-rs-topbar .mh-rs-search .form:has(> .home-banner-search) > .guests-search,
.mh-rs-topbar .mh-rs-search .form:has(> .home-banner-search) > .button-search-wrapper {
    padding-top: 0;
    padding-bottom: 0;
}
/* The home banner search and the rental-search topbar share the same
   `.st-banner-search-form.style_2` markup, so the homepage column-width
   rule already covers the topbar. Keep the topbar's own container cap
   and center it, but leave the inner columns alone — they are locked by
   the homepage rules above (destination 242px, date field 338px, guests
   200px, button wrapper 190px).

   The 1070px cap predates the guests column, and the four tracks now
   need 970px, so it has to grow. 982px matches the homepage banner's
   cap exactly (970 + 12 right inset) so both forms render
   identically — the topbar must NOT be wider, or the residual returns
   and reopens the gap on the right of the search button. */
.mh-rs-topbar .st-banner-search-form.mh-rs-search.style_2 {
    max-width: 982px;
    margin: 0 auto;
}
/* Inline date-range picker rendered inside any `.st-banner-search-form.style_2`
   (home banner search and rental-search topbar share this structure). The
   cloned Traveler calendar is huge (two months side-by-side, ~100px row
   height, 20px date font, 30px header padding) which is way too big for a
   search form. Shrink it so it fits comfortably, and on narrow screens
   collapse it to a single month. */
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper {
    max-width: 760px;
    padding: 12px 16px;
}
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar.left,
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar.right {
    width: 50%;
}
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header {
    padding-bottom: 8px;
}
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-header .month {
    font-size: 14px;
}
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-sub-header {
    margin-top: 4px;
}
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-sub-header .day-off-week {
    min-height: 28px;
    font-size: 11px;
}
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date {
    height: 36px !important;
}
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date .date {
    font-size: 12px !important;
    line-height: 16px !important;
}
.st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar .calendar-table .table-condensed tbody tr .td-date .event-tooltip-wrap {
    font-size: 10px !important;
    line-height: 12px !important;
}
.st-banner-search-form.style_2 .rate-calendar .st-avail-controls .st-avail-prev,
.st-banner-search-form.style_2 .rate-calendar .st-avail-controls .st-avail-next {
    width: 24px;
    height: 24px;
    font-size: 14px;
}
@media (max-width: 991.98px) {
    .st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar.right {
        display: none;
    }
    .st-banner-search-form.style_2 .rate-calendar .st-availability-calendar-wrapper .calendar.left {
        width: 100%;
    }
}
.mh-rs-topbar .mh-rs-search.style_2 {
    padding: 0;
}
.mh-rs-topbar .mh-rs-search .tab-pane,
.mh-rs-topbar .mh-rs-search .tab-pane.active { padding: 0; }
.mh-rs-topbar .mh-rs-search .form:has(> .home-banner-search) > .st-search-form-el,
.mh-rs-topbar .mh-rs-search .form:has(> .home-banner-search) .st-search-form-el {
    box-shadow: none;
    border: 0;
}
.mh-rs-view-map {
    color: var(--mh-primary, #5191FA);
    font-weight: 500;
    font-size: 14px;
    text-decoration: none;
    white-space: nowrap;
    transition: opacity .2s;
}
.mh-rs-view-map:hover { opacity: .8; color: var(--mh-primary, #5191FA); }

/* --- Two-column layout --- */
.mh-rs-layout { row-gap: 24px; }
.mh-rs-sidebar-col { margin-bottom: 0; }
.mh-rs-results-col { margin-bottom: 0; }

/* --- Sidebar --- */
.mh-rs-sidebar {
    border-radius: 16px;
    overflow: visible;
    position: sticky;
    top: 100px;
    max-height: none;
    overflow-y: visible;
}
.mh-rs-sidebar::-webkit-scrollbar { width: 6px; }
.mh-rs-sidebar::-webkit-scrollbar-thumb { background: #DEDEDE; border-radius: 3px; }
.mh-rs-block {
    padding: 18px 20px;
    border-bottom: 1px solid #F0F0F0;
}
.mh-rs-block:last-child { border-bottom: 0; }
.mh-rs-block h3 {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 15px;
    font-weight: 700;
    color: #1A2B48;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin: 0 0 14px;
}

/* --- Price range --- */
/* Slider input comes first in the DOM (so the rendered .irs/.irs-handle
   nodes appear above), then the two Min/Max input fields sit below. */
.mh-rs-price-range { display: none; } /* ion.rangeSlider replaces this visually */
/* Each filter section (price / amenities / categories) gets its own
   bordered card so they read as three distinct panels. The h3 lives
   inside the frame at the top. */
.mh-rs-block-frame {
    border: 1px solid #E5E8EC;
    border-radius: 12px;
    padding: 16px 16px 14px;
    background: #fff;
    margin-bottom: 18px;
}
.mh-rs-block-frame > h3 {
    margin: 0 0 12px;
    font-size: 15px;
    font-weight: 700;
    color: #1F2937;
}
/* Sub-heading inside a shared frame (e.g. "Loại nơi ở" sits inside the
   same card as "Tiện ích"). Visually a little lighter + a hairline
   divider so the two groups stay readable. */
.mh-rs-block-frame > h3 + h3.mh-rs-facets-subtitle,
.mh-rs-block-frame > h3.mh-rs-facets-subtitle {
    margin: 18px 0 10px;
    padding-top: 14px;
    border-top: 1px solid #EEF1F4;
    font-size: 14px;
    font-weight: 600;
    color: #4B5563;
}
.mh-rs-price-inputs {
    display: flex;
    align-items: stretch;
    gap: 10px;
    margin-top: 14px;
}
.mh-rs-price-field {
    flex: 1 1 0;
    min-width: 0;
    /* Nested card inside the outer .mh-rs-block-frame — readonly
       display only, value is driven by the slider above. */
    border: 1px solid #E5E8EC;
    border-radius: 10px;
    padding: 8px 12px 10px;
    background: #F8FAFC;
    transition: border-color .15s, box-shadow .15s, background-color .15s;
}
.mh-rs-price-field:focus-within {
    border-color: var(--mh-primary, #5191FA);
    box-shadow: 0 0 0 2px rgba(81, 145, 250, 0.15);
}
.mh-rs-price-field label {
    display: block;
    font-size: 11px;
    color: #9AA5B1;
    margin-bottom: 4px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: .03em;
}
.mh-rs-price-field input {
    width: 100%;
    border: 0;
    border-radius: 0;
    padding: 0;
    font-size: 15px;
    color: #1A2B48;
    font-weight: 600;
    background: transparent;
    transition: none;
    box-sizing: border-box;
    -moz-appearance: textfield;
    cursor: default; /* readonly — pointer-feedback signals non-editable */
}
.mh-rs-price-field input::-webkit-outer-spin-button,
.mh-rs-price-field input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

/* ── Tag filter — dùng CHUNG style .mh-rs-checkbox của nhóm tiện ích ────
   KHÔNG ghi đè gì ở đây. Markup chỉ thêm class mh-rs-tag-option (để JS
   bỏ-chọn được) nhưng style hoàn toàn kế thừa .mh-rs-checkbox, nên ô
   tick tô màu cam (--mh-orange) y hệt nhóm tiện ích — đồng nhất trong
   sidebar. Màu riêng của từng tag chỉ dùng ở badge trên card. */
.mh-rs-tags-block .mh-rs-tag-option:hover { color: #1A2B48; }

/* Pill "đang lọc theo tag" ở thanh kết quả — giống hệt các pill khác
   (tiện ích / giá), chỉ text là tên tag. Không kèm ô tick: các pill
   còn lại cũng chỉ có text, ô tick chỉ thuộc về checkbox ở sidebar. */
.mh-rs-pill-tag {
    display: inline-flex;
    align-items: center;
}

/* "Antenna" slider — two vertical red ellipses with a soft red halo,
   joined by a thin horizontal bar. Reuses the existing ion.rangeSlider
   markup (.irs-handle.from/.to + .irs-bar + .irs-line) so the drag-to-
   filter behavior is untouched; we only repaint the look. */
.irs {
    height: 60px;
}
.irs .irs-line {
    top: 25px;
    height: 4px;
    background: #D7DCE3;
    border: 0;
    border-radius: 0;
    background-image: none;
}
.irs .irs-bar,
.irs--flat .irs-bar,
.irs--big .irs-bar,
.irs--modern .irs-bar,
.irs--sharp .irs-bar,
.irs--round .irs-bar,
.irs--square .irs-bar {
    top: 25px;
    height: 4px;
    background: #FA5636;
    border: 0;
    box-shadow: none;
    background-image: none;
}
.irs .irs-bar--single {
    border-radius: 0;
}

/* Round white handles with a red (theme) border, centered on the 4px bar
   (bar top:25px + 4px → center 27px, so a 20px handle sits at top:17px). */
.irs--big .irs-handle.from,
.irs--big .irs-handle.to,
.irs--modern .irs-handle.from,
.irs--modern .irs-handle.to,
.irs .irs-handle.from,
.irs .irs-handle.to {
    top: 17px;
    width: 20px;
    height: 20px;
    border: 2px solid #FA5636;
    border-radius: 50%;
    background: #fff;
    box-shadow: none;
    cursor: grab;
}
.irs .irs-handle.from:active,
.irs .irs-handle.to:active {
    cursor: grabbing;
}
/* Hide the inner <i> shapes — they were the "house" pieces from the
   default skin and would poke through the circle otherwise. */
.irs .irs-handle.from > i,
.irs .irs-handle.to > i {
    display: none;
}
.irs .irs-handle.from:hover,
.irs .irs-handle.to:hover,
.irs .irs-handle.from.state_hover,
.irs .irs-handle.to.state_hover {
    background: #fff;
    border-color: #FA5636;
}

.mh-rs-price-actions {
    display: flex;
    gap: 8px;
    margin-top: 10px;
}

/* --- Buttons --- */
.mh-rs-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 9px 16px;
    font-size: 14px;
    font-weight: 500;
    border-radius: 80px;
    border: 1px solid transparent;
    cursor: pointer;
    transition: background .15s, color .15s, border-color .15s, transform .05s;
    text-decoration: none;
    line-height: 1.2;
    background: transparent;
    color: #1A2B48;
}
.mh-rs-btn:active { transform: translateY(1px); }
.mh-rs-btn-primary {
    background: var(--mh-orange, #FA5636);
    color: #fff;
    border-color: var(--mh-orange, #FA5636);
}
.mh-rs-btn-primary:hover { background: #E64A2A; border-color: #E64A2A; color: #fff; }
.mh-rs-btn-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    margin-left: 8px;
    border-radius: 999px;
    background: #fff;
    color: var(--mh-primary, #5191FA);
    font-size: 12px;
    font-weight: 600;
    line-height: 1;
    box-sizing: border-box;
}
.mh-rs-btn-ghost {
    background: #fff;
    color: #5E6D77;
    border-color: #DEDEDE;
}
.mh-rs-btn-ghost:hover { background: #F7F8FA; color: #1A2B48; border-color: #C9C9C9; }
.mh-rs-btn-block { display: flex; width: 100%; }
.mh-rs-block-actions .mh-rs-btn { width: 100%; }

/* --- Checkbox list --- */
.mh-rs-checkbox-list {
    list-style: none;
    padding: 0;
    margin: 0;
    max-height: none;
    overflow: visible;
    transition: none;
}
.mh-rs-checkbox-list li { padding: 0; }
.mh-rs-checkbox-list li.mh-rs-overflow { display: list-item; }
.mh-rs-checkbox {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 6px 0;
    cursor: pointer;
    user-select: none;
    color: #5E6D77;
    font-size: 14px;
    transition: color .15s;
}
.mh-rs-checkbox:hover { color: #1A2B48; }
.mh-rs-checkbox input { position: absolute; opacity: 0; pointer-events: none; }
.mh-rs-check-box {
    flex: 0 0 18px;
    width: 18px;
    height: 18px;
    border: 1.5px solid #DEDEDE;
    border-radius: 4px;
    background: #fff;
    position: relative;
    transition: background .15s, border-color .15s;
}
.mh-rs-checkbox input:checked + .mh-rs-check-box {
    background: var(--mh-orange, #FA5636);
    border-color: var(--mh-orange, #FA5636);
}
.mh-rs-checkbox input:checked + .mh-rs-check-box::after {
    content: "";
    position: absolute;
    inset: 0;
    margin: auto;
    width: 5px;
    height: 10px;
    border: solid #fff;
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}
.mh-rs-checkbox input:focus-visible + .mh-rs-check-box {
    box-shadow: 0 0 0 2px rgba(81, 145, 250, 0.25);
}
.mh-rs-check-label { flex: 1 1 auto; min-width: 0; line-height: 1.4; }
.mh-rs-more {
    background: transparent;
    border: 0;
    color: var(--mh-primary, #5191FA);
    font-size: 13px;
    font-weight: 500;
    padding: 8px 0 0;
    cursor: pointer;
    transition: opacity .15s;
}
.mh-rs-more:hover { opacity: .8; text-decoration: underline; }
/* Hide the See more button — sidebar now shows all amenities without scroll. */
.mh-rs-more { display: none !important; }

/* --- Results title + toolbar ---
   .mh-rs-results-header is a flex row with three items:
     1. .mh-rs-results-title   — left
     2. .mh-rs-pills           — middle (only rendered when filters are active)
     3. .mh-rs-results-toolbar — right (contains the sort dropdown)
   Layout rules:
   - No filters: title + toolbar sit on the same row; .mh-rs-pills is
     absent from the DOM so it doesn't take space.
   - With filters: the pills row is forced to 100% width and reordered
     last so it wraps to a second row on its own, while the title and
     sort stay aligned on the first row. */
.mh-rs-results-header {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px 16px;
    margin-bottom: 18px;
}
.mh-rs-results-title {
    font-family: var(--mh-system-font), sans-serif;
    font-weight: 700;
    font-size: 24px;
    color: #1A2B48;
    margin: 0;
    flex: 0 1 auto;
    order: 1;
}
.mh-rs-pills {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    flex: 1 1 auto;
    min-width: 0;
    order: 2;
}
.mh-rs-results-toolbar {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 16px;
    flex-wrap: wrap;
    margin-left: auto;
    order: 3;
}
/* When pills are present, push them onto their own row beneath the
   title + sort by giving them a full row in the flex container. */
.mh-rs-results-header:has(.mh-rs-pills) {
    align-items: flex-start;
}
.mh-rs-results-header:has(.mh-rs-pills) .mh-rs-pills {
    flex-basis: 100%;
    order: 4;
    margin-top: 4px;
}
.mh-rs-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: #FFF1ED;
    color: var(--mh-orange, #FA5636);
    border-radius: 80px;
    padding: 6px 14px;
    font-size: 13px;
    font-weight: 500;
    line-height: 1.2;
    white-space: nowrap;
}
.mh-rs-pill:hover { background: #FFE4DB; }
.mh-rs-pill-remove {
    color: inherit;
    text-decoration: none;
    font-weight: 700;
    font-size: 16px;
    line-height: 1;
    margin-left: 2px;
    transition: opacity .15s;
    cursor: pointer;
}
.mh-rs-pill-remove:hover { opacity: .7; }
.mh-rs-pill-clear {
    background: #fff;
    color: #5E6D77;
    border: 1px dashed #DEDEDE;
    text-decoration: none;
}
.mh-rs-pill-clear:hover { background: #F7F8FA; color: #1A2B48; }

/* --- Sort --- */
.mh-rs-sort-form {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 0 0 auto;
}
.mh-rs-sort-label {
    font-size: 13px;
    color: #9AA5B1;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}
.mh-rs-sort {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    border: 1px solid #DEDEDE;
    border-radius: 8px;
    padding: 9px 36px 9px 14px;
    font-size: 14px;
    color: #1A2B48;
    font-weight: 500;
    background: #fff url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none' stroke='%235E6D77' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E") no-repeat right 12px center / 12px;
    cursor: pointer;
    transition: border-color .15s, box-shadow .15s;
}
.mh-rs-sort:focus {
    outline: none;
    border-color: var(--mh-primary, #5191FA);
    box-shadow: 0 0 0 2px rgba(81, 145, 250, 0.15);
}

/* --- Grid + empty state --- */
.mh-rs-grid { row-gap: 24px; }
.mh-rs-empty {
    text-align: center;
    padding: 80px 20px;
    color: #5E6D77;
    background: #fff;
    border-radius: 16px;
    border: 1px solid #DEDEDE;
}
.mh-rs-empty p { margin: 0; font-size: 15px; }
.mh-rs-empty .mh-rs-btn {
    margin-top: 16px;
    display: inline-flex;
    min-width: 160px;
    padding: 11px 24px;
    font-weight: 600;
    box-shadow: 0 4px 12px rgba(250, 86, 54, 0.25);
}
.mh-rs-empty .mh-rs-btn:hover {
    box-shadow: 0 6px 16px rgba(250, 86, 54, 0.35);
    transform: translateY(-1px);
}

/* --- Responsive --- */
@media (max-width: 991.98px) {
    .mh-rs-sidebar {
        position: static;
        max-height: none;
        margin-bottom: 24px;
    }
    .mh-rs-layout { flex-direction: column-reverse; }
    .mh-rs-results-col { order: 1; }
    .mh-rs-sidebar-col { order: 2; }
    .mh-rs-topbar .mh-rs-search .form {
        flex-direction: column;
        align-items: stretch;
    }
    .mh-rs-topbar .mh-rs-search .form > .destination-search,
    .mh-rs-topbar .mh-rs-search .form > .form-date-field,
    .mh-rs-topbar .mh-rs-search .form > .button-search-wrapper {
        border-right: 0;
        border-bottom: 1px solid #F0F0F0;
    }
}
@media (max-width: 575.98px) {
    /* Header is fixed (h-16 = 64px) on mobile, so the topbar needs top
       padding to clear it — otherwise the search form sits flush against
       the header bottom edge. 80px ≈ 64px header + 16px breathing room.
       Bump min-height by the same 66px delta so the form stays vertically
       centred inside the banner. */
    .mh-rs-topbar { padding: 80px 0 16px; min-height: 386px; }
    .mh-rs-results-title { font-size: 20px; }
    .mh-rs-pills { gap: 6px; }
    .mh-rs-pill { font-size: 12px; padding: 5px 10px; }
}

/* ============================================================
   Mobile filter drawer
   On ≥768px the sidebar renders inline next to the results column.
   On <768 it collapses behind a button — tapping "Bộ lọc" opens a
   bottom-sheet that slides up from the bottom edge of the viewport.
   Architecture:
     - `.mh-rs-sidebar-drawer` is the bottom-sheet panel, fixed to the
       bottom of the screen when open.
     - `.mh-rs-drawer-header` (grab bar + title + close X) and
       `.mh-rs-drawer-footer` ("View results" CTA) are drawer chrome
       rendered next to .mh-rs-sidebar. They take part in the sheet's
       vertical flex layout.
     - `.mh-rs-drawer-backdrop` dims the rest of the page so the
       sheet feels modal. Click-to-close.
     - State is held on `body.mh-rs-sidebar-open` (set by
       megahomestay-rental-search.js). Scroll lock also goes on body
       so the underlying results don't scroll while the sheet is open.
   ============================================================ */
.mh-rs-drawer-header,
.mh-rs-drawer-footer { display: none; }
.mh-rs-drawer-backdrop { display: none; }
.mh-rs-filter-toggle { display: none; }

/* <768: collapse the sidebar into a sheet. */
@media (max-width: 767.98px) {
    /* Hide the aside entirely when the drawer is closed so it doesn't
       push results down with a giant empty column. */
    body:not(.mh-rs-sidebar-open) .mh-rs-sidebar-col {
        display: none;
    }
    /* The drawer itself. Closed state — offscreen below the viewport.
       Open state (next rule) slides it back to translateY(0) with the
       280ms ease defined below. */
    body:not(.mh-rs-sidebar-open) .mh-rs-sidebar-col.mh-rs-sidebar-drawer {
        transform: translateY(100%);
    }
    body.mh-rs-sidebar-open .mh-rs-sidebar-col.mh-rs-sidebar-drawer {
        display: flex;
        flex-direction: column;
        position: fixed;
        inset: auto 0 0 0;
        z-index: 1060;
        max-width: none;
        flex: none;
        width: 100%;
        max-height: 88vh;
        background: #FFFFFF;
        border-radius: 20px 20px 0 0;
        box-shadow: 0 -10px 30px rgba(0, 0, 0, 0.18);
        transform: translateY(0);
        transition: transform 280ms ease;
        overflow: hidden;
        padding: 0;
    }
    /* Inside the drawer: scrollable sidebar area between header + footer.
       Drop sticky / max-height from the desktop rule because the parent
       flex column is what scrolls now, not the .mh-rs-sidebar itself. */
    body.mh-rs-sidebar-open .mh-rs-sidebar-col.mh-rs-sidebar-drawer .mh-rs-sidebar {
        position: static;
        max-height: none;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        padding: 4px 16px 8px;
        border: 0;
        border-radius: 0;
        flex: 1 1 auto;
        min-height: 0;
        background: transparent;
    }
    body.mh-rs-sidebar-open .mh-rs-sidebar-col.mh-rs-sidebar-drawer .mh-rs-block-frame {
        margin: 0;
        border: 0;
        border-radius: 0;
        padding: 16px 0;
        border-bottom: 1px solid #F0F2F5;
    }
    body.mh-rs-sidebar-open .mh-rs-sidebar-col.mh-rs-sidebar-drawer .mh-rs-block-frame:last-child {
        border-bottom: 0;
    }

    /* Drawer header — grab affordance + title + close X. */
    .mh-rs-drawer-header {
        display: flex;
        align-items: center;
        justify-content: center;
        position: relative;
        padding: 8px 16px 12px;
        flex: 0 0 auto;
        border-bottom: 1px solid #EEF1F4;
        background: #FFFFFF;
    }
    .mh-rs-drawer-grab {
        position: absolute;
        top: 6px;
        left: 50%;
        transform: translateX(-50%);
        width: 36px;
        height: 4px;
        border-radius: 2px;
        background: #D7DCE5;
    }
    .mh-rs-drawer-title {
        margin: 8px 0 0;
        font-size: 16px;
        font-weight: 700;
        color: #1A2B48;
        text-align: center;
    }
    .mh-rs-drawer-x {
        position: absolute;
        top: 16px;
        right: 12px;
        background: transparent;
        border: 0;
        width: 32px;
        height: 32px;
        border-radius: 50%;
        font-size: 22px;
        line-height: 1;
        color: #5E6D77;
        cursor: pointer;
        display: inline-flex;
        align-items: center;
        justify-content: center;
    }
    .mh-rs-drawer-x:hover,
    .mh-rs-drawer-x:focus-visible {
        background: #F2F4F7;
        color: #1A2B48;
    }

    /* Drawer footer — the "View results" CTA pinned to the bottom of the
       sheet so closing is one tap regardless of scroll position. */
    .mh-rs-drawer-footer {
        display: block;
        flex: 0 0 auto;
        padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0));
        background: #FFFFFF;
        border-top: 1px solid #EEF1F4;
    }
    .mh-rs-drawer-close {
        display: flex;
        width: 100%;
        align-items: center;
        justify-content: center;
        gap: 8px;
        padding: 14px 16px;
        background: #ff5c02;
        color: #FFFFFF;
        border: 0;
        border-radius: 12px;
        font-size: 15px;
        font-weight: 600;
        cursor: pointer;
        transition: opacity .15s, transform .15s, background-color .15s;
    }
    .mh-rs-drawer-close:hover { background: #ff7a2e; }
    .mh-rs-drawer-close:active { transform: scale(0.99); }

    /* Backdrop — covers the rest of the viewport. */
    .mh-rs-drawer-backdrop {
        display: block;
        position: fixed;
        inset: 0;
        z-index: 1055;
        background: rgba(26, 43, 72, 0.45);
        opacity: 0;
        pointer-events: none;
        transition: opacity 220ms ease;
    }
    body.mh-rs-sidebar-open .mh-rs-drawer-backdrop {
        opacity: 1;
        pointer-events: auto;
    }

    /* Lock underlying scroll while the sheet is open so the results grid
       underneath doesn't bob when the user over-scrolls the sheet. */
    body.mh-rs-sidebar-open {
        overflow: hidden;
    }

    /* "Bộ lọc" button — visible only at <768. */
    .mh-rs-filter-toggle {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 6px;
        height: 40px;
        padding: 0 16px;
        background: #FFFFFF;
        border: 1px solid #DEDEDE;
        border-radius: 999px;
        font-size: 14px;
        font-weight: 600;
        color: #1A2B48;
        cursor: pointer;
        white-space: nowrap;
        flex: 0 0 auto;
        transition: background .15s, border-color .15s;
    }
    .mh-rs-filter-toggle:hover,
    .mh-rs-filter-toggle:focus-visible {
        background: #F7F8FA;
        border-color: var(--mh-primary, #5191FA);
        color: var(--mh-primary, #5191FA);
    }
    .mh-rs-filter-toggle__icon {
        display: inline-flex;
        align-items: center;
        line-height: 0;
    }
    .mh-rs-filter-toggle__count {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-width: 20px;
        height: 20px;
        padding: 0 6px;
        border-radius: 999px;
        background: var(--mh-primary, #5191FA);
        color: #FFFFFF;
        font-size: 12px;
        font-weight: 700;
        margin-left: 2px;
    }

    /* Mobile toolbar — "Bộ lọc" hugs the left edge of the row (its icon
       leads the eye toward the filter controls below), and "Sắp xếp"
       sticks to the right edge. Space-between distributes the remaining
       room. The two controls share the same height / pill radius so they
       read as a matched pair rather than two visually mismatched
       controls. */
    .mh-rs-results-header {
        flex-wrap: wrap;
        row-gap: 12px;
    }
    .mh-rs-results-toolbar {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 8px;
        flex-wrap: nowrap;
        width: 100%;
    }
    /* Hide the "SẮP XẾP" label on phones — the dropdown is self-evident
       and the label eats width we'd rather spend on the select itself. */
    .mh-rs-sort-label { display: none; }
    /* Match the toggle's height / border-radius / border so the two
       controls align pixel-for-pixel. Right padding (36px) reserves room
       for the chevron icon. */
    .mh-rs-sort-form {
        flex: 0 0 auto;
        min-width: 0;
    }
    .mh-rs-sort {
        height: 40px;
        padding: 0 36px 0 14px;
        border-radius: 999px;
        font-size: 14px;
        font-weight: 500;
        background-position: right 14px center;
    }
}

/* ============================================================
   /rental-search — drop the homepage-style giant banner padding
   when the search bar is used on this page. The cloned theme
   applies padding: 184px 0 to `.st-banner-search-form.style_2`'s
   section ancestor; we want the form to look compact here.
   ============================================================ */
.mh-rs-topbar .mh-rs-search.style_2 {
    padding: 0;
}
.mh-rs-topbar .mh-rs-search .tab-pane,
.mh-rs-topbar .mh-rs-search .tab-pane.active { padding: 0; }

/* ============================================================
   Header mini-cart — count badge + dropdown contents
   ============================================================ */
/* The Traveler theme's `.header { padding: 0 40px }` rule leaves a
   40px gap on both sides of the navbar. The bag should sit at the
   right edge of that padded area — symmetric to the logo on the
   left, which is also offset by 40px from the viewport edge.

   The header is a Bootstrap flex row (`d-flex justify-content-between`),
   so the right column is already being pushed to the far edge of the
   padded inner area. We just strip any inner padding/margin that
   could push the bag icon further inward of that edge. */
.header__right {
    /* Margin-left auto is a no-op here (justify-between already
       wins), but it documents intent and guards against future
       changes to the parent's justify behavior. */
    margin-left: auto;
}
/* Browser default `<ul>` ships with ~40px padding-left. Since
   .items is a flex container itself, its children hug the left of
   the ul, leaving visible padding between them and the inner right
   edge of .header. Nuke it so the bag sits flush. */
.header__right > ul.items {
    padding-right: 0 !important;
    padding-left: 0 !important;
    margin-right: 0 !important;
}
/* The center column needs to be horizontally centered in the header
   regardless of how many menu items it contains. Without growing it
   to fill the middle slot, `justify-content-between` leaves it
   pinned right after the logo and the menu visually drifts left.
   `flex: 1` makes it claim the empty space; `justify-content: center`
   on the inner nav then re-centers the menu items within. */
.header__center {
    flex: 1;
    display: flex;
    justify-content: center;
}
/* The bag toggle itself needs `position: relative` so the absolutely-
   positioned count badge anchors to it instead of the whole header. */
.header__right .mini-cart.dropdown-toggle {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
/* Pill-shaped red count badge — hidden when the cart is empty (the JS
   removes the .mh-cart-count node entirely so there's nothing to show). */
.header__right .mini-cart.dropdown-toggle .mh-cart-count {
    position: absolute;
    top: -6px;
    right: -10px;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 999px;
    background: var(--main-color, #ff5c02);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    line-height: 18px;
    text-align: center;
    box-shadow: 0 0 0 2px #fff;
    user-select: none;
    pointer-events: none;
}


/* Dropdown panel — modern, clean, consistent with the new header
   (pill-shaped controls, rounded surfaces, subtle borders). No more
   Traveler-theme `.media` / `.media-object` / `.btn-full upper` legacy
   classes — markup is now semantic (see megahomestay-cart.js). */
.mini-cart-dropdown {
    width: 360px;
    max-width: calc(100vw - 24px);
    padding: 0;
    border: 1px solid rgba(15, 23, 42, .06);
    border-radius: 16px;
    box-shadow: 0 24px 48px -12px rgba(15, 23, 42, .22),
                0 8px 16px -4px rgba(15, 23, 42, .08);
    background: #fff;
    margin-top: 12px !important;
    overflow: hidden;
    font-family: var(--mh-system-font), sans-serif;
}

/* Reset: drop any stray Bootstrap / theme horizontal rules so the panel
   reads as a single rounded surface. */
.mini-cart-dropdown,
.mini-cart-dropdown * {
    border-top: 0;
    border-bottom: 0;
}
.mini-cart-dropdown hr.dropdown-divider,
.mini-cart-dropdown .dropdown-divider {
    display: none;
}

/* ---- Header bar -------------------------------------------------- */
.mini-cart-header {
    padding: 14px 18px !important;
    background: linear-gradient(180deg, #FAFAFB 0%, #F4F5F8 100%);
}
.mini-cart-header__inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}
.mini-cart-header__title {
    font-size: 15px;
    font-weight: 700;
    color: #1A2B48;
    letter-spacing: -0.01em;
}
.mini-cart-header__count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 22px;
    padding: 0 7px;
    border-radius: 999px;
    background: #ff5c02;
    color: #fff;
    font-size: 12px;
    font-weight: 700;
    line-height: 1;
}

/* ---- Empty state ------------------------------------------------ */
.mini-cart-empty {
    padding: 32px 24px 36px !important;
    text-align: center;
}
.mini-cart-empty__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin: 0 auto 14px;
    border-radius: 16px;
    background: #F4F5F8;
    color: #A0A9B2;
}
.mini-cart-empty__msg {
    color: #5E6D77;
    font-size: 13px;
    line-height: 1.55;
    max-width: 240px;
    margin: 0 auto;
}

/* ---- Items list ------------------------------------------------- */
.mini-cart-list {
    padding: 0 !important;
    background: #fff;
}
.mini-cart-list__inner {
    list-style: none;
    margin: 0;
    padding: 0;
}
.mini-cart-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    position: relative;
    padding: 14px 18px !important;
    border-top: 1px solid #F0F2F5 !important;
    transition: background-color .15s ease;
}
.mini-cart-item:hover {
    background: #FAFAFB;
}
.mini-cart-item__thumb {
    display: block;
    flex: 0 0 64px;
    width: 64px;
    height: 64px;
    border-radius: 12px;
    overflow: hidden;
    background: #F0F2F5;
    text-decoration: none;
}
.mini-cart-item__thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    border-radius: 12px;
}
.mini-cart-item__body {
    flex: 1 1 auto;
    min-width: 0;
    padding-right: 28px; /* room for remove button */
}
.mini-cart-item__title {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.35;
    color: #1A2B48;
    text-decoration: none;
    margin: 2px 0 6px;
    transition: color .15s ease;
}
.mini-cart-item__title:hover {
    color: #ff5c02;
}
.mini-cart-item__meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    font-size: 12px;
    color: #5E6D77;
}
.mini-cart-item__dates {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
}
.mini-cart-item__dates svg {
    flex: 0 0 auto;
    color: #A0A9B2;
}
.mini-cart-item__price {
    flex: 0 0 auto;
    font-weight: 700;
    color: #1A2B48;
    font-size: 13px;
}
.mini-cart-item__remove {
    position: absolute;
    top: 12px;
    right: 12px;
    width: 24px;
    height: 24px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    margin: 0;
    background: transparent;
    border: 0;
    border-radius: 6px;
    color: #A0A9B2;
    cursor: pointer;
    transition: background-color .15s ease, color .15s ease;
}
.mini-cart-item__remove:hover {
    background: rgba(255, 92, 2, .08);
    color: #ff5c02;
}
.mini-cart-item__remove svg {
    display: block;
    pointer-events: none;
}
.mini-cart-item__remove svg g {
    stroke: currentColor !important;
}

/* ---- Footer (subtotal + CTA) ------------------------------------ */
.mini-cart-footer {
    padding: 14px 18px 16px !important;
    background: #FAFAFB;
    border-top: 1px solid #F0F2F5 !important;
}
.mini-cart-footer__row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 12px;
}
.mini-cart-footer__label {
    font-size: 13px;
    color: #5E6D77;
    font-weight: 500;
}
.mini-cart-footer__total {
    font-size: 17px;
    font-weight: 700;
    color: #1A2B48;
    letter-spacing: -0.01em;
}
.mini-cart-footer__cta {
    display: flex !important;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 44px;
    border-radius: 12px;
    background: #ff5c02;
    color: #fff !important;
    font-weight: 700;
    font-size: 14px;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    text-decoration: none;
    border: 0;
    transition: background-color .15s ease, transform .1s ease, box-shadow .15s ease;
    box-shadow: 0 4px 12px -4px rgba(255, 92, 2, .45);
}
.mini-cart-footer__cta:hover {
    background: #E6494E;
    box-shadow: 0 6px 16px -4px rgba(230, 73, 78, .5);
}
.mini-cart-footer__cta:active {
    transform: translateY(1px);
}

/* Tighten the dropdown on small viewports so it doesn't get clipped by
   the screen edge when Bootstrap positions it from the bag. */
@media (max-width: 575.98px) {
    .mini-cart-dropdown { width: 320px; }
    .mini-cart-item__thumb { flex-basis: 56px; width: 56px; height: 56px; }
}
/* Mobile logo. The desktop logo (`.logo:not(.logo--mobile)`) is hidden by
   the `d-none d-sm-none d-lg-block` Bootstrap utilities on phones; the
   mobile counterpart `.logo--mobile` is visible by default on small
   screens. The Traveler base CSS sets `.logo { display: inline-block }`
   which would otherwise force a width — wrap the image in a flex shrink
   so the navbar can keep its bag icon flush against the right edge. */
.header__left .logo--mobile {
    display: inline-flex;
    align-items: center;
    flex-shrink: 1;
    min-width: 0;
}
.header__left .logo--mobile img.custom-logo {
    height: 36px;
    width: auto;
    max-width: 160px;
    object-fit: contain;
}
@media (max-width: 575.98px) {
    .header__left .logo--mobile img.custom-logo {
        height: 30px;
        max-width: 130px;
    }
}

/* Mobile hamburger (.mh-hamburger). Lives at the left edge of `.header__left`
   so it sits between the viewport edge and the logo on phones. The button is
   `d-lg-none` so desktop never sees it; we still reset <button> defaults
   (background/border/padding) so it visually matches the rest of the header
   (transparent, hover background only). The icon font comes from
   fontawesome.min.js, which the layout already loads. */
.header__left .mh-hamburger {
    background: transparent;
    border: 0;
    padding: 8px 10px;
    margin-right: 4px;
    color: var(--mh-text, #1A2B48);
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    border-radius: 6px;
    transition: background-color .15s ease, color .15s ease;
}
.header__left .mh-hamburger:hover,
.header__left .mh-hamburger:focus {
    background-color: rgba(81, 145, 250, 0.10);
    color: var(--mh-primary, #5191FA);
    outline: none;
}
.header__left .mh-hamburger[aria-expanded="true"] {
    color: var(--mh-primary, #5191FA);
}

/* ============================================================
   /blog + /blog/{slug} — Blog Review pages
   Visual style follows the rest of the site:
     - Same color tokens (--mh-primary #5191FA, --mh-orange #FA5636, --mh-text #1A2B48)
     - Same heading font (DM Sans, 700)
     - Same border-radius (12 / 16 px) and shadow levels as cards/buttons
     - Hero section reuses the same `Banneractivity-min-1.png` background
   ============================================================ */

/* ---------- Hero shared ---------- */
.mh-blog-breadcrumb {
    font-size: 13px;
    color: rgba(255, 255, 255, 0.85);
    margin-bottom: 18px;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    align-items: center;
    letter-spacing: 0.02em;
}
.mh-blog-breadcrumb a {
    color: rgba(255, 255, 255, 0.85);
    text-decoration: none;
    transition: color .15s;
}
.mh-blog-breadcrumb a:hover { color: #fff; text-decoration: underline; }
.mh-blog-breadcrumb .sep { opacity: 0.6; }
.mh-blog-breadcrumb .current { color: #fff; font-weight: 600; }

.mh-blog-hero-title {
    font-family: var(--mh-system-font), sans-serif;
    color: #fff;
    font-size: 56px;
    font-weight: 700;
    line-height: 64px;
    margin: 0 0 14px;
    max-width: 760px;
    text-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
}
.mh-blog-hero-sub {
    color: rgba(255, 255, 255, 0.92);
    font-size: 17px;
    line-height: 28px;
    max-width: 640px;
    margin: 0 0 28px;
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.1);
}

/* ---------- Hero search + chips ---------- */
.mh-blog-search {
    display: flex;
    align-items: center;
    gap: 0;
    max-width: 640px;
    width: 100%;
    background: #fff;
    border-radius: 999px;
    padding: 6px 6px 6px 18px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    box-sizing: border-box;
}
.mh-blog-search__icon {
    color: var(--mh-primary, #5191FA);
    font-size: 18px;
    margin-right: 10px;
    flex: 0 0 auto;
}
.mh-blog-search input {
    flex: 1 1 auto;
    border: 0;
    background: transparent;
    font-size: 15px;
    color: var(--mh-text, #1A2B48);
    padding: 10px 0;
    outline: none;
    min-width: 0;
}
.mh-blog-search input::placeholder { color: #9AA5B1; }
.mh-blog-search__btn {
    flex: 0 0 auto;
    background: var(--mh-orange, #FA5636);
    color: #fff;
    border: 0;
    border-radius: 999px;
    padding: 11px 22px;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s, transform .05s;
    box-shadow: 0 4px 12px rgba(250, 86, 54, 0.25);
}
.mh-blog-search__btn:hover { background: #E64A2A; }
.mh-blog-search__btn:active { transform: translateY(1px); }

.mh-blog-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 22px;
    max-width: 720px;
}
.mh-blog-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 16px;
    background: rgba(255, 255, 255, 0.18);
    color: #fff;
    border: 1px solid rgba(255, 255, 255, 0.28);
    border-radius: 999px;
    font-size: 13px;
    font-weight: 500;
    text-decoration: none;
    transition: background .15s, color .15s, border-color .15s;
    line-height: 1.2;
}
.mh-blog-chip span {
    background: rgba(255, 255, 255, 0.2);
    color: #fff;
    border-radius: 999px;
    padding: 2px 8px;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.2;
}
.mh-blog-chip:hover {
    background: rgba(255, 255, 255, 0.28);
    color: #fff;
}
.mh-blog-chip.is-active {
    background: #fff;
    color: var(--mh-primary, #5191FA);
    border-color: #fff;
    font-weight: 600;
}
.mh-blog-chip.is-active span {
    background: rgba(81, 145, 250, 0.15);
    color: var(--mh-primary, #5191FA);
}

/* ---------- Body shell ---------- */
.mh-blog-shell { margin: 0; }
.mh-blog-main { margin-bottom: 12px; }
.mh-blog-sidebar { margin-bottom: 12px; }

/* ---------- Hero featured post (first card on listing) ---------- */
.mh-blog-hero-post {
    background: #fff;
    border-radius: 16px;
    border: 1px solid #E5E8EC;
    overflow: hidden;
    margin-bottom: 32px;
    box-shadow: 0 4px 18px rgba(26, 43, 72, 0.06);
    display: grid;
    grid-template-columns: 1.1fr 1fr;
    min-height: 360px;
    transition: box-shadow .2s, transform .2s;
}
.mh-blog-hero-post:hover {
    box-shadow: 0 12px 30px rgba(26, 43, 72, 0.12);
    transform: translateY(-2px);
}
.mh-blog-hero-post__media {
    position: relative;
    overflow: hidden;
    display: block;
    background: #EAF1FB;
}
.mh-blog-hero-post__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .35s ease;
}
.mh-blog-hero-post:hover .mh-blog-hero-post__media img {
    transform: scale(1.04);
}
.mh-blog-hero-post__badge {
    position: absolute;
    top: 16px;
    left: 16px;
    background: var(--mh-orange, #FA5636);
    color: #fff;
    font-size: 12px;
    font-weight: 700;
    padding: 6px 14px;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    box-shadow: 0 4px 12px rgba(250, 86, 54, 0.3);
}
.mh-blog-hero-post__cat {
    position: absolute;
    bottom: 16px;
    left: 16px;
    background: rgba(255, 255, 255, 0.95);
    color: var(--mh-primary, #5191FA);
    font-size: 12px;
    font-weight: 600;
    padding: 6px 14px;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.mh-blog-hero-post__body {
    padding: 36px 36px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
.mh-blog-hero-post__title {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 26px;
    font-weight: 700;
    line-height: 36px;
    color: var(--mh-text, #1A2B48);
    margin: 0 0 14px;
}
.mh-blog-hero-post__title a {
    color: inherit;
    text-decoration: none;
    transition: color .15s;
}
.mh-blog-hero-post__title a:hover { color: var(--mh-primary, #5191FA); }
.mh-blog-hero-post__excerpt {
    color: #5E6D77;
    font-size: 15px;
    line-height: 24px;
    margin: 0 0 22px;
    display: -webkit-box;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.mh-blog-hero-post__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    color: #9AA5B1;
    font-size: 13px;
    margin-bottom: 22px;
}
.mh-blog-hero-post__meta span { display: inline-flex; align-items: center; gap: 6px; }
.mh-blog-hero-post__meta i { color: var(--mh-primary, #5191FA); }
.mh-blog-hero-post__cta {
    align-self: flex-start;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 11px 22px;
    background: var(--mh-orange, #FA5636);
    color: #fff;
    border-radius: 999px;
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    transition: background .15s, transform .05s, box-shadow .15s;
    box-shadow: 0 4px 12px rgba(250, 86, 54, 0.25);
}
.mh-blog-hero-post__cta:hover {
    background: #E64A2A;
    color: #fff;
    box-shadow: 0 6px 16px rgba(250, 86, 54, 0.35);
    transform: translateY(-1px);
}

/* ---------- Section header (above grid) ---------- */
.mh-blog-section-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 22px;
    padding-bottom: 14px;
    border-bottom: 1px solid #E5E8EC;
}
.mh-blog-section-title {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 22px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
    margin: 0;
    line-height: 1.3;
}
.mh-blog-section-count {
    font-size: 13px;
    color: #9AA5B1;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    flex: 0 0 auto;
}

/* ---------- Blog card ---------- */
.mh-blog-card {
    background: #fff;
    border-radius: 16px;
    border: 1px solid #E5E8EC;
    overflow: hidden;
    height: 100%;
    display: flex;
    flex-direction: column;
    transition: box-shadow .2s, transform .2s, border-color .2s;
    box-shadow: 0 2px 10px rgba(26, 43, 72, 0.04);
}
.mh-blog-card:hover {
    box-shadow: 0 12px 28px rgba(26, 43, 72, 0.1);
    transform: translateY(-3px);
    border-color: rgba(81, 145, 250, 0.3);
}
.mh-blog-card__media {
    position: relative;
    display: block;
    overflow: hidden;
    background: #EAF1FB;
    aspect-ratio: 16 / 10;
}
.mh-blog-card__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .35s ease;
}
.mh-blog-card:hover .mh-blog-card__media img {
    transform: scale(1.05);
}
.mh-blog-card__cat {
    position: absolute;
    top: 14px;
    left: 14px;
    background: rgba(255, 255, 255, 0.95);
    color: var(--mh-primary, #5191FA);
    font-size: 11px;
    font-weight: 700;
    padding: 5px 12px;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    line-height: 1.2;
}
.mh-blog-card__badge {
    position: absolute;
    top: 14px;
    right: 14px;
    background: var(--mh-orange, #FA5636);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    padding: 5px 12px;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    line-height: 1.2;
    box-shadow: 0 4px 10px rgba(250, 86, 54, 0.3);
}
.mh-blog-card__date {
    position: absolute;
    bottom: 14px;
    left: 14px;
    background: #fff;
    border-radius: 10px;
    padding: 6px 12px;
    text-align: center;
    line-height: 1.1;
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.08);
    min-width: 52px;
}
.mh-blog-card__date .d {
    display: block;
    font-family: var(--mh-system-font), sans-serif;
    font-size: 18px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
}
.mh-blog-card__date .m {
    display: block;
    font-size: 10px;
    font-weight: 600;
    color: var(--mh-primary, #5191FA);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.mh-blog-card__body {
    padding: 20px 22px 22px;
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
}
.mh-blog-card__title {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 18px;
    font-weight: 700;
    line-height: 26px;
    color: var(--mh-text, #1A2B48);
    margin: 0 0 10px;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.mh-blog-card__title a {
    color: inherit;
    text-decoration: none;
    transition: color .15s;
}
.mh-blog-card__title a:hover { color: var(--mh-primary, #5191FA); }
.mh-blog-card__excerpt {
    color: #5E6D77;
    font-size: 14px;
    line-height: 22px;
    margin: 0 0 16px;
    flex: 1 1 auto;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.mh-blog-card__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    color: #9AA5B1;
    font-size: 12px;
    margin-bottom: 14px;
    line-height: 1.2;
}
.mh-blog-card__meta span { display: inline-flex; align-items: center; gap: 5px; }
.mh-blog-card__meta i { color: var(--mh-primary, #5191FA); font-size: 14px; }
.mh-blog-card__author { color: var(--mh-text, #1A2B48); font-weight: 600; }
.mh-blog-card__readmore {
    align-self: flex-start;
    color: var(--mh-primary, #5191FA);
    font-size: 13px;
    font-weight: 600;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    transition: gap .15s, color .15s;
    line-height: 1.2;
}
.mh-blog-card__readmore:hover { color: #2868D6; gap: 8px; }

/* ---------- Compact variant (used by related-articles strip if needed) ---------- */
.mh-blog-card--compact .mh-blog-card__media { aspect-ratio: 16 / 9; }
.mh-blog-card--compact .mh-blog-card__title { font-size: 16px; line-height: 22px; }
.mh-blog-card--compact .mh-blog-card__excerpt {
    -webkit-line-clamp: 2;
    margin-bottom: 10px;
}

/* ---------- Horizontal variant (sidebar recent list) ---------- */
.mh-blog-card--horizontal {
    flex-direction: row;
    align-items: stretch;
    height: auto;
    border-radius: 12px;
    box-shadow: none;
    background: transparent;
    border: 0;
    border-bottom: 1px solid #F0F0F0;
    padding: 16px 0;
}
.mh-blog-card--horizontal:hover {
    box-shadow: none;
    transform: none;
    border-color: rgba(81, 145, 250, 0.3);
}
.mh-blog-card--horizontal:last-child {
    border-bottom: 0;
    padding-bottom: 0;
}
.mh-blog-card--horizontal .mh-blog-card__media {
    flex: 0 0 96px;
    aspect-ratio: 1 / 1;
    width: 96px;
    border-radius: 10px;
    margin-right: 14px;
}
.mh-blog-card--horizontal .mh-blog-card__cat { display: none; }
.mh-blog-card--horizontal .mh-blog-card__body { padding: 0; }
.mh-blog-card--horizontal .mh-blog-card__title { font-size: 14px; line-height: 20px; margin-bottom: 6px; }
.mh-blog-card--horizontal .mh-blog-card__excerpt { display: none; }
.mh-blog-card--horizontal .mh-blog-card__meta { margin-bottom: 0; }

/* ---------- Grid layout ---------- */
.mh-blog-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 24px;
}
.mh-blog-grid__item { min-width: 0; }

/* ---------- Empty state ---------- */
.mh-blog-empty {
    background: #fff;
    border: 1px dashed #DEDEDE;
    border-radius: 16px;
    padding: 60px 30px;
    text-align: center;
    color: #5E6D77;
}
.mh-blog-empty__icon {
    width: 72px;
    height: 72px;
    margin: 0 auto 18px;
    border-radius: 50%;
    background: rgba(81, 145, 250, 0.1);
    color: var(--mh-primary, #5191FA);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 32px;
}
.mh-blog-empty h3 {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 20px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
    margin: 0 0 8px;
}
.mh-blog-empty p { margin: 0 auto 22px; max-width: 420px; font-size: 14px; line-height: 22px; }
.mh-blog-empty__btn {
    display: inline-flex;
    align-items: center;
    padding: 10px 22px;
    background: var(--mh-primary, #5191FA);
    color: #fff;
    border-radius: 999px;
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    transition: background .15s, transform .05s;
}
.mh-blog-empty__btn:hover { background: #2868D6; color: #fff; }

/* ---------- Pagination ---------- */
.mh-blog-pagination {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    margin-top: 36px;
    flex-wrap: wrap;
}
.mh-blog-page-btn,
.mh-blog-page-num {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 40px;
    height: 40px;
    padding: 0 12px;
    border-radius: 10px;
    border: 1px solid #E5E8EC;
    background: #fff;
    color: var(--mh-text, #1A2B48);
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    transition: background .15s, color .15s, border-color .15s;
    box-sizing: border-box;
}
.mh-blog-page-btn { font-size: 16px; }
.mh-blog-page-btn:hover:not(.is-disabled),
.mh-blog-page-num:hover:not(.is-active) {
    background: rgba(81, 145, 250, 0.08);
    color: var(--mh-primary, #5191FA);
    border-color: rgba(81, 145, 250, 0.3);
}
.mh-blog-page-num.is-active {
    background: var(--mh-primary, #5191FA);
    color: #fff;
    border-color: var(--mh-primary, #5191FA);
    box-shadow: 0 4px 10px rgba(81, 145, 250, 0.25);
}
.mh-blog-page-btn.is-disabled {
    opacity: 0.4;
    cursor: not-allowed;
    pointer-events: none;
}

/* ---------- Sidebar widgets ---------- */
.mh-blog-widget {
    background: #fff;
    border: 1px solid #E5E8EC;
    border-radius: 16px;
    padding: 22px 22px 24px;
    margin-bottom: 22px;
    box-shadow: 0 2px 10px rgba(26, 43, 72, 0.04);
}
.mh-blog-widget__title {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 16px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
    margin: 0 0 16px;
    padding-bottom: 12px;
    border-bottom: 1px solid #F0F0F0;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    position: relative;
}
.mh-blog-widget__title::before {
    content: "";
    position: absolute;
    left: 0;
    bottom: -1px;
    width: 36px;
    height: 2px;
    background: var(--mh-primary, #5191FA);
    border-radius: 2px;
}
.mh-blog-widget--about p {
    color: #5E6D77;
    font-size: 14px;
    line-height: 22px;
    margin: 0 0 14px;
}
.mh-blog-widget__link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--mh-primary, #5191FA);
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    transition: gap .15s, color .15s;
}
.mh-blog-widget__link:hover { gap: 10px; color: #2868D6; }

.mh-blog-cat-list {
    list-style: none;
    padding: 0;
    margin: 0;
}
.mh-blog-cat-list li { padding: 0; }
.mh-blog-cat-list a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 9px 12px;
    border-radius: 8px;
    color: #5E6D77;
    font-size: 14px;
    text-decoration: none;
    transition: background .15s, color .15s;
    margin-bottom: 2px;
}
.mh-blog-cat-list a:hover,
.mh-blog-cat-list a.is-active {
    background: rgba(81, 145, 250, 0.08);
    color: var(--mh-primary, #5191FA);
    font-weight: 600;
}
.mh-blog-cat-list a .count {
    background: #F2F4F7;
    color: #5E6D77;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 600;
    transition: background .15s, color .15s;
}
.mh-blog-cat-list a:hover .count,
.mh-blog-cat-list a.is-active .count {
    background: var(--mh-primary, #5191FA);
    color: #fff;
}

.mh-blog-side-list {
    list-style: none;
    padding: 0;
    margin: 0;
}
.mh-blog-side-list li { padding: 0; }
.mh-blog-side-list__item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 12px 0;
    border-bottom: 1px solid #F0F0F0;
    text-decoration: none;
    color: inherit;
    transition: opacity .15s;
}
.mh-blog-side-list li:last-child .mh-blog-side-list__item { border-bottom: 0; padding-bottom: 0; }
.mh-blog-side-list li:first-child .mh-blog-side-list__item { padding-top: 0; }
.mh-blog-side-list__item:hover .t { color: var(--mh-primary, #5191FA); }
.mh-blog-side-list__item.is-current .mh-blog-side-list__img { outline: 2px solid var(--mh-primary, #5191FA); outline-offset: 1px; }
.mh-blog-side-list__img {
    flex: 0 0 64px;
    width: 64px;
    height: 64px;
    border-radius: 10px;
    overflow: hidden;
    background: #EAF1FB;
}
.mh-blog-side-list__img img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.mh-blog-side-list__body {
    flex: 1 1 auto;
    min-width: 0;
}
.mh-blog-side-list__body .t {
    display: block;
    font-family: var(--mh-system-font), sans-serif;
    font-size: 14px;
    font-weight: 600;
    line-height: 20px;
    color: var(--mh-text, #1A2B48);
    margin-bottom: 4px;
    transition: color .15s;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.mh-blog-side-list__body .m {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    color: #9AA5B1;
    font-size: 12px;
    line-height: 1.2;
}
.mh-blog-side-list__body .m i { color: var(--mh-primary, #5191FA); font-size: 12px; }

.mh-blog-widget--book {
    background: linear-gradient(135deg, #5191FA 0%, #2868D6 100%);
    color: #fff;
    border: 0;
}
.mh-blog-widget--book .mh-blog-widget__title {
    color: #fff;
    border-bottom-color: rgba(255, 255, 255, 0.2);
}
.mh-blog-widget--book .mh-blog-widget__title::before { background: #fff; }
.mh-blog-widget--book .mh-blog-cat-list a {
    color: rgba(255, 255, 255, 0.9);
}
.mh-blog-widget--book .mh-blog-cat-list a:hover,
.mh-blog-widget--book .mh-blog-cat-list a.is-active {
    background: rgba(255, 255, 255, 0.15);
    color: #fff;
}
.mh-blog-widget--book .mh-blog-cat-list a .count {
    background: rgba(255, 255, 255, 0.2);
    color: #fff;
}

.mh-blog-widget--cta {
    background: linear-gradient(135deg, var(--mh-orange, #FA5636) 0%, #E64A2A 100%);
    color: #fff;
    border: 0;
    text-align: center;
}
.mh-blog-widget--cta h3 {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 18px;
    font-weight: 700;
    color: #fff;
    margin: 0 0 8px;
}
.mh-blog-widget--cta p {
    color: rgba(255, 255, 255, 0.92);
    font-size: 13px;
    line-height: 21px;
    margin: 0 0 18px;
}
.mh-blog-widget__cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 10px 22px;
    background: #fff;
    color: var(--mh-orange, #FA5636);
    border-radius: 999px;
    font-size: 14px;
    font-weight: 700;
    text-decoration: none;
    transition: background .15s, color .15s, transform .05s;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.mh-blog-widget__cta:hover {
    background: rgba(255, 255, 255, 0.92);
    color: var(--mh-orange, #FA5636);
    transform: translateY(-1px);
}

/* ---------- Blog detail page ---------- */
.mh-blog-detail-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
    align-items: center;
    color: rgba(255, 255, 255, 0.92);
    font-size: 14px;
    margin-top: 8px;
}
.mh-blog-detail-meta span { display: inline-flex; align-items: center; gap: 6px; }
.mh-blog-detail-meta i { color: #fff; }
.mh-blog-detail-meta__author {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
.mh-blog-detail-meta__author .avatar {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.2);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    overflow: hidden;
    font-size: 16px;
}
.mh-blog-detail-meta__author .avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.mh-blog-detail {
    background: #fff;
    border-radius: 16px;
    border: 1px solid #E5E8EC;
    padding: 30px 32px 32px;
    box-shadow: 0 2px 10px rgba(26, 43, 72, 0.04);
}
.mh-blog-detail__cover {
    margin: -30px -32px 24px;
    overflow: hidden;
    border-radius: 16px 16px 0 0;
    aspect-ratio: 21 / 9;
    background: #EAF1FB;
}
.mh-blog-detail__cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.mh-blog-detail__share {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding: 14px 0 18px;
    margin-bottom: 22px;
    border-bottom: 1px solid #F0F0F0;
}
.mh-blog-detail__share-label {
    font-size: 13px;
    font-weight: 600;
    color: #5E6D77;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-right: 4px;
}
.mh-blog-share-btn {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    text-decoration: none;
    font-size: 16px;
    transition: opacity .15s, transform .05s;
    flex: 0 0 auto;
}
.mh-blog-share-btn:hover { opacity: 0.85; color: #fff; }
.mh-blog-share-btn--fb { background: #1877F2; }
.mh-blog-share-btn--tw { background: #1DA1F2; }
.mh-blog-share-btn--li { background: #0A66C2; }
.mh-blog-share-btn--em { background: #FA5636; }

.mh-blog-detail__body {
    color: #2F3A4A;
    font-size: 16px;
    line-height: 28px;
}
.mh-blog-detail__body h2 {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 26px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
    margin: 32px 0 14px;
    line-height: 36px;
}
.mh-blog-detail__body h3 {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 21px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
    margin: 28px 0 12px;
    line-height: 30px;
}
.mh-blog-detail__body h4 {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 18px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
    margin: 22px 0 10px;
}
.mh-blog-detail__body p { margin: 0 0 16px; }
.mh-blog-detail__body a {
    color: var(--mh-primary, #5191FA);
    text-decoration: none;
    font-weight: 500;
    border-bottom: 1px solid rgba(81, 145, 250, 0.3);
    transition: border-color .15s, color .15s;
}
.mh-blog-detail__body a:hover { border-color: var(--mh-primary, #5191FA); }
.mh-blog-detail__body ul,
.mh-blog-detail__body ol {
    margin: 0 0 18px;
    padding-left: 22px;
    line-height: 28px;
}
.mh-blog-detail__body li { margin-bottom: 6px; }
.mh-blog-detail__body blockquote {
    margin: 24px 0;
    padding: 18px 24px;
    background: rgba(81, 145, 250, 0.06);
    border-left: 4px solid var(--mh-primary, #5191FA);
    border-radius: 0 12px 12px 0;
    color: var(--mh-text, #1A2B48);
    font-style: italic;
}
.mh-blog-detail__body img {
    max-width: 100%;
    height: auto;
    border-radius: 12px;
    margin: 16px 0;
}
.mh-blog-detail__body figure { margin: 20px 0; }
.mh-blog-detail__body figcaption {
    color: #9AA5B1;
    font-size: 13px;
    text-align: center;
    margin-top: 8px;
}
.mh-blog-detail__body code {
    background: #F2F4F7;
    color: #E64A2A;
    padding: 2px 6px;
    border-radius: 4px;
    font-size: 14px;
    font-family: 'SFMono-Regular', Consolas, monospace;
}
.mh-blog-detail__body pre {
    background: #1A2B48;
    color: #EAF1FB;
    padding: 16px 20px;
    border-radius: 10px;
    overflow-x: auto;
    margin: 18px 0;
}
.mh-blog-detail__body pre code {
    background: transparent;
    color: inherit;
    padding: 0;
    font-size: 14px;
}
.mh-blog-detail__body table {
    width: 100%;
    border-collapse: collapse;
    margin: 18px 0;
    font-size: 14px;
}
.mh-blog-detail__body table th,
.mh-blog-detail__body table td {
    padding: 10px 12px;
    border: 1px solid #E5E8EC;
    text-align: left;
}
.mh-blog-detail__body table th {
    background: #F7F8FA;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
}

.mh-blog-detail__tags {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-top: 24px;
    padding-top: 22px;
    border-top: 1px solid #F0F0F0;
}
.mh-blog-detail__tags-label {
    color: #5E6D77;
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-right: 4px;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}
.mh-blog-tag {
    display: inline-flex;
    align-items: center;
    padding: 5px 12px;
    background: #F2F4F7;
    color: #5E6D77;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 500;
    text-decoration: none;
    transition: background .15s, color .15s;
    line-height: 1.2;
}
.mh-blog-tag:hover { background: var(--mh-primary, #5191FA); color: #fff; }

.mh-blog-detail__author-box {
    display: flex;
    align-items: flex-start;
    gap: 18px;
    margin-top: 26px;
    padding: 22px;
    background: #F7F8FA;
    border-radius: 14px;
    border: 1px solid #E5E8EC;
}
.mh-blog-detail__author-box .avatar {
    flex: 0 0 64px;
    width: 64px;
    height: 64px;
    border-radius: 50%;
    background: rgba(81, 145, 250, 0.1);
    color: var(--mh-primary, #5191FA);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 28px;
    overflow: hidden;
}
.mh-blog-detail__author-box .avatar img { width: 100%; height: 100%; object-fit: cover; }
.mh-blog-detail__author-box .body { flex: 1 1 auto; min-width: 0; }
.mh-blog-detail__author-box .role {
    font-size: 11px;
    font-weight: 700;
    color: var(--mh-primary, #5191FA);
    text-transform: uppercase;
    letter-spacing: 0.06em;
}
.mh-blog-detail__author-box h4 {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 18px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
    margin: 4px 0 6px;
}
.mh-blog-detail__author-box p {
    color: #5E6D77;
    font-size: 14px;
    line-height: 22px;
    margin: 0;
}

.mh-blog-detail__related { margin-top: 36px; padding-top: 28px; border-top: 1px solid #F0F0F0; }
.mh-blog-detail__related-title {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 22px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
    margin: 0 0 22px;
    line-height: 1.3;
}

/* ---------- Responsive ---------- */
@media (max-width: 1199.98px) {
    .mh-blog-hero-title { font-size: 44px; line-height: 52px; }
}
@media (max-width: 991.98px) {
    .mh-blog-hero-post { grid-template-columns: 1fr; }
    .mh-blog-hero-post__media { aspect-ratio: 16 / 9; min-height: 240px; }
    .mh-blog-hero-post__body { padding: 28px 24px; }
    .mh-blog-detail { padding: 24px 24px 26px; }
    .mh-blog-detail__cover { margin: -24px -24px 22px; }
    .mh-blog-hero-title { font-size: 36px; line-height: 44px; }
    .mh-blog-grid { grid-template-columns: 1fr; gap: 18px; }
}
@media (max-width: 575.98px) {
    .mh-blog-hero-title { font-size: 30px; line-height: 38px; }
    .mh-blog-hero-sub { font-size: 15px; line-height: 24px; }
    .mh-blog-search { padding: 4px 4px 4px 14px; }
    .mh-blog-search__btn { padding: 9px 16px; font-size: 13px; }
    .mh-blog-hero-post__title { font-size: 22px; line-height: 30px; }
    .mh-blog-detail__share-label { width: 100%; margin-bottom: 4px; }
    .mh-blog-detail__author-box { flex-direction: column; align-items: flex-start; }
    .mh-blog-section-header { flex-direction: column; align-items: flex-start; gap: 6px; }
}

/* ============================================================
   /blog/{slug} — Detail page hero (light card layout)
   Replaces the previous dark-bg hero. The new layout:
     - Light background (#F7F8FA) + white card with shadow
     - Card holds: category/featured pills → title → meta row (with dividers)
     - Cover image below the head, generous rounded corners
     - Date badge sits on the cover image (bottom-left)
   This makes the title much more readable and the page consistent
   with the rest of the design system (white cards on gray bg).
   ============================================================ */

/* Light-variant breadcrumb used on the detail hero (dark text on light bg). */
.mh-blog-breadcrumb--light {
    color: #5E6D77;
    margin-bottom: 22px;
}
.mh-blog-breadcrumb--light a {
    color: #5E6D77;
    font-weight: 500;
}
.mh-blog-breadcrumb--light a:hover { color: var(--mh-primary, #5191FA); text-decoration: none; }
.mh-blog-breadcrumb--light .current,
.mh-blog-breadcrumb--light a:last-child {
    color: var(--mh-primary, #5191FA);
    font-weight: 600;
}

/* The light hero section strips the default elementor padding so the
   card sits flush at the top. The card handles its own internal padding. */
.mh-blog-detail-hero {
    padding: 32px 0 0 !important;
}

/* The card containers everything (head + cover) so the page reads as
   one cohesive unit. */
.mh-blog-hero-card {
    background: #fff;
    border: 1px solid #E5E8EC;
    border-radius: 18px;
    overflow: hidden;
    box-shadow: 0 4px 22px rgba(26, 43, 72, 0.06);
    margin-bottom: 0;
    width: 100%;
    display: block;
}

/* ----- Head (pills + title + meta) ----- */
.mh-blog-hero-card__head {
    padding: 36px 40px 28px;
    border-bottom: 1px solid #F0F0F0;
}

.mh-blog-hero-card__pills {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin-bottom: 18px;
}
.mh-blog-hero-card__cat {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    background: rgba(81, 145, 250, 0.10);
    color: var(--mh-primary, #5191FA);
    border-radius: 999px;
    font-size: 13px;
    font-weight: 600;
    text-decoration: none;
    transition: background .15s, color .15s;
    line-height: 1.2;
}
.mh-blog-hero-card__cat i { font-size: 14px; }
.mh-blog-hero-card__cat:hover {
    background: var(--mh-primary, #5191FA);
    color: #fff;
}
.mh-blog-hero-card__featured {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    background: rgba(250, 86, 54, 0.10);
    color: var(--mh-orange, #FA5636);
    border-radius: 999px;
    font-size: 13px;
    font-weight: 600;
    line-height: 1.2;
}
.mh-blog-hero-card__featured i { font-size: 14px; }

.mh-blog-hero-card__title {
    font-family: var(--mh-system-font), sans-serif;
    color: var(--mh-text, #1A2B48);
    font-size: 36px;
    font-weight: 700;
    line-height: 1.3;
    margin: 0 0 18px;
    max-width: 920px;
    /* Override the previously-applied inline `font-size:42px;line-height:54px;`
       on titles coming from the old template. */
}

/* Meta row — author block + 3 inline items separated by vertical dividers. */
.mh-blog-hero-card__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 14px 18px;
    color: #5E6D77;
    font-size: 14px;
    line-height: 1.4;
}

.mh-blog-hero-card__author {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding-right: 4px;
}
.mh-blog-hero-card__author .avatar {
    flex: 0 0 40px;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: linear-gradient(135deg, #5191FA 0%, #2868D6 100%);
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    font-family: var(--mh-system-font), sans-serif;
    font-weight: 700;
    font-size: 16px;
    line-height: 1;
    box-shadow: 0 2px 6px rgba(81, 145, 250, 0.25);
}
.mh-blog-hero-card__author .avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.mh-blog-hero-card__author .who {
    display: inline-flex;
    flex-direction: column;
    line-height: 1.2;
}
.mh-blog-hero-card__author .role {
    font-size: 11px;
    color: #9AA5B1;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    font-weight: 600;
}
.mh-blog-hero-card__author .name {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 14px;
    color: var(--mh-text, #1A2B48);
    font-weight: 700;
    margin-top: 2px;
}

/* Vertical divider between meta items. */
.mh-blog-hero-card__divider {
    width: 1px;
    height: 22px;
    background: #E5E8EC;
    flex: 0 0 auto;
}

.mh-blog-hero-card__meta-item {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: #5E6D77;
}
.mh-blog-hero-card__meta-item i {
    color: var(--mh-primary, #5191FA);
    font-size: 16px;
}

/* ----- Cover image (large hero visual) + date badge ----- */
.mh-blog-hero-card__cover {
    position: relative;
    overflow: hidden;
    background: #EAF1FB;
    aspect-ratio: 21 / 9;
    min-height: 280px;
}
.mh-blog-hero-card__cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* Date badge floating on the cover image (bottom-left). */
.mh-blog-hero-card__date-badge {
    position: absolute;
    bottom: 22px;
    left: 22px;
    background: #fff;
    border-radius: 12px;
    padding: 10px 18px;
    text-align: center;
    line-height: 1.1;
    box-shadow: 0 8px 22px rgba(0, 0, 0, 0.18);
    min-width: 72px;
}
.mh-blog-hero-card__date-badge .d {
    display: block;
    font-family: var(--mh-system-font), sans-serif;
    font-size: 26px;
    font-weight: 700;
    color: var(--mh-text, #1A2B48);
}
.mh-blog-hero-card__date-badge .m {
    display: block;
    font-size: 11px;
    font-weight: 700;
    color: var(--mh-primary, #5191FA);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    margin-top: 2px;
}
.mh-blog-hero-card__date-badge .y {
    display: block;
    font-size: 11px;
    color: #9AA5B1;
    margin-top: 2px;
    font-weight: 600;
}

/* ============================================================
   /blog/{slug} — Detail page body
   The body section starts AT the bottom of the hero card so the
   share row / article / related strip sit right under the cover image.
   ============================================================ */

/* Article card. The cover image is now part of the hero, so the
   body card no longer needs negative margins to pull the cover up. */
.mh-blog-detail {
    background: #fff;
    border-radius: 16px;
    border: 1px solid #E5E8EC;
    padding: 32px 36px 36px;
    box-shadow: 0 2px 12px rgba(26, 43, 72, 0.05);
    margin-bottom: 12px;
}
/* Override the previous `.mh-blog-detail__cover` rule — the cover now
   lives in the hero card and shouldn't be re-rendered inside the body. */
.mh-blog-detail__cover { display: none !important; }

/* Re-position the share row so it sits at the top of the article card
   with a clean divider. */
.mh-blog-detail__share {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 0 0 18px;
    margin-bottom: 26px;
    border-bottom: 1px solid #F0F0F0;
}
.mh-blog-detail__share-label {
    font-size: 13px;
    font-weight: 600;
    color: #5E6D77;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.mh-blog-detail__share-btns {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

/* Responsive: stack hero card head + meta on narrow screens. */
@media (max-width: 991.98px) {
    .mh-blog-hero-card__head { padding: 28px 24px 22px; }
    .mh-blog-hero-card__title { font-size: 28px; line-height: 1.32; }
    .mh-blog-hero-card__meta { gap: 10px 14px; }
    .mh-blog-hero-card__divider { display: none; }
    .mh-blog-hero-card__cover { aspect-ratio: 16 / 9; min-height: 220px; }
    .mh-blog-hero-card__date-badge { left: 16px; bottom: 16px; padding: 8px 14px; }
    .mh-blog-hero-card__date-badge .d { font-size: 22px; }
    .mh-blog-detail { padding: 24px 24px 28px; }
}
@media (max-width: 575.98px) {
    .mh-blog-hero-card__head { padding: 22px 18px 18px; }
    .mh-blog-hero-card__title { font-size: 24px; line-height: 1.3; margin-bottom: 14px; }
    .mh-blog-hero-card__meta { font-size: 13px; }
    .mh-blog-hero-card__author .avatar { flex: 0 0 36px; width: 36px; height: 36px; font-size: 14px; }
    .mh-blog-hero-card__cover { aspect-ratio: 4 / 3; min-height: 180px; }
    .mh-blog-hero-card__date-badge { left: 14px; bottom: 14px; padding: 6px 12px; min-width: 60px; }
    .mh-blog-hero-card__date-badge .d { font-size: 20px; }
    .mh-blog-detail { padding: 20px 18px 24px; }
}

/* ============================================================
   /blog — listing page hero
   The Traveler theme's `.elementor-widget-wrap` defaults to
   flex-direction: row in some contexts, which causes the breadcrumb,
   title, search, and chips to render SIDE-BY-SIDE instead of stacked.
   Force column layout on the listing hero so each section sits on
   its own row with the spacing we control.
   ============================================================ */

.mh-blog-list-hero {
    padding: 32px 0 0 !important;
}

.mh-blog-list-hero__wrap {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 0;
    background: #fff;
    border-radius: 18px;
    padding: 40px 44px;
    box-shadow: 0 4px 22px rgba(26, 43, 72, 0.06);
    margin-bottom: 24px;
}

/* Title on the listing hero. Reuses the detail page's title style
   but is allowed to be larger (the detail page is constrained by the
   card width). */
.mh-blog-list-hero__title {
    font-family: var(--mh-system-font), sans-serif;
    color: var(--mh-text, #1A2B48);
    font-size: 44px;
    font-weight: 700;
    line-height: 1.25;
    margin: 0 0 14px;
    max-width: 760px;
    letter-spacing: -0.01em;
}

.mh-blog-list-hero__sub {
    color: #5E6D77;
    font-size: 16px;
    line-height: 1.6;
    margin: 0;
    max-width: 640px;
}

/* ----- Search band (dark) ----- */
.mh-blog-list-search {
    padding: 50px 0 40px !important;
}

.mh-blog-list-search__wrap {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    gap: 22px;
}

/* Center the search and chips on the dark band. */
.mh-blog-list-search__wrap .mh-blog-search {
    width: 100%;
    max-width: 640px;
}

.mh-blog-list-search__wrap .mh-blog-chips {
    max-width: 100%;
    justify-content: center;
}

/* Responsive: shrink card padding + title on smaller screens. */
@media (max-width: 1199.98px) {
    .mh-blog-list-hero__wrap { padding: 32px 28px; }
    .mh-blog-list-hero__title { font-size: 36px; }
}
@media (max-width: 991.98px) {
    .mh-blog-list-hero__wrap { padding: 28px 24px; }
    .mh-blog-list-hero__title { font-size: 30px; }
}
@media (max-width: 575.98px) {
    .mh-blog-list-hero__wrap { padding: 22px 18px; }
    .mh-blog-list-hero__title { font-size: 26px; line-height: 1.3; }
    .mh-blog-list-hero__sub { font-size: 14px; }
    .mh-blog-list-search { padding: 32px 0 28px !important; }
}

/* ============================================================
   /blog — listing page hero (full-width dark hero + cover image)
   Dramatic two-column hero:
     - LEFT  : breadcrumb + eyebrow + huge title + subtitle + search + stats
     - RIGHT : floating cover image card with overlay + 2 floating badges
   Layout uses CSS Grid so the columns stay aligned on all viewports.
   ============================================================ */

/* The hero lives inside multiple constrained wrappers:
       body > .site > .site-content > .elementor-240 > .elementor-inner
             > .elementor-section-wrap > [hero]
   Each of those ancestors can have its own max-width, padding, or
   background that bleeds into the dark hero. Override them all so the
   gradient fills the entire viewport width. */
body:has(.mh-blog-list-hero) {
    overflow-x: hidden;
}
body:has(.mh-blog-list-hero) #page.site,
body:has(.mh-blog-list-hero) #content.site-content,
body:has(.mh-blog-list-hero) .elementor-240,
body:has(.mh-blog-list-hero) .elementor-inner,
body:has(.mh-blog-list-hero) .elementor-section-wrap {
    background: transparent !important;
    max-width: none !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    width: 100% !important;
}

/* The Traveler theme paints `.elementor-widget-wrap` white by default,
   which would hide the white title and breadcrumb inside this dark hero.
   Force all elementor containers inside the hero transparent so the
   gradient shows through and text stays readable.
   IMPORTANT: do NOT override `.elementor-container`'s max-width here —
   we want the content to stay centered at ~1140px while the section's
   dark background fills the entire viewport. */
body:has(.mh-blog-list-hero) .mh-blog-list-hero .elementor-container,
body:has(.mh-blog-list-hero) .mh-blog-list-hero .elementor-column,
body:has(.mh-blog-list-hero) .mh-blog-list-hero .elementor-widget-wrap {
    background: transparent !important;
}

.mh-blog-list-hero {
    padding: 0 !important;
    overflow: hidden;
    position: relative;
    /* BREAK OUT of every constrained ancestor using the standard
       `left:50%; margin-left:-50vw; width:100vw` trick. This works even
       when ancestors have max-width or auto margins. */
    width: 100vw;
    margin-left: calc(50% - 50vw);
    /* Layered background: top gradient + diagonal stripe + bottom pattern */
    background:
        radial-gradient(ellipse at 90% 20%, rgba(81, 145, 250, 0.45) 0%, transparent 50%),
        radial-gradient(ellipse at 10% 90%, rgba(250, 86, 54, 0.25) 0%, transparent 55%),
        linear-gradient(135deg, #0e1a33 0%, #1a2b48 60%, #1f3a6b 100%) !important;
}

/* Same override for the chips band below the hero so its white card blends
   with the section's own white background instead of looking like a card. */
.mh-blog-list-chips-section {
    background: #fff !important;
}
.mh-blog-list-chips-section .elementor-widget-wrap,
.mh-blog-list-chips-section .elementor-column,
.mh-blog-list-chips-section .elementor-container {
    background: transparent !important;
}

/* Decorative blurred circles in the background corners. */
.mh-blog-list-hero::before,
.mh-blog-list-hero::after {
    content: "";
    position: absolute;
    border-radius: 50%;
    pointer-events: none;
    z-index: 0;
}
.mh-blog-list-hero::before {
    width: 360px;
    height: 360px;
    top: -120px;
    left: -120px;
    background: radial-gradient(circle, rgba(81, 145, 250, 0.35) 0%, transparent 70%);
    filter: blur(20px);
}
.mh-blog-list-hero::after {
    width: 280px;
    height: 280px;
    bottom: -100px;
    right: 30%;
    background: radial-gradient(circle, rgba(250, 86, 54, 0.25) 0%, transparent 70%);
    filter: blur(15px);
}

.mh-blog-list-hero__wrap {
    position: relative;
    z-index: 1;
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    padding: 0;
    margin: 0;
}

.mh-blog-list-hero__inner {
    display: grid;
    /* The right (visual) column gets slightly less fractional weight so the
       cover image sits closer to the center; combined with `padding-right`
       below, it visually shifts the cover image further away from the text
       and toward the right edge of the container. */
    grid-template-columns: 1.15fr 1fr;
    gap: 60px;
    align-items: center;
    min-height: 540px;
    /* Extra right padding pushes the entire row toward the center, which
       moves the right-column cover image visibly to the right relative to
       the left column's content. */
    padding: 64px 8px 56px 0;
    position: relative;
}

/* Give the visual column a small left inset so the cover image is offset
   away from the gap and clearly sits to the right of the text block.
   The floating badges inside get re-anchored to compensate. */
.mh-blog-list-hero__visual {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 420px;
    margin-left: 28px;
}

/* ---------- LEFT: text content ---------- */
.mh-blog-list-hero__text {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    max-width: 560px;
}

.mh-blog-list-hero__text .mh-blog-breadcrumb {
    color: rgba(255, 255, 255, 0.7);
    margin-bottom: 16px;
}
.mh-blog-list-hero__text .mh-blog-breadcrumb a {
    color: rgba(255, 255, 255, 0.7);
    text-decoration: none;
    transition: color .15s;
}
.mh-blog-list-hero__text .mh-blog-breadcrumb a:hover { color: #fff; }
.mh-blog-list-hero__text .mh-blog-breadcrumb .current { color: #fff; font-weight: 600; }
.mh-blog-list-hero__text .mh-blog-breadcrumb .sep { opacity: 0.5; }

/* Eyebrow label — small uppercase pill above the title. */
.mh-blog-list-hero__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    background: rgba(255, 255, 255, 0.12);
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 999px;
    color: #fff;
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    margin-bottom: 18px;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
}
.mh-blog-list-hero__eyebrow i {
    color: #FFD56B;
    font-size: 14px;
}

/* Title — huge, 3-line, color white with subtle shadow. */
.mh-blog-list-hero__title {
    font-family: var(--mh-system-font), sans-serif;
    color: #fff;
    font-size: 56px;
    font-weight: 700;
    line-height: 1.12;
    margin: 0 0 18px;
    max-width: 640px;
    letter-spacing: -0.02em;
    text-shadow: 0 2px 18px rgba(0, 0, 0, 0.18);
}

.mh-blog-list-hero__sub {
    color: rgba(255, 255, 255, 0.85);
    font-size: 16px;
    line-height: 1.65;
    margin: 0 0 28px;
    max-width: 520px;
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.1);
}

/* Search box — pill style, white background, max-width 520px. */
.mh-blog-list-hero__text .mh-blog-search {
    width: 100%;
    max-width: 520px;
    margin-bottom: 28px;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);
}

/* Stats row — 3 inline stats under the search. */
.mh-blog-list-hero__stats {
    display: flex;
    flex-wrap: wrap;
    gap: 28px;
    padding-top: 20px;
    border-top: 1px solid rgba(255, 255, 255, 0.15);
    width: 100%;
    max-width: 520px;
}
.mh-blog-list-hero__stats .stat {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.mh-blog-list-hero__stats .num {
    font-family: var(--mh-system-font), sans-serif;
    color: #fff;
    font-size: 26px;
    font-weight: 700;
    line-height: 1.1;
    background: linear-gradient(135deg, #5191FA 0%, #6DD5FA 100%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
}
.mh-blog-list-hero__stats .lbl {
    color: rgba(255, 255, 255, 0.7);
    font-size: 12px;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.06em;
}

/* ---------- RIGHT: visual cover image card ---------- */
.mh-blog-list-hero__cover {
    position: relative;
    display: block;
    width: 100%;
    max-width: 440px;
    aspect-ratio: 4 / 5;
    border-radius: 24px;
    overflow: hidden;
    box-shadow: 0 30px 60px rgba(0, 0, 0, 0.35);
    transform: rotate(-2deg);
    transition: transform .35s ease;
    text-decoration: none;
    background: #1a2b48;
}
.mh-blog-list-hero__cover:hover {
    transform: rotate(0deg) scale(1.02);
}
.mh-blog-list-hero__cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform .5s ease;
}
.mh-blog-list-hero__cover:hover img { transform: scale(1.05); }

.mh-blog-list-hero__cover-overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent 0%, transparent 40%, rgba(14, 26, 51, 0.85) 100%);
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 24px;
    color: #fff;
}
.mh-blog-list-hero__cover-cat {
    display: inline-flex;
    align-self: flex-start;
    padding: 5px 12px;
    background: var(--mh-orange, #FA5636);
    color: #fff;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    margin-bottom: 12px;
    box-shadow: 0 4px 12px rgba(250, 86, 54, 0.4);
}
.mh-blog-list-hero__cover-title {
    font-family: var(--mh-system-font), sans-serif;
    font-size: 20px;
    font-weight: 700;
    line-height: 1.35;
    color: #fff;
    margin: 0 0 14px;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.mh-blog-list-hero__cover-cta {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: #fff;
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    transition: gap .15s;
}
.mh-blog-list-hero__cover:hover .mh-blog-list-hero__cover-cta { gap: 10px; }

/* Floating badges — small cards floating around the cover image. */
.mh-blog-list-hero__floater {
    position: absolute;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    background: #fff;
    border-radius: 14px;
    box-shadow: 0 12px 28px rgba(0, 0, 0, 0.18);
    z-index: 2;
}
.mh-blog-list-hero__floater--new {
    top: 30px;
    right: 0;
    background: var(--mh-orange, #FA5636);
    color: #fff;
    font-size: 13px;
    font-weight: 700;
    transform: rotate(6deg);
    animation: mh-floater-bounce 2.5s ease-in-out infinite;
}
.mh-blog-list-hero__floater--new i {
    font-size: 18px;
    color: #fff;
}

.mh-blog-list-hero__floater--rating {
    bottom: 30px;
    left: -10px;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    padding: 12px 18px;
    transform: rotate(-3deg);
}
.mh-blog-list-hero__floater--rating .stars {
    display: inline-flex;
    gap: 2px;
    color: #FFB800;
    font-size: 14px;
}
.mh-blog-list-hero__floater--rating .lbl {
    color: #1A2B48;
    font-size: 12px;
    font-weight: 700;
    line-height: 1.2;
}

@keyframes mh-floater-bounce {
    0%, 100% { transform: rotate(6deg) translateY(0); }
    50% { transform: rotate(6deg) translateY(-6px); }
}

/* ============================================================
   /blog — filter chips section (white band below the hero)
   The chips live on their own white band so they're easily tappable
   and visually separated from the dramatic hero.
   ============================================================ */

.mh-blog-list-chips-section {
    padding: 18px 0 !important;
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.04);
}

.mh-blog-list-chips__wrap {
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    flex-wrap: wrap;
    gap: 14px;
}

.mh-blog-list-chips__label {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: #5E6D77;
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.mh-blog-list-chips__label i {
    color: var(--mh-primary, #5191FA);
    font-size: 16px;
}

.mh-blog-list-chips__list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    flex: 1 1 auto;
    min-width: 0;
}

.mh-blog-list-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 16px;
    background: #F7F8FA;
    color: #5E6D77;
    border: 1px solid #E5E8EC;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 600;
    text-decoration: none;
    transition: background .15s, color .15s, border-color .15s, transform .05s;
    line-height: 1.2;
}
.mh-blog-list-chip:hover {
    background: rgba(81, 145, 250, 0.08);
    color: var(--mh-primary, #5191FA);
    border-color: rgba(81, 145, 250, 0.3);
}
.mh-blog-list-chip.is-active {
    background: var(--mh-primary, #5191FA);
    color: #fff;
    border-color: var(--mh-primary, #5191FA);
    box-shadow: 0 4px 12px rgba(81, 145, 250, 0.25);
}
.mh-blog-list-chip .count {
    background: rgba(255, 255, 255, 0.25);
    color: inherit;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 700;
    line-height: 1.2;
}
.mh-blog-list-chip:not(.is-active) .count {
    background: #E5E8EC;
    color: #5E6D77;
}

/* ============================================================
   Responsive
   ============================================================ */

/* Tablet — collapse grid to single column, keep visual but smaller. */
@media (max-width: 1199.98px) {
    .mh-blog-list-hero__inner { gap: 40px; padding: 56px 0 48px; min-height: 500px; }
    .mh-blog-list-hero__title { font-size: 48px; }
    .mh-blog-list-hero__cover { max-width: 380px; }
}

/* Tablet portrait — single column, hero visually stacks. */
@media (max-width: 991.98px) {
    .mh-blog-list-hero__inner {
        grid-template-columns: 1fr;
        gap: 48px;
        min-height: auto;
        padding: 48px 8px 40px;
    }
    .mh-blog-list-hero__text { max-width: 100%; align-items: center; text-align: center; }
    .mh-blog-list-hero__text .mh-blog-breadcrumb { justify-content: center; }
    .mh-blog-list-hero__title { font-size: 40px; max-width: 100%; }
    .mh-blog-list-hero__sub { max-width: 100%; }
    .mh-blog-list-hero__text .mh-blog-search { margin-left: auto; margin-right: auto; }
    .mh-blog-list-hero__stats { justify-content: center; }
    .mh-blog-list-hero__visual { min-height: auto; margin-left: 0; }
    .mh-blog-list-hero__cover { max-width: 360px; transform: rotate(0deg); }
    .mh-blog-list-hero__floater--new { right: 20px; top: 20px; }
    .mh-blog-list-hero__floater--rating { left: 20px; bottom: 20px; }
}

/* Mobile — small screens, all centered and compact. */
@media (max-width: 575.98px) {
    .mh-blog-list-hero__inner { padding: 36px 0 32px; gap: 36px; }
    .mh-blog-list-hero__title { font-size: 32px; line-height: 1.15; }
    .mh-blog-list-hero__sub { font-size: 14px; line-height: 1.55; }
    .mh-blog-list-hero__stats { gap: 18px; padding-top: 16px; }
    .mh-blog-list-hero__stats .num { font-size: 22px; }
    .mh-blog-list-hero__stats .lbl { font-size: 11px; }
    .mh-blog-list-hero__cover { max-width: 300px; border-radius: 18px; }
    .mh-blog-list-hero__cover-title { font-size: 17px; }
    .mh-blog-list-hero__floater--new { padding: 8px 14px; font-size: 12px; }
    .mh-blog-list-hero__floater--new i { font-size: 16px; }
    .mh-blog-list-hero__floater--rating { padding: 10px 14px; }
    .mh-blog-list-hero__floater--rating .lbl { font-size: 11px; }
    .mh-blog-list-chips__wrap { flex-direction: column; align-items: flex-start !important; gap: 10px; }
}

/* ==========================================================================
   Language switcher (replaces megahomestay.vn gTranslate popup).
   - .mh-lang-switcher is the <li> wrapping both the toggle and the dropdown
     menu; position:relative so the absolutely-positioned menu anchors to it.
   - .mh-lang-toggle mimics the old gTranslate anchor visually (flag + label
     + tiny ▼ caret) so we don't need to touch the surrounding header CSS.
   - .mh-lang-menu is hidden by default and shown via the .is-open class
     added by /assets/v3/js/megahomestay-lang-switcher.js on click / hover.
   ========================================================================== */

.mh-lang-switcher {
    position: relative !important;
}

/* Match the existing desktop .menu-item > a exactly:
     .header__center #st-main-menu .main-menu > li > a {
       display: block; padding: 35px 30px;
       font-size: 16px; font-weight: 700; line-height: 20px;
     }
   The Blog Review / Điểm Đến / Vé Vui Chơi items inherit the same anchor
   style — the switcher does too so the row stays visually identical. The
   flag image uses .emoji (mirroring the other anchors' emoji SVGs) so its
   height tracks the surrounding font size, keeping the row at exactly the
   same height as the rest of the menu. */
.mh-lang-switcher .mh-lang-toggle {
    display: block !important;
    padding: 35px 30px !important;
    font-size: 16px;
    font-weight: 700;
    line-height: 20px;
    color: inherit;
    text-decoration: none;
    white-space: nowrap;
}

.mh-lang-switcher .mh-lang-toggle .emoji {
    /* img.emoji in megahomestay-inline.css already sets 1em × 1em — no
       extra overrides needed; this line just documents the dependency. */
}

.mh-lang-switcher .mh-lang-arrow {
    color: #666;
    font-size: 8px;
    font-weight: bold;
    margin-left: 4px;
}

/* On the 1399px breakpoint the nav anchors shrink their padding to 35px 24px
   35px 10px — mirror that on the switcher toggle so it stays aligned. */
@media screen and (max-width: 1399.98px) {
    .mh-lang-switcher .mh-lang-toggle {
        padding: 35px 24px 35px 10px !important;
    }
}

/* On the mobile breakpoint the nav anchors collapse to 17px 0 15px 0 —
   mirror that so the switcher row matches the rest of the menu. */
@media screen and (max-width: 991.98px) {
    .mh-lang-switcher .mh-lang-toggle {
        padding: 17px 0 15px 0 !important;
    }
}

/* Mobile menu — each item on its own line.
   The Traveler base CSS ships `#st-main-menu .main-menu > li` as
   `display: inline-block` so the items sit side-by-side at desktop.
   On phones we open the menu as a vertical drawer (`#st-main-menu.open`)
   and need each row to break onto its own line, with a hairline border
   under it so visually adjacent rows (Điểm Đến / Vé Vui Chơi / Blog
   Review / Language switcher) don't look glued together. Also strip the
   list-marker that bleeds in if any reset is missing. */
@media (max-width: 991.98px) {
    #st-main-menu .main-menu {
        width: 100%;
    }
    #st-main-menu .main-menu > li {
        display: block !important;
        width: 100%;
        border-bottom: 1px solid rgba(26, 43, 72, 0.08);
    }
    #st-main-menu .main-menu > li:last-child {
        border-bottom: 0;
    }
    #st-main-menu .main-menu > li > a {
        padding: 16px 20px !important;
        display: flex !important;
        align-items: center;
        gap: 8px;
    }
    /* Force the lang-switcher toggle inside #st-main-menu to match the
       row padding above so its border-bottom lines up with the rest. */
    #st-main-menu .mh-lang-switcher .mh-lang-toggle {
        padding: 16px 20px !important;
    }
}

/* Default state của menu: ẩn hoàn toàn. Visibility/opacity/display đều
   được set để Tailwind utility (`invisible`, `opacity-0`, `-translate-y-1.5`)
   gắn trên Blade không có tác dụng mở menu. Khi JS add `.is-open` vào
   `.mh-lang-switcher`, rule ".mh-lang-switcher.is-open .mh-lang-menu"
   (~line 160) thắng cascade vì load SAU + dùng `!important`. */
.mh-lang-switcher .mh-lang-menu {
    display: none;
    position: absolute;
    top: 100%;
    right: 0;
    margin: 0;   /* trước đây là 6px 0 0 0 — gây khoảng trống giữa button và
                    menu, user di chuột xuống sẽ rời khỏi `:hover` (đã tắt)
                    hoặc làm menu cách xa button mất cảm giác liền mạch. */
    padding: 6px 0;
    list-style: none;
    background: #fff;
    border: 1px solid #E2E5EA;
    border-radius: 8px;
    box-shadow: 0 6px 20px rgba(26, 43, 72, 0.12);
    min-width: 160px;
    z-index: 9999;
}

/* Note: KHÔNG thêm `:hover` rule ở đây để mở menu — xem comment phía
   trên (rule ".mh-lang-switcher.is-open .mh-lang-menu" ở ~line 150) để
   biết lý do. Mở bằng `:hover` gây đóng/mở liên tục vì menu có margin,
   user di chuột xuống sẽ thoát khỏi vùng hover rồi menu tự đóng.

   `.mh-lang-switcher.is-open .mh-lang-menu` (rule ~line 160) thắng
   `display:none` ở đây vì nó có cùng specificity (0,2,0) + `!important`
   + khai báo SAU trong file → cascade thắng. */

.mh-lang-switcher .mh-lang-menu li {
    list-style: none;
}

.mh-lang-switcher .mh-lang-menu a {
    display: flex !important;
    align-items: center;
    gap: 8px;
    padding: 8px 14px;
    color: #1A2B48;
    text-decoration: none;
    font-size: 14px;
    line-height: 1.2;
}

.mh-lang-switcher .mh-lang-menu a:hover {
    background-color: #F7F8FA;
}

.mh-lang-switcher .mh-lang-menu img {
    border-radius: 2px;
    object-fit: cover;
    flex-shrink: 0;
}

.mh-lang-switcher .mh-lang-check {
    margin-left: auto;
    color: #5191FA;
    font-weight: 700;
}

.mh-lang-switcher .mh-lang-current > a {
    font-weight: 600;
    color: #5191FA;
}

@media (max-width: 767.98px) {
    .mh-lang-switcher .mh-lang-menu {
        right: 0;
        left: auto;
    }
}

/* ================================================================
 * Airbnb price-comparison table (rental-detail page).
 * Bảng so sánh "Giá gốc Airbnb" với "Giá bán tại MegaHomestay" cho
 * từng loại ngày (weekday / weekend / holiday).
 * ================================================================ */
.mh-airbnb-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    margin-top: 8px;
    border: 1px solid #E5E9F0;
    border-radius: 14px;
    overflow: hidden;
    font-size: 14px;
    background: #FFFFFF;
}
.mh-airbnb-table thead th {
    background: linear-gradient(135deg, #ff5c02 0%, #ff8a3c 100%);
    color: #ffffff;
    text-align: left;
    padding: 14px 18px;
    font-weight: 600;
    font-size: 14px;
    letter-spacing: 0.2px;
    border: 0;
}
.mh-airbnb-table thead th + th { text-align: right; }
.mh-airbnb-table tbody td {
    padding: 14px 18px;
    border-top: 1px solid #EEF1F5;
    color: var(--link-color, #1A2B48);
    vertical-align: middle;
    background: #FFFFFF;
    transition: background-color .15s ease;
}
.mh-airbnb-table tbody td + td { text-align: right; font-variant-numeric: tabular-nums; }
.mh-airbnb-table tbody tr:hover td { background: #FBFBFD; }
.mh-airbnb-table tbody tr:last-child td { border-bottom: 0; }
.mh-airbnb-table .mh-airbnb-type {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-weight: 600;
}
.mh-airbnb-table .mh-airbnb-type .mh-airbnb-badge {
    width: 32px;
    height: 32px;
    border-radius: 8px;
    background: rgba(255, 92, 2, 0.10);
    color: var(--main-color, #ff5c02);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
}
.mh-airbnb-table .mh-airbnb-original {
    text-decoration: line-through;
    color: #A3A9B5;
    font-size: 13px;
}
.mh-airbnb-table .mh-airbnb-sale {
    color: var(--main-color, #ff5c02);
    font-weight: 700;
    font-size: 15px;
}
.mh-airbnb-table .mh-airbnb-save-pct {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 999px;
    background: rgba(40, 167, 69, 0.12);
    color: #28a745;
    font-weight: 700;
    font-size: 13px;
}
.mh-airbnb-table .mh-airbnb-save-amount {
    color: #28a745;
    font-weight: 700;
}
.mh-airbnb-table tfoot td {
    padding: 14px 18px;
    background: #FCFCFC;
    border-top: 2px solid #E5E9F0;
    font-weight: 700;
    color: var(--link-color, #1A2B48);
}
.mh-airbnb-table tfoot td + td { text-align: right; font-variant-numeric: tabular-nums; }

.mh-airbnb-empty {
    background: #FCFCFC;
    border: 1px dashed #D7DCE5;
    border-radius: 14px;
    padding: 20px;
    color: var(--grey-color, #5E6D77);
    font-size: 14px;
    line-height: 1.5;
}

@media (max-width: 575.98px) {
    .mh-airbnb-table thead th,
    .mh-airbnb-table tbody td,
    .mh-airbnb-table tfoot td {
        padding: 12px 12px;
        font-size: 13px;
    }
    .mh-airbnb-table .mh-airbnb-type .mh-airbnb-badge { width: 28px; height: 28px; }
}

/* ============================================================
   GĐ2: Hero search form — mobile-first reflow
   The form uses fixed widths (260/420/170px) at desktop.

   IMPORTANT — the Traveler theme forces `display: block !important`
   on this <form> below 991px (main.css:1724, inside
   `@screen and (max-width: 991px)`), intending the row to stack
   vertically on phones. Two consequences we have to respect:

     1. `!important` beats any specificity, so we cannot make the
        form a flex container again at those widths.
     2. In `display: block` every child is a block box on its own
        line, so a child that still carries a FIXED `width` (220px /
        360px / 140px) does NOT fill the row — it just sits there
        while the next sibling starts at the same left edge. That is
        the overlap this block used to produce.

   So at ≤991.98px each column is given `width: 100%` and its fixed
   basis is dropped, which is exactly what the theme's block layout
   needs to stack cleanly. Fixed widths come back only above this
   breakpoint where the form is a real flex row.
   ============================================================ */
@media (max-width: 991.98px) {
    /* The Traveler base CSS sets `.button-search-wrapper { margin-left: auto }`
       so the button is shoved all the way to the right of the row. On
       phones the form is vertical (button sits below the date field) and
       that right-shove leaves the button visually lopsided vs. the
       full-width destination / date fields above it. Reset it so the
       wrapper is centered like the rest of the row. */
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .button-search-wrapper {
        margin-left: 0;
        margin-right: 0;
        align-self: stretch;
    }
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .destination-search,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search {
        width: 100%;
        min-width: 0;
        max-width: 100%;
        flex: none;
    }
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .button-search-wrapper .btn-search {
        padding-left: 24px;
        padding-right: 24px;
    }
}
/* 768–991.98: viewport too narrow for the 220/360 row to fit cleanly.
   Wrap the button onto its own line and let it span the full content
   width so the date field no longer pushes it off-screen. This sits
   BEFORE the existing 767.98px rule so the tighter breakpoint wins. */
@media (max-width: 850px) {
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form {
        flex-wrap: wrap;
        row-gap: 12px;
    }
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .button-search-wrapper {
        flex: 1 1 100%;
        margin-left: 0;
        margin-right: 0;
    }
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .button-search-wrapper .btn-search {
        width: 100%;
        padding-left: 24px;
        padding-right: 24px;
    }
}
@media (max-width: 767.98px) {
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form {
        flex-wrap: wrap;
        gap: 12px;
    }
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .destination-search,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search {
        flex: 1 1 100%;
        width: 100%;
        min-width: 0;
        max-width: 100%;
    }
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .button-search-wrapper {
        flex: 1 1 100%;
        margin-left: 0;
        margin-right: 0;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .button-search-wrapper .btn-search {
        width: 100%;
    }
    /* The Traveler base CSS adds 18px horizontal padding to each child
       cell (`.destination-search`, `.form-date-field`,
       `.button-search-wrapper`). On desktop that's the gutter between
       columns; below 768 the form is stacked vertically and that
       padding only pushes the button visibly to the right of the
       inputs above. Strip it. `.guests-search` is listed too even
       though its own wrapper carries no theme padding — keeping it in
       the same rule documents that the guests cell is a peer of the
       other two and must not acquire a stray gutter later. */
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .destination-search,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search {
        padding-left: 0 !important;
        padding-right: 0 !important;
    }
    /* Hero heading — gentle scale-down. The inline style on the H2 is
       64px / 74px; we override it only below 768px so desktop is byte-identical. */
    .elementor-element-2035586d .elementor-heading-title {
        font-size: 44px !important;
        line-height: 52px !important;
    }
    /* Section padding — the inline style sets 184px 0 which crushes
       mobile screens. Reset to something more proportional. */
    section[data-id="3a579432"] {
        padding: 80px 0 !important;
    }
}
@media (max-width: 575.98px) {
    .elementor-element-2035586d .elementor-heading-title {
        font-size: 32px !important;
        line-height: 40px !important;
    }
    .elementor-element-11126d2d .elementor-heading-title {
        font-size: 16px !important;
        line-height: 26px !important;
    }
    /* Search form on phones — kill horizontal paddings the Traveler base
       CSS adds to each child (`.destination-search` 18px right, `.form-date-field`
       18px both sides, `.button-search-wrapper` 18px left). On desktop they
       create the gutter between cells; on a 360–430px viewport they make the
       search button visibly offset to the right of the input fields above
       it because only the button has `padding-left` pushing its visible edge
       inward. Strip them all so the row aligns flush left/right with the
       panel border. */
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .destination-search,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .form-date-field,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .guests-search,
    .st-banner-search-form.style_2 .st-search-form-el .st-search-el .search-form .button-search-wrapper {
        padding-left: 0 !important;
        padding-right: 0 !important;
    }
    /* Search button on phones. The Traveler base ships `.btn-search` at
       60px tall with 16px font — far too tall for a 360–430px viewport
       where the whole form has to fit above the fold. Trim the height,
       round the corners a touch, and let the wrapper fill the row so
       the button spans the same width as the destination / date
       fields above (instead of hugging the right edge via
       `margin-left: auto`). */
    .st-banner-search-form.style_2 .st-search-form-el .button-search-wrapper {
        flex: 1 1 100%;
        margin-left: 0;
        margin-right: 0;
    }
    .st-banner-search-form.style_2 .st-search-form-el .button-search-wrapper .btn-search {
        width: 100%;
        height: 48px;
        font-size: 15px;
        padding-left: 16px;
        padding-right: 16px;
        justify-content: center;
    }
}

/* ============================================================
   GĐ4: Reposition "All photos" button on mobile
   At 767.98px the gallery rows change from 240x2 to 200x3 (600px),
   but the absolute button still references top:430px from the
   desktop layout — it overlaps gallery images. Anchor to bottom
   instead so it sits cleanly on the last row of photos.
   ============================================================ */
@media (max-width: 767.98px) {
    .st-gallery-all-photos-btn {
        top: auto !important;
        bottom: 12px;
    }
}

/* ============================================================
   GĐ6: Rental search page — fill the responsive gap
   The existing 991/575 rules handle sidebar collapse and result
   header, but the filter pills and result-card images stay desktop-
   sized below 768. Tighten padding and switch cards to fluid aspect.
   ============================================================ */
@media (max-width: 767.98px) {
    .mh-rs-sidebar {
        padding: 12px 16px;
    }
    .mh-rs-sidebar .mh-rs-pill,
    .mh-rs-filter .mh-rs-pill {
        padding: 6px 10px;
        font-size: 13px;
    }
    .mh-rs-results .mh-rs-card .mh-rs-card__media {
        aspect-ratio: 4 / 3;
        height: auto;
    }
    .mh-rs-results .mh-rs-card .mh-rs-card__media img {
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
}

/* ============================================================
   GĐ9: 320–374px viewport (iPhone SE / older Androids)
   Last-chance squeeze so nothing overflows on tiny screens.
   ============================================================ */
@media (max-width: 374.98px) {
    .st-banner-search-form.style_2 .st-search-form-el .button-search-wrapper .btn-search {
        padding: 10px 12px;
        font-size: 13px;
    }
    .mh-blog-hero-title,
    .mh-blog-list-hero__inner h1 {
        font-size: 26px !important;
    }
    .elementor-element-2035586d .elementor-heading-title {
        font-size: 28px !important;
        line-height: 36px !important;
    }
}

/* ============================================================
   GĐ3: Testimonial swiper buttons & pagination sizing on mobile
   Hide the prev/next buttons below 768 — they take valuable space
   and Swiper swipe-gesture is the canonical mobile UX. Pagination
   dots stay visible at every breakpoint.
   ============================================================ */
@media (max-width: 767.98px) {
    .elementor-widget-st_testimonial .elementor-swiper-button {
        display: none;
    }
    .elementor-widget-st_testimonial .swiper {
        padding: 0 4px;
    }
}

/* ============================================================
   GĐ5: Rental-detail mobile refinements
   The rental-detail.blade.php template ships a giant inline <style>
   block (lines 657–934). Most of it is desktop-only or rules that
   already work cross-breakpoint — DO NOT touch them. Below are the
   targeted mobile additions for things the inline block misses.

   - .st-form-book-wrapper : tighter padding on phones
   - .st-booking-calendar-wrapper : center on phone (currently
     left:92% which lands off-screen on narrow viewports)
   - .st-availability-calendar-wrapper .calendar.left/right :
     stack 2-month layout vertically under 768
   - .st-fixed-form-booking : rounded edges + smaller inputs
   - .st-list-badges : smaller 36px badge thumbnails on phone
   ============================================================ */
@media (max-width: 767.98px) {
    .st-form-book-wrapper {
        padding: 12px !important;
    }
    .st-form-book-wrapper .form-book-wrapper {
        border-radius: 12px !important;
    }
    .st-booking-calendar-wrapper {
        left: 50% !important;
        transform: translateX(-50%) !important;
        max-width: calc(100vw - 24px) !important;
    }
    .st-booking-calendar-wrapper .st-availability-calendar-wrapper {
        flex-wrap: wrap !important;
        justify-content: center !important;
    }
    .st-booking-calendar-wrapper .st-availability-calendar-wrapper .calendar.left,
    .st-booking-calendar-wrapper .st-availability-calendar-wrapper .calendar.right {
        flex: 0 0 100% !important;
        width: 100% !important;
        max-width: 100% !important;
        padding: 0 !important;
    }
    .st-fixed-form-booking {
        border-radius: 12px !important;
    }
    .st-fixed-form-booking input,
    .st-fixed-form-booking select,
    .st-fixed-form-booking .render {
        font-size: 13px !important;
    }
    .st-list-badges .st-list-badge {
        width: 36px !important;
        height: 36px !important;
        min-width: 36px !important;
    }
    .st-list-badges .st-list-badge img {
        width: 28px !important;
        height: 28px !important;
    }
}
@media (max-width: 575.98px) {
    .st-form-book-wrapper {
        padding: 10px !important;
    }
}

/* ============================================================
   GĐ7: Blog list hero — floaters cleanup on mobile
   The .mh-blog-list-hero::before / ::after decorative blurs and
   floaters (.mh-blog-list-hero__floater--new / --rating) take a lot
   of pixels and overlap content on narrow screens. Hide them on
   phone/tablet — they exist purely for desktop ambience.
   ============================================================ */
@media (max-width: 991.98px) {
    .mh-blog-list-hero::before,
    .mh-blog-list-hero::after {
        display: none;
    }
    .mh-blog-list-hero__floater--new,
    .mh-blog-list-hero__floater--rating {
        display: none;
    }
}
@media (max-width: 767.98px) {
    .mh-blog-detail__related .row {
        row-gap: 16px;
    }
    .mh-blog-detail__share {
        flex-wrap: wrap;
        gap: 8px;
    }
    .mh-blog-detail__share .mh-blog-detail__share-label {
        flex: 1 1 100%;
    }
}

/* ============================================================
   /Footer — Mega company column (CÔNG TY TNHH LUSTAY VIỆT NAM).
   Elementor's default widget-wrap has padding-left:0, so the logo +
   company text sit flush against the column's left edge. Inline style
   on the wrap only sets padding-right; we add a small left padding so
   the block reads as visually balanced against the other 3 columns.
   !important is required to beat the inline style Elementor wrote. */
  .elementor-element-65490273 > .elementor-widget-wrap,
  .elementor-element-5b9d0c71 > .elementor-widget-wrap,
  .elementor-element-583f59c1 > .elementor-widget-wrap {
      padding-left: 20px !important;
  }
  /* "Thông Tin Liên Hệ" has its own inline padding-left:24px and no
     right padding, which pushes the block off-balance with the other 3
     columns. Override to match the 20px rhythm and add right padding so
     long addresses don't kiss the column edge. */
  .elementor-element-57816bda > .elementor-widget-wrap {
      padding-left: 20px !important;
      padding-right: 20px !important;
  }

  /* Copyright line — center it on phones so it sits under the columns
     rather than flush left, which looks orphaned on narrow viewports.
     Scoped to widget [data-id="6c4fe6e6"] so the other headings
     ("Liên Kết Nhanh", "Dịch Vụ", "Thông Tin Liên Hệ") stay left-
     aligned as they should. */
  @media (max-width: 767.98px) {
      .elementor-element-6c4fe6e6 .elementor-widget-container {
          text-align: center;
      }
      .elementor-element-6c4fe6e6 .elementor-heading-title {
          display: block;
          width: 100%;
      }
  }

  /* On phones & tablets (≤991px) the 2-month side-by-side layout is too
     cramped to read. Hide the right month entirely and let the left month
     take the full width. The .right calendar-table stays in the DOM (JS
     still swaps both tables on prev/next so the data refreshes).

     The bug we hit earlier: simply width:100% on .calendar.left wasn't
     enough because the inner <table class="table-condensed"> was being
     collapsed by the theme's .rate-calendar .st-availability-calendar-wrapper
     > .daterangepicker.dropdown-menu { width: 100% } in main.css. With
     both .calendar.left and .calendar.right set to width:50% on desktop
     they each reserved their own flex track. On mobile the theme changes
     both to width:100% so .calendar.right sits in the next flex row and
     still takes its space. Hiding .right (display:none) leaves the
     right gap behind because flex parents reserve the track even for
     hidden items in some browsers. We kill the gap by setting
     flex:0 0 0 + max-width:0 + width:0 instead of just display:none —
     that collapses the flex track itself.

     The second bug (the r4/r5 rows stacking vertically on phones) was
     caused by the same mobile-flex transition forcing <tbody> out of its
     natural table layout. The lock-table reset below pins the table to
     a true CSS table so every week is a horizontal row. */
  @media (max-width: 991.98px) {
      .rate-calendar .st-availability-calendar-wrapper > .daterangepicker.dropdown-menu {
          display: flex !important;
          flex-wrap: nowrap !important;
          align-items: flex-start !important;
          width: 100% !important;
          max-width: 100% !important;
          float: none !important;
          clear: none !important;
      }
      .rate-calendar .st-availability-calendar-wrapper .calendar.right,
      .rate-calendar .show-calendar .calendar.right {
          display: none !important;
          visibility: hidden !important;
          width: 0 !important;
          height: 0 !important;
          max-width: 0 !important;
          flex: 0 0 0 !important;
          margin: 0 !important;
          padding: 0 !important;
          overflow: hidden !important;
          float: none !important;
      }
      /* When calendar.right is hidden above, calendar.left should
         take the full flex track width, otherwise the layout leaves
         a wide empty gap to the right of the visible month. We also
         force display:block so the cell paints a real table. */
      .rate-calendar .st-availability-calendar-wrapper .calendar.left,
      .rate-calendar .show-calendar .calendar.left {
          flex: 1 1 100% !important;
          flex-grow: 1 !important;
          flex-shrink: 1 !important;
          flex-basis: 100% !important;
          min-width: 0 !important;
          max-width: 100% !important;
          width: 100% !important;
          float: none !important;
          clear: none !important;
          display: table-cell !important;
          vertical-align: top !important;
          box-sizing: border-box !important;
          padding: 0 !important;
          margin: 0 !important;
      }
      /* Force the inner <table> back to true table layout so every week
         is one horizontal row of 7 cells. Without this the last 2 rows
         sometimes stack vertically below the table. */
      .rate-calendar .st-availability-calendar-wrapper .calendar.left .calendar-table,
      .rate-calendar .show-calendar .calendar.left .calendar-table {
          display: block !important;
          width: 100% !important;
          max-width: 100% !important;
          box-sizing: border-box !important;
      }
      .rate-calendar .st-availability-calendar-wrapper .calendar.left .calendar-table .table-condensed,
      .rate-calendar .show-calendar .calendar.left .calendar-table .table-condensed {
          display: table !important;
          width: 100% !important;
          max-width: 100% !important;
          table-layout: fixed !important;
          border-collapse: collapse !important;
          border-spacing: 0 !important;
      }
      .rate-calendar .st-availability-calendar-wrapper .calendar.left .calendar-table .table-condensed tbody,
      .rate-calendar .show-calendar .calendar.left .calendar-table .table-condensed tbody {
          display: table-row-group !important;
      }
      .rate-calendar .st-availability-calendar-wrapper .calendar.left .calendar-table .table-condensed tbody tr,
      .rate-calendar .show-calendar .calendar.left .calendar-table .table-condensed tbody tr {
          display: table-row !important;
      }
      .rate-calendar .st-availability-calendar-wrapper .calendar.left .calendar-table .table-condensed tbody tr .td-date,
      .rate-calendar .show-calendar .calendar.left .calendar-table .table-condensed tbody tr .td-date {
          display: table-cell !important;
          vertical-align: top !important;
      }
  }

/* Mobile (≤767.98px): single month + full width. Rules above only
   apply on desktop (min-width:992px). On phones daterangepicker's
   default rule still renders both .calendar.left and .calendar.right
   side by side, which overflows the wrapper. Hide the right month
   and force the left month to 100% width. Excludes .home-search-calendar
   (home/search pages already have their own mobile rule). */
@media (max-width: 767.98px) {
  .rate-calendar:not(.home-search-calendar) .st-availability-calendar-wrapper > .daterangepicker.dropdown-menu .calendar.right,
  .rate-calendar:not(.home-search-calendar).show-calendar .st-availability-calendar-wrapper > .daterangepicker.dropdown-menu .calendar.right {
    display: none !important;
    visibility: hidden !important;
    width: 0 !important;
    max-width: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
  }
  .rate-calendar:not(.home-search-calendar) .st-availability-calendar-wrapper > .daterangepicker.dropdown-menu .calendar.left,
  .rate-calendar:not(.home-search-calendar).show-calendar .st-availability-calendar-wrapper > .daterangepicker.dropdown-menu .calendar.left {
    float: none !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    flex: 0 0 100% !important;
    box-sizing: border-box !important;
  }
}

/* Mobile (≤767.98px): move the booking-form sidebar above the gallery
   section so users see the price + date pickers first, not after
   scrolling through 2 months of availability. The rental-detail
   markup puts .col-lg-8 (gallery/about/rates/reviews) first and
   .col-lg-4 (booking form) second inside .st-hotel-room-content.
   Bootstrap stacks them naturally on mobile but the gallery still
   appears above the form, which buries the most important CTA.

   Scoped strictly to the rental-detail main row so we don't disturb
   the related-rentals .col-lg-4 cards further down the page (those
   don't need to move). On ≥768px the form stays in its right column
   beside the content, with the sticky-positioning rules above
   still applying. */
@media (max-width: 767.98px) {
  .st-hotel-room-content > .row > .col-lg-4 {
    order: -1 !important;
    margin-bottom: 16px !important;
  }
}

/* ----------------------------------------------------------------------
   Mobile sticky book bar — desktop hide
   The theme's main.css only hides `.hotel-target-book-mobile` when the
   `<body>` has the `single-st_rental` class (added by WordPress). Our
   Laravel layout doesn't set that class, so the bar leaks onto desktop.
   Force-hide it above 768px regardless of the body class.
   ---------------------------------------------------------------------- */
@media (min-width: 768px) {
  .st-hotel-room-content .hotel-target-book-mobile {
    display: none !important;
  }
}

/* ----------------------------------------------------------------------
   Review list pagination — 3 items per page
   ---------------------------------------------------------------------- */
.review-pagination .review-page-number:hover:not(:disabled),
.review-pagination .review-page-nav:hover:not(:disabled) {
  border-color: var(--main-color, #ff5c02) !important;
  color: var(--main-color, #ff5c02) !important;
}
.review-pagination .review-page-number:focus-visible,
.review-pagination .review-page-nav:focus-visible {
  outline: 2px solid var(--main-color, #ff5c02);
  outline-offset: 2px;
}
@media (max-width: 575.98px) {
  /* Tighten pagination controls on small phones */
  .review-pagination .review-page-number,
  .review-pagination .review-page-nav {
    min-width: 32px !important;
    height: 32px !important;
    font-size: 13px !important;
  }
}

/* ----------------------------------------------------------------------
   Home — hide "Top destinations" section on mobile
   ---------------------------------------------------------------------- */
@media (max-width: 767.98px) {
  section[data-id="50fce0e1"] {
    display: none !important;
  }
}

/* ----------------------------------------------------------------------
   Home — tighten "Khám phá những kỳ nghỉ tuyệt vời" rentals heading on mobile
   ---------------------------------------------------------------------- */
@media (max-width: 767.98px) {
  section[data-id="4d72c4c"] {
    padding: 15px 0 !important;
  }
  section[data-id="4d72c4c"] [data-id="244b793"] {
    padding-bottom: 16px !important;
  }
  section[data-id="4d72c4c"] [data-id="244b793"] .elementor-heading-title {
    font-size: 20px !important;
    line-height: 28px !important;
    white-space: nowrap !important;
  }
  /* Side gutter for the rentals list on mobile so cards don't touch edges */
  section[data-id="4d72c4c"] .service-list-wrapper.rental-grid {
    margin-left: 12px !important;
    margin-right: 12px !important;
  }
  section[data-id="4d72c4c"] .service-list-wrapper.rental-grid > .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
  section[data-id="4d72c4c"] .service-list-wrapper.rental-grid > .row > [class*="col-"] {
    padding-left: 8px !important;
    padding-right: 8px !important;
  }
  section[data-id="4d72c4c"] .service-list-wrapper.rental-grid > .row > [class*="col-"] + [class*="col-"] {
    margin-top: 16px !important;
  }
}

/* ----------------------------------------------------------------------
   Mobile sticky book bar + FULLSCREEN booking overlay (≤767.98px).
   ----------------------------------------------------------------------
   .hotel-target-book-mobile is already rendered by the Blade template and
   auto-shown on mobile by main.css (.single-st_rental … .hotel-target-book-mobile
   becomes `display:flex !important` at ≤991px). On desktop the theme keeps
   it hidden, so we only style the mobile behaviour below.

   The booking form (.st-fixed-form-booking) lives inside the right column
   in the DOM (so it stays accessible to no-JS / SEO). On mobile we keep it
   HIDDEN by default (visibility:hidden + 0 opacity). When the user taps
   "Check" we promote it to a fixed fullscreen overlay with a dimmed
   backdrop, lock the page scroll, and animate the entrance. The user can
   close by tapping the X icon, tapping the backdrop, or pressing Esc.
   ---------------------------------------------------------------------- */
@media (max-width: 767.98px) {
  /* Pin the bottom bar to the very bottom of the viewport. */
  .st-hotel-room-content .hotel-target-book-mobile {
    position: fixed !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    z-index: 100 !important;
    background: #ffffff !important;
    box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.08) !important;
    /* Tăng padding dọc lên 12px (4+4→12+12) để .price-wrapper có khoảng
       đệm đều phía trên dưới so với mép bar. Tổng chiều cao bar tăng
       thêm 16px (từ ~52px lên ~68px); padding-bottom của content phải
       nâng theo. */
    padding: 12px 16px !important;
    gap: 12px !important;
    transform: translateY(0) !important;
    transition: transform .3s ease !important;
  }
  .st-hotel-room-content .hotel-target-book-mobile.hide {
    transform: translateY(110%) !important;
    pointer-events: none !important;
  }
  /* Lift the page content above the bar so the last paragraph isn't
     hidden under it. Nội dung bar giữ size gốc (nút cao 44px), bar giờ
     cao ~68px (12+12 padding + ~44px content). 30px đệm là đủ để nội
     dung cuối trang không bị che mà vẫn gọn layout. */
  .st-hotel-room-content {
    padding-bottom: 30px !important;
  }
  /* Header fixed cao 4rem (64px) trên mobile — xem
     `.mh-header { --mh-header-h: 4rem; }` (≤767.98px) trong phần header.
     Đẩy toàn bộ content-wrapper xuống dưới header để khi user cuộn về
     đầu trang, gallery + tiêu đề (`.st-service-header2`) không bị che.
     Bù thêm 4px để có khoảng thở giữa mép dưới header và ảnh gallery.
     Đồng thời bỏ desktop's padding-bottom:60px vì .st-hotel-room-content
     (80px) + .st-checkout-page.style-1 (60px) đã đẩy nội dung lên trên
     sticky book bar rồi, cộng dồn 60+60+80 = 200px trống dưới là thừa. */
  #st-content-wrapper.st_single_rental {
    padding-top: calc(4rem + 4px) !important;
    padding-bottom: 0 !important;
  }
  /* Booking form: HIDDEN by default on mobile. The form sits at the
     top of the right column (order:-1). We collapse its box to 0 height
     so it doesn't leave a blank strip below the gallery image — the
     user just sees the bottom bar at the bottom of the page. */
  .st-hotel-room-content .st-fixed-form-booking {
    visibility: hidden !important;
    opacity: 0 !important;
    pointer-events: none !important;
    max-height: 0 !important;
    height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    overflow: hidden !important;
  }
  /* Fullscreen overlay state. We detach the form from its column and pin
     it to the viewport. The dimmed backdrop is the .st-fixed-form-booking
     element itself (we paint a semi-transparent background); the inner
     .st-form-book-wrapper sits on top as a white card that fills the
     screen edge-to-edge. */
  .st-hotel-room-content .st-fixed-form-booking.is-open {
    visibility: visible !important;
    opacity: 1 !important;
    pointer-events: auto !important;
    /* position:fixed takes the element out of normal flow, so height
       and margin are sized by the viewport — the collapsed defaults
       above no longer apply. */
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    width: 100vw !important;
    height: 100vh !important;
    height: 100dvh !important; /* dynamic viewport for mobile chrome */
    max-height: none !important;
    margin: 0 !important;
    padding: 0 !important;
    z-index: 9999 !important;
    background: rgba(15, 23, 42, 0.55) !important; /* dimmed backdrop */
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch !important;
    animation: mh-overlay-fade .28s ease-out !important;
  }
  /* The form's inner panel: white card on top of the dimmed backdrop.
     We let it fill the screen edge-to-edge on small viewports (no
     rounded card) for a true "fullscreen modal" feel. Scroll happens
     here, not on the backdrop element. */
  .st-hotel-room-content .st-fixed-form-booking.is-open .st-form-book-wrapper {
    position: relative !important;
    min-height: 100% !important;
    background: #ffffff !important;
    padding: 0 !important;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18) !important;
  }
  /* Close icon (X) — fixed at the top-right of the viewport (NOT inside
     the scrolling card, so it stays put when the user scrolls the form).
     Bigger tap target on mobile (40×40 per Apple HIG) with a soft shadow
     to lift it off the white card. */
  .st-hotel-room-content .st-fixed-form-booking.is-open .close-icon {
    visibility: visible !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    cursor: pointer !important;
    position: fixed !important;
    top: 12px !important;
    right: 12px !important;
    left: auto !important;
    z-index: 10000 !important;
    width: 40px !important;
    height: 40px !important;
    background: #ffffff !important;
    border-radius: 50% !important;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18) !important;
  }
  .st-hotel-room-content .st-fixed-form-booking.is-open .close-icon i {
    color: var(--link-color, #1A2B48) !important;
    font-size: 18px !important;
  }
  /* The form's own price/rating header is redundant when the bottom bar
     is already showing that info — hide it inside the overlay to save
     vertical space. */
  .st-hotel-room-content .st-fixed-form-booking.is-open .form-booking-price {
    display: none !important;
  }
  /* Body scroll lock while the overlay is open. JS toggles the class
     on <body>.

     IMPORTANT: Do NOT add `position: fixed` here. That pattern (used by
     some iOS-only scripts to preserve scroll position) creates a new
     containing block, which silently breaks `position: fixed` on the
     booking overlay itself — the white form card disappears behind /
     under the backdrop, leaving only the dimmed overlay visible and
     the UI frozen. Just `overflow: hidden` is enough on modern mobile
     browsers (the form is fullscreen anyway, so the body being unable
     to scroll doesn't matter while the overlay is open). The JS stores
     `window.scrollY` and restores it on close so the user lands back
     where they were. */
  body.mh-booking-open {
    overflow: hidden !important;
    /* touch-action: none stops the underlying page from rubber-banding
       on iOS Safari when the user swipes inside the overlay. The form
       itself has its own scroll container (.st-fixed-form-booking has
       overflow-y: auto from the .is-open rule above). */
    touch-action: none !important;
  }
  /* Disable the desktop sticky-booking rule while we're in the mobile
     scope — the column doesn't need to follow the user when the form
     is promoted to a fullscreen overlay. */
  .st-hotel-room-content .row > .col-lg-4 .widgets {
    position: static !important;
    top: auto !important;
  }
  /* Backdrop fade-in. The white form panel slides up via the same
     animation for a single coherent motion. */
  @keyframes mh-overlay-fade {
    from { opacity: 0; }
    to   { opacity: 1; }
  }
}

/* ----------------------------------------------------------------------
   Mobile booking overlay (≤767.98px) — JS-built DOM.

   This is a SECOND, separate overlay created on demand by the rental-detail
   page when the user taps the "Check" button in the sticky bottom bar.
   It is created fresh on <body> with no ancestors that could create a
   containing block for position:fixed, so it behaves correctly on every
   mobile browser regardless of the parent .col-lg-4 stacking context.

   Structure (created in JS):
     .mh-booking-overlay              ← fixed container, fills viewport
       .mh-booking-overlay__backdrop  ← dimmed layer, taps close overlay
       .mh-booking-overlay__panel     ← white card, holds cloned form
         .mh-booking-overlay__close   ← X button, top-right
         .mh-booking-overlay__body    ← holds the cloned .st-fixed-form-booking

   The original .st-fixed-form-booking (inside .col-lg-4) is left untouched
   — desktop layout still uses it. On mobile it's hidden by visibility:hidden
   rules above so the user only sees the form inside this overlay.
   ---------------------------------------------------------------------- */
@media (max-width: 767.98px) {
  .mh-booking-overlay {
    position: fixed !important;
    inset: 0 !important;
    z-index: 2147483000 !important;
    display: flex !important;
    align-items: stretch !important;
    justify-content: center !important;
    animation: mh-overlay-fade .25s ease-out;
  }
  .mh-booking-overlay__backdrop {
    position: absolute !important;
    inset: 0 !important;
    background: rgba(15, 23, 42, 0.55) !important;
    cursor: pointer !important;
  }
  .mh-booking-overlay__panel {
    position: relative !important;
    z-index: 1 !important;
    width: 100% !important;
    max-width: 100vw !important;
    height: 100% !important;
    max-height: 100% !important;
    background: #ffffff !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch !important;
    overscroll-behavior: contain !important;
    box-sizing: border-box !important;
  }
  .mh-booking-overlay__close {
    position: absolute !important;
    top: 8px !important;
    right: 8px !important;
    width: 40px !important;
    height: 40px !important;
    border-radius: 50% !important;
    background: #f5f7fa !important;
    border: none !important;
    font-size: 22px !important;
    line-height: 1 !important;
    color: #1a2b48 !important;
    cursor: pointer !important;
    z-index: 2 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    padding: 0 !important;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12) !important;
  }
  .mh-booking-overlay__body {
    position: relative !important;
    padding: 56px 0 16px !important; /* leave room for the close button */
  }
  /* The cloned form inherits all theme styles, but we need to override
     a few wrapper-level rules because the cloned .st-form-book-wrapper
     no longer sits inside the .widgets / .col-lg-4 column. */
  .mh-booking-overlay__body .st-fixed-form-booking {
    margin: 0 !important;
    padding: 0 !important;
    visibility: visible !important;
    opacity: 1 !important;
    pointer-events: auto !important;
    max-height: none !important;
    height: auto !important;
    position: static !important;
    width: 100% !important;
  }
  .mh-booking-overlay__body .st-fixed-form-booking .st-form-book-wrapper {
    border: none !important;
    padding: 16px 16px 24px !important;
    background: #ffffff !important;
    box-shadow: none !important;
  }
  /* Hide the duplicate price header inside the form — the bottom bar
     already shows price + rating. */
  .mh-booking-overlay__body .form-booking-price { display: none !important; }
}

/* ----------------------------------------------------------------------
   Mobile sticky bar — tighten the "Đặt phòng ngay" button so the rating
   row (star + score + count) sits on a single line. The theme's default
   `.btn-mpopup` padding is roomy and the button text doesn't need it on
   narrow screens, so we shrink the button and let the rating column flex.
   ---------------------------------------------------------------------- */
@media (max-width: 767.98px) {
  .st-hotel-room-content .hotel-target-book-mobile {
    gap: 12px !important;
  }
  .st-hotel-room-content .hotel-target-book-mobile .price-wrapper {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    /* Biến price-wrapper thành flex column để 2 dòng (giá + rating) xếp
       dọc. `align-self:center` ép toàn bộ cụm căn giữa theo chiều cao
       của bar (khớp tâm với nút "Đặt phòng ngay" 44px bên phải).
       `justify-content:center` đẩy 2 dòng vào giữa nhau. */
    align-self: center !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
    align-items: flex-start !important;
    margin: 0 !important;
    padding: 0 !important;
    line-height: 1 !important;
  }
  .st-hotel-room-content .hotel-target-book-mobile #mobile-price {
    flex-wrap: wrap !important;
    row-gap: 0 !important;
    /* Bỏ margin-bottom mặc định của theme; line-height 1 ngắn lại để 2
       dòng khít nhau. */
    margin-bottom: 0 !important;
    line-height: 1 !important;
    display: flex !important;
    align-items: center !important;
  }
  .st-hotel-room-content .hotel-target-book-mobile #mobile-price .price {
    line-height: 1 !important;
  }
  .st-hotel-room-content .hotel-target-book-mobile .st-review-booking-form {
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    margin-top: 0 !important;
    padding: 0 !important;
    line-height: 1 !important;
  }
  .st-hotel-room-content .hotel-target-book-mobile .st-review-box-top {
    margin: 0 !important;
    padding: 0 !important;
    line-height: 1 !important;
  }
  .st-hotel-room-content .hotel-target-book-mobile .mh-mobile-check-btn {
    flex: 0 0 auto !important;
    white-space: nowrap !important;
    width: auto !important;
    /* Giữ size nút gốc (44px cao, padding 0 18px, font 13px) — không
       ép kích thước để nội dung bên trong bar không bị thu nhỏ. */
    min-width: 72px !important;
    height: 44px !important;
    padding: 0 18px !important;
    font-size: 13px !important;
    line-height: 1 !important;
    border-radius: 22px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
}

/* ----------------------------------------------------------------------
   "Tại sao chọn chúng tôi?" widget — phone & Zalo rows.
   Dùng chung cho <x-why-book-widget /> ở rental-detail + checkout +
   mọi trang khác có widget này. Các rule này trước đây chỉ nằm trong
   <style> push-head của rental-detail nên checkout hiển thị sai (title
   & content bị xuống dòng dưới badge thay vì nằm cạnh). Đưa vào đây
   để mọi trang đều có layout đúng.
   ---------------------------------------------------------------------- */
.widget-box.st-badge-widget .st-list-badges > li.mh-zalo-row,
.widget-box.st-badge-widget .st-list-badges > li.mh-phone-row {
  padding: 0;
}
.widget-box.st-badge-widget .st-list-badges > li.mh-zalo-row > a.mh-zalo-inline-link,
.widget-box.st-badge-widget .st-list-badges > li.mh-phone-row > a.mh-phone-inline-link {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  width: 100%;
}
.content-badge .mh-zalo-inline-link,
.content-badge .mh-phone-inline-link {
  color: var(--grey-color, #5E6D77) !important;
  font-weight: 400 !important;
  text-decoration: none !important;
}
.content-badge .mh-zalo-inline-link:hover,
.content-badge .mh-phone-inline-link:hover {
  text-decoration: none;
  opacity: 0.85;
}
.content-badge .mh-zalo-inline-link .title,
.content-badge .mh-phone-inline-link .title {
  color: var(--heading-color, #232323);
}
.widget-box.st-badge-widget .st-list-badges > li .st-list-badge.mh-zalo-badge {
  overflow: hidden;
  padding: 0;
  background: transparent;
  border-radius: 50%;
}
.widget-box.st-badge-widget .st-list-badges > li .st-list-badge.mh-zalo-badge .mh-zalo-badge-img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}


/* ════════════════════════════════════════════════════════════════════════════
   Floating Contact Widget — "Liên hệ nhanh"
   Component: <x-floating-contact /> (resources/views/components/floating-contact.blade.php)
   Render ở layouts/app.blade.php → xuất hiện trên MỌI trang frontend,
   không xuất hiện trên admin (admin dùng layout riêng).
   ════════════════════════════════════════════════════════════════════════════ */
.mh-floating-contact {
  position: fixed;
  left: 18px;
  bottom: 24px;
  z-index: 9999;
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.mh-floating-contact li {
  list-style: none;
  position: relative;
  /* Slide-in animation khi load trang */
  animation: mh-fc-slide-in 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}
.mh-floating-contact li:nth-child(1) { animation-delay: 0.2s; }
.mh-floating-contact li:nth-child(2) { animation-delay: 0.4s; }
.mh-floating-contact .mh-fc-btn {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  border-radius: 999px;
  color: #fff !important;
  text-decoration: none !important;
  font-weight: 600;
  font-size: 14px;
  line-height: 1;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.18);
  transition: transform 0.25s ease, box-shadow 0.25s ease, filter 0.25s ease;
  white-space: nowrap;
  position: relative;
  overflow: visible;
}
/* Pulse glow — halo màu nở ra liên tục để hút mắt */
.mh-floating-contact .mh-fc-btn::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  box-shadow: 0 0 0 0 currentColor;
  animation: mh-fc-pulse 2.2s ease-out infinite;
  pointer-events: none;
  z-index: -1;
}
.mh-floating-contact .mh-fc-btn:hover {
  transform: translateY(-3px) scale(1.04);
  box-shadow: 0 12px 26px rgba(0, 0, 0, 0.28);
  filter: brightness(1.08);
}
.mh-floating-contact .mh-fc-btn:hover svg {
  transform: rotate(-12deg) scale(1.15);
}
.mh-floating-contact .mh-fc-btn:active {
  transform: translateY(0) scale(0.98);
}
.mh-floating-contact .mh-fc-btn svg {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.mh-floating-contact .mh-fc-zalo {
  background: linear-gradient(135deg, #0068ff 0%, #0052cc 100%);
}
/* Ping sóng nước cho icon Zalo — báo hiệu "đang có tin nhắn" */
.mh-floating-contact .mh-fc-zalo::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 24px;
  width: 14px;
  height: 14px;
  margin-top: -7px;
  margin-left: -7px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.45);
  animation: mh-fc-ripple 1.8s ease-out infinite;
  pointer-events: none;
}
.mh-floating-contact .mh-fc-phone {
  background: linear-gradient(135deg, #ff5252 0%, #d32f2f 100%);
}
/* Shake nhẹ icon phone để mô phỏng chuông reo */
.mh-floating-contact .mh-fc-phone svg {
  animation: mh-fc-shake 1.4s ease-in-out infinite;
  transform-origin: 50% 10%;
}
/* Zalo img trong floating contact — cùng kích thước với svg */
.mh-floating-contact .mh-fc-zalo .mh-fc-zalo-img {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}
@keyframes mh-fc-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.35); }
  70%  { box-shadow: 0 0 0 14px rgba(0, 0, 0, 0); }
  100% { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); }
}
@keyframes mh-fc-ripple {
  0%   { transform: scale(0.6); opacity: 0.7; }
  100% { transform: scale(2.6); opacity: 0; }
}
@keyframes mh-fc-shake {
  0%, 60%, 100% { transform: rotate(0deg); }
  10% { transform: rotate(-14deg); }
  20% { transform: rotate(12deg); }
  30% { transform: rotate(-10deg); }
  40% { transform: rotate(8deg); }
  50% { transform: rotate(-4deg); }
}
@keyframes mh-fc-slide-in {
  from { opacity: 0; transform: translateX(-40px); }
  to   { opacity: 1; transform: translateX(0); }
}
/* Tắt animation nếu user prefers-reduced-motion */
@media (prefers-reduced-motion: reduce) {
  .mh-floating-contact li,
  .mh-floating-contact .mh-fc-btn::after,
  .mh-floating-contact .mh-fc-btn::before,
  .mh-floating-contact .mh-fc-phone svg {
    animation: none;
  }
}
@media (max-width: 991.98px) {
  /* On anything narrower than desktop (tablet, landscape phone, portrait phone),
     the rental-detail page shows a fixed bottom booking bar (price + Đặt phòng
     ngay) that spans full width. Both this widget AND that bar want bottom-left,
     so we lift the contact widget above the bar so it doesn't obscure the price.
     The narrower 480px breakpoint below re-tightens left/padding for true phone
     sizes. */
  .mh-floating-contact {
    left: 16px;
    bottom: 110px;
  }
  /* Trên mobile / tablet: chỉ hiện icon, ẩn text "Chat Zalo" / số hotline để
     widget nhỏ gọn, không che mất thông tin (đặc biệt là booking bar của
     rental-detail). Tooltip vẫn còn nhờ thuộc tính `title` trên <a>. */
  .mh-floating-contact .mh-fc-btn {
    padding: 10px;
    border-radius: 50%;
    gap: 0;
  }
  .mh-floating-contact .mh-fc-btn > span {
    display: none;
  }
  /* Ripple "đang có tin nhắn" của Zalo vẫn bám icon — giữ nguyên tọa độ tâm
     (nút giờ là hình tròn nên vị trí left:24px / margin-left:-7px vẫn đúng
     khi kích thước nút ≈ icon 24px). */
}
@media (max-width: 480px) {
  .mh-floating-contact {
    left: 12px;
    bottom: 110px;
  }
  .mh-floating-contact .mh-fc-btn {
    padding: 9px;
    font-size: 13px;
  }
  /* Nhỏ hơn nữa trên phone: thu icon về 20px để widget gọn hơn. */
  .mh-floating-contact .mh-fc-btn svg,
  .mh-floating-contact .mh-fc-zalo .mh-fc-zalo-img {
    width: 20px;
    height: 20px;
  }
}

/* ==========================================================================
   Rental card title — clamp to 2 lines so cards stay same height.
   Used by <x-rental-card> in search grid + related rentals on detail page.
   ========================================================================== */
.service-item .content-item .title.mh-title-2lines,
.rental-card .content-item .title.mh-title-2lines,
.content-item .title.mh-title-2lines {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  line-clamp: 2;
  overflow: hidden;
  text-overflow: ellipsis;
  /* Make sure long unbroken words still wrap inside the box. */
  word-break: break-word;
  /* Reserve at least 2 line-heights so the box never collapses. */
  min-height: calc(2 * 1.3em);
}

/* ==========================================================================
   Amenities collapse — mobile: 7 items (1 col × 7 rows).
   Desktop (≥768px): 12 items (3 cols × 4 rows).
   "Hiển thị thêm" button reveals items 13+.
   Items 8-12 have class mh-amenity-col--extra (added by CSS only — purely
   a desktop-visible layer); items 13+ keep mh-amenity-col--hidden and
   only appear after the toggle button is pressed.
   ========================================================================== */

/* Mobile-first: hide items 8+ by default (server-side marks them). */
.row.mh-amenities-row > .mh-amenity-col--hidden {
  display: none !important;
}

/* Desktop (≥768px): reveal items 8-12 (col index 8-12 inside the row).
   We use :nth-child to target exactly those items, NOT all --hidden
   ones — items 13+ must stay hidden until the toggle expands them. */
@media (min-width: 768px) {
  .row.mh-amenities-row > .mh-amenity-col--hidden:nth-child(n+8):nth-child(-n+12) {
    display: block !important;
  }
}

/* Expanded: show ALL hidden items (13+). */
.row.mh-amenities-row.is-expanded > .mh-amenity-col--hidden {
  display: block !important;
}

/* Toggle count: show desktop count by default, swap to mobile count <768px. */
.mh-amenities-toggle-count--mobile {
  display: none;
}
@media (max-width: 767px) {
  .mh-amenities-toggle-count--desktop {
    display: none;
  }
  .mh-amenities-toggle-count--mobile {
    display: inline;
  }
}
.mh-amenities-toggle-wrap {
  margin-top: 22px;
}
/* Minimal pill — plain text button that reveals a subtle gray wash on
   hover/focus, no background fill by default. */
.mh-amenities-toggle-btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 18px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.2px;
  color: #2c3e50;
  background: transparent;
  border: none;
  border-radius: 999px;
  cursor: pointer;
  transition: background-color 0.18s ease, color 0.18s ease;
}
.mh-amenities-toggle-btn:hover,
.mh-amenities-toggle-btn:focus-visible {
  background-color: rgba(0, 0, 0, 0.06);
  outline: none;
}
.mh-amenities-toggle-btn:active {
  background-color: rgba(0, 0, 0, 0.1);
}
.mh-amenities-toggle-btn .mh-amenities-toggle-icon {
  font-size: 12px;
  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.mh-amenities-toggle-btn[aria-expanded="true"] .mh-amenities-toggle-icon {
  transform: rotate(180deg);
}
/* Counter chip — sits inline next to the label; plain text, no chip
   background so the label and count read as one line of text. */
.mh-amenities-toggle-btn .mh-amenities-toggle-count {
  font-size: 14px;
  font-weight: 600;
  color: inherit;
}
/* Description line-clamp: 7 visible rows (line-height:26px → ~182px), then
   the .mh-collapse--clamped wrapper gets expanded when the user clicks the
   toggle button below. The mask fades out the last visible row so the
   truncation reads naturally instead of a hard cut. */
.mh-collapse {
  position: relative;
}
.mh-collapse--clamped {
  display: -webkit-box;
  -webkit-line-clamp: 7;
  -webkit-box-orient: vertical;
  line-clamp: 7;
  overflow: hidden;
}
.mh-collapse--clamped::after {
  content: "";
  position: absolute;
  inset: auto 0 0 0;
  height: 50px;
  pointer-events: none;
  background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #fff 80%);
}

/* ============================================================
   rental-card-grid.blade.php — Card grid component
   ============================================================ */

/* Grid container */
.mh-card-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-top: 32px;
}

/* Individual card */
.mh-card {
  display: block;
  text-decoration: none;
  color: inherit;
  border-radius: 12px;
  overflow: hidden;
  background: #fff;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
  transition: transform 0.2s, box-shadow 0.2s;
}
.mh-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
}

/* Image wrapper — MUST have explicit height so browser reserves space
   BEFORE the lazy image loads. This is the fix for the "images blank on
   first load, appear after refresh/zoom" bug. */
.mh-card-img-wrap {
  position: relative;
  height: 200px;
  overflow: hidden;
  background: #f0f0f0; /* placeholder color while loading */
}

/* Image itself — fill container, cover crop, no distortion */
.mh-card-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
}

/* Fallback placeholder (when no thumbnail) */
.mh-card-img-wrap > .mh-card-img {
  background: #e8e8e8;
}

/* "Nổi bật" badge */
.mh-card-badge {
  position: absolute;
  top: 12px;
  left: 12px;
  background: #e74c3c;
  color: #fff;
  font-size: 12px;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: 4px;
}

/* Card body */
.mh-card-body {
  padding: 16px;
}

.mh-card-title {
  font-size: 16px;
  font-weight: 600;
  color: #2c3e50;
  margin-bottom: 8px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  line-clamp: 2;
  overflow: hidden;
}

.mh-card-meta {
  font-size: 13px;
  color: #7f8c8d;
  margin-bottom: 8px;
}

.mh-card-rating {
  font-size: 13px;
  color: #f39c12;
  margin-bottom: 8px;
}
.mh-card-rating strong {
  color: #2c3e50;
}

.mh-card-price {
  font-size: 15px;
  color: #e74c3c;
  font-weight: 600;
}
.mh-card-price small {
  font-weight: 400;
  color: #7f8c8d;
}

/* Responsive: 2 columns on tablet, 1 on mobile */
@media (max-width: 992px) {
  .mh-card-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 576px) {
  .mh-card-grid {
    grid-template-columns: 1fr;
  }
}

/* ==========================================================================
   Rental detail — tight st-hr margin on mobile so the section dividers don't
   dominate the small viewport. Desktop keeps the original (larger) spacing.
   ========================================================================== */
@media (max-width: 768px) {
  .st-hr {
    margin: 15px 0 !important;
  }
  .st-hr.large {
    margin: 15px 0 !important;
  }
}
