.dialog {
    height: auto;
    /* Use dvh (dynamic viewport height) for mobile browsers, with vh fallback */
    max-height: clamp(200px, 97vh, 4096px);
    max-height: clamp(200px, 97dvh, 4096px);
    width: clamp(80vw, 95vw, 1024px);
    background: #ffffff;
    opacity: 1;
    visibility: visible;
    margin: auto;
    z-index: 999999;
    color: black;
    border-radius: 1.2rem;
    padding: calc(1.2rem + 8px) 1.2rem 1.2rem 1.2rem;
    justify-self: center;
    justify-content: space-between;
    justify-items: center;
    overflow-x: hidden;
    overflow-y: auto;
    /* Allow dialog content to expand naturally for scrolling */
    flex-wrap: nowrap;
    display: flex;
    flex-direction: column;
    /* transition-property: width, height, opacity, max-width, max-height, top, left, bottom, right;
    transition-duration: 333ms;
    transition-timing-function: ease-in-out; */
}

.dialog.invite-dialog {
    max-height: none;
    height: clamp(200px, 65vh, 1024px);
}

.dialog .tab-set {
    width: clamp(299px, 90wv, 299px);
}

.dialog .person-icon,
.dialog .person-icon .circle,
.dialog .row > .circle {
    border-color: black;
    background-color: white;
}

.dialog .content-panel > .row {
    gap: 1rem;
    margin: auto;
}

.dialog .content-panel {
    padding: 0;
    gap: 0.9rem;
    justify-content: center;
}

.dialog .content-panel .content-panel {
    flex-flow: wrap;
    overflow-y: auto;
    max-height: calc(97vh - 6rem);
    max-height: calc(97dvh - 6rem);
}

.dialog .action-panel {
    justify-content: center;
    /* width: 100%; */
}

.dialog .simple-list {
    padding: 0;
    margin: 0;
}

.dialog .title .action-item {
    padding: 0;
}

.dialog .action-list .action-item {
    color: black;
    background-color: white;
    padding: 0.5rem 0.75rem;
}

.dialog .action-list .action-item:hover {
    background-color: #dddddd;
}

.dialog .title {
    padding: 0;
    box-shadow: none;
    background: none;
    /* CRITICAL: Anchor for absolutely positioned close button */
    position: relative;
    padding-right: 2.5rem; /* Make room for close button */
    flex-shrink: 0; /* Title never shrinks */
}

.dialog .choice-set {
    background: none;
    justify-content: flex-start;
    padding: 0 6px 3px;
    /* Greg 7/16 STANDING RULE: chip rows inside filter dialogs WRAP —
       never sideways-scroll (the subcategory row scrolled while the tag
       grid wrapped; off-screen chips were undiscoverable). Kill the base
       .choice-set scroll + right-edge fade mask inside dialogs. */
    flex-wrap: wrap;
    overflow-x: visible;
    gap: 4px;
    mask-image: none;
    -webkit-mask-image: none;
}

.dialog .choice-set:not(.multi-select) .choice {
    flex-shrink: 0;
    width: auto;
}

/* Moved .dialog label rule below to consolidate */

.dialog .choice-set.multi-select {
    flex-wrap: wrap;
    overflow-x: visible;
    gap: 4px;
    padding: 4px;
    max-height: 40vh;
    overflow: scroll;
}

.dialog .choice-set.multi-select .choice {
    min-width: auto;
    width: auto;
    font-size: 0.8rem;
    padding: 0.15rem 0.5rem;
}

/* Things To Do filter: collapse the Activity Tags grid to a single row by
   default, with a toggle arrow at the top-right to reveal the rest. Frees
   vertical room in the dialog for other filters. */
