/* =============================================================================
   stay.css  —  "STAY" tab (Phase 1)
   -----------------------------------------------------------------------------
   Premium, light-theme styling for the Stay ecosystem search experience.
   Built entirely on the existing brand tokens declared in site.css:
       --rn-charcoal #0E0E11 · --rn-charcoal-2 #1A1A1F
       --rn-orange   #F58220 · --rn-orange-2   #F89622
       --rn-cyan     #56C4F8 · --rn-cyan-2     #3FA9D9
       --rn-cloud    #F6F7F9 · --rn-cloud-2    #EEF1F4
   Design intent: the middle ground between Airbnb warmth and a Property24 /
   urban-dashboard structure. Emotional enough to inspire, structured enough
   to trust. Cyan is reserved for *verification & intelligence* cues; orange
   for *action*; charcoal for *information*.
   ============================================================================= */

/* Local fallbacks so the tab still renders if loaded before site.css.
   Declared on :root as well so panels relocated to <body> on mobile (to escape
   the search strip's stacking context) still resolve every token. */
:root,
#tab-stay {
    --st-charcoal: var(--rn-charcoal, #0E0E11);
    --st-charcoal-2: var(--rn-charcoal-2, #1A1A1F);
    --st-ink: #2A2E35;
    --st-muted: #6B7280;
    --st-orange: var(--rn-orange, #F58220);
    --st-orange-2: var(--rn-orange-2, #F89622);
    --st-cyan: var(--rn-cyan, #56C4F8);
    --st-cyan-2: var(--rn-cyan-2, #3FA9D9);
    --st-cloud: var(--rn-cloud, #F6F7F9);
    --st-cloud-2: var(--rn-cloud-2, #EEF1F4);
    --st-line: rgba(14, 14, 17, 0.08);
    --st-line-2: rgba(14, 14, 17, 0.06);
    --st-radius: 18px;
    --st-shadow-sm: 0 2px 10px rgba(14, 14, 17, 0.05);
    --st-shadow-md: 0 10px 32px rgba(14, 14, 17, 0.08);
    --st-shadow-lg: 0 22px 60px rgba(14, 14, 17, 0.12);
    --st-ease: cubic-bezier(0.25, 1, 0.5, 1);
}

    /* The tab is a scrollable column (the hero crops the rest of the page). */
    #tab-stay.tab-content-area.active-tab {
        display: flex !important;
        flex-direction: column;
    }

/* ──────────────────────────────────────────────────────────────────────────
   SHARED WIDTH CONTRACT (matches the List/Sell wrapper envelope)
   ----------------------------------------------------------------------------
   The Stay tab lives in the same .search-section as Buy/Rent/List, which applies
   a 90px LEFT gutter to the whole panel (≥576px). The List wrapper (.sj-wrapper)
   does NOT center a narrow column — it FILLS the tab and adds a right gutter that
   mirrors that 90px so the content reads as one wide, near-symmetric block. We
   reproduce that with three tokens so EVERY Stay surface — the landing hero, the
   search strip, the results grid AND the "Become a host" journey card (which
   mounts as a sibling of .stay-shell, hence the tokens live on #tab-stay so both
   subtrees inherit them) — shares ONE envelope and lines up with List:

     --stay-gutter-l : minimal left breathing room — the panel's own 90px gutter
                       (.search-section) IS the left margin, so this only adds a
                       few px for halos/focus rings; keeping it near-zero makes
                       the left inset (~90px) equal the right gutter, so the
                       content box is viewport-symmetric. That in turn puts the
                       "Become a host" CTA dead-centre over the viewport-centred
                       "Verified hosts" handle, and left-aligns the strip with the
                       nav pills exactly like the List wrapper.
     --stay-gutter-r : right gutter that mirrors the panel's 90px left gutter; it
                       scales with the viewport so it tracks that gutter on
                       desktop and collapses to a phone-appropriate inset
     --stay-wrap-max : a generous cap that only engages on ultra-wide screens —
                       on normal desktops the content simply fills the tab.
   ────────────────────────────────────────────────────────────────────────── */
#tab-stay {
    --stay-gutter-l: clamp(2px, 0.3vw, 8px);
    --stay-gutter-r: clamp(16px, 6vw, 90px);
    --stay-wrap-max: 1700px;
}

/* Below 576px the panel's 90px left gutter (.search-section, min-width:576)
   no longer applies, so the mirrored right gutter would otherwise leave the
   content slightly right-of-centre. Collapse both to a symmetric phone inset so
   the Stay surfaces sit edge-balanced like a native mobile app. */
@media (max-width: 575.98px) {
    #tab-stay {
        --stay-gutter-l: 14px;
        --stay-gutter-r: 14px;
    }
}

.stay-shell {
    width: 100%;
    height: 100%;
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: none;
    padding: 4px clamp(8px, 2vw, 18px) 28px;
    display: flex;
    flex-direction: column;
    gap: clamp(12px, 1.8vw, 20px);
    color: var(--st-ink);
    -webkit-font-smoothing: antialiased;
}

    .stay-shell::-webkit-scrollbar {
        display: none;
    }

/* ════════════════════════════════════════════════════════════════════════
   LANDING — full-bleed WHITE page (no card, no wrapper). The Stay tab takes
   over the whole left panel: hero copy + search bar only, centred over a
   premium Cape Town poster illustration. Everything else was removed.

   NOTE: the rules that whiten the panel itself (suppressing the shared bg
   video, the edge fade, and any dark backdrop) live in site.css under the
   "STAY TAB — uniform white stage" block, so the fix is applied at the
   source and scoped to .stay-mode. This file only styles the landing.
   ════════════════════════════════════════════════════════════════════════ */

/* The Stay tab + shell must let the landing fill the full panel height. */
#tab-stay.tab-content-area.active-tab {
    flex: 1 1 auto;
    min-height: 0;
}

.stay-shell {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-height: 0;
}

.stay-landing {
    position: relative;
    width: 100%;
    /* Fill the panel reliably. We use a viewport-based min-height (not a %
       chain, which collapses when the flex shell has short content) so the
       scene container always has real height — AND it is the SAME formula in
       every Stay view (landing, panels open, host journey), so the scene never
       resizes/jumps between views. */
    flex: 1 1 auto;
    min-height: clamp(560px, 86vh, 1000px);
    display: flex;
    flex-direction: column;
    /* STRETCH (not center): children fill the envelope like the List wrapper,
       rather than collapsing to a narrow centered column. */
    align-items: stretch;
    justify-content: flex-start; /* hero + search ride near the top */
    gap: clamp(8px, 1.1vh, 14px);
    /* Asymmetric padding that balances the panel's 90px left gutter:
       a small left inset + a right gutter that mirrors it → one wide block,
       visually symmetric on the page, exactly like the List/Sell wrapper. */
    padding: clamp(6px, 1.1vh, 14px) var(--stay-gutter-r) 0 var(--stay-gutter-l);
    /* overflow stays visible so the bleeding .stay-scene can reach the true
       panel edges; #leftPanel.stay-mode clips it (overflow:hidden in site.css). */
    overflow: visible;
    background: #FFFFFF; /* pure white — no grey, no card */
    isolation: isolate;
}

/* The illustration covers the FULL #leftPanel surface in every Stay view.
   JS in _StayTab.cshtml moves this element to be a DIRECT child of #leftPanel
   at parse time — the same level as .bg-video. #leftPanel is position:relative,
   so position:absolute; inset:0 fills it exactly, edge to edge, with no gutters.
   Hidden by default (display:none); shown only when #leftPanel.stay-mode is
   active — toggled by the same script. z-index:0 keeps it behind all tab
   content (nav pills at z-index:2, .search-wrapper at z-2). */
.stay-scene {
    position: absolute;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    display: none; /* hidden until stay-mode is active */
}

.stay-scene-svg {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    display: block;
}

/* =============================================================================
   HOST JOURNEY MODE — reuse the ONE Stay scene as a full backdrop
   -----------------------------------------------------------------------------
   When the "Become a host" journey is open, stay-host-journey.js adds
   .shj-host-open to #tab-stay. The scene is ALREADY anchored to #tab-stay and
   sized to the tab viewport (above), so it is byte-for-byte identical to the
   landing scene — no movement. Here we only hide the landing's hero/search/
   results so the journey owns the stage, and float the journey over the scene.
   ============================================================================= */

/* Hide every landing surface except the scene. */
#tab-stay.shj-host-open .stay-hero,
#tab-stay.shj-host-open .stay-search,
#tab-stay.shj-host-open .stay-results,
#tab-stay.shj-host-open .stay-early {
    display: none !important;
}

/* The landing carries the scene and must fill the panel identically to the
   normal landing view (same min-height formula → same scene size, no jump and
   no collapse-to-white). The journey is positioned to overlay this same area. */
#tab-stay.shj-host-open .stay-landing {
    min-height: clamp(560px, 86vh, 1000px);
}

/* The journey mount overlays the landing/scene rather than stacking below it,
   so the single scene paints behind the form on every step. */
#tab-stay.shj-host-open #stayHostJourneyMount {
    position: absolute;
    inset: 0;
    z-index: 1;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
}

.stay-sun {
    transform-origin: 720px 700px;
    animation: staySunBreathe 8s var(--st-ease) infinite;
}

.stay-deco {
    transform-origin: 720px 700px;
    animation: stayDeco 60s linear infinite;
}

.stay-rays {
    transform-origin: 720px 700px;
    animation: stayRays 9s var(--st-ease) infinite;
}

.stay-umbrella {
    transform-origin: 300px 700px;
    animation: stayUmbrellaSway 7s ease-in-out infinite;
}

.stay-bird {
    animation: stayBirdGlide 9s ease-in-out infinite;
}

.stay-bird--2 {
    animation-duration: 11s;
    animation-delay: -2s;
}

.stay-bird--3 {
    animation-duration: 10s;
    animation-delay: -1s;
}

.stay-bird--4 {
    animation-duration: 12s;
    animation-delay: -4s;
}

.stay-bird--5 {
    animation-duration: 13s;
    animation-delay: -3s;
}

.stay-bird--6 {
    animation-duration: 9.5s;
    animation-delay: -6s;
}

@keyframes staySunBreathe {
    0%, 100% {
        transform: scale(1);
    }

    50% {
        transform: scale(1.02);
    }
}

@keyframes stayDeco {
    0% {
        transform: rotate(0deg);
    }

    100% {
        transform: rotate(360deg);
    }
}

@keyframes stayRays {
    0%, 100% {
        opacity: 0.5;
        transform: scale(1);
    }

    50% {
        opacity: 0.85;
        transform: scale(1.04);
    }
}

@keyframes stayUmbrellaSway {
    0%, 100% {
        transform: rotate(-1.2deg);
    }

    50% {
        transform: rotate(1.2deg);
    }
}

@keyframes stayBirdGlide {
    0% {
        transform: translate(0, 0);
    }

    50% {
        transform: translate(30px, -16px);
    }

    100% {
        transform: translate(0, 0);
    }
}

/* ── HERO ─────────────────────────────────────────────────────────────── */
.stay-hero {
    position: relative;
    z-index: 2;
    text-align: center;
    width: 100%;
    /* Fill the envelope (cap only engages on ultra-wide screens). */
    max-width: var(--stay-wrap-max, 1700px);
    margin-inline: auto;
    container-type: inline-size; /* size the title against the hero width */
    container-name: stayhero;
}

