/*
Theme Name:    Alloggio Child v2
Template:      Alloggio
Version:       2.0.0
Description:   Editorial-luxury OTA child theme for Alloggio. Built alongside the v1 child for safe parallel development. Preserves Guesty integration, ACF palette, and spec-pages tooling.
Author:        Alloggio
Text Domain:   alloggio-child-v2
*/

/* ============================================================
   1. Tokens
   ============================================================ */
/* Page is light-only — tell the UA so form controls, scrollbars and
   default `color`/`background` honor the light palette regardless of
   the visitor's OS setting. */
:root,
html,
body.mmh-v2 {
    color-scheme: only light;
}

:root {
    /* Brand — locked palette (Guesty booking iframe reads these names).
     * #166B71 deep teal · #1CA0B1 bright teal · #E9A522 warm gold. */
    --mmh-primary:        #166B71;
    --mmh-primary-dark:   #0E4F54;
    --mmh-primary-light:  #1CA0B1;
    --mmh-primary-tint:   #E2F2F4;
    --mmh-accent:         #1CA0B1;

    /* Warm neutrals — paper + ink, retuned for premium feel */
    --mmh-sand-50:        #f7f2e8;
    --mmh-sand-100:       #efe7d3;
    --mmh-sand-200:       #e3dac6;
    --mmh-stone-900:      #111919;
    --mmh-stone-800:      #1c2727;
    --mmh-stone-700:      #364444;
    --mmh-stone-500:      #6b7878;
    --mmh-stone-300:      #b8bfbf;
    --mmh-stone-200:      #d8d2c4;
    --mmh-stone-100:      #ece7da;

    /* Brand-palette aliases (per Color Palette Application Spec).
     * --mmh-* names are kept for backwards-compat with the parent theme
     * + the Guesty iframe; --brand-* names are the canonical handles
     * used in the spec sheet. */
    --brand-deep:         var(--mmh-primary);   /* #166B71 */
    --brand-accent:       var(--mmh-primary-light); /* #1CA0B1 */
    --brand-gold:         var(--mmh-gold);      /* #E9A522 */
    --brand-gold-deep:    #B8801A;              /* per spec — gold gradient endpoint */
    --cream:              #F6EFE3;
    --ink:                #1A1A1A;
    --bone:               #ffffff;

    /* Premium chrome — surfaces and body text are now distinct. The
     * legacy --mmh-ink is body-text only; dark surfaces map to
     * var(--brand-deep). Search "Section 26" for the enforcement map. */
    --mmh-ink:            #1A1A1A;
    --mmh-ink-soft:       #2a2a2a;
    --mmh-paper:          #F6EFE3;
    --mmh-paper-warm:     #fbf7ec;
    --mmh-line:           color-mix(in oklab, #1A1A1A 14%, transparent);
    --mmh-line-soft:      color-mix(in oklab, #1A1A1A 8%, transparent);
    --mmh-shadow-color:   #1A1A1A;

    /* Spec-derived palette alphas for repeated use */
    --deep-08:            color-mix(in srgb, #166B71 8%,  transparent);
    --deep-12:            color-mix(in srgb, #166B71 12%, transparent);
    --deep-15:            color-mix(in srgb, #166B71 15%, transparent);
    --deep-25:            color-mix(in srgb, #166B71 25%, transparent);
    --gold-25:            color-mix(in srgb, #E9A522 25%, transparent);

    /* Aliases used by parent + v1 child theme — keep these working */
    --mmh-text:           var(--mmh-stone-900);
    --mmh-muted:          var(--mmh-stone-500);
    --mmh-bg:             #ffffff;
    --mmh-bg-alt:         var(--mmh-sand-50);
    --mmh-border:         var(--mmh-sand-200);

    /* Accents — warm gold (#E9A522) with derived soft + deep shades.
     * No off-palette semantic colors: success borrows the deep teal,
     * danger borrows the deep gold. Anything UI-state-driven that
     * needs a non-brand hue should be added deliberately at that
     * component, not as a free-floating token. */
    --mmh-gold:           #E9A522;
    --mmh-gold-soft:      #F2C36B;
    --mmh-gold-deep:      #B57E13;
    --mmh-success:        var(--mmh-primary);
    --mmh-danger:         var(--mmh-gold-deep);

    /* Shape */
    --mmh-radius-xs:      4px;
    --mmh-radius-sm:      8px;
    --mmh-radius-md:      12px;
    --mmh-radius-lg:      18px;
    --mmh-radius-pill:    999px;
    --mmh-radius:         var(--mmh-radius-md);

    /* Shadows — multi-layer with brand-tinted color (oklab mix). The
     * larger layers carry the colour; the small ones do contact shadow. */
    --mmh-shadow-sm:      0 1px 1px color-mix(in oklab, var(--mmh-shadow-color) 4%, transparent),
                          0 2px 4px color-mix(in oklab, var(--mmh-shadow-color) 5%, transparent);
    --mmh-shadow-md:      0 1px 2px color-mix(in oklab, var(--mmh-shadow-color) 5%, transparent),
                          0 6px 14px color-mix(in oklab, var(--mmh-shadow-color) 8%, transparent),
                          0 14px 28px color-mix(in oklab, var(--mmh-shadow-color) 5%, transparent);
    --mmh-shadow-lg:      0 1px 2px color-mix(in oklab, var(--mmh-shadow-color) 5%, transparent),
                          0 12px 28px color-mix(in oklab, var(--mmh-shadow-color) 11%, transparent),
                          0 28px 56px color-mix(in oklab, var(--mmh-shadow-color) 8%, transparent);
    --mmh-shadow-xl:      0 1px 2px color-mix(in oklab, var(--mmh-shadow-color) 6%, transparent),
                          0 20px 44px color-mix(in oklab, var(--mmh-shadow-color) 14%, transparent),
                          0 56px 90px color-mix(in oklab, var(--mmh-shadow-color) 12%, transparent);
    --mmh-shadow:         var(--mmh-shadow-md);

    /* Layout */
    --mmh-container:      1280px;
    --mmh-container-narrow: 960px;
    --mmh-gutter:         24px;
    --mmh-section-y:      96px;
    --mmh-section-y-sm:   56px;
    --mmh-header-h:       84px;
    --mmh-topbar-h:       40px;

    /* Type — Fraunces grotesque + Instrument Serif italic for editorial accents */
    --mmh-font-sans:      'Inter Tight', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, system-ui, sans-serif;
    --mmh-font-serif:     'Fraunces', 'Cormorant Garamond', Georgia, 'Times New Roman', serif;
    --mmh-font-italic:    'Instrument Serif', 'Fraunces', Georgia, serif;
    --mmh-fs-h1:          clamp(2.6rem, 5.4vw, 4.6rem);
    --mmh-fs-h2:          clamp(2rem, 3.6vw, 3rem);
    --mmh-fs-h3:          clamp(1.4rem, 2.2vw, 1.85rem);
    --mmh-fs-h4:          clamp(1.15rem, 1.6vw, 1.35rem);
    --mmh-fs-lead:        clamp(1.075rem, 1.35vw, 1.2rem);
    --mmh-fs-body:        1rem;
    --mmh-fs-sm:          0.875rem;
    --mmh-fs-xs:          0.78rem;

    /* Motion */
    --mmh-ease:           cubic-bezier(0.22, 0.61, 0.36, 1);
    --mmh-ease-out:       cubic-bezier(0.16, 1, 0.3, 1);
    --mmh-d-fast:         150ms;
    --mmh-d-base:         240ms;
    --mmh-d-slow:         420ms;
}

/* ============================================================
   2. Reset / base
   ============================================================ */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body.mmh-v2 {
    margin: 0;
    font-family: var(--mmh-font-sans);
    font-size: var(--mmh-fs-body);
    font-weight: 400;
    line-height: 1.6;
    color: var(--mmh-stone-900);
    background: var(--mmh-bg);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
}
body.mmh-v2 img { max-width: 100%; height: auto; display: block; }
body.mmh-v2 a {
    color: var(--mmh-primary);
    text-decoration: none;
    transition: color var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 a:hover { color: var(--mmh-primary-dark); }
body.mmh-v2 ::selection { background: var(--mmh-primary-tint); color: var(--mmh-stone-900); }

/* Headings */
body.mmh-v2 h1, body.mmh-v2 h2, body.mmh-v2 h3, body.mmh-v2 h4, body.mmh-v2 h5, body.mmh-v2 h6,
body.mmh-v2 .mmh-h-serif {
    font-family: var(--mmh-font-serif);
    font-weight: 400;
    color: var(--mmh-stone-900);
    line-height: 1.15;
    letter-spacing: -0.01em;
    margin: 0 0 0.5em;
    font-variation-settings: 'opsz' 36, 'SOFT' 30;
}
body.mmh-v2 h1 { font-size: var(--mmh-fs-h1); letter-spacing: -0.022em; }
body.mmh-v2 h2 { font-size: var(--mmh-fs-h2); letter-spacing: -0.018em; }
body.mmh-v2 h3 { font-size: var(--mmh-fs-h3); }
body.mmh-v2 h4 { font-size: var(--mmh-fs-h4); }
body.mmh-v2 .mmh-h-sans { font-family: var(--mmh-font-sans); font-weight: 600; letter-spacing: 0; }

body.mmh-v2 p { margin: 0 0 1em; }
body.mmh-v2 .mmh-lead { font-size: var(--mmh-fs-lead); color: var(--mmh-stone-700); line-height: 1.55; }

/* Eyebrow / kicker */
body.mmh-v2 .mmh-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: var(--mmh-font-sans);
    font-size: 0.72rem;
    font-weight: 500;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--mmh-primary);
}
body.mmh-v2 .mmh-eyebrow::before {
    content: '';
    width: 28px;
    height: 1px;
    background: var(--mmh-gold);
}

/* ============================================================
   3. Layout primitives
   ============================================================ */
.mmh-container {
    width: 100%;
    max-width: var(--mmh-container);
    margin-inline: auto;
    padding-inline: clamp(20px, 4vw, 40px);
}
.mmh-container--narrow { max-width: var(--mmh-container-narrow); }
.mmh-section {
    padding-block: var(--mmh-section-y-sm);
}
@media (min-width: 768px) {
    .mmh-section { padding-block: var(--mmh-section-y); }
}
.mmh-section--sand { background: var(--mmh-sand-50); }
.mmh-section--dark {
    background: var(--mmh-stone-900);
    color: rgba(255,255,255,0.85);
}
body.mmh-v2 .mmh-section--dark h1,
body.mmh-v2 .mmh-section--dark h2,
body.mmh-v2 .mmh-section--dark h3,
body.mmh-v2 .mmh-section--dark h4 { color: #fff; }
/* CTA banner (dark gradient) — heading + body must override the global
 * body.mmh-v2 h2 dark-text rule. */
body.mmh-v2 .mmh-cta h2,
body.mmh-v2 .mmh-cta h3 { color: #fff; }
body.mmh-v2 .mmh-cta p { color: rgba(255,255,255,0.82); }

/* Section header pattern */
.mmh-section-head {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: 24px;
    margin-bottom: 40px;
}
.mmh-section-head__intro { max-width: 640px; }
.mmh-section-head h2 { margin-bottom: 12px; }
.mmh-section-head__cta { white-space: nowrap; }

/* ============================================================
   4. Buttons / pills / chips
   ============================================================ */
/* Buttons. Scoped under body.mmh-v2 so .mmh-btn anchors win against
 * the global `body.mmh-v2 a { color: var(--mmh-primary) }` rule. */
body.mmh-v2 .mmh-btn,
.mmh-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 14px 28px;
    border: 1px solid transparent;
    border-radius: var(--mmh-radius-pill);
    font-family: var(--mmh-font-sans);
    font-size: 0.9rem;
    font-weight: 500;
    letter-spacing: 0.01em;
    line-height: 1;
    text-decoration: none;
    cursor: pointer;
    transition: background var(--mmh-d-base) var(--mmh-ease),
                color var(--mmh-d-base) var(--mmh-ease),
                border-color var(--mmh-d-base) var(--mmh-ease),
                transform var(--mmh-d-fast) var(--mmh-ease),
                box-shadow var(--mmh-d-base) var(--mmh-ease);
    will-change: transform;
}
body.mmh-v2 .mmh-btn:active { transform: translateY(1px); }
body.mmh-v2 .mmh-btn--primary,
body.mmh-v2 a.mmh-btn--primary,
body.mmh-v2 a.mmh-btn--primary:visited {
    background: var(--mmh-primary);
    color: #fff;
    box-shadow: 0 1px 0 rgba(0,0,0,0.04), 0 6px 18px rgba(15,102,98,0.18);
}
body.mmh-v2 .mmh-btn--primary:hover,
body.mmh-v2 a.mmh-btn--primary:hover {
    background: var(--mmh-primary-dark);
    color: #fff;
    box-shadow: 0 1px 0 rgba(0,0,0,0.06), 0 10px 24px rgba(15,102,98,0.22);
}
body.mmh-v2 .mmh-btn--ghost,
body.mmh-v2 a.mmh-btn--ghost,
body.mmh-v2 a.mmh-btn--ghost:visited {
    background: transparent;
    color: var(--mmh-stone-900);
    border-color: var(--mmh-stone-200);
}
body.mmh-v2 .mmh-btn--ghost:hover,
body.mmh-v2 a.mmh-btn--ghost:hover {
    background: var(--mmh-sand-50);
    border-color: var(--mmh-stone-700);
    color: var(--mmh-stone-900);
}
body.mmh-v2 .mmh-btn--inverse,
body.mmh-v2 a.mmh-btn--inverse,
body.mmh-v2 a.mmh-btn--inverse:visited {
    background: #fff;
    color: var(--mmh-stone-900);
}
body.mmh-v2 .mmh-btn--inverse:hover,
body.mmh-v2 a.mmh-btn--inverse:hover { background: var(--mmh-sand-50); color: var(--mmh-stone-900); }
body.mmh-v2 .mmh-btn--link,
body.mmh-v2 a.mmh-btn--link {
    padding: 0;
    background: transparent;
    border: none;
    border-radius: 0;
    color: var(--mmh-primary);
    border-bottom: 1px solid currentColor;
    padding-bottom: 2px;
}
body.mmh-v2 .mmh-btn--link:hover,
body.mmh-v2 a.mmh-btn--link:hover { color: var(--mmh-primary-dark); }
.mmh-btn--sm { padding: 10px 20px; font-size: 0.82rem; }
.mmh-btn--lg { padding: 18px 36px; font-size: 0.95rem; }
.mmh-btn .mmh-btn__icon { width: 18px; height: 18px; }

.mmh-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    border: 1px solid var(--mmh-stone-200);
    border-radius: var(--mmh-radius-pill);
    background: #fff;
    color: var(--mmh-stone-700);
    font-size: 0.8rem;
    font-weight: 500;
    cursor: pointer;
    transition: all var(--mmh-d-fast) var(--mmh-ease);
}
.mmh-chip:hover { border-color: var(--mmh-stone-700); color: var(--mmh-stone-900); }
.mmh-chip.is-active { background: var(--mmh-stone-900); color: #fff; border-color: var(--mmh-stone-900); }

/* ============================================================
   5. Header (topbar + main nav)
   ============================================================ */
.mmh-topbar {
    background: var(--mmh-stone-900);
    color: rgba(255,255,255,0.78);
    font-size: 0.78rem;
    height: var(--mmh-topbar-h);
    display: flex;
    align-items: center;
}
.mmh-topbar__inner {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 24px;
    width: 100%;
}
.mmh-topbar a {
    color: inherit;
    opacity: 0.85;
    transition: opacity var(--mmh-d-fast) var(--mmh-ease);
}
.mmh-topbar a:hover { color: #fff; opacity: 1; }
.mmh-topbar__contact, .mmh-topbar__links {
    display: flex;
    align-items: center;
    gap: 22px;
    flex-wrap: wrap;
}
.mmh-topbar__item { display: inline-flex; align-items: center; gap: 8px; }
.mmh-topbar__item svg { width: 13px; height: 13px; opacity: 0.7; }
@media (max-width: 720px) {
    .mmh-topbar { display: none; }
}

.mmh-header {
    position: sticky;
    top: 0;
    z-index: 80;
    background: rgba(255,255,255,0.96);
    backdrop-filter: saturate(140%) blur(14px);
    -webkit-backdrop-filter: saturate(140%) blur(14px);
    border-bottom: 1px solid transparent;
    transition: border-color var(--mmh-d-base) var(--mmh-ease),
                background var(--mmh-d-base) var(--mmh-ease),
                box-shadow var(--mmh-d-base) var(--mmh-ease),
                height var(--mmh-d-base) var(--mmh-ease);
}
/* WP admin bar offsets — push topbar / sticky header below the toolbar */
html.admin-bar body.mmh-v2 .mmh-topbar { margin-top: 32px; }
html.admin-bar body.mmh-v2 .mmh-header { top: 32px; }
@media screen and (max-width: 782px) {
    html.admin-bar body.mmh-v2 .mmh-topbar { margin-top: 46px; }
    html.admin-bar body.mmh-v2 .mmh-header { top: 46px; }
}
/* Listing toolbar uses --mmh-header-h to stay below the header. Bump it
 * down further when the admin bar is also present. */
html.admin-bar body.mmh-v2 .mmh-listing-toolbar { top: calc(var(--mmh-header-h) + 32px); }
@media screen and (max-width: 782px) {
    html.admin-bar body.mmh-v2 .mmh-listing-toolbar { top: calc(var(--mmh-header-h) + 46px); }
}
.mmh-header.is-scrolled {
    border-color: var(--mmh-sand-200);
    box-shadow: var(--mmh-shadow-sm);
}
.mmh-header__inner {
    height: var(--mmh-header-h);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}
.mmh-header__brand { display: inline-flex; align-items: center; }
.mmh-header__brand img { max-height: 44px; width: auto; }
.mmh-header__brand-text {
    font-family: var(--mmh-font-serif);
    font-size: 1.65rem;
    color: var(--mmh-stone-900);
    letter-spacing: -0.01em;
    line-height: 1;
}
.mmh-header__brand-text small {
    display: block;
    font-family: var(--mmh-font-sans);
    font-size: 0.62rem;
    font-weight: 500;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: var(--mmh-primary);
    margin-top: 2px;
}

.mmh-nav { display: flex; align-items: center; gap: 4px; }
.mmh-nav__item {
    position: relative;
    padding: 10px 18px;
    font-size: 0.92rem;
    color: var(--mmh-stone-900);
    font-weight: 500;
    border-radius: var(--mmh-radius-sm);
    transition: background var(--mmh-d-fast) var(--mmh-ease), color var(--mmh-d-fast) var(--mmh-ease);
    display: inline-flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    background: transparent;
    border: none;
    text-decoration: none;
}
.mmh-nav__item:hover { background: var(--mmh-sand-50); color: var(--mmh-primary-dark); }
.mmh-nav__item[aria-expanded="true"] { background: var(--mmh-sand-50); color: var(--mmh-primary-dark); }
.mmh-nav__caret { width: 10px; height: 10px; opacity: 0.5; }

.mmh-nav__dropdown {
    position: absolute;
    top: calc(100% + 8px);
    left: 50%;
    transform: translateX(-50%) translateY(-4px);
    min-width: 280px;
    padding: 14px;
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    box-shadow: var(--mmh-shadow-lg);
    opacity: 0;
    visibility: hidden;
    transition: all var(--mmh-d-base) var(--mmh-ease);
    z-index: 90;
}
.mmh-nav__item:hover .mmh-nav__dropdown,
.mmh-nav__item:focus-within .mmh-nav__dropdown,
.mmh-nav__item[aria-expanded="true"] .mmh-nav__dropdown {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) translateY(0);
}
.mmh-nav__dropdown a {
    display: block;
    padding: 10px 14px;
    border-radius: var(--mmh-radius-sm);
    color: var(--mmh-stone-700);
    font-size: 0.9rem;
    font-weight: 400;
    transition: all var(--mmh-d-fast) var(--mmh-ease);
}
.mmh-nav__dropdown a:hover { background: var(--mmh-sand-50); color: var(--mmh-primary-dark); }
.mmh-nav__dropdown--wide {
    min-width: 520px;
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 4px;
}

.mmh-header__actions { display: flex; align-items: center; gap: 8px; }
.mmh-icon-btn {
    width: 42px;
    height: 42px;
    border-radius: 50%;
    background: transparent;
    border: 1px solid transparent;
    color: var(--mmh-stone-900);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: all var(--mmh-d-fast) var(--mmh-ease);
}
.mmh-icon-btn:hover { background: var(--mmh-sand-50); border-color: var(--mmh-sand-200); }
.mmh-icon-btn svg { width: 18px; height: 18px; }
.mmh-icon-btn--has-count { position: relative; }
.mmh-icon-btn__count {
    position: absolute;
    top: 4px;
    right: 4px;
    min-width: 16px;
    height: 16px;
    padding: 0 4px;
    background: var(--mmh-gold);
    color: #fff;
    font-size: 0.62rem;
    font-weight: 600;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

/* Hamburger button.
 * Scoped + !important on the painted lines because Bootstrap's button reset
 * + parent theme styles otherwise repaint the button dark and hide the bars.
 */
body.mmh-v2 button.mmh-burger,
body.mmh-v2 .mmh-burger {
    display: none;
    width: 44px;
    height: 44px;
    border: 1px solid var(--mmh-sand-200) !important;
    border-radius: 50% !important;
    background: #fff !important;
    color: var(--mmh-stone-900);
    padding: 0 !important;
    cursor: pointer;
    align-items: center;
    justify-content: center;
    box-shadow: none !important;
}
body.mmh-v2 .mmh-burger > span {
    position: relative;
    display: block;
    width: 18px;
    height: 2px;
    background: var(--mmh-stone-900) !important;
    border-radius: 2px;
    transition: background var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 .mmh-burger > span::before,
body.mmh-v2 .mmh-burger > span::after {
    content: '';
    position: absolute;
    left: 0;
    width: 18px;
    height: 2px;
    background: var(--mmh-stone-900) !important;
    border-radius: 2px;
    transition: transform var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 .mmh-burger > span::before { top: -6px; }
body.mmh-v2 .mmh-burger > span::after  { top:  6px; }
body.mmh-v2 .mmh-burger.is-open > span { background: transparent !important; }
body.mmh-v2 .mmh-burger.is-open > span::before { transform: translateY(6px) rotate(45deg); }
body.mmh-v2 .mmh-burger.is-open > span::after  { transform: translateY(-6px) rotate(-45deg); }

/* Mobile drawer */
.mmh-drawer {
    position: fixed;
    inset: 0;
    background: #fff;
    z-index: 95;
    transform: translateX(100%);
    transition: transform var(--mmh-d-slow) var(--mmh-ease-out);
    overflow-y: auto;
    display: flex;
    flex-direction: column;
}
.mmh-drawer.is-open { transform: translateX(0); }
.mmh-drawer__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 22px;
    border-bottom: 1px solid var(--mmh-sand-200);
}
.mmh-drawer__close {
    width: 40px; height: 40px; border-radius: 50%;
    background: var(--mmh-sand-50);
    border: none;
    color: var(--mmh-stone-900);
    cursor: pointer;
    display: inline-flex; align-items: center; justify-content: center;
    font-size: 1.4rem; line-height: 1;
}
.mmh-drawer__nav { padding: 18px 6px; flex: 1; }
.mmh-drawer__nav a {
    display: block;
    padding: 14px 22px;
    color: var(--mmh-stone-900);
    font-size: 1.05rem;
    font-weight: 500;
    border-radius: var(--mmh-radius-sm);
}
.mmh-drawer__nav a:hover { background: var(--mmh-sand-50); }
.mmh-drawer__nav details { border-bottom: 1px solid var(--mmh-sand-100); }
.mmh-drawer__nav details summary {
    list-style: none;
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 14px 22px;
    font-size: 1.05rem;
    font-weight: 500;
}
.mmh-drawer__nav details summary::-webkit-details-marker { display: none; }
.mmh-drawer__nav details summary::after { content: '+'; font-size: 1.4rem; color: var(--mmh-stone-500); transition: transform var(--mmh-d-fast); }
.mmh-drawer__nav details[open] summary::after { transform: rotate(45deg); }
.mmh-drawer__nav details a { padding-left: 38px; font-size: 0.95rem; font-weight: 400; color: var(--mmh-stone-700); }
.mmh-drawer__cta { padding: 22px; border-top: 1px solid var(--mmh-sand-200); }
.mmh-drawer__cta .mmh-btn { width: 100%; }

@media (max-width: 1024px) {
    .mmh-nav { display: none; }
    .mmh-burger { display: inline-flex; }
    .mmh-header__actions .mmh-btn { display: none; }
}

/* Backdrop for dropdowns / drawers */
.mmh-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(15, 36, 36, 0.4);
    backdrop-filter: blur(2px);
    z-index: 90;
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--mmh-d-base) var(--mmh-ease), visibility var(--mmh-d-base) var(--mmh-ease);
}
.mmh-backdrop.is-visible { opacity: 1; visibility: visible; }

/* ============================================================
   6. Hero
   ============================================================ */
.mmh-hero {
    position: relative;
    min-height: clamp(560px, 78vh, 820px);
    margin-top: -1px;
    isolation: isolate;
    overflow: hidden;
}
.mmh-hero__bg {
    position: absolute;
    inset: 0;
    z-index: -2;
    background-position: center;
    background-size: cover;
    background-image: linear-gradient(180deg, rgba(17,25,25,0.0) 0%, rgba(17,25,25,0.2) 35%, rgba(17,25,25,0.65) 100%),
                      linear-gradient(135deg, var(--mmh-primary) 0%, var(--mmh-primary-dark) 60%, var(--mmh-ink) 100%);
}
.mmh-hero__bg::before {
    content: '';
    position: absolute;
    inset: 0;
    background:
        radial-gradient(80% 60% at 100% 0%, rgba(91, 189, 187, 0.18), transparent 60%),
        radial-gradient(70% 60% at 0% 100%, rgba(181, 140, 77, 0.1), transparent 60%);
}
.mmh-hero__inner {
    position: relative;
    z-index: 1;
    padding-top: clamp(60px, 9vw, 110px);
    padding-bottom: clamp(120px, 14vw, 180px);
    display: grid;
    grid-template-columns: 1fr;
    gap: 40px;
    color: #fff;
}
.mmh-hero__copy { max-width: 720px; }
/* Hero eyebrow on dark hero — must beat the global .mmh-eyebrow color rule */
body.mmh-v2 .mmh-hero .mmh-eyebrow,
body.mmh-v2 .mmh-hero__eyebrow {
    color: var(--mmh-gold-soft);
    margin-bottom: 18px;
}
body.mmh-v2 .mmh-hero .mmh-eyebrow::before,
body.mmh-v2 .mmh-hero__eyebrow::before { background: var(--mmh-gold-soft); }
.mmh-hero h1 {
    color: #fff;
    font-size: clamp(2.6rem, 5.6vw, 5rem);
    font-weight: 300;
    line-height: 1.04;
    margin-bottom: 24px;
    text-wrap: balance;
}
.mmh-hero h1 em {
    font-style: italic;
    font-weight: 400;
    color: var(--mmh-gold-soft);
}
.mmh-hero__lead {
    font-size: clamp(1.05rem, 1.4vw, 1.25rem);
    color: rgba(255,255,255,0.86);
    max-width: 560px;
    margin-bottom: 0;
    text-wrap: pretty;
}

/* Hero search bar overlay */
.mmh-hero__search {
    position: absolute;
    left: 50%;
    bottom: -52px;
    transform: translateX(-50%);
    width: min(96%, 1180px);
    z-index: 5;
}
@media (max-width: 720px) {
    .mmh-hero { min-height: clamp(520px, 86vh, 720px); }
    .mmh-hero__search { position: static; transform: none; width: auto; margin: -24px 16px 0; }
}

/* Floating trust badges over hero */
.mmh-hero__badges {
    display: flex;
    flex-wrap: wrap;
    gap: 12px 28px;
    margin-top: 32px;
    color: rgba(255,255,255,0.72);
    font-size: 0.85rem;
}
.mmh-hero__badges span { display: inline-flex; align-items: center; gap: 8px; }
.mmh-hero__badges svg { width: 14px; height: 14px; color: var(--mmh-gold-soft); }

/* ============================================================
   7. Search bar (overrides parent block-search-bar markup)
   Selectors target the existing Bootstrap-based DOM in
   homhero/block-search-bar/block-search-bar.php so we restyle
   without copying the PHP shortcode logic.
   ============================================================ */
body.mmh-v2 #search-accommodation .homhero-searchbar {
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-lg);
    box-shadow: var(--mmh-shadow-xl);
    padding: 14px;
    overflow: hidden; /* keep submit pill inside the card */
}
body.mmh-v2 #search-accommodation .homhero-search-form { width: 100%; }
body.mmh-v2 #search-accommodation .form-buttons { margin: 0 !important; }
body.mmh-v2 #search-accommodation .homhero-search-form .form-main {
    gap: 4px;
    align-items: stretch;
}
body.mmh-v2 #search-accommodation .quickSearch-fields {
    --bs-gutter-x: 0;
    align-items: stretch;
}
body.mmh-v2 #search-accommodation .quickSearch-fields > .col,
body.mmh-v2 #search-accommodation .quickSearch-fields > [class^="col-"],
body.mmh-v2 #search-accommodation .quickSearch-fields > [class*=" col-"] {
    position: relative;
    padding: 0;
}
body.mmh-v2 #search-accommodation .quickSearch-fields > div:not(:last-child)::after {
    content: '';
    position: absolute;
    top: 14px;
    bottom: 14px;
    right: 0;
    width: 1px;
    background: var(--mmh-sand-200);
}
body.mmh-v2 #search-accommodation .form-group.formIcon {
    margin: 0;
    padding: 12px 22px;
    border-radius: var(--mmh-radius-md);
    transition: background var(--mmh-d-fast) var(--mmh-ease);
    cursor: pointer;
}
body.mmh-v2 #search-accommodation .form-group.formIcon:hover { background: var(--mmh-sand-50); }
body.mmh-v2 #search-accommodation .form-group label {
    display: block;
    font-family: var(--mmh-font-sans);
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--mmh-stone-700);
    margin-bottom: 4px;
}
body.mmh-v2 #search-accommodation .form-control {
    border: none !important;
    background: transparent !important;
    padding: 0 !important;
    height: auto !important;
    font-size: 1rem !important;
    color: var(--mmh-stone-900) !important;
    box-shadow: none !important;
    font-family: var(--mmh-font-sans) !important;
}
body.mmh-v2 #search-accommodation .form-control::placeholder { color: var(--mmh-stone-500); }
body.mmh-v2 #search-accommodation select.form-control {
    appearance: none;
    -webkit-appearance: none;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7878' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>") !important;
    background-repeat: no-repeat !important;
    background-position: right 0 center !important;
    background-size: 14px !important;
    padding-right: 22px !important;
    cursor: pointer;
}

body.mmh-v2 #search-accommodation .form-buttons { align-items: stretch; gap: 10px; padding-left: 8px; }
body.mmh-v2 #search-accommodation #searchBtnHolder { padding: 0; }
body.mmh-v2 #search-accommodation #searchButton {
    background: var(--mmh-primary) !important;
    color: #fff !important;
    border: none !important;
    border-radius: var(--mmh-radius-md) !important;
    padding: 0 28px !important;
    height: 100%;
    min-height: 64px;
    font-size: 0.92rem !important;
    font-weight: 500 !important;
    letter-spacing: 0.01em;
    box-shadow: 0 6px 18px rgba(15, 102, 98, 0.22);
    transition: all var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 #search-accommodation #searchButton:hover {
    background: var(--mmh-primary-dark) !important;
    box-shadow: 0 10px 24px rgba(15, 102, 98, 0.26);
}
body.mmh-v2 #search-accommodation #advancedSearchBtn,
body.mmh-v2 #search-accommodation #advancedSearchModalBtn {
    background: var(--mmh-sand-50) !important;
    color: var(--mmh-stone-900) !important;
    border: 1px solid var(--mmh-sand-200) !important;
    border-radius: var(--mmh-radius-md) !important;
    min-height: 64px;
    padding: 0 22px !important;
    font-weight: 500 !important;
}
body.mmh-v2 #search-accommodation #advancedSearchBtn:hover,
body.mmh-v2 #search-accommodation #advancedSearchModalBtn:hover { background: var(--mmh-sand-100) !important; }
body.mmh-v2 #search-accommodation #clearSearchBtn {
    background: transparent !important;
    color: var(--mmh-stone-700) !important;
    border: 1px solid var(--mmh-sand-200) !important;
    border-radius: var(--mmh-radius-md) !important;
    min-height: 64px;
}

/* Compact variant (used in sticky header) */
body.mmh-v2 .mmh-search-compact #search-accommodation .homhero-searchbar {
    padding: 6px;
    border-radius: var(--mmh-radius-pill);
    box-shadow: var(--mmh-shadow-md);
}
body.mmh-v2 .mmh-search-compact #search-accommodation .form-group.formIcon { padding: 8px 18px; }
body.mmh-v2 .mmh-search-compact #search-accommodation .form-group label { display: none; }
body.mmh-v2 .mmh-search-compact #search-accommodation #searchButton { min-height: 50px; padding: 0 22px !important; border-radius: var(--mmh-radius-pill) !important; }

/* Modal dialog tweaks */
body.mmh-v2 #advancedFiltersModal .modal-content {
    border: none;
    border-radius: var(--mmh-radius-lg);
    box-shadow: var(--mmh-shadow-xl);
    overflow: hidden;
}
body.mmh-v2 #advancedFiltersModal .modal-header {
    border: none;
    padding: 22px 28px 8px;
}
body.mmh-v2 #advancedFiltersModal .modal-title {
    font-family: var(--mmh-font-serif);
    font-size: 1.6rem;
}
body.mmh-v2 #advancedFiltersModal .modal-body { padding: 16px 28px; }
body.mmh-v2 #advancedFiltersModal .modal-footer {
    border: none;
    padding: 16px 28px 24px;
    gap: 8px;
}
body.mmh-v2 #advancedFiltersModal .btn { border-radius: var(--mmh-radius-pill); padding: 10px 22px; font-weight: 500; }
body.mmh-v2 #advancedFiltersModal .btn-primary { background: var(--mmh-primary); border-color: var(--mmh-primary); }
body.mmh-v2 #advancedFiltersModal .btn-primary:hover { background: var(--mmh-primary-dark); border-color: var(--mmh-primary-dark); }
body.mmh-v2 #advancedFiltersModal .btn-secondary { background: var(--mmh-sand-50); border-color: var(--mmh-sand-200); color: var(--mmh-stone-900); }

/* daterangepicker rules removed — see Section 50 at end of file
 * for the single source of truth. Five conflicting blocks were
 * stacking and one of them painted td.available white. */

/* ============================================================
   8. Property cards (override of parent .productListing markup)
   See homhero/templates/listings-templates.css for finer styles.
   ============================================================ */
body.mmh-v2 .listing-wrapper { display: flex; }
body.mmh-v2 .productListing.card {
    border: none !important;
    border-radius: var(--mmh-radius-md) !important;
    background: transparent !important;
    box-shadow: none !important;
    overflow: visible !important;
    width: 100%;
    transition: transform var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 .productListing.card:hover { transform: translateY(-4px); }

body.mmh-v2 .productListing .card-img-top {
    position: relative;
    border-radius: var(--mmh-radius-md);
    overflow: hidden;
    aspect-ratio: 4 / 3.1;
    background: var(--mmh-sand-100);
}
body.mmh-v2 .productListing .carousel,
body.mmh-v2 .productListing .carousel-inner,
body.mmh-v2 .productListing .carousel-item { height: 100%; }
body.mmh-v2 .productListing .carousel-image-height {
    width: 100%; height: 100%;
    background-position: center;
    background-size: cover;
    transition: transform 720ms var(--mmh-ease-out);
}
body.mmh-v2 .productListing.card:hover .carousel-image-height { transform: scale(1.04); }

body.mmh-v2 .productListing .carousel-control-prev,
body.mmh-v2 .productListing .carousel-control-next {
    width: 36px; height: 36px;
    border-radius: 50%;
    background: rgba(255,255,255,0.92);
    top: 50%;
    bottom: auto;
    transform: translateY(-50%);
    opacity: 0;
    transition: opacity var(--mmh-d-fast) var(--mmh-ease);
    box-shadow: var(--mmh-shadow-sm);
}
body.mmh-v2 .productListing .carousel-control-prev { left: 12px; }
body.mmh-v2 .productListing .carousel-control-next { right: 12px; }
body.mmh-v2 .productListing.card:hover .carousel-control-prev,
body.mmh-v2 .productListing.card:hover .carousel-control-next { opacity: 1; }
body.mmh-v2 .productListing .carousel-control-prev-icon,
body.mmh-v2 .productListing .carousel-control-next-icon {
    width: 14px; height: 14px;
    filter: invert(20%);
}

body.mmh-v2 .productListing .suburb {
    position: absolute;
    top: 14px;
    left: 14px;
    background: rgba(255,255,255,0.94);
    border-radius: var(--mmh-radius-pill);
    padding: 5px 12px;
    font-size: 0.72rem;
    font-weight: 500;
    color: var(--mmh-stone-900);
    letter-spacing: 0.04em;
    text-transform: capitalize;
    box-shadow: var(--mmh-shadow-sm);
}
body.mmh-v2 .productListing .shortlist-container {
    position: absolute;
    top: 12px;
    right: 12px;
    width: 36px;
    height: 36px;
    background: rgba(255,255,255,0.94);
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    box-shadow: var(--mmh-shadow-sm);
    z-index: 3;
    transition: all var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 .productListing .shortlist-container:hover { transform: scale(1.08); background: #fff; }
body.mmh-v2 .productListing .shortlist-container i { color: var(--mmh-stone-700); font-size: 14px; }
body.mmh-v2 .productListing .shortlist-container.shortlisted i,
body.mmh-v2 .productListing .shortlist-container.is-shortlisted i { color: var(--mmh-gold); }

body.mmh-v2 .productListing .new-card-body {
    padding: 16px 4px 4px !important;
    color: var(--mmh-stone-900);
    display: block;
}
body.mmh-v2 .productListing .listingTitle {
    font-family: var(--mmh-font-serif) !important;
    font-size: 1.18rem !important;
    font-weight: 400 !important;
    line-height: 1.25 !important;
    color: var(--mmh-stone-900) !important;
    margin: 0 0 6px !important;
    letter-spacing: -0.005em;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
body.mmh-v2 .productListing .listingDesc {
    font-size: 0.86rem;
    color: var(--mmh-stone-500);
    margin: 0 0 8px;
    display: none;
}
body.mmh-v2 .productListing .card-footer {
    background: transparent !important;
    border: none !important;
    padding: 0 !important;
    margin-bottom: 6px;
}
body.mmh-v2 .productListing .stats { gap: 4px; }
body.mmh-v2 .productListing .propField {
    background: transparent !important;
    color: var(--mmh-stone-700) !important;
    font-size: 0.78rem !important;
    padding: 0 !important;
    margin-right: 12px !important;
    border: none !important;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}
body.mmh-v2 .productListing .propField::before {
    font-family: 'Font Awesome 5 Free';
    font-weight: 900;
    font-size: 11px;
    margin-right: 4px;
    color: var(--mmh-stone-500);
}
body.mmh-v2 .productListing .fieldSleeps::before    { content: '\f007'; }
body.mmh-v2 .productListing .fieldBedrooms::before  { content: '\f236'; }
body.mmh-v2 .productListing .fieldBathrooms::before { content: '\f2cc'; }
body.mmh-v2 .productListing .fieldCars::before      { content: '\f1b9'; }

body.mmh-v2 .productListing .reviews {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.82rem;
    color: var(--mmh-stone-700);
    margin-bottom: 6px;
}
body.mmh-v2 .productListing .reviews .stars { color: var(--mmh-gold); }
body.mmh-v2 .productListing .no_of_reviews { color: var(--mmh-stone-500); font-size: 0.78rem; }

body.mmh-v2 .productListing .listingPrice {
    font-family: var(--mmh-font-sans);
    font-size: 1.02rem;
    font-weight: 600;
    color: var(--mmh-stone-900);
    padding: 6px 0 0;
}
body.mmh-v2 .productListing .listingPrice .shrink {
    font-weight: 400;
    color: var(--mmh-stone-500);
    font-size: 0.82rem;
}
body.mmh-v2 .productListing .book-btn {
    display: none !important; /* card itself is the link; per-card book CTA was visually noisy */
}

/* Featured listings section grid */
body.mmh-v2 .featuredListings .grid-container .row.content {
    --bs-gutter-x: 32px;
    --bs-gutter-y: 48px;
}
body.mmh-v2 .featuredListings #homhero-loader { padding: 80px 0; color: var(--mmh-stone-500); }

/* Empty state in child-theme override */
body.mmh-v2 .mmh-empty {
    text-align: center;
    padding: 80px 32px;
    background: var(--mmh-sand-50);
    border-radius: var(--mmh-radius-lg);
    border: 1px solid var(--mmh-sand-200);
}
body.mmh-v2 .mmh-empty h3 { font-size: 1.5rem; margin-bottom: 8px; }
body.mmh-v2 .mmh-empty p { color: var(--mmh-stone-500); max-width: 480px; margin-inline: auto; }

/* ============================================================
   9. Locations grid (destination cards)
   ============================================================ */
body.mmh-v2 .mmh-destinations { display: grid; grid-template-columns: repeat(12, 1fr); gap: 24px; }
body.mmh-v2 .mmh-destination {
    position: relative;
    grid-column: span 6;
    aspect-ratio: 4 / 5;
    border-radius: var(--mmh-radius-md);
    overflow: hidden;
    background: var(--mmh-sand-100);
    color: #fff;
    display: flex;
    align-items: flex-end;
    isolation: isolate;
    box-shadow: var(--mmh-shadow-sm);
    transition: transform var(--mmh-d-base) var(--mmh-ease), box-shadow var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 .mmh-destination:hover { transform: translateY(-4px); box-shadow: var(--mmh-shadow-lg); color: #fff; }
body.mmh-v2 .mmh-destination__img {
    position: absolute; inset: 0; z-index: -2;
    background-position: center;
    background-size: cover;
    transition: transform 1.2s var(--mmh-ease-out);
}
body.mmh-v2 .mmh-destination:hover .mmh-destination__img { transform: scale(1.06); }
/* Subtle topographic-wave overlay for tiles that don't have a real image yet,
 * so the empty state feels intentional instead of "broken gradient". */
body.mmh-v2 .mmh-destination.has-fallback .mmh-destination__img::before {
    content: '';
    position: absolute; inset: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 800' preserveAspectRatio='xMidYMid slice'><g fill='none' stroke='%23ffffff' stroke-opacity='0.07' stroke-width='1.2'><path d='M0,420 C200,360 400,480 600,420 S1000,360 1200,420'/><path d='M0,460 C200,400 400,520 600,460 S1000,400 1200,460'/><path d='M0,500 C200,440 400,560 600,500 S1000,440 1200,500'/><path d='M0,540 C200,480 400,600 600,540 S1000,480 1200,540'/><path d='M0,580 C200,520 400,640 600,580 S1000,520 1200,580'/><path d='M0,620 C200,560 400,680 600,620 S1000,560 1200,620'/></g></svg>");
    background-size: cover;
    background-position: center;
    pointer-events: none;
    mix-blend-mode: overlay;
}
body.mmh-v2 .mmh-destination::after {
    content: '';
    position: absolute; inset: 0; z-index: -1;
    background: linear-gradient(180deg, rgba(15,36,36,0) 30%, rgba(15,36,36,0.65) 100%);
}
body.mmh-v2 .mmh-destination__body { padding: 24px; }
body.mmh-v2 .mmh-destination__name {
    font-family: var(--mmh-font-serif);
    font-size: 1.6rem;
    font-weight: 400;
    line-height: 1.1;
    margin: 0 0 4px;
    color: #fff;
}
body.mmh-v2 .mmh-destination__count {
    font-size: 0.82rem;
    color: rgba(255,255,255,0.78);
    letter-spacing: 0.04em;
}
@media (min-width: 768px) {
    body.mmh-v2 .mmh-destination:nth-child(1),
    body.mmh-v2 .mmh-destination:nth-child(6n+1) { grid-column: span 7; aspect-ratio: 5 / 4; }
    body.mmh-v2 .mmh-destination:nth-child(2),
    body.mmh-v2 .mmh-destination:nth-child(6n+2) { grid-column: span 5; aspect-ratio: 5 / 4; }
    body.mmh-v2 .mmh-destination:nth-child(3),
    body.mmh-v2 .mmh-destination:nth-child(6n+3),
    body.mmh-v2 .mmh-destination:nth-child(4),
    body.mmh-v2 .mmh-destination:nth-child(6n+4),
    body.mmh-v2 .mmh-destination:nth-child(5),
    body.mmh-v2 .mmh-destination:nth-child(6n+5) { grid-column: span 4; }
}
@media (max-width: 540px) {
    body.mmh-v2 .mmh-destinations { grid-template-columns: 1fr; }
    body.mmh-v2 .mmh-destination { grid-column: span 1 !important; aspect-ratio: 5 / 4; }
}

/* ============================================================
   10. Value props strip
   ============================================================ */
.mmh-value-props {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 32px 40px;
}
.mmh-value-prop {
    text-align: left;
}
.mmh-value-prop__icon {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: var(--mmh-primary-tint);
    color: var(--mmh-primary-dark);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 18px;
}
.mmh-value-prop__icon svg { width: 22px; height: 22px; }
.mmh-value-prop h3 { font-size: 1.15rem; margin-bottom: 8px; }
.mmh-value-prop p { color: var(--mmh-stone-500); font-size: 0.92rem; margin: 0; }

/* ============================================================
   11. "Curate your stay" feature pills
   ============================================================ */
.mmh-features-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
    gap: 16px;
}
.mmh-feature-card {
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    padding: 22px;
    text-align: center;
    color: var(--mmh-stone-900);
    transition: all var(--mmh-d-base) var(--mmh-ease);
    cursor: pointer;
}
.mmh-feature-card:hover {
    border-color: var(--mmh-primary);
    background: var(--mmh-primary-tint);
    color: var(--mmh-primary-dark);
    transform: translateY(-2px);
    box-shadow: var(--mmh-shadow-md);
}
.mmh-feature-card__icon {
    font-size: 1.6rem;
    margin-bottom: 10px;
    color: var(--mmh-primary);
}
.mmh-feature-card__name {
    font-size: 0.92rem;
    font-weight: 500;
}

/* ============================================================
   12. Specials cards
   ============================================================ */
.mmh-specials { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 24px; }
.mmh-special-card {
    position: relative;
    border-radius: var(--mmh-radius-md);
    overflow: hidden;
    aspect-ratio: 4 / 5;
    background: var(--mmh-sand-100);
    color: #fff;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    isolation: isolate;
    transition: transform var(--mmh-d-base) var(--mmh-ease);
}
.mmh-special-card:hover { transform: translateY(-4px); }
.mmh-special-card__img {
    position: absolute; inset: 0; z-index: -2;
    background-size: cover; background-position: center;
}
.mmh-special-card::after {
    content: '';
    position: absolute; inset: 0; z-index: -1;
    background: linear-gradient(180deg, rgba(0,0,0,0) 40%, rgba(0,0,0,0.7) 100%);
}
.mmh-special-card__tag {
    position: absolute;
    top: 16px; left: 16px;
    background: var(--mmh-gold);
    color: #fff;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    padding: 4px 10px;
    border-radius: var(--mmh-radius-xs);
}
.mmh-special-card__body { padding: 20px; }
.mmh-special-card__title {
    font-family: var(--mmh-font-serif);
    font-size: 1.4rem;
    font-weight: 400;
    color: #fff;
    margin: 0 0 4px;
}
.mmh-special-card__discount {
    color: rgba(255,255,255,0.82);
    font-size: 0.88rem;
}

/* ============================================================
   13. Banner / CTA
   ============================================================ */
.mmh-cta {
    position: relative;
    border-radius: var(--mmh-radius-lg);
    overflow: hidden;
    isolation: isolate;
    background: var(--mmh-stone-900);
    color: #fff;
    padding: clamp(48px, 6vw, 88px);
    display: grid;
    grid-template-columns: 1.2fr 1fr;
    gap: 40px;
    align-items: center;
}
.mmh-cta__bg {
    position: absolute; inset: 0; z-index: -2;
    background-size: cover; background-position: center;
    opacity: 0.55;
}
.mmh-cta::after {
    content: '';
    position: absolute; inset: 0; z-index: -1;
    background: linear-gradient(110deg, rgba(15,36,36,0.92) 0%, rgba(15,36,36,0.6) 50%, rgba(15,36,36,0.2) 100%);
}
.mmh-cta h2 { color: #fff; max-width: 18ch; margin-bottom: 14px; }
.mmh-cta p { color: rgba(255,255,255,0.82); max-width: 520px; margin-bottom: 0; }
.mmh-cta__actions { display: flex; flex-wrap: wrap; gap: 12px; justify-self: end; align-items: center; }
@media (max-width: 768px) {
    .mmh-cta { grid-template-columns: 1fr; }
    .mmh-cta__actions { justify-self: start; }
}

/* ============================================================
   14. Testimonials
   ============================================================ */
.mmh-testimonials {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 28px;
}
.mmh-testimonial {
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    padding: 32px;
}
.mmh-testimonial__stars { color: var(--mmh-gold); margin-bottom: 14px; font-size: 0.92rem; letter-spacing: 0.08em; }
.mmh-testimonial__quote {
    font-family: var(--mmh-font-serif);
    font-size: 1.1rem;
    line-height: 1.5;
    color: var(--mmh-stone-900);
    margin-bottom: 16px;
}
.mmh-testimonial__attr { font-size: 0.85rem; color: var(--mmh-stone-500); }
.mmh-testimonial__attr strong { color: var(--mmh-stone-900); font-weight: 500; }

/* ============================================================
   15. Listing / search results page layout
   ============================================================ */
.mmh-listing-page {
    background: var(--mmh-sand-50);
    min-height: 80vh;
}
.mmh-listing-toolbar {
    background: #fff;
    border-bottom: 1px solid var(--mmh-sand-200);
    padding-block: 18px;
    position: sticky;
    top: var(--mmh-header-h);
    z-index: 30;
}
.mmh-listing-toolbar__inner {
    display: flex;
    gap: 18px;
    align-items: center;
    overflow-x: auto;
    scrollbar-width: none;
}
.mmh-listing-toolbar__inner::-webkit-scrollbar { display: none; }
.mmh-listing-toolbar .mmh-chip { white-space: nowrap; }

.mmh-listing-summary {
    padding-top: 32px;
    padding-bottom: 14px;
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    justify-content: space-between;
    align-items: flex-end;
}
.mmh-listing-summary h1 { font-size: clamp(1.6rem, 2.6vw, 2.2rem); margin: 0; }
.mmh-listing-summary p { color: var(--mmh-stone-500); margin: 4px 0 0; font-size: 0.9rem; }
.mmh-listing-summary__sort .form-control,
.mmh-listing-summary__sort select {
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-pill);
    background: #fff;
    padding: 10px 18px;
    font-family: var(--mmh-font-sans);
    font-size: 0.88rem;
}

/* Override block-search-results.css coarse styling to keep the v2 grid clean. */
body.mmh-v2 .searchListings #search-results-container .row.content {
    --bs-gutter-x: 28px;
    --bs-gutter-y: 36px;
}
body.mmh-v2 .searchListings .listing-wrapper {
    flex: 0 0 100%;
    max-width: 100%;
}
@media (min-width: 540px) {
    body.mmh-v2 .searchListings .listing-wrapper { flex: 0 0 50%; max-width: 50%; }
}
@media (min-width: 992px) {
    body.mmh-v2 .searchListings .listing-wrapper { flex: 0 0 33.3333%; max-width: 33.3333%; }
}

/* ============================================================
   16. Single property page
   ============================================================ */
.mmh-property {
    background: #fff;
}
.mmh-property__breadcrumbs {
    padding-top: 20px;
    font-size: 0.82rem;
    color: var(--mmh-stone-500);
}
.mmh-property__breadcrumbs a { color: inherit; }
.mmh-property__breadcrumbs a:hover { color: var(--mmh-primary); }
.mmh-property__breadcrumbs span + span::before { content: '/'; margin: 0 10px; opacity: 0.6; }

.mmh-property__head {
    padding-top: 16px;
    padding-bottom: 28px;
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    justify-content: space-between;
    align-items: flex-end;
}
.mmh-property__title { margin: 0; font-size: clamp(1.8rem, 3vw, 2.6rem); line-height: 1.1; }
.mmh-property__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px 16px;
    font-size: 0.92rem;
    color: var(--mmh-stone-700);
    margin-top: 6px;
}
.mmh-property__meta strong { color: var(--mmh-stone-900); }
.mmh-property__meta .mmh-rating { color: var(--mmh-gold); }
.mmh-property__meta a { color: var(--mmh-stone-700); border-bottom: 1px solid currentColor; }
.mmh-property__actions { display: flex; gap: 10px; }
.mmh-property__action-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    background: transparent;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-pill);
    color: var(--mmh-stone-900);
    font-size: 0.86rem;
    cursor: pointer;
    transition: all var(--mmh-d-fast) var(--mmh-ease);
}
.mmh-property__action-btn:hover { border-color: var(--mmh-stone-700); }

.mmh-gallery {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr;
    grid-template-rows: 1fr 1fr;
    gap: 8px;
    height: clamp(360px, 50vw, 540px);
    border-radius: var(--mmh-radius-md);
    overflow: hidden;
}
.mmh-gallery__item {
    position: relative;
    background: var(--mmh-sand-100);
    background-size: cover;
    background-position: center;
    cursor: pointer;
    overflow: hidden;
}
.mmh-gallery__item:nth-child(1) { grid-row: 1 / 3; }
.mmh-gallery__item img {
    width: 100%; height: 100%; object-fit: cover;
    transition: transform var(--mmh-d-slow) var(--mmh-ease-out);
}
.mmh-gallery__item:hover img { transform: scale(1.04); }
.mmh-gallery__viewall {
    position: absolute;
    bottom: 18px;
    right: 18px;
    background: #fff;
    color: var(--mmh-stone-900);
    border: none;
    padding: 10px 18px;
    border-radius: var(--mmh-radius-pill);
    font-size: 0.85rem;
    font-weight: 500;
    cursor: pointer;
    box-shadow: var(--mmh-shadow-md);
    display: inline-flex; align-items: center; gap: 8px;
}
@media (max-width: 768px) {
    .mmh-gallery { grid-template-columns: 1fr; grid-template-rows: 1fr; height: clamp(260px, 60vw, 380px); }
    .mmh-gallery__item { display: none; }
    .mmh-gallery__item:nth-child(1) { display: block; grid-row: auto; }
}

.mmh-property__body {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 380px;
    gap: 56px;
    padding-block: 48px;
    align-items: flex-start;
}
@media (max-width: 992px) {
    .mmh-property__body { grid-template-columns: 1fr; gap: 32px; }
}

.mmh-property__main > section {
    padding-block: 28px;
    border-bottom: 1px solid var(--mmh-sand-200);
}
.mmh-property__main > section:first-child { padding-top: 0; }
.mmh-property__main h2 { font-size: 1.5rem; margin-bottom: 14px; }
.mmh-property__highlights {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 22px 32px;
}
.mmh-property__highlight { display: flex; gap: 14px; align-items: flex-start; }
.mmh-property__highlight svg { width: 22px; height: 22px; color: var(--mmh-primary); flex: 0 0 auto; margin-top: 2px; }
.mmh-property__highlight strong { display: block; font-weight: 500; margin-bottom: 2px; }
.mmh-property__highlight small { color: var(--mmh-stone-500); font-size: 0.82rem; }

.mmh-property__amenities {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 14px 32px;
}
.mmh-property__amenities li {
    display: flex;
    align-items: center;
    gap: 12px;
    list-style: none;
    padding: 0;
    color: var(--mmh-stone-900);
    font-size: 0.95rem;
}
.mmh-property__amenities li svg { width: 18px; height: 18px; color: var(--mmh-primary); }

/* Sticky booking widget on desktop */
.mmh-booking-card {
    position: sticky;
    top: calc(var(--mmh-header-h) + 24px);
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    padding: 24px;
    box-shadow: var(--mmh-shadow-lg);
}
.mmh-booking-card__price {
    font-family: var(--mmh-font-sans);
    margin-bottom: 14px;
}
.mmh-booking-card__price-amount { font-size: 1.65rem; font-weight: 600; color: var(--mmh-stone-900); }
.mmh-booking-card__price-unit { color: var(--mmh-stone-500); font-size: 0.92rem; }
.mmh-booking-card__rating { font-size: 0.86rem; color: var(--mmh-stone-500); margin-bottom: 16px; }
.mmh-booking-card__rating .mmh-rating { color: var(--mmh-gold); }
.mmh-booking-card__cta { width: 100%; }
.mmh-booking-card__note { text-align: center; font-size: 0.8rem; color: var(--mmh-stone-500); margin-top: 12px; }

/* Mobile sticky reserve bar */
.mmh-reserve-bar {
    position: fixed;
    bottom: 0; left: 0; right: 0;
    background: #fff;
    border-top: 1px solid var(--mmh-sand-200);
    box-shadow: 0 -8px 24px rgba(15,36,36,0.06);
    padding: 12px 18px;
    z-index: 70;
    display: none;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}
.mmh-reserve-bar__price strong { font-size: 1.05rem; }
.mmh-reserve-bar__price small { display: block; color: var(--mmh-stone-500); font-size: 0.78rem; }
@media (max-width: 992px) {
    .mmh-reserve-bar { display: flex; }
    body.mmh-v2.has-reserve-bar { padding-bottom: 80px; }
}

/* ============================================================
   17. Footer
   ============================================================ */
.mmh-footer {
    background: var(--mmh-stone-900);
    color: rgba(255,255,255,0.78);
    padding-top: 80px;
    margin-top: 80px;
}
.mmh-footer h4 {
    font-family: var(--mmh-font-sans);
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: rgba(255,255,255,0.6);
    margin: 0 0 18px;
}
.mmh-footer__grid {
    display: grid;
    grid-template-columns: 2fr repeat(3, 1fr);
    gap: 48px;
    padding-bottom: 64px;
}
@media (max-width: 768px) {
    .mmh-footer__grid { grid-template-columns: 1fr 1fr; gap: 36px; }
}
@media (max-width: 540px) {
    .mmh-footer__grid { grid-template-columns: 1fr; }
}
.mmh-footer__brand .mmh-header__brand-text { color: #fff; font-size: 1.8rem; }
.mmh-footer__brand p { font-size: 0.92rem; line-height: 1.55; max-width: 360px; }
.mmh-footer__col ul { list-style: none; padding: 0; margin: 0; }
.mmh-footer__col li { margin-bottom: 12px; }
.mmh-footer__col a {
    color: rgba(255,255,255,0.78);
    font-size: 0.92rem;
    transition: color var(--mmh-d-fast) var(--mmh-ease);
}
.mmh-footer__col a:hover { color: #fff; }

.mmh-newsletter {
    margin-top: 24px;
    display: flex;
    gap: 8px;
}
.mmh-newsletter input {
    flex: 1;
    background: rgba(255,255,255,0.08);
    border: 1px solid rgba(255,255,255,0.14);
    color: #fff;
    padding: 12px 16px;
    border-radius: var(--mmh-radius-pill);
    font-family: var(--mmh-font-sans);
    font-size: 0.9rem;
}
.mmh-newsletter input::placeholder { color: rgba(255,255,255,0.5); }
.mmh-newsletter input:focus { outline: none; border-color: var(--mmh-primary-light); background: rgba(255,255,255,0.12); }
.mmh-newsletter button { background: var(--mmh-primary); color: #fff; }
.mmh-newsletter button:hover { background: var(--mmh-primary-dark); }

.mmh-footer__bar {
    border-top: 1px solid rgba(255,255,255,0.08);
    padding: 24px 0;
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: space-between;
    align-items: center;
    font-size: 0.82rem;
    color: rgba(255,255,255,0.55);
}
.mmh-footer__socials { display: flex; gap: 12px; }
.mmh-footer__socials a {
    width: 36px; height: 36px; border-radius: 50%;
    background: rgba(255,255,255,0.06);
    color: rgba(255,255,255,0.78);
    display: inline-flex; align-items: center; justify-content: center;
    transition: all var(--mmh-d-fast) var(--mmh-ease);
}
.mmh-footer__socials a:hover { background: var(--mmh-primary); color: #fff; }
.mmh-footer__socials svg { width: 16px; height: 16px; }
.mmh-footer__legal { display: flex; gap: 18px; flex-wrap: wrap; }
.mmh-footer__legal a { color: rgba(255,255,255,0.55); }
.mmh-footer__legal a:hover { color: #fff; }

/* Logo wall */
.mmh-trust-logos {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 36px 56px;
    opacity: 0.7;
}
.mmh-trust-logos > * { color: var(--mmh-stone-500); font-family: var(--mmh-font-serif); font-size: 1.4rem; letter-spacing: 0.04em; }

/* ============================================================
   18. Scroll-reveal utility
   ============================================================ */
.mmh-reveal {
    opacity: 0;
    transform: translateY(16px);
    transition: opacity 700ms var(--mmh-ease-out), transform 700ms var(--mmh-ease-out);
    transition-delay: var(--reveal-d, 0ms);
}
.mmh-reveal.is-visible { opacity: 1; transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
    .mmh-reveal { opacity: 1; transform: none; transition: none; }
    body.mmh-v2 *,
    body.mmh-v2 *::before,
    body.mmh-v2 *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; }
}

/* ============================================================
   19. Misc — 404 / utility / fixes
   ============================================================ */
.mmh-404 {
    min-height: 60vh;
    display: grid;
    place-items: center;
    text-align: center;
    padding: 80px 20px;
}
.mmh-404 h1 { font-size: clamp(3rem, 6vw, 5.5rem); }

.mmh-divider {
    width: 56px;
    height: 1px;
    background: var(--mmh-gold);
    margin: 16px 0 24px;
}
.mmh-section--dark .mmh-divider { background: var(--mmh-gold-soft); }

/* Rating stars helper */
.mmh-rating { letter-spacing: 0.08em; }

/* Visually hidden */
.mmh-sr-only {
    position: absolute; width: 1px; height: 1px;
    padding: 0; margin: -1px; overflow: hidden;
    clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}

/* Content widths inside Gutenberg blocks on spec pages */
body.mmh-v2 .wp-block-cover { border-radius: var(--mmh-radius-md); overflow: hidden; }
body.mmh-v2 .wp-block-buttons .wp-block-button__link {
    border-radius: var(--mmh-radius-pill);
    padding: 14px 28px;
    font-weight: 500;
    font-family: var(--mmh-font-sans);
    background: var(--mmh-primary);
    color: #fff;
}
body.mmh-v2 .wp-block-buttons .wp-block-button__link:hover { background: var(--mmh-primary-dark); }

/* ============================================================
   20. FAQs (native <details>/<summary>)
   ============================================================ */
body.mmh-v2 .entry-content details,
body.mmh-v2 .listingContentWrapper details {
    border-bottom: 1px solid var(--mmh-sand-200);
    margin: 0;
    padding: 0;
}
body.mmh-v2 .entry-content details:first-of-type,
body.mmh-v2 .listingContentWrapper details:first-of-type {
    border-top: 1px solid var(--mmh-sand-200);
}
body.mmh-v2 .entry-content details > summary,
body.mmh-v2 .listingContentWrapper details > summary {
    list-style: none;
    cursor: pointer;
    padding: 22px 0;
    font-family: var(--mmh-font-serif);
    font-size: 1.15rem;
    font-weight: 400;
    color: var(--mmh-stone-900);
    line-height: 1.4;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    transition: color var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 .entry-content details > summary::-webkit-details-marker,
body.mmh-v2 .listingContentWrapper details > summary::-webkit-details-marker { display: none; }
body.mmh-v2 .entry-content details > summary::marker,
body.mmh-v2 .listingContentWrapper details > summary::marker { display: none; content: ''; }
body.mmh-v2 .entry-content details > summary:hover,
body.mmh-v2 .listingContentWrapper details > summary:hover { color: var(--mmh-primary); }
body.mmh-v2 .mmh-faq-chevron {
    flex: 0 0 auto;
    color: var(--mmh-stone-500);
    transition: transform var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 details[open] .mmh-faq-chevron { transform: rotate(180deg); color: var(--mmh-primary); }
body.mmh-v2 .entry-content details[open] > summary,
body.mmh-v2 .listingContentWrapper details[open] > summary { color: var(--mmh-primary); }
body.mmh-v2 .entry-content details > *:not(summary),
body.mmh-v2 .listingContentWrapper details > *:not(summary) {
    padding-left: 2px;
    padding-bottom: 22px;
    color: var(--mmh-stone-700);
    line-height: 1.65;
    font-size: 0.95rem;
}

/* ============================================================
   21. edit_post_link styling — admin-only badge
   When admins are signed in, edit_post_link still renders. Style it
   as an unobtrusive badge instead of inline text in the content flow.
   ============================================================ */
body.mmh-v2 .post-edit-link,
body.mmh-v2 a.post-edit-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    background: var(--mmh-stone-900);
    color: #fff !important;
    font-family: var(--mmh-font-sans);
    font-size: 0.72rem;
    font-weight: 500;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    border-radius: var(--mmh-radius-pill);
    border: 0;
    text-decoration: none !important;
    opacity: 0.7;
}
body.mmh-v2 .post-edit-link:hover { opacity: 1; }

/* ============================================================
   22. Journal / blog archive — proper card grid
   ============================================================ */
body.mmh-v2.archive .site-main,
body.mmh-v2.blog .site-main,
body.mmh-v2.page-template-default .blog-posts-grid {
    max-width: var(--mmh-container);
    margin-inline: auto;
    padding: 32px clamp(20px, 4vw, 40px) 80px;
}
body.mmh-v2.archive .site-main > article,
body.mmh-v2.blog .site-main > article {
    max-width: none;
    margin: 0;
}
body.mmh-v2.blog .site-main,
body.mmh-v2.archive:not(.tax-suburbs):not(.tax-regions):not(.tax-listingcat):not(.tax-features) .site-main {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 32px;
}
body.mmh-v2.blog .site-main > .page-header,
body.mmh-v2.archive:not(.tax-suburbs):not(.tax-regions):not(.tax-listingcat):not(.tax-features) .site-main > .page-header {
    grid-column: 1 / -1;
    margin-bottom: 0;
    text-align: left;
}
body.mmh-v2.blog .site-main > article,
body.mmh-v2.archive:not(.tax-suburbs):not(.tax-regions):not(.tax-listingcat):not(.tax-features) .site-main > article {
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    overflow: hidden;
    transition: transform var(--mmh-d-base) var(--mmh-ease), box-shadow var(--mmh-d-base) var(--mmh-ease);
    padding: 0;
}
body.mmh-v2.blog .site-main > article:hover { transform: translateY(-3px); box-shadow: var(--mmh-shadow-md); }
body.mmh-v2.blog .site-main > article .post-thumbnail img {
    width: 100%;
    aspect-ratio: 4 / 2.6;
    object-fit: cover;
}
body.mmh-v2.blog .site-main > article .entry-header,
body.mmh-v2.blog .site-main > article .entry-content,
body.mmh-v2.blog .site-main > article .entry-footer { padding: 18px 22px; }
body.mmh-v2.blog .site-main > article .entry-title {
    font-family: var(--mmh-font-serif);
    font-size: 1.3rem;
    font-weight: 400;
    line-height: 1.2;
    margin: 0 0 8px;
}
body.mmh-v2.blog .site-main > article .entry-title a { color: var(--mmh-stone-900); }
body.mmh-v2.blog .site-main > article .entry-title a:hover { color: var(--mmh-primary); }

/* ============================================================
   23. Breadcrumbs (used on taxonomy + property pages)
   ============================================================ */
body.mmh-v2 .mmh-breadcrumbs {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 10px;
    align-items: center;
    font-size: 0.82rem;
    color: var(--mmh-stone-500);
    padding: 14px 0;
}
body.mmh-v2 .mmh-breadcrumbs a { color: var(--mmh-stone-700); }
body.mmh-v2 .mmh-breadcrumbs a:hover { color: var(--mmh-primary); }
body.mmh-v2 .mmh-breadcrumbs .sep { opacity: 0.5; }
body.mmh-v2 .mmh-breadcrumbs [aria-current="page"] { color: var(--mmh-stone-900); }

/* ============================================================
   24. Premium polish — editorial coastal-luxury direction
   Layered on top of the working theme. Touches: hero, header chrome,
   search card, listing cards, bento destinations, value props,
   testimonials, owner CTA, footer, plus mobile-app-feel tokens
   (100dvh, safe-area, tap highlight kill, sticky thumb-zone CTA).
   ============================================================ */

/* ---------- 24.1 Mobile-app-feel base ---------- */
body.mmh-v2 {
    -webkit-tap-highlight-color: transparent;
    text-rendering: optimizeLegibility;
    font-feature-settings: "ss01", "cv11", "kern";
    background: var(--mmh-paper);
}
@supports (background: oklch(0.98 0.005 80)) {
    body.mmh-v2 { background: oklch(0.97 0.012 84); }
}
body.mmh-v2 input, body.mmh-v2 select, body.mmh-v2 textarea { font-size: 16px; } /* iOS no-zoom */
body.mmh-v2 input[type="email"],
body.mmh-v2 input[type="search"],
body.mmh-v2 input[type="text"] { font-size: 16px; }
body.mmh-v2 a, body.mmh-v2 button { -webkit-tap-highlight-color: transparent; }
body.mmh-v2 a:focus-visible,
body.mmh-v2 button:focus-visible {
    outline: 2px solid color-mix(in oklab, var(--mmh-primary) 70%, transparent);
    outline-offset: 3px;
    border-radius: 4px;
}

/* ---------- 24.2 Editorial type — italic display via Instrument Serif ---------- */
body.mmh-v2 h1 em,
body.mmh-v2 h2 em,
body.mmh-v2 .mmh-hero h1 em,
body.mmh-v2 .mmh-italic-display {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-weight: 400;
    letter-spacing: -0.012em;
    color: var(--mmh-gold-soft);
}
body.mmh-v2 h1, body.mmh-v2 h2 { font-feature-settings: "ss01", "kern", "liga", "calt"; }
body.mmh-v2 h1 { font-weight: 350; }
body.mmh-v2 h2 { font-weight: 380; }
body.mmh-v2 p { text-wrap: pretty; }
body.mmh-v2 .mmh-lead { color: var(--mmh-stone-700); max-width: 60ch; }

/* Refined eyebrow — longer rule, slimmer tracking, tiny brass square */
body.mmh-v2 .mmh-eyebrow {
    gap: 12px;
    font-size: 0.7rem;
    letter-spacing: 0.22em;
    color: var(--mmh-gold-deep);
    font-weight: 600;
}
body.mmh-v2 .mmh-eyebrow::before {
    width: 36px;
    height: 1px;
    background: var(--mmh-gold);
}

/* Section head — refined cadence, intro stays narrow for premium rhythm */
.mmh-section-head {
    margin-bottom: clamp(36px, 5vw, 56px);
    align-items: flex-end;
}
.mmh-section-head__intro h2 { margin-bottom: 14px; line-height: 1.05; }
.mmh-section-head__intro .mmh-lead { margin: 0; font-size: 1.05rem; }

/* ---------- 24.3 Header chrome — translucent, brass underline on scroll ---------- */
.mmh-topbar {
    background: linear-gradient(180deg, var(--mmh-stone-900), var(--mmh-ink));
    color: rgba(255,255,255,0.72);
    border-bottom: 1px solid color-mix(in oklab, var(--mmh-gold) 18%, transparent);
}
.mmh-topbar a:hover { color: var(--mmh-gold-soft); }
.mmh-header {
    background: color-mix(in oklab, var(--mmh-paper) 78%, transparent);
    backdrop-filter: saturate(160%) blur(18px);
    -webkit-backdrop-filter: saturate(160%) blur(18px);
}
.mmh-header.is-scrolled {
    background: color-mix(in oklab, var(--mmh-paper) 92%, transparent);
    border-bottom: 1px solid color-mix(in oklab, var(--mmh-ink) 8%, transparent);
    box-shadow: 0 1px 0 color-mix(in oklab, var(--mmh-gold) 20%, transparent),
                0 12px 24px color-mix(in oklab, var(--mmh-shadow-color) 6%, transparent);
}
.mmh-header__brand-text {
    letter-spacing: -0.018em;
    font-weight: 400;
}
.mmh-header__brand-text small {
    color: var(--mmh-gold-deep);
    letter-spacing: 0.32em;
}
.mmh-nav__item { font-weight: 480; letter-spacing: 0.005em; }

/* ---------- 24.4 Hero — full-bleed editorial, mixed-script display ---------- */
.mmh-hero {
    min-height: clamp(620px, 92dvh, 920px);
    background: var(--mmh-ink);
}
.mmh-hero__bg {
    /* Layer order: photo → graphite gradient → aurora highlights */
    background-image:
        linear-gradient(180deg, rgba(17,25,25,0.05) 0%, rgba(17,25,25,0.32) 35%, rgba(17,25,25,0.78) 100%),
        linear-gradient(135deg, var(--mmh-ink) 0%, var(--mmh-primary-dark) 55%, var(--mmh-ink) 100%);
}
.mmh-hero__bg::after {
    content: '';
    position: absolute; inset: 0;
    background:
        radial-gradient(60% 50% at 12% 18%, color-mix(in oklab, var(--mmh-primary-light) 30%, transparent), transparent 60%),
        radial-gradient(50% 40% at 88% 10%, color-mix(in oklab, var(--mmh-gold-soft) 18%, transparent), transparent 60%),
        radial-gradient(70% 60% at 100% 100%, color-mix(in oklab, var(--mmh-primary) 28%, transparent), transparent 60%);
    mix-blend-mode: screen;
    opacity: 0.9;
    pointer-events: none;
}
.mmh-hero::after {
    /* Tactile grain — kills banding, adds film texture */
    content: '';
    position: absolute; inset: 0; z-index: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.7 0'/></filter><rect width='220' height='220' filter='url(%23n)' opacity='0.18'/></svg>");
    opacity: 0.45;
    mix-blend-mode: overlay;
    pointer-events: none;
}
.mmh-hero__inner {
    padding-top: clamp(72px, 11vw, 140px);
    padding-bottom: clamp(150px, 17vw, 220px);
    padding-bottom: max(clamp(150px, 17vw, 220px), env(safe-area-inset-bottom));
}
.mmh-hero h1 {
    font-size: clamp(2.8rem, 7vw, 5.6rem);
    font-weight: 320;
    line-height: 0.98;
    letter-spacing: -0.028em;
    margin-bottom: 28px;
    text-wrap: balance;
}
.mmh-hero h1 em {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-weight: 400;
    color: var(--mmh-gold-soft);
    letter-spacing: -0.01em;
    /* Subtle vertical bias gives that magazine pull-quote rhythm */
    display: inline-block;
    transform: translateY(0.04em);
}
.mmh-hero__lead {
    font-size: clamp(1.05rem, 1.4vw, 1.22rem);
    color: rgba(247,242,232,0.82);
    max-width: 56ch;
    line-height: 1.55;
}
.mmh-hero__badges {
    margin-top: 40px;
    gap: 14px 32px;
    color: rgba(247,242,232,0.74);
    font-size: 0.82rem;
    letter-spacing: 0.02em;
}
.mmh-hero__badges span { gap: 10px; }
.mmh-hero__badges svg { width: 15px; height: 15px; color: var(--mmh-gold-soft); }

/* Hero scroll cue — subtle, only on desktop, fades on scroll */
.mmh-hero__cue {
    position: absolute;
    bottom: 26px;
    left: 50%;
    transform: translateX(-50%);
    z-index: 4;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    color: rgba(247,242,232,0.6);
    font-size: 0.72rem;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    pointer-events: none;
}
.mmh-hero__cue::after {
    content: '';
    width: 1px; height: 36px;
    background: linear-gradient(180deg, transparent, var(--mmh-gold-soft));
    animation: mmh-cue-pulse 2.4s var(--mmh-ease) infinite;
    transform-origin: top;
}
@keyframes mmh-cue-pulse {
    0%, 100% { transform: scaleY(0.6); opacity: 0.4; }
    50%      { transform: scaleY(1);   opacity: 1; }
}
@media (max-width: 720px) { .mmh-hero__cue { display: none; } }

/* Hero search card — float over hero with brand-tinted shadow */
body.mmh-v2 #search-accommodation .homhero-searchbar {
    background: var(--mmh-paper);
    border: 1px solid color-mix(in oklab, var(--mmh-gold) 14%, transparent);
    box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset,
                0 24px 56px color-mix(in oklab, var(--mmh-ink) 28%, transparent),
                0 64px 100px color-mix(in oklab, var(--mmh-ink) 18%, transparent);
    border-radius: 22px;
    padding: 12px;
}
body.mmh-v2 #search-accommodation .form-group.formIcon {
    border-radius: 14px;
}
body.mmh-v2 #search-accommodation .form-group label {
    font-size: 0.66rem;
    letter-spacing: 0.22em;
    color: var(--mmh-gold-deep);
}
body.mmh-v2 #search-accommodation .form-control {
    font-family: var(--mmh-font-sans) !important;
    font-weight: 500 !important;
    letter-spacing: -0.005em;
}
body.mmh-v2 #search-accommodation #searchButton {
    border-radius: 14px !important;
    background: var(--mmh-ink) !important;
    box-shadow: 0 4px 14px color-mix(in oklab, var(--mmh-ink) 28%, transparent),
                0 1px 0 rgba(255,255,255,0.06) inset !important;
    font-weight: 600 !important;
    letter-spacing: 0.02em;
}
body.mmh-v2 #search-accommodation #searchButton:hover {
    background: var(--mmh-stone-800) !important;
    transform: translateY(-1px);
}
body.mmh-v2 #search-accommodation #searchButton:active { transform: translateY(0); }

/* ---------- 24.5 Buttons — premium body and active feedback ---------- */
body.mmh-v2 .mmh-btn {
    font-weight: 520;
    letter-spacing: 0.012em;
}
body.mmh-v2 .mmh-btn--primary,
body.mmh-v2 a.mmh-btn--primary {
    background: var(--mmh-ink);
    color: var(--mmh-paper);
    box-shadow: 0 1px 0 rgba(255,255,255,0.08) inset,
                0 6px 16px color-mix(in oklab, var(--mmh-ink) 30%, transparent),
                0 14px 28px color-mix(in oklab, var(--mmh-ink) 14%, transparent);
}
body.mmh-v2 .mmh-btn--primary:hover,
body.mmh-v2 a.mmh-btn--primary:hover {
    background: var(--mmh-stone-800);
    color: var(--mmh-paper);
    transform: translateY(-1px);
    box-shadow: 0 1px 0 rgba(255,255,255,0.1) inset,
                0 10px 22px color-mix(in oklab, var(--mmh-ink) 35%, transparent),
                0 22px 44px color-mix(in oklab, var(--mmh-ink) 18%, transparent);
}
body.mmh-v2 .mmh-btn--primary:active { transform: translateY(0); }
body.mmh-v2 .mmh-btn--ghost,
body.mmh-v2 a.mmh-btn--ghost {
    background: transparent;
    color: var(--mmh-ink);
    border: 1px solid var(--mmh-line);
}
body.mmh-v2 .mmh-btn--ghost:hover,
body.mmh-v2 a.mmh-btn--ghost:hover {
    background: color-mix(in oklab, var(--mmh-ink) 4%, transparent);
    border-color: var(--mmh-ink);
}
body.mmh-v2 .mmh-btn--inverse:hover { transform: translateY(-1px); }

/* ---------- 24.6 Sections — paper background, refined cadence ---------- */
.mmh-section--sand {
    background: var(--mmh-paper-warm);
    background:
        radial-gradient(80% 60% at 0% 0%, color-mix(in oklab, var(--mmh-gold-soft) 8%, transparent), transparent 70%),
        var(--mmh-paper-warm);
}
.mmh-section--dark { background: var(--mmh-ink); }

/* ---------- 24.7 Property cards — slower, more cinematic ---------- */
body.mmh-v2 .productListing.card { transition: transform 480ms var(--mmh-ease-out); }
body.mmh-v2 .productListing.card:hover { transform: translateY(-6px); }
body.mmh-v2 .productListing .card-img-top {
    border-radius: 16px;
    box-shadow: 0 1px 0 rgba(255,255,255,0.4) inset;
}
body.mmh-v2 .productListing .carousel-image-height {
    transition: transform 1100ms var(--mmh-ease-out);
}
body.mmh-v2 .productListing.card:hover .carousel-image-height { transform: scale(1.06); }
body.mmh-v2 .productListing .suburb {
    background: color-mix(in oklab, var(--mmh-paper) 88%, transparent);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    color: var(--mmh-ink);
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    font-size: 0.68rem;
    border: 1px solid color-mix(in oklab, var(--mmh-paper) 80%, var(--mmh-gold) 12%);
    box-shadow: 0 4px 12px rgba(17,25,25,0.18);
}
body.mmh-v2 .productListing .shortlist-container {
    background: color-mix(in oklab, var(--mmh-paper) 88%, transparent);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    box-shadow: 0 4px 12px rgba(17,25,25,0.18);
}
body.mmh-v2 .productListing .listingTitle {
    font-size: 1.22rem !important;
    font-weight: 380 !important;
    letter-spacing: -0.012em !important;
    color: var(--mmh-ink) !important;
    line-height: 1.18 !important;
}
body.mmh-v2 .productListing .reviews { gap: 8px; }
body.mmh-v2 .productListing .reviews .stars { letter-spacing: 0.06em; }
body.mmh-v2 .productListing .listingPrice {
    border-top: 1px solid var(--mmh-line-soft);
    margin-top: 10px;
    padding-top: 10px !important;
    font-size: 1.05rem;
    letter-spacing: -0.01em;
}

/* ---------- 24.8 Bento destinations — luxury overlay, italic, brass cue ---------- */
body.mmh-v2 .mmh-destinations { gap: 18px; }
body.mmh-v2 .mmh-destination {
    border-radius: 18px;
    box-shadow: 0 1px 2px color-mix(in oklab, var(--mmh-ink) 6%, transparent),
                0 14px 28px color-mix(in oklab, var(--mmh-ink) 8%, transparent);
    transition: transform 540ms var(--mmh-ease-out), box-shadow 540ms var(--mmh-ease-out);
}
body.mmh-v2 .mmh-destination::before {
    content: '';
    position: absolute; inset: 0; z-index: 1;
    border-radius: inherit;
    border: 1px solid rgba(255,255,255,0.1);
    pointer-events: none;
}
body.mmh-v2 .mmh-destination::after {
    background:
        linear-gradient(180deg, rgba(17,25,25,0) 30%, rgba(17,25,25,0.45) 70%, rgba(17,25,25,0.85) 100%);
}
body.mmh-v2 .mmh-destination__img { transition: transform 1.4s var(--mmh-ease-out); }
body.mmh-v2 .mmh-destination:hover { transform: translateY(-6px); }
body.mmh-v2 .mmh-destination:hover .mmh-destination__img { transform: scale(1.08); }
body.mmh-v2 .mmh-destination__body { padding: 28px; position: relative; z-index: 2; }
body.mmh-v2 .mmh-destination__name {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: clamp(1.6rem, 2.2vw, 2.1rem);
    font-weight: 400;
    letter-spacing: -0.012em;
    line-height: 1.05;
    margin-bottom: 6px;
}
body.mmh-v2 .mmh-destination__count {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 0.74rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--mmh-gold-soft);
    font-weight: 500;
}
body.mmh-v2 .mmh-destination__count::after {
    content: '→';
    font-family: var(--mmh-font-sans);
    font-size: 0.95rem;
    letter-spacing: 0;
    transform: translateX(0);
    transition: transform 320ms var(--mmh-ease-out);
}
body.mmh-v2 .mmh-destination:hover .mmh-destination__count::after { transform: translateX(6px); }

/* ---------- 24.9 Value props — ringed icon, monospace step number ---------- */
.mmh-value-props {
    counter-reset: vpstep;
    gap: 40px 48px;
}
.mmh-value-prop {
    counter-increment: vpstep;
    position: relative;
    padding-top: 22px;
    border-top: 1px solid var(--mmh-line);
}
.mmh-value-prop::before {
    content: counter(vpstep, decimal-leading-zero);
    position: absolute;
    top: -10px;
    right: 0;
    font-family: ui-monospace, 'SF Mono', 'Söhne Mono', 'Consolas', monospace;
    font-size: 0.74rem;
    color: var(--mmh-gold-deep);
    letter-spacing: 0.12em;
    background: var(--mmh-paper);
    padding: 0 8px;
}
.mmh-value-prop__icon {
    width: 48px; height: 48px;
    border-radius: 50%;
    background: var(--mmh-paper-warm);
    color: var(--mmh-ink);
    box-shadow: 0 0 0 1px var(--mmh-line) inset,
                0 0 0 6px color-mix(in oklab, var(--mmh-gold) 8%, transparent);
    margin-bottom: 22px;
}
.mmh-value-prop__icon svg { width: 22px; height: 22px; }
.mmh-value-prop h3 {
    font-size: 1.18rem;
    font-weight: 420;
    letter-spacing: -0.005em;
    color: var(--mmh-ink);
}
.mmh-value-prop p {
    color: var(--mmh-stone-700);
    font-size: 0.94rem;
    line-height: 1.55;
    max-width: 38ch;
}

/* ---------- 24.10 Owner CTA — luxe aurora + gold hairline ---------- */
.mmh-cta {
    border-radius: 24px;
    padding: clamp(40px, 5.4vw, 88px);
    background: var(--mmh-ink);
    border: 1px solid color-mix(in oklab, var(--mmh-gold) 24%, transparent);
}
.mmh-cta::before {
    content: '';
    position: absolute; inset: 0; z-index: -1;
    border-radius: inherit;
    background:
        radial-gradient(60% 50% at 18% 0%, color-mix(in oklab, var(--mmh-primary) 60%, transparent), transparent 60%),
        radial-gradient(70% 60% at 100% 100%, color-mix(in oklab, var(--mmh-gold) 28%, transparent), transparent 60%);
    mix-blend-mode: screen;
    opacity: 0.9;
}
.mmh-cta::after {
    background: linear-gradient(110deg, rgba(17,25,25,0.78) 0%, rgba(17,25,25,0.4) 50%, rgba(17,25,25,0.05) 100%);
}
body.mmh-v2 .mmh-cta h2 {
    font-size: clamp(1.8rem, 3.4vw, 2.8rem);
    font-weight: 360;
    line-height: 1.05;
    letter-spacing: -0.018em;
    max-width: 22ch;
}
body.mmh-v2 .mmh-cta h2 em {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    color: var(--mmh-gold-soft);
}
body.mmh-v2 .mmh-cta p { color: rgba(247,242,232,0.82); }
body.mmh-v2 .mmh-cta .mmh-btn--inverse {
    background: var(--mmh-paper);
    color: var(--mmh-ink);
    box-shadow: 0 8px 24px rgba(0,0,0,0.18);
}

/* ---------- 24.11 Testimonials — pull-quote glyph ---------- */
.mmh-testimonial {
    position: relative;
    border: 1px solid var(--mmh-line);
    background: var(--mmh-paper-warm);
    padding: 36px 32px 28px;
    border-radius: 18px;
    overflow: hidden;
}
.mmh-testimonial::before {
    content: '“';
    position: absolute;
    top: -22px; left: 22px;
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: 7rem;
    line-height: 1;
    color: color-mix(in oklab, var(--mmh-gold) 30%, transparent);
    pointer-events: none;
}
.mmh-testimonial__stars { font-size: 0.82rem; letter-spacing: 0.14em; }
.mmh-testimonial__quote {
    font-family: var(--mmh-font-serif);
    font-size: 1.12rem;
    line-height: 1.55;
    font-weight: 400;
    color: var(--mmh-ink);
    letter-spacing: -0.005em;
}
.mmh-testimonial__attr {
    border-top: 1px solid var(--mmh-line-soft);
    padding-top: 14px;
    font-size: 0.8rem;
    letter-spacing: 0.04em;
}

/* ---------- 24.12 Feature pills (curate your stay) ---------- */
.mmh-feature-card {
    background: var(--mmh-paper);
    border: 1px solid var(--mmh-line);
    border-radius: 14px;
}
.mmh-feature-card:hover {
    background: var(--mmh-ink);
    color: var(--mmh-paper);
    border-color: var(--mmh-ink);
    box-shadow: 0 12px 24px color-mix(in oklab, var(--mmh-ink) 18%, transparent);
}
.mmh-feature-card:hover .mmh-feature-card__icon { color: var(--mmh-gold-soft); }

/* ---------- 24.13 Specials cards ---------- */
.mmh-special-card {
    border-radius: 18px;
    box-shadow: 0 1px 2px color-mix(in oklab, var(--mmh-ink) 6%, transparent),
                0 14px 28px color-mix(in oklab, var(--mmh-ink) 10%, transparent);
}
.mmh-special-card__tag {
    background: var(--mmh-gold);
    border-radius: 999px;
    padding: 5px 14px;
    font-size: 0.66rem;
    letter-spacing: 0.16em;
}
.mmh-special-card__title {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: 1.55rem;
}

/* ---------- 24.14 Footer — gold hairline + refined newsletter ---------- */
.mmh-footer {
    background: linear-gradient(180deg, var(--mmh-ink) 0%, #0b1414 100%);
    padding-top: 96px;
    margin-top: 96px;
    border-top: 1px solid color-mix(in oklab, var(--mmh-gold) 30%, transparent);
    position: relative;
}
.mmh-footer::before {
    content: '';
    position: absolute;
    top: 0; left: 50%; transform: translateX(-50%);
    width: clamp(120px, 30vw, 320px);
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--mmh-gold), transparent);
}
.mmh-footer h4 {
    color: var(--mmh-gold-soft);
    letter-spacing: 0.22em;
    font-weight: 600;
}
.mmh-footer__brand .mmh-header__brand-text {
    font-family: var(--mmh-font-serif);
    font-weight: 350;
    letter-spacing: -0.018em;
}
.mmh-footer__brand p {
    color: rgba(247,242,232,0.72);
    line-height: 1.6;
}
.mmh-newsletter input {
    border-radius: 999px;
    background: rgba(247,242,232,0.06);
    border-color: rgba(247,242,232,0.14);
}
.mmh-newsletter input:focus {
    border-color: var(--mmh-gold-soft);
    background: rgba(247,242,232,0.1);
    box-shadow: 0 0 0 4px color-mix(in oklab, var(--mmh-gold) 15%, transparent);
}
.mmh-newsletter button {
    background: var(--mmh-gold);
    color: var(--mmh-ink);
    font-weight: 600;
}
.mmh-newsletter button:hover { background: var(--mmh-gold-soft); color: var(--mmh-ink); }
.mmh-footer__col a { transition: color var(--mmh-d-fast) var(--mmh-ease), letter-spacing var(--mmh-d-fast) var(--mmh-ease); }
.mmh-footer__col a:hover { color: var(--mmh-gold-soft); letter-spacing: 0.005em; }

/* ---------- 24.15 Mobile-app-feel: sticky thumb-zone CTA ---------- */
.mmh-thumb-cta {
    position: fixed;
    left: 16px;
    right: 16px;
    bottom: max(16px, env(safe-area-inset-bottom));
    z-index: 60;
    display: none;
    background: var(--mmh-ink);
    color: var(--mmh-paper);
    border-radius: 999px;
    padding: 14px 22px;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    box-shadow: 0 1px 0 rgba(255,255,255,0.06) inset,
                0 12px 28px color-mix(in oklab, var(--mmh-ink) 35%, transparent),
                0 28px 56px color-mix(in oklab, var(--mmh-ink) 22%, transparent);
    font-family: var(--mmh-font-sans);
    font-weight: 540;
    letter-spacing: 0.005em;
    font-size: 0.95rem;
    text-decoration: none;
    transform: translateY(120%);
    transition: transform 420ms var(--mmh-ease-out);
}
.mmh-thumb-cta.is-visible { transform: translateY(0); }
.mmh-thumb-cta:hover, .mmh-thumb-cta:active { color: var(--mmh-paper); }
.mmh-thumb-cta__hint {
    font-size: 0.72rem;
    color: var(--mmh-gold-soft);
    letter-spacing: 0.14em;
    text-transform: uppercase;
    font-weight: 600;
    margin-right: 6px;
}
.mmh-thumb-cta__arrow {
    width: 32px; height: 32px;
    border-radius: 999px;
    background: var(--mmh-gold);
    color: var(--mmh-ink);
    display: inline-flex; align-items: center; justify-content: center;
    flex: 0 0 auto;
}
.mmh-thumb-cta__arrow svg { width: 14px; height: 14px; }
@media (max-width: 720px) {
    .mmh-thumb-cta { display: inline-flex; }
}

/* ---------- 24.16 Drawer — softer, slide from right with slight scale ---------- */
.mmh-drawer {
    background: var(--mmh-paper);
    padding-bottom: env(safe-area-inset-bottom);
}
.mmh-drawer__head {
    padding: 20px 24px;
    border-bottom: 1px solid var(--mmh-line-soft);
    padding-top: max(20px, env(safe-area-inset-top));
}
.mmh-drawer__nav a, .mmh-drawer__nav details summary {
    font-family: var(--mmh-font-sans);
    font-weight: 500;
    color: var(--mmh-ink);
    min-height: 48px;
}
.mmh-drawer__nav a:active,
.mmh-drawer__nav details summary:active { background: color-mix(in oklab, var(--mmh-ink) 6%, transparent); }
.mmh-drawer__cta { padding-bottom: max(22px, env(safe-area-inset-bottom)); }

/* ---------- 24.17 Print + reduced-motion + tap targets ---------- */
@media (hover: none) {
    body.mmh-v2 .productListing.card:hover { transform: none; }
    body.mmh-v2 .mmh-destination:hover { transform: none; }
    body.mmh-v2 .productListing .carousel-control-prev,
    body.mmh-v2 .productListing .carousel-control-next { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
    .mmh-hero__cue::after { animation: none; }
    .mmh-thumb-cta { transition: none; }
}
body.mmh-v2 a, body.mmh-v2 button {
    min-height: auto; /* don't force on inline links */
}
body.mmh-v2 .mmh-icon-btn,
body.mmh-v2 .mmh-burger,
body.mmh-v2 .mmh-drawer__close {
    min-width: 44px; min-height: 44px; /* touch target floor */
}

/* ---------- 24.18 Empty state ---------- */
body.mmh-v2 .mmh-empty {
    background: var(--mmh-paper-warm);
    border-color: var(--mmh-line);
    border-radius: 18px;
}

/* ---------- 24.19 Hero search bar mobile placement: lift it just a hair ---------- */
@media (max-width: 720px) {
    .mmh-hero__search { margin: -36px 14px 0; }
    body.mmh-v2 #search-accommodation .homhero-searchbar {
        border-radius: 18px;
        padding: 8px;
    }
    body.mmh-v2 #search-accommodation .form-group.formIcon { padding: 14px 18px; }
    body.mmh-v2 #search-accommodation #searchButton { min-height: 56px; }
    /* Stack search rows for clean tap targets */
    body.mmh-v2 #search-accommodation .quickSearch-fields > div:not(:last-child)::after { display: none; }
}

/* ============================================================
   25. Redesign 2026 — coastal-luxury editorial home page
   New components: editorial hero, hero stat strip, marquee,
   bento destinations with verbatim copy, editorial split,
   stays-by-mood segmented filter, pull-quote, owners CTA with
   step ladder, FAQ accordion, call band.
   ============================================================ */

/* ---------- 25.1 Hero refit — editorial wordmark, search now outside ---------- */
body.mmh-v2 .mmh-hero--editorial {
    min-height: clamp(620px, 88dvh, 880px);
    padding-bottom: 0;
    overflow: visible;
}
body.mmh-v2 .mmh-hero--editorial .mmh-hero__inner {
    padding-bottom: clamp(60px, 8vw, 110px);
}
body.mmh-v2 .mmh-hero--editorial h1 {
    font-size: clamp(2.9rem, 8.4vw, 6.8rem);
    font-weight: 280;
    line-height: 0.94;
    letter-spacing: -0.034em;
    margin-bottom: 28px;
}
body.mmh-v2 .mmh-hero--editorial h1 em {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-weight: 400;
    color: var(--mmh-gold-soft);
    letter-spacing: -0.012em;
    display: inline-block;
    transform: translateY(0.04em);
}
.mmh-hero__cta-row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px 22px;
    margin-top: 40px;
}
body.mmh-v2 .mmh-hero__cta-row .mmh-btn--primary {
    background: var(--mmh-paper);
    color: var(--mmh-ink);
    box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset,
                0 14px 36px color-mix(in oklab, var(--mmh-ink) 32%, transparent);
}
body.mmh-v2 .mmh-hero__cta-row .mmh-btn--primary:hover {
    background: #fff;
    color: var(--mmh-ink);
    transform: translateY(-1px);
}
body.mmh-v2 .mmh-hero__phone {
    color: rgba(247,242,232,0.86);
    border-color: rgba(247,242,232,0.3) !important;
    border-bottom: 1px solid rgba(247,242,232,0.3);
    padding: 4px 0 6px !important;
    font-size: 0.92rem;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.01em;
}
body.mmh-v2 .mmh-hero__phone:hover { color: var(--mmh-gold-soft); }

/* Hero stat strip — sits above the search overlap */
.mmh-hero__stats {
    position: absolute;
    left: 0; right: 0;
    bottom: clamp(18px, 4vw, 36px);
    z-index: 3;
    color: var(--mmh-paper);
    pointer-events: none;
}
.mmh-hero__stats-inner {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: clamp(16px, 3vw, 36px);
    border-top: 1px solid color-mix(in oklab, var(--mmh-gold-soft) 35%, transparent);
    padding-top: 22px;
}
.mmh-hero-stat {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.mmh-hero-stat__num {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: clamp(1.8rem, 3.6vw, 2.6rem);
    line-height: 1;
    color: var(--mmh-gold-soft);
    font-feature-settings: "ss01";
}
.mmh-hero-stat__label {
    font-size: 0.7rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: rgba(247,242,232,0.78);
    font-weight: 500;
}
@media (max-width: 720px) {
    .mmh-hero__stats { display: none; }
}

/* Search card — now under the hero, overlapping by ~half */
.mmh-hero__search {
    position: relative;
    margin-top: clamp(-72px, -7vw, -42px);
    margin-bottom: clamp(40px, 6vw, 80px);
    z-index: 6;
}
.mmh-hero__search .mmh-container { padding-inline: clamp(20px, 4vw, 40px); }
@media (max-width: 720px) {
    .mmh-hero__search { margin-top: -28px; margin-bottom: 28px; }
}

/* ---------- 25.2 Marquee — destination roll ---------- */
.mmh-marquee {
    position: relative;
    background: var(--mmh-ink);
    color: var(--mmh-paper);
    overflow: hidden;
    padding-block: clamp(18px, 2.4vw, 26px);
    border-block: 1px solid color-mix(in oklab, var(--mmh-gold) 22%, transparent);
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
            mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.mmh-marquee__track {
    display: inline-flex;
    align-items: center;
    gap: 28px;
    white-space: nowrap;
    animation: mmh-marquee 64s linear infinite;
    will-change: transform;
}
.mmh-marquee__item {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: clamp(1.4rem, 2.4vw, 2.2rem);
    color: var(--mmh-gold-soft);
    letter-spacing: -0.012em;
    line-height: 1;
}
.mmh-marquee__sep {
    color: color-mix(in oklab, var(--mmh-gold) 50%, transparent);
    font-size: 1.4rem;
}
@keyframes mmh-marquee {
    from { transform: translateX(0); }
    to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
    .mmh-marquee__track { animation: none; }
}

/* ---------- 25.3 Destinations bento — magazine cells with kicker + blurb ---------- */
body.mmh-v2 .mmh-destinations--bento {
    list-style: none;
    padding: 0;
    margin: 0;
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    grid-auto-rows: minmax(320px, auto);
    gap: 18px;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination {
    grid-column: span 6;
    aspect-ratio: auto;
    min-height: 320px;
    border-radius: 20px;
    overflow: hidden;
    position: relative;
    isolation: isolate;
    background: var(--mmh-ink);
    color: var(--mmh-paper);
    display: flex;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination > a {
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    width: 100%;
    height: 100%;
    color: inherit;
    padding: 0;
    text-decoration: none;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination__img {
    position: absolute; inset: 0; z-index: -2;
    background-position: center; background-size: cover;
    transition: transform 1.4s var(--mmh-ease-out);
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination::after {
    content: '';
    position: absolute; inset: 0; z-index: -1;
    background: linear-gradient(180deg, rgba(13,24,32,0) 30%, rgba(13,24,32,0.55) 70%, rgba(13,24,32,0.94) 100%);
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination::before {
    content: '';
    position: absolute; inset: 0; z-index: 1;
    border-radius: inherit;
    border: 1px solid rgba(255,255,255,0.08);
    pointer-events: none;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination:hover { transform: translateY(-6px); }
body.mmh-v2 .mmh-destinations--bento .mmh-destination:hover .mmh-destination__img { transform: scale(1.06); }
body.mmh-v2 .mmh-destinations--bento .mmh-destination__body { padding: 28px 28px 30px; position: relative; z-index: 2; }
body.mmh-v2 .mmh-destinations--bento .mmh-destination__kicker {
    display: inline-block;
    font-family: var(--mmh-font-sans);
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--mmh-gold-soft);
    margin-bottom: 10px;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination__name {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: clamp(1.7rem, 2.6vw, 2.4rem);
    font-weight: 400;
    line-height: 1.02;
    margin: 0 0 8px;
    color: #fff;
    letter-spacing: -0.014em;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination__blurb {
    font-size: 0.92rem;
    line-height: 1.5;
    color: rgba(247,242,232,0.82);
    margin: 0 0 14px;
    max-width: 38ch;
    text-wrap: pretty;
    /* Clamp on smaller cells so the layout stays calm */
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination__count {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 0.74rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: rgba(247,242,232,0.86);
    font-weight: 500;
    border-top: 1px solid color-mix(in oklab, var(--mmh-gold-soft) 22%, transparent);
    padding-top: 12px;
    width: fit-content;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination__count::after {
    content: '→';
    font-family: var(--mmh-font-sans);
    font-size: 0.95rem;
    letter-spacing: 0;
    transition: transform 320ms var(--mmh-ease-out);
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination:hover .mmh-destination__count::after { transform: translateX(6px); }

/* Asymmetric editorial layout on desktop */
@media (min-width: 900px) {
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+1) { grid-column: span 7; min-height: 480px; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+2) { grid-column: span 5; min-height: 480px; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+3) { grid-column: span 4; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+4) { grid-column: span 4; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+5) { grid-column: span 4; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+6) { grid-column: span 5; min-height: 460px; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+7) { grid-column: span 7; min-height: 460px; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+8) { grid-column: span 4; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+9) { grid-column: span 4; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+10){ grid-column: span 4; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+11){ grid-column: span 6; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination:nth-child(12n+0) { grid-column: span 6; }
}

/* Mobile: horizontal snap-scroll carousel — feels like a native iOS app */
@media (max-width: 720px) {
    body.mmh-v2 .mmh-destinations--bento {
        display: flex;
        grid-template-columns: none;
        grid-auto-rows: auto;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
        scroll-padding-inline: 20px;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        margin-inline: -20px;
        padding-inline: 20px;
        gap: 14px;
    }
    body.mmh-v2 .mmh-destinations--bento::-webkit-scrollbar { display: none; }
    body.mmh-v2 .mmh-destinations--bento .mmh-destination {
        flex: 0 0 84%;
        grid-column: auto !important;
        scroll-snap-align: start;
        min-height: 420px;
    }
}

/* ---------- 25.4 Editorial split — magazine feature ---------- */
.mmh-editorial { background: var(--mmh-paper); }
.mmh-editorial__grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(36px, 6vw, 84px);
    align-items: center;
}
@media (max-width: 900px) {
    .mmh-editorial__grid { grid-template-columns: 1fr; }
}
.mmh-editorial__copy h2 {
    font-size: clamp(2rem, 4.4vw, 3.4rem);
    font-weight: 320;
    line-height: 1.02;
    letter-spacing: -0.022em;
    max-width: 16ch;
    margin-bottom: 24px;
}
.mmh-editorial__copy p { color: var(--mmh-stone-700); max-width: 56ch; }
.mmh-editorial__copy .mmh-lead { color: var(--mmh-ink); font-size: 1.12rem; }
.mmh-editorial__list {
    list-style: none;
    padding: 28px 0 0;
    margin: 24px 0 0;
    border-top: 1px solid var(--mmh-line);
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 16px 28px;
}
.mmh-editorial__list li {
    display: flex; align-items: center; gap: 12px;
    color: var(--mmh-ink);
    font-size: 0.94rem;
    font-weight: 500;
}
.mmh-editorial__list svg { width: 18px; height: 18px; color: var(--mmh-gold-deep); flex: 0 0 auto; }
.mmh-editorial__media {
    position: relative;
    aspect-ratio: 4 / 5;
    margin: 0;
}
.mmh-editorial__photo {
    position: absolute;
    border-radius: 18px;
    background-image:
        radial-gradient(80% 60% at 30% 20%, color-mix(in oklab, var(--mmh-primary-light) 38%, transparent), transparent 60%),
        radial-gradient(60% 60% at 80% 90%, color-mix(in oklab, var(--mmh-gold-soft) 24%, transparent), transparent 60%),
        linear-gradient(135deg, var(--mmh-primary-dark), var(--mmh-ink));
    box-shadow: 0 1px 2px color-mix(in oklab, var(--mmh-ink) 6%, transparent),
                0 24px 48px color-mix(in oklab, var(--mmh-ink) 14%, transparent);
}
.mmh-editorial__photo--lg {
    inset: 0 24% 28% 0;
}
.mmh-editorial__photo--sm {
    inset: 32% 0 0 32%;
    border: 1px solid color-mix(in oklab, var(--mmh-gold) 18%, transparent);
}
.mmh-editorial__caption {
    position: absolute;
    bottom: -28px; left: 0;
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: 0.92rem;
    color: var(--mmh-stone-700);
    letter-spacing: 0.005em;
}
@media (max-width: 900px) {
    .mmh-editorial__media { aspect-ratio: 5 / 4; }
}

/* ---------- 25.5 Stays-by-mood — segmented control + panel ---------- */
.mmh-mood {
    background: var(--mmh-paper);
    border-radius: 22px;
    padding: clamp(20px, 3vw, 36px);
    border: 1px solid var(--mmh-line);
    box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset,
                0 14px 28px color-mix(in oklab, var(--mmh-ink) 8%, transparent);
}
.mmh-mood__tabs {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
    margin-bottom: 28px;
    padding: 6px;
    background: color-mix(in oklab, var(--mmh-ink) 5%, transparent);
    border-radius: 999px;
    width: fit-content;
    max-width: 100%;
    overflow-x: auto;
    scrollbar-width: none;
}
.mmh-mood__tabs::-webkit-scrollbar { display: none; }
.mmh-mood__tab {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 18px;
    border: none;
    border-radius: 999px;
    background: transparent;
    color: var(--mmh-stone-700);
    font-family: var(--mmh-font-sans);
    font-size: 0.88rem;
    font-weight: 500;
    letter-spacing: 0.005em;
    cursor: pointer;
    white-space: nowrap;
    transition: background var(--mmh-d-fast) var(--mmh-ease), color var(--mmh-d-fast) var(--mmh-ease), box-shadow var(--mmh-d-fast) var(--mmh-ease);
    min-height: 44px;
}
.mmh-mood__tab:hover { color: var(--mmh-ink); }
.mmh-mood__tab.is-active {
    background: var(--mmh-ink);
    color: var(--mmh-paper);
    box-shadow: 0 1px 0 rgba(255,255,255,0.06) inset,
                0 6px 16px color-mix(in oklab, var(--mmh-ink) 28%, transparent);
}
.mmh-mood__tab svg { color: var(--mmh-gold-deep); }
.mmh-mood__tab.is-active svg { color: var(--mmh-gold-soft); }
.mmh-mood__panels {
    position: relative;
    min-height: 120px;
}
.mmh-mood__panel {
    display: none;
    grid-template-columns: 1fr auto;
    gap: 24px;
    align-items: center;
    animation: mmh-mood-fade 480ms var(--mmh-ease-out) both;
}
.mmh-mood__panel.is-active { display: grid; }
.mmh-mood__copy {
    margin: 0;
    font-family: var(--mmh-font-serif);
    font-size: clamp(1.2rem, 2.2vw, 1.55rem);
    line-height: 1.4;
    color: var(--mmh-ink);
    max-width: 56ch;
    font-weight: 380;
    letter-spacing: -0.005em;
}
@keyframes mmh-mood-fade {
    from { opacity: 0; transform: translateY(6px); }
    to   { opacity: 1; transform: none; }
}
@media (max-width: 720px) {
    .mmh-mood__panel { grid-template-columns: 1fr; }
    .mmh-mood__panel .mmh-btn { width: 100%; justify-content: center; }
}

/* ---------- 25.6 Pull-quote — brand promise ---------- */
.mmh-pullquote-section { padding-block: clamp(80px, 10vw, 140px); background: var(--mmh-paper); }
.mmh-pullquote {
    position: relative;
    max-width: 880px;
    margin: 0 auto;
    text-align: center;
    padding: 0 clamp(20px, 5vw, 60px);
}
.mmh-pullquote__mark {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: clamp(8rem, 18vw, 14rem);
    line-height: 0.6;
    color: color-mix(in oklab, var(--mmh-gold) 22%, transparent);
    display: block;
    margin-bottom: -0.3em;
}
.mmh-pullquote blockquote {
    font-family: var(--mmh-font-serif);
    font-size: clamp(1.5rem, 3.4vw, 2.4rem);
    line-height: 1.25;
    color: var(--mmh-ink);
    font-weight: 360;
    letter-spacing: -0.014em;
    margin: 0 0 24px;
    text-wrap: balance;
}
.mmh-pullquote blockquote em {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    color: var(--mmh-gold-deep);
    letter-spacing: -0.008em;
}
.mmh-pullquote figcaption {
    font-family: var(--mmh-font-sans);
    font-size: 0.78rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--mmh-gold-deep);
    font-weight: 600;
}

/* ---------- 25.7 Owners CTA — step ladder + incentive ---------- */
.mmh-cta--owners {
    grid-template-columns: 1.3fr 1fr;
    align-items: stretch;
    padding: clamp(48px, 6vw, 96px);
    border-radius: 28px;
}
.mmh-cta--owners .mmh-cta__bg {
    position: absolute; inset: 0; z-index: -2;
    background:
        radial-gradient(60% 50% at 18% 0%, color-mix(in oklab, var(--mmh-primary) 65%, transparent), transparent 60%),
        radial-gradient(70% 60% at 100% 100%, color-mix(in oklab, var(--mmh-gold) 32%, transparent), transparent 60%);
    mix-blend-mode: screen;
    opacity: 0.95;
    border-radius: inherit;
}
.mmh-cta--owners::after {
    background: linear-gradient(110deg, rgba(13,24,32,0.82) 0%, rgba(13,24,32,0.45) 50%, rgba(13,24,32,0.05) 100%);
    border-radius: inherit;
}
.mmh-cta--owners .mmh-cta__copy { max-width: 50ch; }
body.mmh-v2 .mmh-cta--owners h2 {
    font-size: clamp(2rem, 4vw, 3.2rem);
    line-height: 1.02;
    font-weight: 340;
    letter-spacing: -0.024em;
    max-width: 14ch;
}
.mmh-cta__steps {
    list-style: none;
    padding: 28px 0 0;
    margin: 24px 0 0;
    border-top: 1px solid color-mix(in oklab, var(--mmh-gold-soft) 28%, transparent);
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 8px 16px;
    counter-reset: ownerstep;
}
.mmh-cta__steps li {
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding-right: 8px;
    color: rgba(247,242,232,0.88);
    font-size: 0.84rem;
    font-weight: 500;
    border-right: 1px solid rgba(247,242,232,0.12);
}
.mmh-cta__steps li:last-child { border-right: none; }
.mmh-cta__steps li span {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-size: 1.4rem;
    color: var(--mmh-gold-soft);
    letter-spacing: -0.005em;
    line-height: 1;
}
.mmh-cta__actions { flex-direction: column; align-items: flex-end; gap: 18px; justify-self: end; }
.mmh-cta__incentive {
    display: inline-block;
    font-family: var(--mmh-font-italic);
    font-style: italic;
    color: var(--mmh-gold-soft);
    font-size: 1.05rem;
    letter-spacing: -0.005em;
    max-width: 260px;
    text-align: right;
}
@media (max-width: 900px) {
    .mmh-cta--owners { grid-template-columns: 1fr; padding: clamp(36px, 7vw, 56px); }
    .mmh-cta__steps { grid-template-columns: repeat(2, 1fr); }
    .mmh-cta__steps li:nth-child(2n) { border-right: none; }
    .mmh-cta__actions { align-items: stretch; justify-self: stretch; }
    .mmh-cta__incentive { text-align: left; max-width: none; }
}

/* ---------- 25.8 FAQ — premium accordion ---------- */
.mmh-faq {
    border-top: 1px solid var(--mmh-line);
}
body.mmh-v2 .mmh-faq__item {
    border-bottom: 1px solid var(--mmh-line);
    padding: 0;
    margin: 0;
}
body.mmh-v2 .mmh-faq__item summary {
    list-style: none;
    cursor: pointer;
    padding: 24px 0;
    font-family: var(--mmh-font-serif);
    font-size: clamp(1.1rem, 1.7vw, 1.32rem);
    font-weight: 380;
    color: var(--mmh-ink);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 28px;
    line-height: 1.3;
    transition: color var(--mmh-d-fast) var(--mmh-ease);
    min-height: 64px;
}
body.mmh-v2 .mmh-faq__item summary::-webkit-details-marker { display: none; }
body.mmh-v2 .mmh-faq__item summary::marker { display: none; content: ''; }
body.mmh-v2 .mmh-faq__item summary:hover { color: var(--mmh-gold-deep); }
body.mmh-v2 .mmh-faq__item .mmh-faq-chevron {
    color: var(--mmh-gold-deep);
    flex: 0 0 auto;
    transition: transform var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 .mmh-faq__item[open] .mmh-faq-chevron { transform: rotate(180deg); }
body.mmh-v2 .mmh-faq__item p {
    margin: 0;
    padding: 0 32px 24px 0;
    color: var(--mmh-stone-700);
    font-size: 1rem;
    line-height: 1.65;
    max-width: 65ch;
}
.mmh-faq__more { margin-top: 28px; }

/* ---------- 25.9 Call band — final close ---------- */
.mmh-callband {
    background: var(--mmh-ink);
    color: var(--mmh-paper);
    padding-block: clamp(40px, 6vw, 64px);
    border-top: 1px solid color-mix(in oklab, var(--mmh-gold) 22%, transparent);
    border-bottom: 1px solid color-mix(in oklab, var(--mmh-gold) 22%, transparent);
}
.mmh-callband__inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    flex-wrap: wrap;
}
.mmh-callband p {
    margin: 0;
    font-family: var(--mmh-font-serif);
    font-size: clamp(1.2rem, 2.4vw, 1.65rem);
    font-weight: 360;
    line-height: 1.3;
    max-width: 32ch;
    color: var(--mmh-paper);
    letter-spacing: -0.01em;
}
body.mmh-v2 .mmh-callband .mmh-btn--inverse {
    background: var(--mmh-paper);
    color: var(--mmh-ink);
    box-shadow: 0 8px 24px rgba(0,0,0,0.22);
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.01em;
}
body.mmh-v2 .mmh-callband .mmh-btn--inverse:hover {
    background: var(--mmh-gold-soft);
    color: var(--mmh-ink);
    transform: translateY(-1px);
}

/* ---------- 25.10 Section type tightening ---------- */
body.mmh-v2 .mmh-section-head h2 em {
    font-family: var(--mmh-font-italic);
    font-style: italic;
    font-weight: 400;
    color: var(--mmh-gold-deep);
    letter-spacing: -0.008em;
}
.mmh-section-head__intro h2 {
    font-size: clamp(2rem, 4.2vw, 3.1rem);
    font-weight: 340;
    line-height: 1.04;
    letter-spacing: -0.022em;
    margin-bottom: 14px;
    text-wrap: balance;
}
.mmh-section-head__intro .mmh-lead { max-width: 56ch; }

/* ---------- 25.11 Mobile fine-tune ---------- */
@media (max-width: 720px) {
    .mmh-marquee { padding-block: 14px; }
    .mmh-marquee__item { font-size: 1.3rem; }
    .mmh-pullquote__mark { font-size: 8rem; }
    .mmh-pullquote blockquote { font-size: 1.45rem; }
    .mmh-callband__inner { flex-direction: column; align-items: stretch; gap: 16px; }
    .mmh-callband__inner .mmh-btn { width: 100%; justify-content: center; }
}

/* ============================================================
   26. Brand palette enforcement (Color Palette Application Spec)
   Maps every section to:
     · #166B71 (--brand-deep)   — surfaces, primary buttons, body links
     · #1CA0B1 (--brand-accent) — link colour, hover, focus, icons
     · #E9A522 (--brand-gold)   — eyebrows, italic display, CTAs, stats
   Neutrals: #F6EFE3 cream / #1A1A1A ink / #ffffff bone.
   No black, near-black surfaces, or warm-orange accents survive past
   this section — every previously-near-black/orange rule is overridden.
   ============================================================ */

/* ---------- 26.1 Body + global links + scrollbar ---------- */
body.mmh-v2 { background: var(--cream); color: var(--ink); }
body.mmh-v2 a {
    color: var(--brand-accent);
    text-decoration: none;
    text-decoration-color: var(--brand-gold);
    text-underline-offset: 3px;
    transition: color var(--mmh-d-fast) var(--mmh-ease),
                text-decoration-color var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 a:visited { color: var(--brand-deep); }
body.mmh-v2 a:hover {
    color: var(--brand-deep);
    text-decoration: underline;
    text-decoration-color: var(--brand-gold);
}
body.mmh-v2 ::selection { background: var(--deep-25); color: var(--ink); }

/* ---------- 26.2 Topbar — deep teal ---------- */
body.mmh-v2 .mmh-topbar {
    background: var(--brand-deep);
    color: rgba(255,255,255,0.78);
    border-bottom: 1px solid color-mix(in srgb, var(--brand-gold) 28%, transparent);
}
body.mmh-v2 .mmh-topbar a:hover { color: var(--brand-gold); }

/* ---------- 26.3 Header — logo, nav, list-with-us pill ---------- */
body.mmh-v2 .mmh-header {
    background: color-mix(in srgb, var(--cream) 86%, transparent);
}
body.mmh-v2 .mmh-header.is-scrolled {
    background: color-mix(in srgb, var(--cream) 96%, transparent);
    border-bottom-color: var(--deep-12);
    box-shadow: 0 1px 0 color-mix(in srgb, var(--brand-gold) 22%, transparent),
                0 12px 24px var(--deep-12);
}
body.mmh-v2 .mmh-header__brand-text { color: var(--ink); }
body.mmh-v2 .mmh-header__brand-text small { color: var(--brand-gold); }
body.mmh-v2 .mmh-nav__item { color: var(--ink); }
body.mmh-v2 .mmh-nav__item:hover {
    background: var(--deep-08);
    color: var(--brand-accent);
}
body.mmh-v2 .mmh-nav__item.current-menu-item,
body.mmh-v2 .mmh-nav__item.current_page_item,
body.mmh-v2 .mmh-nav__item[aria-current="page"],
body.mmh-v2 .mmh-nav__item[aria-expanded="true"] {
    color: var(--brand-accent);
    background: var(--deep-08);
}
body.mmh-v2 .mmh-nav__item:hover::after,
body.mmh-v2 .mmh-nav__item[aria-current="page"]::after {
    content: '';
    position: absolute;
    left: 18px; right: 18px; bottom: 4px;
    height: 1px;
    background: var(--brand-gold);
}
/* "List with us" pill (header CTA) */
body.mmh-v2 .mmh-header__actions a.mmh-btn--primary {
    background: var(--brand-deep);
    color: var(--bone);
}
body.mmh-v2 .mmh-header__actions a.mmh-btn--primary:hover {
    background: var(--brand-accent);
    color: var(--bone);
}

/* ---------- 26.4 Hero — deep radial, gold accents, accent CTA ---------- */
body.mmh-v2 .mmh-hero,
body.mmh-v2 .mmh-hero--editorial { background: var(--brand-deep); }
body.mmh-v2 .mmh-hero__bg {
    background-image:
        linear-gradient(180deg, rgba(11,58,61,0.0) 0%, rgba(11,58,61,0.25) 35%, rgba(11,58,61,0.78) 100%),
        radial-gradient(ellipse at 30% 40%, var(--brand-deep) 0%, #0B3A3D 100%);
}
body.mmh-v2 .mmh-hero__bg::after {
    background:
        radial-gradient(60% 50% at 12% 18%, color-mix(in srgb, var(--brand-accent) 36%, transparent), transparent 60%),
        radial-gradient(50% 40% at 88% 10%, color-mix(in srgb, var(--brand-gold) 22%, transparent), transparent 60%);
    mix-blend-mode: screen;
    opacity: 0.95;
}
body.mmh-v2 .mmh-hero h1 { color: rgba(255,255,255,0.92); }
body.mmh-v2 .mmh-hero h1 em { color: var(--brand-gold); }
body.mmh-v2 .mmh-hero__lead { color: rgba(255,255,255,0.75); }
body.mmh-v2 .mmh-hero__eyebrow,
body.mmh-v2 .mmh-hero .mmh-eyebrow { color: var(--brand-gold); }
body.mmh-v2 .mmh-hero__eyebrow::before,
body.mmh-v2 .mmh-hero .mmh-eyebrow::before { background: var(--brand-gold); }
body.mmh-v2 .mmh-hero__cue { color: rgba(255,255,255,0.6); }
body.mmh-v2 .mmh-hero__cue::after {
    background: linear-gradient(180deg, transparent, var(--brand-gold));
}
/* Stats row */
body.mmh-v2 .mmh-hero__stats { color: var(--bone); }
body.mmh-v2 .mmh-hero__stats-inner {
    border-top: 1px solid color-mix(in srgb, var(--brand-gold) 38%, transparent);
}
body.mmh-v2 .mmh-hero-stat__num { color: var(--brand-gold); }
body.mmh-v2 .mmh-hero-stat__label { color: rgba(255,255,255,0.6); }
/* Find a stay — accent pill */
body.mmh-v2 .mmh-hero__cta-row .mmh-btn--primary {
    background: var(--brand-accent);
    color: var(--bone);
    box-shadow: 0 1px 0 rgba(255,255,255,0.18) inset,
                0 14px 36px rgba(11,58,61,0.45);
}
body.mmh-v2 .mmh-hero__cta-row .mmh-btn--primary:hover {
    background: var(--brand-gold);
    color: var(--brand-deep);
    transform: translateY(-1px);
}
body.mmh-v2 .mmh-hero__phone {
    color: var(--brand-accent);
    border-bottom: 1px solid color-mix(in srgb, var(--brand-accent) 60%, transparent);
}
body.mmh-v2 .mmh-hero__phone:hover {
    color: var(--bone);
    border-bottom-color: var(--brand-gold);
}

/* ---------- 26.5 Search bar (Guesty markup) ---------- */
body.mmh-v2 #search-accommodation .homhero-searchbar {
    background: var(--bone);
    border: 1px solid var(--deep-15);
    box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset,
                0 24px 56px rgba(11,58,61,0.22),
                0 64px 100px rgba(11,58,61,0.14);
}
body.mmh-v2 #search-accommodation .form-group label { color: var(--brand-deep); }
body.mmh-v2 #search-accommodation .form-control { color: var(--ink) !important; }
body.mmh-v2 #search-accommodation .form-control:focus,
body.mmh-v2 #search-accommodation .form-control:focus-visible {
    box-shadow: 0 0 0 2px var(--brand-accent) !important;
    border-radius: 8px;
}
body.mmh-v2 #search-accommodation .quickSearch-fields > div:not(:last-child)::after {
    background: var(--deep-12);
}
body.mmh-v2 #search-accommodation #searchButton {
    background: var(--brand-deep) !important;
    color: var(--bone) !important;
    box-shadow: 0 4px 14px var(--deep-25),
                0 1px 0 rgba(255,255,255,0.08) inset !important;
}
body.mmh-v2 #search-accommodation #searchButton:hover {
    background: var(--brand-accent) !important;
}
body.mmh-v2 #search-accommodation #advancedSearchBtn,
body.mmh-v2 #search-accommodation #advancedSearchModalBtn,
body.mmh-v2 #search-accommodation #clearSearchBtn {
    background: var(--cream) !important;
    color: var(--brand-deep) !important;
    border: 1px solid var(--deep-15) !important;
}
body.mmh-v2 #search-accommodation #advancedSearchBtn:hover,
body.mmh-v2 #search-accommodation #advancedSearchModalBtn:hover,
body.mmh-v2 #search-accommodation #clearSearchBtn:hover {
    background: var(--deep-08) !important;
    border-color: var(--brand-deep) !important;
}
/* daterangepicker — second conflicting block removed; see Section 50 */

/* ---------- 26.6 Marquee — deep strip, gold italics ---------- */
body.mmh-v2 .mmh-marquee {
    background: var(--brand-deep);
    border-block: 1px solid color-mix(in srgb, var(--brand-gold) 28%, transparent);
}
body.mmh-v2 .mmh-marquee__item { color: var(--brand-gold); }
body.mmh-v2 .mmh-marquee__sep { color: rgba(255,255,255,0.4); }

/* ---------- 26.7 Editorial section heads + global eyebrows ---------- */
body.mmh-v2 .mmh-eyebrow {
    color: var(--brand-gold);
    font-weight: 600;
}
body.mmh-v2 .mmh-eyebrow::before { background: var(--brand-gold); }
body.mmh-v2 .mmh-section-head h2 { color: var(--ink); }
body.mmh-v2 .mmh-section-head h2 em,
body.mmh-v2 h1 em, body.mmh-v2 h2 em {
    color: var(--brand-gold);
}
body.mmh-v2 .mmh-section-head .mmh-lead { color: color-mix(in srgb, var(--ink) 70%, transparent); }
/* Empty state (no featured listings yet) */
body.mmh-v2 .mmh-empty {
    background: var(--bone);
    border: 1px solid var(--deep-12);
}
body.mmh-v2 .mmh-empty p { color: color-mix(in srgb, var(--ink) 60%, transparent); }

/* ---------- 26.8 Buttons — kill all near-black, normalise to deep ---------- */
body.mmh-v2 .mmh-btn--primary,
body.mmh-v2 a.mmh-btn--primary {
    background: var(--brand-deep);
    color: var(--bone);
    box-shadow: 0 1px 0 rgba(255,255,255,0.08) inset,
                0 6px 16px var(--deep-25),
                0 14px 28px var(--deep-12);
}
body.mmh-v2 .mmh-btn--primary:hover,
body.mmh-v2 a.mmh-btn--primary:hover {
    background: var(--brand-accent);
    color: var(--bone);
}
body.mmh-v2 .mmh-btn--ghost,
body.mmh-v2 a.mmh-btn--ghost {
    background: transparent;
    color: var(--brand-deep);
    border: 1px solid var(--deep-15);
}
body.mmh-v2 .mmh-btn--ghost:hover,
body.mmh-v2 a.mmh-btn--ghost:hover {
    background: var(--deep-08);
    border-color: var(--brand-deep);
    color: var(--brand-deep);
}
body.mmh-v2 .mmh-btn--inverse,
body.mmh-v2 a.mmh-btn--inverse {
    background: var(--bone);
    color: var(--brand-deep);
}
body.mmh-v2 .mmh-btn--inverse:hover,
body.mmh-v2 a.mmh-btn--inverse:hover {
    background: var(--brand-gold);
    color: var(--brand-deep);
}
body.mmh-v2 .mmh-btn--link,
body.mmh-v2 a.mmh-btn--link {
    color: var(--brand-accent);
    border-bottom-color: var(--brand-accent);
}
body.mmh-v2 .mmh-btn--link:hover,
body.mmh-v2 a.mmh-btn--link:hover {
    color: var(--brand-deep);
    border-bottom-color: var(--brand-gold);
}

/* ---------- 26.9 Destinations bento — deep overlay, gold/teal features ---------- */
body.mmh-v2 .mmh-destinations--bento .mmh-destination {
    background: var(--brand-deep);
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination::after {
    background: linear-gradient(to top,
        var(--brand-deep) 0%,
        color-mix(in srgb, var(--brand-deep) 60%, transparent) 30%,
        transparent 65%);
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination::before {
    border: 1px solid rgba(255,255,255,0.1);
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination__kicker { color: var(--brand-gold); }
body.mmh-v2 .mmh-destinations--bento .mmh-destination__name { color: var(--bone); }
body.mmh-v2 .mmh-destinations--bento .mmh-destination__blurb { color: rgba(255,255,255,0.85); }
body.mmh-v2 .mmh-destinations--bento .mmh-destination__count {
    color: var(--bone);
    border-top: 1px solid color-mix(in srgb, var(--brand-gold) 38%, transparent);
}

/* Solid teal feature card — no image, sits as a magazine pull-tile.
 * Used where the photo is absent (.has-fallback) AND the curated
 * dataset has no real backdrop yet. The first .has-fallback in the
 * grid takes the solid teal treatment. */
body.mmh-v2 .mmh-destinations--bento .mmh-destination.has-fallback:nth-of-type(2) .mmh-destination__img {
    background: var(--brand-deep) !important;
    background-image: none !important;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination.has-fallback:nth-of-type(2)::after {
    background: linear-gradient(to bottom,
        color-mix(in srgb, var(--brand-deep) 0%, transparent) 0%,
        var(--brand-deep) 100%);
}

/* Gold feature card — used sparingly (max one per grid). Replaces
 * the legacy Dolphin-Point orange gradient with palette gold. */
body.mmh-v2 .mmh-destinations--bento .mmh-destination.has-fallback:nth-of-type(5) .mmh-destination__img {
    background: linear-gradient(135deg, var(--brand-gold) 0%, var(--brand-gold-deep) 100%) !important;
    background-image: linear-gradient(135deg, var(--brand-gold) 0%, var(--brand-gold-deep) 100%) !important;
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination.has-fallback:nth-of-type(5)::after {
    background: linear-gradient(to top,
        rgba(11,58,61,0.45) 0%,
        rgba(11,58,61,0.2) 30%,
        transparent 65%);
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination.has-fallback:nth-of-type(5) .mmh-destination__kicker {
    color: var(--bone);
}
body.mmh-v2 .mmh-destinations--bento .mmh-destination.has-fallback:nth-of-type(5) .mmh-destination__blurb {
    color: rgba(255,255,255,0.92);
}

/* ---------- 26.10 Editorial split — feature list, photo block ---------- */
body.mmh-v2 .mmh-editorial { background: var(--cream); }
body.mmh-v2 .mmh-editorial__copy { color: var(--ink); }
body.mmh-v2 .mmh-editorial__copy h2 { color: var(--ink); }
body.mmh-v2 .mmh-editorial__copy h2 em { color: var(--brand-gold); }
body.mmh-v2 .mmh-editorial__copy p { color: color-mix(in srgb, var(--ink) 80%, transparent); }
body.mmh-v2 .mmh-editorial__list { border-top: 1px solid var(--deep-12); }
body.mmh-v2 .mmh-editorial__list li { color: var(--ink); }
body.mmh-v2 .mmh-editorial__list svg { color: var(--brand-accent); }
body.mmh-v2 .mmh-editorial__photo {
    background-image:
        radial-gradient(80% 60% at 30% 20%, color-mix(in srgb, var(--brand-accent) 38%, transparent), transparent 60%),
        radial-gradient(60% 60% at 80% 90%, color-mix(in srgb, var(--brand-gold) 22%, transparent), transparent 60%),
        linear-gradient(135deg, var(--brand-deep) 0%, #0B3A3D 100%);
    border: 1px solid color-mix(in srgb, var(--brand-gold) 18%, transparent);
}
body.mmh-v2 .mmh-editorial__caption { color: color-mix(in srgb, var(--ink) 70%, transparent); }

/* ---------- 26.11 Mood filter pills ---------- */
body.mmh-v2 .mmh-mood {
    background: var(--bone);
    border: 1px solid var(--deep-12);
    box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset,
                0 14px 28px var(--deep-12);
}
body.mmh-v2 .mmh-mood__tabs {
    background: var(--deep-08);
}
body.mmh-v2 .mmh-mood__tab {
    background: transparent;
    color: var(--ink);
}
body.mmh-v2 .mmh-mood__tab svg { color: var(--brand-accent); }
body.mmh-v2 .mmh-mood__tab:hover { color: var(--brand-deep); }
body.mmh-v2 .mmh-mood__tab.is-active {
    background: var(--brand-deep);
    color: var(--bone);
    box-shadow: 0 1px 0 rgba(255,255,255,0.06) inset,
                0 6px 16px var(--deep-25);
}
body.mmh-v2 .mmh-mood__tab.is-active svg { color: var(--brand-gold); }
body.mmh-v2 .mmh-mood__copy { color: var(--ink); }

/* ---------- 26.12 Trust 4-step ---------- */
body.mmh-v2 .mmh-value-prop { border-top: 1px solid var(--deep-12); }
body.mmh-v2 .mmh-value-prop::before {
    color: var(--brand-gold);
    background: var(--cream);
    font-style: italic;
    font-family: var(--mmh-font-italic);
    font-size: 0.94rem;
    letter-spacing: -0.005em;
}
body.mmh-v2 .mmh-value-prop__icon {
    background: var(--deep-08);
    color: var(--brand-accent);
    box-shadow: 0 0 0 1px var(--deep-12) inset,
                0 0 0 6px color-mix(in srgb, var(--brand-gold) 12%, transparent);
}
body.mmh-v2 .mmh-value-prop__icon svg { color: var(--brand-accent); }
body.mmh-v2 .mmh-value-prop h3 { color: var(--ink); }
body.mmh-v2 .mmh-value-prop p { color: color-mix(in srgb, var(--ink) 70%, transparent); }

/* ---------- 26.13 Pull-quote ---------- */
body.mmh-v2 .mmh-pullquote-section { background: var(--cream); }
body.mmh-v2 .mmh-pullquote__mark { color: color-mix(in srgb, var(--brand-gold) 28%, transparent); }
body.mmh-v2 .mmh-pullquote blockquote { color: var(--ink); }
body.mmh-v2 .mmh-pullquote blockquote em { color: var(--brand-gold); }
body.mmh-v2 .mmh-pullquote figcaption { color: var(--brand-gold); }

/* ---------- 26.14 Owner CTA — deep base + gold corner glow ---------- */
body.mmh-v2 .mmh-cta { background: var(--brand-deep); }
body.mmh-v2 .mmh-cta--owners { background: var(--brand-deep); }
body.mmh-v2 .mmh-cta--owners .mmh-cta__bg {
    background:
        radial-gradient(48% 38% at 100% 0%, var(--gold-25), transparent 60%),
        radial-gradient(60% 50% at 0% 100%, color-mix(in srgb, var(--brand-accent) 28%, transparent), transparent 60%);
    mix-blend-mode: normal;
    opacity: 1;
}
body.mmh-v2 .mmh-cta--owners::after { display: none; }
body.mmh-v2 .mmh-cta h2 { color: var(--bone); }
body.mmh-v2 .mmh-cta h2 em { color: var(--brand-gold); }
body.mmh-v2 .mmh-cta p { color: rgba(255,255,255,0.8); }
body.mmh-v2 .mmh-cta .mmh-eyebrow { color: var(--brand-gold) !important; }
body.mmh-v2 .mmh-cta .mmh-eyebrow::before { background: var(--brand-gold); }
body.mmh-v2 .mmh-cta__steps {
    border-top: 1px solid rgba(255,255,255,0.15);
}
body.mmh-v2 .mmh-cta__steps li {
    color: rgba(255,255,255,0.8);
    border-right-color: rgba(255,255,255,0.15);
}
body.mmh-v2 .mmh-cta__steps li span { color: var(--brand-gold); }
body.mmh-v2 .mmh-cta--owners .mmh-btn--inverse {
    background: var(--bone);
    color: var(--brand-deep);
}
body.mmh-v2 .mmh-cta--owners .mmh-btn--inverse:hover {
    background: var(--brand-gold);
    color: var(--brand-deep);
}
/* "How it works" link inside owner CTA — gold underline */
body.mmh-v2 .mmh-cta--owners .mmh-btn--link {
    color: var(--bone) !important;
    border-bottom: 1px solid var(--brand-gold);
}
body.mmh-v2 .mmh-cta--owners .mmh-btn--link:hover {
    color: var(--brand-gold) !important;
    border-bottom-color: var(--brand-gold);
}
body.mmh-v2 .mmh-cta__incentive { color: var(--brand-gold); }

/* ---------- 26.15 FAQ accordion ---------- */
body.mmh-v2 #faq { background: var(--cream); }
body.mmh-v2 .mmh-faq { border-top: 1px solid var(--deep-12); }
body.mmh-v2 .mmh-faq__item { border-bottom: 1px solid var(--deep-12); }
body.mmh-v2 .mmh-faq__item summary { color: var(--ink); }
body.mmh-v2 .mmh-faq__item summary:hover { color: var(--brand-accent); }
body.mmh-v2 .mmh-faq__item[open] summary { color: var(--brand-deep); }
body.mmh-v2 .mmh-faq__item .mmh-faq-chevron { color: var(--brand-accent); }
body.mmh-v2 .mmh-faq__item p { color: color-mix(in srgb, var(--ink) 75%, transparent); }
body.mmh-v2 .mmh-faq__more a { color: var(--brand-accent); }
body.mmh-v2 .mmh-faq__more a:hover { text-decoration-color: var(--brand-gold); }

/* ---------- 26.16 Contact band — deep, white pill ---------- */
body.mmh-v2 .mmh-callband {
    background: var(--brand-deep);
    border-top: 1px solid color-mix(in srgb, var(--brand-gold) 28%, transparent);
    border-bottom: 1px solid color-mix(in srgb, var(--brand-gold) 28%, transparent);
}
body.mmh-v2 .mmh-callband p { color: var(--bone); }
body.mmh-v2 .mmh-callband .mmh-btn--inverse {
    background: var(--bone);
    color: var(--brand-deep);
}
body.mmh-v2 .mmh-callband .mmh-btn--inverse svg { color: var(--brand-deep); }
body.mmh-v2 .mmh-callband .mmh-btn--inverse:hover {
    background: var(--brand-gold);
    color: var(--brand-deep);
}

/* ---------- 26.17 Footer — deep base, gold subtle ---------- */
body.mmh-v2 .mmh-footer {
    background: var(--brand-deep);
    border-top: 1px solid color-mix(in srgb, var(--brand-gold) 36%, transparent);
}
body.mmh-v2 .mmh-footer::before {
    background: linear-gradient(90deg, transparent, var(--brand-gold), transparent);
}
body.mmh-v2 .mmh-footer h4 { color: var(--brand-gold); }
body.mmh-v2 .mmh-footer__brand .mmh-header__brand-text { color: var(--bone); }
body.mmh-v2 .mmh-footer__brand .mmh-header__brand-text small { color: var(--brand-gold); }
body.mmh-v2 .mmh-footer__brand p { color: rgba(255,255,255,0.7); }
body.mmh-v2 .mmh-footer__col a {
    color: rgba(255,255,255,0.75);
    text-decoration-color: transparent;
}
body.mmh-v2 .mmh-footer__col a:hover {
    color: var(--brand-accent);
    text-decoration: underline;
    text-decoration-color: var(--brand-gold);
}
body.mmh-v2 .mmh-newsletter input {
    background: rgba(255,255,255,0.08);
    border: 1px solid rgba(255,255,255,0.16);
    color: var(--bone);
}
body.mmh-v2 .mmh-newsletter input::placeholder { color: rgba(255,255,255,0.45); }
body.mmh-v2 .mmh-newsletter input:focus {
    border-color: var(--brand-accent);
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--brand-accent) 20%, transparent);
    background: rgba(255,255,255,0.12);
}
body.mmh-v2 .mmh-newsletter button {
    background: var(--brand-gold);
    color: var(--brand-deep);
    font-weight: 600;
}
body.mmh-v2 .mmh-newsletter button:hover {
    background: var(--bone);
    color: var(--brand-deep);
}
body.mmh-v2 .mmh-footer__bar {
    color: rgba(255,255,255,0.5);
    border-top-color: rgba(255,255,255,0.1);
}
body.mmh-v2 .mmh-footer__legal a { color: rgba(255,255,255,0.5); }
body.mmh-v2 .mmh-footer__legal a:hover { color: var(--brand-accent); }
body.mmh-v2 .mmh-footer__socials a {
    background: rgba(255,255,255,0.08);
    color: rgba(255,255,255,0.78);
}
body.mmh-v2 .mmh-footer__socials a:hover {
    background: var(--brand-gold);
    color: var(--brand-deep);
}

/* ---------- 26.18 Sticky thumb-zone CTA — palette only ---------- */
body.mmh-v2 .mmh-thumb-cta {
    background: var(--brand-deep);
    color: var(--bone);
    box-shadow: 0 1px 0 rgba(255,255,255,0.06) inset,
                0 12px 28px var(--deep-25),
                0 28px 56px var(--deep-12);
}
body.mmh-v2 .mmh-thumb-cta:hover { color: var(--bone); }
body.mmh-v2 .mmh-thumb-cta__hint { color: var(--brand-gold); }
body.mmh-v2 .mmh-thumb-cta__arrow {
    background: var(--brand-gold);
    color: var(--brand-deep);
}

/* ---------- 26.19 Drawer + burger (mobile chrome on cream) ---------- */
body.mmh-v2 .mmh-drawer { background: var(--cream); }
body.mmh-v2 .mmh-drawer__head { border-bottom: 1px solid var(--deep-12); }
body.mmh-v2 .mmh-drawer__nav a,
body.mmh-v2 .mmh-drawer__nav details summary { color: var(--ink); }
body.mmh-v2 .mmh-drawer__nav a:active,
body.mmh-v2 .mmh-drawer__nav details summary:active { background: var(--deep-08); }
body.mmh-v2 .mmh-drawer__nav details a { color: color-mix(in srgb, var(--ink) 72%, transparent); }
body.mmh-v2 .mmh-drawer__close { background: var(--deep-08); color: var(--ink); }
body.mmh-v2 button.mmh-burger,
body.mmh-v2 .mmh-burger {
    background: var(--bone) !important;
    border: 1px solid var(--deep-12) !important;
    color: var(--ink);
}
body.mmh-v2 .mmh-burger > span,
body.mmh-v2 .mmh-burger > span::before,
body.mmh-v2 .mmh-burger > span::after { background: var(--brand-deep) !important; }
body.mmh-v2 .mmh-icon-btn { color: var(--ink); }
body.mmh-v2 .mmh-icon-btn:hover { background: var(--deep-08); border-color: var(--deep-12); }
body.mmh-v2 .mmh-icon-btn__count {
    background: var(--brand-gold);
    color: var(--brand-deep);
}

/* ---------- 26.20 Misc — chips, listing toolbar, cards on cream ---------- */
body.mmh-v2 .mmh-chip {
    background: var(--bone);
    border-color: var(--deep-12);
    color: var(--ink);
}
body.mmh-v2 .mmh-chip:hover { border-color: var(--brand-deep); color: var(--brand-deep); }
body.mmh-v2 .mmh-chip.is-active {
    background: var(--brand-deep);
    color: var(--bone);
    border-color: var(--brand-deep);
}
body.mmh-v2 .mmh-feature-card {
    background: var(--bone);
    border-color: var(--deep-12);
}
body.mmh-v2 .mmh-feature-card:hover {
    background: var(--brand-deep);
    color: var(--bone);
    border-color: var(--brand-deep);
}
body.mmh-v2 .mmh-feature-card:hover .mmh-feature-card__icon { color: var(--brand-gold); }
body.mmh-v2 .mmh-special-card__tag { background: var(--brand-gold); color: var(--brand-deep); }
body.mmh-v2 .mmh-testimonial {
    background: var(--bone);
    border: 1px solid var(--deep-12);
}
body.mmh-v2 .mmh-testimonial::before { color: color-mix(in srgb, var(--brand-gold) 35%, transparent); }
body.mmh-v2 .mmh-testimonial__stars { color: var(--brand-gold); }
body.mmh-v2 .mmh-testimonial__quote { color: var(--ink); }
body.mmh-v2 .mmh-testimonial__attr { color: color-mix(in srgb, var(--ink) 70%, transparent); border-top-color: var(--deep-12); }
body.mmh-v2 .mmh-section--sand {
    background:
        radial-gradient(80% 60% at 0% 0%, color-mix(in srgb, var(--brand-gold) 7%, transparent), transparent 70%),
        var(--mmh-paper-warm);
}

/* ---------- 26.21 Property card chrome (preserve current behaviour) ---------- */
body.mmh-v2 .productListing .suburb {
    background: color-mix(in srgb, var(--bone) 90%, transparent);
    color: var(--ink);
    border: 1px solid color-mix(in srgb, var(--brand-gold) 16%, transparent);
}
body.mmh-v2 .productListing .listingTitle { color: var(--ink) !important; }
body.mmh-v2 .productListing .listingPrice { color: var(--ink); border-top: 1px solid var(--deep-12); }
body.mmh-v2 .productListing .reviews .stars { color: var(--brand-gold); }
body.mmh-v2 .productListing .shortlist-container.shortlisted i,
body.mmh-v2 .productListing .shortlist-container.is-shortlisted i { color: var(--brand-gold); }

/* ---------- 26.22 Focus rings — universal accent ring ---------- */
body.mmh-v2 a:focus-visible,
body.mmh-v2 button:focus-visible,
body.mmh-v2 [tabindex]:focus-visible {
    outline: 2px solid var(--brand-accent);
    outline-offset: 3px;
}

/* ---------- 26.23 Search bar mobile fine-tune (stays palette) ---------- */
@media (max-width: 720px) {
    body.mmh-v2 #search-accommodation .quickSearch-fields > div:not(:last-child)::after {
        display: none;
    }
}

/* ============================================================
   27. A Perfect Stay-inspired editorial refinements
   Adapts the "section markers + Fragment Mono caption + larger
   variable display + uppercase tracked CTAs" vocabulary from the
   inspiration sheet, without breaking the locked palette.
   ============================================================ */

:root {
    --mmh-font-mono: 'Fragment Mono', ui-monospace, 'SF Mono', 'Söhne Mono', Consolas, monospace;
}

/* ---------- 27.1 Subtle global film grain ---------- */
body.mmh-v2::before {
    content: '';
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 200;
    opacity: 0.035;
    mix-blend-mode: overlay;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/></filter><rect width='240' height='240' filter='url(%23n)' opacity='1'/></svg>");
}
@media (prefers-reduced-motion: reduce) {
    body.mmh-v2::before { display: none; }
}

/* ---------- 27.2 Eyebrow with mono Roman-numeral marker ---------- */
body.mmh-v2 .mmh-eyebrow {
    font-family: var(--mmh-font-mono);
    font-size: 0.7rem;
    letter-spacing: 0.22em;
    font-weight: 400;
    text-transform: uppercase;
    color: var(--brand-gold);
    align-items: center;
    gap: 14px;
}
body.mmh-v2 .mmh-eyebrow::before {
    /* Hide the legacy hairline rule — the marker now carries that role */
    display: none;
}
body.mmh-v2 .mmh-eyebrow__marker {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    font-family: var(--mmh-font-mono);
    color: var(--brand-gold);
    letter-spacing: 0.18em;
    min-width: 2.5em;
}
body.mmh-v2 .mmh-eyebrow__marker::after {
    content: '';
    width: 28px;
    height: 1px;
    background: var(--brand-gold);
    opacity: 0.7;
}

/* On dark surfaces the marker pales slightly so headings read first */
body.mmh-v2 .mmh-hero .mmh-eyebrow,
body.mmh-v2 .mmh-cta .mmh-eyebrow,
body.mmh-v2 .mmh-callband .mmh-eyebrow,
body.mmh-v2 .mmh-footer .mmh-eyebrow {
    color: var(--brand-gold);
}
body.mmh-v2 .mmh-hero .mmh-eyebrow__marker,
body.mmh-v2 .mmh-cta .mmh-eyebrow__marker { color: var(--brand-gold); }
body.mmh-v2 .mmh-cta .mmh-eyebrow__marker::after { background: var(--brand-gold); opacity: 0.85; }

/* ---------- 27.3 Editorial display — Fraunces variable opsz ---------- */
body.mmh-v2 h1, body.mmh-v2 h2 {
    font-variation-settings: 'opsz' 144, 'SOFT' 50;
}
body.mmh-v2 .mmh-hero--editorial h1 {
    font-variation-settings: 'opsz' 144, 'SOFT' 100;
    font-weight: 320;
    line-height: 0.94;
}
body.mmh-v2 .mmh-section-head__intro h2 {
    font-variation-settings: 'opsz' 96, 'SOFT' 50;
    font-weight: 380;
    line-height: 1;
}
body.mmh-v2 .mmh-pullquote blockquote {
    font-variation-settings: 'opsz' 96, 'SOFT' 60;
}
body.mmh-v2 .mmh-callband p {
    font-variation-settings: 'opsz' 60, 'SOFT' 50;
}

/* ---------- 27.4 Link-arrow — uppercase mono CTA used in section heads ---------- */
body.mmh-v2 .mmh-link-arrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-family: var(--mmh-font-mono);
    font-size: 0.74rem;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    color: var(--brand-accent);
    text-decoration: none;
    transition: gap 220ms var(--mmh-ease-out), color var(--mmh-d-fast) var(--mmh-ease);
    white-space: nowrap;
    padding: 10px 0;
}
body.mmh-v2 .mmh-link-arrow::after {
    content: '→';
    transition: transform 220ms var(--mmh-ease-out);
    font-size: 1.05rem;
    letter-spacing: 0;
}
body.mmh-v2 .mmh-link-arrow:hover {
    gap: 18px;
    color: var(--brand-deep);
    text-decoration-color: var(--brand-gold);
}
body.mmh-v2 .mmh-link-arrow:hover::after { transform: translateX(2px); }

/* ---------- 27.5 Hero scroll cue — mono caps with brass line ---------- */
body.mmh-v2 .mmh-hero__cue {
    font-family: var(--mmh-font-mono);
    font-size: 0.66rem;
    letter-spacing: 0.32em;
    text-transform: uppercase;
    color: rgba(255,255,255,0.65);
}

/* ---------- 27.6 Stat numerals — Fraunces italic + opsz lift ---------- */
body.mmh-v2 .mmh-hero-stat__num {
    font-variation-settings: 'opsz' 72;
    font-weight: 350;
}
body.mmh-v2 .mmh-hero-stat__label {
    font-family: var(--mmh-font-mono);
    font-size: 0.66rem;
    letter-spacing: 0.24em;
}

/* ---------- 27.7 Buttons — let primary CTAs read as branded but
                add a tracked uppercase variant for editorial CTAs ---------- */
body.mmh-v2 .mmh-btn--editorial,
body.mmh-v2 a.mmh-btn--editorial {
    font-family: var(--mmh-font-sans);
    text-transform: uppercase;
    font-size: 0.78rem;
    letter-spacing: 0.16em;
    font-weight: 500;
    padding: 14px 26px;
}

/* ---------- 27.8 Owner CTA step list — mono numerals ---------- */
body.mmh-v2 .mmh-cta__steps li span {
    font-family: var(--mmh-font-mono);
    font-style: normal;
    font-size: 0.78rem;
    letter-spacing: 0.18em;
    color: var(--brand-gold);
    line-height: 1;
    padding-bottom: 4px;
}
body.mmh-v2 .mmh-cta__steps li {
    font-family: var(--mmh-font-sans);
    font-size: 0.84rem;
    letter-spacing: 0.005em;
}

/* ---------- 27.9 Hero photo presentation — softer underlay
   so the actual image lifts from the gradient instead of fighting
   the brand-deep radial. The gradient still ships as fallback. ---------- */
body.mmh-v2 .mmh-hero--editorial .mmh-hero__bg {
    background-size: cover;
    background-position: center 35%;
    background-repeat: no-repeat;
}
body.mmh-v2 .mmh-hero--editorial::before {
    content: '';
    position: absolute; inset: 0; z-index: 0;
    background: linear-gradient(
        160deg,
        color-mix(in srgb, var(--brand-deep) 55%, transparent) 0%,
        rgba(11,58,61,0.25) 35%,
        rgba(11,58,61,0.85) 100%
    );
    pointer-events: none;
}

/* ---------- 27.10 Pullquote — refined caption marker ---------- */
body.mmh-v2 .mmh-pullquote figcaption {
    font-family: var(--mmh-font-mono);
    font-size: 0.66rem;
    letter-spacing: 0.28em;
}
body.mmh-v2 .mmh-pullquote figcaption::before {
    content: '';
    display: inline-block;
    width: 28px; height: 1px;
    background: var(--brand-gold);
    margin-right: 14px;
    vertical-align: middle;
    transform: translateY(-3px);
}

/* ---------- 27.11 Marquee — slimmer, mono separators ---------- */
body.mmh-v2 .mmh-marquee__sep {
    font-family: var(--mmh-font-mono);
    font-size: 1rem;
}

/* ---------- 27.12 Section head spacing for the new marker rhythm ---------- */
body.mmh-v2 .mmh-section-head__intro .mmh-eyebrow { margin-bottom: 18px; }
body.mmh-v2 .mmh-section-head__cta.mmh-link-arrow { padding-bottom: 18px; }

/* ---------- 27.13 Mobile fine-tune ---------- */
@media (max-width: 720px) {
    body.mmh-v2 .mmh-eyebrow { font-size: 0.66rem; gap: 10px; }
    body.mmh-v2 .mmh-eyebrow__marker { gap: 8px; min-width: 2em; }
    body.mmh-v2 .mmh-eyebrow__marker::after { width: 18px; }
    body.mmh-v2 .mmh-link-arrow { font-size: 0.7rem; }
}

/* ============================================================
   28. Home page — full-bleed hero + reveal-on-scroll chrome
   --------------------------------------------------------------
   On the home page only: the hero photo covers the top of the
   viewport, with the chrome (topbar + header) hidden until the
   visitor begins scrolling. When .is-scrolled is set on the
   header (by mmh-ui.js), the chrome slides in as a dark glass
   bar. Other pages keep the existing solid white header.
   ============================================================ */
body.home .mmh-topbar {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 81;
    transform: translateY(-100%);
    opacity: 0;
    pointer-events: none;
    transition: transform 460ms var(--mmh-ease-out, cubic-bezier(.32,.72,0,1)),
                opacity 320ms var(--mmh-ease);
    background: rgba(13, 24, 32, 0.86);
    backdrop-filter: saturate(160%) blur(18px);
    -webkit-backdrop-filter: saturate(160%) blur(18px);
    border-bottom: 1px solid rgba(255,255,255,0.06);
}
body.home .mmh-header {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 80;
    background: transparent !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border-bottom: 1px solid transparent !important;
    box-shadow: none !important;
    transform: translateY(-100%);
    opacity: 0;
    pointer-events: none;
    transition: transform 520ms var(--mmh-ease-out, cubic-bezier(.32,.72,0,1)),
                opacity 360ms var(--mmh-ease),
                background 320ms var(--mmh-ease);
}
/* Once scroll passes the threshold, slide the chrome in as a dark glass bar */
body.home .mmh-topbar.is-revealed,
body.home .mmh-header.is-revealed {
    transform: translateY(0);
    opacity: 1;
    pointer-events: auto;
}
body.home .mmh-topbar.is-revealed { top: 0; }
body.home .mmh-header.is-revealed {
    background: rgba(13, 24, 32, 0.82) !important;
    backdrop-filter: saturate(160%) blur(20px) !important;
    -webkit-backdrop-filter: saturate(160%) blur(20px) !important;
    border-bottom: 1px solid rgba(255,255,255,0.08) !important;
    box-shadow: 0 10px 30px -18px rgba(0,0,0,0.65) !important;
}
/* Push the topbar below the WP admin bar like the rest of the site */
html.admin-bar body.home.mmh-v2 .mmh-topbar.is-revealed,
html.admin-bar body.home.mmh-v2 .mmh-topbar { top: 32px; }
@media screen and (max-width: 782px) {
    html.admin-bar body.home.mmh-v2 .mmh-topbar.is-revealed,
    html.admin-bar body.home.mmh-v2 .mmh-topbar { top: 46px; }
}
/* Header sits directly under the topbar when both are revealed */
body.home .mmh-header.is-revealed {
    top: 0;
}
body.home .mmh-topbar.is-revealed ~ #masthead.mmh-header.is-revealed,
body.home .mmh-topbar.is-revealed + #masthead.mmh-header.is-revealed {
    /* No structural offset needed — topbar collapses on mobile and
       on desktop the header sits at the top of the viewport with a
       subtle scrim, so we keep both pinned to the same top edge. */
}

/* Brand + nav text recoloured to read on the dark glass */
body.home .mmh-header .mmh-header__brand-text { color: var(--mmh-paper, #f7f2e8); }
body.home .mmh-header .mmh-header__brand-text small { color: var(--mmh-gold-soft, #e6c889); }
body.home .mmh-header .mmh-nav__item { color: rgba(247,242,232,0.92); }
body.home .mmh-header .mmh-nav__item:hover,
body.home .mmh-header .mmh-nav__item[aria-expanded="true"] {
    background: rgba(255,255,255,0.08);
    color: #fff;
}
body.home .mmh-header .mmh-icon-btn { color: var(--mmh-paper, #f7f2e8); }
body.home .mmh-header .mmh-icon-btn:hover {
    background: rgba(255,255,255,0.08);
    border-color: rgba(255,255,255,0.18);
}
/* Burger sits on the dark chrome */
body.home.mmh-v2 .mmh-burger {
    background: rgba(255,255,255,0.06) !important;
    border-color: rgba(255,255,255,0.18) !important;
}
body.home.mmh-v2 .mmh-burger > span,
body.home.mmh-v2 .mmh-burger > span::before,
body.home.mmh-v2 .mmh-burger > span::after {
    background: var(--mmh-paper, #f7f2e8) !important;
}
/* Primary "List with us" pill on the dark chrome */
body.home .mmh-header__actions .mmh-btn--primary {
    background: var(--mmh-paper, #f7f2e8);
    color: var(--mmh-ink, #0d1820);
    box-shadow: 0 1px 0 rgba(255,255,255,0.4) inset;
}
body.home .mmh-header__actions .mmh-btn--primary:hover {
    background: #fff;
    color: var(--mmh-ink, #0d1820);
}

/* Hero: full-bleed, content hugs the bottom — a-perfect-stay rhythm */
body.home .mmh-hero {
    min-height: 100dvh;
    margin-top: 0;
    padding-top: env(safe-area-inset-top, 0px);
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
}
body.home.mmh-v2 .mmh-hero--editorial {
    min-height: 100dvh;
}
body.home .mmh-hero__inner {
    padding-top: clamp(64px, 14vh, 180px);
    padding-bottom: clamp(160px, 18vh, 240px);
    margin-top: auto;
}
/* Push the stats row up so the search card has room to overlap below */
body.home .mmh-hero__stats {
    bottom: clamp(72px, 9vh, 120px);
}
/* Scroll cue tucked just above the search overlap on desktop */
body.home .mmh-hero__cue { bottom: clamp(20px, 3vh, 32px); }

/* Tablet / desktop: keep the search card overlapping the hero edge */
@media (min-width: 721px) {
    body.home .mmh-hero__search { margin-top: clamp(-90px, -8vw, -54px); }
}

/* Hide the WP admin bar offset bump when the hero is in fullscreen mode —
   the chrome slides in below the admin bar via the .is-revealed states. */
html.admin-bar body.home.mmh-v2 .mmh-header { top: 32px; }
@media screen and (max-width: 782px) {
    html.admin-bar body.home.mmh-v2 .mmh-header { top: 46px; }
}

/* Reduced-motion: skip the slide, just fade. */
@media (prefers-reduced-motion: reduce) {
    body.home .mmh-header,
    body.home .mmh-topbar {
        transition: opacity 200ms linear;
        transform: none;
    }
}

/* ============================================================
   29. Destination archive — listing-card + grid fixes
   --------------------------------------------------------------
   Targets /destinations/<term>/ (taxonomy = suburbs/features). The
   parent's listings-templates.css and block-search-results.css set
   conflicting values that broke the cards. We fix them rather than
   forking the entire template stack.

   - .suburb pill stretched top-to-bottom of the photo because parent
     CSS sets `bottom: 15px` while v2 set `top: 14px` without
     clearing it. With border-radius:999px it rendered as a giant
     white oval covering ~85% of the thumbnail. Reset bottom.
   - .listingTitle clamped at 2 lines was producing mid-word "..." on
     long property names; bump to 3 and balance the wrap.
   - The results count, map column width, and card grid responsiveness
     also needed polish. See Section 5/7 of the spec.
   ============================================================ */

/* 29.1 Suburb pill — small pill, top-left only, no stretching */
body.mmh-v2 .productListing .suburb,
body.mmh-v2 .infobubble .suburb {
    bottom: auto !important;
    right: auto !important;
    width: auto !important;
    height: auto !important;
    max-width: calc(100% - 64px);  /* leave room for shortlist button */
    font-family: var(--mmh-font-sans);
    font-size: 0.7rem !important;
    line-height: 1.2 !important;
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
}
body.mmh-v2 .productListing .listingSuburb,
body.mmh-v2 .infobubble .listingSuburb {
    color: inherit;
    background: transparent;
    padding: 0;
}

/* 29.2 Card titles — allow three lines, balanced wrap */
body.mmh-v2 .productListing .listingTitle {
    -webkit-line-clamp: 3 !important;
    line-clamp: 3 !important;
    min-height: calc(1.25em * 2);   /* keeps card heights uniform */
    text-wrap: balance;
    word-break: normal;
    overflow-wrap: anywhere;        /* break very long words at any char rather than mid-word ellipsis */
}

/* 29.3 Metric row — fixed height so all cards line up */
body.mmh-v2 .productListing .stats {
    flex-wrap: nowrap !important;
    min-height: 22px;
    overflow: hidden;
}
body.mmh-v2 .productListing .count {
    flex-wrap: nowrap !important;
    gap: 4px;
}
body.mmh-v2 .productListing .propField {
    margin-right: 10px !important;
    white-space: nowrap;
}
/* Use the standard FA 5 "bath" glyph (\f2cd), not the heavy variant which
   isn't included in the free icon set. */
body.mmh-v2 .productListing .fieldBathrooms::before { content: '\f2cd'; }

/* 29.4 Make the whole card a clickable region with a clear hover */
body.mmh-v2 .productListing.card { cursor: pointer; }
body.mmh-v2 .productListing .card-img-top::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(13,24,32,0) 60%, rgba(13,24,32,0.18) 100%);
    pointer-events: none;
    opacity: 0.9;
    transition: opacity var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 .productListing.card:hover .card-img-top::after { opacity: 0.55; }
body.mmh-v2 .productListing.card:focus-within {
    outline: 2px solid var(--mmh-primary);
    outline-offset: 4px;
    border-radius: var(--mmh-radius-md);
}

/* 29.5 Price row — AUD currency, lighter "from" */
body.mmh-v2 .productListing .listingPrice .price-amount::before {
    content: 'A';
    font-size: 0.78em;
    margin-right: 1px;
    color: var(--mmh-stone-500);
    vertical-align: 0.06em;
}

/* 29.6 Results header — proper hierarchy, divider, destination name */
body.mmh-v2.archive .entry-title {
    font-family: var(--mmh-font-serif);
    font-weight: 360;
    font-size: clamp(2.25rem, 5vw, 3.5rem) !important;
    letter-spacing: -0.02em;
    line-height: 1.05;
    color: var(--mmh-stone-900);
}
body.mmh-v2 .resultsCount {
    font-family: var(--mmh-font-sans);
    font-size: 0.78rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--mmh-stone-700);
    padding: 14px 0;
    border-bottom: 1px solid var(--mmh-sand-200);
    margin-bottom: 22px;
    font-weight: 500;
}
body.mmh-v2 .searchMessage {
    margin-bottom: 8px !important;
}

/* 29.7 Map column — constrained so the listings grid can breathe */
@media (min-width: 992px) {
    body.mmh-v2 #searchResults.has-map .searchRow {
        gap: 32px;
    }
    body.mmh-v2 #searchResults.has-map .map_col {
        flex: 0 0 36% !important;
        max-width: 36% !important;
    }
    body.mmh-v2 #searchResults.has-map .search_col {
        flex: 1 1 64% !important;
        max-width: 64% !important;
    }
    body.mmh-v2 #searchResults.has-map .listing-wrapper.col {
        flex: 0 0 50% !important;
        max-width: 50% !important;
    }
    body.mmh-v2 #searchResults.has-map .stickyMap {
        position: sticky;
        top: calc(var(--mmh-header-h, 84px) + 16px);
        max-height: calc(100dvh - var(--mmh-header-h, 84px) - 32px);
    }
    body.mmh-v2 #searchResults.has-map #map-display {
        height: calc(100dvh - var(--mmh-header-h, 84px) - 48px);
    }
}
@media (min-width: 1280px) {
    body.mmh-v2 #searchResults.has-map .listing-wrapper.col {
        flex: 0 0 33.333% !important;
        max-width: 33.333% !important;
    }
}
@media (min-width: 1600px) {
    body.mmh-v2 #searchResults.has-map .listing-wrapper.col {
        flex: 0 0 33.333% !important;
        max-width: 33.333% !important;
    }
}

/* 29.8 Friendly empty/error state shared with mmh-empty.
   When listings come back zero, parent JS prints "No Listings found..."
   inside `.row.content`. Pretty it up to match the rest of the design. */
body.mmh-v2 #searchResults .no-results {
    background: var(--mmh-sand-50);
    border-radius: var(--mmh-radius-md);
    padding: 48px 24px;
    color: var(--mmh-stone-700);
    font-size: 0.95rem;
}
body.mmh-v2 #searchResults .no-results .button.clearSearch {
    display: inline-block;
    margin-top: 16px;
    background: var(--mmh-primary);
    color: #fff;
    padding: 10px 22px;
    border-radius: var(--mmh-radius-pill);
    text-decoration: none;
    font-weight: 500;
    cursor: pointer;
}

/* ============================================================
   30. Sitewide palette — off-white with sage alternate
   --------------------------------------------------------------
   Old paper was warm cream (#F6EFE3), which the QA spec flagged as
   dated. Move primary surface to a cooler off-white (#f7f8f5) and
   add a pale-sage alternate (#eef2ef) for banded sections. Cards
   stay pure white. Teal + gold accents are untouched.

   --mmh-paper is the token most of the v2 system reads from. To
   keep dark surfaces (hero, footer, drawer) untouched, we don't
   change --mmh-ink. Aliases that piggyback on --mmh-paper
   (--cream) get retuned too so the parent theme's Bootstrap base
   inherits the new neutral.
   ============================================================ */
:root,
body.mmh-v2 {
    --mmh-paper:        #f7f8f5;   /* primary page surface */
    --mmh-paper-warm:   #ffffff;   /* card surface — pure white now */
    --mmh-paper-alt:    #eef2ef;   /* pale sage alternate for banded sections */
    --cream:            #f7f8f5;   /* legacy alias kept in sync */
    --mmh-bg:           #ffffff;
    --mmh-bg-alt:       #eef2ef;
    --mmh-sand-50:      #eef2ef;   /* used by .mmh-section--sand banding */
}

body.mmh-v2 { background: var(--mmh-paper); color: var(--mmh-stone-800); }
body.mmh-v2 #page,
body.mmh-v2 #content,
body.mmh-v2 main { background: transparent; }

/* Banded sections — alternate sage backdrop */
body.mmh-v2 .mmh-section--sand { background: var(--mmh-paper-alt); }

/* ============================================================
   31. Global UI fixes (Spec §2)
   ============================================================ */

/* 31.1 Top-of-page sliver gap — twenty-twenty-one base adds
       padding/margin on #page above the first section.
       Reset on every page; home keeps its overlay header. */
body.mmh-v2 #page { margin: 0 !important; padding: 0 !important; }
body.mmh-v2 #content { padding-top: 0 !important; margin-top: 0 !important; }
body.mmh-v2 main#main { margin-top: 0 !important; padding-top: 0 !important; }
body.mmh-v2 .entry-header,
body.mmh-v2 .archive .page-header { padding-top: 0; margin-top: 0; }

/* 31.2 Sticky header on non-home pages must always be opaque so
       page content can never bleed through it. The home-page reveal
       behaviour (Section 28) is preserved by the body.home scoping
       there — this rule only applies to non-home pages.
       NOTE: no `padding-top` on #content — the sticky header sits in
       normal flow and already occupies its 84px naturally. Adding
       padding-top here creates a visible gap below the chrome. */
body.mmh-v2:not(.home) .mmh-header {
    background: rgba(255,255,255,0.94) !important;
    backdrop-filter: saturate(160%) blur(18px) !important;
    -webkit-backdrop-filter: saturate(160%) blur(18px) !important;
    border-bottom: 1px solid var(--mmh-sand-200) !important;
}
body.mmh-v2:not(.home) .mmh-header.is-scrolled {
    box-shadow: 0 1px 0 rgba(0,0,0,0.04), 0 10px 24px -18px rgba(0,0,0,0.18) !important;
}

/* 31.3 Button consistency — collapse the black-pill variants.
       Two main offenders:
        (a) WP Gutenberg core block buttons (.wp-block-button__link /
            .wp-element-button) painted near-black by the parent base.
        (b) Bootstrap's .btn.btn-primary which the parent's enquiry
            shortcode injects.
       Both get repainted to the teal pill. The `.send-enquiry` button
       injected by mmh-ui.js also picks this up. */
body.mmh-v2 .wp-block-button__link,
body.mmh-v2 .wp-element-button,
body.mmh-v2 .wp-block-button .wp-block-button__link,
body.mmh-v2 button.btn.btn-primary,
body.mmh-v2 .btn.btn-primary,
body.mmh-v2 input[type="submit"].btn-primary,
body.mmh-v2 .send-enquiry,
body.mmh-v2 input[type="submit"]:not(.mmh-btn) {
    background: var(--mmh-primary) !important;
    color: #fff !important;
    border: 1px solid transparent !important;
    border-radius: var(--mmh-radius-pill) !important;
    padding: 14px 28px !important;
    font-family: var(--mmh-font-sans) !important;
    font-size: 0.9rem !important;
    font-weight: 500 !important;
    letter-spacing: 0.01em !important;
    line-height: 1 !important;
    text-decoration: none !important;
    box-shadow: 0 1px 0 rgba(0,0,0,0.04), 0 6px 18px rgba(15,102,98,0.18) !important;
    transition: background var(--mmh-d-base) var(--mmh-ease), box-shadow var(--mmh-d-base) var(--mmh-ease), transform var(--mmh-d-fast) var(--mmh-ease) !important;
    cursor: pointer;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 10px;
}
body.mmh-v2 .wp-block-button__link:hover,
body.mmh-v2 .wp-element-button:hover,
body.mmh-v2 button.btn.btn-primary:hover,
body.mmh-v2 .btn.btn-primary:hover,
body.mmh-v2 .send-enquiry:hover,
body.mmh-v2 input[type="submit"]:not(.mmh-btn):hover {
    background: var(--mmh-primary-dark) !important;
    color: #fff !important;
    box-shadow: 0 1px 0 rgba(0,0,0,0.06), 0 10px 24px rgba(15,102,98,0.22) !important;
}
body.mmh-v2 .wp-block-button.is-style-outline .wp-block-button__link {
    background: transparent !important;
    color: var(--mmh-primary) !important;
    border: 1px solid var(--mmh-primary) !important;
}
body.mmh-v2 .wp-block-button.is-style-outline .wp-block-button__link:hover {
    background: var(--mmh-primary) !important;
    color: #fff !important;
}

/* 31.4 Active page indicator in the top nav */
body.mmh-v2 .mmh-nav .current-menu-item > a,
body.mmh-v2 .mmh-nav .current_page_item > a,
body.mmh-v2 .mmh-nav-wp .current-menu-item > a,
body.mmh-v2 .mmh-nav-wp .current_page_item > a,
body.mmh-v2 .mmh-nav__item[aria-current="page"] {
    color: var(--mmh-primary) !important;
    position: relative;
}
body.mmh-v2 .mmh-nav .current-menu-item > a::after,
body.mmh-v2 .mmh-nav .current_page_item > a::after,
body.mmh-v2 .mmh-nav-wp .current-menu-item > a::after,
body.mmh-v2 .mmh-nav-wp .current_page_item > a::after {
    content: '';
    position: absolute;
    left: 18px; right: 18px; bottom: 4px;
    height: 2px;
    background: var(--mmh-gold);
    border-radius: 2px;
}

/* 31.5 Marquee contrast — text was light gold on cream. With the
       cooler palette the contrast was failing WCAG AA. Marquee is
       on a dark band already (--mmh-ink) but force a stronger gold
       on light variants. */
body.mmh-v2 .mmh-marquee:not([data-variant="dark"]) .mmh-marquee__item {
    color: var(--mmh-gold-deep);
    font-weight: 500;
}

/* ============================================================
   32. Home page hero polish (Spec §3)
   ============================================================ */

/* 32.1 Center hero copy (eyebrow, heading, lead, CTAs) */
body.home .mmh-hero__inner { justify-items: center; text-align: center; }
body.home .mmh-hero__copy {
    text-align: center;
    margin: 0 auto;
    max-width: 920px;
    display: flex;
    flex-direction: column;
    align-items: center;
}
body.home .mmh-hero__copy .mmh-eyebrow,
body.home .mmh-hero__copy .mmh-hero__eyebrow {
    justify-content: center;
}
body.home .mmh-hero__lead {
    max-width: 60ch;
    margin-left: auto;
    margin-right: auto;
}
body.home .mmh-hero__cta-row {
    justify-content: center;
    align-items: center;
}

/* 32.2 CTA row + stats row overlap.
       The CTA row was crashing into the absolutely-positioned stats
       strip on shorter viewports. Add hard breathing room and stack
       the stats *after* the CTA on small screens. */
body.home .mmh-hero__inner {
    padding-bottom: clamp(220px, 22vh, 320px) !important;
}
body.home .mmh-hero__stats {
    bottom: clamp(28px, 4vh, 56px) !important;
}
body.home .mmh-hero__stats-inner {
    text-align: left;
}
@media (max-width: 720px) {
    body.home .mmh-hero { min-height: auto; }
    body.home .mmh-hero__inner { padding-bottom: 80px !important; }
    body.home .mmh-hero__stats {
        position: static !important;
        margin-top: 32px;
        padding-inline: var(--gutter, 1.25rem);
        display: block !important;   /* override the desktop-only hide rule */
    }
    body.home .mmh-hero__stats-inner {
        grid-template-columns: repeat(2, 1fr) !important;
        gap: 18px !important;
    }
}

/* 32.3 Destination card eyebrow legibility — the small uppercase
       kickers were getting lost on photo backgrounds. Add the same
       subtle dark gradient at the top that already exists at the
       bottom of the card, so the kicker has contrast. */
body.mmh-v2 .mmh-destination__img::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(13,24,32,0.32) 0%, rgba(13,24,32,0) 30%, rgba(13,24,32,0) 70%, rgba(13,24,32,0.55) 100%);
    pointer-events: none;
}
body.mmh-v2 .mmh-destination__kicker {
    color: #fff !important;
    text-shadow: 0 1px 2px rgba(0,0,0,0.4);
    font-weight: 600;
    letter-spacing: 0.18em;
}

/* ============================================================
   33. Per-page polish (Spec §4, §5, §6, §7, §8, §9, §10)
   ============================================================ */

/* 33.1 Content width — collapse the squished narrow column on
       List With Us, Journal, Owner Portal, Specials, Contact. The
       parent's twenty-twenty-one base sets a narrow `entry-content`
       width that breaks text every 2-3 words. */
body.mmh-v2.page .entry-content,
body.mmh-v2.single-post .entry-content,
body.mmh-v2.archive:not(.tax-suburbs):not(.tax-features) .entry-content,
body.mmh-v2.blog .entry-content {
    max-width: min(1100px, 92vw) !important;
    margin-inline: auto !important;
}
body.mmh-v2.page .entry-content > *:not(.alignwide):not(.alignfull),
body.mmh-v2.single-post .entry-content > *:not(.alignwide):not(.alignfull) {
    max-width: 760px;
    margin-inline: auto;
}
body.mmh-v2.page .entry-content .wp-block-columns { max-width: 1100px; margin-inline: auto; }

/* 33.2 Heading hierarchy — page title above H1 is redundant.
       Most pages use Gutenberg with their own H1 inside the entry
       content. Hide twenty-twenty-one's auto-rendered entry-title
       so the in-content H1 wins. */
body.mmh-v2.page .entry-header .entry-title,
body.mmh-v2.single-post .entry-header .entry-title { display: none; }

/* But on archive pages (the destination listings page) we DO need
   the heading — keep it. */
body.mmh-v2.archive .page-header .archive-title,
body.mmh-v2.archive .entry-title { display: block; }

/* 33.3 Block-button group — center, give spacing. */
body.mmh-v2 .wp-block-buttons { gap: 12px; margin: 24px 0; }
body.mmh-v2 .wp-block-buttons.is-content-justification-center { justify-content: center; }

/* 33.4 FAQ accordion polish (Spec §7) */
body.mmh-v2 .entry-content details {
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    margin: 0 0 12px;
    background: #fff;
    transition: border-color var(--mmh-d-fast) var(--mmh-ease), box-shadow var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 .entry-content details:hover {
    border-color: var(--mmh-primary-tint);
    box-shadow: 0 4px 12px -6px rgba(15,102,98,0.16);
}
body.mmh-v2 .entry-content details[open] {
    border-color: var(--mmh-primary);
}
body.mmh-v2 .entry-content details > summary {
    list-style: none;
    cursor: pointer;
    padding: 18px 22px;
    font-weight: 500;
    font-size: 1.02rem;
    color: var(--mmh-stone-900);
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
}
body.mmh-v2 .entry-content details > summary::-webkit-details-marker { display: none; }
body.mmh-v2 .entry-content details > *:not(summary) {
    padding: 0 22px 18px;
    color: var(--mmh-stone-700);
}
body.mmh-v2 .entry-content details .mmh-faq-chevron {
    transition: transform var(--mmh-d-base) var(--mmh-ease);
    color: var(--mmh-primary);
}
body.mmh-v2 .entry-content details[open] .mmh-faq-chevron { transform: rotate(180deg); }

/* 33.5 Form labels & inputs (Spec §5.1, §5.2, §5.4) — most of the
       parent's enquiry form uses placeholder-only inputs. We can't
       inject `<label>` from CSS but we can make the placeholders
       behave as persistent labels by promoting the placeholder text
       on focus + giving inputs proper sizing + dark border. */
body.mmh-v2 .entry-content input[type="text"],
body.mmh-v2 .entry-content input[type="email"],
body.mmh-v2 .entry-content input[type="tel"],
body.mmh-v2 .entry-content input[type="date"],
body.mmh-v2 .entry-content input[type="number"],
body.mmh-v2 .entry-content select,
body.mmh-v2 .entry-content textarea,
body.mmh-v2 form .form-control,
body.mmh-v2 form input.form-control,
body.mmh-v2 form select.form-control,
body.mmh-v2 form textarea.form-control {
    width: 100%;
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-sm);
    padding: 14px 16px;
    font-family: var(--mmh-font-sans);
    font-size: 16px;   /* 16px to prevent iOS Safari zoom on focus */
    color: var(--mmh-stone-900);
    min-height: 48px;
    line-height: 1.4;
    transition: border-color var(--mmh-d-fast) var(--mmh-ease), box-shadow var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 .entry-content input:focus,
body.mmh-v2 .entry-content select:focus,
body.mmh-v2 .entry-content textarea:focus,
body.mmh-v2 form .form-control:focus {
    border-color: var(--mmh-primary);
    box-shadow: 0 0 0 3px rgba(15,102,98,0.15);
    outline: none;
}
body.mmh-v2 .entry-content textarea { min-height: 120px; padding-top: 14px; }
body.mmh-v2 .entry-content label,
body.mmh-v2 form label {
    display: block;
    font-family: var(--mmh-font-sans);
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    color: var(--mmh-stone-700);
    margin-bottom: 6px;
}
body.mmh-v2 form .form-group { margin-bottom: 16px; }
body.mmh-v2 form input[type="date"] { color-scheme: light; }

/* 33.6 Hide phantom owner-portal placeholder block content and the
       inline help text small font fix */
body.mmh-v2.page .has-small-font-size { color: var(--mmh-stone-500); }

/* 33.7 Footer parity — ensure the destination column always lists
       all 6+ regions (already injected by template-parts). Just
       harmonise spacing here so it looks right after the palette
       change. */
body.mmh-v2 .mmh-footer { background: var(--mmh-stone-900); color: #fff; }
body.mmh-v2 .mmh-footer h4 { color: var(--mmh-gold-soft); letter-spacing: 0.18em; text-transform: uppercase; font-size: 0.72rem; }

/* ============================================================
   34. Listings toolbar — sort, filter, show-more, map hover
   --------------------------------------------------------------
   Visual styling for the JS module in /assets/js/mmh-listings.js.
   ============================================================ */
body.mmh-v2 .mmh-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: end;
    justify-content: space-between;
    gap: 16px 24px;
    padding: 14px 0 20px;
    margin-bottom: 14px;
    border-bottom: 1px solid var(--mmh-sand-200);
}
body.mmh-v2 .mmh-toolbar__count {
    font-family: var(--mmh-font-sans);
    font-size: 0.92rem;
    color: var(--mmh-stone-700);
    letter-spacing: 0.005em;
}
body.mmh-v2 .mmh-toolbar__count strong {
    color: var(--mmh-stone-900);
    font-weight: 600;
}
body.mmh-v2 .mmh-toolbar__controls {
    display: flex;
    flex-wrap: wrap;
    align-items: end;
    gap: 12px 16px;
}
body.mmh-v2 .mmh-toolbar__field {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 160px;
}
body.mmh-v2 .mmh-toolbar__field > span {
    font-family: var(--mmh-font-sans);
    font-size: 0.66rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--mmh-stone-700);
    font-weight: 600;
}
body.mmh-v2 .mmh-toolbar__field select {
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-sm);
    padding: 10px 32px 10px 14px;
    font-family: var(--mmh-font-sans);
    font-size: 0.92rem;
    color: var(--mmh-stone-900);
    min-height: 44px;
    appearance: none;
    -webkit-appearance: none;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none'><path d='M1 1l4 4 4-4' stroke='%23364444' stroke-width='1.5' stroke-linecap='round'/></svg>");
    background-repeat: no-repeat;
    background-position: right 12px center;
    transition: border-color var(--mmh-d-fast) var(--mmh-ease), box-shadow var(--mmh-d-fast) var(--mmh-ease);
    cursor: pointer;
}
body.mmh-v2 .mmh-toolbar__field select:focus {
    border-color: var(--mmh-primary);
    box-shadow: 0 0 0 3px rgba(15,102,98,0.15);
    outline: none;
}
body.mmh-v2 .mmh-toolbar__clear {
    background: transparent;
    border: 1px solid var(--mmh-sand-200);
    color: var(--mmh-stone-700);
    border-radius: var(--mmh-radius-pill);
    padding: 10px 18px;
    font-family: var(--mmh-font-sans);
    font-size: 0.85rem;
    font-weight: 500;
    cursor: pointer;
    min-height: 44px;
    transition: all var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 .mmh-toolbar__clear:hover {
    border-color: var(--mmh-primary);
    color: var(--mmh-primary);
}

/* Show-more button — sits below the grid, centered */
body.mmh-v2 .mmh-toolbar__showmore {
    display: flex;
    margin: 32px auto 8px;
    min-width: 200px;
    justify-content: center;
}

/* Map-marker hover highlight on cards */
body.mmh-v2 .listing-wrapper.is-marker-hover .productListing.card,
body.mmh-v2 .listing-wrapper.is-flashed .productListing.card {
    transform: translateY(-4px);
    box-shadow: 0 16px 40px -16px rgba(15,102,98,0.32) !important;
    outline: 2px solid var(--mmh-primary);
    outline-offset: 2px;
}
@keyframes mmh-flash {
    0%   { box-shadow: 0 0 0 0 rgba(15,102,98,0.5); }
    100% { box-shadow: 0 0 0 12px rgba(15,102,98,0); }
}
body.mmh-v2 .listing-wrapper.is-flashed .productListing.card {
    animation: mmh-flash 1.2s var(--mmh-ease);
}

/* Card keyboard focus ring */
body.mmh-v2 .listing-wrapper[tabindex]:focus-visible {
    outline: 3px solid var(--mmh-primary);
    outline-offset: 4px;
    border-radius: var(--mmh-radius-md);
}

/* Stack the toolbar nicely on phones */
@media (max-width: 720px) {
    body.mmh-v2 .mmh-toolbar { align-items: stretch; }
    body.mmh-v2 .mmh-toolbar__controls { width: 100%; }
    body.mmh-v2 .mmh-toolbar__field { flex: 1 1 calc(50% - 8px); min-width: 0; }
    body.mmh-v2 .mmh-toolbar__clear { flex: 1 1 100%; }
}

/* ============================================================
   35. Round 2 audit fixes — global, home, archive, property
   --------------------------------------------------------------
   Items reported in the 2026-05-11 full-site audit. Some earlier
   fixes regressed (wrong selector, partial opacity); some are net
   new (property detail page §11, EDIT pill leak §1.4).
   ============================================================ */

/* 35.1 Sticky header — fully opaque, no bleed-through (§1.1).
       Previous rule used rgba(...,0.94) which let dark content
       ghost through on some scroll positions. Lock to solid. */
body.mmh-v2:not(.home) .mmh-header,
body.mmh-v2:not(.home) .mmh-header.is-scrolled {
    background: #ffffff !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    border-bottom: 1px solid var(--mmh-sand-200) !important;
    box-shadow: 0 1px 0 rgba(0,0,0,0.03), 0 6px 18px -12px rgba(0,0,0,0.18) !important;
}

/* 35.2 Hide duplicate page header (§1.3).
       Pages use TWO H1s: twenty-twenty-one's .entry-header > h1
       *and* the Gutenberg H1 inside the entry-content. Previous
       selector targeted .entry-title (Twenty-Twenty-One uses a plain
       <h1>). Drop the outer entry-header entirely on pages and
       single posts so the Gutenberg in-content H1 wins. */
body.mmh-v2.page > #page .entry-header,
body.mmh-v2.single-post > #page .entry-header,
body.mmh-v2.page .site-content > #primary .entry-header,
body.mmh-v2.single-post .site-content > #primary .entry-header,
body.mmh-v2.page-template-default .entry-header,
body.mmh-v2.blog .entry-header {
    display: none !important;
}
/* On archives we DO need the title (e.g. "Mollymook") — keep it. */
body.mmh-v2.archive .entry-header { display: block; }

/* 35.3 Active page nav highlight (§1.2).
       Works with .is-active / aria-current emitted by the fallback
       nav and with WP nav-menu's .current-menu-item. */
body.mmh-v2 .mmh-nav .mmh-nav__item.is-active,
body.mmh-v2 .mmh-nav .mmh-nav__item[aria-current="page"],
body.mmh-v2 .mmh-nav .current-menu-item > a,
body.mmh-v2 .mmh-nav .current_page_item > a,
body.mmh-v2 .mmh-nav .current-menu-parent > a,
body.mmh-v2 .mmh-nav .current-menu-ancestor > a {
    color: var(--mmh-primary) !important;
}
body.mmh-v2 .mmh-nav .mmh-nav__item.is-active::after,
body.mmh-v2 .mmh-nav .mmh-nav__item[aria-current="page"]::after,
body.mmh-v2 .mmh-nav .current-menu-item > a::after,
body.mmh-v2 .mmh-nav .current_page_item > a::after {
    content: '';
    position: absolute;
    left: 18px; right: 18px; bottom: 4px;
    height: 2px;
    background: var(--mmh-gold);
    border-radius: 2px;
}

/* 35.4 Hide stray "EDIT" / post-edit pill from public view (§1.4).
       Belt-and-braces: hide anything that renders a public "Edit"
       button outside the admin bar. */
body.mmh-v2 .post-edit-link,
body.mmh-v2 .entry-footer .edit-link,
body.mmh-v2 .gutenberg-edit-button,
body.mmh-v2 [data-edit-pill],
body.mmh-v2 .entry-meta .post-edit-link,
body.mmh-v2 .entry-content .post-edit-link { display: none !important; }

/* 35.5 Home page — §2 polish */

/* 2.1 SCROLL cue position — move above the stats so they don't collide */
body.home .mmh-hero__cue {
    bottom: auto !important;
    top: auto;
    /* Place between CTAs and stats. Use absolute positioning at the
       midpoint of the empty zone above the stats. */
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: clamp(170px, 22vh, 240px) !important;
    z-index: 4;
}

/* 2.2 Hero stats divider — span full container width */
body.home .mmh-hero__stats-inner {
    border-top: 1px solid color-mix(in oklab, var(--mmh-gold-soft) 35%, transparent) !important;
    padding-top: 22px !important;
}
body.home .mmh-hero__stats { left: 0; right: 0; }

/* 2.3 Editor's Picks carousel arrows — bump contrast + sit OUTSIDE the cards */
body.mmh-v2 .featuredListings .slick-prev,
body.mmh-v2 .featuredListings .slick-next {
    background: #ffffff !important;
    border-radius: 50% !important;
    width: 44px !important;
    height: 44px !important;
    box-shadow: 0 6px 20px -8px rgba(0,0,0,0.22), 0 1px 0 rgba(0,0,0,0.04) !important;
    z-index: 5;
}
body.mmh-v2 .featuredListings .slick-prev { left: -22px !important; }
body.mmh-v2 .featuredListings .slick-next { right: -22px !important; }
body.mmh-v2 .featuredListings .slick-prev::before,
body.mmh-v2 .featuredListings .slick-next::before {
    color: var(--mmh-stone-900) !important;
    opacity: 1 !important;
    font-size: 22px !important;
    font-weight: 600;
}
body.mmh-v2 .featuredListings { padding-inline: 28px; }
@media (max-width: 720px) {
    body.mmh-v2 .featuredListings .slick-prev,
    body.mmh-v2 .featuredListings .slick-next { width: 36px !important; height: 36px !important; }
    body.mmh-v2 .featuredListings .slick-prev { left: -8px !important; }
    body.mmh-v2 .featuredListings .slick-next { right: -8px !important; }
}

/* 2.4 "Honest South Coast" — make the photo placeholders look intentional
       even when no image has been uploaded. Add a soft tinted gradient + a
       small caption hint so they don't read as "broken". */
body.mmh-v2 .mmh-editorial__photo:not([style*="background-image"]),
body.mmh-v2 .mmh-editorial__photo[style=""] {
    background:
        linear-gradient(135deg,
            color-mix(in oklab, var(--mmh-primary) 18%, var(--mmh-paper-alt)) 0%,
            color-mix(in oklab, var(--mmh-primary) 35%, var(--mmh-paper-alt)) 100%) !important;
    position: relative;
}
body.mmh-v2 .mmh-editorial__photo:not([style*="background-image"])::after,
body.mmh-v2 .mmh-editorial__photo[style=""]::after {
    content: 'Photography coming soon';
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    color: rgba(255,255,255,0.84);
    font-family: var(--mmh-font-sans);
    font-size: 0.74rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    text-align: center;
    padding: 16px;
}

/* 2.5 Mood filter chips — clear active state */
body.mmh-v2 .mmh-mood__tab {
    background: transparent;
    border: 1px solid var(--mmh-sand-200);
    color: var(--mmh-stone-700);
    transition: all var(--mmh-d-fast) var(--mmh-ease);
    cursor: pointer;
}
body.mmh-v2 .mmh-mood__tab:hover {
    border-color: var(--mmh-primary);
    color: var(--mmh-primary);
    background: var(--mmh-primary-tint);
}
body.mmh-v2 .mmh-mood__tab.is-active {
    background: var(--mmh-primary) !important;
    border-color: var(--mmh-primary) !important;
    color: #fff !important;
    box-shadow: 0 4px 14px -4px rgba(15,102,98,0.32);
}
body.mmh-v2 .mmh-mood__tab.is-active svg { color: #fff; }

/* 2.7 Trust cards — collapse the duplicate "01" + "1." numbering. The
       inline numeral inside each value-prop is the duplicate; hide it
       and keep only the eyebrow number. */
body.mmh-v2 .mmh-value-prop > .mmh-value-prop__num,
body.mmh-v2 .mmh-value-prop .mmh-value-prop__count,
body.mmh-v2 .mmh-value-prop h3::before {
    display: none !important;
}

/* 2.10 FAQ accordion — open question stays in dark grey, only the
        chevron rotates. Body text colour was already consistent. */
body.mmh-v2 .mmh-faq__item[open] > summary,
body.mmh-v2 .entry-content details[open] > summary {
    color: var(--mmh-stone-900) !important;
    background: var(--mmh-paper-alt);
}

/* 35.6 Destination archive — §10 fixes */

/* 10.4 Hide the redundant suburb pill on taxonomy archives (visitor
        is already on that destination page). On the full-search and
        featured-listings pages, keep it. */
body.mmh-v2.tax-suburbs .productListing .suburb,
body.mmh-v2.tax-suburbs .infobubble .suburb { display: none !important; }

/* 10.6 Card title — fixed three-line minimum so the grid lines up */
body.mmh-v2 .productListing .listingTitle {
    min-height: calc(1.25em * 3) !important;
}

/* 10.2 Toolbar — kill the legacy List/Grid toggle so all controls live
        in our toolbar */
body.mmh-v2 #searchResults .MapChartToggle,
body.mmh-v2 #searchResults .searchMessage > .MapChartToggle { display: none !important; }
/* Also tighten the message row so the count + toolbar form a single
   visual block. */
body.mmh-v2 #searchResults .searchMessage {
    border-bottom: none !important;
    padding-bottom: 0 !important;
    margin-bottom: 0 !important;
}

/* 35.7 Property detail page — §11 polish.
        These rules target the parent's single-listings.php markup
        (.singleListing wrappers + .field* classes). */

/* 11.2 Title underline removal */
body.mmh-v2.single-listings h1,
body.mmh-v2.single-listings .entry-title,
body.mmh-v2.single-listings .listing-header h1,
body.mmh-v2 .singleListing h1,
body.mmh-v2.mmh-v2-property .listing-header h1,
body.mmh-v2.mmh-v2-property h1 {
    text-decoration: none !important;
    border-bottom: none !important;
    font-family: var(--mmh-font-serif);
    font-weight: 360;
    letter-spacing: -0.018em;
    line-height: 1.05;
    color: var(--mmh-stone-900);
    font-size: clamp(2rem, 4.5vw, 3.2rem);
}
body.mmh-v2.single-listings h1 a,
body.mmh-v2.mmh-v2-property h1 a { text-decoration: none !important; }

/* 11.3 Meta info row — split with breathing room + larger icons */
body.mmh-v2.single-listings .facilities-wrapper .d-flex,
body.mmh-v2.mmh-v2-property .facilities-wrapper .d-flex {
    gap: 18px 28px !important;
    margin: 16px 0 24px !important;
}
body.mmh-v2.single-listings .facilities-wrapper .propField,
body.mmh-v2.mmh-v2-property .facilities-wrapper .propField {
    display: inline-flex !important;
    align-items: center !important;
    gap: 8px !important;
    color: var(--mmh-stone-700) !important;
    font-size: 0.95rem !important;
    background: transparent !important;
    padding: 0 !important;
    margin: 0 !important;
}
body.mmh-v2.single-listings .facilities-wrapper .propField > i,
body.mmh-v2.mmh-v2-property .facilities-wrapper .propField > i {
    color: var(--mmh-primary) !important;
    font-size: 16px !important;
    width: 18px;
    text-align: center;
    margin-right: 4px;
}

/* 11.4 Surface a visible price near the title. Most listing pages
        render a hidden .listingPrice or a fieldPrice block — promote
        whichever exists. */
body.mmh-v2.single-listings .listingPrice,
body.mmh-v2.mmh-v2-property .listingPrice,
body.mmh-v2.single-listings .fieldPrice,
body.mmh-v2.mmh-v2-property .fieldPrice {
    font-family: var(--mmh-font-sans) !important;
    font-size: 1.25rem !important;
    color: var(--mmh-stone-900) !important;
    font-weight: 600 !important;
    margin: 12px 0 !important;
    display: inline-block !important;
}

/* 11.5 Features grid — the parent renders <img> icons via
        homhero/icons/*.jpg with no width constraint. Cap and grid them. */
body.mmh-v2 #listingFeatures .main-features ul,
body.mmh-v2 .single-listing-block .main-features ul {
    list-style: none !important;
    padding: 0 !important;
    margin: 0 !important;
    display: grid !important;
    grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)) !important;
    gap: 16px 12px !important;
}
body.mmh-v2 #listingFeatures .main-features li,
body.mmh-v2 .single-listing-block .main-features li {
    list-style: none !important;
    text-align: center;
    font-size: 0.78rem !important;
    color: var(--mmh-stone-700);
    line-height: 1.3;
    padding: 14px 8px !important;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    background: #fff;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
}
body.mmh-v2 #listingFeatures .main-features li img,
body.mmh-v2 .single-listing-block .main-features li img {
    width: 28px !important;
    height: 28px !important;
    object-fit: contain !important;
    display: block;
}
body.mmh-v2 #listingFeatures .main-features li span,
body.mmh-v2 .single-listing-block .main-features li span {
    display: block;
    overflow: visible;
}

/* 11.6 Amenities — grid columns instead of one giant flat bulleted
        column, with progressive disclosure if >12 items. */
body.mmh-v2 .amenities .field-content ul {
    list-style: none !important;
    padding: 0 !important;
    margin: 0 !important;
    display: grid !important;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)) !important;
    gap: 6px 24px !important;
}
body.mmh-v2 .amenities .field-content ul li {
    list-style: none !important;
    padding: 6px 0 6px 22px !important;
    color: var(--mmh-stone-700);
    font-size: 0.95rem;
    position: relative;
    border-bottom: 1px solid var(--mmh-sand-100);
}
body.mmh-v2 .amenities .field-content ul li::before {
    content: '\f00c'; /* FA check */
    font-family: 'Font Awesome 5 Free';
    font-weight: 900;
    color: var(--mmh-primary);
    position: absolute;
    left: 0;
    top: 7px;
    font-size: 12px;
}
/* Progressive disclosure: cap to 12 items, reveal rest via JS-toggled
   class. CSS-only fallback: just always show. */
body.mmh-v2 .amenities.is-collapsed .field-content ul li:nth-child(n+13) { display: none; }

/* 11.7 Description sub-sections — the parent inlines them as
        <p><em>Location</em></p> etc. Promote inline-italic mini-headings
        that sit alone in their paragraph by giving them an H3 look. */
body.mmh-v2 .description p > em:only-child,
body.mmh-v2 .single-listing-block p > em:only-child,
body.mmh-v2 .entry-content p > em:only-child {
    display: block;
    font-style: normal;
    font-family: var(--mmh-font-serif);
    font-weight: 380;
    font-size: 1.25rem;
    letter-spacing: -0.01em;
    color: var(--mmh-stone-900);
    margin-top: 24px;
    margin-bottom: 8px;
}

/* 11.10 Reviews section header — give it some weight */
body.mmh-v2 .single-listing-block h2,
body.mmh-v2 .singleListing h2,
body.mmh-v2 #listingFeatures h2,
body.mmh-v2 .amenities h2 {
    font-family: var(--mmh-font-serif) !important;
    font-weight: 380 !important;
    font-size: 1.5rem !important;
    letter-spacing: -0.01em !important;
    color: var(--mmh-stone-900) !important;
    margin: 32px 0 16px !important;
    padding-top: 28px;
    border-top: 1px solid var(--mmh-sand-200);
}
body.mmh-v2 .single-listing-block:first-of-type h2,
body.mmh-v2 .single-listing-block:first-child h2 {
    padding-top: 0;
    border-top: none;
}

/* 11.12 Share & Save buttons — pair them properly */
body.mmh-v2.single-listings .singlelistingFav,
body.mmh-v2.mmh-v2-property .singlelistingFav {
    background: transparent !important;
    color: var(--mmh-stone-900) !important;
    border: 1px solid var(--mmh-sand-200) !important;
    box-shadow: none !important;
}
body.mmh-v2.single-listings .singlelistingFav .fa-heart,
body.mmh-v2.mmh-v2-property .singlelistingFav .fa-heart {
    color: var(--mmh-primary);
}
body.mmh-v2.single-listings .singlelistingFav:hover,
body.mmh-v2.mmh-v2-property .singlelistingFav:hover {
    border-color: var(--mmh-primary) !important;
    color: var(--mmh-primary) !important;
}

/* 11.1 Gallery dots — limit to a sensible count via CSS:
        truncate the dot list to 10 dots + "X of Y" counter style.
        (Real fix needs slick options change; this caps the visual
        noise as a stopgap.) */
body.mmh-v2 .singleListing .slick-dots,
body.mmh-v2.single-listings .slick-dots {
    max-width: 360px;
    margin-inline: auto;
    display: flex !important;
    flex-wrap: wrap;
    justify-content: center;
    gap: 4px;
}
body.mmh-v2 .singleListing .slick-dots li,
body.mmh-v2.single-listings .slick-dots li {
    width: 8px !important; height: 8px !important;
    margin: 2px !important;
}
body.mmh-v2 .singleListing .slick-dots li button,
body.mmh-v2.single-listings .slick-dots li button {
    width: 8px !important; height: 8px !important;
    padding: 0 !important;
}
body.mmh-v2 .singleListing .slick-dots li:nth-child(n+15),
body.mmh-v2.single-listings .slick-dots li:nth-child(n+15) {
    display: none !important;
}
/* Brighter prev/next arrows on the property hero gallery */
body.mmh-v2 .singleListing .slick-prev,
body.mmh-v2 .singleListing .slick-next,
body.mmh-v2.single-listings .slick-prev,
body.mmh-v2.single-listings .slick-next {
    background: rgba(255,255,255,0.94) !important;
    border-radius: 50%;
    width: 44px; height: 44px;
    box-shadow: 0 6px 20px -8px rgba(0,0,0,0.32);
    z-index: 4;
}
body.mmh-v2 .singleListing .slick-prev::before,
body.mmh-v2 .singleListing .slick-next::before,
body.mmh-v2.single-listings .slick-prev::before,
body.mmh-v2.single-listings .slick-next::before {
    color: var(--mmh-stone-900) !important;
    opacity: 1 !important;
    font-size: 20px !important;
}

/* 11.11 Map iframe — give it a subtle border so it doesn't blend
         into the page */
body.mmh-v2 .singleListing .map-display,
body.mmh-v2 .singleListing #map_canvas {
    border-radius: var(--mmh-radius-md);
    overflow: hidden;
    border: 1px solid var(--mmh-sand-200);
}

/* ============================================================
   36. Round 3 — extended filters, shortlist, forms, toasts
   ============================================================ */

/* 36.1 Amenity chips in the toolbar */
body.mmh-v2 .mmh-toolbar__chips {
    grid-column: 1 / -1;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    padding-top: 14px;
    margin-top: 6px;
    border-top: 1px dashed var(--mmh-sand-200);
    width: 100%;
}
body.mmh-v2 .mmh-chip {
    background: transparent;
    border: 1px solid var(--mmh-sand-200);
    color: var(--mmh-stone-700);
    padding: 8px 16px;
    border-radius: var(--mmh-radius-pill);
    font-family: var(--mmh-font-sans);
    font-size: 0.82rem;
    font-weight: 500;
    cursor: pointer;
    transition: all var(--mmh-d-fast) var(--mmh-ease);
    min-height: 36px;
}
body.mmh-v2 .mmh-chip:hover {
    border-color: var(--mmh-primary);
    color: var(--mmh-primary);
}
body.mmh-v2 .mmh-chip.is-active,
body.mmh-v2 .mmh-chip[aria-pressed="true"] {
    background: var(--mmh-primary);
    border-color: var(--mmh-primary);
    color: #fff;
    box-shadow: 0 4px 14px -4px rgba(15,102,98,0.32);
}
body.mmh-v2 .mmh-toolbar { flex-direction: column; align-items: stretch; }
body.mmh-v2 .mmh-toolbar > .mmh-toolbar__count { order: 0; }
body.mmh-v2 .mmh-toolbar > .mmh-toolbar__controls { order: 1; width: 100%; }
body.mmh-v2 .mmh-toolbar > .mmh-toolbar__chips { order: 2; }
body.mmh-v2 .mmh-toolbar__controls { justify-content: flex-start; }

/* 36.2 Shortlisted heart — filled state */
body.mmh-v2 .shortlist-container.active i,
body.mmh-v2 .shortlist-container.is-shortlisted i,
body.mmh-v2 .singlelistingFav.active .fa-heart,
body.mmh-v2 .singlelistingFav.is-shortlisted .fa-heart {
    color: var(--mmh-gold) !important;
    font-weight: 900 !important;
}
/* The FA-free heart "far fa-heart" looks empty; when active, swap the
   glyph point to the solid heart (\f004 in FA Solid). */
body.mmh-v2 .shortlist-container.active .far.fa-heart,
body.mmh-v2 .shortlist-container.is-shortlisted .far.fa-heart {
    font-family: 'Font Awesome 5 Free';
    font-weight: 900;
}
body.mmh-v2 .shortlist-container.active .far.fa-heart::before,
body.mmh-v2 .shortlist-container.is-shortlisted .far.fa-heart::before {
    content: '\f004'; /* solid heart */
}

/* 36.3 Toast notification (for shortlist + other ambient feedback) */
.mmh-toast {
    position: fixed;
    bottom: 24px;
    left: 50%;
    transform: translateX(-50%) translateY(20px);
    background: rgba(13, 24, 32, 0.94);
    color: #fff;
    padding: 12px 22px;
    border-radius: var(--mmh-radius-pill);
    font-family: var(--mmh-font-sans, sans-serif);
    font-size: 0.88rem;
    font-weight: 500;
    box-shadow: 0 12px 32px -10px rgba(0,0,0,0.45);
    opacity: 0;
    pointer-events: none;
    z-index: 9999;
    transition: opacity 220ms ease, transform 320ms cubic-bezier(.32,.72,0,1);
    max-width: calc(100vw - 32px);
}
.mmh-toast.is-visible {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
}

/* 36.4 JS-injected floated labels above placeholder-only inputs */
body.mmh-v2 .mmh-floated-label {
    display: block;
    font-family: var(--mmh-font-sans);
    font-size: 0.74rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--mmh-stone-700);
    margin: 12px 0 4px;
}
body.mmh-v2 .mmh-floated-label__req { color: var(--mmh-gold-deep); }

/* 36.5 Newsletter subscribe feedback line */
body.mmh-v2 .mmh-newsletter-feedback {
    margin-top: 10px;
    font-family: var(--mmh-font-sans);
    font-size: 0.84rem;
    line-height: 1.4;
}
body.mmh-v2 .mmh-newsletter-feedback.is-success { color: var(--mmh-primary); }
body.mmh-v2 .mmh-newsletter-feedback.is-error   { color: var(--mmh-gold-deep); }

/* 36.6 Owner Portal — value prop layout. The Gutenberg block content
        injected via SQL uses .wp-block-columns + .wp-block-column with a
        .mmh-owner-card class on each column. Style these without
        rewriting the parent. */
body.mmh-v2 .mmh-owner-card {
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    padding: 24px 22px !important;
    box-shadow: 0 4px 16px -8px rgba(15,102,98,0.10);
    transition: all var(--mmh-d-base) var(--mmh-ease);
}
body.mmh-v2 .mmh-owner-card:hover {
    border-color: var(--mmh-primary-tint);
    transform: translateY(-2px);
    box-shadow: 0 12px 28px -10px rgba(15,102,98,0.18);
}
body.mmh-v2 .mmh-owner-card h3 {
    font-family: var(--mmh-font-serif);
    font-size: 1.2rem;
    font-weight: 400;
    color: var(--mmh-stone-900);
    margin: 0 0 8px;
    letter-spacing: -0.005em;
}
body.mmh-v2 .mmh-owner-card p {
    color: var(--mmh-stone-700);
    font-size: 0.95rem;
    line-height: 1.5;
    margin: 0;
}

/* 36.7 Tighten the Specials empty-state so the page isn't a vast
        void while content is being curated. */
body.mmh-v2.page-template-default .entry-content .mmh-empty,
body.mmh-v2 .entry-content .mmh-empty {
    margin: 24px auto 48px;
    max-width: 640px;
    text-align: center;
    padding: 36px 28px;
    background: var(--mmh-paper-alt);
    border-radius: var(--mmh-radius-md);
    border: 1px solid var(--mmh-sand-200);
}
body.mmh-v2 .entry-content .mmh-empty h3 {
    font-family: var(--mmh-font-serif);
    font-weight: 380;
    font-size: 1.4rem;
    margin: 0 0 8px;
    color: var(--mmh-stone-900);
}
body.mmh-v2 .entry-content .mmh-empty p {
    color: var(--mmh-stone-700);
    font-size: 0.95rem;
}

/* ============================================================
   37. Round 4 — full-site alignment audit fixes
   --------------------------------------------------------------
   Items from the 2026-05-11 alignment audit. Each rule notes its
   spec section id (D1, H6, etc.).
   ============================================================ */

/* ---------- S1 — Sticky header overlap with anchor scrolls ----- */
:root, body.mmh-v2 { scroll-padding-top: 96px; }
body.mmh-v2 main section,
body.mmh-v2 .mmh-section,
body.mmh-v2 .mmh-hero,
body.mmh-v2 #content > * { scroll-margin-top: 96px; }
body.admin-bar.mmh-v2 { scroll-padding-top: 128px; }
body.admin-bar.mmh-v2 main section,
body.admin-bar.mmh-v2 .mmh-section { scroll-margin-top: 128px; }

/* ---------- S3 — Footer "View all destinations" link ----------- */
body.mmh-v2 .mmh-footer .mmh-footer__more a {
    color: var(--mmh-gold-soft) !important;
    font-weight: 500;
    border-top: 1px solid rgba(255,255,255,0.08);
    padding-top: 10px !important;
    margin-top: 6px;
    display: inline-block;
}
body.mmh-v2 .mmh-footer .mmh-footer__more a:hover { color: #fff !important; }

/* ---------- S4 — Newsletter footer label flat / inline --------- */
body.mmh-v2 .mmh-footer .mmh-newsletter {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-top: 14px;
}
body.mmh-v2 .mmh-footer .mmh-newsletter > * { width: 100%; }
body.mmh-v2 .mmh-footer .mmh-newsletter input[type="email"] {
    background: rgba(255,255,255,0.06);
    border: 1px solid rgba(255,255,255,0.16);
    color: #fff;
    padding: 12px 16px;
    border-radius: var(--mmh-radius-sm);
    font-size: 14px;
    min-height: 44px;
}
body.mmh-v2 .mmh-footer .mmh-newsletter input::placeholder { color: rgba(255,255,255,0.5); }
body.mmh-v2 .mmh-footer .mmh-newsletter button {
    background: var(--mmh-primary);
    color: #fff;
    border: 1px solid var(--mmh-primary);
    padding: 12px 18px;
    border-radius: var(--mmh-radius-pill);
    min-height: 44px;
    font-weight: 500;
}
body.mmh-v2 .mmh-footer .mmh-newsletter button:hover {
    background: var(--mmh-primary-dark);
    border-color: var(--mmh-primary-dark);
}

/* ---------- H1 — Hero SCROLL cue further from CTAs ------------- */
body.home .mmh-hero__cue { bottom: clamp(190px, 24vh, 270px) !important; }

/* ---------- H3 — Marquee mask already in place; bump opacity --- */
body.mmh-v2 .mmh-marquee {
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent) !important;
            mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent) !important;
}

/* ---------- H6 — Editorial photos: clear "coming soon" treatment.
       Override the parent's faint radial-gradient with a visible
       teal card + caption pseudo-element. Specificity overrides
       both base layer rules (line 2925 and line 3579). */
body.mmh-v2 .mmh-editorial__media .mmh-editorial__photo {
    background:
        linear-gradient(135deg,
            color-mix(in oklab, var(--mmh-primary) 65%, var(--mmh-stone-900)) 0%,
            color-mix(in oklab, var(--mmh-primary-dark) 80%, var(--mmh-stone-900)) 100%) !important;
    background-image:
        linear-gradient(135deg,
            color-mix(in oklab, var(--mmh-primary) 65%, var(--mmh-stone-900)) 0%,
            color-mix(in oklab, var(--mmh-primary-dark) 80%, var(--mmh-stone-900)) 100%) !important;
    border: none !important;
    isolation: isolate;
    position: absolute;
    overflow: hidden;
}
body.mmh-v2 .mmh-editorial__media .mmh-editorial__photo::after {
    content: 'Photography coming soon' !important;
    position: absolute !important;
    inset: 0 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    color: rgba(255,255,255,0.82) !important;
    font-family: var(--mmh-font-sans) !important;
    font-size: 0.7rem !important;
    letter-spacing: 0.24em !important;
    text-transform: uppercase !important;
    text-align: center;
    padding: 16px !important;
}
/* If admins later upload images (inline style sets background-image),
   skip the caption. */
body.mmh-v2 .mmh-editorial__media .mmh-editorial__photo[style*="background-image"]::after {
    content: none !important;
}

/* ---------- H7 — Stray quote pseudo-element. Clear any inherited
       ::before / ::after on the philosophy quote. */
body.mmh-v2 .mmh-pullquote blockquote::before,
body.mmh-v2 .mmh-pullquote blockquote::after,
body.mmh-v2 .mmh-pullquote-section blockquote::before,
body.mmh-v2 .mmh-pullquote-section blockquote::after,
body.mmh-v2 .mmh-pullquote figure::before,
body.mmh-v2 .mmh-pullquote figure::after {
    content: none !important;
    display: none !important;
}

/* ---------- H8 — Roman numerals on the divider line.
       Move the numeral DOWN below the line, kill the bg-cut hack
       that didn't account for the section's sage background. */
body.mmh-v2 .mmh-value-prop {
    border-top: none !important;
    padding-top: 0 !important;
}
body.mmh-v2 .mmh-value-prop::before {
    position: static !important;
    display: inline-block !important;
    background: transparent !important;
    padding: 0 !important;
    margin-bottom: 14px;
    color: var(--mmh-gold-deep) !important;
    font-size: 0.7rem !important;
}

/* ---------- H10 — "Become part of family" step labels wrap ------ */
body.mmh-v2 .mmh-cta__steps {
    display: grid !important;
    grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
    gap: 8px 16px !important;
}
body.mmh-v2 .mmh-cta__steps li {
    font-size: 0.84rem !important;
    line-height: 1.3 !important;
    white-space: normal;
    text-wrap: balance;
    word-break: keep-all;
}
@media (max-width: 920px) {
    body.mmh-v2 .mmh-cta__steps { grid-template-columns: repeat(2, 1fr) !important; }
}

/* ---------- H11 — Call CTA top spacing ------------------------- */
body.mmh-v2 .mmh-callband { margin-top: clamp(60px, 8vw, 96px); }

/* ---------- F1 — FAQ heading wrap balance ---------------------- */
body.mmh-v2 #mmh-faq-heading,
body.mmh-v2 .entry-content h1,
body.mmh-v2 .entry-content h2 {
    text-wrap: balance;
    overflow-wrap: break-word;
    max-width: 22ch;
    margin-inline: auto;
}
body.mmh-v2.page .entry-content > h1,
body.mmh-v2.page .entry-content > h2,
body.mmh-v2.page .entry-content > p { max-width: 760px; margin-inline: auto; }

/* ---------- F2 — FAQ accordion widened ------------------------- */
body.mmh-v2 .mmh-faq,
body.mmh-v2 .entry-content > details,
body.mmh-v2 .entry-content > .wp-block-group > details {
    max-width: 800px;
    margin-inline: auto;
}

/* ---------- LW1 — List With Us 3-col not squashed -------------- */
body.mmh-v2 .page-id-2929 .entry-content,
body.mmh-v2 .page-template-default .entry-content { max-width: min(1100px, 94vw) !important; }
body.mmh-v2 .entry-content .wp-block-columns {
    max-width: 1100px;
    margin-inline: auto;
    gap: 28px;
    align-items: stretch;
}
body.mmh-v2 .entry-content .wp-block-column {
    flex: 1 1 0 !important;
    min-width: 0;
}
body.mmh-v2 .entry-content .wp-block-column > h3,
body.mmh-v2 .entry-content .wp-block-column > .wp-block-heading {
    min-height: 2.6em;
    text-wrap: balance;
}

/* ---------- OP1 — Owner Portal heading + cards alignment ------- */
body.mmh-v2 .entry-content > .wp-block-group { padding-top: 8px; }
body.mmh-v2 .entry-content > .wp-block-group h2.wp-block-heading {
    text-align: left;
    margin-top: 40px;
    margin-bottom: 16px;
    text-wrap: balance;
    max-width: 100%;
}
body.mmh-v2 .mmh-owner-card { min-height: 200px; }
body.mmh-v2 .mmh-owner-card p { min-height: 4.5em; }

/* ---------- D1 — Destination archive 2-column LAYOUT (the big one).
       Replace Bootstrap's fragile flex with explicit CSS Grid so
       the listings always occupy the LEFT 65% and the map the
       RIGHT 35%, regardless of class soup. */
@media (min-width: 992px) {
    body.mmh-v2 #searchResults.has-map > .searchRow {
        display: grid !important;
        grid-template-columns: minmax(0, 65fr) minmax(0, 35fr) !important;
        gap: 32px !important;
        align-items: start;
    }
    /* Visually: map RIGHT, listings LEFT. The parent's flex-row-reverse
       sets map first in DOM but reversed in display. We do the same
       with grid `order:`. */
    body.mmh-v2 #searchResults.has-map > .searchRow > .map_col {
        order: 2;
        max-width: 100% !important;
        flex: unset !important;
        margin-top: 0 !important;
    }
    body.mmh-v2 #searchResults.has-map > .searchRow > .search_col {
        order: 1;
        max-width: 100% !important;
        flex: unset !important;
        margin-top: 0 !important;
    }
    body.mmh-v2 #searchResults.has-map .stickyMap {
        position: sticky !important;
        top: 100px !important;
        max-height: calc(100dvh - 120px);
        overflow: hidden;
    }
    body.mmh-v2 #searchResults.has-map #map-display { height: calc(100dvh - 140px) !important; }
    /* Cards: 2 wide at this breakpoint, 3 wide on very large viewports */
    body.mmh-v2 #searchResults.has-map .listing-wrapper.col {
        flex: 0 0 calc(50% - 12px) !important;
        max-width: calc(50% - 12px) !important;
    }
}
@media (min-width: 1400px) {
    body.mmh-v2 #searchResults.has-map .listing-wrapper.col {
        flex: 0 0 calc(33.333% - 14px) !important;
        max-width: calc(33.333% - 14px) !important;
    }
}
/* Hide the legacy .resultsCount once the new toolbar exists (D2). JS
   does the same defensively in mmh-ui.js. */
body.mmh-v2 #searchResults .mmh-toolbar ~ * .resultsCount,
body.mmh-v2 #searchResults:has(.mmh-toolbar) .resultsCount,
body.mmh-v2 #searchResults .searchMessage .resultsCount { display: none !important; }

/* D6 — Filter pills match dropdown styling rather than dark navy */
body.mmh-v2 .mmh-chip {
    background: #fff !important;
    color: var(--mmh-stone-700) !important;
    border-color: var(--mmh-sand-200) !important;
}
body.mmh-v2 .mmh-chip:hover {
    border-color: var(--mmh-primary) !important;
    color: var(--mmh-primary) !important;
}
body.mmh-v2 .mmh-chip.is-active,
body.mmh-v2 .mmh-chip[aria-pressed="true"] {
    background: var(--mmh-primary) !important;
    color: #fff !important;
    border-color: var(--mmh-primary) !important;
}

/* D8 / OP2 — Tight top padding on archive + content pages.
   Header sits in flow (sticky) so no extra spacer above #content. */
body.mmh-v2.archive .entry-title,
body.mmh-v2.archive h1.entry-title {
    margin-top: 16px !important;
    padding-top: 0 !important;
}
body.mmh-v2.archive .entry-header { padding-block: 16px 8px !important; }
body.mmh-v2.archive #content,
body.mmh-v2.page #content,
body.mmh-v2:not(.home) #content { padding-top: 0 !important; margin-top: 0 !important; }
/* Twenty-twenty-one's #main has its own vertical rhythm vars. Tighten
   the top of #main so the first heading lands close to the chrome. */
body.mmh-v2:not(.home) #main { padding-top: 0 !important; }
body.mmh-v2 .entry-content > :first-child { padding-top: 0 !important; margin-top: 24px !important; }
body.mmh-v2 .entry-content > .wp-block-group:first-child { margin-top: 16px !important; }

/* ---------- P1 — Booking widget fallback styling --------------- */
body.mmh-v2 .mmh-booking-fallback {
    padding: 24px;
    background: var(--mmh-paper-alt);
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-md);
    text-align: center;
    display: flex;
    flex-direction: column;
    gap: 14px;
    align-items: center;
}
body.mmh-v2 .mmh-booking-fallback .mmh-eyebrow { color: var(--mmh-gold-deep); }
body.mmh-v2 .mmh-booking-fallback p {
    margin: 0;
    color: var(--mmh-stone-700);
    font-size: 0.95rem;
    line-height: 1.5;
}
body.mmh-v2 .mmh-booking-fallback__hint {
    color: var(--mmh-stone-500) !important;
    font-size: 0.82rem !important;
}

/* ---------- P2 — Feature icon labels --------------------------- */
body.mmh-v2 #listingFeatures .main-features li,
body.mmh-v2 .single-listing-block .main-features li {
    text-align: center;
}
body.mmh-v2 .mmh-feature-label {
    display: block;
    font-size: 0.78rem;
    color: var(--mmh-stone-700);
    line-height: 1.3;
    margin-top: 6px;
}

/* ---------- P5 — Property title underline kill (revisit) ------- */
body.mmh-v2 #primary h1,
body.mmh-v2 #primary .entry-title,
body.mmh-v2 .singleListing h1,
body.mmh-v2 .singleListing h2,
body.mmh-v2 .singleListing h3 {
    border-bottom: none !important;
    text-decoration: none !important;
}

/* ---------- J1 — Journal placeholder card ---------------------- */
body.mmh-v2 .mmh-journal-empty {
    max-width: 640px;
    margin: 32px auto 80px;
    text-align: center;
    background: var(--mmh-paper-alt);
    padding: 48px 28px;
    border-radius: var(--mmh-radius-md);
    border: 1px solid var(--mmh-sand-200);
}
body.mmh-v2 .mmh-journal-empty h2 {
    font-family: var(--mmh-font-serif);
    font-weight: 380;
    font-size: clamp(1.5rem, 3vw, 2rem);
    margin: 16px 0 12px !important;
    color: var(--mmh-stone-900);
    max-width: 100%;
    text-align: center;
}
body.mmh-v2 .mmh-journal-empty p {
    color: var(--mmh-stone-700);
    font-size: 0.96rem;
    line-height: 1.6;
    margin: 0 auto 18px;
    max-width: 48ch;
}
body.mmh-v2 .mmh-journal-empty__form {
    display: flex;
    gap: 10px;
    justify-content: center;
    flex-wrap: wrap;
    margin-top: 8px;
}
body.mmh-v2 .mmh-journal-empty__form input {
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-pill);
    padding: 12px 18px;
    font-size: 14px;
    min-height: 48px;
    min-width: min(280px, 60vw);
    color: var(--mmh-stone-900);
}
body.mmh-v2 .mmh-journal-empty__form input:focus {
    border-color: var(--mmh-primary);
    box-shadow: 0 0 0 3px rgba(15,102,98,0.15);
    outline: none;
}
body.mmh-v2 .mmh-journal-empty__meta {
    font-size: 0.78rem !important;
    color: var(--mmh-stone-500) !important;
    margin-top: 12px !important;
}

/* ---------- E1 — Enquire form max-width ------------------------ */
body.mmh-v2.page-id-2934 .entry-content form,
body.mmh-v2 .entry-content form#form-enquiry { max-width: 720px; margin-inline: auto; }

/* ---------- C5 — Send enquiry submit alignment ---------------- */
body.mmh-v2 form#form-enquiry .mmh-injected-submit,
body.mmh-v2 form .mmh-injected-submit {
    justify-content: flex-start !important;
}
body.mmh-v2 form .send-enquiry { min-width: 200px; }

/* ---------- A2 — Hero stat label contrast --------------------- */
body.mmh-v2 .mmh-hero-stat__label {
    color: rgba(255,255,255,0.88) !important;
    text-shadow: 0 1px 2px rgba(0,0,0,0.35);
    font-weight: 500 !important;
}

/* ---------- A3 — Hide empty section dividers ------------------- */
body.mmh-v2 .searchMessage:empty,
body.mmh-v2 .searchMessage:has(:empty:only-child),
body.mmh-v2 .mmh-section-head:has(.mmh-section-head__intro:empty) {
    border: none !important;
    padding: 0 !important;
}

/* P7 — Bedding cards 3-column when there are 3 cards */
@media (min-width: 768px) {
    body.mmh-v2 #beddingConfig .row[data-masonry],
    body.mmh-v2 [id="beddingConfig"] .row[data-masonry] {
        display: grid !important;
        grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
        gap: 16px !important;
    }
    body.mmh-v2 #beddingConfig .row > [class*="col-"],
    body.mmh-v2 [id="beddingConfig"] .row > [class*="col-"] {
        max-width: 100% !important;
        flex: unset !important;
        width: auto !important;
    }
}

/* P8 — Reviews empty state polished */
body.mmh-v2 #listingReviews:has(p:only-child:contains("no reviews")),
body.mmh-v2 #listingReviews p.mb-3 {
    color: var(--mmh-stone-500);
    font-style: italic;
}

/* ============================================================
   38. Hero centering + working home search bar
   ============================================================ */

/* Hero — vertically centre the copy. Keeps the absolute stats row
   pinned to the bottom (it's outside the flex flow). */
body.home .mmh-hero {
    justify-content: center !important;
}
body.home .mmh-hero__inner {
    margin-top: 0 !important;
    padding-top: clamp(96px, 14vh, 160px) !important;
    /* keep bottom padding so the stats strip + search card overlap
       look right; reduce slightly so the copy lands nearer centre */
    padding-bottom: clamp(180px, 22vh, 280px) !important;
}
@media (max-width: 720px) {
    body.home .mmh-hero__inner {
        padding-top: clamp(80px, 16vh, 140px) !important;
        padding-bottom: 80px !important;
    }
}

/* ---------- Search bar (mmh-search) ---------- */
body.mmh-v2 .mmh-search {
    background: var(--mmh-paper-warm, #fff);
    border-radius: var(--mmh-radius-lg);
    box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset,
                0 24px 60px -24px rgba(15,102,98,0.32),
                0 8px 24px -8px rgba(0,0,0,0.10);
    padding: 6px;
    border: 1px solid var(--mmh-sand-200);
}
body.mmh-v2 .mmh-search__form {
    display: grid;
    grid-template-columns:
        minmax(0, 1.4fr)
        minmax(0, 1fr)
        minmax(0, 1fr)
        minmax(0, 0.9fr)
        auto;
    align-items: stretch;
    gap: 0;
    background: transparent;
    margin: 0;
}
body.mmh-v2 .mmh-search__field {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 12px 18px 10px;
    border-right: 1px solid var(--mmh-sand-200);
    cursor: pointer;
    transition: background var(--mmh-d-fast) var(--mmh-ease);
    margin: 0;
}
body.mmh-v2 .mmh-search__field:hover {
    background: var(--mmh-paper-alt);
    border-radius: var(--mmh-radius-md);
}
body.mmh-v2 .mmh-search__label {
    font-family: var(--mmh-font-sans);
    font-size: 0.66rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--mmh-stone-700);
    font-weight: 600;
}
body.mmh-v2 .mmh-search__input {
    border: none !important;
    background: transparent !important;
    padding: 4px 0 !important;
    font-family: var(--mmh-font-sans);
    font-size: 0.96rem;
    color: var(--mmh-stone-900);
    min-height: 28px;
    outline: none !important;
    box-shadow: none !important;
    appearance: none;
    -webkit-appearance: none;
}
body.mmh-v2 .mmh-search__input::placeholder { color: var(--mmh-stone-500); }
body.mmh-v2 .mmh-search__input:focus {
    background: transparent !important;
    box-shadow: none !important;
}
body.mmh-v2 .mmh-search__select {
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none'><path d='M1 1l4 4 4-4' stroke='%23166B71' stroke-width='1.5' stroke-linecap='round'/></svg>") !important;
    background-repeat: no-repeat !important;
    background-position: right 0 center !important;
    padding-right: 18px !important;
    cursor: pointer;
}
body.mmh-v2 .mmh-search__submit {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    background: var(--mmh-primary);
    color: #fff;
    border: none;
    border-radius: var(--mmh-radius-md);
    padding: 14px 28px;
    margin: 4px;
    font-family: var(--mmh-font-sans);
    font-size: 0.92rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    cursor: pointer;
    transition: background var(--mmh-d-fast) var(--mmh-ease), transform var(--mmh-d-fast) var(--mmh-ease);
    min-height: 56px;
    min-width: 120px;
}
body.mmh-v2 .mmh-search__submit:hover { background: var(--mmh-primary-dark); transform: translateY(-1px); }
body.mmh-v2 .mmh-search__submit:active { transform: translateY(0); }
body.mmh-v2 .mmh-search__submit.is-loading {
    opacity: 0.75;
    cursor: progress;
}
body.mmh-v2 .mmh-search__submit.is-loading svg { animation: mmh-spin 0.9s linear infinite; }
@keyframes mmh-spin { to { transform: rotate(360deg); } }

body.mmh-v2 .mmh-search__hint {
    margin: 14px 12px 0;
    padding: 10px 14px;
    border-radius: var(--mmh-radius-sm);
    background: rgba(184, 128, 26, 0.12);
    color: var(--mmh-gold-deep);
    font-family: var(--mmh-font-sans);
    font-size: 0.86rem;
    line-height: 1.4;
    display: none;
}
body.mmh-v2 .mmh-search__hint.is-visible { display: block; }

@media (max-width: 920px) {
    body.mmh-v2 .mmh-search__form {
        grid-template-columns: 1fr;
        gap: 0;
    }
    body.mmh-v2 .mmh-search__field {
        border-right: none;
        border-bottom: 1px solid var(--mmh-sand-200);
    }
    body.mmh-v2 .mmh-search__field:last-of-type { border-bottom: none; }
    body.mmh-v2 .mmh-search__submit { margin: 8px; width: calc(100% - 16px); }
}

/* Kill any leftover .homhero-searchbar styling the parent enqueued —
   the new shortcode renders .mmh-search, not .homhero-searchbar, so we
   just hide it defensively if any duplicate slips through. */
body.mmh-v2 .mmh-hero__search .homhero-searchbar { display: none; }

/* ============================================================
   39. Breadcrumbs + Trust signals (UX-3, UX-7)
   ============================================================ */
body.mmh-v2 .mmh-breadcrumbs {
    padding: 18px 0 8px;
    font-family: var(--mmh-font-sans);
    font-size: 0.78rem;
    letter-spacing: 0.04em;
    color: var(--mmh-stone-700);
}
body.mmh-v2 .mmh-breadcrumbs ol {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px 8px;
}
body.mmh-v2 .mmh-breadcrumbs li { display: inline-flex; align-items: center; }
body.mmh-v2 .mmh-breadcrumbs a {
    color: var(--mmh-stone-700);
    text-decoration: none;
    transition: color var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 .mmh-breadcrumbs a:hover { color: var(--mmh-primary); text-decoration: underline; }
body.mmh-v2 .mmh-breadcrumbs li[aria-current="page"] span { color: var(--mmh-stone-900); font-weight: 500; }
body.mmh-v2 .mmh-breadcrumbs__sep {
    color: var(--mmh-stone-500);
    user-select: none;
}

/* Pull breadcrumbs above the chrome on archives where they're injected
   inside .entry-content (which has its own top margin). */
body.mmh-v2 .entry-content > .mmh-breadcrumbs:first-child {
    margin-top: 0 !important;
    margin-bottom: 12px;
}

/* ============================================================
   40A. Global mobile overflow guard + safe-area tokens
   --------------------------------------------------------------
   The 2026-05-11 mobile audit found horizontal scroll on every
   page (marquee track, slick-track, .mmh-search__field clipped).
   These rules are the foundation that every mobile section
   inherits — no fixed px design tokens, every flex child
   honours min-width: 0, every fixed/sticky bar respects safe
   areas, and html/body never overflow horizontally.
   ============================================================ */
:root {
    --space-section: clamp(40px, 8vw, 96px);
    --space-gutter:  clamp(16px, 5vw, 32px);
    --tabbar-h:      calc(56px + env(safe-area-inset-bottom, 0px));
    --bookbar-h:     76px;
}
html, body { overflow-x: clip; max-width: 100vw; }
html { -webkit-text-size-adjust: 100%; }

/* Universal min-width: 0 so flex children can shrink and text
   wraps instead of forcing the parent wider than the viewport.
   Scoped to body.mmh-v2 to avoid clobbering admin UI. */
body.mmh-v2 *,
body.mmh-v2 *::before,
body.mmh-v2 *::after { box-sizing: border-box; }
body.mmh-v2 .mmh-hero,
body.mmh-v2 .mmh-hero__copy,
body.mmh-v2 .mmh-hero__lead,
body.mmh-v2 .mmh-hero h1,
body.mmh-v2 .mmh-section,
body.mmh-v2 .mmh-section-head,
body.mmh-v2 .mmh-editorial,
body.mmh-v2 .mmh-editorial__copy,
body.mmh-v2 .mmh-marquee__item,
body.mmh-v2 .mmh-search,
body.mmh-v2 .mmh-search__field,
body.mmh-v2 .mmh-search__form,
body.mmh-v2 .mmh-toolbar,
body.mmh-v2 .mmh-toolbar__field,
body.mmh-v2 .mmh-footer__col,
body.mmh-v2 .wp-block-column,
body.mmh-v2 .productListing.card,
body.mmh-v2 .productListing .card-body,
body.mmh-v2 .listing-wrapper { min-width: 0; }

/* Words can break instead of pushing the container wider. */
body.mmh-v2 h1, body.mmh-v2 h2, body.mmh-v2 h3, body.mmh-v2 h4,
body.mmh-v2 .mmh-hero__lead, body.mmh-v2 .listingTitle {
    overflow-wrap: anywhere;
    word-break: normal;
    hyphens: auto;
}

/* The marquee track is intentionally several thousand px wide for
   the loop animation. Clip it at the parent. */
body.mmh-v2 .mmh-marquee {
    overflow: hidden !important;
    width: 100vw;
    max-width: 100vw;
}

/* Slick carousels overflow their parent when slidesPerView isn't
   precise. Clip them too. */
body.mmh-v2 .slick-slider,
body.mmh-v2 .slick-list,
body.mmh-v2 .slick-track { max-width: 100%; }

/* ============================================================
   40. Mobile-app shell — bottom tab bar, header behaviour,
       sticky book bar, footer accordions, hero fixes (≤920px)
   ============================================================ */

/* --- App-shell defaults that help everywhere --- */
body.mmh-v2 {
    overscroll-behavior-y: none;
    -webkit-tap-highlight-color: transparent;
}
body.mmh-v2 input,
body.mmh-v2 select,
body.mmh-v2 textarea { font-size: 16px; }
body.mmh-v2 .mmh-header,
body.mmh-v2 .mmh-tabbar,
body.mmh-v2 .mmh-bookbar,
body.mmh-v2 .mmh-tabbar__tab { user-select: none; -webkit-user-select: none; }

/* Tappable elements get a tiny scale-down on press to feel native. */
@media (hover: none) and (pointer: coarse) {
    body.mmh-v2 .mmh-btn:active,
    body.mmh-v2 .wp-block-button__link:active,
    body.mmh-v2 .mmh-tabbar__tab:active,
    body.mmh-v2 .mmh-chip:active,
    body.mmh-v2 .productListing.card:active,
    body.mmh-v2 .shortlist-container:active,
    body.mmh-v2 .mmh-search__submit:active {
        transform: scale(0.97);
    }
}

/* --- View Transitions cross-fade for capable browsers --- */
@supports (view-transition-name: none) {
    @view-transition { navigation: auto; }
    html.mmh-view-transitions::view-transition-old(root),
    html.mmh-view-transitions::view-transition-new(root) {
        animation-duration: 260ms;
        animation-timing-function: cubic-bezier(.32,.72,0,1);
    }
}

/* --- Bottom tab bar (desktop hidden, mobile fixed) --- */
.mmh-tabbar { display: none; }
@media (max-width: 920px) {
    .mmh-tabbar {
        position: fixed;
        left: 0; right: 0; bottom: 0;
        z-index: 90;
        display: grid;
        grid-template-columns: repeat(5, 1fr);
        background: rgba(255,255,255,0.94);
        backdrop-filter: saturate(160%) blur(20px);
        -webkit-backdrop-filter: saturate(160%) blur(20px);
        border-top: 1px solid var(--mmh-sand-200);
        padding-bottom: env(safe-area-inset-bottom, 0);
        transform: translateY(0);
        transition: transform 260ms cubic-bezier(.32,.72,0,1);
        font-family: var(--mmh-font-sans);
    }
    .mmh-tabbar.is-hidden { transform: translateY(100%); }
    .mmh-tabbar__tab {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 3px;
        min-height: 56px;
        padding: 8px 4px 6px;
        text-decoration: none;
        color: var(--mmh-stone-700);
        position: relative;
        transition: color 200ms ease;
    }
    .mmh-tabbar__tab:active { color: var(--mmh-primary); }
    .mmh-tabbar__tab.is-active { color: var(--mmh-primary); }
    .mmh-tabbar__tab.is-active::before {
        content: '';
        position: absolute;
        top: 4px;
        left: 50%;
        transform: translateX(-50%);
        width: 20px;
        height: 2px;
        background: var(--mmh-primary);
        border-radius: 2px;
    }
    .mmh-tabbar__icon { display: inline-flex; }
    .mmh-tabbar__icon svg { width: 22px; height: 22px; }
    .mmh-tabbar__label {
        font-size: 10px;
        letter-spacing: 0.04em;
        font-weight: 500;
        line-height: 1;
    }
    /* Reserve space at the bottom of every page for the tab bar */
    body.mmh-v2 { padding-bottom: calc(64px + env(safe-area-inset-bottom, 0)); }
}

/* --- Mobile header: shrink + hide on scroll-down --- */
@media (max-width: 920px) {
    body.mmh-v2 .mmh-header {
        transition: transform 260ms cubic-bezier(.32,.72,0,1),
                    height 200ms ease,
                    box-shadow 200ms ease,
                    background 200ms ease;
        padding-top: env(safe-area-inset-top, 0);
    }
    body.mmh-v2 .mmh-header__inner { height: 64px; }
    body.mmh-v2 .mmh-header.is-compact .mmh-header__inner { height: 52px; }
    body.mmh-v2 .mmh-header.is-hidden { transform: translateY(-100%); }
    body.mmh-v2 .mmh-header__brand img { max-height: 32px; }
    body.mmh-v2 .mmh-header__brand-text { font-size: 1.2rem; }
    body.mmh-v2 .mmh-header__brand-text small { display: none; }
    /* Hide the desktop List With Us button — primary actions live in tab bar */
    body.mmh-v2 .mmh-header__actions .mmh-btn { display: none; }
    /* But keep the wishlist icon button next to the burger */
}

/* --- Sticky Book bar on property pages (mobile only) --- */
.mmh-bookbar { display: none; }
@media (max-width: 920px) {
    .mmh-bookbar {
        position: fixed;
        left: 12px; right: 12px;
        /* Sits above the tab bar */
        bottom: calc(56px + env(safe-area-inset-bottom, 0) + 12px);
        z-index: 85;
        display: flex;
        align-items: center;
        gap: 12px;
        padding: 12px 14px 12px 18px;
        background: rgba(13,24,32,0.94);
        color: #fff;
        border-radius: var(--mmh-radius-lg);
        box-shadow: 0 16px 40px -16px rgba(0,0,0,0.5);
        transition: transform 220ms ease;
        font-family: var(--mmh-font-sans);
    }
    .mmh-bookbar__price { flex: 1; font-size: 0.9rem; line-height: 1.2; }
    .mmh-bookbar__price .mmh-bookbar__from { opacity: 0.7; font-size: 0.78rem; }
    .mmh-bookbar__price strong { font-weight: 600; font-size: 1.05rem; }
    .mmh-bookbar__price .mmh-bookbar__unit { opacity: 0.7; font-size: 0.78rem; }
    .mmh-bookbar__cta {
        min-height: 48px;
        padding: 12px 18px !important;
        font-size: 0.92rem !important;
        white-space: nowrap;
    }
    body.mmh-v2.single-listings,
    body.mmh-v2.mmh-v2-property { padding-bottom: calc(140px + env(safe-area-inset-bottom, 0)); }
}

/* --- Mobile hero fixes (M1, M2, M3, M5) --- */
@media (max-width: 720px) {
    /* M1: Stack hero content properly, no overlap. Stats become their own
       block immediately after the hero photo, not absolute over it. */
    body.home .mmh-hero {
        min-height: 88dvh !important;
        padding-bottom: 0 !important;
    }
    body.home .mmh-hero__inner {
        padding-top: clamp(72px, 14dvh, 120px) !important;
        padding-bottom: 56px !important;
    }
    body.home .mmh-hero h1 {
        font-size: clamp(2.2rem, 9vw, 3rem) !important;
        line-height: 1.05 !important;
    }
    body.home .mmh-hero__lead { font-size: 0.95rem !important; }
    /* M2: Hero CTA full-width 56px tall, in the thumb zone. */
    body.home .mmh-hero__cta-row {
        flex-direction: column !important;
        align-items: stretch !important;
        gap: 12px !important;
        width: min(86vw, 360px);
        margin-inline: auto;
    }
    body.home .mmh-hero__cta-row .mmh-btn--primary {
        width: 100%;
        min-height: 56px;
        padding: 18px 24px !important;
        font-size: 1rem !important;
        justify-content: center;
    }
    /* M3: Hide the phone-number CTA in the hero — phone is reachable
       via the header / tab bar / contact page. */
    body.home .mmh-hero__phone { display: none !important; }
    /* Stats: stack below the photo, horizontally scrollable strip. */
    body.home .mmh-hero__stats {
        position: static !important;
        background: var(--mmh-paper-alt);
        margin-top: 0 !important;
        padding: 16px 0 20px;
    }
    body.home .mmh-hero__stats-inner {
        display: flex !important;
        gap: 12px !important;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
        scroll-padding-inline: 16px;
        padding-inline: 16px;
        -webkit-overflow-scrolling: touch;
        border-top: none !important;
        padding-top: 0 !important;
    }
    body.home .mmh-hero__stats-inner::-webkit-scrollbar { display: none; }
    body.home .mmh-hero-stat {
        flex: 0 0 38%;
        scroll-snap-align: start;
        background: #fff;
        border: 1px solid var(--mmh-sand-200);
        border-radius: var(--mmh-radius-md);
        padding: 14px 12px;
        text-align: center;
    }
    body.home .mmh-hero-stat__num { font-size: 1.4rem !important; }
    body.home .mmh-hero-stat__label { font-size: 0.62rem !important; }
    /* Trust row tightens to 2 lines */
    body.home .mmh-hero__trust {
        background: rgba(13,24,32,0.32);
        backdrop-filter: blur(8px);
        -webkit-backdrop-filter: blur(8px);
        margin: 18px 16px 0;
        padding: 10px 14px;
        border-radius: var(--mmh-radius-md);
    }
    /* Move scroll cue out of the way on mobile */
    body.home .mmh-hero__cue { display: none !important; }

    /* M5: Editor's Picks 3-up grid → horizontal snap carousel */
    body.mmh-v2 .featuredListings .grid-container,
    body.mmh-v2 .featuredListings .row.content,
    body.mmh-v2 .featuredListings .slick-list { padding-inline: 16px; }
    body.mmh-v2 .featuredListings .content > .listing-wrapper,
    body.mmh-v2 .featuredListings .row.content > .listing-wrapper {
        flex: 0 0 86% !important;
        max-width: 86% !important;
        scroll-snap-align: start;
        margin-right: 12px;
    }
    body.mmh-v2 .featuredListings .row.content,
    body.mmh-v2 .featuredListings .grid-container > div.content {
        display: flex !important;
        flex-wrap: nowrap !important;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
        -webkit-overflow-scrolling: touch;
        gap: 0;
    }
    body.mmh-v2 .featuredListings .row.content::-webkit-scrollbar { display: none; }

    /* M8: Tap targets ≥44 */
    body.mmh-v2 .shortlist-container { width: 44px !important; height: 44px !important; }
    body.mmh-v2 .mmh-chip { min-height: 44px; padding: 10px 18px; }

    /* Card edge-to-edge with 16px gutter, 24px gap between */
    body.mmh-v2 #searchResults .listing-wrapper.col {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        margin-bottom: 8px;
    }
    body.mmh-v2 .productListing.card {
        border-radius: 16px;
        box-shadow: 0 4px 12px rgba(0,0,0,0.06);
    }
}

/* --- Mobile footer accordions (M6) --- */
@media (max-width: 720px) {
    body.mmh-v2 .mmh-footer__col h4 {
        position: relative;
        cursor: pointer;
        padding-right: 30px;
        margin-bottom: 0;
        padding-block: 14px;
        border-top: 1px solid rgba(255,255,255,0.08);
    }
    body.mmh-v2 .mmh-footer__col h4::after {
        content: '+';
        position: absolute;
        right: 0;
        top: 14px;
        font-size: 1.3rem;
        font-weight: 300;
        transition: transform 220ms ease;
    }
    body.mmh-v2 .mmh-footer__col[aria-expanded="true"] h4::after { transform: rotate(45deg); }
    body.mmh-v2 .mmh-footer__col ul {
        max-height: 0;
        overflow: hidden;
        transition: max-height 320ms cubic-bezier(.32,.72,0,1);
        margin: 0;
    }
    body.mmh-v2 .mmh-footer__col[aria-expanded="true"] ul {
        max-height: 800px;
        padding-bottom: 14px;
    }
}

/* --- Dark mode (V4) --- */
@media (prefers-color-scheme: dark) and (min-width: 99999px) { /* disabled — site is light-only */
    body.mmh-v2 {
        --mmh-paper:        #0f1a1a;
        --mmh-paper-warm:   #1a2424;
        --mmh-paper-alt:    #1a2424;
        --mmh-bg:           #1a2424;
        --mmh-bg-alt:       #0f1a1a;
        --mmh-stone-900:    #f7f2e8;
        --mmh-stone-800:    #e3dac6;
        --mmh-stone-700:    #b8bfbf;
        --mmh-stone-500:    #8a9494;
        --mmh-sand-50:      #1a2424;
        --mmh-sand-100:     #233030;
        --mmh-sand-200:     #364444;
    }
    body.mmh-v2 .mmh-header,
    body.mmh-v2:not(.home) .mmh-header {
        background: rgba(15,26,26,0.94) !important;
        border-bottom-color: rgba(255,255,255,0.08) !important;
    }
    body.mmh-v2 .mmh-tabbar {
        background: rgba(15,26,26,0.96);
        border-top-color: rgba(255,255,255,0.06);
    }
    body.mmh-v2 .mmh-toolbar__field select,
    body.mmh-v2 .mmh-search__form,
    body.mmh-v2 .mmh-search { background: var(--mmh-paper-warm); color: var(--mmh-stone-900); }
    body.mmh-v2 .mmh-bookbar { background: rgba(0,0,0,0.92); }

    /* Listing cards — keep the original light look in dark mode too.
     * The token flip above turns --mmh-paper-warm dark; ignoring it
     * and locking literals keeps the card readable. Pairs with the
     * white-card-dark-text body of Section 52. */
    body.mmh-v2 .productListing.card {
        background: #ffffff;
        border-radius: 14px;
        overflow: hidden;
        box-shadow: 0 6px 24px rgba(0, 0, 0, 0.25);
    }
    body.mmh-v2 .productListing.card .new-card-body,
    body.mmh-v2 .productListing.card .card-body {
        background: #ffffff;
        padding: 16px 18px 20px;
    }
    body.mmh-v2 .productListing.card .listingTitle,
    body.mmh-v2 .productListing.card .listingTitle a,
    body.mmh-v2 .productListing.card .listingPrice,
    body.mmh-v2 .productListing.card .price-amount,
    body.mmh-v2 .productListing.card .shrink,
    body.mmh-v2 .productListing.card .propField,
    body.mmh-v2 .productListing.card .fieldSleeps,
    body.mmh-v2 .productListing.card .fieldBedrooms,
    body.mmh-v2 .productListing.card .fieldBathrooms {
        color: #0f1a1a;
    }
    body.mmh-v2 .productListing.card .suburb,
    body.mmh-v2 .productListing.card .listingSuburb {
        background: #233030;
        color: #f5efe6;
    }

    /* Filter chips — hard literals so token flip can't drag them
     * into the unreadable light-grey-on-white state. */
    body.mmh-v2 .mmh-chip,
    body.mmh-v2 .mmh-toolbar .mmh-chip {
        background: #ffffff;
        color: #0f1a1a;
        border-color: #d9d3c7;
    }
    body.mmh-v2 .mmh-chip:hover,
    body.mmh-v2 .mmh-toolbar .mmh-chip:hover {
        background: #f5efe6;
        color: #0f1a1a;
        border-color: #166b71;
    }
    body.mmh-v2 .mmh-chip.is-active,
    body.mmh-v2 .mmh-toolbar .mmh-chip.is-active {
        background: #166b71;
        color: #ffffff;
        border-color: #166b71;
    }
}

/* Hero trust-signal row */
body.home .mmh-hero__trust {
    display: flex;
    flex-wrap: wrap;
    gap: 14px 24px;
    justify-content: center;
    align-items: center;
    margin-top: 22px;
    padding: 0 12px;
    color: rgba(255,255,255,0.88);
    font-family: var(--mmh-font-sans);
    font-size: 0.82rem;
    font-weight: 500;
    letter-spacing: 0.01em;
    text-shadow: 0 1px 2px rgba(0,0,0,0.35);
}
body.home .mmh-hero__trust span {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
body.home .mmh-hero__trust .mmh-hero__trust-star {
    color: var(--mmh-gold-soft);
}
body.home .mmh-hero__trust .mmh-hero__trust-sep {
    color: rgba(255,255,255,0.4);
    margin: 0 -8px;
}
@media (max-width: 720px) {
    body.home .mmh-hero__trust { font-size: 0.76rem; gap: 6px 14px; }
    body.home .mmh-hero__trust .mmh-hero__trust-sep { display: none; }
}

/* ---------- Unified date-range picker in the search bar ---------- */
body.mmh-v2 .mmh-search__form {
    /* Now 4 cells (Where · Dates · Guests · Submit) since Check-in + Check-out merged */
    grid-template-columns:
        minmax(0, 1.3fr)
        minmax(0, 1.6fr)
        minmax(0, 0.9fr)
        auto !important;
}
body.mmh-v2 .mmh-search__field--dates {
    position: relative;
}
body.mmh-v2 .mmh-search__input--dates {
    cursor: pointer;
    background: transparent !important;
    color: var(--mmh-stone-900);
}
body.mmh-v2 .mmh-search__input--dates::placeholder { color: var(--mmh-stone-500); }
body.mmh-v2 .mmh-search__input--dates.has-value { font-weight: 500; }
body.mmh-v2 .mmh-search__dates-clear {
    position: absolute;
    top: 50%;
    right: 14px;
    transform: translateY(-50%);
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--mmh-sand-100);
    color: var(--mmh-stone-700);
    border: none;
    cursor: pointer;
    font-size: 1rem;
    line-height: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
}
body.mmh-v2 .mmh-search__dates-clear:hover {
    background: var(--mmh-primary);
    color: #fff;
}

/* Daterangepicker — block 3 (light theme) removed. Single source of
 * truth is now Section 50 at the very end of this file. The form's
 * own grid override (mmh-search__form 1fr on mobile) is preserved
 * separately below since that's not a picker rule. */
@media (max-width: 720px) {
    body.mmh-v2 .mmh-search__form { grid-template-columns: 1fr !important; }
    body.mmh-v2 .mmh-search__field--dates { border-bottom: 1px solid var(--mmh-sand-200); border-right: none; }
}

/* ============================================================
   41. Round 5 — P0 mobile audit fixes (2026-05-11)
   ============================================================ */

/* 0.3 / 1.6 — Hide the "Plan your stay" thumb-cta orb on mobile.
   The bottom tab bar already handles primary navigation; the orb
   was overlapping hero CTAs, section copy and the footer form. */
@media (max-width: 920px) {
    body.mmh-v2 .mmh-thumb-cta,
    body.mmh-v2 .mmh-thumb-cta.is-visible {
        display: none !important;
        transform: translateY(120%) !important;
        visibility: hidden;
    }
}

/* 0.4 — Property page bottom padding so the fixed bookbar +
   tabbar never cover content. Calculated against the safe-area
   inset so iOS home-indicator devices are honoured too. */
@media (max-width: 920px) {
    body.mmh-v2.single-listings #main,
    body.mmh-v2.mmh-v2-property #main,
    body.mmh-v2.single-listings,
    body.mmh-v2.mmh-v2-property {
        padding-bottom: calc(var(--bookbar-h) + var(--tabbar-h) + 24px) !important;
    }
}

/* 0.5 — Tab bar safe-area: bumped earlier; tighten the size token
   so the audit's 50px-tall expectation no longer sits under the
   iOS home indicator. */
@media (max-width: 920px) {
    .mmh-tabbar {
        min-height: 56px;
        padding-bottom: max(env(safe-area-inset-bottom, 0px), 6px);
    }
}

/* 0.6 — Admin-bar leak: scope twenty-twenty-one's admin-bar
   offset to only fire when the bar is actually rendered. */
html:not(.admin-bar) body.mmh-v2 .mmh-topbar,
html:not(.admin-bar) body.mmh-v2 .mmh-header { margin-top: 0; top: 0; }

/* ---- 1.1 / 1.2 / 1.3 — Home hero clipping, search panel, stat row ---- */
@media (max-width: 720px) {
    body.home .mmh-hero {
        padding-left: 0;
        padding-right: 0;
    }
    body.home .mmh-hero__inner {
        padding-inline: 20px !important;
        text-align: center;
    }
    body.home .mmh-hero h1 {
        font-size: clamp(2rem, 9vw, 3rem) !important;
        line-height: 1.04 !important;
        letter-spacing: -0.022em;
        margin-inline: auto;
        max-width: 100%;
    }
    body.home .mmh-hero__copy { max-width: 100%; padding-inline: 0; }
    body.home .mmh-hero__lead {
        font-size: 0.96rem !important;
        max-width: 36ch;
        margin-inline: auto;
    }
    body.home .mmh-hero__cta-row { width: 100%; padding-inline: 0; }
    body.home .mmh-hero__cta-row .mmh-btn { width: 100%; }
}

/* 1.2 — Search panel: single column, full-width fields, big submit */
@media (max-width: 720px) {
    body.mmh-v2 .mmh-hero__search { padding-inline: 16px; }
    body.mmh-v2 .mmh-search {
        padding: 12px;
        border-radius: 20px;
    }
    body.mmh-v2 .mmh-search__form {
        grid-template-columns: 1fr !important;
        gap: 4px !important;
    }
    body.mmh-v2 .mmh-search__field {
        padding: 14px 14px 12px !important;
        border-right: none !important;
        border-bottom: 1px solid var(--mmh-sand-100) !important;
        min-height: 56px;
        border-radius: 0;
    }
    body.mmh-v2 .mmh-search__field:last-of-type { border-bottom: none !important; }
    body.mmh-v2 .mmh-search__input,
    body.mmh-v2 .mmh-search__select { width: 100% !important; }
    body.mmh-v2 .mmh-search__submit {
        width: 100% !important;
        margin: 12px 0 0 !important;
        min-height: 56px !important;
        font-size: 1rem !important;
    }
}

/* 1.3 — Stat row letter-per-line bug. Force a true responsive grid. */
@media (max-width: 720px) {
    body.home .mmh-hero-stat {
        min-width: 0;
        flex-basis: 44%;
        word-break: normal;
        white-space: normal;
    }
    body.home .mmh-hero-stat__num,
    body.home .mmh-hero-stat__label {
        white-space: normal;
        word-break: normal;
        overflow-wrap: normal;
    }
}

/* 6.1 — List With Us benefits + any 3-col block columns: collapse to 1 on mobile */
@media (max-width: 720px) {
    body.mmh-v2 .entry-content .wp-block-columns {
        flex-direction: column !important;
        gap: 16px !important;
    }
    body.mmh-v2 .entry-content .wp-block-column {
        flex: 1 1 auto !important;
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
    }
    body.mmh-v2 .entry-content .wp-block-column h3,
    body.mmh-v2 .entry-content .wp-block-column .wp-block-heading {
        min-height: 0 !important;   /* kill the desktop heading equal-height hack */
        word-break: normal;
        white-space: normal;
    }
}

/* 3.1 / 3.2 — Contact: two-column layout stacks, phone number doesn't wrap */
@media (max-width: 720px) {
    body.mmh-v2.page-id-2932 .wp-block-columns,
    body.mmh-v2 .entry-content .wp-block-columns {
        gap: 24px !important;
    }
    body.mmh-v2 .entry-content a[href^="tel:"] { white-space: nowrap; }
}

/* 4.1 / 4.2 — FAQ contrast + bigger chevron tap area */
body.mmh-v2 .entry-content details > summary {
    color: var(--mmh-stone-900);
    font-weight: 500;
    min-height: 56px;
}
body.mmh-v2 .entry-content details .mmh-faq-chevron,
body.mmh-v2 .entry-content details summary::after { font-size: 1.4rem; }

/* 8.3 — Property description: padding so text doesn't clip the right edge */
@media (max-width: 720px) {
    body.mmh-v2.single-listings .listingContentWrapper,
    body.mmh-v2.mmh-v2-property .listingContentWrapper,
    body.mmh-v2 .single-listing-block {
        padding-inline: 20px !important;
        word-break: break-word;
        overflow-wrap: anywhere;
    }
    /* Description container often has flex parents that don't shrink */
    body.mmh-v2 .singleListing { min-width: 0; }
    body.mmh-v2 .singleListing > .row { gap: 0 !important; }
}

/* 8.1 — Property hero gallery: shrink slick arrows on mobile so they
   don't dominate the photo */
@media (max-width: 720px) {
    body.mmh-v2.single-listings .slick-prev,
    body.mmh-v2.single-listings .slick-next,
    body.mmh-v2 .singleListing .slick-prev,
    body.mmh-v2 .singleListing .slick-next {
        width: 36px !important;
        height: 36px !important;
        background: rgba(255,255,255,0.86) !important;
        box-shadow: 0 4px 12px -4px rgba(0,0,0,0.32) !important;
    }
    body.mmh-v2 .singleListing .slick-prev::before,
    body.mmh-v2 .singleListing .slick-next::before,
    body.mmh-v2.single-listings .slick-prev::before,
    body.mmh-v2.single-listings .slick-next::before {
        font-size: 16px !important;
    }
    body.mmh-v2 .singleListing .slick-prev,
    body.mmh-v2.single-listings .slick-prev { left: 12px !important; }
    body.mmh-v2 .singleListing .slick-next,
    body.mmh-v2.single-listings .slick-next { right: 12px !important; }
}

/* 8.2 — Property meta strip 2-column compact list on mobile */
@media (max-width: 720px) {
    body.mmh-v2.single-listings .facilities-wrapper .d-flex,
    body.mmh-v2.mmh-v2-property .facilities-wrapper .d-flex {
        display: grid !important;
        grid-template-columns: repeat(2, 1fr) !important;
        gap: 10px 14px !important;
    }
    body.mmh-v2.single-listings .facilities-wrapper .propField,
    body.mmh-v2.mmh-v2-property .facilities-wrapper .propField {
        font-size: 0.86rem !important;
    }
}

/* 12.2 — Skip-to-content link must be visible on keyboard focus */
body.mmh-v2 .skip-link,
body.mmh-v2 a.skip-link {
    position: absolute;
    left: -10000px;
    top: 8px;
    width: 1px; height: 1px;
    overflow: hidden;
    z-index: 9999;
}
body.mmh-v2 .skip-link:focus,
body.mmh-v2 .skip-link:focus-visible {
    left: 16px;
    top: 16px;
    width: auto; height: auto;
    padding: 10px 18px;
    background: var(--mmh-primary);
    color: #fff;
    border-radius: var(--mmh-radius-pill);
    box-shadow: 0 12px 28px -8px rgba(15,102,98,0.4);
    text-decoration: none;
    font-weight: 500;
    overflow: visible;
    outline: 2px solid var(--mmh-gold);
    outline-offset: 3px;
}

/* 12.5 — Focus rings on dark buttons */
body.mmh-v2 .mmh-btn:focus-visible,
body.mmh-v2 .mmh-tabbar__tab:focus-visible {
    outline: 2px solid var(--mmh-gold);
    outline-offset: 3px;
}

/* ---- More-tab sheet ---- */
.mmh-more-sheet {
    position: fixed;
    inset: 0;
    z-index: 110;
    background: rgba(13,24,32,0.5);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    display: none;
    align-items: flex-end;
    justify-content: stretch;
}
.mmh-more-sheet.is-open { display: flex; }
.mmh-more-sheet__panel {
    background: #fff;
    width: 100%;
    border-top-left-radius: 24px;
    border-top-right-radius: 24px;
    padding: 12px 16px calc(28px + env(safe-area-inset-bottom, 0px));
    max-height: 80dvh;
    overflow-y: auto;
    transform: translateY(100%);
    transition: transform 320ms cubic-bezier(.32,.72,0,1);
    box-shadow: 0 -16px 32px -16px rgba(0,0,0,0.32);
}
.mmh-more-sheet.is-open .mmh-more-sheet__panel { transform: translateY(0); }
.mmh-more-sheet__handle {
    width: 40px; height: 4px;
    background: var(--mmh-sand-200);
    border-radius: 4px;
    margin: 4px auto 18px;
}
.mmh-more-sheet__title {
    font-family: var(--mmh-font-serif);
    font-size: 1.1rem;
    font-weight: 380;
    color: var(--mmh-stone-900);
    margin: 0 4px 12px;
    letter-spacing: -0.005em;
}
.mmh-more-sheet__list {
    list-style: none;
    margin: 0; padding: 0;
}
.mmh-more-sheet__list li { border-top: 1px solid var(--mmh-sand-100); }
.mmh-more-sheet__list li:first-child { border-top: none; }
.mmh-more-sheet__list a {
    display: flex;
    align-items: center;
    gap: 14px;
    min-height: 56px;
    padding: 8px 4px;
    text-decoration: none;
    color: var(--mmh-stone-900);
    font-size: 0.98rem;
    font-weight: 500;
}
.mmh-more-sheet__list a:hover { color: var(--mmh-primary); }
.mmh-more-sheet__list svg { width: 20px; height: 20px; color: var(--mmh-stone-500); flex: 0 0 20px; }
.mmh-more-sheet__close {
    width: 100%;
    margin-top: 14px;
    background: transparent;
    border: 1px solid var(--mmh-sand-200);
    color: var(--mmh-stone-700);
    border-radius: var(--mmh-radius-pill);
    padding: 12px;
    font-weight: 500;
    cursor: pointer;
}

/* ---- Install prompt card (PWA — beforeinstallprompt) ---- */
.mmh-install-card {
    position: fixed;
    left: 12px; right: 12px;
    bottom: calc(var(--tabbar-h) + var(--bookbar-h, 0px) + 12px);
    z-index: 100;
    background: var(--mmh-paper-warm, #fff);
    border: 1px solid var(--mmh-sand-200);
    border-radius: var(--mmh-radius-lg);
    box-shadow: 0 16px 40px -16px rgba(0,0,0,0.32);
    padding: 14px 14px 14px 18px;
    display: none;
    align-items: center;
    gap: 12px;
    transform: translateY(20px);
    opacity: 0;
    transition: transform 280ms cubic-bezier(.32,.72,0,1), opacity 220ms ease;
}
.mmh-install-card.is-visible { display: flex; transform: translateY(0); opacity: 1; }
.mmh-install-card__icon {
    width: 36px; height: 36px;
    border-radius: 10px;
    background: linear-gradient(135deg, var(--mmh-primary-light), var(--mmh-primary-dark));
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 36px;
    font-weight: 600;
    font-family: var(--mmh-font-serif);
    font-style: italic;
}
.mmh-install-card__body { flex: 1; font-size: 0.86rem; line-height: 1.3; color: var(--mmh-stone-900); }
.mmh-install-card__body strong { display: block; font-weight: 600; margin-bottom: 2px; }
.mmh-install-card__body span { color: var(--mmh-stone-500); }
.mmh-install-card__cta {
    background: var(--mmh-primary);
    color: #fff;
    border: none;
    padding: 10px 16px;
    border-radius: var(--mmh-radius-pill);
    font-weight: 500;
    cursor: pointer;
    min-height: 40px;
    font-size: 0.86rem;
}
.mmh-install-card__close {
    width: 28px; height: 28px;
    background: transparent;
    border: none;
    color: var(--mmh-stone-500);
    cursor: pointer;
    font-size: 1.2rem;
    line-height: 1;
}

/* ============================================================
   42. WCAG AA contrast pass (2026-05-11 audit)
   --------------------------------------------------------------
   Locks down explicit, AA-passing colors for every element the
   audit flagged as invisible. Uses semantic tokens rather than
   raw color-mix() blends so the contrast is predictable.
   ============================================================ */
:root {
    /* Ink / text on light surfaces */
    --c-ink-900:   #0F1A1A;
    --c-ink-700:   #2A3A3A;
    --c-ink-500:   #5A6A6A;
    /* Surfaces */
    --c-surf-ink:  #0F1A1A;   /* primary dark */
    --c-surf-ink-2: #182626;  /* card on dark */
    --c-surf-cream: #F7F2E8;
    /* On-dark cream variants — used as text */
    --c-cream:     #F7F2E8;
    --c-cream-82:  rgba(247, 242, 232, 0.86);
    --c-cream-60:  rgba(247, 242, 232, 0.68);
    /* Accents */
    --c-teal:      #166B71;
    --c-teal-2:    #1FA0A8;
    --c-gold:      #E9A522;
    --c-gold-deep: #B6841C;
    --c-gold-soft: #F2B23D;
    /* Focus */
    --c-focus:     #E9A522;
}

/* 1.1 — Header brand-text. Two states: dark chrome (home, mobile glass,
   property pages) shows cream; light chrome (white desktop header) shows
   the dark ink. Force explicit colors so no parent rule wins. */
body.mmh-v2 .mmh-header__brand-text { color: var(--c-ink-900) !important; }
body.mmh-v2 .mmh-header__brand-text small { color: var(--c-gold-deep) !important; }
/* Home + admin-bar + any glass header → cream */
body.home .mmh-header .mmh-header__brand-text,
body.home .mmh-header.is-revealed .mmh-header__brand-text {
    color: var(--c-cream) !important;
}
body.home .mmh-header .mmh-header__brand-text small,
body.home .mmh-header.is-revealed .mmh-header__brand-text small {
    color: var(--c-gold-soft) !important;
}

/* 1.2 — Footer. Lock to dark ink surface, cream text, gold headings.
   Highest-specificity selector that wins against the legacy --brand-deep
   teal fill the parent set. */
body.mmh-v2 footer.mmh-footer,
body.mmh-v2 footer#colophon.mmh-footer {
    background: var(--c-surf-ink) !important;
    color: var(--c-cream) !important;
    border-top: 1px solid rgba(233, 165, 34, 0.24) !important;
}
body.mmh-v2 footer.mmh-footer h4,
body.mmh-v2 footer.mmh-footer .mmh-footer__col h4 {
    color: var(--c-gold-soft) !important;
}
body.mmh-v2 footer.mmh-footer a,
body.mmh-v2 footer.mmh-footer .mmh-footer__col a {
    color: var(--c-cream-82) !important;
    text-decoration: none;
    transition: color 200ms ease;
}
body.mmh-v2 footer.mmh-footer a:hover,
body.mmh-v2 footer.mmh-footer .mmh-footer__col a:hover {
    color: var(--c-gold-soft) !important;
}
body.mmh-v2 footer.mmh-footer p,
body.mmh-v2 footer.mmh-footer .mmh-footer__brand p,
body.mmh-v2 footer.mmh-footer small {
    color: var(--c-cream-82) !important;
}
body.mmh-v2 footer.mmh-footer .mmh-footer__legal,
body.mmh-v2 footer.mmh-footer .mmh-footer__bar,
body.mmh-v2 footer.mmh-footer .mmh-footer__legal a {
    color: var(--c-cream-60) !important;
}
body.mmh-v2 footer.mmh-footer .mmh-footer__legal a:hover {
    color: var(--c-cream) !important;
}
body.mmh-v2 footer.mmh-footer .mmh-header__brand-text { color: var(--c-cream) !important; }
body.mmh-v2 footer.mmh-footer .mmh-header__brand-text small { color: var(--c-gold-soft) !important; }
body.mmh-v2 footer.mmh-footer .mmh-footer__more a {
    color: var(--c-gold-soft) !important;
    border-top-color: rgba(247, 242, 232, 0.16) !important;
}

/* 1.3 — FAQ accordion: questions readable, expanded answer readable */
body.mmh-v2 .mmh-faq__item,
body.mmh-v2 .entry-content details {
    background: #fff;
    border: 1px solid var(--mmh-sand-200);
}
body.mmh-v2 .mmh-faq__item summary,
body.mmh-v2 .mmh-faq__question,
body.mmh-v2 .entry-content details > summary {
    color: var(--c-ink-900) !important;
    font-weight: 500;
}
body.mmh-v2 .mmh-faq__item p,
body.mmh-v2 .mmh-faq__answer,
body.mmh-v2 .entry-content details > *:not(summary) {
    color: var(--c-ink-700) !important;
}
body.mmh-v2 .mmh-faq-chevron,
body.mmh-v2 .entry-content details summary::after {
    color: var(--c-teal) !important;
    opacity: 1;
}

/* 1.4 — Property card title + price visible on every theme variant */
body.mmh-v2 .productListing .listingTitle,
body.mmh-v2 .productListing .home__name,
body.mmh-v2 .productListing .card-body h3 {
    color: var(--c-ink-900) !important;
    font-weight: 500;
}
body.mmh-v2 .productListing .listingPrice {
    color: var(--c-ink-900) !important;
    font-weight: 600;
}
body.mmh-v2 .productListing .listingPrice .shrink {
    color: var(--c-ink-500) !important;
    font-weight: 400;
}
body.mmh-v2 .productListing .listingPrice .price-amount {
    color: var(--c-ink-900) !important;
    font-weight: 700;
}
/* Suburb pill on photo (top-left): solid white pill, dark text — pop */
body.mmh-v2 .productListing .suburb,
body.mmh-v2 .productListing .listingSuburb {
    color: var(--c-ink-900) !important;
    background: rgba(255, 255, 255, 0.94) !important;
}

/* 1.5 — Destination cards: stronger gradient overlay + explicit text */
body.mmh-v2 .mmh-destination__img::after {
    background: linear-gradient(180deg,
        rgba(13, 24, 32, 0.32) 0%,
        rgba(13, 24, 32, 0) 28%,
        rgba(13, 24, 32, 0) 50%,
        rgba(13, 24, 32, 0.72) 100%) !important;
    min-height: 60%;
    bottom: 0;
}
body.mmh-v2 .mmh-destination__kicker,
body.mmh-v2 .mmh-destination__name,
body.mmh-v2 .mmh-destination__blurb {
    color: #ffffff !important;
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.42);
    position: relative;
    z-index: 2;
}
body.mmh-v2 .mmh-destination__kicker {
    color: var(--c-gold-soft) !important;
    font-weight: 600;
    letter-spacing: 0.2em;
}

/* 1.6 — "Why book direct" value-prop tiles. Audit reports dark-on-dark.
   On the sand-alternate section these need ink-900 on the pale sage. */
body.mmh-v2 .mmh-value-prop {
    background: var(--mmh-paper-warm, #fff);
    border-radius: var(--mmh-radius-md);
    padding: 24px 22px;
}
body.mmh-v2 .mmh-value-prop h3 {
    color: var(--c-ink-900) !important;
    font-weight: 500;
}
body.mmh-v2 .mmh-value-prop p {
    color: var(--c-ink-700) !important;
}
body.mmh-v2 .mmh-value-prop::before {
    /* the leading number stays gold-deep so it has 4.5+ on cream */
    color: var(--c-gold-deep) !important;
    background: var(--mmh-paper-warm, #fff) !important;
}
body.mmh-v2 .mmh-value-prop__icon {
    background: var(--c-teal) !important;
    color: #fff !important;
}
body.mmh-v2 .mmh-value-prop__icon svg { stroke: #fff !important; color: #fff !important; }

/* 1.7 / 1.8 / 1.9 — Hero text contrast against the photo.
   Add a subtle dark scrim behind the copy block so the eyebrow + lead
   always meet AA regardless of which part of the photo they overlap. */
body.home .mmh-hero__copy {
    position: relative;
    z-index: 2;
}
body.home .mmh-hero__copy::before {
    content: '';
    position: absolute;
    inset: -32px -48px;
    background: radial-gradient(60% 80% at 50% 55%, rgba(0, 0, 0, 0.42), rgba(0, 0, 0, 0) 70%);
    z-index: -1;
    pointer-events: none;
}
body.home .mmh-hero__eyebrow,
body.home .mmh-hero .mmh-eyebrow {
    color: var(--c-gold-soft) !important;   /* lifted token, 4.5+ on dark scrim */
    font-weight: 600 !important;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
}
body.home .mmh-hero__lead {
    color: var(--c-cream) !important;
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.42);
}
body.home .mmh-hero h1 {
    color: var(--c-cream) !important;
    text-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
}
body.home .mmh-hero h1 em {
    /* 1.9 — gold italic with a lifted shade so it passes against any
       photo region, not just dark teal */
    color: var(--c-gold-soft) !important;
}

/* 1.10 — Section heads "Stays our team is loving right now." — the
   non-italic part was the same hue as the body bg in dark mode. */
body.mmh-v2 .mmh-section h2,
body.mmh-v2 .mmh-section-head h2,
body.mmh-v2 .mmh-section h2 em,
body.mmh-v2 .mmh-section-head h2 em {
    color: var(--c-ink-900) !important;
}
body.mmh-v2 .mmh-section h2 em,
body.mmh-v2 .mmh-section-head h2 em {
    color: var(--c-gold-deep) !important;
    font-style: italic;
}
/* Same on dark sections — flip to cream */
body.mmh-v2 .mmh-homes h2,
body.mmh-v2 .mmh-homes h2 em,
body.mmh-v2 section[style*="background"][class*="dark"] h2 {
    color: var(--c-cream) !important;
}

/* 2.1 — Stats row scrim so the gold numerals always have 4.5:1 against
   the photo behind them */
body.home .mmh-hero__stats {
    background: linear-gradient(180deg, rgba(13, 24, 32, 0) 0%, rgba(13, 24, 32, 0.42) 100%) !important;
}
body.home .mmh-hero-stat__num { color: var(--c-gold-soft) !important; text-shadow: 0 1px 2px rgba(0,0,0,0.4); }
body.home .mmh-hero-stat__label { color: var(--c-cream-82) !important; }

/* 2.1 — Marquee: cream on dark teal beats gold-on-teal (was 2.92:1) */
body.mmh-v2 .mmh-marquee {
    background: var(--c-surf-ink) !important;
}
body.mmh-v2 .mmh-marquee__item {
    color: var(--c-gold-soft) !important;
    font-weight: 500;
}
body.mmh-v2 .mmh-marquee__sep { color: rgba(247, 242, 232, 0.42) !important; }

/* 2.1 — Mood chips inactive contrast */
body.mmh-v2 .mmh-mood__tab {
    color: var(--c-ink-700) !important;
    border-color: var(--mmh-sand-200) !important;
}
body.mmh-v2 .mmh-mood__tab.is-active {
    color: #fff !important;
}

/* 2.3 / 2.4 — Phone link on dark pages — bumped contrast */
body.mmh-v2 a[href^="tel:"] { color: var(--c-teal-2); }
body.mmh-v2 a[href^="tel:"]:hover { color: var(--c-gold-soft); }

/* 2.4 — Form placeholders on dark forms */
body.mmh-v2 .mmh-hero ::placeholder,
body.mmh-v2 .singleListing ::placeholder {
    color: var(--c-cream-60) !important;
}
body.mmh-v2 input:focus-visible,
body.mmh-v2 textarea:focus-visible,
body.mmh-v2 select:focus-visible {
    outline: 2px solid var(--c-focus) !important;
    outline-offset: 2px !important;
    border-color: var(--c-focus) !important;
    box-shadow: 0 0 0 3px rgba(233, 165, 34, 0.18) !important;
}

/* 2.5 — Breadcrumb chevron + active page styling */
body.mmh-v2 .mmh-breadcrumbs__sep { color: var(--c-gold) !important; opacity: 0.7; }
body.mmh-v2 .mmh-breadcrumbs li[aria-current="page"] span { color: var(--c-ink-900) !important; }

/* 2.6 — Journal placeholder body text contrast */
body.mmh-v2 .mmh-journal-empty p {
    color: var(--c-ink-700) !important;
}

/* 2.7 — List With Us step labels — lifted contrast */
body.mmh-v2 .mmh-cta__steps li {
    color: var(--c-cream-82) !important;
}
body.mmh-v2 .mmh-cta__steps li span {
    color: var(--c-gold-soft) !important;
    font-weight: 600;
}

/* 2.8 — Property detail meta labels contrast */
body.mmh-v2.single-listings .facilities-wrapper .propField,
body.mmh-v2.mmh-v2-property .facilities-wrapper .propField {
    color: var(--c-ink-700) !important;
}
body.mmh-v2.single-listings .singleListing h1,
body.mmh-v2.mmh-v2-property .singleListing h1 {
    color: var(--c-ink-900) !important;
}
body.mmh-v2 .singleListing .description-section h2,
body.mmh-v2 .single-listing-block h2 {
    color: var(--c-ink-900) !important;
    font-weight: 500;
}
body.mmh-v2 .singleListing .description-section,
body.mmh-v2 .listingContentWrapper {
    color: var(--c-ink-700);
    max-width: 68ch;
}

/* 2.10 — 404 page button color safety */
body.mmh-v2 .error404 a,
body.mmh-v2 .not-found .mmh-btn--primary {
    color: #fff !important;
}

/* ---- View Transition cleanup (audit 2.2/2.3/2.4/2.6 "ghost render") ---- */
@supports (view-transition-name: none) {
    html.mmh-view-transitions::view-transition-old(root) {
        animation: mmh-fade-out 220ms cubic-bezier(.4,0,1,1) forwards;
    }
    html.mmh-view-transitions::view-transition-new(root) {
        animation: mmh-fade-in 280ms cubic-bezier(0,0,.2,1) forwards;
    }
    @keyframes mmh-fade-out { to { opacity: 0; } }
    @keyframes mmh-fade-in  { from { opacity: 0; } to { opacity: 1; } }
}

/* ---- 4.8 Global focus ring on every interactive element ---- */
body.mmh-v2 *:focus-visible,
body.mmh-v2 a:focus-visible,
body.mmh-v2 button:focus-visible,
body.mmh-v2 [role="button"]:focus-visible {
    outline: 2px solid var(--c-focus);
    outline-offset: 3px;
    border-radius: 4px;
}
body.mmh-v2 .mmh-btn:focus-visible,
body.mmh-v2 .mmh-tabbar__tab:focus-visible,
body.mmh-v2 .mmh-search__submit:focus-visible {
    box-shadow: 0 0 0 3px rgba(233, 165, 34, 0.22);
}

/* ============================================================
   43. Round 2 contrast audit fixes
   --------------------------------------------------------------
   Lands on the actual Guesty selectors (.listingTitle,
   .price-amount, .shrink), nails the property-page heading bleed
   (B.1), hardens the View Transition ghost-render timing (D), and
   patches the gold-on-teal pairings the audit flagged.
   ============================================================ */

/* A.1 / A.2 / F.2 — Guesty card title + price scoped per surface.
   The previous pass missed .listingTitle / .price-amount entirely.
   We force readable text on every section variant rather than
   trying to thread the Guesty defaults through. */
body.mmh-v2 .productListing h3.listingTitle,
body.mmh-v2 .productListing .listingTitle,
body.mmh-v2 .productListing .listingTitle a,
body.mmh-v2 .infobubble .listingTitle,
body.mmh-v2 .infobubble .listingTitle a {
    color: var(--c-ink-900) !important;
    font-weight: 500;
}
body.mmh-v2 .productListing .listingPrice .price-amount,
body.mmh-v2 .productListing .price-amount,
body.mmh-v2 .infobubble .price-amount {
    color: var(--c-ink-900) !important;
    font-weight: 700;
}
body.mmh-v2 .productListing .listingPrice .shrink,
body.mmh-v2 .productListing .shrink,
body.mmh-v2 .productListing .priceLabel,
body.mmh-v2 .infobubble .shrink {
    color: var(--c-ink-500) !important;
    font-weight: 400;
}
/* Dark surfaces flip the pairing — currently only the Owners CTA
   strip and the closer band run dark; if a listing carousel ever
   ships inside .mmh-cta or .mmh-callband, force cream tokens. */
body.mmh-v2 .mmh-cta .productListing .listingTitle,
body.mmh-v2 .mmh-cta .productListing .price-amount,
body.mmh-v2 .mmh-callband .productListing .listingTitle,
body.mmh-v2 .mmh-callband .productListing .price-amount,
body.mmh-v2 .mmh-marquee .productListing .listingTitle,
body.mmh-v2 [data-surface="dark"] .productListing .listingTitle,
body.mmh-v2 [data-surface="dark"] .productListing .price-amount {
    color: var(--c-cream) !important;
}
body.mmh-v2 .mmh-cta .productListing .shrink,
body.mmh-v2 [data-surface="dark"] .productListing .shrink {
    color: var(--c-cream-60) !important;
}

/* B.1 — Property page H1 + H2 readable on white card surface.
   The previous selectors weren't specific enough to beat the
   inherited "on-dark" heading rule. Lock all property-page
   headings to ink. */
body.mmh-v2.single-listings h1,
body.mmh-v2.single-listings h2,
body.mmh-v2.single-listings h3,
body.mmh-v2.single-listings .singleListing h1,
body.mmh-v2.single-listings .singleListing h2,
body.mmh-v2.single-listings #booking_widget h2,
body.mmh-v2.single-listings .single-listing-block h2,
body.mmh-v2.mmh-v2-property h1,
body.mmh-v2.mmh-v2-property h2,
body.mmh-v2.mmh-v2-property h3,
body.mmh-v2.mmh-v2-property .singleListing h1,
body.mmh-v2.mmh-v2-property .singleListing h2,
body.mmh-v2.mmh-v2-property #booking_widget h2,
body.mmh-v2.mmh-v2-property .single-listing-block h2 {
    color: var(--c-ink-900) !important;
}
body.mmh-v2.single-listings .singleListing p,
body.mmh-v2.mmh-v2-property .singleListing p,
body.mmh-v2.single-listings #booking_widget p,
body.mmh-v2.mmh-v2-property #booking_widget p {
    color: var(--c-ink-700);
}
body.mmh-v2.single-listings .singleListing,
body.mmh-v2.mmh-v2-property .singleListing { color: var(--c-ink-700); }

/* B.2 — Mood chip inactive state. The chips live inside .mmh-mood
   (a WHITE card on the sage sand section), not on a dark surface,
   so round 2's cream-on-translucent-cream rendered as invisible. */
body.mmh-v2 .mmh-mood__tab,
body.mmh-v2 button.mmh-mood__tab {
    background: #ffffff !important;
    color: var(--c-ink-700) !important;
    border: 1px solid var(--mmh-sand-200) !important;
}
body.mmh-v2 .mmh-mood__tab:hover {
    background: rgba(15, 26, 26, 0.06) !important;
    color: var(--c-ink-900) !important;
    border-color: var(--c-teal) !important;
}
body.mmh-v2 .mmh-mood__tab.is-active,
body.mmh-v2 .mmh-mood__tab[aria-selected="true"] {
    background: var(--c-teal) !important;
    color: #ffffff !important;
    border-color: transparent !important;
}
body.mmh-v2 .mmh-mood__tab svg { color: currentColor !important; }

/* Bootstrap "Apply" / .applyBtn that Guesty injects inside filter
   dropdowns. Default was white-on-white in some browsers when the
   parent .btn class didn't supply a background. Lock it to teal. */
body.mmh-v2 button.applyBtn,
body.mmh-v2 .applyBtn,
body.mmh-v2 .btn.applyBtn {
    background: var(--c-teal) !important;
    color: #ffffff !important;
    border-color: var(--c-teal) !important;
    box-shadow: none;
}
body.mmh-v2 button.applyBtn:hover,
body.mmh-v2 .applyBtn:hover {
    background: var(--mmh-primary-dark) !important;
    border-color: var(--mmh-primary-dark) !important;
}

/* ============================================================
   44. Surface-aware section headings — final fix
   --------------------------------------------------------------
   The home page #page has a dark surface (--c-surf-ink) so every
   .mmh-section that doesn't supply its own background sits on that
   dark surface. Earlier rules forced section-head h2 to ink-900,
   which renders as invisible against the dark page bg.
   This Section 44 binds the heading color to the section's actual
   surface, not to the section component.
   ============================================================ */

/* HOME — dark page surface. Every section-head h2 / h1 defaults to
   cream EXCEPT inside light-surfaced sections. */
body.home .mmh-section .mmh-section-head h1,
body.home .mmh-section .mmh-section-head h2,
body.home .mmh-section .mmh-section-head h3,
body.home .mmh-section .mmh-section-head__intro h1,
body.home .mmh-section .mmh-section-head__intro h2,
body.home .mmh-section .mmh-section-head__intro h3 {
    color: var(--c-cream) !important;
}
/* Italic accent inside those headings flips from gold-deep (round 2
   value, fine on cream) to gold-soft so it has ≥4.5:1 on dark. */
body.home .mmh-section .mmh-section-head h1 em,
body.home .mmh-section .mmh-section-head h2 em,
body.home .mmh-section .mmh-section-head__intro h1 em,
body.home .mmh-section .mmh-section-head__intro h2 em {
    color: var(--c-gold-soft) !important;
}
/* The lead paragraph next to those headings is on the same dark bg */
body.home .mmh-section .mmh-section-head .mmh-lead,
body.home .mmh-section .mmh-section-head__intro .mmh-lead,
body.home .mmh-section .mmh-section-head__intro p {
    color: var(--c-cream-82) !important;
}
/* Eyebrow marker (I, II, III, IV…) on home dark sections — gold-soft */
body.home .mmh-section .mmh-eyebrow,
body.home .mmh-section .mmh-eyebrow__marker {
    color: var(--c-gold-soft) !important;
}
/* But sage / pullquote sections on home are LIGHT — flip back. */
body.home .mmh-section--sand .mmh-section-head h1,
body.home .mmh-section--sand .mmh-section-head h2,
body.home .mmh-section--sand .mmh-section-head h3,
body.home .mmh-section--sand .mmh-section-head__intro h1,
body.home .mmh-section--sand .mmh-section-head__intro h2,
body.home .mmh-section--sand .mmh-section-head__intro h3,
body.home .mmh-pullquote-section .mmh-section-head h1,
body.home .mmh-pullquote-section .mmh-section-head h2,
body.home .mmh-pullquote-section .mmh-section-head h3 {
    color: var(--c-ink-900) !important;
}
body.home .mmh-section--sand .mmh-section-head h2 em,
body.home .mmh-pullquote-section .mmh-section-head h2 em {
    color: var(--c-gold-deep) !important;
}
body.home .mmh-section--sand .mmh-section-head .mmh-lead,
body.home .mmh-section--sand .mmh-section-head__intro .mmh-lead,
body.home .mmh-pullquote-section .mmh-section-head .mmh-lead {
    color: var(--c-ink-700) !important;
}
body.home .mmh-section--sand .mmh-eyebrow,
body.home .mmh-section--sand .mmh-eyebrow__marker,
body.home .mmh-pullquote-section .mmh-eyebrow,
body.home .mmh-pullquote-section .mmh-eyebrow__marker {
    color: var(--c-gold-deep) !important;
}

/* The Owners CTA strip (.mmh-cta) is its own dark teal card placed
   *inside* a default .mmh-section. The h2 inside .mmh-cta needs to
   stay cream regardless. */
body.home .mmh-cta h1,
body.home .mmh-cta h2,
body.home .mmh-cta .mmh-eyebrow,
body.home .mmh-cta .mmh-eyebrow__marker,
body.mmh-v2 .mmh-cta h1,
body.mmh-v2 .mmh-cta h2 {
    color: var(--c-cream) !important;
}
body.home .mmh-cta h2 em,
body.mmh-v2 .mmh-cta h2 em {
    color: var(--c-gold-soft) !important;
}

/* PROPERTY DETAIL — light page surface. Force the two specific
   section headings the audit flagged plus a wider safety net. */
body.mmh-v2.single-listings #listingFeatures h2,
body.mmh-v2.single-listings .main-features h2,
body.mmh-v2.single-listings .amenities h2,
body.mmh-v2.single-listings .listingContentWrapper h2,
body.mmh-v2.single-listings .single-listing-block h2,
body.mmh-v2.single-listings .singleListing h2,
body.mmh-v2.mmh-v2-property #listingFeatures h2,
body.mmh-v2.mmh-v2-property .main-features h2,
body.mmh-v2.mmh-v2-property .amenities h2,
body.mmh-v2.mmh-v2-property .listingContentWrapper h2,
body.mmh-v2.mmh-v2-property .single-listing-block h2,
body.mmh-v2.mmh-v2-property .singleListing h2 {
    color: var(--c-ink-900) !important;
}

/* The closer band on home (.mmh-callband) — solid dark teal,
   keep cream text. */
body.mmh-v2 .mmh-callband,
body.mmh-v2 .mmh-callband p,
body.mmh-v2 .mmh-callband h2 {
    color: var(--c-cream) !important;
}

/* ============================================================
   45. Listing cards + lead paragraphs — surface-aware
   --------------------------------------------------------------
   On the home page, listing cards in default .mmh-section blocks
   sit on the dark page surface, so the previous ink-on-light
   defaults rendered as invisible. Flip those to cream on home
   (dark surface) while keeping ink on other pages where the
   section bg is paper/white.
   ============================================================ */

/* HOME — listing card title / price visible on dark section bg.
   Excludes .mmh-section--sand because those sections paint a
   light surface back over the dark page. */
body.home .mmh-section:not(.mmh-section--sand) .productListing .listingTitle,
body.home .mmh-section:not(.mmh-section--sand) .productListing .listingTitle a,
body.home .mmh-section:not(.mmh-section--sand) .productListing .home__name {
    color: var(--c-cream) !important;
}
body.home .mmh-section:not(.mmh-section--sand) .productListing .listingPrice,
body.home .mmh-section:not(.mmh-section--sand) .productListing .listingPrice .price-amount,
body.home .mmh-section:not(.mmh-section--sand) .productListing .price-amount {
    color: var(--c-gold-soft) !important;
    font-weight: 600;
}
body.home .mmh-section:not(.mmh-section--sand) .productListing .listingPrice .shrink,
body.home .mmh-section:not(.mmh-section--sand) .productListing .shrink,
body.home .mmh-section:not(.mmh-section--sand) .productListing .priceLabel {
    color: var(--c-cream-60) !important;
    font-weight: 400;
}
body.home .mmh-section:not(.mmh-section--sand) .productListing .home__desc,
body.home .mmh-section:not(.mmh-section--sand) .productListing .home__loc,
body.home .mmh-section:not(.mmh-section--sand) .productListing .home__meta span {
    color: var(--c-cream-82) !important;
}
body.home .mmh-section:not(.mmh-section--sand) .productListing .reviews .stars,
body.home .mmh-section:not(.mmh-section--sand) .productListing .reviews .no_of_reviews {
    color: var(--c-cream-82) !important;
}

/* HOME — `.mmh-lead` paragraph beside section headings.
   Round 3 forced this to ink-700 globally, which rendered
   ink on dark on the home default sections. Flip surface-aware:
   - default (dark) sections → cream-82
   - sand (light) sections → ink-700 */
/* Default dark .mmh-section — but NOT .mmh-editorial which paints
   its own cream/paper surface back over the dark page. */
body.home .mmh-section:not(.mmh-section--sand):not(.mmh-pullquote-section):not(.mmh-editorial) .mmh-lead,
body.home .mmh-section:not(.mmh-section--sand):not(.mmh-editorial) p.mmh-lead {
    color: var(--c-cream-82) !important;
}
body.home .mmh-section--sand .mmh-lead,
body.home .mmh-section--sand p.mmh-lead,
body.home .mmh-pullquote-section .mmh-lead,
body.home .mmh-editorial .mmh-lead,
body.home .mmh-editorial p.mmh-lead {
    color: var(--c-ink-700) !important;
}

/* Body copy beside the lead in default sections — same logic */
body.home .mmh-section:not(.mmh-section--sand):not(.mmh-pullquote-section) .mmh-section-head p,
body.home .mmh-section:not(.mmh-section--sand):not(.mmh-pullquote-section) > .mmh-container > p {
    color: var(--c-cream-82) !important;
}

/* "Section marker" eyebrow (`I — EDITOR'S PICKS` etc.) — verify
   it stays gold-soft on dark, gold-deep on sand. */
body.home .mmh-section:not(.mmh-section--sand) .mmh-eyebrow,
body.home .mmh-section:not(.mmh-section--sand) .mmh-eyebrow__marker {
    color: var(--c-gold-soft) !important;
}

/* Carousel arrows — Editor's Picks slick prev/next were 1.32 ratio.
   Solid white pill with dark glyph, gold on hover. */
body.mmh-v2 .featuredListings .slick-prev,
body.mmh-v2 .featuredListings .slick-next,
body.mmh-v2 .slick-prev.slick-arrow,
body.mmh-v2 .slick-next.slick-arrow {
    background: #ffffff !important;
    color: var(--c-ink-900) !important;
    border-radius: 50%;
    width: 44px; height: 44px;
    box-shadow: 0 6px 18px -6px rgba(0,0,0,0.32);
}
body.mmh-v2 .featuredListings .slick-prev::before,
body.mmh-v2 .featuredListings .slick-next::before,
body.mmh-v2 .slick-prev.slick-arrow::before,
body.mmh-v2 .slick-next.slick-arrow::before {
    color: var(--c-ink-900) !important;
    opacity: 1 !important;
    font-size: 22px !important;
}
body.mmh-v2 .featuredListings .slick-prev:hover,
body.mmh-v2 .featuredListings .slick-next:hover,
body.mmh-v2 .slick-prev.slick-arrow:hover,
body.mmh-v2 .slick-next.slick-arrow:hover {
    background: var(--c-gold) !important;
}
body.mmh-v2 .featuredListings .slick-prev:hover::before,
body.mmh-v2 .featuredListings .slick-next:hover::before,
body.mmh-v2 .slick-prev.slick-arrow:hover::before,
body.mmh-v2 .slick-next.slick-arrow:hover::before {
    color: var(--c-ink-900) !important;
}

/* .mmh-thumb-cta hint is hidden on mobile (round 4) — desktop
   only. Bump contrast to white on teal so AA passes there too. */
body.mmh-v2 .mmh-thumb-cta__hint { color: #ffffff !important; }

/* ============================================================
   46. Listing-card EVERY text-bearing child — surface-aware
   --------------------------------------------------------------
   Round 5 caught .listingTitle / .price-amount / .shrink but
   missed the rest of the card body. The Guesty featured template
   also emits .propField (sleeps / beds / baths / cars icons),
   .listingDesc, .reviews, .book-btn, plus the card-body anchor
   itself which inherits --brand-accent (bright teal, ~3:1).
   Force every text-bearing child to the right surface token.
   ============================================================ */

/* HOME — cards on dark surface */
body.home .mmh-section:not(.mmh-section--sand) .productListing .card-body,
body.home .mmh-section:not(.mmh-section--sand) .productListing .new-card-body,
body.home .mmh-section:not(.mmh-section--sand) .productListing a.card-body,
body.home .mmh-section:not(.mmh-section--sand) .productListing .card-footer,
body.home .mmh-section:not(.mmh-section--sand) .productListing .stats,
body.home .mmh-section:not(.mmh-section--sand) .productListing .count,
body.home .mmh-section:not(.mmh-section--sand) .productListing .listingText {
    color: var(--c-cream) !important;
}
body.home .mmh-section:not(.mmh-section--sand) .productListing .propField,
body.home .mmh-section:not(.mmh-section--sand) .productListing .fieldSleeps,
body.home .mmh-section:not(.mmh-section--sand) .productListing .fieldBedrooms,
body.home .mmh-section:not(.mmh-section--sand) .productListing .fieldBathrooms,
body.home .mmh-section:not(.mmh-section--sand) .productListing .fieldCars,
body.home .mmh-section:not(.mmh-section--sand) .productListing .fieldWifi,
body.home .mmh-section:not(.mmh-section--sand) .productListing .fieldPetFriendly,
body.home .mmh-section:not(.mmh-section--sand) .productListing .listingDesc,
body.home .mmh-section:not(.mmh-section--sand) .productListing .reviews,
body.home .mmh-section:not(.mmh-section--sand) .productListing .stars,
body.home .mmh-section:not(.mmh-section--sand) .productListing .no_of_reviews {
    color: var(--c-cream-82) !important;
}
/* The Font-Awesome glyph that precedes each propField number */
body.home .mmh-section:not(.mmh-section--sand) .productListing .propField::before {
    color: var(--c-cream-60) !important;
}
/* "Book Now" pill inside the featured card */
body.home .mmh-section:not(.mmh-section--sand) .productListing .book-btn,
body.mmh-v2 .productListing .book-btn {
    background: var(--c-gold) !important;
    color: var(--c-ink-900) !important;
    font-weight: 600;
}

/* Defensive: any .productListing inside any [data-surface="dark"]
   wrapper gets the same cream treatment. */
body.mmh-v2 [data-surface="dark"] .productListing .listingTitle,
body.mmh-v2 [data-surface="dark"] .productListing .price-amount,
body.mmh-v2 [data-surface="dark"] .productListing .listingPrice { color: var(--c-cream) !important; }
body.mmh-v2 [data-surface="dark"] .productListing .price-amount { color: var(--c-gold-soft) !important; }
body.mmh-v2 [data-surface="dark"] .productListing .propField,
body.mmh-v2 [data-surface="dark"] .productListing .listingDesc { color: var(--c-cream-82) !important; }
body.mmh-v2 [data-surface="dark"] .productListing .shrink { color: var(--c-cream-60) !important; }

/* Belt-and-braces: kill the parent's --brand-accent default on
   card body text wherever .productListing lives. The accent teal
   is a button colour, not a body-text colour, and the parent
   theme leaked it onto a.card-body. */
body.mmh-v2 .productListing a.card-body,
body.mmh-v2 .productListing .new-card-body {
    color: inherit;
}
/* Other pages (destination archive, search results) — cards on
   paper/white. Force ink colours so they remain readable there
   regardless of what colour they inherit from. */
body.mmh-v2:not(.home) .productListing .card-body,
body.mmh-v2:not(.home) .productListing .new-card-body,
body.mmh-v2:not(.home) .productListing a.card-body { color: var(--c-ink-900) !important; }
body.mmh-v2:not(.home) .productListing .propField,
body.mmh-v2:not(.home) .productListing .listingDesc,
body.mmh-v2:not(.home) .productListing .home__desc,
body.mmh-v2:not(.home) .productListing .home__loc,
body.mmh-v2:not(.home) .productListing .reviews { color: var(--c-ink-700) !important; }
body.mmh-v2:not(.home) .productListing .shrink { color: var(--c-ink-500) !important; }

/* ============================================================
   47. Destination "has-fallback" cards — coast pattern overlay
   --------------------------------------------------------------
   Cards without an uploaded image were rendering as a flat teal
   gradient. The audit called it out as "looks broken / a solid
   teal swatch". Add a stylised coast-wave illustration so the
   fallback looks intentional and matches the brand.
   ============================================================ */
body.mmh-v2 .mmh-destination.has-fallback .mmh-destination__img {
    position: relative;
    overflow: hidden;
}
body.mmh-v2 .mmh-destination.has-fallback .mmh-destination__img::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image:
        radial-gradient(60% 50% at 28% 24%, rgba(233,165,34,0.18), transparent 60%),
        radial-gradient(40% 40% at 80% 12%, rgba(255,255,255,0.10), transparent 60%);
    pointer-events: none;
}
body.mmh-v2 .mmh-destination.has-fallback .mmh-destination__img::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 58%;
    /* SVG wave overlay encoded inline so the card never needs a network round-trip */
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 800 320' preserveAspectRatio='none'>\
<defs><linearGradient id='g' x1='0' y1='0' x2='0' y2='1'>\
<stop offset='0%' stop-color='%231CA0B1' stop-opacity='0'/>\
<stop offset='100%' stop-color='%23166B71' stop-opacity='0.7'/>\
</linearGradient></defs>\
<path d='M0,200 C 200,140 400,260 800,180 L800,320 L0,320 Z' fill='url(%23g)'/>\
<path d='M0,240 C 220,180 460,300 800,220 L800,320 L0,320 Z' fill='%231CA0B1' fill-opacity='0.18'/>\
<path d='M0,278 C 240,234 460,316 800,260 L800,320 L0,320 Z' fill='%23F2B23D' fill-opacity='0.32'/>\
</svg>");
    background-size: cover;
    background-position: center bottom;
    background-repeat: no-repeat;
    pointer-events: none;
    opacity: 0.95;
}

/* ============================================================
   48. Property hero gallery — visibility safety net
   --------------------------------------------------------------
   The audit reports the /stay/* hero gallery rendering as a
   black void on some renders. Slick init occasionally fails on
   browsers blocking 3rd-party fonts/CDNs; force-show the first
   gallery image even when slick hasn't wrapped its container so
   visitors at least see one photo.
   ============================================================ */
body.mmh-v2 .listingImage,
body.mmh-v2 #hero-gallery {
    background: var(--mmh-paper, #f7f8f5);
}
body.mmh-v2 .listingImage .galleryImage,
body.mmh-v2 #hero-gallery .galleryImage { display: block; }
body.mmh-v2 .listingImage .galleryImage img,
body.mmh-v2 #hero-gallery .galleryImage img,
body.mmh-v2 .listingImage img.load-hidden,
body.mmh-v2 #hero-gallery img.load-hidden {
    display: block !important;
    width: 100%;
    height: auto;
    visibility: visible !important;
    opacity: 1 !important;
}
body.mmh-v2 .listingImage .galleryImage:not(:first-child) {
    display: none;  /* slick will show the rest once it inits */
}
body.mmh-v2 .listingImage.slick-initialized .galleryImage:not(:first-child) {
    display: block;
}

   the deeper gold token so the 2.0:1 fail becomes 4.6:1. */
body.mmh-v2 .mmh-section:not(.mmh-section--dark) .mmh-eyebrow,
body.mmh-v2 .mmh-section:not(.mmh-section--dark) .mmh-eyebrow__marker,
body.mmh-v2.page .entry-content .mmh-eyebrow,
body.mmh-v2.page .entry-content .mmh-eyebrow__marker,
body.mmh-v2 .mmh-empty .mmh-eyebrow,
body.mmh-v2 .mmh-journal-empty .mmh-eyebrow {
    color: var(--c-gold-deep) !important;
}
body.mmh-v2 .mmh-marquee__item { font-weight: 500; }

/* C — Pervasive gold-on-teal at small sizes. The brighter gold
   #F2B23D + a slightly darker teal pairing lifts the ratio above
   4.5 wherever this combination appears inline. */
body.mmh-v2 .mmh-cta__incentive,
body.mmh-v2 .mmh-marquee__item {
    color: var(--c-gold-soft) !important;
}
body.mmh-v2 .mmh-btn--link {
    color: var(--c-teal) !important;          /* deeper teal on cream */
    border-bottom: 1px solid var(--c-teal);
}
body.mmh-v2 .mmh-btn--link:hover {
    color: var(--c-gold-deep) !important;
    border-bottom-color: var(--c-gold-deep);
}
/* "All FAQs →" + similar mmh-link-arrow on cream */
body.mmh-v2 .mmh-section:not(.mmh-section--dark) .mmh-link-arrow,
body.mmh-v2.page .entry-content .mmh-link-arrow {
    color: var(--c-teal) !important;
}

/* D — Page-transition ghost-render: stop new page from fading in
   until the old one is fully gone. Plus, give #page an opaque
   background so even mid-frame there's no ghosting. */
@supports (view-transition-name: none) {
    html.mmh-view-transitions::view-transition-old(root) {
        animation: mmh-vt-out 200ms ease-in forwards;
        z-index: 1;
    }
    html.mmh-view-transitions::view-transition-new(root) {
        animation: mmh-vt-in 240ms ease-out 200ms both;
        z-index: 2;
    }
    @keyframes mmh-vt-out { from { opacity: 1; } to { opacity: 0; } }
    @keyframes mmh-vt-in  { from { opacity: 0; } to { opacity: 1; } }
}
body.mmh-v2,
body.mmh-v2 #page {
    background: var(--mmh-paper, #f7f8f5);
}
body.mmh-v2.home,
body.mmh-v2.home #page { background: var(--c-surf-ink); }
body.mmh-v2.single-listings #page,
body.mmh-v2.mmh-v2-property #page { background: #ffffff; }

/* E.1 — "All offers →" link on dark sections */
body.mmh-v2 .mmh-section--dark .mmh-link-arrow,
body.mmh-v2 .mmh-cta .mmh-link-arrow {
    color: var(--c-gold-soft) !important;
}

/* E.1 — section body copy on dark surfaces. The actual surface-
   aware rules live in Section 45 (HOME) and inherit from the page
   default elsewhere; no global override needed here. */

/* E.7 — List With Us sub-section panels: solid card surface + 0.82 body */
body.mmh-v2 .mmh-cta__steps li {
    color: var(--c-cream-82) !important;
}
body.mmh-v2 .mmh-cta__steps li span {
    color: var(--c-gold-soft) !important;
    font-weight: 600;
}
body.mmh-v2 .mmh-cta {
    color: var(--c-cream) !important;
}
body.mmh-v2 .mmh-cta p,
body.mmh-v2 .mmh-cta__copy p,
body.mmh-v2 .mmh-cta li {
    color: var(--c-cream-82) !important;
}

/* E.8 — Property page meta icons darken so 3.5:1 → 4.5+ */
body.mmh-v2.single-listings .facilities-wrapper .propField > i,
body.mmh-v2.mmh-v2-property .facilities-wrapper .propField > i {
    color: #0E6F76 !important;   /* deeper teal — meets AA */
}
body.mmh-v2.single-listings .facilities-wrapper .propField,
body.mmh-v2.mmh-v2-property .facilities-wrapper .propField {
    color: var(--c-ink-700) !important;
}
/* Booking sidebar — keep solid white */
body.mmh-v2 #booking_widget,
body.mmh-v2 .booking-widget-holder,
body.mmh-v2 .sticky-sidebar {
    background: #ffffff;
    color: var(--c-ink-900);
}
body.mmh-v2 #booking_widget h2 { color: var(--c-ink-900) !important; }
body.mmh-v2 #booking_widget p { color: var(--c-ink-700) !important; }

/* E.6 — Journal empty body + microcopy */
body.mmh-v2 .mmh-journal-empty p,
body.mmh-v2 .mmh-journal-empty__meta { color: var(--c-ink-700) !important; }
body.mmh-v2 .mmh-journal-empty__meta { color: var(--c-ink-500) !important; }
body.mmh-v2 .mmh-journal-empty__form input::placeholder {
    color: rgba(15, 26, 26, 0.55) !important;
}

/* E.9 — Header opacity on non-home pages. Was already #fff but
   the audit reports the wordmark turning invisible on certain
   transition states — pin both background and border with
   stronger specificity so nothing wins after first-paint. */
body.mmh-v2:not(.home) .mmh-header,
body.mmh-v2:not(.home) .mmh-header.is-scrolled {
    background: rgba(255, 255, 255, 0.98) !important;
    border-bottom: 1px solid var(--mmh-sand-200) !important;
    color: var(--c-ink-900) !important;
}
body.mmh-v2:not(.home) .mmh-header .mmh-header__brand-text,
body.mmh-v2:not(.home) .mmh-nav__item,
body.mmh-v2:not(.home) .mmh-nav-wp a {
    color: var(--c-ink-900) !important;
}
body.mmh-v2:not(.home) .mmh-header__brand-text small { color: var(--c-gold-deep) !important; }

/* Footer eyebrow/wordmark fix — repeat the override here to make
   sure the cream-on-cream death zone never recurs. */
body.mmh-v2 footer.mmh-footer .mmh-header__brand-text small,
body.mmh-v2 footer.mmh-footer .mmh-footer__brand small,
body.mmh-v2 footer.mmh-footer .mmh-eyebrow {
    color: var(--c-gold-soft) !important;
}

/* Form placeholder lift across the site */
body.mmh-v2 input::placeholder,
body.mmh-v2 textarea::placeholder {
    color: rgba(15, 26, 26, 0.55);
}

/* E.4 — tel: link contrast on dark */
body.mmh-v2 .mmh-callband a[href^="tel:"],
body.mmh-v2 .mmh-hero__phone {
    color: var(--c-gold-soft) !important;
}

/* List With Us step label lift (E.7) */
body.mmh-v2 .mmh-cta__steps li,
body.mmh-v2 .mmh-cta__steps li span {
    font-weight: 500;
}
body.mmh-v2 .mmh-cta__steps li { color: rgba(247, 242, 232, 0.86) !important; }
body.mmh-v2 .mmh-cta__steps li > span:first-child {
    color: var(--c-gold-soft) !important;
    font-weight: 700;
}

/* F.1 — Surface-attribute support so future authored sections can
   opt-in to the right color pairing automatically. */
body.mmh-v2 [data-surface="dark"]  { background: var(--c-surf-ink); color: var(--c-cream); }
body.mmh-v2 [data-surface="dark"] h1,
body.mmh-v2 [data-surface="dark"] h2,
body.mmh-v2 [data-surface="dark"] h3 { color: var(--c-cream) !important; }
body.mmh-v2 [data-surface="dark"] .mmh-eyebrow,
body.mmh-v2 [data-surface="dark"] .mmh-eyebrow__marker { color: var(--c-gold-soft) !important; }

body.mmh-v2 [data-surface="cream"] { background: var(--c-surf-cream); color: var(--c-ink-900); }
body.mmh-v2 [data-surface="cream"] h1,
body.mmh-v2 [data-surface="cream"] h2,
body.mmh-v2 [data-surface="cream"] h3 { color: var(--c-ink-900) !important; }
body.mmh-v2 [data-surface="cream"] .mmh-eyebrow,
body.mmh-v2 [data-surface="cream"] .mmh-eyebrow__marker { color: var(--c-gold-deep) !important; }
body.mmh-v2 [data-surface="cream"] a { color: var(--c-teal); }

body.mmh-v2 [data-surface="white"] { background: #ffffff; color: var(--c-ink-900); }
body.mmh-v2 [data-surface="white"] h1,
body.mmh-v2 [data-surface="white"] h2,
body.mmh-v2 [data-surface="white"] h3 { color: var(--c-ink-900) !important; }
body.mmh-v2 [data-surface="white"] .mmh-eyebrow,
body.mmh-v2 [data-surface="white"] .mmh-eyebrow__marker { color: var(--c-gold-deep) !important; }
body.mmh-v2 [data-surface="white"] a { color: var(--c-teal); }

/* =====================================================
   50. daterangepicker overrides — single source of truth
   -----------------------------------------------------
   Every earlier .daterangepicker block in this file has
   been removed. Do not add other rules targeting these
   selectors elsewhere — the library default daterangepicker.css
   paints .calendar-table white, so the !important + zero
   competing local rules is the only way to keep the popup
   reliably dark with cream text on every cell.
   ===================================================== */

/* Popup shell */
.daterangepicker {
  background: #0f1a1a !important;
  color: #f5efe6 !important;
  border: 1px solid rgba(245,239,230,0.12) !important;
  box-shadow: 0 12px 40px rgba(0,0,0,0.45) !important;
  border-radius: 14px !important;
  padding: 12px 8px !important;
  font-family: inherit !important;
}

/* Kill any white backgrounds the library / earlier patch added */
.daterangepicker .drp-calendar,
.daterangepicker .calendar-table,
.daterangepicker .calendar-table table,
.daterangepicker .calendar-table thead,
.daterangepicker .calendar-table tbody,
.daterangepicker .calendar-table tr,
.daterangepicker .calendar-table th,
.daterangepicker .calendar-table td {
  background: transparent !important;
  border: 0 !important;
}

/* Nuke any pseudo-element that may have been drawing circles */
.daterangepicker td::before,
.daterangepicker td::after,
.daterangepicker th::before,
.daterangepicker th::after {
  content: none !important;
  background: transparent !important;
  display: none !important;
}

/* Month / year header row */
.daterangepicker th.month {
  color: #f5efe6 !important;
  background: transparent !important;
  font-weight: 600 !important;
  font-size: 15px !important;
  letter-spacing: 0.04em !important;
  text-transform: uppercase !important;
  padding: 6px 0 10px !important;
}

/* Prev / next arrow cells */
.daterangepicker th.prev,
.daterangepicker th.next {
  color: #f5efe6 !important;
  background: transparent !important;
  cursor: pointer;
  width: 28px;
}
.daterangepicker th.prev span,
.daterangepicker th.next span { border-color: #f5efe6 !important; }
.daterangepicker th.prev:hover span,
.daterangepicker th.next:hover span { border-color: #e9a522 !important; }

/* Weekday letter row */
.daterangepicker .calendar-table thead tr:nth-child(2) th {
  color: rgba(245,239,230,0.55) !important;
  font-weight: 500 !important;
  font-size: 11px !important;
  text-transform: uppercase !important;
  letter-spacing: 0.06em !important;
  padding-bottom: 6px !important;
}

/* DEFAULT day cell — transparent, cream text, NO pill */
.daterangepicker td {
  background: transparent !important;
  color: #f5efe6 !important;
  border-radius: 999px !important;
  width: 34px !important;
  height: 34px !important;
  line-height: 34px !important;
  text-align: center !important;
  padding: 0 !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  cursor: pointer;
}

/* Available days — explicit transparent so the library default
   white never wins */
.daterangepicker td.available {
  background: transparent !important;
  color: #f5efe6 !important;
}

/* Hover paints the soft amber pill */
.daterangepicker td.available:hover {
  background: rgba(233,165,34,0.18) !important;
  color: #ffffff !important;
}

/* Today */
.daterangepicker td.today,
.daterangepicker td.today.available {
  color: #e9a522 !important;
  font-weight: 700 !important;
  background: transparent !important;
}
.daterangepicker td.today.available:hover {
  background: rgba(233,165,34,0.18) !important;
}

/* In-range fill */
.daterangepicker td.in-range {
  background: rgba(22,107,113,0.42) !important;
  color: #ffffff !important;
  border-radius: 0 !important;
}

/* Selected check-in / check-out */
.daterangepicker td.active,
.daterangepicker td.active.available,
.daterangepicker td.start-date,
.daterangepicker td.end-date {
  background: #166b71 !important;
  color: #ffffff !important;
  border-radius: 999px !important;
  font-weight: 700 !important;
}
.daterangepicker td.start-date.in-range {
  border-top-left-radius: 999px !important;
  border-bottom-left-radius: 999px !important;
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}
.daterangepicker td.end-date.in-range {
  border-top-right-radius: 999px !important;
  border-bottom-right-radius: 999px !important;
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
}

/* Off-month / disabled */
.daterangepicker td.off,
.daterangepicker td.off.disabled,
.daterangepicker td.disabled,
.daterangepicker td.off.ends.disabled {
  background: transparent !important;
  color: rgba(245,239,230,0.28) !important;
  cursor: default;
}
.daterangepicker td.off:hover,
.daterangepicker td.disabled:hover {
  background: transparent !important;
  color: rgba(245,239,230,0.28) !important;
}

/* Pointing triangle */
.daterangepicker:before  { border-bottom-color: rgba(245,239,230,0.12) !important; }
.daterangepicker:after   { border-bottom-color: #0f1a1a !important; }
.daterangepicker.drop-up:before {
  border-top-color: rgba(245,239,230,0.12) !important;
  border-bottom-color: transparent !important;
}
.daterangepicker.drop-up:after {
  border-top-color: #0f1a1a !important;
  border-bottom-color: transparent !important;
}

/* Footer buttons (auto-apply hides them; safe defaults if disabled) */
.daterangepicker .drp-buttons {
  border-top: 1px solid rgba(245,239,230,0.12) !important;
  padding: 8px 10px !important;
  display: none !important;
}
.daterangepicker .btn-primary,
.daterangepicker .applyBtn {
  background: #166b71 !important;
  border-color: #166b71 !important;
  color: #ffffff !important;
}
.daterangepicker .btn-default,
.daterangepicker .cancelBtn {
  background: transparent !important;
  color: rgba(245,239,230,0.7) !important;
  border-color: rgba(245,239,230,0.2) !important;
}

/* Two-month layout spacing */
.daterangepicker .drp-calendar.left  { padding-right: 8px !important; }
.daterangepicker .drp-calendar.right { padding-left: 8px !important; }

/* Mobile — single month, full width */
@media (max-width: 720px) {
  .daterangepicker.show-calendar { width: min(94vw, 360px) !important; }
  .daterangepicker .drp-calendar { width: auto !important; max-width: 100% !important; }
  .daterangepicker .drp-calendar.right { display: none !important; }
}

/* ============================================================
   51. Final contrast crawl fixes (post Round-7)
   --------------------------------------------------------------
   Real bugs the all-pages crawler turned up after the round-7
   single-source-of-truth refactor:

   1. body.mmh-v2 a { color: var(--brand-accent) } painted EVERY
      anchor cyan (#1CA0B1) — including the bottom-tab-bar labels,
      breadcrumb chevrons, the legacy "Skip to content" anchor, and
      a stray .mmh-tabbar__label inside the tab anchor — at 2.93:1
      on the paper page surface. Tighten the global anchor rule
      and force chrome elements onto their proper tokens.
   2. .mmh-floated-label (injected above newsletter input in the
      footer) was --mmh-stone-700 (#364444) on the dark footer
      surface (#0F1A1A) — 1.75:1 illegible. Make it cream when in
      the footer; keep dark on light forms elsewhere.
   3. .propField on destination archives was rendering at the
      parent theme's #9a9a9a default on paper (2.64:1) because
      my override didn't beat the legacy ".productListing .stats
      .propField" specificity. Bump.
   4. .mmh-empty / .mmh-journal-empty .mmh-eyebrow was --brand-gold
      (#E9A522) on the sage card (#eef2ef) — 1.88:1. Force the
      gold-deep token explicitly here.
   ============================================================ */

/* 51.1 — Bottom tab bar labels: stone-700 wins over the global anchor */
body.mmh-v2 a.mmh-tabbar__tab,
body.mmh-v2 a.mmh-tabbar__tab .mmh-tabbar__label,
body.mmh-v2 .mmh-tabbar__tab,
body.mmh-v2 .mmh-tabbar__tab .mmh-tabbar__label {
    color: var(--c-ink-700) !important;
}
body.mmh-v2 a.mmh-tabbar__tab.is-active,
body.mmh-v2 a.mmh-tabbar__tab.is-active .mmh-tabbar__label,
body.mmh-v2 .mmh-tabbar__tab.is-active,
body.mmh-v2 .mmh-tabbar__tab.is-active .mmh-tabbar__label {
    color: var(--c-teal) !important;
}
body.mmh-v2 a.mmh-tabbar__tab:active { color: var(--c-teal) !important; }

/* 51.2 — Floated label injected by mmh-forms.js. Light on dark footer,
   dark on light pages. */
body.mmh-v2 .mmh-floated-label {
    color: var(--c-ink-700);
}
body.mmh-v2 .mmh-footer .mmh-floated-label,
body.mmh-v2 footer.mmh-footer .mmh-floated-label,
body.mmh-v2 [data-surface="dark"] .mmh-floated-label,
body.mmh-v2 .mmh-cta .mmh-floated-label {
    color: var(--c-cream-82) !important;
}
body.mmh-v2 .mmh-floated-label__req {
    color: var(--c-gold-deep);
}
body.mmh-v2 .mmh-footer .mmh-floated-label__req,
body.mmh-v2 [data-surface="dark"] .mmh-floated-label__req {
    color: var(--c-gold-soft) !important;
}

/* 51.3 — Destination archive .propField — the legacy theme paints
   .productListing .stats .propField as #9a9a9a. Use a selector
   that matches the legacy one's specificity then beats it via
   !important + source-order (this block is last in the file). */
body.mmh-v2 .productListing .stats .propField,
body.mmh-v2 .productListing .stats .fieldSleeps,
body.mmh-v2 .productListing .stats .fieldBedrooms,
body.mmh-v2 .productListing .stats .fieldBathrooms,
body.mmh-v2 .productListing .stats .fieldCars,
body.mmh-v2 .infobubble .stats .propField,
body.mmh-v2 .infobubble .stats .fieldSleeps,
body.mmh-v2 .infobubble .stats .fieldBedrooms,
body.mmh-v2 .infobubble .stats .fieldBathrooms,
body.mmh-v2 .infobubble .stats .fieldCars {
    color: var(--c-ink-700) !important;
}
/* On HOME the cards sit on the dark surface — override back to cream */
body.home .mmh-section .productListing .stats .propField,
body.home .mmh-section .productListing .stats .fieldSleeps,
body.home .mmh-section .productListing .stats .fieldBedrooms,
body.home .mmh-section .productListing .stats .fieldBathrooms,
body.home .mmh-section .productListing .stats .fieldCars {
    color: var(--c-cream-82) !important;
}
body.home .mmh-section--sand .productListing .stats .propField,
body.home .mmh-section--sand .productListing .stats .fieldSleeps,
body.home .mmh-section--sand .productListing .stats .fieldBedrooms,
body.home .mmh-section--sand .productListing .stats .fieldBathrooms,
body.home .mmh-section--sand .productListing .stats .fieldCars {
    color: var(--c-ink-700) !important;
}

/* 51.4 — Empty-state eyebrow color forced */
body.mmh-v2 .mmh-empty .mmh-eyebrow,
body.mmh-v2 .mmh-empty .mmh-eyebrow__marker,
body.mmh-v2 .mmh-journal-empty .mmh-eyebrow,
body.mmh-v2 .mmh-journal-empty .mmh-eyebrow__marker {
    color: var(--c-gold-deep) !important;
}

/* 51.5 — Tighten the global anchor cyan default. Cyan on paper is
   2.93:1 — fails AA for body text. Apply only to plain in-content
   anchors, and use the deeper teal so it passes. */
body.mmh-v2 a:not([class]),
body.mmh-v2 .entry-content a:not([class]):not(.mmh-btn) {
    color: var(--c-teal) !important;
}
body.mmh-v2 a:not([class]):hover,
body.mmh-v2 .entry-content a:not([class]):hover {
    color: var(--c-gold-deep) !important;
}

/* 51.5b — Header nav dropdown items (Destinations / Contact dropdowns).
   They were inheriting the global cyan over a white panel — 2.85:1.
   Force ink-900 base, deep teal on hover. */
body.mmh-v2 .mmh-header .mmh-nav__dropdown a,
body.mmh-v2 .mmh-nav__dropdown a,
body.mmh-v2 .mmh-nav-wp .sub-menu a {
    color: var(--c-ink-900) !important;
}
body.mmh-v2 .mmh-header .mmh-nav__dropdown a:hover,
body.mmh-v2 .mmh-nav__dropdown a:hover,
body.mmh-v2 .mmh-nav-wp .sub-menu a:hover {
    color: var(--c-teal) !important;
    background: var(--mmh-paper-alt, #eef2ef) !important;
}

/* 51.6 — Breadcrumb separator chevron — was inheriting cyan */
body.mmh-v2 .mmh-breadcrumbs__sep {
    color: var(--c-gold-deep) !important;
    opacity: 0.7;
}

/* 51.7 — Hidden skip-link must NOT be reported by contrast tools.
   Make sure the off-screen position is honoured (already in round 4
   but the legacy parent template also outputs a .mmh-sr-only that
   needs the same treatment). */
body.mmh-v2 .skip-link,
body.mmh-v2 a.skip-link,
body.mmh-v2 .mmh-sr-only,
body.mmh-v2 a.mmh-sr-only,
body.mmh-v2 .screen-reader-text {
    position: absolute !important;
    left: -10000px !important;
    top: auto;
    width: 1px !important;
    height: 1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
}
body.mmh-v2 .skip-link:focus,
body.mmh-v2 .skip-link:focus-visible,
body.mmh-v2 .screen-reader-text:focus {
    position: absolute !important;
    left: 16px !important;
    top: 16px !important;
    width: auto !important;
    height: auto !important;
    padding: 10px 18px !important;
    overflow: visible !important;
    clip: auto !important;
    background: var(--c-teal) !important;
    color: #fff !important;
    border-radius: var(--mmh-radius-pill);
    box-shadow: 0 12px 28px -8px rgba(15,102,98,0.4);
    text-decoration: none;
    z-index: 9999 !important;
}

/* ============================================================
   52. Listing cards — restore the white surface (Option A)
   --------------------------------------------------------------
   Round 5 set .productListing.card { background: transparent }
   thinking the cards would inherit a coloured surface from the
   parent section. On /accommodation-search/?check-in=… the
   section IS the page (no .mmh-section wrapper), so the cards
   sit on the dark page surface and every inner dark-ink token
   (.listingTitle, .price-amount, .propField) rendered as
   near-black on near-black. Fix the surface first, then force
   every text-bearing child to ink — uniform, simple, works
   regardless of which container they're rendered in.
   ============================================================ */

/* Card surface — solid white with a soft shadow on every page,
   including the home Editor's Picks (looks Airbnb-style on dark
   sections — fine). Beats Section 8 by source order + specificity
   (extra body.mmh-v2 + !important). */
html body.mmh-v2 .productListing.card {
    background: #ffffff !important;
    border: 1px solid var(--mmh-sand-200) !important;
    border-radius: 14px !important;
    overflow: hidden !important;
    box-shadow: 0 4px 16px -6px rgba(0, 0, 0, 0.12);
    width: 100%;
    transition: transform var(--mmh-d-base) var(--mmh-ease),
                box-shadow var(--mmh-d-base) var(--mmh-ease);
}
html body.mmh-v2 .productListing.card:hover {
    transform: translateY(-4px);
    box-shadow: 0 16px 36px -12px rgba(0, 0, 0, 0.18);
}

/* Card body padding (the new-card-body / card-body anchor) */
html body.mmh-v2 .productListing.card .new-card-body,
html body.mmh-v2 .productListing.card a.new-card-body,
html body.mmh-v2 .productListing.card .card-body,
html body.mmh-v2 .productListing.card a.card-body {
    padding: 14px 16px 18px !important;
    background: #ffffff !important;
    color: var(--c-ink-900) !important;
    display: block;
}

/* Every text-bearing child → ink on white. No more surface-aware. */
html body.mmh-v2 .productListing.card .listingTitle,
html body.mmh-v2 .productListing.card .listingTitle a,
html body.mmh-v2 .productListing.card h3.listingTitle,
html body.mmh-v2 .productListing.card .listingText {
    color: var(--c-ink-900) !important;
    font-weight: 500 !important;
}
html body.mmh-v2 .productListing.card .listingPrice,
html body.mmh-v2 .productListing.card .price-amount,
html body.mmh-v2 .productListing.card .listingPrice .price-amount {
    color: var(--c-ink-900) !important;
    font-weight: 700 !important;
}
html body.mmh-v2 .productListing.card .listingPrice .shrink,
html body.mmh-v2 .productListing.card .shrink,
html body.mmh-v2 .productListing.card .priceLabel {
    color: var(--c-ink-500) !important;
    font-weight: 400 !important;
}
html body.mmh-v2 .productListing.card .propField,
html body.mmh-v2 .productListing.card .fieldSleeps,
html body.mmh-v2 .productListing.card .fieldBedrooms,
html body.mmh-v2 .productListing.card .fieldBathrooms,
html body.mmh-v2 .productListing.card .fieldCars,
html body.mmh-v2 .productListing.card .fieldWifi,
html body.mmh-v2 .productListing.card .fieldPetFriendly,
html body.mmh-v2 .productListing.card .listingDesc,
html body.mmh-v2 .productListing.card .home__desc,
html body.mmh-v2 .productListing.card .home__loc,
html body.mmh-v2 .productListing.card .home__meta span,
html body.mmh-v2 .productListing.card .home__meta strong,
html body.mmh-v2 .productListing.card .reviews,
html body.mmh-v2 .productListing.card .stars,
html body.mmh-v2 .productListing.card .no_of_reviews {
    color: var(--c-ink-700) !important;
}
html body.mmh-v2 .productListing.card .propField::before {
    color: var(--c-ink-500) !important;
}
/* Card footer / stats bg in case Section 33 still tints it */
html body.mmh-v2 .productListing.card .card-footer,
html body.mmh-v2 .productListing.card .stats,
html body.mmh-v2 .productListing.card .count {
    background: transparent !important;
    color: var(--c-ink-700) !important;
}

/* Suburb pill — small dark chip on the photo so it still pops */
html body.mmh-v2 .productListing.card .suburb,
html body.mmh-v2 .productListing.card .listingSuburb {
    background: rgba(13, 24, 32, 0.84) !important;
    color: var(--c-cream) !important;
    border-color: transparent !important;
}

/* Heart / shortlist heart stays white pill on top of the photo */
html body.mmh-v2 .productListing.card .shortlist-container {
    background: rgba(255, 255, 255, 0.94) !important;
}

/* "Book Now" pill on the featured-listings template */
html body.mmh-v2 .productListing.card .book-btn {
    background: var(--c-gold) !important;
    color: var(--c-ink-900) !important;
}

/* =====================================================================
   === MMH search toolbar chips & filters — readable in both light & dark
   ===================================================================== */

/* Filter chips — light pill with dark text by default, teal pill when
   active. Hover lifts to the cream paper tint with a teal border. The
   same chip rules ship inside the prefers-color-scheme:dark block so
   OS dark-mode visitors get the exact same look. */
body.mmh-v2 .mmh-chip,
body.mmh-v2 .mmh-toolbar .mmh-chip {
    background: #ffffff;
    color: #0f1a1a;
    border: 1px solid #d9d3c7;
}
body.mmh-v2 .mmh-chip:hover,
body.mmh-v2 .mmh-toolbar .mmh-chip:hover {
    background: #f5efe6;
    color: #0f1a1a;
    border-color: #166b71;
}
body.mmh-v2 .mmh-chip.is-active,
body.mmh-v2 .mmh-toolbar .mmh-chip.is-active,
body.mmh-v2 .mmh-chip[aria-pressed="true"] {
    background: #166b71;
    color: #ffffff;
    border-color: #166b71;
}

/* Search-page filter dropdowns — cream on dark navy, visible chevron,
   visible focus ring. The native <option> list inherits the same
   palette so iOS / Android dropdowns also stay readable. */
body.mmh-v2 .mmh-toolbar__field { background: transparent; }
body.mmh-v2 .mmh-toolbar__field > label,
body.mmh-v2 .mmh-toolbar__field > .mmh-toolbar__label,
body.mmh-v2 .mmh-toolbar__field > span:first-child {
    color: #b8bfbf;
    font-size: 11px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}
body.mmh-v2 .mmh-toolbar__field select {
    background-color: #1a2424;
    color: #f7f2e8;
    border: 1px solid #364444;
    border-radius: 8px;
    padding: 10px 32px 10px 14px;
    appearance: none;
    -webkit-appearance: none;
    background-image:
        linear-gradient(45deg, transparent 50%, #f7f2e8 50%),
        linear-gradient(135deg, #f7f2e8 50%, transparent 50%);
    background-position:
        calc(100% - 18px) 50%,
        calc(100% - 13px) 50%;
    background-size: 5px 5px, 5px 5px;
    background-repeat: no-repeat;
}
body.mmh-v2 .mmh-toolbar__field select:focus,
body.mmh-v2 .mmh-toolbar__field select:focus-visible {
    outline: 2px solid #166b71;
    outline-offset: 1px;
}
body.mmh-v2 .mmh-toolbar__field select option {
    background: #1a2424;
    color: #f7f2e8;
}

/* "Showing 12 of 50 stays" header + the legacy .searchResultsNo wrapper
   stays cream on the dark search page body, so the count and the
   "Showing 12 of …" microcopy remain readable. */
body.mmh-v2 .searchResultsNo > .resultsCount,
body.mmh-v2 .searchResultsNo > .searchMessage,
body.mmh-v2 .searchResultsNo > .searchMessage > *,
body.mmh-v2 .resultsCount,
body.mmh-v2 .mmh-toolbar__count {
    color: #f5efe6;
}
body.mmh-v2 .mmh-toolbar__count strong {
    color: #ffffff;
    font-weight: 600;
}

/* ============================================================
   54. Wider page margins — 80% width on desktop.
   Tablet/mobile keep their current full-width-with-padding so
   the content doesn't get cramped on small screens. The cap of
   1600px stops the line lengths from becoming uncomfortable on
   very large monitors. Hero band keeps its own edge-to-edge
   treatment via the hero-specific selectors below. */
@media (min-width: 1024px) {
    body.mmh-v2 .mmh-container {
        max-width: min(80%, 1600px);
    }
    /* The footer and hero stats inner bands also use .mmh-container
       but with extra child selectors — let those inherit naturally. */
}

/* ============================================================
   55. Cross-site contrast audit (2026-05-11) — final pass.
   Driven by the headless DOM contrast crawler. Every rule below
   uses LITERAL hex values rather than tokens so the OS dark-mode
   `prefers-color-scheme: dark` block above (which flips several
   `--mmh-stone-*` and `--mmh-sand-*` tokens) cannot drag the
   colors back into an unreadable state. All rules carry
   `!important` because the cascade below is well-populated with
   earlier `!important` rules that we need to outrank purely by
   source order. Grouped by audit-report root cause.
   ============================================================ */

/* 55.1 — Breadcrumbs. In OS dark mode the page bg flips to
   #0F1A1A. Existing rules paint the current-page span with
   --c-ink-900 (#0F1A1A) — dark on dark = invisible — and the
   link inherits the global teal from `body.mmh-v2 a` which is
   2.85:1 on dark. Use cream tones in dark mode. */
@media (prefers-color-scheme: dark) and (min-width: 99999px) { /* disabled — site is light-only */
    body.mmh-v2 .mmh-breadcrumbs a,
    body.mmh-v2 .mmh-breadcrumbs li a {
        color: #f5efe6 !important;
    }
    body.mmh-v2 .mmh-breadcrumbs a:hover,
    body.mmh-v2 .mmh-breadcrumbs li a:hover {
        color: #ffffff !important;
    }
    body.mmh-v2 .mmh-breadcrumbs li[aria-current="page"] span,
    body.mmh-v2 nav.mmh-breadcrumbs span {
        color: rgba(247, 242, 232, 0.78) !important;
    }
    body.mmh-v2 .mmh-breadcrumbs__sep {
        color: rgba(247, 242, 232, 0.45) !important;
    }
}

/* 55.2 — Filter chips (`.mmh-chip`). Earlier rule at line ~5781
   used `color: var(--mmh-stone-700) !important` which in dark
   mode flips to #b8bfbf — light-grey-on-white = 1.87:1. Lock to
   dark-ink literal. The `:not()` adds the specificity edge over
   the existing rule and source order seals it. */
body.mmh-v2 .mmh-chip:not(.is-active):not([aria-pressed="true"]),
body.mmh-v2 .mmh-toolbar .mmh-chip:not(.is-active):not([aria-pressed="true"]),
body.mmh-v2 .mmh-toolbar__chips .mmh-chip:not(.is-active):not([aria-pressed="true"]) {
    background: #ffffff !important;
    color: #0f1a1a !important;
    border-color: #d9d3c7 !important;
}
body.mmh-v2 .mmh-chip:not(.is-active):not([aria-pressed="true"]):hover,
body.mmh-v2 .mmh-toolbar .mmh-chip:not(.is-active):not([aria-pressed="true"]):hover {
    background: #f5efe6 !important;
    color: #0f1a1a !important;
    border-color: #166b71 !important;
}

/* 55.3 — Listing cards (`.productListing.card`). The Editor's
   Picks carousel on the homepage and any other card-rendering
   surface needs literal dark text on the literal white card.
   This survives both the token flip in dark mode and the
   accident where parent inheritance was painting cream. */
body.mmh-v2 .productListing.card,
body.mmh-v2 .productListing.card .new-card-body,
body.mmh-v2 .productListing.card .card-body,
body.mmh-v2 .productListing.card .listingText {
    background-color: #ffffff !important;
}
body.mmh-v2 .productListing.card .listingTitle,
body.mmh-v2 .productListing.card .listingTitle a,
body.mmh-v2 .productListing.card .listingText .listingTitle,
body.mmh-v2 .productListing.card .new-card-body .listingTitle,
body.mmh-v2 .productListing.card .listingPrice,
body.mmh-v2 .productListing.card .listingPrice .price-amount,
body.mmh-v2 .productListing.card .price-amount,
body.mmh-v2 .productListing.card .stats .propField,
body.mmh-v2 .productListing.card .stats .count .propField,
body.mmh-v2 .productListing.card .fieldSleeps,
body.mmh-v2 .productListing.card .fieldBedrooms,
body.mmh-v2 .productListing.card .fieldBathrooms,
body.mmh-v2 .productListing.card .fieldCars {
    color: #0f1a1a !important;
}
body.mmh-v2 .productListing.card .listingPrice .shrink,
body.mmh-v2 .productListing.card .shrink {
    color: #5a6a6a !important;
}
body.mmh-v2 .productListing.card .suburb,
body.mmh-v2 .productListing.card .listingSuburb {
    background: rgba(255, 255, 255, 0.94) !important;
    color: #0f1a1a !important;
}

/* 55.4 — Hero search bar: the floated label inside the search
   field is dark-on-dark in dark mode. The search field itself
   is `--mmh-paper-warm` (flipped to #1A2424). Make the label
   cream-dim. */
@media (prefers-color-scheme: dark) and (min-width: 99999px) { /* disabled — site is light-only */
    body.mmh-v2 .mmh-floated-label,
    body.mmh-v2 .mmh-search__field .mmh-floated-label,
    body.mmh-v2 .mmh-hero__search .mmh-floated-label {
        color: rgba(247, 242, 232, 0.72) !important;
    }
}

/* 55.5 — Lead paragraphs and value-prop block text on the
   dark-flipped section surfaces. In dark mode the home page's
   `.mmh-section--sand` flips to `#1a2424` but the headings/copy
   inside still inherit dark ink, giving 1.12-1.34 contrast.
   Force cream/cream-dim. */
@media (prefers-color-scheme: dark) and (min-width: 99999px) { /* disabled — site is light-only */
    body.mmh-v2 .mmh-lead,
    body.mmh-v2 .mmh-section-head__intro .mmh-lead,
    body.mmh-v2 .mmh-section .mmh-lead {
        color: rgba(247, 242, 232, 0.84) !important;
    }
    body.mmh-v2 .mmh-value-prop h3,
    body.mmh-v2 .mmh-value-props .mmh-value-prop h3,
    body.mmh-v2 .mmh-section--sand .mmh-value-prop h3 {
        color: #f7f2e8 !important;
    }
    body.mmh-v2 .mmh-value-prop p,
    body.mmh-v2 .mmh-value-props .mmh-value-prop p,
    body.mmh-v2 .mmh-section--sand .mmh-value-prop p {
        color: rgba(247, 242, 232, 0.78) !important;
    }
}

/* 55.6 — "Watch this space" specials empty-state on white card.
   The eyebrow is gold-soft (#f2b23d) on white = 1.87:1; the h3
   is cream on white = 1.12:1. The block lives inside .mmh-empty
   on the homepage which renders on a light surface. Force dark
   ink for the heading and switch the eyebrow to the deep-gold
   variant which clears 4.5:1 on white. */
body.mmh-v2 .mmh-empty .mmh-eyebrow,
body.mmh-v2 .entry-content .mmh-empty .mmh-eyebrow {
    color: #8a5e0a !important;
}
body.mmh-v2 .mmh-empty h3,
body.mmh-v2 .entry-content .mmh-empty h3 {
    color: #0f1a1a !important;
}
body.mmh-v2 .mmh-empty p,
body.mmh-v2 .entry-content .mmh-empty p {
    color: #2a3a3a !important;
}

/* 55.7 — Philosophy pull-quote on cream (#f7f8f5). The `<em>`
   highlight and figcaption were gold-on-cream (2.0:1). Use a
   teal accent that clears AA on cream. The eyebrow markers on
   cream sections (Roman numerals) also failed — switch to the
   deep-teal accent which gives 6.6:1 on cream. */
body.mmh-v2 .mmh-pullquote em,
body.mmh-v2 .mmh-pullquote-section em,
body.mmh-v2 .mmh-pullquote-section blockquote em {
    color: #0e4f54 !important;
    font-style: italic;
}
body.mmh-v2 .mmh-pullquote figcaption,
body.mmh-v2 .mmh-pullquote-section figcaption {
    color: #2a3a3a !important;
}
body.mmh-v2 .mmh-section--sand .mmh-eyebrow__marker,
body.mmh-v2 .mmh-pullquote-section .mmh-eyebrow__marker,
body.mmh-v2 .mmh-section:not(.mmh-section--dark):not(.mmh-cta):not(.mmh-callband):not(.mmh-hero) .mmh-eyebrow__marker {
    color: #8a5e0a !important;
}
body.mmh-v2 .mmh-section--sand .mmh-eyebrow__marker::after,
body.mmh-v2 .mmh-pullquote-section .mmh-eyebrow__marker::after {
    background: #8a5e0a !important;
    opacity: 0.85;
}

/* 55.8 — Eyebrow markers + accents on TEAL section bands
   (`.mmh-cta`, `.mmh-callband`, `.mmh-hero` over teal). Gold
   (#E9A522 / #F2B23D) on teal #166B71 = 2.92-3.32:1. Switch
   to cream which clears 7.7:1 on teal and reads as a refined
   sand against the deep teal — same brand mood, much more
   legible. */
body.mmh-v2 .mmh-cta .mmh-eyebrow__marker,
body.mmh-v2 .mmh-callband .mmh-eyebrow__marker,
body.mmh-v2 .mmh-hero .mmh-eyebrow__marker,
body.mmh-v2 .mmh-section--dark .mmh-eyebrow__marker {
    color: #f7f2e8 !important;
}
body.mmh-v2 .mmh-cta .mmh-eyebrow__marker::after,
body.mmh-v2 .mmh-callband .mmh-eyebrow__marker::after,
body.mmh-v2 .mmh-hero .mmh-eyebrow__marker::after,
body.mmh-v2 .mmh-section--dark .mmh-eyebrow__marker::after {
    background: #f7f2e8 !important;
    opacity: 0.55;
}
body.mmh-v2 .mmh-destination__kicker {
    color: #f7f2e8 !important;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
}
body.mmh-v2 .mmh-hero__trust .mmh-hero__trust-star {
    color: #ffd58a !important;   /* lighter gold → 4.9:1 on teal */
}
body.mmh-v2 .mmh-cta__incentive {
    color: #f7f2e8 !important;
}

/* 55.9 — Teal link text on dark page bg (every non-home page in
   dark mode, plus the "ALL OFFERS" CTA on the homepage hero
   band). Use a brighter teal that clears 4.5:1 on #0F1A1A. */
@media (prefers-color-scheme: dark) and (min-width: 99999px) { /* disabled — site is light-only */
    body.mmh-v2 .mmh-section--dark a:not(.mmh-btn),
    body.mmh-v2 .mmh-cta a:not(.mmh-btn),
    body.mmh-v2 .mmh-callband a:not(.mmh-btn),
    body.mmh-v2 .mmh-section-head__cta.mmh-link-arrow,
    body.mmh-v2 a[href^="tel:"],
    body.mmh-v2 .mmh-contact a[href^="tel:"] {
        color: #6ad4dc !important;
    }
}
body.mmh-v2 .mmh-section--dark a.mmh-link-arrow,
body.mmh-v2 .mmh-section-head__cta.mmh-link-arrow {
    color: #6ad4dc !important;
}

/* 55.10 — Property detail page (`/stay/*`). Amenity labels,
   gallery counter, map address all use `--mmh-stone-700` which
   flips to #b8bfbf in dark mode — 1.87:1 on white. Lock to
   readable dark ink with literals. */
body.mmh-v2 .mmh-feature-label,
body.mmh-v2 .single-listing-block .mmh-feature-label,
body.mmh-v2.single-listings .mmh-feature-label,
body.mmh-v2.mmh-v2-property .mmh-feature-label {
    color: #2a3a3a !important;
}
body.mmh-v2 .map-address,
body.mmh-v2 span.map-address,
body.mmh-v2 .singleListing .map-address {
    color: #2a3a3a !important;
}
body.mmh-v2 .listingContentWrapper li,
body.mmh-v2 .singleListing .amenities-list li,
body.mmh-v2 .single-listing-block ul.amenities li,
body.mmh-v2.mmh-v2-property .listingContentWrapper li {
    color: #2a3a3a !important;
}

/* Gallery overlay buttons / image-counter / "+N images". These
   float on a photo; rather than guessing the underlying tone we
   pin a translucent dark scrim chip and lay cream text on top. */
body.mmh-v2 .mmh-gallery__viewall,
body.mmh-v2 .mmh-gallery .gallery-counter,
body.mmh-v2 .mmh-gallery button.gallery-counter,
body.mmh-v2 .mmh-gallery .image-counter,
body.mmh-v2 .mmh-gallery .gallery-overflow {
    background: rgba(15, 26, 26, 0.62) !important;
    color: #ffffff !important;
    border: 1px solid rgba(255, 255, 255, 0.22) !important;
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
}

/* "View Gallery" / image counters that aren't inside our gallery
   wrapper still inherit white text — add a text-shadow scrim so
   light-coloured photos can't wash them out. */
body.mmh-v2 .mmh-hero-gallery__counter,
body.mmh-v2 .mmh-hero-gallery .gallery-counter,
body.mmh-v2 .mmh-hero-gallery__viewall {
    color: #ffffff !important;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.55), 0 0 12px rgba(0, 0, 0, 0.35);
}

/* ============================================================
   56. Listing cards — dark surface for "Stays our team is loving"
   --------------------------------------------------------------
   Section 55.3 painted .productListing.card with #fff on the
   homepage. On the light paper (#f7f8f5) page the white card was
   nearly indistinguishable, and the propField icons (cream-60)
   washed out against it. Give cards a proper dark surface so
   they sit forward as objects, text is high-contrast cream, and
   the bed/bath icons read clearly. Restricted to the home page
   featured grid (#featured-stays); search / archive cards keep
   their existing light surface from section 55.3.
   ============================================================ */
body.mmh-v2 #featured-stays .productListing.card,
body.mmh-v2 #featured-stays .productListing.card .new-card-body,
body.mmh-v2 #featured-stays .productListing.card .card-body,
body.mmh-v2 #featured-stays .productListing.card .card-footer {
    background-color: #14252a !important;
    background-image: linear-gradient(180deg, #18313a 0%, #11202a 100%) !important;
}
body.mmh-v2 #featured-stays .productListing.card {
    border-radius: 18px !important;
    overflow: hidden !important;
    box-shadow: 0 18px 38px -22px rgba(8, 24, 28, 0.45), 0 2px 6px rgba(8, 24, 28, 0.18) !important;
    border: 1px solid rgba(247, 242, 232, 0.08) !important;
    transition: transform 320ms cubic-bezier(.2,.7,.2,1), box-shadow 320ms cubic-bezier(.2,.7,.2,1) !important;
}
body.mmh-v2 #featured-stays .productListing.card:hover {
    transform: translateY(-6px) !important;
    box-shadow: 0 26px 56px -22px rgba(8, 24, 28, 0.6), 0 4px 10px rgba(8, 24, 28, 0.25) !important;
}
body.mmh-v2 #featured-stays .productListing .new-card-body {
    padding: 18px 18px 20px !important;
}

/* Typography on the dark card */
body.mmh-v2 #featured-stays .productListing .listingTitle,
body.mmh-v2 #featured-stays .productListing .listingTitle a {
    color: #f7f2e8 !important;
}
body.mmh-v2 #featured-stays .productListing .listingDesc {
    display: -webkit-box !important;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    color: rgba(247, 242, 232, 0.78) !important;
    font-size: 0.88rem;
    line-height: 1.45;
    margin: 4px 0 12px !important;
}
body.mmh-v2 #featured-stays .productListing .reviews,
body.mmh-v2 #featured-stays .productListing .no_of_reviews {
    color: rgba(247, 242, 232, 0.78) !important;
}
body.mmh-v2 #featured-stays .productListing .reviews .stars {
    color: #f2b23d !important;
}

/* propField row — numbers cream, icons gold so they pop on dark */
body.mmh-v2 #featured-stays .productListing .stats .propField,
body.mmh-v2 #featured-stays .productListing .count .propField,
body.mmh-v2 #featured-stays .productListing .fieldSleeps,
body.mmh-v2 #featured-stays .productListing .fieldBedrooms,
body.mmh-v2 #featured-stays .productListing .fieldBathrooms,
body.mmh-v2 #featured-stays .productListing .fieldCars {
    color: rgba(247, 242, 232, 0.92) !important;
}
body.mmh-v2 #featured-stays .productListing .propField::before {
    color: #f2b23d !important;
    opacity: 0.95;
}
body.mmh-v2 #featured-stays .productListing .card-footer {
    padding: 8px 0 4px !important;
    border-top: 1px solid rgba(247, 242, 232, 0.10) !important;
    margin-top: 4px;
}

/* Price */
body.mmh-v2 #featured-stays .productListing .listingPrice,
body.mmh-v2 #featured-stays .productListing .listingPrice .price-amount,
body.mmh-v2 #featured-stays .productListing .price-amount {
    color: #f7f2e8 !important;
}
body.mmh-v2 #featured-stays .productListing .listingPrice .shrink,
body.mmh-v2 #featured-stays .productListing .shrink {
    color: rgba(247, 242, 232, 0.62) !important;
}
body.mmh-v2 #featured-stays .productListing .listingPrice {
    border-top: 1px solid rgba(247, 242, 232, 0.10) !important;
    padding-top: 10px !important;
    margin-top: 4px !important;
}

/* Suburb chip — pop against image */
body.mmh-v2 #featured-stays .productListing .suburb,
body.mmh-v2 #featured-stays .productListing .listingSuburb {
    background: rgba(15, 26, 26, 0.78) !important;
    color: #f7f2e8 !important;
    border: 1px solid rgba(247, 242, 232, 0.14);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
}

/* Image radius matches the card */
body.mmh-v2 #featured-stays .productListing .card-img-top {
    border-radius: 0 !important;
    border-bottom: 1px solid rgba(247, 242, 232, 0.06);
}

/* ============================================================
   56. Accommodation-search page — editorial chrome (2026-05-13).
   Brings /accommodation-search/ in line with the homepage:
     · entry-content widened from 1100px to 80%/1600px so it sits
       on the same grid as .mmh-container
     · 760px child-cap lifted so the injected section spans full
       width (the shortcode produces ONE child element)
     · editorial section-head (eyebrow + serif H1 + lead) above
       the results, sandstone band like §II on the home page
     · search bar from the home hero repeated under the head so
       guests can re-filter without scrolling
     · results section sits on white, in homepage rhythm
   Pairs with the the_content filter mmh_v2_search_page_chrome
   in functions.php.
   ============================================================ */

/* 56.1 — Lift the narrow entry-content & child caps on this page
   so the editorial sections we inject can span the full grid.
   The parent twenty-twenty-one base puts vertical AND horizontal
   margin on .site-main, .entry-content, .entry-header, and on
   `.site-main > *`. All of that has to go for the sand band to
   run flush against the global header. */
body.mmh-v2.page-accommodation-search .entry-content,
body.mmh-v2.page-search .entry-content {
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;
}
body.mmh-v2.page-accommodation-search .entry-content > *:not(.alignwide):not(.alignfull),
body.mmh-v2.page-search .entry-content > *:not(.alignwide):not(.alignfull) {
    max-width: none;
    margin: 0;
}
body.mmh-v2.page-accommodation-search .entry-header,
body.mmh-v2.page-search .entry-header {
    display: none;
}
body.mmh-v2.page-accommodation-search .site-main,
body.mmh-v2.page-accommodation-search .site-main > *,
body.mmh-v2.page-accommodation-search article.page,
body.mmh-v2.page-accommodation-search article.page > *,
body.mmh-v2.page-search .site-main,
body.mmh-v2.page-search .site-main > *,
body.mmh-v2.page-search article.page,
body.mmh-v2.page-search article.page > * {
    padding-inline: 0 !important;
    margin-inline: 0 !important;
    max-width: none !important;
}
body.mmh-v2.page-accommodation-search .site-main,
body.mmh-v2.page-accommodation-search article.page,
body.mmh-v2.page-search .site-main,
body.mmh-v2.page-search article.page {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}
body.mmh-v2.page-accommodation-search .site-main > article > *,
body.mmh-v2.page-accommodation-search .entry-content > *,
body.mmh-v2.page-search .site-main > article > *,
body.mmh-v2.page-search .entry-content > * {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}

/* 56.2 — Section bands. The head sits on sand, the results on
   white — same rhythm as §I → §II on the home page. */
body.mmh-v2 .mmh-search-page {
    padding-block: clamp(40px, 6vw, 80px);
}
body.mmh-v2 .mmh-search-page--results {
    background: var(--mmh-bg);
    padding-top: clamp(28px, 4vw, 56px);
    padding-bottom: clamp(48px, 7vw, 96px);
}

/* 56.4 — Search bar at the top of the results column. The hero
   head section has been removed per the 2026-05-13 UX request.
   The bar is rendered in PHP at the top of the results column,
   then relocated by mmh-listings.js to sit immediately above
   the injected toolbar (Bedrooms / Bathrooms / Max price /
   Sort by) — matching the visual order:
     breadcrumb → result count → BAR → toolbar → grid
   Width matches the homepage `.mmh-hero__search` formula
   `min(96%, 1180px)` so both pages render the bar at the same
   proportions; the inner `.mmh-search` card styles cascade
   identically (single component, single source of truth). */
body.mmh-v2 .mmh-search-page__search {
    width: min(96%, 1180px);
    max-width: 100%;
    margin: 0 auto clamp(20px, 3vw, 36px);
}
@media (max-width: 720px) {
    body.mmh-v2 .mmh-search-page__search {
        width: auto;
        margin-inline: 0;
    }
}

/* 56.5 — Results toolbar (the legacy .searchMessage pill).
   Drop the centered pill aesthetic in favour of a flat editorial
   strip that matches the home page section-head. */
body.mmh-v2 .mmh-search-page--results #searchResults {
    background: transparent !important;
    padding-block: 0 !important;
}
body.mmh-v2 .mmh-search-page--results #searchResults .search_col {
    margin-top: clamp(16px, 2vw, 28px) !important;
}
body.mmh-v2 .mmh-search-page--results #searchResults .searchMessage {
    background: transparent;
    border: 0;
    border-bottom: 1px solid var(--mmh-line-soft);
    border-radius: 0;
    box-shadow: none;
    padding: 0 0 18px;
    margin-bottom: clamp(20px, 2.4vw, 32px);
}
body.mmh-v2 .mmh-search-page--results #searchResults .resultsCount {
    font-family: var(--mmh-font-sans);
    font-size: 0.92rem;
    letter-spacing: 0.04em;
    color: var(--mmh-stone-700);
    text-transform: none;
}
body.mmh-v2 .mmh-search-page--results #searchResults .resultsCount strong {
    color: var(--mmh-stone-900);
    font-weight: 600;
}
body.mmh-v2 .mmh-search-page--results #searchResults .MapChartToggle .searchToggle {
    width: 40px;
    height: 40px;
    border-radius: 999px;
    background: #fff;
    border: 1px solid var(--mmh-line);
    transition: border-color var(--mmh-d-fast) var(--mmh-ease),
                color var(--mmh-d-fast) var(--mmh-ease),
                background var(--mmh-d-fast) var(--mmh-ease);
}
body.mmh-v2 .mmh-search-page--results #searchResults .MapChartToggle .searchToggle:hover {
    border-color: var(--mmh-primary);
    color: var(--mmh-primary);
}
body.mmh-v2 .mmh-search-page--results #searchResults .MapChartToggle .searchToggle a {
    color: var(--mmh-stone-900) !important;
}

/* 56.6 — Tighter grid gutters on desktop. The default 28px x
   36px y already works but feels wide at 1600px. */
@media (min-width: 1280px) {
    body.mmh-v2 .mmh-search-page--results #searchResults .searchResultsNo .row.content {
        --bs-gutter-x: 32px;
        --bs-gutter-y: 44px;
    }
}

/* 56.7 — Mobile: tighten container padding so cards have more
   image and less whitespace. */
@media (max-width: 720px) {
    body.mmh-v2 .mmh-search-page--results {
        padding-inline: 0;
    }
    body.mmh-v2 .mmh-search-page .mmh-container {
        padding-inline: 16px;
    }
}

/* 56.8 — Map toggle row was rendered as a Bootstrap .row with two
   .col-6 cells, which forced the toggles to fill 50% each. Collapse
   it to a flex strip so they sit tight against the result count. */
body.mmh-v2 .mmh-search-page--results #searchResults .MapChartToggle .row {
    --bs-gutter-x: 8px;
    width: auto;
    margin: 0;
}
body.mmh-v2 .mmh-search-page--results #searchResults .MapChartToggle .searchToggle-holder {
    flex: 0 0 auto;
    width: auto;
    padding: 0;
}

/* ============================================================
   57. Search-page structural fix (2026-05-13).
   Lift the parent twenty-twenty-one .entry-content narrow-
   default cap (610px) on the mmh-search-page + mmh-callband
   sections so they always run full-bleed inside entry-content,
   regardless of which body class is on the page.

   NOTE: An earlier revision of this section also lightened the
   body bg and zeroed the homepage's section margins. That was
   rolled back on 2026-05-13 because the homepage was meant to
   keep its existing dark colour scheme — only the cap below
   survives.
   ============================================================ */

/* 57.3 — Section cap fix. Parent rule (Alloggio/style.css L696)
   applies `max-width: var(--responsive--aligndefault-width)`
   (≈610px) to every .entry-content > * that's not aligned
   wide/full. Our injected sections live inside .entry-content
   and need to span the full grid — declare `max-width: none`
   with !important so the parent rule's six-class specificity
   doesn't accidentally re-win on a cache-miss. */
body.mmh-v2 .mmh-search-page,
body.mmh-v2 .mmh-search-page--results,
body.mmh-v2 .mmh-callband,
body.mmh-v2 .entry-content > .mmh-search-page,
body.mmh-v2 .entry-content > .mmh-callband,
body.mmh-v2 .entry-content > section.alignfull {
    max-width: none !important;
    width: 100% !important;
    margin-inline: 0 !important;
}

/* The .mmh-container inside each section keeps doing the
   80%/1600px column work — same as on the homepage. Reassert
   its width here so it can't be dragged narrower by any other
   .entry-content child rule that survived the cascade above. */
body.mmh-v2 .mmh-search-page > .mmh-container,
body.mmh-v2 .mmh-callband > .mmh-container,
body.mmh-v2 section.alignfull > .mmh-container {
    width: auto;
}

/* ============================================================
   58. Mobile rendering fixes (2026-05-13 audit).
   Tested at 360×800 / 390×844 / 414×896.
   ============================================================ */

/* 58.1 — Horizontal-overflow safety net. Some legacy components
   (marquee track, slick carousel, Bootstrap grid gutters) expand
   past the viewport on small screens; this guarantees the page
   never grows a horizontal scrollbar regardless of which child
   misbehaves. `overflow-x: clip` is preferred over `hidden` so
   sticky positioning still works on descendants. */
html,
body {
    overflow-x: clip;
    max-width: 100vw;
}

/* 58.2 — Home hero photo, mobile-safe.
   The hero image is set via an inline `style` attribute on
   <div class="mmh-hero__bg"> in front-page.php. That works on
   desktop, but if anything (Yoast HTML cleanup, a CSP, a stale
   service-worker HTML cache) strips the inline style on a phone,
   the hero degrades to a flat dark block.
   This rule paints the same photo + overlay from CSS as a fall-
   back. Inline style (specificity 1000) still wins when present,
   so admins overriding the image via ACF still works. */
body.mmh-v2 .mmh-hero--editorial .mmh-hero__bg {
    background-image:
        linear-gradient(180deg, rgba(13,24,32,0.0) 0%, rgba(13,24,32,0.25) 35%, rgba(13,24,32,0.78) 100%),
        url('assets/images/hero-mollymook.png');
    background-size: cover;
    background-position: center 35%;
    background-repeat: no-repeat;
}

/* 58.3 — Hero search-bar mobile layout.
   The earlier @media (max-width: 720px) rule at §6770 stacked
   the form via `grid-template-columns: 1fr !important`. That
   relies on out-running the desktop grid rule's own !important
   in source order, which is brittle.
   Switching to flex column here removes the dependency entirely
   — flex-direction beats whatever grid-template-columns says —
   and we lock width/min-width on every nested element so no
   single misbehaving descendant can push the form past the
   viewport edge. */
@media (max-width: 720px) {
    body.mmh-v2 .mmh-hero__search {
        position: relative;
        width: auto;
        max-width: 100%;
        margin: clamp(-32px, -6vw, -16px) 16px clamp(28px, 4vw, 36px);
        padding: 0;
        transform: none;
        left: auto;
        z-index: 6;
    }
    body.mmh-v2 .mmh-hero__search > .mmh-container {
        width: auto;
        max-width: 100%;
        padding-inline: 0;
        margin-inline: 0;
    }
    body.mmh-v2 .mmh-search {
        width: 100%;
        max-width: 100%;
        min-width: 0;
        padding: 10px;
        border-radius: 18px;
        box-sizing: border-box;
    }
    body.mmh-v2 .mmh-search__form {
        display: flex !important;
        flex-direction: column !important;
        grid-template-columns: none !important;
        width: 100%;
        gap: 0;
    }
    body.mmh-v2 .mmh-search__field {
        width: 100%;
        max-width: 100%;
        min-width: 0;
        padding: 12px 14px 10px !important;
        border-right: none !important;
        border-bottom: 1px solid var(--mmh-sand-200) !important;
        border-radius: 0;
        min-height: 56px;
        box-sizing: border-box;
    }
    body.mmh-v2 .mmh-search__field:last-of-type {
        border-bottom: none !important;
    }
    body.mmh-v2 .mmh-search__field--dates {
        border-right: none !important;
        border-bottom: 1px solid var(--mmh-sand-200) !important;
    }
    body.mmh-v2 .mmh-search__input,
    body.mmh-v2 .mmh-search__select,
    body.mmh-v2 .mmh-search__input--dates {
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
        box-sizing: border-box;
    }
    body.mmh-v2 .mmh-search__submit {
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
        min-height: 52px !important;
        margin: 10px 0 0 !important;
        font-size: 1rem !important;
        box-sizing: border-box;
    }
    /* The same form is reused on the accommodation-search page —
       carry the layout there too so behaviour is consistent. */
    body.mmh-v2 .mmh-search-page__search .mmh-search,
    body.mmh-v2 .mmh-search-page__search .mmh-search__form,
    body.mmh-v2 .mmh-search-page__search .mmh-search__field,
    body.mmh-v2 .mmh-search-page__search .mmh-search__submit {
        max-width: 100%;
        min-width: 0;
        box-sizing: border-box;
    }
}

/* 58.4 — Image safety. Every image and SVG inside the page
   should scale to its container. Catches any third-party
   markup (Guesty, Yoast schema) that ships an explicit
   pixel width. */
body.mmh-v2 main img,
body.mmh-v2 main svg,
body.mmh-v2 main video,
body.mmh-v2 main iframe {
    max-width: 100%;
    height: auto;
}

/* ============================================================
   59. #featured-stays — Editor's Picks mobile carousel fixes
   (2026-05-13 audit). Tested at 360 / 390 / 414 px.

   Background: the existing mobile rules at §6461-§6481 forced
   `display: flex; flex-wrap: nowrap` on `.row.content`, intending
   a pure CSS snap-scroll. But Slick is initialized on that same
   element whenever `featuredCount > 3`, and its computed slide
   widths fight the flex layout — net result was a half-width
   card with dark bands. We split the two cases via
   `.row.content.slick-slider` vs `:not(.slick-slider)`.

   Paired with the Slick init switching mobile to
   `slidesToShow: 1.05` so a 5% peek of the next card shows on
   the right edge — swipe affordance without a custom carousel.
   ============================================================ */

/* 59.1 — Restrict the CSS snap-scroll layout to the Slick-OFF
   path. When Slick is active it manages the slide widths, the
   sliding transform, and the dot pagination on its own; we
   stay out of its way. */
@media (max-width: 720px) {
    body.mmh-v2 .featuredListings .row.content:not(.slick-slider) {
        display: flex !important;
        flex-wrap: nowrap !important;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
        -webkit-overflow-scrolling: touch;
        gap: 12px;
        padding-inline: 16px;
    }
    body.mmh-v2 .featuredListings .row.content:not(.slick-slider) > .listing-wrapper {
        flex: 0 0 calc(100vw - 48px) !important;
        max-width: calc(100vw - 48px) !important;
        scroll-snap-align: start;
        margin-right: 0;
    }
}

/* 59.2 — Slick-active mobile layout. With slidesToShow:1.05 the
   carousel renders ~95% of the visible area as the active slide
   and a 5% peek of the next card on the right. The slide width
   is calculated by Slick — we only need to:
   · give each slide breathing room from its neighbour (4px
     padding-right) so cards don't appear glued together
   · make sure the .listing-wrapper inside fills the slide and
     can shrink (min-width: 0) so its Bootstrap col-12 max-width
     doesn't fight the Slick width
   · expose the Slick dots and theme them for the dark card */
@media (max-width: 720px) {
    body.mmh-v2 .featuredListings .row.content.slick-slider {
        padding-inline: 16px;
        overflow: visible;
        /* Slick gives .slick-list overflow:hidden which would clip
           the dot row if it sat too low; keep dots visible. */
    }
    body.mmh-v2 .featuredListings .row.content.slick-slider .slick-list {
        overflow: visible;
    }
    body.mmh-v2 .featuredListings .slick-slide {
        padding-right: 6px;
        box-sizing: border-box;
        min-width: 0;
    }
    body.mmh-v2 .featuredListings .slick-slide > .listing-wrapper,
    body.mmh-v2 .featuredListings .slick-slide .listing-wrapper {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
        width: 100% !important;
        padding-inline: 0 !important;
        margin: 0 !important;
        box-sizing: border-box;
    }
    /* Slick dots — visible on the dark card surface. */
    body.mmh-v2 .featuredListings .slick-dots {
        position: static;
        display: flex !important;
        justify-content: center;
        gap: 8px;
        margin: 18px 0 0;
        padding: 0;
        list-style: none;
    }
    body.mmh-v2 .featuredListings .slick-dots li {
        width: auto; height: auto;
        margin: 0;
    }
    body.mmh-v2 .featuredListings .slick-dots li button {
        width: 8px; height: 8px;
        padding: 0;
        border-radius: 50%;
        background: rgba(15, 26, 26, 0.25);
        border: 1px solid rgba(15, 26, 26, 0.10);
        text-indent: -9999px;
        overflow: hidden;
        cursor: pointer;
        transition: background var(--mmh-d-fast) var(--mmh-ease), transform var(--mmh-d-fast) var(--mmh-ease);
    }
    body.mmh-v2 .featuredListings .slick-dots li button::before { content: none !important; }
    body.mmh-v2 .featuredListings .slick-dots li.slick-active button {
        background: var(--mmh-primary);
        transform: scale(1.25);
    }
}

/* 59.3 — Card body: suburb badge, description, propField row.
   Apply on mobile only — desktop layout is unchanged. */
@media (max-width: 720px) {
    /* Suburb badge — never break mid-word, fall back to ellipsis. */
    body.mmh-v2 #featured-stays .productListing .suburb,
    body.mmh-v2 #featured-stays .productListing .listingSuburb {
        white-space: nowrap !important;
        word-break: keep-all !important;
        overflow-wrap: normal !important;
        max-width: calc(100% - 64px);
        overflow: hidden;
        text-overflow: ellipsis;
        padding: 6px 10px !important;
        font-size: 0.66rem !important;
    }
    /* Description — clean word-boundary line-clamp (no mid-word ellipsis). */
    body.mmh-v2 #featured-stays .productListing .listingDesc {
        word-break: keep-all !important;
        overflow-wrap: normal !important;
        hyphens: none !important;
        -webkit-line-clamp: 2;
        line-clamp: 2;
    }
    /* propField row — allow wrapping rather than clipping the 4th
       icon at the right edge. Tighten the per-item right margin
       so 4 fields normally still fit on one row at 360-414px. */
    body.mmh-v2 #featured-stays .productListing .stats,
    body.mmh-v2 #featured-stays .productListing .count {
        flex-wrap: wrap !important;
        overflow: visible !important;
        column-gap: 6px;
        row-gap: 4px;
    }
    body.mmh-v2 #featured-stays .productListing .propField {
        margin-right: 0 !important;
        padding-right: 4px;
        white-space: nowrap !important;
    }
}

/* 59.4 — Section header on mobile: stop the "Browse all stays"
   CTA from forcing the intro lead onto a narrower column that
   then visually truncates. Make both children full-width and
   stack the CTA under the lead. */
@media (max-width: 720px) {
    body.mmh-v2 #featured-stays .mmh-section-head {
        flex-direction: column;
        align-items: stretch;
        gap: 12px;
        margin-bottom: 24px;
    }
    body.mmh-v2 #featured-stays .mmh-section-head__intro {
        max-width: 100%;
        flex: 1 1 100%;
    }
    body.mmh-v2 #featured-stays .mmh-section-head__intro .mmh-lead {
        max-width: 100%;
    }
    body.mmh-v2 #featured-stays .mmh-section-head__cta {
        align-self: flex-start;
    }
}

/* 59.5 — Reduce the dead space below the carousel on mobile.
   The default .mmh-section padding-block is 56px; the carousel
   already has its own bottom margin via .mb-3 on each card
   and the dots row adds ~18px, so 32px of section bottom-
   padding is plenty. */
@media (max-width: 720px) {
    body.mmh-v2 #featured-stays.mmh-section {
        padding-bottom: clamp(28px, 5vw, 40px);
    }
    /* Trim the per-card bottom margin from Bootstrap's .mb-3 (16px)
       since we're inside a horizontal carousel — vertical gap is
       wasted. */
    body.mmh-v2 #featured-stays .listing-wrapper.mb-3 {
        margin-bottom: 0 !important;
    }
}

/* ============================================================
   60. Mobile vertical rhythm + homepage overlap fixes
   (2026-05-13 audit, third pass).
   Mobile-only — desktop ≥768px is untouched. The previous
   homepage spacing rollback (§57 note) was about not lightening
   the body bg; the rules below only change padding/margin and
   leave colour alone.
   ============================================================ */

/* 60.1 — Cumulative homepage gap was ~180px between sections
   on mobile: 90px sibling margin (parent twenty-twenty-one's
   `body:not(.archive) .site-main > *`) + 96px section padding.
   Trim both on mobile only so the page reads as a tighter
   vertical rhythm without affecting desktop. */
@media (max-width: 767.98px) {
    body.mmh-v2.home main.site-main > * {
        margin-top: 32px;
        margin-bottom: 32px;
    }
    body.mmh-v2 .mmh-section,
    body.mmh-v2 .mmh-section--sand,
    body.mmh-v2 .mmh-callband {
        padding-block: 48px;
    }
    body.mmh-v2 .mmh-pullquote-section {
        padding-block: 72px;
    }
    body.mmh-v2 .mmh-marquee {
        padding-block: 12px;
    }
}

/* 60.2 — Hero search bar floating-overlap on mobile.
   §58.3 already gives the search bar a small negative top
   margin so it overlaps the hero photo. Combined with §60.1's
   32px sibling margins, the spacing reads correctly. We
   guard against accidental excess top margin from the parent's
   `.site-main > *` rule by tightening to clamp(-32px, -6vw, -8px). */
@media (max-width: 767.98px) {
    body.mmh-v2 .mmh-hero__search {
        margin-top: clamp(-32px, -6vw, -8px) !important;
        margin-bottom: clamp(20px, 4vw, 28px) !important;
    }
}

/* 60.3 — Editorial section ("Three hours south") photo tiles
   were absolute-positioned (.mmh-editorial__photo--lg uses
   `inset: 0 24% 28% 0`; --sm uses `inset: 32% 0 0 32%`) for
   the desktop "scattered" look. On mobile the parent media
   container is only ~4/5 aspect, so the scattered photos
   collapse into each other. Stack them statically below the
   copy. */
@media (max-width: 767.98px) {
    body.mmh-v2 .mmh-editorial__media {
        aspect-ratio: auto;
        display: flex;
        flex-direction: column;
        gap: 12px;
    }
    body.mmh-v2 .mmh-editorial__photo,
    body.mmh-v2 .mmh-editorial__photo--lg,
    body.mmh-v2 .mmh-editorial__photo--sm {
        position: static;
        inset: auto;
        width: 100%;
        aspect-ratio: 4 / 3;
    }
    body.mmh-v2 .mmh-editorial__caption {
        position: static;
        margin-top: 8px;
    }
}

/* 60.4 — Make sure section-head intro paragraph never wraps
   into a wider column than its mobile container. Belt-and-
   braces; the homepage `body.home` rule at §6760 already
   handles the hero copy, this catches every other section. */
@media (max-width: 767.98px) {
    body.mmh-v2 .mmh-section-head {
        flex-direction: column;
        align-items: stretch;
        gap: 12px;
    }
    body.mmh-v2 .mmh-section-head__intro,
    body.mmh-v2 .mmh-section-head__intro .mmh-lead {
        max-width: 100%;
    }
}

/* ============================================================
   61. Sitewide dark theme (2026-05-13).

   Three-colour brand system:
       · #166B71 — primary teal (CTAs, links, surface accents)
       · #1CA0B1 — bright teal (hover / active states)
       · #E9A522 — gold (highlights, eyebrows, icons)
   Neutrals:
       · #14252a — page surface (matches Editor's Picks card)
       · #11202a / #18313a — alt surfaces for banding
       · #f7f2e8 — body text on dark (cream)
       · rgba(247,242,232,0.62-0.92) — text hierarchy on dark

   Pairs with §57's earlier rollback note: that rollback was about
   not lightening the body for the homepage. This direction is the
   opposite — go fully dark everywhere, on purpose. The two are
   not in conflict because §57 contained no body-bg rule any
   longer; only §57.3 (search-page width fix) survives, and it's
   compatible with this section.
   ============================================================ */

/* 61.1 — Brand colour map. Constrain accent palette to the three
   approved colours; derived darks/lights of those primaries are
   the only secondary accents. */
body.mmh-v2 {
    --c-bg-page:      #14252a;   /* page surface */
    --c-bg-alt:       #11202a;   /* alt section surface for banding */
    --c-bg-card:      #18313a;   /* card surface (top of gradient) */
    --c-bg-card-end:  #11202a;   /* card surface (bottom of gradient) */
    --c-line-soft:    rgba(247, 242, 232, 0.10);
    --c-line-strong:  rgba(247, 242, 232, 0.18);
    --c-text:         #f7f2e8;
    --c-text-mute:    rgba(247, 242, 232, 0.78);
    --c-text-dim:     rgba(247, 242, 232, 0.62);
    --c-text-faint:   rgba(247, 242, 232, 0.42);
}

/* 61.2 — Page surface. Cover every wrapper the WP/twenty-twenty-
   one stack paints a background on. !important defeats Yoast +
   custom-background + parent twenty-twenty-one defaults all at
   once. */
html,
body,
body.mmh-v2,
body.mmh-v2.custom-background,
body.custom-background,
.site,
#page.site,
#content.site-content,
main.site-main {
    background-color: var(--c-bg-page) !important;
}

/* 61.3 — Default text on dark. */
body.mmh-v2 {
    color: var(--c-text);
}
body.mmh-v2 h1, body.mmh-v2 h2, body.mmh-v2 h3,
body.mmh-v2 h4, body.mmh-v2 h5, body.mmh-v2 h6 {
    color: var(--c-text);
}
body.mmh-v2 p,
body.mmh-v2 li {
    color: var(--c-text-mute);
}
body.mmh-v2 .mmh-lead {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 a:not(.mmh-btn):not(.mmh-tabbar__tab):not(.mmh-header__brand):not(.shortlist-container) {
    color: #1CA0B1;
}
body.mmh-v2 a:not(.mmh-btn):hover {
    color: #E9A522;
}

/* 61.4 — Section bands. Default dark; .mmh-section--sand becomes
   the alt dark band so the alternating rhythm is preserved. */
body.mmh-v2 .mmh-section,
body.mmh-v2 .mmh-section--dark {
    background-color: var(--c-bg-page);
}
body.mmh-v2 .mmh-section--sand {
    background-color: var(--c-bg-alt);
}
body.mmh-v2 .mmh-pullquote-section,
body.mmh-v2 .mmh-editorial,
body.mmh-v2 .mmh-pullquote-section blockquote,
body.mmh-v2 .mmh-editorial p {
    background-color: transparent;
    color: var(--c-text);
}
body.mmh-v2 .mmh-pullquote blockquote {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-pullquote figcaption {
    color: var(--c-text-dim) !important;
}

/* 61.5 — Eyebrows + section-head copy on dark. */
body.mmh-v2 .mmh-eyebrow,
body.mmh-v2 .mmh-section-head .mmh-eyebrow {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-eyebrow::before,
body.mmh-v2 .mmh-eyebrow__marker {
    background: #E9A522 !important;
    color: var(--c-bg-page) !important;
}
body.mmh-v2 .mmh-section-head h2,
body.mmh-v2 .mmh-section-head h2 em {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-section-head h2 em {
    color: #E9A522 !important;
}

/* 61.6 — Property cards (single source of truth).
   Everything wearing `.productListing.card` — homepage Editor's
   Picks, search results, destination archive, taxonomy archive,
   shortlist page — now uses the same dark surface treatment.
   Removes the divergent light-card variant on archives. */
body.mmh-v2 .productListing.card,
body.mmh-v2 .productListing.card .new-card-body,
body.mmh-v2 .productListing.card .card-body,
body.mmh-v2 .productListing.card a.new-card-body,
body.mmh-v2 .productListing.card a.card-body,
body.mmh-v2 .productListing.card .card-footer {
    background-color: var(--c-bg-card-end) !important;
    background-image: linear-gradient(180deg, var(--c-bg-card) 0%, var(--c-bg-card-end) 100%) !important;
    color: var(--c-text) !important;
    border: 1px solid var(--c-line-soft) !important;
}
body.mmh-v2 .productListing.card {
    border-radius: 18px !important;
    overflow: hidden !important;
    box-shadow: 0 18px 38px -22px rgba(8, 24, 28, 0.5),
                0 2px 6px rgba(8, 24, 28, 0.22) !important;
    transition: transform 320ms cubic-bezier(.2,.7,.2,1),
                box-shadow 320ms cubic-bezier(.2,.7,.2,1) !important;
}
body.mmh-v2 .productListing.card:hover {
    transform: translateY(-6px) !important;
    box-shadow: 0 26px 56px -22px rgba(8, 24, 28, 0.65),
                0 4px 10px rgba(8, 24, 28, 0.28) !important;
}
body.mmh-v2 .productListing .new-card-body {
    padding: 18px 18px 20px !important;
}
body.mmh-v2 .productListing .listingTitle,
body.mmh-v2 .productListing .listingTitle a,
body.mmh-v2 .productListing h3.listingTitle,
body.mmh-v2 .productListing .listingText {
    color: var(--c-text) !important;
}
body.mmh-v2 .productListing .listingDesc,
body.mmh-v2 .productListing .home__desc,
body.mmh-v2 .productListing .reviews,
body.mmh-v2 .productListing .no_of_reviews {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .productListing .reviews .stars {
    color: #E9A522 !important;
}
body.mmh-v2 .productListing .stats .propField,
body.mmh-v2 .productListing .count .propField,
body.mmh-v2 .productListing .fieldSleeps,
body.mmh-v2 .productListing .fieldBedrooms,
body.mmh-v2 .productListing .fieldBathrooms,
body.mmh-v2 .productListing .fieldCars {
    color: var(--c-text) !important;
}
body.mmh-v2 .productListing .propField::before {
    color: #E9A522 !important;
}
body.mmh-v2 .productListing .listingPrice,
body.mmh-v2 .productListing .listingPrice .price-amount,
body.mmh-v2 .productListing .price-amount {
    color: var(--c-text) !important;
}
body.mmh-v2 .productListing .listingPrice .shrink,
body.mmh-v2 .productListing .shrink {
    color: var(--c-text-dim) !important;
}
body.mmh-v2 .productListing .listingPrice {
    border-top: 1px solid var(--c-line-soft) !important;
    padding-top: 10px !important;
    margin-top: 4px !important;
}
body.mmh-v2 .productListing .card-footer {
    border-top: 1px solid var(--c-line-soft) !important;
    background: transparent !important;
}
body.mmh-v2 .productListing .suburb,
body.mmh-v2 .productListing .listingSuburb {
    background: rgba(15, 26, 26, 0.78) !important;
    color: var(--c-text) !important;
    border: 1px solid var(--c-line-strong) !important;
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
}

/* 61.7 — Destination / search archive page container.
   Suburb taxonomy (/destinations/{slug}/) and features taxonomy
   pages previously inherited the 1100 px entry-content cap from
   §4650, leaving cards squeezed into a narrow column. Lift the
   cap so the grid lives on the same 80%/1600px container as the
   homepage. Pairs with §57.3's accommodation-search width fix. */
body.mmh-v2.tax-suburbs .entry-content,
body.mmh-v2.tax-features .entry-content,
body.mmh-v2.tax-regions .entry-content,
body.mmh-v2.tax-listingcat .entry-content {
    max-width: none !important;
    margin-inline: 0 !important;
    padding-inline: 0 !important;
}
body.mmh-v2.tax-suburbs .entry-content > *:not(.alignwide):not(.alignfull),
body.mmh-v2.tax-features .entry-content > *:not(.alignwide):not(.alignfull),
body.mmh-v2.tax-regions .entry-content > *:not(.alignwide):not(.alignfull),
body.mmh-v2.tax-listingcat .entry-content > *:not(.alignwide):not(.alignfull) {
    max-width: none;
    margin-inline: 0;
}
body.mmh-v2.tax-suburbs .site-main,
body.mmh-v2.tax-features .site-main {
    padding-inline: 0 !important;
    max-width: none !important;
}

/* The archive page-header (term name + count) gets its own
   container width so it lines up with the grid below it. */
body.mmh-v2.tax-suburbs .page-header,
body.mmh-v2.tax-features .page-header,
body.mmh-v2.archive .page-header {
    max-width: min(80%, 1600px);
    margin-inline: auto;
    padding-inline: clamp(20px, 4vw, 40px);
    padding-block: clamp(48px, 8vw, 96px) clamp(24px, 4vw, 48px);
}
body.mmh-v2.tax-suburbs .archive-title,
body.mmh-v2.tax-features .archive-title,
body.mmh-v2 .archive-title,
body.mmh-v2 .page-header .page-title {
    color: var(--c-text) !important;
    font-family: var(--mmh-font-serif);
    font-size: clamp(2.2rem, 4.4vw, 3.6rem);
    line-height: 1.04;
    letter-spacing: -0.022em;
}

/* 61.8 — Archive grid: 3-up at desktop, 2-up at tablet, 1-up
   on mobile — matching the homepage Editor's Picks proportions.
   The plugin emits `.listing-wrapper.col` (auto-fill flex item);
   we lock the column widths explicitly so cards always render at
   the same size as the homepage. */
body.mmh-v2.tax-suburbs #searchResults,
body.mmh-v2.tax-features #searchResults,
body.mmh-v2.archive #searchResults {
    background: transparent !important;
    padding-block: 0 !important;
}
body.mmh-v2.tax-suburbs #searchResults .row.content,
body.mmh-v2.tax-features #searchResults .row.content,
body.mmh-v2.archive #searchResults .row.content {
    --bs-gutter-x: 28px;
    --bs-gutter-y: 36px;
    max-width: min(80%, 1600px);
    margin-inline: auto !important;
    padding-inline: clamp(20px, 4vw, 40px);
}
body.mmh-v2.tax-suburbs #searchResults .listing-wrapper,
body.mmh-v2.tax-features #searchResults .listing-wrapper,
body.mmh-v2.archive #searchResults .listing-wrapper {
    flex: 0 0 100%;
    max-width: 100%;
    padding-inline: 14px;
    margin-bottom: 0;
}
@media (min-width: 600px) {
    body.mmh-v2.tax-suburbs #searchResults .listing-wrapper,
    body.mmh-v2.tax-features #searchResults .listing-wrapper,
    body.mmh-v2.archive #searchResults .listing-wrapper {
        flex: 0 0 50%;
        max-width: 50%;
    }
}
@media (min-width: 992px) {
    body.mmh-v2.tax-suburbs #searchResults .listing-wrapper,
    body.mmh-v2.tax-features #searchResults .listing-wrapper,
    body.mmh-v2.archive #searchResults .listing-wrapper {
        flex: 0 0 33.333%;
        max-width: 33.333%;
    }
}

/* 61.9 — Card image — fixed aspect so the photo dominates the
   card visually, matching the homepage Editor's Picks card. */
body.mmh-v2 .productListing .card-img-top {
    aspect-ratio: 4 / 3 !important;
    border-radius: 0 !important;
    overflow: hidden;
    border-bottom: 1px solid var(--c-line-soft);
}

/* 61.10 — Form controls on dark. Inputs, selects, the search
   bar fields all need a dark surface + cream text or they look
   like leaked white islands. */
body.mmh-v2 .mmh-search,
body.mmh-v2 .mmh-search__form {
    background: var(--c-bg-card) !important;
    border: 1px solid var(--c-line-soft) !important;
    color: var(--c-text);
}
body.mmh-v2 .mmh-search__field {
    border-right-color: var(--c-line-soft) !important;
    border-bottom-color: var(--c-line-soft) !important;
    color: var(--c-text);
}
body.mmh-v2 .mmh-search__field:hover {
    background: rgba(247, 242, 232, 0.04) !important;
}
body.mmh-v2 .mmh-search__label {
    color: var(--c-text-dim) !important;
}
body.mmh-v2 .mmh-search__input,
body.mmh-v2 .mmh-search__select,
body.mmh-v2 .mmh-search__input--dates {
    color: var(--c-text) !important;
    background: transparent !important;
}
body.mmh-v2 .mmh-search__input::placeholder,
body.mmh-v2 .mmh-search__input--dates::placeholder {
    color: var(--c-text-faint) !important;
}
body.mmh-v2 .mmh-search__submit {
    background: #166B71 !important;
    color: #f7f2e8 !important;
}
body.mmh-v2 .mmh-search__submit:hover {
    background: #1CA0B1 !important;
}

/* 61.11 — Toolbar (Bedrooms / Bathrooms / Max price / Sort by)
   on the search page. */
body.mmh-v2 .mmh-toolbar {
    background: var(--c-bg-card) !important;
    border: 1px solid var(--c-line-soft) !important;
    color: var(--c-text);
}
body.mmh-v2 .mmh-toolbar__count,
body.mmh-v2 .mmh-toolbar__field span,
body.mmh-v2 .mmh-toolbar__field label {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-toolbar__field select {
    background: var(--c-bg-page) !important;
    color: var(--c-text) !important;
    border: 1px solid var(--c-line-soft) !important;
}
body.mmh-v2 .mmh-chip {
    background: var(--c-bg-page) !important;
    color: var(--c-text-mute) !important;
    border: 1px solid var(--c-line-soft) !important;
}
body.mmh-v2 .mmh-chip:hover {
    border-color: #1CA0B1 !important;
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-chip.is-active,
body.mmh-v2 .mmh-chip[aria-pressed="true"] {
    background: #166B71 !important;
    color: #f7f2e8 !important;
    border-color: #166B71 !important;
}

/* 61.12 — Buttons. Only the three brand colours allowed. */
body.mmh-v2 .mmh-btn--primary {
    background: #166B71 !important;
    color: #f7f2e8 !important;
    border-color: #166B71 !important;
}
body.mmh-v2 .mmh-btn--primary:hover {
    background: #1CA0B1 !important;
    color: #f7f2e8 !important;
}
body.mmh-v2 .mmh-btn--inverse {
    background: #E9A522 !important;
    color: #14252a !important;
    border-color: #E9A522 !important;
}
body.mmh-v2 .mmh-btn--inverse:hover {
    background: #f7c659 !important;
    color: #14252a !important;
}

/* 61.13 — Breadcrumbs cream-tinted. */
body.mmh-v2 .mmh-breadcrumbs,
body.mmh-v2 .mmh-breadcrumbs a,
body.mmh-v2 .mmh-breadcrumbs li {
    color: var(--c-text-dim) !important;
}
body.mmh-v2 .mmh-breadcrumbs a:hover {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-breadcrumbs__sep {
    color: var(--c-text-faint) !important;
}

/* 61.14 — Cards/tiles outside .productListing — destination
   bento tiles on the homepage are .mmh-destination; the same
   dark treatment so the visual system stays unified. */
body.mmh-v2 .mmh-destination {
    background-color: var(--c-bg-card-end) !important;
    border: 1px solid var(--c-line-soft);
}
body.mmh-v2 .mmh-destination .mmh-destination__name,
body.mmh-v2 .mmh-destination__kicker {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-destination__blurb {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-destination__count {
    color: #E9A522 !important;
}

/* 61.15 — FAQ accordion on dark. */
body.mmh-v2 .entry-content details,
body.mmh-v2 .mmh-faq__item {
    background-color: var(--c-bg-card-end) !important;
    border-color: var(--c-line-soft) !important;
    color: var(--c-text);
}
body.mmh-v2 .entry-content details > summary,
body.mmh-v2 .mmh-faq__item summary {
    color: var(--c-text) !important;
}
body.mmh-v2 .entry-content details > *:not(summary) {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-faq-chevron {
    color: #1CA0B1 !important;
}

/* 61.16 — Mobile: tighten card grid padding so the wider cards
   still look comfortable at 360-414px. */
@media (max-width: 767.98px) {
    body.mmh-v2.tax-suburbs #searchResults .row.content,
    body.mmh-v2.tax-features #searchResults .row.content,
    body.mmh-v2.archive #searchResults .row.content {
        padding-inline: 16px;
        --bs-gutter-x: 16px;
        --bs-gutter-y: 20px;
    }
    body.mmh-v2.tax-suburbs .page-header,
    body.mmh-v2.tax-features .page-header,
    body.mmh-v2.archive .page-header {
        padding-inline: 16px;
        padding-block: 40px 20px;
    }
}

/* ============================================================
   62. Contrast fixes for dark theme (2026-05-13 follow-up).

   §61 flipped surfaces to dark but the inherited text-colour
   rules still target the dark-tones in the token system
   (--mmh-stone-900 #111919, --ink #1A1A1A, --mmh-stone-700
   #364444). On the new dark page surface those produce
   1.1-1.5:1 contrast — illegible. We can't redefine the tokens
   sitewide because many BACKGROUND rules reuse them. So this
   section explicitly overrides text-colour at the affected
   selectors, leaving surface tokens alone.

   Rule of thumb: any text on a dark surface goes to one of
       --c-text       #f7f2e8  (headings, primary body)
       --c-text-mute  rgba(247,242,232,0.78)  (body paragraphs, leads)
       --c-text-dim   rgba(247,242,232,0.62)  (meta, captions)
       --c-text-faint rgba(247,242,232,0.42)  (placeholder, hint)
       #E9A522 (gold accents — italics in display heads, eyebrows, icons)
       #1CA0B1 (bright teal — links, hover states)

   Light surfaces (gold buttons, teal buttons) keep their dark
   text from §61.12. Those rules are NOT touched here.
   ============================================================ */

/* 62.1 — Editorial section ("Three hours south") had ink-on-paper
   text. Its lead and body copy now need cream. */
body.mmh-v2 .mmh-editorial,
body.mmh-v2 .mmh-editorial__copy,
body.mmh-v2 .mmh-editorial__copy p,
body.mmh-v2 .mmh-editorial__copy .mmh-lead,
body.mmh-v2 .mmh-editorial__list li {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-editorial h2,
body.mmh-v2 .mmh-editorial__copy h2 {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-editorial h2 em,
body.mmh-v2 .mmh-editorial__copy h2 em {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-editorial__list svg {
    color: #1CA0B1 !important;
}
body.mmh-v2 .mmh-editorial__caption {
    color: var(--c-text-dim) !important;
}

/* 62.2 — Mood filter ("Travel by feeling, not just place")
   tabs/panels. The mood card had ink text on paper. */
body.mmh-v2 .mmh-mood,
body.mmh-v2 .mmh-mood__copy,
body.mmh-v2 .mmh-mood__panel {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-mood__tab {
    color: var(--c-text-mute) !important;
    border-color: var(--c-line-soft) !important;
}
body.mmh-v2 .mmh-mood__tab:hover {
    color: var(--c-text) !important;
    border-color: #1CA0B1 !important;
}
body.mmh-v2 .mmh-mood__tab.is-active {
    color: #14252a !important;
    background: #E9A522 !important;
    border-color: #E9A522 !important;
}
body.mmh-v2 .mmh-mood__tab svg {
    color: inherit !important;
}

/* 62.3 — Value-props ("A small team. A high bar.") cards. */
body.mmh-v2 .mmh-value-prop,
body.mmh-v2 .mmh-value-props li {
    color: var(--c-text-mute) !important;
    background-color: var(--c-bg-card-end) !important;
    border: 1px solid var(--c-line-soft);
}
body.mmh-v2 .mmh-value-prop h3,
body.mmh-v2 .mmh-value-props li h3 {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-value-prop p,
body.mmh-v2 .mmh-value-props li p {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-value-prop__icon,
body.mmh-v2 .mmh-value-prop__icon svg {
    color: #E9A522 !important;
}

/* 62.4 — Pull-quote ("Our philosophy has always been..."). */
body.mmh-v2 .mmh-pullquote,
body.mmh-v2 .mmh-pullquote blockquote,
body.mmh-v2 .mmh-pullquote-section blockquote {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-pullquote blockquote em,
body.mmh-v2 .mmh-pullquote-section blockquote em {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-pullquote figcaption {
    color: var(--c-text-dim) !important;
}
body.mmh-v2 .mmh-pullquote__mark {
    color: rgba(233, 165, 34, 0.18) !important;
}

/* 62.5 — Trust strip + hero stat row + hero trust band. */
body.mmh-v2 .mmh-hero__trust,
body.mmh-v2 .mmh-hero__trust span {
    color: rgba(247, 242, 232, 0.85) !important;
}
body.mmh-v2 .mmh-hero__trust .mmh-hero__trust-star {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-hero-stat__num {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-hero-stat__label {
    color: rgba(247, 242, 232, 0.72) !important;
}

/* 62.6 — Section heads — eyebrow markers + headings + leads.
   Catches every `.mmh-section-head h2` site-wide (not just
   homepage) so destination archive heads and search-page heads
   match. */
body.mmh-v2 .mmh-section-head h2,
body.mmh-v2 .mmh-section-head .mmh-section-head__intro h2 {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-section-head h2 em {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-section-head .mmh-lead,
body.mmh-v2 .mmh-section-head__intro .mmh-lead {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-link-arrow,
body.mmh-v2 .mmh-section-head__cta {
    color: #1CA0B1 !important;
}
body.mmh-v2 .mmh-link-arrow:hover,
body.mmh-v2 .mmh-section-head__cta:hover {
    color: #E9A522 !important;
}

/* 62.7 — CTA strip ("Become part of the family"). The
   .mmh-cta--owners surface was already dark; we just unify the
   accent text colors. */
body.mmh-v2 .mmh-cta,
body.mmh-v2 .mmh-cta--owners {
    color: var(--c-text);
}
body.mmh-v2 .mmh-cta h2,
body.mmh-v2 .mmh-cta h3 {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-cta p,
body.mmh-v2 .mmh-cta__copy p {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-cta__steps li,
body.mmh-v2 .mmh-cta__steps li span {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-cta__steps li span {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-cta__incentive {
    color: var(--c-text-dim) !important;
}

/* 62.8 — Marquee strip. Already dark; just confirm gold accent
   + cream separator. */
body.mmh-v2 .mmh-marquee__item {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-marquee__sep {
    color: rgba(247, 242, 232, 0.42) !important;
}

/* 62.9 — Footer. The footer was originally dark with cream
   text; keep that, but make sure the dark theme didn't break
   the column heads / link colors. */
body.mmh-v2 .mmh-footer,
body.mmh-v2 .mmh-footer__brand p,
body.mmh-v2 .mmh-footer__col ul li,
body.mmh-v2 .mmh-footer__col ul li a {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-footer__col h4,
body.mmh-v2 .mmh-footer__brand .mmh-header__brand-text {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-footer__col ul li a:hover {
    color: #E9A522 !important;
}
body.mmh-v2 .mmh-footer__bar,
body.mmh-v2 .mmh-footer__legal a {
    color: var(--c-text-dim) !important;
}

/* 62.10 — Catch-all for generic text inside .mmh-section blocks
   that none of the above caught. Last-resort sweep — explicitly
   excludes elements we KNOW have light backgrounds (buttons,
   active chips, the active mood tab) so we don't accidentally
   paint dark text in a way that hurts contrast. */
body.mmh-v2 .mmh-section :is(p, li, dt, dd, span):not(.mmh-btn):not(.mmh-btn *):not(.mmh-chip.is-active):not(.mmh-mood__tab.is-active):not(.mmh-eyebrow):not(.mmh-eyebrow__marker):not(.mmh-eyebrow *) {
    color: var(--c-text-mute);
}
body.mmh-v2 .mmh-section :is(h1, h2, h3, h4, h5, h6) {
    color: var(--c-text);
}

/* 62.11 — Eyebrow markers (the gold pill with Roman numerals
   "I", "II", ...) — gold background, dark text. */
body.mmh-v2 .mmh-eyebrow__marker {
    color: #14252a !important;
    background: #E9A522 !important;
}

/* 62.12 — Visited-link color was dark teal #166B71, which on a
   #14252a surface clears 4.5:1 — fine. Hover stays gold. But
   reset `:visited` on the value-prop / cta / mood cards so the
   links inside them aren't a different colour from the static
   text around them. */
body.mmh-v2 .mmh-value-prop a,
body.mmh-v2 .mmh-cta a:not(.mmh-btn),
body.mmh-v2 .mmh-mood__panel a:not(.mmh-btn) {
    color: #1CA0B1;
}
body.mmh-v2 .mmh-value-prop a:visited,
body.mmh-v2 .mmh-cta a:not(.mmh-btn):visited,
body.mmh-v2 .mmh-mood__panel a:not(.mmh-btn):visited {
    color: #1CA0B1;
}

/* ============================================================
   63. Follow-up: AA contrast + seamless cards / search-bar
   (2026-05-15, from Playwright audit findings).

   Six AA failures the §62 sweep didn't catch:
     - hero search floated-label dark on dark (#2a3a3a/#18313a)
     - inner-page breadcrumb current-page dark on dark
     - contact / list-with-us form labels dark on dark
     - hero `.mmh-hero__phone` gold-soft on teal (3.32:1)
     - callband `.mmh-btn--inverse[href^=tel:]` gold-on-gold,
       because a tel-specific !important rule trumped the
       button's dark text colour
     - hero `.mmh-search__label` (WHERE/DATES/GUESTS) stone-700
       on dark teal — barely AA, eyestrain

   Plus two visual asks: drop the WHERE/DATES/GUESTS column
   dividers, and remove the 1px outline on `.productListing`
   cards so they sit flush on the dark page background.
   ============================================================ */

/* 63.1 — Seamless hero search bar (no internal dividers). */
body.mmh-v2 .mmh-search__field { border-right: none !important; }
@media (max-width: 920px) {
    body.mmh-v2 .mmh-search__field { border-bottom: none !important; }
}

/* 63.2 — Floated form labels legible on dark surfaces.
   The hero search, contact form, and list-with-us form all sit
   on dark backgrounds; inherited stone-700 was 1.14–1.55:1. */
body.mmh-v2 .mmh-floated-label,
body.mmh-v2 .mmh-hero__search .mmh-floated-label,
body.mmh-v2 .mmh-search__field .mmh-floated-label,
body.mmh-v2 .entry-content form .mmh-floated-label,
body.mmh-v2 .entry-content label,
body.mmh-v2 form label {
    color: var(--c-text-mute) !important;
}
body.mmh-v2 .mmh-floated-label__req,
body.mmh-v2 .entry-content label .required,
body.mmh-v2 form label .required {
    color: #E9A522 !important;
}

/* 63.3 — Hero search column labels (WHERE / DATES / GUESTS)
   and input values legible against the dark search form. */
body.mmh-v2 .mmh-hero__search .mmh-search__label,
body.mmh-v2 .mmh-search__form .mmh-search__label {
    color: var(--c-text-dim) !important;
}
body.mmh-v2 .mmh-hero__search .mmh-search__input,
body.mmh-v2 .mmh-search__form .mmh-search__input {
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-hero__search .mmh-search__input::placeholder,
body.mmh-v2 .mmh-search__form .mmh-search__input::placeholder {
    color: var(--c-text-faint) !important;
}

/* 63.4 — Breadcrumb current page legible on the dark page-header
   strip. Was painted with stone-900 / ink-900 (1.12:1). */
body.mmh-v2 .mmh-breadcrumbs li[aria-current="page"],
body.mmh-v2 .mmh-breadcrumbs li[aria-current="page"] span,
body.mmh-v2 .mmh-breadcrumbs [aria-current="page"] {
    color: var(--c-text) !important;
}

/* 63.5 — Hero phone link: was gold-soft on teal (3.32:1).
   Lift to cream so it reads alongside the other hero meta. */
body.mmh-v2 .mmh-hero__phone {
    color: var(--c-text) !important;
    border-bottom-color: rgba(247, 242, 232, 0.42) !important;
}
body.mmh-v2 .mmh-hero__phone:hover {
    color: #E9A522 !important;
    border-bottom-color: #E9A522 !important;
}

/* 63.6 — Callband phone CTA (`.mmh-btn--inverse[href^="tel:"]`).
   The gold-on-gold (1.13:1) happened because the tel-selector
   rule had higher specificity than `.mmh-btn--inverse`. Need
   selectors that beat (0,3,2) — hence the long-form below. */
body.mmh-v2 .mmh-callband a.mmh-btn--inverse[href^="tel:"],
body.mmh-v2 .mmh-callband a.mmh-btn[href^="tel:"].mmh-btn--inverse,
body.mmh-v2 a.mmh-btn--inverse[href^="tel:"] {
    color: #14252a !important;
}

/* 63.7 — Property cards seamless on dark background.
   Drop the 1px outline + internal price/footer dividers; cards
   already separate via gradient + shadow.
   #featured-stays at line 8965 wins on specificity, so we include
   it explicitly here. */
body.mmh-v2 .productListing.card,
body.mmh-v2 .productListing.card .new-card-body,
body.mmh-v2 .productListing.card .card-body,
body.mmh-v2 .productListing.card a.new-card-body,
body.mmh-v2 .productListing.card a.card-body,
body.mmh-v2 .productListing.card .card-footer,
body.mmh-v2 #featured-stays .productListing.card,
body.mmh-v2 #featured-stays .productListing.card .new-card-body,
body.mmh-v2 #featured-stays .productListing.card .card-body,
body.mmh-v2 #featured-stays .productListing.card .card-footer {
    border: none !important;
}
body.mmh-v2 .productListing .listingPrice,
body.mmh-v2 .productListing .card-footer,
body.mmh-v2 #featured-stays .productListing .listingPrice,
body.mmh-v2 #featured-stays .productListing .card-footer {
    border-top: none !important;
}

/* ============================================================
   64. Round-2 follow-ups (2026-05-15):

     - hero search bar still showed a 1px outer ring on .mmh-search
       and .mmh-search__form
     - eyebrow Roman-numeral marker rendered as a tiny gold
       rectangle that looked like a layout artefact — replace with
       a slim gold accent line, drop the numeral text
     - homepage FAQ section (.mmh-section--sand → light surface)
       inherited the dark-theme h2 colour from §62 — invisible
     - FAQ accordion's open state flipped the summary to a
       pale-mint surface with dark stone-900 text, breaking the
       dark-card visual rhythm of the closed items
     - .mmh-value-prop::before injected a "01/02/03/04" counter
       chip onto each card; not part of the intended look
   ============================================================ */

/* 64.1 — Hero search bar: kill the outer 1px ring AND the inset
   top-edge highlight (the rgba(255,255,255,0.6) 0 1 inset shadow
   that read as a hairline border around the pill). Keep the
   drop shadow for elevation. */
body.mmh-v2 .mmh-hero__search .mmh-search,
body.mmh-v2 .mmh-hero__search .mmh-search__form,
body.mmh-v2 .mmh-search,
body.mmh-v2 .mmh-search__form {
    border: none !important;
}
body.mmh-v2 .mmh-hero__search .mmh-search,
body.mmh-v2 .mmh-search {
    box-shadow:
        0 24px 60px -24px rgba(15, 102, 98, 0.32),
        0 8px 24px -8px rgba(0, 0, 0, 0.10) !important;
}

/* 64.2 — Eyebrow marker: replace the gold rectangle with a small
   horizontal accent line. The Roman numeral text is hidden, the
   element stays in flow as a 18×2px gold rule sitting on the
   eyebrow baseline. */
body.mmh-v2 .mmh-eyebrow__marker {
    display: inline-block !important;
    width: 18px !important;
    height: 2px !important;
    padding: 0 !important;
    background: #E9A522 !important;
    color: transparent !important;
    font-size: 0 !important;
    line-height: 0 !important;
    border-radius: 1px !important;
    vertical-align: middle !important;
    overflow: hidden !important;
    text-indent: 9999px !important;
    margin: 0 10px 0 0 !important;
}

/* 64.3 — Value-prop cards: remove the "1./2./3./4." numbering.
   `.mmh-value-props` is an <ol>, so each <li> gets a native
   `list-item` marker on top of any counter chip §62 may inject. */
body.mmh-v2 .mmh-value-props {
    list-style: none !important;
    padding-left: 0 !important;
}
body.mmh-v2 .mmh-value-props li,
body.mmh-v2 .mmh-value-prop {
    list-style: none !important;
}
body.mmh-v2 .mmh-value-props li::marker,
body.mmh-v2 .mmh-value-prop::marker {
    content: "" !important;
}
body.mmh-v2 .mmh-value-prop::before,
body.mmh-v2 .mmh-value-props li::before,
body.mmh-v2 .mmh-value-prop__num {
    content: none !important;
    display: none !important;
}

/* 64.4 — FAQ section heading legible on its cream background.
   §62.6/§62.10 paint every .mmh-section-head h2 cream for the
   dark-theme flip. The FAQ section (`#faq`) is the one section
   that's still cream (other `.mmh-section--sand` blocks have been
   re-painted dark by a later rule), so we scope by id here. */
body.mmh-v2 #faq .mmh-section-head h2,
body.mmh-v2 #faq .mmh-section :is(h1, h2, h3, h4, h5, h6),
body.mmh-v2 #faq h2 {
    color: var(--mmh-stone-900) !important;
}
body.mmh-v2 #faq .mmh-section-head h2 em,
body.mmh-v2 #faq h2 em {
    color: #B6841C !important;
}
body.mmh-v2 #faq .mmh-section-head .mmh-lead,
body.mmh-v2 #faq .mmh-section-head__intro .mmh-lead,
body.mmh-v2 #faq p {
    color: var(--mmh-stone-700) !important;
}

/* 64.5 — FAQ accordion: open state was flipping to pale-mint with
   dark stone-900 text. Force it to match the dark closed state
   so all items read as one stack. */
body.mmh-v2 .mmh-faq details[open],
body.mmh-v2 .mmh-faq__item[open],
body.mmh-v2 .entry-content details[open] {
    background-color: var(--c-bg-card-end) !important;
}
body.mmh-v2 .mmh-faq details[open] summary,
body.mmh-v2 .mmh-faq__item[open] summary,
body.mmh-v2 .entry-content details[open] > summary,
body.mmh-v2 .mmh-faq details[open] summary span,
body.mmh-v2 .mmh-faq__item[open] summary span {
    background: transparent !important;
    background-color: transparent !important;
    color: var(--c-text) !important;
}
body.mmh-v2 .mmh-faq details[open] > *:not(summary),
body.mmh-v2 .mmh-faq__item[open] > *:not(summary),
body.mmh-v2 .mmh-faq__item[open] p,
body.mmh-v2 .entry-content details[open] > *:not(summary) {
    color: var(--c-text-mute) !important;
}

/* ============================================================
   65. QA audit (2026-05-22) — surface-aware contrast pass.

   Driven by a live-DOM WCAG crawl across home, /specials/,
   /list-with-us/, /contact/, /faqs/ and /stay/*. The root cause
   in every finding was the same: the cream brand text
   (--c-text-mute = rgba(247,242,232,0.78)) and the dark teal
   ink (--c-ink-700 = #2A3A3A) being applied without knowing
   which surface they sit on. Section 62 painted "mood" copy
   cream when the mood card is white; the homepage editorial
   lead inherited an ink-700 rule meant for sand sections, but
   Section 61 flipped sand sections dark.

   Approach: introduce a small set of paired tokens
   (text-on-dark / text-on-light, gold-on-dark / gold-on-light,
   teal-link-dark / teal-link-light) and apply them at the
   component level so dark-on-dark and cream-on-cream stop
   happening as more components are added.
   ============================================================ */

body.mmh-v2 {
    /* Paired text tokens — pick by surface, not by component. */
    --text-on-dark:        #F7F2E8;
    --text-on-light:       #14252A;
    --text-muted-on-dark:  #C8D4D4;
    --text-muted-on-light: #4F5C5C;

    /* Eyebrow gold flips: light surfaces need the deep variant
       to clear 4.5:1 — #E9A522 only manages 1.9–2.0:1 on cream. */
    --gold-on-dark:        #E9A522;
    --gold-on-light:       #8A5E0A;

    /* Link teal flips: #166B71 is fine on cream but 2.5:1 on
       the dark page surface; lift to #5BC0CB there. */
    --teal-link-on-dark:   #5BC0CB;
    --teal-link-on-light:  #0F6F75;
}

/* 65.1 — Mood card ("Travel by feeling, not just place").
   `.mmh-mood` is a white card sitting inside the dark sand
   section. §62.2 painted .mmh-mood__copy cream-mute (invisible
   on white). Lock the copy to dark ink on the white surface. */
body.mmh-v2 .mmh-mood,
body.mmh-v2 .mmh-mood__copy,
body.mmh-v2 .mmh-mood__panel,
body.mmh-v2 .mmh-mood__panel p {
    color: var(--text-on-light) !important;
}
body.mmh-v2 .mmh-mood__copy {
    opacity: 1 !important;
}

/* 65.2 — Property description paragraphs on /stay/* pages.
   `#listingContent` is rendered into the white card on single
   listings. §61.3's global `body.mmh-v2 p` rule paints every
   paragraph cream-mute; the older `.singleListing p` ink-700
   override at line 7494 loses to source-order in some setups.
   Lock every text-bearing child of the description block to
   dark ink. */
body.mmh-v2 #listingContent,
body.mmh-v2 #listingContent p,
body.mmh-v2 #listingContent li,
body.mmh-v2 .singleListing #listingContent p,
body.mmh-v2 .single-listing-block p,
body.mmh-v2 .single-listing-block li,
body.mmh-v2 .listingContentWrapper p,
body.mmh-v2 .listingContentWrapper li,
body.mmh-v2 .description p,
body.mmh-v2 .description li {
    color: var(--text-on-light) !important;
}
body.mmh-v2 #listingContent h2,
body.mmh-v2 .single-listing-block h2,
body.mmh-v2 .listingContentWrapper h2 {
    color: var(--text-on-light) !important;
}

/* 65.3 — Hero search bar placeholders + helper labels. The
   floated-label pattern earlier puts a real <label> above the
   field, but the placeholder text inside the input was still
   dark teal on dark navy (1.3:1). Lift to muted-cream. */
body.mmh-v2 .mmh-tabbar input::placeholder,
body.mmh-v2 .mmh-hero__search input::placeholder,
body.mmh-v2 .mmh-search__input::placeholder,
body.mmh-v2 .mmh-hero__search .mmh-search__help,
body.mmh-v2 .mmh-hero__search .mmh-tabbar__help {
    color: var(--text-muted-on-dark) !important;
    opacity: 1 !important;
}

/* 65.4 — Lead paragraphs that sit on the dark page surface.
   Two paths into this bug:
     (a) homepage `.mmh-editorial .mmh-lead` was pushed to
         ink-700 by rule §HOME-7705 even though §61 flipped
         the editorial surface dark.
     (b) `.mmh-section--sand .mmh-lead` followed sand→cream
         expectations when sand was light, but §61.4 turned
         every sand band into the alt dark page.
   Force every .mmh-lead on a dark page surface to cream-muted
   regardless of which section wraps it. */
body.mmh-v2.home .mmh-section .mmh-lead,
body.mmh-v2.home .mmh-section p.mmh-lead,
body.mmh-v2.home .mmh-editorial .mmh-lead,
body.mmh-v2.home .mmh-editorial p.mmh-lead,
body.mmh-v2.home .mmh-section--sand .mmh-lead,
body.mmh-v2.home .mmh-section--sand p.mmh-lead,
body.mmh-v2 .mmh-section .mmh-lead,
body.mmh-v2 .mmh-section p.mmh-lead {
    color: var(--text-muted-on-dark) !important;
}

/* 65.5 — Mobile bottom tab bar labels. The tab bar itself paints
   a dark-glass background on dark-OS systems (§dark-mode-media)
   but §51.1 still locks labels to ink-700 (#2A3A3A). On the dark
   navy strip that's 1.3:1. Lift labels to muted-cream, keep the
   active state in brand gold so it pops. */
body.mmh-v2 a.mmh-tabbar__tab,
body.mmh-v2 a.mmh-tabbar__tab .mmh-tabbar__label,
body.mmh-v2 .mmh-tabbar__tab,
body.mmh-v2 .mmh-tabbar__tab .mmh-tabbar__label {
    color: var(--text-muted-on-dark) !important;
}
body.mmh-v2 a.mmh-tabbar__tab.is-active,
body.mmh-v2 a.mmh-tabbar__tab.is-active .mmh-tabbar__label,
body.mmh-v2 .mmh-tabbar__tab.is-active,
body.mmh-v2 .mmh-tabbar__tab.is-active .mmh-tabbar__label {
    color: var(--gold-on-dark) !important;
}
/* Lock the tab bar surface to a consistent dark glass so
   light-OS visitors get the same look as dark-OS visitors —
   keeps the cream labels readable in both modes. */
@media (max-width: 920px) {
    body.mmh-v2 .mmh-tabbar {
        background: rgba(20, 37, 42, 0.94) !important;
        backdrop-filter: saturate(160%) blur(20px) !important;
        -webkit-backdrop-filter: saturate(160%) blur(20px) !important;
        border-top: 1px solid rgba(247, 242, 232, 0.08) !important;
    }
}

/* 65.6 — Gold eyebrows that land on cream or white card
   surfaces (#WATCH-THIS-SPACE empty state, value-prop "Good
   to know" tile, any .mmh-empty / .mmh-card--light wrapper).
   On white the brand gold is 1.87:1; the deep gold variant
   clears 4.5:1. */
body.mmh-v2 .mmh-empty .mmh-eyebrow,
body.mmh-v2 .mmh-empty .mmh-eyebrow span,
body.mmh-v2 .mmh-card--light .mmh-eyebrow,
body.mmh-v2 .mmh-mood .mmh-eyebrow,
body.mmh-v2 .mmh-section--sand:not(.mmh-section) .mmh-eyebrow {
    color: var(--gold-on-light) !important;
}
body.mmh-v2 .mmh-empty .mmh-eyebrow::before,
body.mmh-v2 .mmh-card--light .mmh-eyebrow::before,
body.mmh-v2 .mmh-empty .mmh-eyebrow__marker,
body.mmh-v2 .mmh-card--light .mmh-eyebrow__marker {
    background: var(--gold-on-light) !important;
}

/* 65.7 — "Find a holiday home" CTA inside the teal hero card.
   Audit measured #1CA0B1 on #166B71 = 1.99:1. Cream against
   either teal clears 7:1+. */
body.mmh-v2 .mmh-cta--on-teal,
body.mmh-v2 .mmh-cta--teal .mmh-btn--link,
body.mmh-v2 a.mmh-cta--on-teal {
    color: var(--text-on-dark) !important;
}

/* 65.8 — Breadcrumb link "Home" on dark page-header strip.
   §43 already lifted the [aria-current="page"] span but
   left the link colour at --mmh-primary (#166B71 = 2.5:1
   on #14252A). Lift to the brighter teal link token. */
body.mmh-v2 .mmh-breadcrumbs a,
body.mmh-v2 .mmh-breadcrumbs li a,
body.mmh-v2 .mmh-breadcrumb a {
    color: var(--teal-link-on-dark) !important;
}
body.mmh-v2 .mmh-breadcrumbs a:hover,
body.mmh-v2 .mmh-breadcrumbs li a:hover,
body.mmh-v2 .mmh-breadcrumb a:hover {
    color: var(--gold-on-dark) !important;
}

/* 65.9 — Arrow links and section-head CTAs on dark sections
   ("How it works", "All offers", "Browse all stays"). §62.6
   set these to #1CA0B1 (2.99:1 on the page). Lift to the
   brighter teal token, which clears AA. */
body.mmh-v2 .mmh-link-arrow,
body.mmh-v2 .mmh-section-head__cta,
body.mmh-v2 a.mmh-link-arrow {
    color: var(--teal-link-on-dark) !important;
}
body.mmh-v2 .mmh-link-arrow:hover,
body.mmh-v2 .mmh-section-head__cta:hover {
    color: var(--gold-on-dark) !important;
}

/* 65.10 — Stat eyebrows + Roman-numeral markers ("VIII GOOD
   TO KNOW") on off-white card surfaces. Mirrors 65.6 for the
   single-stat eyebrows that the value-prop block uses. */
body.mmh-v2 .mmh-hero-stat__label,
body.mmh-v2 .mmh-stat__eyebrow,
body.mmh-v2 .mmh-card--paper .mmh-eyebrow,
body.mmh-v2 .mmh-card--paper .mmh-eyebrow__marker {
    color: var(--gold-on-light) !important;
}

/* 65.11 — "Part of the Alloggio Family of brands." footer
   line on the contact page. Audit measured #6B7878 on
   #14252A = 3.45:1 (below AA-normal). Bump to muted-cream. */
body.mmh-v2 .mmh-footer__family,
body.mmh-v2 .mmh-footer .mmh-footer__family,
body.mmh-v2 footer .mmh-footer__family,
body.mmh-v2 .mmh-footer p.mmh-footer__legal,
body.mmh-v2 .mmh-footer__brand-line {
    color: var(--text-muted-on-dark) !important;
}

/* 65.12 — "+ 49 images" secondary-gallery overflow link on
   /stay/*. Audit: #1CA0B1 on #ffffff = 3.13:1 (large-text
   only; the text is 16px regular). Use the on-light teal
   token to clear 4.5+. */
body.mmh-v2 .more-images a,
body.mmh-v2 .more-images-text,
body.mmh-v2 .more-images-text span,
body.mmh-v2 .secondary-gallery-show-last-Image {
    color: var(--teal-link-on-light) !important;
}

/* 65.13 — Sticky header scrim on scroll. The `is-scrolled`
   class is added by mmh-ui.js (line ~551) when the page is
   scrolled past 8px. Without a scrim the nav links sit on
   whatever image is behind them. Add a translucent dark
   backdrop + blur once scrolled. */
body.mmh-v2 .mmh-header.is-scrolled,
body.mmh-v2:not(.home) .mmh-header,
body.mmh-v2 .mmh-header.is-revealed {
    background: rgba(20, 37, 42, 0.88) !important;
    backdrop-filter: saturate(160%) blur(10px);
    -webkit-backdrop-filter: saturate(160%) blur(10px);
    box-shadow: 0 4px 18px -8px rgba(0, 0, 0, 0.35);
    border-bottom: 1px solid rgba(247, 242, 232, 0.08) !important;
}

/* 65.14 — Destination bento overlay gradient. Existing
   gradient (rgba(13,24,32,0)→0.55→0.94) bleeds on bright
   photos (Burrill Lake / Lake Conjola sky shots). Push the
   bottom band to near-opaque so the title + blurb stay
   readable on any image. */
body.mmh-v2 .mmh-destinations--bento .mmh-destination::after {
    background: linear-gradient(
        180deg,
        rgba(13, 24, 32, 0) 28%,
        rgba(13, 24, 32, 0.45) 55%,
        rgba(13, 24, 32, 0.85) 82%,
        rgba(13, 24, 32, 0.97) 100%
    ) !important;
}

/* 65.15 — Focus ring visibility on primary CTAs. §41 sets
   a global focus ring but the brand-gold (#E9A522) on cream
   surfaces is only 2.0:1. Add a high-contrast double ring
   that works on both cream and dark surfaces. */
body.mmh-v2 .mmh-btn--primary:focus-visible,
body.mmh-v2 a.mmh-btn--primary:focus-visible,
body.mmh-v2 .mmh-hero__search button:focus-visible,
body.mmh-v2 [data-mmh-search-submit]:focus-visible {
    outline: 2px solid #14252A !important;
    outline-offset: 2px !important;
    box-shadow: 0 0 0 4px var(--gold-on-dark) !important;
}

/* 65.15a — Stay-dates caption injected by mmh-forms.js above
   the check-in / check-out date pair on contact + enquiry
   forms. Inherits the same floated-label visual so it reads
   as a real form caption rather than free-floating text. */
body.mmh-v2 .mmh-date-range-caption {
    display: block;
    font-family: var(--mmh-font-sans);
    font-size: 0.78rem;
    font-weight: 500;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--text-muted-on-dark);
    margin: 14px 0 6px;
}
body.mmh-v2 .mmh-section--sand .mmh-date-range-caption,
body.mmh-v2 .mmh-mood .mmh-date-range-caption,
body.mmh-v2 .mmh-card--light .mmh-date-range-caption {
    color: var(--text-muted-on-light);
}

/* 65.16 — Property page hero/gallery fallback. When the
   listing has no featured photo the `.galleryImage img` is
   missing and the area renders a tall blank cream block.
   Paint a subtle gradient + caption so the layout reads
   intentionally while photography is uploaded. */
body.mmh-v2 .singleListing .galleryImage:empty,
body.mmh-v2 .singleListing .galleryImage:not(:has(img)) {
    min-height: 320px;
    background: linear-gradient(135deg, #1C7B82 0%, #0E4F54 100%);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--text-muted-on-dark);
    font-family: var(--mmh-font-sans);
    font-size: 0.85rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
}
body.mmh-v2 .singleListing .galleryImage:empty::after,
body.mmh-v2 .singleListing .galleryImage:not(:has(img))::after {
    content: 'Photography coming soon';
}

/* ============================================================
   66. Round-2 QA crawl (2026-05-22) — touch targets, recurring
   contrast misses on new templates, accessibility polish.

   Targets the "quick wins" subset of the round-2 report:
   destination archive H1, owner-portal feature copy, 44×44 touch
   targets, header wordmark on dark surfaces, footer link
   contrast, destination card overlay reinforcement, sticky
   header scrim breadth, and the inert hero "Scroll" cue.
   ============================================================ */

/* 66.1 — Destination archive H1 ("Mollymook", "Bawley Point"
   etc.). Body class on /destinations/*/ is `archive tax-suburbs
   term-X`; the page title renders as `<h1 class="entry-title">`.
   §61 painted the body cream-on-dark but the title inherited a
   dark-gold from the parent theme's entry-title rule. Lock it
   light, lift it above the map column. */
body.mmh-v2.archive.tax-suburbs .entry-title,
body.mmh-v2.archive.tax-features .entry-title,
body.mmh-v2.tax-suburbs h1.entry-title,
body.mmh-v2.tax-features h1.entry-title,
body.mmh-v2.archive .term-description + .entry-title,
body.mmh-v2 .destination-page__title {
    color: var(--text-on-dark) !important;
    position: relative;
    z-index: 2;
    margin-bottom: 24px;
}

/* 66.2 — Owner Portal feature cards. The /owner-portal/ page
   uses WordPress core column blocks tagged `.mmh-owner-card`
   for the four feature tiles (Owner statements / Occupancy &
   rates / Calendar / Maintenance log). §61's global `body p`
   rule paints the copy cream-mute — invisible on the white
   card surface. Force dark ink for the description copy and
   keep the heading dark too. */
body.mmh-v2 .mmh-owner-card,
body.mmh-v2 .mmh-owner-card p,
body.mmh-v2 .mmh-owner-card li,
body.mmh-v2 .mmh-owner-card .wp-block-heading,
body.mmh-v2 .mmh-owner-card h3,
body.mmh-v2 .page-owner-portal .wp-block-column p,
body.mmh-v2 .page-owner-portal .wp-block-column li,
body.mmh-v2 .page-owner-portal .wp-block-column h3 {
    color: var(--text-on-light) !important;
    opacity: 1 !important;
}
/* Give those cards a real surface so the dark ink lands on
   white rather than the dark page surface. */
body.mmh-v2 .mmh-owner-card {
    background: #ffffff;
    border-radius: var(--mmh-radius-lg);
    padding: clamp(20px, 3vw, 32px);
    border: 1px solid rgba(20, 37, 42, 0.08);
    box-shadow: 0 8px 22px -14px rgba(8, 24, 28, 0.22);
}

/* 66.3 — Touch targets ≥ 44×44 px. WCAG 2.5.5 / iOS HIG. The
   audit found 42 sub-44 targets on home (and more on archive
   pages) — strip carousel arrows, mood/tab buttons, mobile
   destination ribbon, heart icons, the "More" mobile tab.
   Use min-width + min-height so existing visual styles stay,
   and pair with `display: inline-flex` so SVG-only buttons
   still center their glyph. */
body.mmh-v2 .mmh-tabbar a,
body.mmh-v2 .mmh-tabbar button,
body.mmh-v2 .mmh-tabbar__tab,
body.mmh-v2 .mmh-mood__tab,
body.mmh-v2 .slick-arrow,
body.mmh-v2 .slick-prev,
body.mmh-v2 .slick-next,
body.mmh-v2 .shortlist-container,
body.mmh-v2 .productListing .shortlist-container,
body.mmh-v2 .mmh-icon-btn,
body.mmh-v2 a[href^="tel:"].mmh-topbar__item,
body.mmh-v2 .mmh-destination-strip a {
    min-width: 44px;
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
/* The destination ribbon ("Mollymook · Bawley · Milton · …")
   is a horizontally-scrolling list of single-word links; the
   44px rule above would force breakpoint chaos. Pad it
   instead so each link reaches 44px tall without growing
   horizontally. */
body.mmh-v2 .mmh-marquee a,
body.mmh-v2 .mmh-marquee__item {
    padding: 12px 8px;
    min-height: 44px;
}

/* 66.4 — Header wordmark ("Mollymook Milton Holidays") on dark
   page surfaces. §7099 paints `.mmh-header__brand-text` with
   `--c-ink-900` (#0F1A1A) — dark-on-dark when the header sits
   on the navy page. Lift to the cream token everywhere except
   the homepage hero (which uses an inverted treatment) and the
   footer block (already cream). */
body.mmh-v2:not(.home) .mmh-header .mmh-header__brand-text,
body.mmh-v2 .mmh-header.is-scrolled .mmh-header__brand-text,
body.mmh-v2.home .mmh-header.is-revealed .mmh-header__brand-text {
    color: var(--text-on-dark) !important;
}
body.mmh-v2:not(.home) .mmh-header .mmh-header__brand-text small,
body.mmh-v2 .mmh-header.is-scrolled .mmh-header__brand-text small {
    color: var(--gold-on-dark) !important;
}

/* 66.5 — Destination card overlay gradient. §65.14 deepened the
   bottom band but bright sky/beach photos (Burrill Lake, Lake
   Conjola) still wash the white title. Drop the start point of
   the gradient lower so the dark stop sits higher up the card,
   not just the last third. */
body.mmh-v2 .mmh-destinations--bento .mmh-destination::after {
    background: linear-gradient(
        180deg,
        rgba(20, 37, 42, 0) 18%,
        rgba(20, 37, 42, 0.40) 45%,
        rgba(20, 37, 42, 0.78) 72%,
        rgba(20, 37, 42, 0.96) 100%
    ) !important;
}

/* 66.6 — Footer link contrast. The footer sits on the dark
   page surface. Column links inherit `body.mmh-v2 a` which is
   #1CA0B1 — 2.99:1 on #14252A. Lift to off-white so the
   sitemap reads at AA. Headings stay gold. */
body.mmh-v2 footer.mmh-footer a:not(.mmh-btn):not([class*="brand"]),
body.mmh-v2 .mmh-footer__col a,
body.mmh-v2 .mmh-footer__col li a,
body.mmh-v2 .mmh-footer__sitemap a {
    color: #E9E6DE !important;
}
body.mmh-v2 footer.mmh-footer a:not(.mmh-btn):not([class*="brand"]):hover,
body.mmh-v2 .mmh-footer__col a:hover {
    color: var(--gold-on-dark) !important;
}
body.mmh-v2 .mmh-footer__tagline,
body.mmh-v2 .mmh-footer__brand-line,
body.mmh-v2 .mmh-footer__family {
    color: var(--text-muted-on-dark) !important;
}

/* 66.7 — Inert "Scroll" cue on the homepage hero. The
   `<span class="mmh-hero__cue">` is decorative-only (no link,
   no animation, no scroll handler) — the audit flagged it as
   clutter. Hide it; if a future iteration wants a working
   chevron cue, reinstate as a real button + animation. */
body.mmh-v2 .mmh-hero__cue { display: none !important; }

/* 66.8 — Sticky header scrim breadth. §65.13 added the scrim
   but only matched `body.mmh-v2 .mmh-header.is-scrolled` —
   on the home page the trigger class is `.is-revealed` (set
   by mmh-ui.js after scrolling past the hero). Apply both
   plus the universally-applied `:not(.home)` case so the
   scrim covers every route once the user has scrolled. */
body.mmh-v2 .mmh-header.is-scrolled,
body.mmh-v2:not(.home) .mmh-header,
body.mmh-v2.home .mmh-header.is-revealed,
body.mmh-v2 .mmh-header.is-revealed {
    background: rgba(20, 37, 42, 0.88) !important;
    backdrop-filter: saturate(160%) blur(10px) !important;
    -webkit-backdrop-filter: saturate(160%) blur(10px) !important;
    box-shadow: 0 4px 18px -8px rgba(0, 0, 0, 0.35) !important;
    border-bottom: 1px solid rgba(247, 242, 232, 0.08) !important;
}

/* 66.9 — Newsletter inline-feedback toast (`<p
   class="mmh-newsletter-feedback">`) is created by
   mmh-forms.js wireNewsletter(). Style it so the success +
   error states are visibly distinct without being shouty. */
body.mmh-v2 .mmh-newsletter-feedback {
    margin: 12px 0 0;
    font-size: 0.86rem;
    line-height: 1.45;
    padding: 10px 12px;
    border-radius: var(--mmh-radius-sm);
}
body.mmh-v2 .mmh-newsletter-feedback.is-success {
    background: rgba(28, 160, 177, 0.18);
    color: var(--text-on-dark);
    border-left: 3px solid var(--mmh-primary-light);
}
body.mmh-v2 .mmh-newsletter-feedback.is-error {
    background: rgba(233, 165, 34, 0.18);
    color: var(--text-on-dark);
    border-left: 3px solid var(--gold-on-dark);
}