.dialog .todo-tags-wrap {
    position: relative;
}
.dialog .todo-tags-wrap #todo-tags {
    padding-right: 2.4rem;  /* reserve room so the toggle never covers a chip */
}
.dialog .todo-tags-wrap.collapsed #todo-tags {
    flex-wrap: nowrap;      /* single line; truncate the rest */
    overflow: hidden;
    max-height: none;
}
.dialog .todo-tags-toggle {
    position: absolute;
    top: 2px;
    right: 2px;
    width: 1.9rem;
    height: 1.9rem;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: #dd8800;
    color: #fff;
    font-size: 0.8rem;
    line-height: 1;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 2;
}
.dialog .todo-tags-toggle::before {
    content: "\25BC";  /* down arrow ▼ when collapsed */
}
.dialog .todo-tags-wrap:not(.collapsed) .todo-tags-toggle::before {
    content: "\25B2";  /* up arrow ▲ when expanded */
}

/* Things To Do filter: full-screen so there is room to build additional
   filters. Scoped to this dialog only via the .things-to-do-fullscreen
   modifier added/removed in showThingsToDo(); the shared base .dialog
   (used by every other dialog) is untouched. */
.dialog.things-to-do-fullscreen,
.dialog.eat-drink-fullscreen {
    width: 100vw;
    max-width: 100vw;
    height: 100vh;
    height: 100dvh;
    max-height: 100vh;
    max-height: 100dvh;
    border-radius: 0;
}
/* Scrollable filter body: cap the inner panel to the viewport and let it
   scroll (right-side scrollbar) so we have room to keep adding filter rows.
   NB: emergency_visibility_fix.css forces .content-panel{display:block!important},
   so flex `gap` does nothing here — section spacing is done with margins below,
   and block + max-height + overflow-y is what produces the scroll. */
.dialog.things-to-do-fullscreen .content-panel .content-panel,
.dialog.eat-drink-fullscreen .content-panel .content-panel {
    max-height: calc(100dvh - 6rem);
    max-height: calc(100vh - 6rem);
    overflow-y: auto;
    overflow-x: hidden;
}
/* Clear separation between each filter section (Subcategory, Activity Tags,
   the Live Music block, Time of Day, Search, and the Apply/Cancel row). gap
   can't be used (block layout, see above), so space every direct child. */
.dialog.things-to-do-fullscreen .content-panel .content-panel > *,
.dialog.eat-drink-fullscreen .content-panel .content-panel > * {
    margin-bottom: 2.75rem;
}
/* All filter rows share one layout: a full-width column with centred captions,
   so Dates, Time of Day, Destination and Search line up consistently. Scoped to
   this dialog only. */
.dialog.things-to-do-fullscreen .search-text,
.dialog.things-to-do-fullscreen .time-of-day,
.dialog.things-to-do-fullscreen .live-music-filters > label {
    display: flex;
    flex-direction: column;
    align-items: stretch;   /* inputs/selects fill the row */
    width: 100%;
    gap: 0.25rem;
    text-align: center;     /* captions centred and consistent */
}
.dialog.things-to-do-fullscreen .search-text .input-set,
.dialog.things-to-do-fullscreen .search-text input,
.dialog.things-to-do-fullscreen .time-of-day .input-set,
.dialog.things-to-do-fullscreen .time-of-day select,
.dialog.things-to-do-fullscreen .time-of-day .select {
    width: 100%;
}

/* Live Music sub-filters (Phase 1): emerge on the Live Music subcategory tab. */
.live-music-filters.hidden {
    display: none;
}
.live-music-filters .lm-date-range {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
}
.live-music-filters .lm-date-field {
    display: inline-flex;
    flex-direction: column;
    gap: 0.15rem;
    /* Two equal columns that share the row instead of each input ballooning
       to its own min-width (which made the date boxes look oversized). */
    flex: 1 1 0;
    min-width: 7rem;
}
.live-music-filters .lm-date-field .input-set {
    width: 100%;
}
.live-music-filters .lm-date-range input {
    width: 100%;
}
.live-music-filters .lm-date-label {
    font-size: 0.75rem;
    color: #666;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}
.live-music-filters .lm-date-sep {
    color: #888;
    font-size: 0.9rem;
    align-self: flex-end;
    padding-bottom: 0.4rem;
}
.live-music-filters #lm-destination {
    width: 100%;
}
/* Anchor the absolutely-positioned results dropdown to the destination field.
   overflow:visible is REQUIRED here — the global `.dialog label{overflow:hidden}`
   otherwise clips the dropdown (which sits at top:100%, just outside this box). */