.stay-hero-title {
    margin: 0 0 clamp(8px, 1.1vh, 12px);
    /* Scales with the hero's own width so the full sentence stays on ONE row. */
    font-size: min(2.55rem, 5.1cqi);
    line-height: 1.05;
    font-weight: 800;
    letter-spacing: -0.025em;
    color: var(--st-charcoal);
    white-space: nowrap;
}

    .stay-hero-title em {
        font-style: normal;
        background: linear-gradient(120deg, var(--st-orange) 0%, var(--st-orange-2) 100%);
        -webkit-background-clip: text;
        background-clip: text;
        -webkit-text-fill-color: transparent;
    }

.stay-hero-sub {
    margin: 0 auto;
    max-width: 1120px;
    font-size: clamp(0.84rem, 1.15vw, 0.98rem);
    line-height: 1.45;
    color: var(--st-muted);
    text-wrap: pretty;
}
    /* The highlighted audience keywords: premium, not a list. */
    .stay-hero-sub strong {
        font-weight: 700;
        color: var(--st-charcoal-2);
        background: linear-gradient(180deg, transparent 62%, rgba(245, 130, 32, 0.20) 62%);
        padding: 0 1px;
        border-radius: 2px;
    }

/* ── Become-a-host CTA (browse landing) ─────────────────────────────────── */
.stay-hero-actions {
    margin: 10px auto 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    /* Centre the CTA on the SAME axis as the Verified-hosts handle below it.
       That handle reserves the capabilities panel's width on its right
       (--stay-trust-right) and centres within what's left; mirroring that inset
       here keeps the button perfectly above the handle in every panel state. */
    padding-right: var(--stay-trust-right, 0px);
    transition: padding-right 300ms cubic-bezier(.4, 0, .2, 1);
}

.stay-host-cta {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    cursor: pointer;
    padding: 10px 22px;
    border-radius: 999px;
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 0.95rem;
    font-weight: 700;
    /* Transparent / outline treatment — lighter than the solid Discover CTA. */
    color: #C25A12;
    background: rgba(245, 130, 32, 0.06);
    border: 1.6px solid rgba(245, 130, 32, 0.55);
    box-shadow: none;
    transition: transform 140ms ease, background 140ms ease, border-color 140ms ease;
}

    .stay-host-cta:hover {
        transform: translateY(-1px);
        background: rgba(245, 130, 32, 0.12);
        border-color: #F58220;
    }

    .stay-host-cta:active {
        transform: translateY(0);
    }

    .stay-host-cta:focus-visible {
        outline: 3px solid rgba(245, 130, 32, 0.45);
        outline-offset: 2px;
    }

    .stay-host-cta i {
        color: #F58220;
    }

    .stay-host-cta .stay-host-cta-arrow {
        font-size: 0.88rem;
        transition: transform 140ms ease;
    }

    .stay-host-cta:hover .stay-host-cta-arrow {
        transform: translateX(3px);
    }

/* ── SEARCH COMPOSER ──────────────────────────────────────────────────── */
.stay-search {
    position: relative;
    z-index: 2;
    max-width: var(--stay-wrap-max, 1700px);
    /* Left edge flush with the nav pills (margin-left:0, no auto centering).
       Right edge bleeds the full --stay-gutter-r padding so the strip reaches
       the true panel edge (clipped by #leftPanel overflow:hidden). */
    margin-left: 0;
    margin-right: calc(-1 * var(--stay-gutter-r));
    width: calc(100% + var(--stay-gutter-r));
}

.stay-composer {
    display: flex;
    flex-wrap: nowrap;
    align-items: stretch;
    gap: 2px;
    /* Distinct from the airy translucent tab pills + floating icons: a solid,
       elevated, premium surface — opaque white, a faint warm→cool gradient
       hairline, and a deep layered shadow that lifts it off the page as THE
       primary action. No backdrop blur (that's the pills' language). */
    background: linear-gradient(#fff, #fff) padding-box, linear-gradient(120deg, rgba(245, 130, 32, 0.55), rgba(86, 196, 248, 0.55)) border-box;
    border: 1.5px solid transparent;
    border-radius: 22px;
    padding: 8px 8px 8px 10px;
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9) inset, 0 2px 6px rgba(14, 14, 17, 0.06), 0 18px 44px rgba(14, 14, 17, 0.13), 0 36px 80px rgba(245, 130, 32, 0.06);
    position: relative;
    z-index: 50; /* LEVEL 1 — always above the extension panel */
}

    /* Soft warm halo behind the strip so it reads as the focal hero element. */
    .stay-composer::after {
        content: "";
        position: absolute;
        inset: -6px -6px -10px;
        z-index: -1;
        border-radius: 28px;
        background: radial-gradient(120% 160% at 50% 0%, rgba(245, 130, 32, 0.10), transparent 70%);
        pointer-events: none;
    }

.stay-seg {
    position: relative;
    display: flex;
    flex: 1 1 0;
    min-width: 0;
}

.stay-seg--where {
    flex: 1.5 1 0;
}

.stay-seg-btn {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    width: 100%;
    border: none;
    background: transparent;
    border-radius: 18px;
    padding: 10px 12px;
    cursor: pointer;
    text-align: left;
    transition: background 0.25s var(--st-ease), box-shadow 0.25s var(--st-ease);
    min-width: 0;
}

    .stay-seg-btn:hover {
        background: rgba(86, 196, 248, 0.07);
    }

.stay-seg.is-open .stay-seg-btn {
    background: linear-gradient(135deg, rgba(245, 130, 32, 0.13), rgba(245, 130, 32, 0.05));
    box-shadow: 0 0 0 1.5px rgba(245, 130, 32, 0.5) inset, 0 6px 18px rgba(245, 130, 32, 0.14);
}

.stay-seg-ico {
    flex: 0 0 auto;
    width: 32px;
    height: 32px;
    margin-top: 2px;
    display: grid;
    place-items: center;
    border-radius: 11px;
    background: var(--st-cloud);
    color: var(--st-orange);
    font-size: 0.95rem;
    transition: background 0.25s var(--st-ease), color 0.25s var(--st-ease), transform 0.25s var(--st-ease);
}

/* Open segment: icon flips to the orange gradient + label turns orange so the
   active item is unmistakable. */
.stay-seg.is-open .stay-seg-ico {
    background: linear-gradient(135deg, var(--st-orange) 0%, var(--st-orange-2) 100%);
    color: #fff;
    box-shadow: 0 5px 13px rgba(245, 130, 32, 0.34);
    transform: scale(1.04);
}

.stay-seg.is-open .stay-seg-label {
    color: var(--st-orange);
}

.stay-seg-body {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
    line-height: 1.25;
    /* Reserve room for label + up to two value lines so every segment is the
       same height and the labels line up across the strip, whether the value
       wraps to one line or two. */
    min-height: 42px;
}

.stay-seg-label {
    font-size: 0.63rem;
    font-weight: 800;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--st-muted);
    white-space: nowrap;
}

.stay-seg-value {
    font-size: 0.88rem;
    font-weight: 700;
    color: var(--st-charcoal-2);
    line-height: 1.25;
    /* Placeholders stay on one line; selected values may wrap to a 2nd line. */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

    .stay-seg-value.is-placeholder {
        color: #9AA1AC;
        font-weight: 600;
    }

    /* When a real value is selected, allow up to 2 lines. */
    .stay-seg-value:not(.is-placeholder) {
        white-space: normal;
        overflow-wrap: anywhere;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
        text-overflow: unset;
    }

.stay-seg-divider {
    width: 1px;
    align-self: center;
    height: 30px;
    background: var(--st-line);
    flex: 0 0 auto;
}

.stay-search-btn {
    flex: 0 0 auto;
    align-self: stretch;
    justify-content: center;
    display: inline-flex;
    align-items: center;
    gap: 9px;
    border: none;
    cursor: pointer;
    border-radius: 16px;
    padding: 0 26px;
    margin-left: 6px;
    color: #fff;
    font-weight: 800;
    font-size: 0.94rem;
    letter-spacing: 0.01em;
    background: linear-gradient(135deg, var(--st-orange) 0%, var(--st-orange-2) 100%);
    box-shadow: 0 8px 20px rgba(245, 130, 32, 0.34);
    transition: transform 0.22s var(--st-ease), box-shadow 0.22s var(--st-ease), filter 0.22s var(--st-ease);
}

    .stay-search-btn:hover {
        box-shadow: 0 12px 26px rgba(245, 130, 32, 0.4);
        filter: brightness(1.03);
    }

    .stay-search-btn:active {
        transform: translateY(0);
    }

    .stay-search-btn i {
        font-size: 1.05rem;
    }

/* ── POPOVERS (shared) ────────────────────────────────────────────────── */
.stay-pop {
    /* LEVEL 2 — the extension panel. Anchored to .stay-search (the master
       container), so it spans the EXACT width of the strip and reads as one
       continuous surface deploying from inside it. It tucks under the strip
       (negative top + extra top padding) and sits a layer below it (z-index),
       with a Cloud white-grey fill to separate the two elevations. */
    position: absolute;
    top: calc(100% - 16px);
    left: 0;
    right: 0;
    width: 100%;
    z-index: 40; /* below the strip (z 50) */
    max-height: calc(100vh - 200px);
    display: flex;
    flex-direction: column;
    background: var(--st-cloud); /* Level-2 grey, distinct from the white strip */
    border: 1.5px solid var(--st-line);
    border-top: none; /* the strip caps the top edge */
    border-radius: 0 0 24px 24px;
    box-shadow: 0 26px 50px rgba(14, 14, 17, 0.16), 0 60px 100px rgba(245, 130, 32, 0.05);
    padding: 22px 18px 14px; /* top padding clears the tucked-under strip */
    animation: stayExtIn 0.26s var(--st-ease);
    transform-origin: top center;
    overflow: hidden;
}

    .stay-pop[hidden] {
        display: none;
    }

.stay-pop--guests, .stay-pop--duration {
    right: 0;
    left: auto;
}

@keyframes stayPopIn {
    from {
        opacity: 0;
        transform: translateY(-6px) scale(0.98);
    }

    to {
        opacity: 1;
        transform: translateY(0) scale(1);
    }
}

/* Centering-safe variant for popovers that are horizontally centered with
   translateX(-50%) — animating transform would otherwise drop the centering. */
@keyframes stayPopInCentered {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

/* Level-2 extension panel: slides down from under the strip. */
@keyframes stayExtIn {
    from {
        opacity: 0;
        transform: translateY(-14px);
        clip-path: inset(0 0 100% 0 round 0 0 24px 24px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
        clip-path: inset(0 0 0 0 round 0 0 24px 24px);
    }
}

/* WHERE popover */
.stay-pop--where {
    min-width: 360px;
}

.stay-pop-field {
    display: flex;
    align-items: center;
    gap: 9px;
    background: var(--st-cloud);
    border: 1.5px solid transparent;
    border-radius: 12px;
    padding: 10px 12px;
    transition: border-color 0.2s, background 0.2s;
}

    .stay-pop-field:focus-within {
        background: #fff;
        border-color: var(--st-cyan);
        box-shadow: 0 0 0 3px rgba(86, 196, 248, 0.16);
    }

    .stay-pop-field > i {
        color: var(--st-muted);
        font-size: 0.95rem;
    }

.stay-where-input {
    flex: 1;
    border: none;
    background: transparent;
    outline: none;
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--st-charcoal-2);
}

.stay-where-clear {
    border: none;
    background: rgba(14, 14, 17, 0.06);
    color: var(--st-muted);
    width: 24px;
    height: 24px;
    border-radius: 50%;
    cursor: pointer;
    display: grid;
    place-items: center;
    font-size: 0.7rem;
}

    .stay-where-clear:hover {
        background: rgba(14, 14, 17, 0.12);
    }

.stay-where-results {
    margin-top: 8px;
    display: flex;
    flex-direction: column;
    gap: 2px;
    max-height: 260px;
    overflow-y: auto;
    scrollbar-width: thin;
}

.stay-where-opt {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 10px 11px;
    border-radius: 11px;
    cursor: pointer;
    border: none;
    background: transparent;
    text-align: left;
    width: 100%;
    transition: background 0.18s var(--st-ease);
}

    .stay-where-opt:hover, .stay-where-opt.active {
        background: var(--st-cloud);
    }

    .stay-where-opt .swo-ico {
        width: 32px;
        height: 32px;
        border-radius: 9px;
        flex: 0 0 auto;
        display: grid;
        place-items: center;
        background: rgba(86, 196, 248, 0.12);
        color: var(--st-cyan-2);
        font-size: 0.9rem;
    }

    .stay-where-opt .swo-txt {
        display: flex;
        flex-direction: column;
        min-width: 0;
        line-height: 1.3;
    }

    .stay-where-opt .swo-main {
        font-size: 0.9rem;
        font-weight: 700;
        color: var(--st-charcoal-2);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    .stay-where-opt .swo-sub {
        font-size: 0.76rem;
        color: var(--st-muted);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

.stay-where-empty {
    padding: 16px 12px;
    text-align: center;
    color: var(--st-muted);
    font-size: 0.85rem;
}

.stay-where-hint {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin-top: 10px;
    padding: 10px 12px;
    border-radius: 11px;
    background: linear-gradient(135deg, rgba(86, 196, 248, 0.08), rgba(86, 196, 248, 0.03));
    border: 1px solid rgba(86, 196, 248, 0.2);
    font-size: 0.8rem;
    color: #3C6A85;
    line-height: 1.4;
}

    .stay-where-hint i {
        color: var(--st-cyan-2);
        margin-top: 1px;
    }

/* DATES popover */
.stay-date-grid {
    display: flex;
    align-items: flex-end;
    gap: 10px;
}

.stay-date-cell {
    display: flex;
    flex-direction: column;
    gap: 5px;
    flex: 1;
}

.stay-date-cap {
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--st-muted);
}

.stay-date-input {
    border: 1.5px solid var(--st-line);
    border-radius: 11px;
    padding: 9px 11px;
    font-size: 0.88rem;
    font-weight: 600;
    color: var(--st-charcoal-2);
    background: var(--st-cloud);
    transition: border-color 0.2s, box-shadow 0.2s;
    outline: none;
}

    .stay-date-input:focus {
        background: #fff;
        border-color: var(--st-cyan);
        box-shadow: 0 0 0 3px rgba(86, 196, 248, 0.16);
    }

.stay-date-arrow {
    color: var(--st-muted);
    padding-bottom: 10px;
}

.stay-date-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 11px;
}

.stay-date-nights {
    font-size: 0.82rem;
    font-weight: 700;
    color: var(--st-orange);
}

.stay-pop-clear, .stay-early-btn {
    font: inherit;
}

.stay-pop-clear {
    border: none;
    background: transparent;
    color: var(--st-muted);
    font-size: 0.82rem;
    font-weight: 700;
    cursor: pointer;
    padding: 4px 6px;
    border-radius: 8px;
}

    .stay-pop-clear:hover {
        color: var(--st-charcoal-2);
        background: var(--st-cloud);
    }

/* GUESTS popover */
.stay-step-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 11px 4px;
}

    .stay-step-row + .stay-step-row {
        border-top: 1px solid var(--st-line-2);
    }

.stay-step-txt {
    display: flex;
    flex-direction: column;
    line-height: 1.3;
}

.stay-step-name {
    font-size: 0.92rem;
    font-weight: 700;
    color: var(--st-charcoal-2);
}

.stay-step-meta {
    font-size: 0.76rem;
    color: var(--st-muted);
}

.stay-stepper {
    display: flex;
    align-items: center;
    gap: 12px;
}

.stay-step-btn {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    cursor: pointer;
    border: 1.5px solid var(--st-line);
    background: #fff;
    color: var(--st-charcoal-2);
    display: grid;
    place-items: center;
    font-size: 0.9rem;
    transition: border-color 0.2s, color 0.2s, transform 0.15s;
}

    .stay-step-btn:hover:not(:disabled) {
        border-color: var(--st-orange);
        color: var(--st-orange);
    }

    .stay-step-btn:active:not(:disabled) {
        transform: scale(0.9);
    }

    .stay-step-btn:disabled {
        opacity: 0.4;
        cursor: not-allowed;
    }

.stay-step-val {
    min-width: 18px;
    text-align: center;
    font-weight: 800;
    color: var(--st-charcoal-2);
}

/* DURATION popover */
.stay-duration-list {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
}

.stay-duration-opt {
    display: flex;
    flex-direction: column;
    gap: 3px;
    align-items: flex-start;
    padding: 12px 13px;
    border-radius: 13px;
    cursor: pointer;
    text-align: left;
    border: 1.5px solid var(--st-line);
    background: #fff;
    transition: border-color 0.2s var(--st-ease), background 0.2s var(--st-ease), transform 0.15s;
}

    .stay-duration-opt:hover {
        border-color: rgba(245, 130, 32, 0.4);
        box-shadow: var(--st-shadow-sm);
    }

    .stay-duration-opt.active {
        border-color: var(--st-orange);
        background: linear-gradient(135deg, rgba(245, 130, 32, 0.08), rgba(245, 130, 32, 0.02));
    }

    .stay-duration-opt i {
        font-size: 1.05rem;
        color: var(--st-orange);
    }

.stay-duration-name {
    font-size: 0.9rem;
    font-weight: 800;
    color: var(--st-charcoal-2);
}

.stay-duration-meta {
    font-size: 0.74rem;
    color: var(--st-muted);
}

/* ── EARLY-ACCESS STATE ───────────────────────────────────────────────── */
.stay-early {
    max-width: 560px;
    width: 100%;
    margin: 0 auto;
    text-align: center;
    padding: 26px 24px;
    border-radius: 22px;
    background: rgba(255, 255, 255, 0.82);
    border: 1.5px dashed rgba(245, 130, 32, 0.32);
    box-shadow: var(--st-shadow-sm);
}

    .stay-early[hidden] {
        display: none;
    }

.stay-early-ico {
    width: 54px;
    height: 54px;
    border-radius: 16px;
    margin: 0 auto 12px;
    display: grid;
    place-items: center;
    font-size: 1.5rem;
    color: var(--st-orange);
    background: linear-gradient(135deg, rgba(245, 130, 32, 0.14), rgba(245, 130, 32, 0.04));
}

.stay-early-title {
    font-size: 1.1rem;
    font-weight: 800;
    color: var(--st-charcoal);
    margin: 0 0 6px;
}

.stay-early-sub {
    font-size: 0.88rem;
    color: var(--st-muted);
    line-height: 1.5;
    margin: 0 0 16px;
}

.stay-early-btn {
    border: none;
    cursor: pointer;
    padding: 11px 24px;
    border-radius: 60px;
    color: #fff;
    font-weight: 800;
    font-size: 0.88rem;
    background: linear-gradient(135deg, var(--st-orange) 0%, var(--st-orange-2) 100%);
    box-shadow: 0 8px 20px rgba(245, 130, 32, 0.3);
    transition: transform 0.2s var(--st-ease), box-shadow 0.2s var(--st-ease);
}

    .stay-early-btn:hover {
        box-shadow: 0 12px 26px rgba(245, 130, 32, 0.4);
    }

/* ── RESULTS (Phase 3 mount) ──────────────────────────────────────────── */
.stay-results {
    max-width: var(--stay-wrap-max, 1700px);
    width: 100%;
    margin-inline: auto;
}

    .stay-results[hidden] {
        display: none;
    }

.stay-results-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 16px;
}

/* ── TOAST (search feedback) ──────────────────────────────────────────── */
.stay-toast {
    position: fixed;
    left: 50%;
    bottom: 28px;
    transform: translateX(-50%) translateY(16px);
    z-index: 2000;
    max-width: 90vw;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 13px 20px;
    border-radius: 60px;
    background: var(--st-charcoal-2);
    color: #fff;
    font-size: 0.88rem;
    font-weight: 600;
    box-shadow: 0 18px 44px rgba(14, 14, 17, 0.34);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s var(--st-ease), transform 0.3s var(--st-ease);
}

    .stay-toast.show {
        opacity: 1;
        transform: translateX(-50%) translateY(0);
    }

    .stay-toast i {
        color: var(--st-orange-2);
        font-size: 1.05rem;
    }

/* ════════════════════════════════════════════════════════════════════════
   RESPONSIVE
   ════════════════════════════════════════════════════════════════════════ */

/* Composer collapses to a stacked card below the tablet breakpoint. */
/* =========================================================================
   MOBILE (≤860px) — a native-app pattern, not the desktop layered model.

   • The strip becomes a vertical list of tappable ROWS (glyph · label/value ·
     chevron) — the familiar premium mobile search pattern.
   • Tapping a row opens its options as a full-width BOTTOM SHEET that slides up
     from the bottom, above a dimming backdrop, sitting on top of everything
     (high z-index) — never behind the strip.
   • A drag-handle + sticky header (title · close) make it feel like a real
     mobile sheet. The body scrolls; the sheet is capped at 88vh.
   ========================================================================= */