.live-music-filters .lm-destination-field,
.live-music-filters .lm-venue-field,
.live-music-filters .lm-band-field {
    position: relative;
    display: block;
    overflow: visible;
}
/* Even vertical separation between every filter inside the Live Music panel
   (Destination, Dates, Band/Artist, Venue). Each filter caption sits tight to
   its own box (above), so the gap belongs above the NEXT filter — applied to
   every panel child except the first, which the section spacing above already
   separates from Activity Tags. Slightly larger than the 2.75rem section gap. */
.live-music-filters > label + label {
    margin-top: 2.75rem;
}
/* Captions hug the field directly beneath them in this filter (defensive: kills
   any inherited spacing so the label reads as paired with its own box). */
.dialog.things-to-do-fullscreen .live-music-filters > label > .text,
.dialog.things-to-do-fullscreen .time-of-day > .text,
.dialog.things-to-do-fullscreen .search-text > .text {
    margin: 0 0 0.3rem 0;
}
.dialog.things-to-do-fullscreen .live-music-filters > label .input-set {
    margin: 0;
}
.live-music-filters .lm-destination-field .input-set {
    width: 100%;
}
/* Custom destination autocomplete dropdown (replaces the unstyleable native
   <datalist> popup). Fixed black-on-white so suggestions are always readable.
   position:absolute so an open list OVERLAYS the fields below instead of
   pushing them (and the Apply button) down out of view. */