@media (max-width: 860px) {
    .stay-landing {
        min-height: 100%;
        gap: clamp(14px, 2.4vh, 24px);
        padding: clamp(12px, 3vh, 28px) clamp(16px, 4vw, 32px) clamp(18px, 3vh, 32px);
    }

    /* ── Level 1: the strip as a row list ── */
    .stay-composer {
        flex-direction: column;
        border-radius: 20px;
        gap: 0;
        padding: 6px;
        align-items: stretch;
        /* On mobile the strip is a normal stacking element; sheets float above. */
        z-index: auto;
    }

        .stay-composer::after {
            display: none;
        }
    /* drop the desktop halo */

    .stay-seg,
    .stay-seg--where,
    .stay-seg--vibe,
    .stay-seg--dest,
    .stay-seg--must,
    .stay-seg--with,
    .stay-seg--purpose,
    .stay-seg--when {
        flex: 1 1 auto;
        min-width: 0;
    }

    .stay-seg-divider {
        display: none;
    }

    .stay-seg-btn {
        align-items: center; /* rows read better centre-aligned */
        border-radius: 14px;
        padding: 13px 14px;
        gap: 13px;
    }

    .stay-seg-body {
        min-height: 0;
    }
    /* no reserved two-line height on mobile */

    /* A chevron affordance on every row (added via CSS, no markup change). */
    .stay-seg-btn::after {
        content: "\F285"; /* bi-chevron-right */
        font-family: "bootstrap-icons";
        margin-left: auto;
        font-size: 0.8rem;
        color: #C3CAD3;
        flex: 0 0 auto;
    }

    /* Hairline between rows, like a grouped mobile list. */
    .stay-seg + .stay-seg .stay-seg-btn {
        border-top: 1px solid var(--st-line-2);
        border-radius: 0;
    }

    .stay-seg-value {
        -webkit-line-clamp: 1; /* single line on the row */
        line-clamp: 1;
    }

    .stay-search-btn {
        margin: 6px 0 0;
        padding: 15px;
        border-radius: 14px;
        justify-content: center;
        font-size: 1rem;
    }

    /* ── Level 2: bottom sheets ── */
    .stay-pop {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        top: auto;
        width: 100%;
        min-width: 0;
        max-width: none;
        max-height: 88vh;
        transform: none;
        z-index: 1400; /* above the strip AND the chat bubble */
        background: var(--rn-cloud, #F6F7F9); /* explicit, opaque sheet surface */
        border: none;
        border-radius: 22px 22px 0 0;
        padding: 8px 16px calc(16px + env(safe-area-inset-bottom, 0px));
        box-shadow: 0 -16px 50px rgba(14, 14, 17, 0.28);
        animation: staySheetUp 0.32s var(--st-ease);
        overflow-y: auto; /* scroll content (e.g. two calendar months) */
        -webkit-overflow-scrolling: touch;
        overscroll-behavior: contain;
    }

        /* Drag-handle affordance. */
        .stay-pop::before {
            content: "";
            display: block;
            width: 42px;
            height: 5px;
            border-radius: 3px;
            background: var(--st-line);
            margin: 4px auto 12px;
            flex: 0 0 auto;
        }

    /* Sticky header so the title + clear stay visible while the body scrolls. */
    .stay-pop-head {
        position: sticky;
        top: 0;
        background: var(--rn-cloud, #F6F7F9);
        z-index: 2;
        margin: 0 -16px 10px;
        padding: 2px 16px 10px;
        border-bottom: 1px solid var(--st-line-2);
    }

    .stay-pop-title {
        font-size: 1rem;
    }

    .stay-pop-scroll {
        max-height: none; /* the sheet itself caps height */
        flex: 1 1 auto;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
    }

    /* One comfortable column for option grids on a phone. */
    .stay-cat-grid,
    .stay-must-grid,
    .stay-with-grid,
    .stay-purpose-grid,
    .stay-vibe-rail,
    .stay-when-presets {
        grid-template-columns: 1fr 1fr;
    }

    /* Destination results: fill the sheet so every match is reachable with
       the keyboard up. */
    .stay-pop--dest {
        padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
    }

    .stay-where-results {
        max-height: 42vh;
    }

    /* Months stack single-column and flow within the SHEET's scroll (avoid a
       nested scroll area on touch, which is awkward). Any-length range is
       reached by scrolling the sheet. */
    .stay-cal-months {
        grid-template-columns: 1fr;
        gap: 10px;
        max-height: none;
        overflow: visible;
    }

    .stay-cal-fields {
        grid-template-columns: 1fr;
    }

    .stay-cal-field-arrow {
        transform: rotate(90deg);
        justify-self: center;
    }

    .stay-cal-nav {
        width: 36px;
        height: 36px;
    }

    .stay-cal-day {
        height: 34px;
        font-size: 0.82rem;
    }

    .stay-cal-cap {
        font-size: 0.78rem;
        margin-bottom: 4px;
    }

    /* The dimming backdrop behind any open sheet (toggled by JS). */
    .stay-sheet-backdrop {
        position: fixed;
        inset: 0;
        background: rgba(14, 14, 17, 0.45);
        z-index: 1300;
        opacity: 0;
        animation: stayBackdropIn 0.28s var(--st-ease) forwards;
        -webkit-backdrop-filter: blur(2px);
        backdrop-filter: blur(2px);
    }

    /* Hide the floating Melikhaya chat-bot mascot on phones — it sits bottom-
       right and collides with the bottom sheet / footer. Removed entirely on
       small frames so the Stay experience stays clean and uncluttered. */
    #melikhayaTrigger,
    #melikhayaWindow,
    .mel-trigger-btn,
    .mel-window {
        display: none !important;
    }
}

@keyframes staySheetUp {
    from {
        transform: translateY(100%);
    }

    to {
        transform: translateY(0);
    }
}

@keyframes stayBackdropIn {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

/* Sheet close button — only in mobile sheet mode. */
.stay-sheet-close {
    display: none;
}

@media (max-width: 860px) {
    .stay-sheet-close {
        display: grid;
        place-items: center;
        position: absolute;
        top: 14px;
        right: 14px;
        width: 32px;
        height: 32px;
        border-radius: 50%;
        border: none;
        background: var(--st-line-2);
        color: var(--st-charcoal-2);
        font-size: 0.8rem;
        cursor: pointer;
        z-index: 3;
    }

        .stay-sheet-close:active {
            background: var(--st-line);
        }
}

/* Phone frames: keep hero + search comfortably inside one viewport. */
@media (max-width: 540px) {
    .stay-duration-list {
        grid-template-columns: 1fr;
    }

    .stay-landing {
        min-height: 100%;
        justify-content: flex-start;
        padding-top: clamp(12px, 2.4vh, 22px);
        gap: clamp(12px, 2vh, 18px);
    }
    /* Phones: let the title wrap and stay within the frame. */
    .stay-hero-title {
        white-space: normal;
        text-wrap: balance;
        font-size: clamp(1.5rem, 6.6vw, 2rem);
    }

    .stay-hero-sub {
        font-size: 0.92rem;
        line-height: 1.5;
    }

    /* Comfortable touch rows on the narrowest phones. */
    .stay-seg-btn {
        padding: 12px 13px;
        gap: 12px;
    }

    .stay-seg-ico {
        width: 32px;
        height: 32px;
        font-size: 0.95rem;
    }

    .stay-seg-label {
        font-size: 0.62rem;
    }

    .stay-seg-value {
        font-size: 0.88rem;
    }

    .stay-search-btn {
        padding: 12px;
    }
}

/* Short / landscape phones: drop the reserved viewport height so the
   composer is never clipped, and let the page scroll naturally. */
@media (max-height: 640px) {
    .stay-landing {
        min-height: 0;
        justify-content: flex-start;
        padding-top: 16px;
    }
}

/* ── ACCESSIBILITY ────────────────────────────────────────────────────── */
.stay-seg-btn:focus-visible,
.stay-search-btn:focus-visible,
.stay-early-btn:focus-visible,
.stay-duration-opt:focus-visible,
.stay-where-opt:focus-visible {
    outline: 2.5px solid var(--st-cyan);
    outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
    .stay-shell *, .stay-shell *::before {
        animation: none !important;
        transition: none !important;
    }
}

@media (prefers-contrast: more) {
    .stay-seg-value {
        color: #000;
    }
}

/* ════════════════════════════════════════════════════════════════════════
   INTENT COMPOSER (redesign) — Vibe · Must-have · Destination · With my · When
   --------------------------------------------------------------------------
   Layered on top of the shared .stay-seg / .stay-pop shell above. Selection
   semantics follow the brand language: ORANGE = the chosen vibe / action,
   CYAN = trusted/verified picks (must-haves + companion tags glow cyan),
   CHARCOAL = information. Everything inherits the popover open/close +
   mobile bottom-sheet behaviour already defined for .stay-pop.
   ════════════════════════════════════════════════════════════════════════ */

/* Five segments share the bar; give the two "discovery" ones a little more room. */
/* Six segments share the bar evenly; they shrink to a floor and then the bar
   wraps to a second row (mobile) rather than clipping any label. */
.stay-seg--vibe,
.stay-seg--dest,
.stay-seg--must,
.stay-seg--with,
.stay-seg--purpose,
.stay-seg--when {
    flex: 1 1 0;
    min-width: 0;
}

/* ── Extension panels: all span the master container's full width ─────────
   The base .stay-pop rule already sets left:0; right:0; width:100% so every
   panel is the exact width of the search strip and reads as one continuous
   layered surface. No per-segment anchoring or fixed widths needed. */

/* Scrollable body for the large grouped popovers — caps height, never clips
   content horizontally so every label shows in full. */
.stay-pop-scroll {
    flex: 1 1 auto;
    min-height: 0;
    max-height: min(396px, 54vh);
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: thin;
    padding: 2px 2px 0;
    margin-right: -4px;
    padding-right: 6px;
}

    .stay-pop-scroll::-webkit-scrollbar {
        width: 8px;
    }

    .stay-pop-scroll::-webkit-scrollbar-thumb {
        background: var(--st-cloud-2);
        border-radius: 8px;
    }

/* Category section header inside vibe / must-have / purpose popovers. */
.stay-group-title {
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--st-muted);
    margin: 14px 2px 8px;
    padding-bottom: 6px;
    border-bottom: 1px solid var(--st-line-2);
}

.stay-vibe-group:first-child .stay-group-title,
.stay-must-group:first-child .stay-group-title {
    margin-top: 2px;
}

/* Shared popover header + hint (used by several segments). */
.stay-pop-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 10px;
}

.stay-pop-title {
    font-size: 0.92rem;
    font-weight: 800;
    color: var(--st-charcoal);
    letter-spacing: -0.01em;
}

.stay-pop-hint {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin-top: 10px;
    padding: 8px 11px;
    border-radius: 11px;
    background: linear-gradient(135deg, rgba(86, 196, 248, 0.08), rgba(86, 196, 248, 0.03));
    border: 1px solid rgba(86, 196, 248, 0.2);
    font-size: 0.78rem;
    color: #3C6A85;
    line-height: 1.4;
}

    .stay-pop-hint i {
        color: var(--st-cyan-2);
        margin-top: 1px;
        flex: 0 0 auto;
    }

/* ── 1 · VIBE CARDS ───────────────────────────────────────────────────── */
/* ── 1 · VIBE — two-level picker (categories → drill-down) ────────────── */
/* Level 1: category cards. 12 cards in a 2-col grid fit one viewport without
   the popover needing to scroll. */
.stay-cat-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 7px;
}

.stay-cat {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 11px;
    border-radius: 12px;
    border: 1.5px solid var(--st-line);
    background: #fff;
    cursor: pointer;
    text-align: left;
    transition: border-color 0.18s var(--st-ease), background 0.18s var(--st-ease), transform 0.15s, box-shadow 0.2s var(--st-ease);
}

    .stay-cat:hover {
        border-color: rgba(245, 130, 32, 0.45);
        box-shadow: var(--st-shadow-sm);
    }

.stay-cat-ico {
    flex: 0 0 auto;
    width: 26px;
    display: grid;
    place-items: center;
    font-size: 1.3rem;
    color: var(--st-orange);
}

.stay-cat-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
    line-height: 1.25;
    flex: 1 1 auto;
}

.stay-cat-name {
    font-size: 0.82rem;
    font-weight: 800;
    color: var(--st-charcoal);
    letter-spacing: -0.01em;
}

.stay-cat-blurb {
    font-size: 0.69rem;
    color: var(--st-muted);
}

.stay-cat-chev {
    flex: 0 0 auto;
    color: #C3CAD3;
    font-size: 0.85rem;
    transition: transform 0.18s var(--st-ease), color 0.18s var(--st-ease);
}

.stay-cat:hover .stay-cat-chev {
    color: var(--st-orange);
    transform: translateX(2px);
}

/* Level 2: drill panels (one visible at a time). */
.stay-drill[hidden],
.stay-drill-panel[hidden] {
    display: none;
}

/* Back button in the popover head. */
.stay-drill-back {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    border: none;
    background: transparent;
    color: var(--st-charcoal-2);
    font-size: 0.82rem;
    font-weight: 800;
    cursor: pointer;
    padding: 4px 8px 4px 4px;
    border-radius: 8px;
    transition: color 0.18s, background 0.18s;
}

    .stay-drill-back[hidden] {
        display: none;
    }

    .stay-drill-back:hover {
        color: var(--st-orange);
        background: var(--st-cloud);
    }

    .stay-drill-back i {
        font-size: 0.9rem;
    }

.stay-vibe-rail {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
    padding: 2px;
}

.stay-vibe-card {
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 9px;
    min-height: 0;
    padding: 10px 11px;
    border-radius: 13px;
    border: 1.5px solid var(--st-line);
    background: var(--st-cloud);
    cursor: pointer;
    text-align: left;
    isolation: isolate;
    transition: transform 0.18s var(--st-ease), border-color 0.2s var(--st-ease), box-shadow 0.22s var(--st-ease);
}

    /* Charcoal "architectural photo" wash — a CSS-driven stand-in for real
       photography. Drop a background-image on .stay-vibe-card later and this
       gradient becomes the legibility scrim over it. */
    .stay-vibe-card::before {
        content: "";
        position: absolute;
        inset: 0;
        z-index: -1;
        background: radial-gradient(120% 90% at 100% 0%, rgba(245, 130, 32, 0.12), transparent 60%), linear-gradient(160deg, rgba(14, 14, 17, 0.04), rgba(14, 14, 17, 0.10));
        opacity: 0;
        transition: opacity 0.22s var(--st-ease);
    }

    .stay-vibe-card:hover {
        border-color: rgba(245, 130, 32, 0.4);
        box-shadow: var(--st-shadow-md);
    }

        .stay-vibe-card:hover::before {
            opacity: 1;
        }

    .stay-vibe-card.active {
        border-color: var(--st-orange);
        box-shadow: 0 8px 20px rgba(245, 130, 32, 0.18);
    }

        .stay-vibe-card.active::before {
            opacity: 1;
            background: radial-gradient(120% 90% at 100% 0%, rgba(245, 130, 32, 0.22), transparent 60%), linear-gradient(160deg, rgba(245, 130, 32, 0.10), rgba(14, 14, 17, 0.06));
        }

.stay-vibe-ico {
    flex: 0 0 auto;
    width: 22px;
    display: grid;
    place-items: center;
    font-size: 1.05rem;
    color: var(--st-orange);
}

.stay-vibe-name {
    font-size: 0.8rem;
    font-weight: 700;
    color: var(--st-charcoal);
    letter-spacing: -0.01em;
    line-height: 1.2;
    /* Show the full name; wrap if needed. */
    white-space: normal;
    overflow-wrap: anywhere;
}

.stay-vibe-meta {
    font-size: 0.76rem;
    color: var(--st-muted);
    line-height: 1.35;
}

.stay-vibe-card.active .stay-vibe-name {
    color: var(--st-charcoal);
}

/* ── 2 · MUST-HAVE PICTOGRAM GRID (multi-select, cyan = trusted pick) ──── */
.stay-must-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 7px;
}

/* Sticky confirm bar — gives explicit "this many locked in" feedback and a
   clear way to finish. Pins to the bottom of the panel / bottom sheet. */
.stay-confirm-bar {
    position: sticky;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin: 10px -18px -16px;
    padding: 10px 18px calc(12px + env(safe-area-inset-bottom, 0px));
    background: var(--rn-cloud, #F6F7F9);
    border-top: 1px solid var(--st-line-2);
    z-index: 3;
}

    .stay-confirm-bar[hidden] {
        display: none;
    }

/* The count is a button that opens the removable summary. Underlined so users
   discover it's interactive; chevron-free to stay clean. */
.stay-confirm-count {
    appearance: none;
    border: none;
    background: none;
    padding: 4px 2px;
    margin: 0;
    font-family: inherit;
    font-size: 0.86rem;
    font-weight: 800;
    color: var(--st-charcoal);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    text-decoration: underline;
    text-decoration-color: var(--st-cyan-2);
    text-decoration-thickness: 2px;
    text-underline-offset: 3px;
    transition: color 0.15s var(--st-ease);
}

    .stay-confirm-count:hover {
        color: var(--st-cyan-2);
    }

    .stay-confirm-count:focus-visible {
        outline: 2.5px solid var(--st-cyan);
        outline-offset: 2px;
        border-radius: 6px;
    }

.stay-confirm-done {
    flex: 0 0 auto;
    border: none;
    border-radius: 12px;
    padding: 11px 26px;
    font-size: 0.9rem;
    font-weight: 800;
    color: #fff;
    cursor: pointer;
    background: linear-gradient(135deg, var(--st-cyan) 0%, var(--st-cyan-2) 100%);
    box-shadow: 0 6px 16px rgba(86, 196, 248, 0.32);
    transition: transform 0.15s var(--st-ease), box-shadow 0.2s var(--st-ease);
}

    .stay-confirm-done:hover {
        box-shadow: 0 8px 20px rgba(86, 196, 248, 0.4);
    }

    .stay-confirm-done:active {
        transform: translateY(1px);
    }

.stay-must {
    position: relative;
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 9px;
    padding: 8px 11px;
    border-radius: 12px;
    border: 1.5px solid var(--st-line);
    background: #fff;
    cursor: pointer;
    text-align: left;
    transition: border-color 0.18s var(--st-ease), background 0.18s var(--st-ease), transform 0.15s, box-shadow 0.2s var(--st-ease);
}

    .stay-must i {
        flex: 0 0 auto;
        font-size: 1.05rem;
        color: var(--st-muted);
        transition: color 0.18s var(--st-ease);
    }

    .stay-must span {
        font-size: 0.78rem;
        font-weight: 700;
        color: var(--st-charcoal-2);
        line-height: 1.2;
        white-space: normal;
        overflow-wrap: anywhere;
    }

    .stay-must:hover {
        border-color: rgba(86, 196, 248, 0.5);
        box-shadow: var(--st-shadow-sm);
    }

    .stay-must[aria-pressed="true"] {
        border-color: var(--st-cyan);
        background: linear-gradient(135deg, rgba(86, 196, 248, 0.12), rgba(86, 196, 248, 0.04));
        box-shadow: 0 6px 16px rgba(86, 196, 248, 0.18);
    }

        .stay-must[aria-pressed="true"] i {
            color: var(--st-cyan-2);
        }

/* Unmistakable "selected" cue: a filled check badge in the corner.
           Reserve right-side room so the label never collides with it. */
.stay-must {
    padding-right: 30px;
}

    .stay-must::after {
        content: "";
        position: absolute;
        top: 8px;
        right: 9px;
        width: 18px;
        height: 18px;
        border-radius: 50%;
        border: 1.5px solid var(--st-line);
        background: #fff;
        transition: all 0.18s var(--st-ease);
    }

    .stay-must[aria-pressed="true"]::after {
        border-color: var(--st-cyan-2);
        background: var(--st-cyan-2);
        /* white check glyph */
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3.5 8.5l3 3 6-6' stroke='white' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
        background-size: 13px 13px;
        background-position: center;
        background-repeat: no-repeat;
    }

/* ── Per-category count badge on the category cards ───────────────────────
   Shows how many features are picked inside each category at a glance. */
.stay-cat-count {
    flex: 0 0 auto;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    border-radius: 999px;
    background: var(--st-cyan-2);
    color: #fff;
    font-size: 0.72rem;
    font-weight: 800;
    line-height: 20px;
    text-align: center;
    box-shadow: 0 2px 6px rgba(86, 196, 248, 0.35);
}

/* When a category has picks, nudge the chevron so the badge has room and tint
   the card border so it reads as "active". */
.stay-cat.has-picks {
    border-color: rgba(86, 196, 248, 0.55);
    background: linear-gradient(135deg, rgba(86, 196, 248, 0.08), rgba(86, 196, 248, 0.02));
}

    .stay-cat.has-picks .stay-cat-chev {
        margin-left: 6px;
    }

/* The chevron normally sits at the far right via margin-left:auto on itself;
   when a badge is present the badge takes the auto-margin, so keep the chevron
   tight to it. */
.stay-cat .stay-cat-count + .stay-cat-chev {
    margin-left: 6px;
}

/* =============================================================================
   MUST-HAVES SUMMARY MODAL — review & remove picks, grouped by category
   -----------------------------------------------------------------------------
   Opened from the underlined "N features selected" count. Renders as a centred
   card on desktop and a bottom sheet on phones. Built/owned by stay.js; scoped
   inside #stayPopMust so it inherits the Stay stacking context but paints above
   the panel body.
   ============================================================================= */
.stay-must-summary {
    position: absolute;
    inset: 0;
    z-index: 10;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
}

    .stay-must-summary[hidden] {
        display: none;
    }

.stay-must-summary-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(14, 14, 17, 0.34);
    opacity: 0;
    transition: opacity 0.22s var(--st-ease);
}

.stay-must-summary.is-open .stay-must-summary-backdrop {
    opacity: 1;
}

.stay-must-summary-sheet {
    position: relative;
    z-index: 1;
    width: min(880px, 100%);
    max-height: 100%;
    display: flex;
    flex-direction: column;
    background: #fff;
    border-radius: 18px;
    box-shadow: 0 24px 64px rgba(14, 14, 17, 0.28);
    transform: translateY(12px) scale(0.98);
    opacity: 0;
    transition: transform 0.24s var(--st-ease), opacity 0.24s var(--st-ease);
    overflow: hidden;
}

.stay-must-summary.is-open .stay-must-summary-sheet {
    transform: translateY(0) scale(1);
    opacity: 1;
}

.stay-must-summary-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 16px 18px;
    border-bottom: 1px solid var(--st-line-2);
}

.stay-must-summary-title {
    font-family: 'Clash Display', 'DM Sans', sans-serif;
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--st-charcoal);
}