.live-music-filters .lm-dest-results {
    display: none;
    position: absolute;
    left: 0;
    right: 0;
    top: 100%;
    z-index: 20;
    margin-top: 0.25rem;
    max-height: 12rem;
    overflow-y: auto;
    background: #fff;
    border: 1px solid #ccc;
    border-radius: 0.4rem;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.live-music-filters .lm-dest-results.open {
    display: block;
}
.live-music-filters .lm-dest-option {
    padding: 0.55rem 0.65rem;
    color: #000;
    -webkit-text-fill-color: #000;
    background: #fff;
    cursor: pointer;
    font-size: 0.95rem;
    border-bottom: 1px solid #eee;
}
.live-music-filters .lm-dest-option:last-child {
    border-bottom: 0;
}
.live-music-filters .lm-dest-option:hover {
    background: #f0f0f0;
}
/* Force dark-on-white so typed text stays readable. The destination box has a
   "City, State" placeholder, which Chrome treats as an address field and
   autofills — applying -webkit-text-fill-color that overrides plain `color`,
   turning typed text white-on-white. Pinning -webkit-text-fill-color (incl. the
   :-webkit-autofill state) defeats that; `color` alone was not enough. */
.live-music-filters input[type="text"],
.live-music-filters input[type="date"] {
    color: #000 !important;
    -webkit-text-fill-color: #000 !important;
    background-color: #fff !important;
    caret-color: #000;
}
/* Chrome's autofill style sets -webkit-text-fill-color with high priority and
   only yields to an !important override — without this, typing a city the
   browser wants to autofill (it reads "City, State" as an address field) makes
   the text render white-on-white. */
.live-music-filters input[type="text"]:-webkit-autofill,
.live-music-filters input[type="text"]:-webkit-autofill:hover,
.live-music-filters input[type="text"]:-webkit-autofill:focus,
.live-music-filters input[type="text"]:focus {
    -webkit-text-fill-color: #000 !important;
    color: #000 !important;
    caret-color: #000;
}
.live-music-filters input::placeholder {
    color: #888;
    -webkit-text-fill-color: #888;
}

.dialog .people-list-item.selected {
    background: #fff3e0;
    font-weight: bold;
}

.dialog .title {
    border-bottom: 1px solid #bbb;
}

.dialog .title,
.dialog .subtitle {
    color: black;
    font-size: 1.2rem;
}

.dialog .card .title,
.dialog .card .subtitle {
    font-size: 14px;
    color: white;
}

.dialog .card .subtitle {
    font-size: 11px;
}


.dialog .circle .subtitle {
    font-size: 0.75rem;
}

.dialog .autocomplete {
    width: 100%;
}

.dialog .autocomplete .simple-list {
    width: 100%;
    display: flex;
    justify-content: space-between;
    padding: 0.25rem;
    margin: 0.25rem;
    border-radius: 0.5rem;
}

.smoke {
    background: #000000bb;
    width: 100%;
    height: 100%;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    z-index: 900;
    /* transition-property: width, height, opacity, max-width, max-height, top, left, bottom, right;
    transition-duration: 111ms;
    transition-timing-function: ease-in-out; */
}

.dialog .outer-box {
    background-color: white;
}

/* .dialog .page {
    color: black;
    text-align: center;
    min-height: 100%;
    background-color: #111;
    display: flex;
    align-items: center;
    justify-content: center;
} */

/* .dialog .title {
        color: red;
    } */

.dialog-content {
    color: black;
    text-align: center;
    /* min-height: 100%; */
    /* background-color: #111; */
    display: flex;
    /* align-items: center;
    justify-content: center; */
    margin: auto;
    /* padding: 24px; */
    position: relative;
    min-height: 550px;
    /* max-width: 90%; */
    /* background-color: white;
    border-radius: 24px; */
}

/* header {
        height: 50px;
    } */

main {
    padding: 0 24px;
}

/* REMOVED: Global div display:block breaks flexbox layout system
   If specific dialog content needs block layout, target it specifically:
   .dialog .content-text { display: block; }
   .dialog p, .dialog .text-content { display: block; }
*/

/* More targeted: only dialog text content should be block */
.dialog main div.text-content,
.dialog main p,
.dialog main .dialog-text {
    margin-top: 20px;
    display: block;
}

div.images {
    /* margin-top: 36px */
    display: flex;
    flex-direction: row;
    justify-content: center;
    gap: 5px;
}

.images img {
    width: 72pt;
    height: 72pt;
    border: 2px solid black;
    border-radius: 50%;
    object-fit: cover;  /* Prevent distortion */
}

/* b {
        display: inline !important;
    } */

footer {
    /* width: 100%; */
    text-align: center;
    /* border: 1px solid red; */
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
}

footer div {
    display: flex;
    flex-direction: row;
    justify-content: center;
}

footer button.link {
    font-size: 16px;
    color: blue;
    background-color: white;
    width: 99%;
    border: none;
    margin-bottom: 8px;
}

footer .link:hover {
    text-decoration: underline;
}

footer button {
    width: 50%;
    padding: 9px;
    font-size: 16px;
    border-radius: 6px;
}

.dialog .card {
    width: inherit;
}

.dialog .card-list {
    height: inherit;
    background: none;
    border-radius: 0;
}

.dialog .contact .action-item {
    color: black;
    background: none;
    padding: 1em;
}

.dialog .action-item.contact {
    background-color: #dddddd;
}

.dialog .row .circle {
    border-color: #dddddd;
    background-color: #dddddd;
}

.dialog .content-panel .contact .circle .text {
    color: black;
    text-shadow: none;
}

.dialog .card-tags {
    margin: 0;
}

.dialog label {
    font-size: 1rem;
    min-width: 0;
    overflow: hidden;
}

.dialog label.name {
    width: 100%;
}

.dialog select.select.category option,
.dialog select.select.category {
    width: 100%;
}

.dialog .results .card {
    border-radius: 0.5rem;
}

/* Close button positioning - anchored to title (which has position: relative) */
.dialog > .content-panel > .title .action-item.close {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 10;
    overflow: visible;
}

.dialog > .content-panel {
    overflow-x: visible;
    overflow-y: visible;
    display: flex;
    flex-direction: column;
    flex: 1;
    min-height: 0; /* Critical for flex children to shrink properly */
}

/* Dialog body structure for proper scroll/fixed layout */
.dialog .dialog-body {
    display: flex;
    flex-direction: column;
    flex: 1;
    min-height: 0;
    overflow: hidden;
}

/* Scrollable content area - ONLY this scrolls */
.dialog .dialog-scroll-content {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    min-height: 0;
    padding: 0.5rem 0;
}

/* Fixed footer for buttons - always visible */
.dialog .dialog-footer {
    flex-shrink: 0;
    position: sticky;
    bottom: 0;
    background: white;
    padding: 1rem 0;
    border-top: 1px solid #eee;
    z-index: 5;
    display: flex;
    justify-content: space-between;
    gap: 1rem;
}

/* Ensure footer buttons are full width on mobile */
.dialog .dialog-footer .action-btn {
    flex: 1;
    min-width: 0;
}

/* BACKWARDS COMPATIBILITY: Legacy dialogs without new structure */
/* If no dialog-scroll-content exists, make content-panel scrollable */
.dialog > .content-panel:not(:has(.dialog-scroll-content)) {
    overflow: visible;
    max-height: calc(97vh - 4rem);
    max-height: calc(97dvh - 4rem);
}

/* Fallback for browsers without :has() support - apply scroll to content-panel */
@supports not selector(:has(*)) {
    .dialog > .content-panel {
        overflow-y: auto;
        max-height: calc(97vh - 4rem);
    }
}

.dialog .section {
    border: 1px solid lightgray;
    border-radius: 0.125rem;
    padding: 1rem;
    margin: 0.25rem 0 0.25rem 0;
}

/* Location Picker Dialog Styles */
.location-picker-container {
    display: flex;
    gap: 0.5rem;
    align-items: center;
}

.location-picker-button {
    padding: 0.5rem 1rem;
    background-color: #007bff;
    color: white;
    border: none;
    border-radius: 0.25rem;
    cursor: pointer;
    font-size: 0.9rem;
}

.location-picker-button:hover {
    background-color: #0056b3;
}

.location-picker-dialog .section-header {
    font-weight: bold;
    margin-bottom: 1rem;
    color: #333;
}

.location-options-list {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    margin-bottom: 1.5rem;
    max-height: 300px;
    overflow-y: auto;
}

.location-option {
    padding: 0.75rem 1rem;
    border: 1px solid #ddd;
    border-radius: 0.25rem;
    cursor: pointer;
    transition: background-color 0.2s;
}

.location-option:hover {
    background-color: #f8f9fa;
}

.location-option.selected {
    background-color: #007bff;
    color: white;
    border-color: #007bff;
}

.custom-location-section {
    border-top: 1px solid #eee;
    padding-top: 1rem;
}

.custom-location-section input {
    width: 100%;
    padding: 0.5rem;
    margin: 0.5rem 0;
    border: 1px solid #ddd;
    border-radius: 0.25rem;
}

.custom-location-section button {
    padding: 0.5rem 1rem;
    background-color: #28a745;
    color: white;
    border: none;
    border-radius: 0.25rem;
    cursor: pointer;
}

.custom-location-section button:hover {
    background-color: #1e7e34;
}

/* Category picker for new tags in timeline editor */
.category-picker-options {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 12px 0;
}
.category-picker-options button {
    padding: 8px 16px;
    border-radius: 20px;
    border: 2px solid #e0e0e0;
    background: white;
    font-size: 0.9rem;
    cursor: pointer;
    transition: all 0.2s;
}
.category-picker-options button:hover {
    border-color: #e99821;
    background: #fff3e0;
    color: #e99821;
}

/* Edit location button on detail page */
.edit-location-btn {
    background: none;
    border: none;
    cursor: pointer;
    font-size: 0.8rem;
    margin-left: 0.5rem;
    opacity: 0.7;
    transition: opacity 0.2s;
}

.edit-location-btn:hover {
    opacity: 1;
}
/* ===== 2026-07-02 (Greg card-invite bugs) ===== */
/* The typeahead results box inherits a page-level `min-height: 11em`,
   inflating the invite dialog with ~260px of dead space and pushing the
   Send/Cancel row below the dialog fold (scrollbars are invisible on Mac,
   so the dialog looked like it had no Send button). Inside dialogs the
   results box should only take the space it needs. */
.dialog .results { min-height: 0; }
/* Keep the action row (Send/Cancel) pinned and visible while the rest of
   the dialog scrolls. */
.dialog > .content-panel.right,
.dialog .content-panel.right {
    position: sticky;
    bottom: 0;
    background: #ffffff;
    z-index: 2;
    padding-top: 0.4rem;
}

/* ---- Discover r4 (Greg 2026-07-11): filter usability, ALL dialogs ----
   (a) Apply row drifted out of view: .spread now sticks to the dialog's
       bottom edge while content scrolls under it.
   (b) scroll sometimes dead on touch: scroll container gets explicit
       touch scrolling + containment. */
.dialog .content-panel .content-panel{
    -webkit-overflow-scrolling:touch;
    touch-action:pan-y;
    overscroll-behavior:contain;
}
.dialog .spread{
    position:sticky;
    bottom:0;
    background:#fff;
    z-index:6;
    padding:8px 4px;
    margin-top:8px;
    box-shadow:0 -4px 12px rgba(0,0,0,.08);
}

/* ---- Choose Destination v2 (Discover r5) ---- */
.geo-picker-body.v2 .geo-picker-current{font-size:.9rem;margin-bottom:6px}
.geo-picker-body.v2 .geo-picker-useme{width:100%}
.geo-picker-body.v2 .geo-picker-or{text-align:center;color:#8a8374;font-size:.8rem;margin:8px 0 6px}
.geo-picker-recent-label{font-size:.7rem;letter-spacing:.05em;text-transform:uppercase;color:#8a8374;margin:10px 0 4px}
.geo-picker-list.chips{display:flex;flex-wrap:wrap;gap:6px;max-height:130px;overflow-y:auto}
.geo-picker-list.chips .location-list-item{display:inline-flex;align-items:center;width:auto;border:1.5px solid #cfc9bc;border-radius:8px;background:#fff;padding:4px 10px;font-size:.8rem;cursor:pointer}
.geo-picker-list.chips .location-list-item.selected{border-color:#e99821;background:#fdf6ec;font-weight:600}
.geo-dev-coords{width:100%;font-size:.72rem;color:#8a8374}
.geo-dev-coords summary{cursor:pointer;padding:2px 0}
.geo-dev-coords .location-list-item{opacity:.75;margin:3px 4px 0 0}
.dialog .action-item.primary-orange{background:#e99821 !important;border-color:#e99821 !important}
.dialog .action-item.primary-orange *{color:#fff !important}
/* r5b (Greg): map shorter so Set Destination stops floating over it;
   Recent box collapses to content height */
.geo-picker-body.v2 .geo-picker-map{height:230px !important}
.geo-picker-body.v2{padding-bottom:6px}
.geo-picker-list.chips{height:auto !important;min-height:0 !important}
/* l8 ROOT CAUSE (5-round hunt): main.css desktop media query grids
   .geo-picker-body for the OLD markup — v2's children fall into
   collapsed tracks (results render at ZERO HEIGHT, desktop only;
   phone-width harness never triggered the query). Opt v2 out. */
.geo-picker-body.v2{display:flex !important;flex-direction:column !important}
.geo-picker-body.v2 .geo-picker-search-results{max-height:220px !important;overflow-y:auto !important;height:auto !important}
.geo-picker-body.v2 .geo-picker-search-result{display:block !important;height:auto !important;color:#23201b !important}
/* l13: Choose Destination is ALWAYS a centered fixed card — immune to
   legacy side-sheet/right-anchored dialog modes that broke Leaflet init */
.dialog.gp-dest-dialog{position:fixed !important;left:50% !important;top:2vh !important;right:auto !important;bottom:auto !important;transform:translateX(-50%) !important;margin:0 !important;width:min(560px,94vw) !important;max-height:96dvh !important}

/* ── Round 6: inline destination header in category filters (d6) ── */
.flt-dest{ border:1.5px solid #e99821; border-radius:12px; padding:10px 12px;
  background:#f6efdf; margin-bottom:4px; }
.flt-dest .fd-row1{ display:flex; align-items:center; gap:4px; width:100%;
  font-size:.98rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.flt-dest .fd-row1 b{ font-weight:700; overflow:hidden; text-overflow:ellipsis; }
.flt-dest .fd-subrow{ display:flex; align-items:center; gap:8px; margin:2px 0 0 26px; }
.flt-dest .fd-sub{ color:#b06f10; font-size:.68rem; line-height:1.1; }
.flt-dest .fd-subrow .dev-wrap{ margin-left:0; }
.flt-dest .fd-orpick2{ color:#7a7263; font-size:.8rem; margin-top:14px; }
.flt-dest .fd-row3{ display:flex; margin-top:8px; }
.flt-dest .fd-row3 input{ flex:1; min-width:0; border:1.5px solid #cfc9bc; border-radius:10px;
  padding:8px 12px; font-size:.95rem; background:#fff; color:#1d1a14; }
/* Round 6b order: input → View map directly under → space → full-width Select */
.flt-dest .fd-maplink{ margin-top:6px; font-size:.8rem; color:#2f6fed; font-weight:600;
  cursor:pointer; user-select:none; }
.flt-dest .fd-select{ display:block; width:100%; margin-top:16px; background:#2f6fed; color:#fff;
  border:none; border-radius:10px; padding:9px 16px; font-weight:600; font-size:.95rem; cursor:pointer; }
.flt-dest .fd-mapwrap{ margin-top:8px; border-radius:10px; overflow:hidden;
  border:1px solid #ddd5c2; }
.flt-dest .fd-mapwrap[hidden]{ display:none !important; }
.flt-dest #flt-map{ height:150px; width:100%; }
.flt-dest .fd-mapfoot{ background:#fdf9ef; text-align:center; font-weight:700;
  font-size:.85rem; padding:6px; color:#1d1a14; }
/* the old two-line location row is fully replaced by .flt-dest */

/* ── Eat & Drink filter (Greg 7/20, blessed mock 52be2c2f) ────────────── */
/* Ghosted pill: exists in the layout (designed slot) but not tappable —
   Clubs has 5 rows in the DB; it lights up when club data arrives. */
/* Eat & Drink stacked layout (Greg 7/20 screenshot: sections were flowing
   side-by-side — 'Show me' next to 'Price Level', 'Minimum Rating:Search:'
   jammed on one line — and reshuffled whenever a lane revealed its rows).
   One vertical column, every section full-width, captions centred: dest →
   Show me (+ lane refinements) → Price → Rating → Search. Reuses the
   things-to-do-fullscreen structure (grouped selectors above). */
.dialog.eat-drink-fullscreen .ed-lane,
.dialog.eat-drink-fullscreen .ed-food-filters > label,
.dialog.eat-drink-fullscreen .ed-drinks-filters > label,
.dialog.eat-drink-fullscreen .price-level,
.dialog.eat-drink-fullscreen .rating-filter,
.dialog.eat-drink-fullscreen .search-text {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    width: 100%;
    gap: 0.25rem;
    text-align: center;
}
.dialog.eat-drink-fullscreen .choice-set {
    justify-content: center;
}
.dialog.eat-drink-fullscreen .search-text .input-set,
.dialog.eat-drink-fullscreen .search-text input,
.dialog.eat-drink-fullscreen .rating-filter select,
.dialog.eat-drink-fullscreen .rating-filter .select {
    width: 100%;
}
/* refinement blocks sit tight under their lane row */
.dialog.eat-drink-fullscreen .ed-food-filters > label,
.dialog.eat-drink-fullscreen .ed-drinks-filters > label {
    margin-top: 0.75rem;
}

.dialog .choice.ed-ghost {
    opacity: .3;
    pointer-events: none;
}
/* Lane refinement blocks collapse fully when hidden. */
.dialog .ed-food-filters.hidden,
.dialog .ed-drinks-filters.hidden {
    display: none;
}