.stay-must-summary-close {
    flex: 0 0 auto;
    width: 32px;
    height: 32px;
    border: none;
    border-radius: 9px;
    background: var(--st-cloud, #F6F7F9);
    color: var(--st-charcoal-2);
    cursor: pointer;
    display: grid;
    place-items: center;
    font-size: 0;
    line-height: 0;
    transition: background 0.15s var(--st-ease);
}

    .stay-must-summary-close::before {
        content: "\00D7";
        font-size: 1.25rem;
        line-height: 1;
        font-weight: 700;
    }

    .stay-must-summary-close > i {
        display: none;
    }

    .stay-must-summary-close:hover {
        background: var(--st-cloud-2, #ECEFF3);
    }

.stay-must-summary-body {
    flex: 1 1 auto;
    min-height: 0;
    /* Show roughly five rows of chips before scrolling (a 5×5 grid ≈ 25 items
       visible). The grid itself grows only by however many rows the picks need,
       so one row stays one row — this cap is just the scroll ceiling. */
    max-height: min(64vh, 480px);
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 16px 20px;
}

.stay-must-summary-empty {
    margin: 12px 4px;
    font-size: 0.86rem;
    color: var(--st-muted);
    line-height: 1.5;
}

.stay-must-summary-group {
    margin-bottom: 18px;
}

    .stay-must-summary-group:last-child {
        margin-bottom: 2px;
    }

.stay-must-summary-cat {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.7rem;
    font-weight: 800;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--st-muted);
    margin-bottom: 10px;
}

.stay-must-summary-catn {
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 999px;
    background: var(--st-cloud-2, #ECEFF3);
    color: var(--st-charcoal-2);
    font-size: 0.68rem;
    line-height: 18px;
    text-align: center;
}

/* Five-column grid. Rows are created only as needed (auto rows), so one row of
   picks renders as one row and the modal grows dynamically with more picks. */
.stay-must-summary-chips {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 9px;
}

.stay-must-summary-chip {
    display: flex;
    align-items: center;
    gap: 7px;
    min-width: 0; /* allow long labels to ellipsis inside the cell */
    padding: 8px 8px 8px 11px;
    border-radius: 12px; /* cell-shaped, not pill, for a clean grid */
    border: 1.5px solid rgba(86, 196, 248, 0.4);
    background: linear-gradient(135deg, rgba(86, 196, 248, 0.10), rgba(86, 196, 248, 0.03));
    font-size: 0.8rem;
    font-weight: 700;
    color: var(--st-charcoal-2);
}

    .stay-must-summary-chip > i {
        flex: 0 0 auto;
        font-size: 0.95rem;
        color: var(--st-cyan-2);
    }

/* Label fills the cell and truncates rather than widening the column. */
.stay-must-summary-chiplabel {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.stay-must-summary-remove {
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    border: none;
    border-radius: 50%;
    background: rgba(14, 14, 17, 0.08);
    color: var(--st-charcoal);
    cursor: pointer;
    display: grid;
    place-items: center;
    font-size: 0; /* hide any text/icon node; we draw the × below */
    line-height: 0;
    transition: background 0.15s var(--st-ease), color 0.15s var(--st-ease);
}

    /* Reliable × glyph drawn in CSS so the remove affordance never depends on
       the icon font loading. The inner <i> is decorative/hidden. */
    .stay-must-summary-remove::before {
        content: "\00D7"; /* multiplication sign — clean × */
        font-size: 0.95rem;
        line-height: 1;
        font-weight: 700;
    }

    .stay-must-summary-remove > i {
        display: none;
    }

    .stay-must-summary-remove:hover {
        background: #E2574C;
        color: #fff;
    }

    .stay-must-summary-remove:focus-visible {
        outline: 2.5px solid var(--st-cyan);
        outline-offset: 2px;
    }

.stay-must-summary-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 12px 18px calc(14px + env(safe-area-inset-bottom, 0px));
    border-top: 1px solid var(--st-line-2);
    background: var(--rn-cloud, #F6F7F9);
}

.stay-must-summary-clear {
    border: none;
    background: none;
    padding: 6px 2px;
    font-family: inherit;
    font-size: 0.84rem;
    font-weight: 700;
    color: var(--st-muted);
    cursor: pointer;
    text-decoration: underline;
    text-underline-offset: 3px;
    transition: color 0.15s var(--st-ease);
}

    .stay-must-summary-clear:hover {
        color: #E2574C;
    }

.stay-must-summary-done {
    flex: 0 0 auto;
    border: none;
    border-radius: 12px;
    padding: 11px 26px;
    font-family: inherit;
    font-size: 0.9rem;
    font-weight: 800;
    color: #fff;
    cursor: pointer;
    background: linear-gradient(135deg, var(--st-cyan) 0%, var(--st-cyan-2) 100%);
    box-shadow: 0 6px 16px rgba(86, 196, 248, 0.32);
    transition: transform 0.15s var(--st-ease), box-shadow 0.2s var(--st-ease);
}

    .stay-must-summary-done:hover {
        box-shadow: 0 8px 20px rgba(86, 196, 248, 0.4);
    }

    .stay-must-summary-done:active {
        transform: translateY(1px);
    }

/* ── Responsive chip columns: 5 wide on desktop → fewer on smaller frames ── */
@media (max-width: 860px) {
    .stay-must-summary-chips {
        grid-template-columns: repeat(4, 1fr);
    }
}

@media (max-width: 640px) {
    .stay-must-summary {
        /* Anchor to the VIEWPORT (not the popover, which may be shorter) so the
           sheet always docks to the bottom edge of the screen. */
        position: fixed;
        inset: 0;
        z-index: 1500; /* above the .stay-pop bottom sheet (1400) */
        padding: 0;
        align-items: flex-end;
    }

    .stay-must-summary-sheet {
        width: 100%;
        max-height: 86vh;
        border-radius: 22px 22px 0 0;
        transform: translateY(100%);
    }

    .stay-must-summary.is-open .stay-must-summary-sheet {
        transform: translateY(0);
    }

    /* On phones the body can use more of the sheet; cap to the sheet, scroll. */
    .stay-must-summary-body {
        max-height: none;
    }

    /* Two columns read comfortably on a phone. */
    .stay-must-summary-chips {
        grid-template-columns: repeat(2, 1fr);
    }

    /* Drag-handle affordance to read as a native sheet. */
    .stay-must-summary-head {
        position: relative;
        padding-top: 20px;
    }

        .stay-must-summary-head::before {
            content: "";
            position: absolute;
            top: 7px;
            left: 50%;
            transform: translateX(-50%);
            width: 42px;
            height: 5px;
            border-radius: 3px;
            background: var(--st-line);
        }
}

@media (max-width: 400px) {
    .stay-must-summary-chips {
        grid-template-columns: 1fr;
    }
}

@media (prefers-reduced-motion: reduce) {
    .stay-must-summary-backdrop,
    .stay-must-summary-sheet {
        transition: none;
    }
}

/* ── 4 · WITH MY (companion tags, single-select, cyan = chosen) ───────── */
.stay-with-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
}

.stay-with {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 13px;
    border-radius: 13px;
    border: 1.5px solid var(--st-line);
    background: #fff;
    cursor: pointer;
    text-align: left;
    transition: border-color 0.18s var(--st-ease), background 0.18s var(--st-ease), transform 0.15s;
}

    .stay-with i {
        font-size: 1.05rem;
        color: var(--st-cyan-2);
        flex: 0 0 auto;
    }

.stay-with-name {
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--st-charcoal-2);
    line-height: 1.2;
    white-space: normal;
    overflow-wrap: anywhere;
}

.stay-with:hover {
    border-color: rgba(86, 196, 248, 0.5);
    box-shadow: var(--st-shadow-sm);
}

.stay-with.active {
    border-color: var(--st-cyan);
    background: linear-gradient(135deg, rgba(86, 196, 248, 0.12), rgba(86, 196, 248, 0.04));
    box-shadow: 0 6px 16px rgba(86, 196, 248, 0.18);
}

/* ── 5 · PURPOSE (single-select, cyan = chosen) ───────────────────────── */
.stay-purpose-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
}

.stay-purpose {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 10px 11px;
    border-radius: 12px;
    border: 1.5px solid var(--st-line);
    background: #fff;
    cursor: pointer;
    text-align: left;
    transition: border-color 0.18s var(--st-ease), background 0.18s var(--st-ease), transform 0.15s;
}

    .stay-purpose i {
        flex: 0 0 auto;
        font-size: 1.02rem;
        color: var(--st-cyan-2);
    }

.stay-purpose-name {
    font-size: 0.8rem;
    font-weight: 700;
    color: var(--st-charcoal-2);
    line-height: 1.2;
    white-space: normal;
    overflow-wrap: anywhere;
}

.stay-purpose:hover {
    border-color: rgba(86, 196, 248, 0.5);
    box-shadow: var(--st-shadow-sm);
}

.stay-purpose.active {
    border-color: var(--st-cyan);
    background: linear-gradient(135deg, rgba(86, 196, 248, 0.12), rgba(86, 196, 248, 0.04));
    box-shadow: 0 6px 16px rgba(86, 196, 248, 0.18);
}

/* ── Short viewports (laptops ≤ 820px tall): compact the WHEN panel further so
      the Done bar always clears the fold. The month grid shrinks first (it
      scrolls), then presets/fields/day-cells tighten. ── */
@media (max-height: 820px) {
    .stay-pop--when .stay-cal-months {
        max-height: 16vh;
    }

    .stay-when-opt {
        padding: 8px 12px;
    }

    .stay-cal {
        margin-top: 8px;
    }

    .stay-cal-bar {
        margin-bottom: 6px;
    }

    .stay-cal-fields {
        margin-bottom: 7px;
    }

    .stay-cal-day {
        height: 28px;
    }
}

@media (max-height: 720px) {
    .stay-pop--when .stay-cal-months {
        max-height: 11vh;
    }

    .stay-cal-day {
        height: 24px;
        font-size: 0.72rem;
    }

    .stay-when-presets {
        gap: 7px;
    }

    .stay-when-opt {
        padding: 6px 10px;
    }

    .stay-cal {
        margin-top: 6px;
    }

    .stay-cal-fields {
        margin-bottom: 5px;
    }

    .stay-cal-field {
        padding: 6px 10px;
    }
}

/* ── 5 · WHEN — smart presets that drive a dual-month calendar ────────── */
.stay-when-presets {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 9px;
}

.stay-when-opt {
    display: flex;
    flex-direction: column;
    gap: 2px;
    align-items: flex-start;
    padding: 10px 13px;
    border-radius: 13px;
    cursor: pointer;
    text-align: left;
    border: 1.5px solid var(--st-line);
    background: #fff;
    transition: border-color 0.2s var(--st-ease), background 0.2s var(--st-ease), transform 0.15s, padding 0.2s var(--st-ease);
}

    .stay-when-opt:hover {
        border-color: rgba(245, 130, 32, 0.4);
        box-shadow: var(--st-shadow-sm);
    }

    .stay-when-opt.active {
        border-color: var(--st-orange);
        background: linear-gradient(135deg, rgba(245, 130, 32, 0.10), rgba(245, 130, 32, 0.03));
        box-shadow: 0 6px 16px rgba(245, 130, 32, 0.16);
    }

    .stay-when-opt i {
        font-size: 1.05rem;
        color: var(--st-orange);
    }

.stay-when-name {
    font-size: 0.88rem;
    font-weight: 800;
    color: var(--st-charcoal-2);
}

.stay-when-meta {
    font-size: 0.74rem;
    color: var(--st-muted);
}

/* Once a preset is chosen the row shrinks to compact pill toggles so the
   calendar gets the room — the "smart reveal" step. */
.stay-when-presets.is-picked .stay-when-opt {
    flex-direction: row;
    align-items: center;
    gap: 7px;
    padding: 8px 12px;
    border-radius: 60px;
}

.stay-when-presets.is-picked .stay-when-meta {
    display: none;
}

.stay-when-presets.is-picked .stay-when-name {
    font-size: 0.8rem;
}

/* The WHEN panel is a flex column: presets (fixed) + calendar (flexible) +
   the sticky Done bar (fixed). The calendar's month grid is the only part that
   shrinks/scrolls, so the Done bar is ALWAYS visible regardless of viewport
   height or how far down the strip sits on the page. */
.stay-pop--when {
    display: flex;
    flex-direction: column;
}

    .stay-pop--when .stay-when-presets {
        flex: 0 0 auto;
    }

    .stay-pop--when .stay-confirm-bar {
        flex: 0 0 auto;
    }

/* ── The dual-month calendar ──────────────────────────────────────────── */
.stay-cal {
    margin-top: 10px;
    animation: stayCalIn 0.28s var(--st-ease);
    /* Take the remaining height and let the months area inside it shrink. */
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

    .stay-cal[hidden] {
        display: none;
    }

    .stay-cal .stay-cal-bar,
    .stay-cal .stay-cal-fields {
        flex: 0 0 auto;
    }

@keyframes stayCalIn {
    from {
        opacity: 0;
        transform: translateY(8px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.stay-cal-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 8px;
}

.stay-cal-range {
    font-size: 0.86rem;
    font-weight: 800;
    color: var(--st-charcoal);
    letter-spacing: -0.01em;
}

.stay-cal-nav {
    width: 30px;
    height: 30px;
    border-radius: 50%;
    border: 1.5px solid var(--st-line);
    background: #fff;
    color: var(--st-charcoal-2);
    cursor: pointer;
    display: grid;
    place-items: center;
    font-size: 0.8rem;
    transition: border-color 0.18s, color 0.18s, background 0.18s;
}

    .stay-cal-nav:hover {
        border-color: var(--st-orange);
        color: var(--st-orange);
    }

    .stay-cal-nav.is-disabled,
    .stay-cal-nav:disabled {
        opacity: 0.35;
        cursor: not-allowed;
    }

/* Clear check-in / check-out summary, always visible above the grid. */
.stay-cal-fields {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: stretch;
    gap: 10px;
    margin-bottom: 9px;
}

.stay-cal-field {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 8px 12px;
    border-radius: 11px;
    border: 1.5px solid var(--st-line);
    background: #fff;
    cursor: pointer;
    transition: border-color 0.18s var(--st-ease), box-shadow 0.18s var(--st-ease);
}

    .stay-cal-field.is-active {
        border-color: var(--st-orange);
        box-shadow: 0 0 0 3px rgba(245, 130, 32, 0.12);
    }

.stay-cal-field-cap {
    font-size: 0.6rem;
    font-weight: 800;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--st-muted);
}

.stay-cal-field-val {
    font-size: 0.88rem;
    font-weight: 800;
    color: var(--st-charcoal);
}

    .stay-cal-field-val.is-empty {
        color: #9AA1AC;
        font-weight: 600;
    }

.stay-cal-field-arrow {
    display: grid;
    place-items: center;
    color: var(--st-muted);
    font-size: 0.95rem;
}

.stay-cal-months {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px 20px;
    /* Flex within the calendar column: take the leftover height and scroll
       inside. The cap keeps it compact enough that the WHOLE WHEN panel
       (presets + fields + calendar + Done bar) fits even on a ~768px laptop,
       where the strip already sits ~480px down the page; min-height:0 lets it
       shrink further on shorter screens so the Done bar is never pushed off. */
    flex: 1 1 auto;
    min-height: 0;
    max-height: min(168px, 20vh);
    overflow-y: auto;
    overscroll-behavior: contain;
    scrollbar-width: thin;
    padding-right: 4px;
    scroll-snap-type: y proximity;
}

    .stay-cal-months::-webkit-scrollbar {
        width: 7px;
    }

    .stay-cal-months::-webkit-scrollbar-thumb {
        background: var(--st-line);
        border-radius: 4px;
    }

.stay-cal-month {
    scroll-margin-top: 4px;
    scroll-snap-align: start;
}

.stay-cal-cap {
    text-align: center;
    font-size: 0.8rem;
    font-weight: 800;
    color: var(--st-charcoal);
    margin-bottom: 6px;
}

.stay-cal-dow {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
    margin-bottom: 2px;
}

    .stay-cal-dow span {
        text-align: center;
        font-size: 0.66rem;
        font-weight: 700;
        color: var(--st-muted);
        padding: 1px 0;
    }

.stay-cal-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
}

.stay-cal-day {
    height: 30px;
    border: none;
    background: transparent;
    border-radius: 8px;
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--st-charcoal-2);
    cursor: pointer;
    display: grid;
    place-items: center;
    transition: background 0.15s var(--st-ease), color 0.15s var(--st-ease);
}

    .stay-cal-day:hover:not(.is-past) {
        background: rgba(245, 130, 32, 0.12);
    }

    .stay-cal-day.is-past {
        color: #C8CDD4;
        cursor: not-allowed;
    }

    .stay-cal-day.is-today {
        box-shadow: inset 0 0 0 1.5px rgba(86, 196, 248, 0.6);
    }

    .stay-cal-day.is-between {
        background: rgba(245, 130, 32, 0.12);
        border-radius: 0;
        color: var(--st-charcoal);
    }

    .stay-cal-day.is-start,
    .stay-cal-day.is-end {
        background: linear-gradient(135deg, var(--st-orange) 0%, var(--st-orange-2) 100%);
        color: #fff;
        font-weight: 800;
        box-shadow: 0 5px 13px rgba(245, 130, 32, 0.34);
    }

    .stay-cal-day.is-start {
        border-radius: 8px 0 0 8px;
    }

    .stay-cal-day.is-end {
        border-radius: 0 8px 8px 0;
    }

    .stay-cal-day.is-start.is-end {
        border-radius: 8px;
    }

.stay-cal-foot {
    display: none; /* nights + clear now live in the always-visible confirm bar */
}

.stay-confirm-actions {
    display: flex;
    align-items: center;
    gap: 14px;
    flex: 0 0 auto;
}

.stay-confirm-clear {
    border: none;
    background: transparent;
    color: var(--st-muted);
    font-size: 0.84rem;
    font-weight: 700;
    cursor: pointer;
    padding: 4px 2px;
}

    .stay-confirm-clear:hover {
        color: var(--st-charcoal-2);
    }

.stay-cal-hint {
    font-size: 0.84rem;
    font-weight: 700;
    color: var(--st-charcoal-2);
}

/* ── Responsive tweaks for the intent popovers ────────────────────────── */
/* (Mobile popover sizing is handled by the unified ≤860px block above —
   bottom sheets, full width, capped at 88vh.) */

@media (max-width: 540px) {
    /* On the narrowest phones, drop option grids to a single column. */
    .stay-cat-grid,
    .stay-vibe-rail,
    .stay-must-grid,
    .stay-with-grid,
    .stay-purpose-grid,
    .stay-when-presets {
        grid-template-columns: 1fr;
    }

    .stay-cal-months {
        grid-template-columns: 1fr;
        gap: 14px;
    }
}

/* Focus-visible parity for the new interactive elements. */
.stay-vibe-card:focus-visible,
.stay-must:focus-visible,
.stay-with:focus-visible,
.stay-purpose:focus-visible,
.stay-when-opt:focus-visible,
.stay-cat:focus-visible,
.stay-cal-day:focus-visible,
.stay-cal-nav:focus-visible {
    outline: 2.5px solid var(--st-cyan);
    outline-offset: 2px;
}


/* ════════════════════════════════════════════════════════════════════════
   RESULTS GRID (Phase 4) — verified-stay cards with the intelligence snapshot.
   Renders into #stayResultsGrid via stay.js → renderResults(). Cyan carries
   the hyperlocal intelligence chips (power · fibre · commute · safety);
   orange carries price + action; charcoal carries the listing facts.
   ════════════════════════════════════════════════════════════════════════ */
.stay-results-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 16px;
}

.stay-results-count {
    margin: 0;
    font-size: 1.18rem;
    font-weight: 800;
    letter-spacing: -0.02em;
    color: var(--st-charcoal);
}

.stay-results-sub {
    margin: 2px 0 0;
    font-size: 0.86rem;
    color: var(--st-muted);
}

.stay-results-reset {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    border: 1.5px solid var(--st-line);
    background: #fff;
    color: var(--st-charcoal-2);
    font-size: 0.82rem;
    font-weight: 700;
    padding: 9px 15px;
    border-radius: 60px;
    cursor: pointer;
    transition: border-color 0.2s, color 0.2s, transform 0.15s;
}

    .stay-results-reset:hover {
        border-color: var(--st-orange);
        color: var(--st-orange);
        box-shadow: var(--st-shadow-sm);
    }

.stay-results-empty {
    grid-column: 1 / -1;
    text-align: center;
    padding: 30px 24px;
    border-radius: 20px;
    background: rgba(255, 255, 255, 0.82);
    border: 1.5px dashed rgba(245, 130, 32, 0.32);
}

    .stay-results-empty[hidden] {
        display: none;
    }

/* ── CARD ──────────────────────────────────────────────────────────────── */
.stay-card {
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 1px solid var(--st-line);
    border-radius: 18px;
    overflow: hidden;
    box-shadow: var(--st-shadow-sm);
    cursor: pointer;
    transition: transform 0.22s var(--st-ease), box-shadow 0.22s var(--st-ease), border-color 0.22s var(--st-ease);
    text-align: left;
    width: 100%;
    padding: 0;
    font: inherit;
    color: inherit;
    animation: stayCardIn 0.34s var(--st-ease) both;
}

    .stay-card:hover {
        box-shadow: var(--st-shadow-md);
        border-color: rgba(245, 130, 32, 0.34);
    }

@keyframes stayCardIn {
    from {
        opacity: 0;
        transform: translateY(10px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.stay-card-media {
    position: relative;
    aspect-ratio: 3 / 2;
    background: linear-gradient(135deg, var(--st-cloud), var(--st-cloud-2));
    overflow: hidden;
}

    .stay-card-media img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        display: block;
    }

.stay-card-media-fallback {
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
    color: #C3CAD3;
    font-size: 2rem;
}

/* Verification badge — cyan = trust, the platform's core promise. */
.stay-card-verify {
    position: absolute;
    top: 11px;
    left: 11px;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 10px;
    border-radius: 60px;
    font-size: 0.7rem;
    font-weight: 800;
    letter-spacing: 0.01em;
    background: rgba(255, 255, 255, 0.94);
    color: var(--st-cyan-2);
    box-shadow: 0 4px 12px rgba(14, 14, 17, 0.12);
    backdrop-filter: blur(6px);
}

    .stay-card-verify i {
        font-size: 0.82rem;
    }

    .stay-card-verify.is-full {
        color: var(--st-cyan-2);
    }

    .stay-card-verify.is-partial {
        color: #6B7280;
    }

.stay-card-instant {
    position: absolute;
    top: 11px;
    right: 11px;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 10px;
    border-radius: 60px;
    font-size: 0.7rem;
    font-weight: 800;
    background: linear-gradient(135deg, var(--st-orange), var(--st-orange-2));
    color: #fff;
    box-shadow: 0 4px 12px rgba(245, 130, 32, 0.34);
}

    .stay-card-instant i {
        font-size: 0.78rem;
    }

.stay-card-body {
    display: flex;
    flex-direction: column;
    gap: 9px;
    padding: 14px 15px 15px;
}

.stay-card-loc {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.76rem;
    font-weight: 700;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    color: var(--st-muted);
}

    .stay-card-loc i {
        color: var(--st-orange);
        font-size: 0.8rem;
    }

.stay-card-title {
    margin: 0;
    font-size: 1rem;
    font-weight: 800;
    line-height: 1.3;
    color: var(--st-charcoal);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.stay-card-facts {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 12px;
    font-size: 0.8rem;
    color: var(--st-ink);
}

    .stay-card-facts span {
        display: inline-flex;
        align-items: center;
        gap: 5px;
    }

    .stay-card-facts i {
        color: var(--st-muted);
        font-size: 0.85rem;
    }

/* Intelligence chips — cyan, the hyperlocal moat made visible. */
.stay-card-intel {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 1px;
}

.stay-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 9px;
    border-radius: 8px;
    font-size: 0.72rem;
    font-weight: 700;
    background: rgba(86, 196, 248, 0.1);
    color: #2C6F90;
    border: 1px solid rgba(86, 196, 248, 0.22);
}

    .stay-chip i {
        font-size: 0.78rem;
        color: var(--st-cyan-2);
    }

    .stay-chip.is-warn {
        background: rgba(245, 130, 32, 0.1);
        color: #9A5212;
        border-color: rgba(245, 130, 32, 0.24);
    }

        .stay-chip.is-warn i {
            color: var(--st-orange);
        }

.stay-card-foot {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    margin-top: 3px;
    padding-top: 12px;
    border-top: 1px solid var(--st-line-2);
}

.stay-card-price {
    display: flex;
    flex-direction: column;
    line-height: 1.2;
}

.stay-card-rate {
    font-size: 1.08rem;
    font-weight: 800;
    color: var(--st-charcoal);
}

    .stay-card-rate small {
        font-size: 0.74rem;
        font-weight: 700;
        color: var(--st-muted);
    }

.stay-card-fees {
    font-size: 0.72rem;
    color: var(--st-muted);
}

.stay-card-cta {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 0.82rem;
    font-weight: 800;
    color: var(--st-orange);
}

.stay-card:hover .stay-card-cta i {
    transform: translateX(2px);
}

.stay-card-cta i {
    transition: transform 0.2s var(--st-ease);
}

@media (max-width: 540px) {
    .stay-results-head {
        flex-direction: column;
        align-items: stretch;
        gap: 10px;
    }

    .stay-results-reset {
        align-self: flex-start;
    }
}

/* =============================================================================
   HOST-VERIFICATION TRUST PANEL — bottom-CENTRED sliding panel (Stay-only)
   -----------------------------------------------------------------------------
   Docked to the BOTTOM-CENTRE of the viewport. The handle is anchored to the
   TOP of the sliding panel, so the WHOLE assembly — panel + handle — slides
   DOWN together when collapsed, leaving only the chevron handle peeking above
   the bottom edge. stay-trust.js re-parents #stayTrust to <body> for true
   viewport docking, toggles data-collapsed, and gates display on the active
   Stay tab so it ONLY appears on the Stay search view.

   POINTER MODEL (critical — this is what keeps the search strip usable):
     • .stay-trust is a full-width fixed strip pinned to the bottom edge, but it
       is pointer-events:none, so it never traps clicks meant for the page.
     • Only the sliding panel + handle re-enable pointer events.
     • When COLLAPSED, the panel body drops pointer-events entirely — only the
       handle stays clickable — so a mid-slide / collapsed panel can never sit
       over the search strip and freeze it.
   ============================================================================= */
.stay-trust {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1200; /* above page content; below modals (100050+) */
    pointer-events: none; /* children re-enable as needed */
    display: flex;
    justify-content: center;
    align-items: flex-end;
    /* Keep clear of the Platform Capabilities side panel (JS sets the inset). */
    padding-right: var(--stay-trust-right, 0px);
    transition: padding-right 300ms cubic-bezier(.4, 0, .2, 1);
    font-family: 'Outfit', system-ui, sans-serif;
}

/* The sliding assembly: panel + handle move together. Centred, bottom-docked. */
.stay-trust-panel {
    pointer-events: auto;
    position: relative;
    margin: 0 auto; /* centre horizontally */
    width: min(720px, calc(100% - 24px));
    background: #FFFFFF;
    border: 1px solid rgba(14, 14, 17, 0.08);
    border-bottom: none;
    border-radius: 16px 16px 0 0;
    box-shadow: 0 -16px 44px rgba(14, 14, 17, 0.14);
    transform: translateY(0);
    transition: transform 360ms cubic-bezier(.22, 1, .36, 1);
    will-change: transform;
}

/* Collapsed: slide the whole assembly straight down so only the handle remains.
   JS sets --stay-trust-shift = the panel's own height. A small safety margin
   guarantees the body is fully off-screen even if measurement is imperfect. */
.stay-trust[data-collapsed="true"] .stay-trust-panel {
    transform: translateY(calc(var(--stay-trust-shift, 100%) + 4px));
}

/* When collapsed, the body must NOT capture pointer events — otherwise a
   panel that is sliding down (or measured short) could still sit invisibly
   over the search strip and freeze it. Only the handle stays interactive. */
.stay-trust[data-collapsed="true"] .stay-trust-panel-inner {
    pointer-events: none;
}

/* ── Handle — anchored to the TOP of the panel so it slides WITH it ──────── */
.stay-trust-handle {
    pointer-events: auto;
    position: absolute;
    top: -38px; /* sits just above the panel's top edge */
    left: 50%;
    transform: translateX(-50%);
    height: 38px;
    display: inline-flex;
    align-items: center;
    gap: 9px;
    border: 1px solid rgba(14, 14, 17, 0.08);
    border-bottom: none;
    border-radius: 12px 12px 0 0;
    background: #FFFFFF;
    box-shadow: 0 -8px 24px rgba(14, 14, 17, 0.10);
    padding: 0 16px;
    cursor: pointer;
    font-family: 'Outfit', system-ui, sans-serif;
    transition: box-shadow 200ms ease;
    z-index: 2; /* above the panel body */
}

    .stay-trust-handle:hover {
        box-shadow: 0 -10px 30px rgba(14, 14, 17, 0.15);
    }

    .stay-trust-handle:focus-visible {
        outline: 2px solid #56C4F8;
        outline-offset: 2px;
    }

.stay-trust-handle-ico {
    width: 22px;
    height: 22px;
    border-radius: 7px;
    background: linear-gradient(135deg, #56C4F8, #3FA9D9);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.8rem;
    flex: 0 0 auto;
}

.stay-trust-handle-label {
    font-size: 0.82rem;
    font-weight: 700;
    color: #0E0E11;
    letter-spacing: -0.005em;
    white-space: nowrap;
}

.stay-trust-chev {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #F6F7F9;
    color: #42454D;
    font-size: 0.74rem;
    transition: transform 280ms cubic-bezier(.22, 1, .36, 1), background 160ms ease;
}

.stay-trust-handle:hover .stay-trust-chev {
    background: #EAF6FE;
    color: #3FA9D9;
}
/* Glyph is chevron-up. Open → rotate to point DOWN (collapse). Collapsed → up. */
.stay-trust:not([data-collapsed="true"]) .stay-trust-chev {
    transform: rotate(180deg);
}

/* Body wrapper. On normal desktop heights it sizes to its content — the whole
   panel (heading + 2×2 grid + footer) is visible in one view, NO scrollbar.
   A scroll only appears as a safety net on genuinely short viewports (handled
   in the short-viewport and mobile media queries below). */
.stay-trust-panel-inner {
    padding: 13px 22px 15px;
}

/* Safety net: only when the viewport is too short to fit the panel above the
   fold do we cap it and allow internal scrolling — never on a normal desktop.
   Engages a little earlier (≤820px tall) so the compact panel still clears the
   search strip on shorter laptop windows instead of growing up over it. */
@media (max-height: 820px) {
    .stay-trust-panel-inner {
        max-height: calc(100vh - 96px);
        overflow-y: auto;
        overscroll-behavior: contain;
    }
}

.stay-trust-head {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 9px;
}

.stay-trust-shield {
    flex: 0 0 auto;
    width: 38px;
    height: 38px;
    border-radius: 11px;
    background: linear-gradient(135deg, #56C4F8, #3FA9D9);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.12rem;
    box-shadow: 0 6px 16px rgba(63, 169, 217, 0.3);
}

.stay-trust-head-text {
    flex: 1;
    min-width: 0;
}

.stay-trust-title {
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 1.0rem;
    font-weight: 700;
    color: #0E0E11;
    margin: 0 0 2px;
    letter-spacing: -0.01em;
    line-height: 1.22;
}

.stay-trust-sub {
    font-size: 0.8rem;
    color: #42454D;
    line-height: 1.4;
    margin: 0;
}

.stay-trust-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 9px;
    margin-bottom: 9px;
}

.stay-trust-card {
    border: 1px solid rgba(14, 14, 17, 0.08);
    border-radius: 13px;
    padding: 9px 12px;
    background: #FCFCFD;
    transition: box-shadow 160ms ease, border-color 160ms ease;
    /* Icon + heading share the top row; the description spans full width below. */
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
    column-gap: 9px;
    row-gap: 5px;
}

    .stay-trust-card:hover {
        box-shadow: 0 8px 22px rgba(14, 14, 17, 0.07);
        border-color: rgba(245, 130, 32, 0.3);
    }

.stay-trust-ico {
    width: 29px;
    height: 29px;
    border-radius: 9px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #FFF4E9;
    color: #F58220;
    font-size: 0.92rem;
    margin-bottom: 0; /* now inline with the heading */
    flex: 0 0 auto;
}

.stay-trust-card h3 {
    font-size: 0.81rem;
    font-weight: 700;
    color: #0E0E11;
    margin: 0;
}

.stay-trust-card p {
    grid-column: 1 / -1; /* full width, under the icon + heading row */
    font-size: 0.75rem;
    color: #6C757D;
    line-height: 1.38;
    margin: 0;
}

.stay-trust-foot {
    display: flex;
    gap: 8px;
    align-items: flex-start;
    font-size: 0.74rem;
    color: #42454D;
    line-height: 1.45;
    margin: 0;
    padding: 8px 11px;
    background: #FFF9F2;
    border: 1px solid #FCE4CB;
    border-radius: 10px;
}

    .stay-trust-foot i {
        color: #F58220;
        margin-top: 2px;
        flex: 0 0 auto;
    }

/* ── Tablet / small laptop ──────────────────────────────────────────────── */
@media (max-width: 860px) {
    .stay-trust-panel {
        width: min(640px, calc(100% - 20px));
    }
}

/* =============================================================================
   MOBILE (≤ 540px) — COMPACT, NON-OBSTRUCTING
   -----------------------------------------------------------------------------
   On phones the panel must never bury the search strip or the rest of the Stay
   feature. Senior-mobile approach:
     • Default to the COLLAPSED handle (JS forces this on small screens), so the
       page lands with the search strip fully visible and a slim "Verified
       hosts" tab at the bottom.
     • When expanded, the body is a tight single-column list capped to ~62vh so
       it reads as a bottom sheet — swipe-scrollable, with the page still
       peeking above it. All four checks remain reachable in one short scroll.
     • Full-bleed width with rounded top corners, like a native bottom sheet.
   ============================================================================= */
@media (max-width: 540px) {
    .stay-trust {
        /* Edge-to-edge bottom sheet. */
        padding-right: 0 !important;
    }

    .stay-trust-panel {
        width: 100%;
        margin: 0;
        border-left: none;
        border-right: none;
        border-radius: 18px 18px 0 0;
        box-shadow: 0 -14px 40px rgba(14, 14, 17, 0.18);
    }

    .stay-trust-handle {
        height: 36px;
        top: -36px;
        padding: 0 14px;
        gap: 7px;
    }

    .stay-trust-handle-label {
        font-size: 0.78rem;
    }

    /* Bottom-sheet body — sized to its (now compact) content; no scrollbar.
       With descriptions hidden below, the heading + 2×2 heading-only grid +
       footer all fit comfortably in one viewport. */
    .stay-trust-panel-inner {
        padding: 14px 14px 16px;
    }

    /* Tighten the header so the cards get more room above the fold. */
    .stay-trust-head {
        gap: 11px;
        margin-bottom: 12px;
    }

    .stay-trust-shield {
        width: 38px;
        height: 38px;
        border-radius: 11px;
        font-size: 1.15rem;
    }

    .stay-trust-title {
        font-size: 1.02rem;
        line-height: 1.22;
    }

    .stay-trust-sub {
        font-size: 0.82rem;
        line-height: 1.45;
    }

    /* Compact 2×2 grid of HEADING-ONLY tiles: icon + title side-by-side so each
       tile is short and all four are visible together without scrolling. */
    .stay-trust-grid {
        grid-template-columns: 1fr 1fr;
        gap: 9px;
        margin-bottom: 11px;
    }

    .stay-trust-card {
        display: flex;
        align-items: center;
        gap: 9px;
        padding: 11px 12px;
        border-radius: 12px;
    }

    .stay-trust-ico {
        width: 30px;
        height: 30px;
        border-radius: 9px;
        font-size: 0.92rem;
        margin-bottom: 0; /* now inline with the title */
        flex: 0 0 auto;
    }

    .stay-trust-card h3 {
        font-size: 0.82rem;
        margin: 0;
        line-height: 1.2;
    }

    /* Per spec: phones show the card HEADING only — drop the descriptions so the
       feature stays compact and all four checks read at a glance. */
    .stay-trust-card p {
        display: none;
    }

    .stay-trust-foot {
        font-size: 0.74rem;
        padding: 9px 11px;
    }
}

/* ── Very small / short phones — also drop the footer note to save height ── */
@media (max-width: 380px), (max-height: 640px) and (max-width: 540px) {
    .stay-trust-foot {
        display: none; /* recoverable detail; the head paragraph carries context */
    }
}

@media (prefers-reduced-motion: reduce) {
    .stay-trust-panel, .stay-trust-chev {
        transition: none;
    }
}
