/* Generated by tools/scope-css.py from assets/src/ — edit the source, then run it again. */

/* The theme's element styles stop at the page: everything under the root is
   back to the browser's defaults, and the page's own rules (below, one class
   heavier) build from there — as on my.salmingwatches.com. Two classes here,
   so it outranks Nectar's input[type=text] (one class + one element). */
/* Not SVG: `revert` also drops presentation attributes (stroke, fill), which
   count as author styles — the tick in the booked card went blank. */
.salming-pv-root.salming-pv-root :where(*:not(svg, svg *), *:not(svg, svg *)::before, *:not(svg, svg *)::after) { all: revert; }
.salming-pv-root {
    display: block; width: 100%;
    /* The browser's body text, as the page had it — not Nectar's 30px lines. */
    font-size: 16px; line-height: normal; letter-spacing: normal; text-transform: none;
}
/* Nectar paints submit buttons in its accent colour, radius !important. */
.salming-pv-root .salming-pv__submit { background-color: var(--ink) !important; border-radius: 14px !important; }
.salming-pv-root .salming-pv__submit:hover { background-color: var(--hover-ink) !important; }
/* Nectar's spacer for its own (removed) nav: the page's dark hero starts at the top. */
body.salming-pv #nectar-nav-spacer { display: none; }

/* Ported from salming-admin resources/views/visit/partials/page-styles.blade.php — keep the two in step until the my. pages are retired (plan step 8). */
.salming-pv {
        --ink: #0a0a0a;
        --paper: #ffffff;
        --mist: #f4f4f2;
        --line: #e3e2de;
        --field-line: #dcdbd6;
        --muted: #5b5a56;
        --muted-dark: #b3b2ad;
        /* Dashed frames on light grounds — a line, not text, so it keeps the
           value the text greys had before they were raised. */
        --frame-dashed: #8a8985;
        --picked: #e4e1d8;
        --soft: #b3b2ad;
        --pale: #d8d7d2;
        --body: #3d3c39;
        --hairline-dark: #262624;
        --claimed-bg: #eceae7;
        --claimed-dot: #c8c7c2;
        --hold-bg: #f6f1e6;
        --hold-line: #e8e0cd;
        --error: #8a2f23;
        --error-on-dark: #f0b9b0;
        --hover-ink: #2c2c2a;
        /* The black the hero photographs are shot on — measured at the edges
           of the cover, #000 to #010101. --ink is a shade lighter, and beside
           the photo that shade showed as a faint seam. */
        --photo-black: #000000;
        --gutter: 40px;

        margin: 0;
        /* The brand's typeface, not the handoff's Helvetica stand-in — the
           handoff itself says the live site should use its own grotesk, and
           that is TWKLausanne (partials/brand-fonts). Weight 200 is the brand's
           default, as on the buy page; headings asking for 500 resolve to the
           400 file, which is what the buy page's headings look like too. */
        font-family: 'TWKLausanne', system-ui, -apple-system, "Segoe UI", sans-serif;
        font-weight: 200;
        color: var(--ink);
        background: var(--paper);
        -webkit-font-smoothing: antialiased;
    }

    .salming-pv .salming-pv-root *, .salming-pv .salming-pv-root *::before, .salming-pv .salming-pv-root *::after { box-sizing: border-box; }
    .salming-pv .salming-pv-root a { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; }
    .salming-pv .salming-pv-root a:hover { color: var(--muted); }
    .salming-pv .salming-pv-root input, .salming-pv .salming-pv-root select, .salming-pv .salming-pv-root textarea, .salming-pv .salming-pv-root button { font-family: inherit; }
    .salming-pv .salming-pv-root input:focus, .salming-pv .salming-pv-root select:focus, .salming-pv .salming-pv-root textarea:focus { outline: none; border-color: var(--ink); }
    /* Lighter than any real text, so an example never reads as filled in.
       It followed --muted, and when that was darkened for contrast the
       placeholders came along and looked like answers. */
    .salming-pv .salming-pv-root ::placeholder { color: var(--soft); opacity: 1; }

    /* Every interactive target clears 44px, including the small ones. */
    .salming-pv .salming-pv-root button { min-height: 44px; }

    /*
     * The hidden attribute has to win, and !important is why it does.
     *
     * Any author `display` beats the user agent's [hidden] { display: none } —
     * so .salming-pv__done { display: grid } left the confirmation panel on
     * screen from first paint, above a form nobody had submitted. The component
     * rules that set display come after this one, hence the !important.
     *
     * visit/partials/styles.blade.php carries the same rule for the same
     * reason, and VisitPageTest reads both as text: nothing in PHP can catch
     * this.
     */
    .salming-pv .salming-pv-root [hidden] { display: none !important; }

    /*
     * The booking form's choices are real form fields — radio buttons for the
     * time and the party size — so the page books without script. The radio
     * itself is hidden from sight, never from the keyboard or a screen reader;
     * the card beside it is what shows, and the selectors below key the card
     * off the radio (:checked, :focus-visible, :disabled). .is-on stays for
     * the venue and day cards, which are links and buttons, not fields.
     */
    /* :where() keeps the reset at the weight of one class, so a fieldset that
       is also a .salming-pv__field still gets that rule's spacing. */
    .salming-pv .salming-pv-root :where(fieldset) { border: 0; margin: 0; padding: 0; min-width: 0; }
    .salming-pv .salming-pv-root :where(legend) { padding: 0; }
    .salming-pv-root .salming-pv__pick { position: relative; display: block; min-width: 0; }
    .salming-pv-root .salming-pv__radio, .salming-pv-root .salming-pv__visually-hidden {
        position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
        overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
    }
    .salming-pv-root .salming-pv__radio:focus-visible + span { outline: 2px solid var(--ink); outline-offset: 3px; }

    .salming-pv-root .salming-pv__pad { padding-left: var(--gutter); padding-right: var(--gutter); }
    .salming-pv-root .salming-pv__wrap { max-width: 1240px; margin: 0 auto; width: 100%; }
    .salming-pv-root .salming-pv__dark { background: var(--ink); color: var(--paper); }
    /* 12px at weight 400, not 11px at the brand's 200: spaced capitals that
       small and that thin broke up into grey dots on a phone, and on black
       the hero's "Private viewing" — the line saying what the page is — was
       the hardest thing on it to read (2026-09-30). */
    .salming-pv-root .salming-pv__eyebrow {
        font-size: 12px; font-weight: 400; letter-spacing: 0.24em; text-transform: uppercase;
        color: var(--muted-dark); margin: 0 0 26px;
    }
    .salming-pv-root .salming-pv__dark .salming-pv__eyebrow { color: var(--soft); }
    .salming-pv-root .salming-pv__light .salming-pv__eyebrow { color: var(--muted); }

    /* ---------- Hero ---------- */
    .salming-pv-root .salming-pv__hero { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); align-items: stretch; background: var(--photo-black); }
    /* Top padding clears the floating brand header (its offset plus the
       wordmark), the way the buy page's hero content does. */
    .salming-pv-root .salming-pv__hero-copy { min-width: 0; padding: clamp(120px, 14vw, 176px) var(--gutter) 88px; max-width: 700px; margin-left: auto; width: 100%; }
    .salming-pv-root .salming-pv__h1 {
        font-size: clamp(56px, 9vw, 116px); line-height: 0.9; letter-spacing: -0.04em;
        font-weight: 500; margin: 0 0 28px;
    }
    .salming-pv-root .salming-pv__lead {
        font-size: 20px; line-height: 1.5; color: var(--pale); margin: 0 0 40px;
        max-width: 44ch; text-wrap: pretty;
    }
    .salming-pv-root .salming-pv__facts {
        display: grid; grid-template-columns: 150px minmax(0, 1fr);
        row-gap: 12px; column-gap: 16px; margin: 0; font-size: 15px;
    }
    .salming-pv-root .salming-pv__facts dt { color: var(--muted-dark); }
    .salming-pv-root .salming-pv__facts dd { margin: 0; }
    /* One venue per line. */
    .salming-pv-root .salming-pv__facts-line { display: block; }
    /* Where a jump to #book lands — the watch, the floating button, a post
       that comes back with errors. The root's scroll-padding-top (brand-header-
       styles) stops a jump short by the bar's height, and here that left a
       strip of the black tour rail behind the transparent bar, its city names
       running through the wordmark. Cancelled for this one target: the
       section's top meets the viewport's, the bar sits on the light ground and
       turns black, and the section's own top padding clears the heading —
       which is why that padding is taller on a desktop, where the wordmark is. */
    .salming-pv-root .salming-pv__book { scroll-margin-top: -96px; }
    .salming-pv-root .salming-pv__booking { padding: 120px 0 96px; }
    .salming-pv-root .salming-pv__hero-img { display: block; min-width: 0; position: relative; min-height: 480px; }
    .salming-pv-root .salming-pv__hero-img img.salming-pv__cover {
        position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block;
    }
    .salming-pv-root .salming-pv__stamp { position: absolute; left: 32px; bottom: 32px; width: 132px; height: auto; display: block; }

    /* ---------- Tour rail ---------- */
    .salming-pv-root .salming-pv__rail {
        border-top: 1px solid var(--hairline-dark); padding: 22px var(--gutter);
        display: flex; align-items: center; gap: 32px; min-width: 0;
    }
    .salming-pv-root .salming-pv__rail-label { flex: none; font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--muted-dark); }
    /* One row that scrolls sideways when the tour outgrows the width. The fade
       on the right edge says there is more; the padding lets the last city
       scroll clear of it. */
    .salming-pv-root .salming-pv__rail-stops {
        display: flex; gap: 28px; min-width: 0; overflow-x: auto; scroll-snap-type: x proximity;
        scrollbar-width: none; -webkit-overflow-scrolling: touch;
        -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 40px), transparent);
        mask-image: linear-gradient(to right, #000 calc(100% - 40px), transparent);
        padding-right: 40px;
    }
    .salming-pv-root .salming-pv__rail-stops::-webkit-scrollbar { display: none; }
    .salming-pv-root .salming-pv__rail-stop {
        flex: none; display: flex; flex-direction: column; align-items: flex-start; gap: 4px;
        scroll-snap-align: start; white-space: nowrap;
    }
    .salming-pv-root .salming-pv__rail-name { font-size: 15px; }
    .salming-pv-root .salming-pv__rail-date { font-size: 12px; color: var(--muted-dark); min-height: 1em; }
    .salming-pv-root .salming-pv__rail-here { color: var(--paper); }
    .salming-pv-root .salming-pv__badge {
        font-size: 9px; letter-spacing: 0.16em; text-transform: uppercase; line-height: 1;
        border: 1px solid var(--paper); border-radius: 20px; padding: 3px 8px;
    }
    /* Two copies of one rail (visit/partials/rail): the hero's on a wide
       screen, the one below the booking on a phone. */
    .salming-pv-root .salming-pv__rail-band { display: none; }
    .salming-pv-root .salming-pv__rail-band .salming-pv__rail { border-top: 0; padding-top: 32px; padding-bottom: 32px; }
    .salming-pv-root .salming-pv__rail a { color: var(--pale); text-decoration: none; }
    .salming-pv-root .salming-pv__rail a:hover { color: var(--paper); }

    /* ---------- Booking section ---------- */
    .salming-pv-root .salming-pv__book { background: var(--mist); border-top: 1px solid var(--line); }
    .salming-pv-root .salming-pv__book-inner { max-width: 1240px; margin: 0 auto; padding: 0 var(--gutter) 88px; }
    .salming-pv-root .salming-pv__h2 {
        font-size: clamp(30px, 3.6vw, 40px); line-height: 1.05; letter-spacing: -0.02em;
        font-weight: 500; margin: 0 0 10px;
    }
    .salming-pv-root .salming-pv__sub { font-size: 15px; color: var(--muted); margin: 0 0 36px; }

    .salming-pv-root .salming-pv__venues { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 14px; }
    .salming-pv-root .salming-pv__venue {
        text-align: left; flex: 1 1 260px; border-radius: 16px; padding: 24px 26px;
        cursor: pointer; transition: all .15s ease;
        background: var(--paper); color: var(--ink); border: 1px solid var(--ink);
    }
    /* A link now (each venue is its own page), drawn as the card it was. */
    .salming-pv .salming-pv-root a.salming-pv__venue, .salming-pv .salming-pv-root a.salming-pv__venue:hover { display: block; color: var(--ink); text-decoration: none; }

    .salming-pv-root .salming-pv__venue-window { display: block; font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; opacity: .6; margin-bottom: 14px; }
    .salming-pv-root .salming-pv__venue-name { display: block; font-size: 21px; letter-spacing: -0.01em; margin-bottom: 4px; }
    .salming-pv-root .salming-pv__venue-room { display: block; font-size: 15px; opacity: .7; }
    .salming-pv-root .salming-pv__venue-blurb { display: block; font-size: 14px; line-height: 1.5; opacity: .7; margin-top: 14px; }
    .salming-pv-root .salming-pv__venue-count { display: block; font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; opacity: .55; margin-top: 16px; }
    .salming-pv-root .salming-pv__venues-note { font-size: 14px; color: var(--muted); margin: 0 0 24px; }

    .salming-pv-root .salming-pv__days { margin-bottom: 36px; }
    .salming-pv-root .salming-pv__daytabs { display: flex; flex-wrap: wrap; gap: 10px; }
    /* Without script every day is listed, each under its own heading. With it
       they collapse into the day cards above, and the headings go. */
    .salming-pv-root .salming-pv__dayset + .salming-pv__dayset { margin-top: 32px; }
    .salming-pv-root .salming-pv__daylegend { font-size: 17px; margin: 0 0 14px; }
    .salming-pv-root .is-enhanced .salming-pv__daylegend { display: none; }
    .salming-pv-root .salming-pv__day {
        text-align: left; min-width: 168px; border-radius: 16px; padding: 18px 22px;
        cursor: pointer; transition: all .15s ease;
        background: var(--paper); color: var(--ink); border: 1px solid var(--ink);
    }

    .salming-pv-root .salming-pv__oneday { margin: 0; font-size: 17px; }
    .salming-pv-root .salming-pv__day-weekday { display: block; font-size: 15px; margin-bottom: 4px; }
    .salming-pv-root .salming-pv__day-date { display: block; font-size: 13px; opacity: .6; }
    .salming-pv-root .salming-pv__day-count { display: block; font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; margin-top: 12px; opacity: .55; }

    .salming-pv-root .salming-pv__slots { display: grid; grid-template-columns: repeat(auto-fill, minmax(88px, 1fr)); gap: 8px; }
    .salming-pv-root .salming-pv__slot {
        display: block; text-align: center; line-height: normal; min-height: 44px;
        border-radius: 12px; padding: 15px 8px; font-size: 15px; letter-spacing: 0.01em;
        transition: all .12s ease; cursor: pointer;
        background: var(--paper); color: var(--ink); border: 1px solid var(--ink);
    }
    /* A run of times nobody can have, said once across the row instead of a
       block of struck-out buttons to scroll past. */
    .salming-pv-root .salming-pv__slot-run {
        grid-column: 1 / -1; margin: 0; padding: 12px 14px; font-size: 14px; color: var(--muted);
        border: 1px dashed var(--line); border-radius: 12px; text-align: center;
    }
    .salming-pv-root .salming-pv__slot.is-on, .salming-pv-root .salming-pv__radio:checked + .salming-pv__slot { background: var(--ink); color: var(--paper); }
    .salming-pv-root .salming-pv__radio:disabled + .salming-pv__slot, .salming-pv-root .salming-pv__slot.is-taken {
        background: transparent; color: var(--muted); border: 1px dashed var(--soft);
        cursor: not-allowed; text-decoration: line-through;
    }

    .salming-pv-root .salming-pv__notice {
        margin-top: 32px; padding: 22px 26px; border-radius: 16px;
        font-size: 15px; line-height: 1.5; max-width: 860px;
        background: var(--hold-bg); color: var(--body); border: 1px solid var(--hold-line);
    }
    .salming-pv-root .salming-pv__notice.is-holding { background: var(--ink); color: var(--paper); border-color: var(--ink); }
    .salming-pv-root .salming-pv__notice.is-bad { background: var(--paper); color: var(--error); border: 1.5px solid var(--error); }
    /* What happened to a post the page came back from: a lost race, or a form
       that needs another look. First thing in the booking section. */
    .salming-pv-root .salming-pv__alert {
        margin: 0 0 40px; padding: 22px 26px; border-radius: 16px; max-width: 860px;
        font-size: 15px; line-height: 1.5; outline: none;
        background: var(--paper); color: var(--error); border: 1.5px solid var(--error);
    }

    .salming-pv-root .salming-pv__fallback {
        display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
        gap: 18px; margin-top: 14px; padding: 22px 26px;
        border: 1px dashed var(--frame-dashed); border-radius: 16px; max-width: 860px;
        position: relative; transition: background .15s ease, border-color .15s ease;
    }
    .salming-pv-root .salming-pv__fallback p { font-size: 15px; line-height: 1.5; color: var(--body); margin: 0; max-width: 46ch; text-wrap: pretty; }
    .salming-pv-root .salming-pv__fallback a { font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; white-space: nowrap; }
    /* The whole box is the link: it looks like a card, so it is pressed like
       one. Still ONE link in the markup — the "Contact us" text — whose hit
       area is stretched over the box, so a screen reader hears what it did. */
    .salming-pv-root .salming-pv__fallback a::after { content: ''; position: absolute; inset: 0; border-radius: inherit; }
    .salming-pv-root .salming-pv__fallback:hover { background: var(--paper); border-color: var(--ink); }
    .salming-pv-root .salming-pv__fallback:has(a:focus-visible) { outline: 2px solid var(--ink); outline-offset: 2px; }

    .salming-pv-root .salming-pv__rule { border: 0; border-top: 1px solid var(--line); margin: 64px 0 56px; }
    .salming-pv-root .salming-pv__details-h2 { margin-bottom: 36px; }

    /* ---------- Form ---------- */
    .salming-pv-root .salming-pv__form { max-width: 860px; }
    .salming-pv-root .salming-pv__pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; }
    .salming-pv-root .salming-pv__field { display: block; margin-top: 20px; }
    .salming-pv-root .salming-pv__field:first-child { margin-top: 0; }
    .salming-pv-root .salming-pv__grouplabel { display: block; font-size: 13px; letter-spacing: 0.02em; color: var(--muted); margin-bottom: 10px; }
    .salming-pv-root .salming-pv__input {
        width: 100%; background: var(--paper); border: 1px solid var(--ink); border-radius: 14px;
        padding: 21px 24px; font-size: 17px; color: var(--ink);
    }
    .salming-pv-root .salming-pv__input.is-bad { border: 1.5px solid var(--error); }
    .salming-pv-root .salming-pv__err { display: none; font-size: 14px; line-height: 1.45; color: var(--error); margin-top: 8px; }
    .salming-pv-root .salming-pv__err.is-shown { display: block; }
    .salming-pv-root .salming-pv__help { font-size: 14px; color: var(--muted); margin: 10px 0 0; }
    /* The bordered box comes from .salming-pv__input; the partial owns the
       flex structure and strips the controls' own chrome. This only gives the
       two halves the same inner padding as every other field, so the number
       sits on the same line as the email above it. Specific enough to beat the
       partial's structural rule, which is its point. */
    .salming-pv-root .salming-pv__phone[data-phone-group] select[data-phone-country], .salming-pv-root .salming-pv__phone[data-phone-group] input[data-phone-combo], .salming-pv-root .salming-pv__phone[data-phone-group] input[data-phone-input] { padding: 21px 24px; font-size: 17px; }
    .salming-pv-root .salming-pv__phone[data-phone-group] select[data-phone-country], .salming-pv-root .salming-pv__phone[data-phone-group] input[data-phone-combo] { padding-right: 16px; border-right-color: var(--field-line); }
    .salming-pv-root textarea.salming-pv__input { line-height: 1.5; resize: vertical; }

    .salming-pv-root .salming-pv__toggles { display: flex; gap: 8px; }
    .salming-pv-root .salming-pv__toggle {
        display: block; line-height: normal; min-height: 44px;
        /* 38px each side, picked or not: room for the corner tick without
           the text under it, and no change of width when it appears. */
        border-radius: 14px; padding: 16px 38px; font-size: 16px; cursor: pointer;
        transition: all .12s ease; background: var(--paper); color: var(--ink); border: 1px solid var(--ink);
    }
    /* The picked card: warm fill, a 2px frame, and a tick in the corner. */
    .salming-pv .salming-pv-root .salming-pv__venue.is-on, .salming-pv .salming-pv-root .salming-pv__venue.is-on:hover, .salming-pv-root .salming-pv__day.is-on, .salming-pv-root .salming-pv__toggle.is-on, .salming-pv-root .salming-pv__radio:checked + .salming-pv__toggle {
        background: var(--picked); color: var(--ink); box-shadow: inset 0 0 0 2px var(--ink); position: relative;
    }
    .salming-pv-root .salming-pv__venue.is-on::after, .salming-pv-root .salming-pv__day.is-on::after, .salming-pv-root .salming-pv__radio:checked + .salming-pv__toggle::after {
        content: ''; position: absolute; top: 8px; right: 8px; width: 18px; height: 18px; border-radius: 50%;
        background: var(--ink) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 12.5l4 4L18 8.5' fill='none' stroke='%23fff' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 14px no-repeat;
    }
    /* The companion's details, only for a party of two. CSS rather than the
       script, so the card does not flash in and out as the page loads — and a
       browser without :has simply shows it, which the server tolerates: it
       ignores a companion on a party of one. */
    .salming-pv-root .salming-pv__guests:has(.salming-pv__radio[value="1"]:checked) .salming-pv__companion { display: none; }

    /* "When could you come?" sits above the name pair, which was written as
       the form's first child and has no margin of its own — so the gap
       belongs to the question, which is what moved. */
    .salming-pv-root .salming-pv__when { margin-bottom: 40px; }
    .salming-pv-root .salming-pv__note { font-size: 13px; color: var(--muted); margin: 10px 0 0; max-width: 60ch; }

    .salming-pv-root .salming-pv__card {
        background: var(--paper); border: 1px solid var(--line); border-radius: 16px;
        padding: 28px; margin-top: 24px;
    }
    .salming-pv-root .salming-pv__card-eyebrow { font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted); margin-bottom: 18px; }

    /* ---------- Number picker ---------- */
    .salming-pv-root .salming-pv__numhead { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px 20px; margin-bottom: 6px; }
    .salming-pv-root .salming-pv__numhead span { font-size: 13px; color: var(--muted); }
    .salming-pv-root .salming-pv__numrow { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 12px; }
    /* No number: plain words beside the link, not a dashed box that looked
       like neither a button nor a status. A chosen number is the filled chip. */
    .salming-pv-root .salming-pv__chip {
        display: inline-block; padding: 11px 0; font-size: 15px;
        background: transparent; color: var(--muted); border: 0;
    }
    .salming-pv-root .salming-pv__chip.is-on { border-radius: 12px; padding: 11px 18px; }
    .salming-pv-root .salming-pv__chip.is-on { background: var(--ink); color: var(--paper); border: 1px solid var(--ink); }
    .salming-pv-root .salming-pv__textbtn {
        background: none; border: 0; padding: 0; font-size: 14px; color: var(--ink);
        cursor: pointer; text-decoration: underline; text-underline-offset: 4px; min-height: 0;
    }
    .salming-pv-root .salming-pv__numpanel {
        margin-top: 16px; padding: 22px 24px; background: var(--paper);
        border: 1px solid var(--line); border-radius: 16px;
    }
    .salming-pv-root .salming-pv__legend {
        display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
        gap: 16px; margin-bottom: 18px;
    }
    /*
       The number picker, in the buy page's visual language.

       The buy page (/reserve) already had a picker — square cells, the dice
       to reroll, a number typed on an underline rather than into a box — and
       this page invented a second look for the same thing. These rules copy
       its values rather than share its stylesheet: that stylesheet is a
       verbatim WordPress port scoped to .salming-picker, and the buy page is
       deliberately left untouched. Values to keep in step with, in
       reserve/partials/styles.blade.php: .salming-dot, .salming-cell,
       .salming-picker__reroll-icon, .salming-picker__number-input.

       One deliberate difference: the typed number is smaller. On the buy page
       the number is the whole point; here it is one optional question in a
       form, and must not outshout it.
    */
    .salming-pv-root .salming-pv__keys { display: flex; flex-wrap: wrap; gap: 18px; font-size: 10px; font-weight: 400; letter-spacing: 2px; text-transform: uppercase; color: var(--muted); }
    .salming-pv-root .salming-pv__keys span { display: inline-flex; align-items: center; gap: 10px; }
    .salming-pv-root .salming-pv__dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
    .salming-pv-root .salming-pv__dot--mine { background: #000; }
    .salming-pv-root .salming-pv__dot--free { background: transparent; border: 1.5px solid #000; }
    .salming-pv-root .salming-pv__dot--gone { background: #B0B0B0; }

    .salming-pv-root .salming-pv__dice {
        flex-shrink: 0; width: 38px; height: 38px; padding: 0;
        display: inline-flex; align-items: center; justify-content: center;
        background: transparent; border: 1px solid rgba(0, 0, 0, 0.34); border-radius: 6px;
        color: #000; cursor: pointer;
        transition: background-color 180ms ease, color 180ms ease, border-color 180ms ease;
    }
    .salming-pv-root .salming-pv__dice:focus-visible { outline: 2px solid #000; outline-offset: 3px; }
    .salming-pv-root .salming-pv__dice.is-spinning svg { animation: salming-pv-shuffle 450ms ease-out; }
    @keyframes salming-pv-shuffle {
        0% { transform: scale(1); opacity: 1; }
        35% { transform: scale(0.78); opacity: 0.5; }
        100% { transform: scale(1); opacity: 1; }
    }
    @media (hover: hover) and (pointer: fine) {
        .salming-pv-root .salming-pv__dice:hover { background: #000; color: #fff; border-color: #000; }
    }

    .salming-pv-root .salming-pv__numfree {
        display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px 20px;
        padding-bottom: 20px; margin-bottom: 20px; border-bottom: 1px solid var(--line);
    }
    .salming-pv-root .salming-pv__numfree label { display: flex; align-items: flex-end; gap: 16px; }
    .salming-pv-root .salming-pv__numfree label span { font-size: 14px; color: var(--muted); white-space: nowrap; padding-bottom: 8px; }
    .salming-pv-root .salming-pv__numinput {
        font-family: inherit; font-weight: 400; font-size: 40px; line-height: 1;
        letter-spacing: -0.04em; font-variant-numeric: tabular-nums; color: #000;
        width: 4.5ch; margin: 0; padding: 0 0 0.05em;
        background: transparent; border: 0; border-bottom: 2px solid #000; border-radius: 0;
        box-shadow: none; outline: none; caret-color: #000;
        appearance: textfield; -moz-appearance: textfield;
    }
    .salming-pv-root .salming-pv__numinput::placeholder { color: #B0B0B0; }
    .salming-pv-root .salming-pv__numinput:focus-visible { border-bottom-color: #000; box-shadow: 0 2px 0 0 #000; }
    .salming-pv-root .salming-pv__numstatus { font-size: 12px; font-weight: 400; letter-spacing: 1.5px; text-transform: uppercase; color: var(--muted); padding-bottom: 8px; }
    .salming-pv-root .salming-pv__numstatus.is-ok { color: #000; }
    .salming-pv-root .salming-pv__numstatus.is-bad { color: var(--error); }
    .salming-pv-root .salming-pv__numerr { margin: -12px 0 16px; }

    .salming-pv-root .salming-pv__numbers { display: grid; grid-template-columns: repeat(10, minmax(0, 1fr)); gap: 8px; }
    .salming-pv-root .salming-pv__tile {
        aspect-ratio: 1 / 1; border-radius: 10px; padding: 0;
        display: flex; align-items: center; justify-content: center;
        font-family: inherit; font-size: clamp(13px, 1.2vw, 16px); font-weight: 400; font-variant-numeric: tabular-nums;
        background: #fff; color: #000; border: 1px solid rgba(0, 0, 0, 0.34);
        cursor: pointer; transition: background-color 150ms ease, color 150ms ease;
    }
    .salming-pv-root .salming-pv__tile.is-on { background: #000; color: #fff; border-color: #000; }
    .salming-pv-root .salming-pv__tile.is-gone { background: #F1F1F1; color: #B0B0B0; border-color: transparent; cursor: not-allowed; }
    @media (hover: hover) and (pointer: fine) {
        .salming-pv-root .salming-pv__tile:hover:not([disabled]):not(.is-gone) { background: #000; color: #fff; }
    }
    .salming-pv-root .salming-pv__footnote { font-size: 13px; line-height: 1.55; color: var(--muted); margin: 18px 0 0; max-width: 62ch; text-wrap: pretty; }

    /* ---------- Consents and submit ---------- */
    .salming-pv-root .salming-pv__consents { display: grid; gap: 16px; margin-top: 28px; }
    .salming-pv-root .salming-pv__consent { display: flex; align-items: flex-start; gap: 13px; font-size: 15px; line-height: 1.5; color: var(--body); cursor: pointer; }
    .salming-pv-root .salming-pv__consent input { margin: 2px 0 0; width: 18px; height: 18px; accent-color: var(--ink); flex: none; }
    .salming-pv-root .salming-pv__submit {
        background: var(--ink); color: var(--paper); border: 1px solid var(--ink); border-radius: 14px;
        padding: 21px 38px; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
        cursor: pointer; margin-top: 40px;
    }
    .salming-pv-root .salming-pv__submit:hover { background: var(--hover-ink); border-color: var(--hover-ink); }
    .salming-pv-root .salming-pv__submit[disabled] { opacity: .55; cursor: default; }

    /* ---------- The optional step ---------- */
    .salming-pv-root .salming-pv__extras { margin-top: 36px; scroll-margin-top: 96px; }
    .salming-pv-root .salming-pv__extras-head { margin-bottom: 8px; }
    /* The booking, confirmed — the receipt's own shape (white, inked frame),
       so it reads as done before anything else on the screen. */
    .salming-pv-root .salming-pv__booked {
        display: grid; grid-template-columns: auto minmax(0, 1fr) minmax(0, 1fr); gap: 18px 28px; align-items: start;
        background: var(--paper); border: 1px solid var(--ink); border-radius: 16px; padding: 26px 28px;
    }
    /* The right column: where, and — for a booking — calendar and change. */
    .salming-pv-root .salming-pv__booked-side { display: grid; gap: 10px; padding-left: 28px; border-left: 1px solid var(--line); }
    .salming-pv-root .salming-pv__booked-side .salming-pv__grouplabel { margin-bottom: 6px; }
    .salming-pv-root .salming-pv__booked-address { font-size: 15px; line-height: 1.5; color: var(--ink); margin: 0; white-space: pre-line; }
    .salming-pv-root .salming-pv__booked-door { font-size: 14px; line-height: 1.5; color: var(--muted); margin: 4px 0 0; }
    .salming-pv-root .salming-pv__booked-actions { display: grid; gap: 0; }
    .salming-pv .salming-pv-root a.salming-pv__booked-link {
        display: inline-flex; align-items: center; min-height: 44px; font-size: 12px;
        letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink);
    }
    .salming-pv-root .salming-pv__booked-side [data-booked-maps] { min-height: 36px; }
    .salming-pv-root .salming-pv__booked-check {
        flex: none; display: inline-flex; align-items: center; justify-content: center;
        width: 36px; height: 36px; border-radius: 50%; background: var(--ink); color: var(--paper);
    }
    .salming-pv-root .salming-pv__booked-heading { font-size: clamp(28px, 3.4vw, 36px); line-height: 1.05; letter-spacing: -0.02em; font-weight: 500; margin: 0 0 12px; outline: none; }
    .salming-pv-root .salming-pv__booked-when { font-size: 17px; color: var(--ink); margin: 0 0 6px; }
    .salming-pv-root .salming-pv__booked-mail { font-size: 14px; color: var(--muted); margin: 0; overflow-wrap: anywhere; }
    /* Then, clearly a second and lesser thing. */
    .salming-pv-root .salming-pv__booked-optional {
        display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
        font-size: 22px; font-weight: 500; letter-spacing: -0.01em; margin: 44px 0 6px;
    }
    .salming-pv-root .salming-pv__tag {
        font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--muted);
        border: 1px solid var(--line); border-radius: 20px; padding: 4px 9px;
    }
    .salming-pv-root .salming-pv__booked-lead { margin-bottom: 8px; }
    /* An example or what a field does, between its label and the box. */
    .salming-pv-root .salming-pv__fieldhelp { display: block; font-size: 13px; line-height: 1.5; color: var(--muted); margin: 0 0 12px; max-width: 62ch; }
    @media (max-width: 640px) {
        /* Full width on a phone: the one thing to press on this screen. */
        .salming-pv-root .salming-pv__submit { width: 100%; }
        .salming-pv-root .salming-pv__booked { grid-template-columns: auto minmax(0, 1fr); padding: 20px; gap: 14px; }
        .salming-pv-root .salming-pv__booked-side { grid-column: 1 / -1; padding: 16px 0 0; border-left: 0; border-top: 1px solid var(--line); }
        .salming-pv-root .salming-pv__extras { scroll-margin-top: 76px; }
        .salming-pv-root .salming-pv__booked-check { width: 30px; height: 30px; }
        .salming-pv-root .salming-pv__booked-optional { font-size: 19px; margin-top: 32px; }
    }
    /* The same button as a link — the calendar download and "choose another
       time" on a guest's own page. Scoped under .salming-pv a, which
       underlines every link on the page and would otherwise win. */
    .salming-pv .salming-pv-root a.salming-pv__submit--link { display: inline-block; text-decoration: none; color: var(--paper); margin-top: 32px; }
    .salming-pv .salming-pv-root a.salming-pv__submit--link:hover { color: var(--paper); }
    /* A time that will not happen: struck lightly, still readable. */
    .salming-pv .salming-pv-root .is-void { text-decoration: line-through; text-decoration-thickness: 1px; text-decoration-color: currentColor; opacity: .55; }
    /* A dt/dd pair grouped so it can hide as one, without leaving the grid. */
    .salming-pv-root .salming-pv__row { display: contents; }
    .salming-pv-root .salming-pv__confirm { margin-top: 28px; }
    /* Cancelling on a guest's own page: a <details>, so it opens without
       script. The summary is drawn as the text button it replaced; with
       script it steps aside while the question is open, as the button did. */
    .salming-pv-root .salming-pv__cancel > summary { display: inline; list-style: none; cursor: pointer; font-size: 14px; }
    .salming-pv-root .salming-pv__cancel > summary::-webkit-details-marker { display: none; }
    .salming-pv-root .salming-pv__cancel .salming-pv__confirm { margin-top: 18px; }
    .salming-pv-root .salming-pv__cancel.is-enhanced[open] > summary { display: none; }
    .salming-pv-root .salming-pv__cancel.is-enhanced .salming-pv__confirm { margin-top: 0; }
    .salming-pv-root .salming-pv__summary { display: none; margin-top: 16px; font-size: 15px; line-height: 1.5; color: var(--error); }
    .salming-pv-root .salming-pv__summary.is-shown { display: block; }
    .salming-pv-root .salming-pv__reassure { font-size: 13px; color: var(--muted); margin: 18px 0 0; max-width: 60ch; }
    .salming-pv-root .salming-pv__privacy { margin-top: 6px; }
    .salming-pv-root .salming-pv__privacy a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }

    /* ---------- Confirmation ---------- */
    .salming-pv-root .salming-pv__done { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 56px; padding: 88px 0 104px; }
    .salming-pv-root .salming-pv__done h2 { font-size: clamp(34px, 4.4vw, 52px); line-height: 1.02; letter-spacing: -0.025em; font-weight: 500; margin: 0 0 20px; }
    .salming-pv-root .salming-pv__done-lead { font-size: 18px; line-height: 1.55; color: var(--body); margin: 0 0 14px; max-width: 44ch; text-wrap: pretty; }
    .salming-pv-root .salming-pv__done-tail { font-size: 15px; line-height: 1.6; color: var(--muted); margin: 0; }
    .salming-pv-root .salming-pv__receipt { min-width: 0; background: var(--paper); border: 1px solid var(--ink); border-radius: 16px; padding: 36px; }
    .salming-pv-root .salming-pv__receipt dl { display: grid; grid-template-columns: 120px minmax(0, 1fr); row-gap: 14px; column-gap: 16px; margin: 0; font-size: 15px; }
    .salming-pv-root .salming-pv__receipt dt { color: var(--muted); }
    .salming-pv-root .salming-pv__receipt dd { margin: 0; }

    /* ---------- Getting there ---------- */
    .salming-pv-root .salming-pv__there { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); align-items: stretch; }
    .salming-pv-root .salming-pv__there-copy { min-width: 0; padding: 80px var(--gutter); max-width: 700px; margin-left: auto; width: 100%; }
    .salming-pv-root .salming-pv__there h2 { font-size: clamp(30px, 3.6vw, 44px); line-height: 1.04; letter-spacing: -0.025em; font-weight: 500; margin: 0 0 8px; }
    .salming-pv-root .salming-pv__there-street { font-size: 17px; color: var(--muted); margin: 0 0 36px; }
    .salming-pv-root .salming-pv__there dl { display: grid; grid-template-columns: 110px minmax(0, 1fr); row-gap: 12px; column-gap: 16px; margin: 0; font-size: 16px; }
    .salming-pv-root .salming-pv__there dt { color: var(--muted); }
    .salming-pv-root .salming-pv__there dd { margin: 0; }
    .salming-pv-root .salming-pv__maplink { display: inline-block; margin-top: 32px; font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; }
    .salming-pv-root .salming-pv__map { min-width: 0; min-height: 460px; background: var(--mist); }
    .salming-pv-root .salming-pv__map iframe { width: 100%; height: 100%; min-height: 460px; border: 0; display: block; }

    /* ---------- Detail band ---------- */
    .salming-pv-root .salming-pv__band { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); align-items: stretch; }
    .salming-pv-root .salming-pv__band-img { min-width: 0; min-height: 520px; position: relative; }
    .salming-pv-root .salming-pv__band-img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
    .salming-pv-root .salming-pv__band-copy { min-width: 0; padding: 80px var(--gutter); max-width: 620px; }
    .salming-pv-root .salming-pv__band-copy h2 { font-size: clamp(32px, 4vw, 48px); line-height: 1.02; letter-spacing: -0.03em; font-weight: 500; margin: 0 0 44px; }
    .salming-pv-root .salming-pv__points { display: grid; gap: 30px; }
    .salming-pv-root .salming-pv__point-label { font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--paper); margin-bottom: 8px; }
    .salming-pv-root .salming-pv__point p { font-size: 16px; line-height: 1.55; color: var(--soft); margin: 0; max-width: 48ch; }
    .salming-pv-root .salming-pv__outlinks {
        display: flex; flex-wrap: wrap; gap: 16px 32px; margin-top: 44px;
        padding-top: 32px; border-top: 1px solid var(--hairline-dark);
    }
    .salming-pv-root .salming-pv__outlinks a { font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--paper); }

    /* ---------- Explainer ---------- */
    .salming-pv-root .salming-pv__explain { max-width: 1240px; margin: 0 auto; padding: 88px var(--gutter); }
    .salming-pv-root .salming-pv__explain-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 40px; }
    .salming-pv-root .salming-pv__numeral { font-size: 44px; line-height: 1; letter-spacing: -0.03em; color: var(--muted); margin-bottom: 18px; }
    .salming-pv-root .salming-pv__explain p { font-size: 16px; line-height: 1.6; color: var(--body); margin: 0; text-wrap: pretty; }

    /* ---------- Ended city (visit/partials/ended) ----------
       The main site's voice: the 60px statement and the 16px semibold label
       from salmingwatches.com/the-salming-1148, the fact strip from the
       King's tale, underlined text links for every action. No boxes. */
    .salming-pv-root .salming-pv__ended { background: var(--paper); border-top: 1px solid var(--line); }
    .salming-pv-root .salming-pv__ended-inner { max-width: 1240px; margin: 0 auto; padding: 120px var(--gutter) 112px; }
    .salming-pv-root .salming-pv__statement {
        font-size: clamp(34px, 5vw, 60px); line-height: 1; letter-spacing: -0.02em;
        font-weight: 400; margin: 0; max-width: 22ch; text-wrap: balance;
    }
    .salming-pv-root .salming-pv__strip {
        display: flex; flex-wrap: wrap; gap: 6px 0; margin: 36px 0 0;
        font-size: 14px; line-height: 1.4; letter-spacing: 1px; text-transform: uppercase; color: var(--muted);
    }
    .salming-pv-root .salming-pv__strip span + span::before { content: '|'; margin: 0 14px; color: var(--pale); }
    .salming-pv-root .salming-pv__ended-grid {
        display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 48px 40px;
        margin-top: 88px; padding-top: 56px; border-top: 1px solid var(--line);
    }
    .salming-pv-root .salming-pv__label { font-size: 16px; font-weight: 600; letter-spacing: 1px; line-height: 1.4; margin: 0 0 12px; }
    .salming-pv-root .salming-pv__ended-grid p { font-size: 16px; line-height: 1.6; color: var(--body); margin: 0; max-width: 34ch; text-wrap: pretty; }
    .salming-pv .salming-pv-root a.salming-pv__textlink {
        display: inline-block; margin-top: 22px; font-size: 22px; line-height: 1.3; color: var(--ink);
        text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px;
    }
    .salming-pv .salming-pv-root a.salming-pv__textlink:hover { color: var(--muted); }
    .salming-pv-root .salming-pv__destinations { list-style: none; margin: 4px 0 0; padding: 0; display: grid; gap: 18px; }
    .salming-pv .salming-pv-root .salming-pv__destinations a {
        font-size: clamp(30px, 3.2vw, 40px); line-height: 1.05; letter-spacing: -0.01em; font-weight: 200;
        color: var(--ink); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 6px;
    }
    .salming-pv .salming-pv-root .salming-pv__destinations a:hover { color: var(--muted); }
    .salming-pv-root .salming-pv__destinations span { display: block; margin-top: 6px; font-size: 14px; letter-spacing: 1px; text-transform: uppercase; color: var(--muted); }
    .salming-pv-root .salming-pv__destinations span:empty { display: none; }

    /* ---------- Responsive ---------- */
    @media (max-width: 720px) {
        .salming-pv { --gutter: 22px; }
        /* The first screen on a phone should reach the times. The watch stays,
           shorter; the words tighten. */
        .salming-pv-root .salming-pv__hero-copy { padding-top: 28px; padding-bottom: 40px; }
        .salming-pv-root .salming-pv__hero-img { min-height: 220px; order: -1; }
        .salming-pv-root .salming-pv__stamp { left: 22px; bottom: 18px; width: 92px; }
        .salming-pv-root .salming-pv__h1 { margin-bottom: 18px; }
        .salming-pv-root .salming-pv__lead { font-size: 17px; margin-bottom: 28px; }
        .salming-pv-root .salming-pv__facts { grid-template-columns: 110px minmax(0, 1fr); row-gap: 8px; font-size: 14px; }
        .salming-pv-root .salming-pv__facts-each { display: none; }
        .salming-pv-root .salming-pv__book { scroll-margin-top: -76px; }
        /* Bottom padding once, not twice: the section and its inner box each
           added their own, 184px of nothing under the button. */
        .salming-pv-root .salming-pv__booking { padding-top: 88px; padding-bottom: 48px; }
        .salming-pv-root .salming-pv__book-inner { padding-bottom: 0; }
        /* No rule between the times and the details on a phone — the heading
           is the break, and the rule cost 120px of scroll on its own. */
        .salming-pv-root .salming-pv__rule { display: none; }
        .salming-pv-root .salming-pv__details-h2 { margin-top: 48px; margin-bottom: 24px; }
        /* The days as one row to swipe, not a stack of full-width cards: three
           days took 278px before the first time showed. */
        .salming-pv-root .salming-pv__daytabs { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin: 0 calc(-1 * var(--gutter)); padding: 0 var(--gutter); }
        .salming-pv-root .salming-pv__daytabs::-webkit-scrollbar { display: none; }
        .salming-pv-root .salming-pv__day { flex: none; min-width: 0; padding: 12px 16px; border-radius: 12px; }
        .salming-pv-root .salming-pv__day-count { margin-top: 6px; }
        .salming-pv-root .salming-pv__days { margin-bottom: 24px; }
        .salming-pv-root .salming-pv__rail--hero { display: none; }
        .salming-pv-root .salming-pv__rail-band { display: block; }
        /* The label on its own line above the row, so the row gets the whole width. */
        .salming-pv-root .salming-pv__rail { flex-direction: column; align-items: stretch; gap: 12px; }
        .salming-pv-root .salming-pv__rail-stops { gap: 22px; }
        /* Side by side and small, as a choice should be: two full-width cards
           took 240px before the first day. Three or more scroll sideways, like
           the days. The room and the blurb wait for "Getting there", which
           follows the switch. Both cards centre their two lines, so a card
           with hours and one without stand level. */
        .salming-pv-root .salming-pv__venues { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; gap: 8px; margin: 0 calc(-1 * var(--gutter)) 10px; padding: 0 var(--gutter); }
        .salming-pv-root .salming-pv__venues::-webkit-scrollbar { display: none; }
        .salming-pv .salming-pv-root a.salming-pv__venue { flex: 1 0 calc(50% - 4px); min-width: 148px; padding: 12px 30px 12px 14px; border-radius: 12px; display: flex; flex-direction: column; justify-content: center; }
        /* The hours restate the times a few lines down; on a phone the card
           is the name and what is open. */
        .salming-pv-root .salming-pv__venue-window { display: none; }
        .salming-pv-root .salming-pv__venue-name { font-size: 16px; line-height: 1.25; margin-bottom: 0; }
        .salming-pv-root .salming-pv__venue-room, .salming-pv-root .salming-pv__venue-blurb { display: none; }
        .salming-pv-root .salming-pv__venue-count { font-size: 10px; letter-spacing: 0.12em; margin-top: 6px; }
        .salming-pv-root .salming-pv__venues-note { font-size: 13px; margin-bottom: 18px; }
        .salming-pv-root .salming-pv__slots { grid-template-columns: repeat(auto-fill, minmax(74px, 1fr)); }
        /* Six across on a phone, as on the buy page. */
        .salming-pv-root .salming-pv__numbers { grid-template-columns: repeat(6, minmax(0, 1fr)); }
        .salming-pv-root .salming-pv__map, .salming-pv-root .salming-pv__map iframe, .salming-pv-root .salming-pv__band-img { min-height: 320px; }
        .salming-pv-root .salming-pv__receipt { padding: 26px; }
        .salming-pv-root .salming-pv__ended-inner { padding-top: 88px; padding-bottom: 80px; }
        .salming-pv-root .salming-pv__ended-grid { margin-top: 56px; padding-top: 40px; }
    }

/* Ported from salming-admin resources/views/visit/partials/float-cta.blade.php — keep the two in step until the my. pages are retired (plan step 8). */
.salming-pv-root .salming-pv__float {
        position: fixed;
        left: 16px; right: 16px;
        bottom: calc(16px + env(safe-area-inset-bottom, 0px));
        z-index: 40;
        display: block;
        text-align: center;
        /* White with an ink frame, not the submit button's black: it floats
           over the black hero as often as over the light form, and black on
           black is a button nobody sees. */
        background: var(--paper); color: var(--ink);
        border: 1px solid var(--ink); border-radius: 14px;
        padding: 19px 24px;
        font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
        text-decoration: none;
        opacity: 0; transform: translateY(12px);
        pointer-events: none;
        transition: opacity .2s ease, transform .2s ease;
    }
    .salming-pv .salming-pv-root a.salming-pv__float, .salming-pv .salming-pv-root a.salming-pv__float:hover { color: var(--ink); text-decoration: none; }
    .salming-pv-root .salming-pv__float.is-shown { opacity: 1; transform: none; pointer-events: auto; }
    .salming-pv-root .salming-pv__float[hidden] { display: none; }
    @media (min-width: 768px) { .salming-pv-root .salming-pv__float { display: none !important; } }
    @media (prefers-reduced-motion: reduce) { .salming-pv-root .salming-pv__float { transition: none; transform: none; } }

/* Only on this site, not on my.: visit.css is a verbatim copy of salming-admin's. */

/* Tap targets: larger hit area, no layout change (inline padding moves nothing). */
.salming-pv-root .salming-pv__maplink, .salming-pv .salming-pv-root a.salming-pv__textlink, .salming-pv-root .salming-pv__outlinks a { padding-block: 8px; margin-block: -8px; }
.salming-pv-root .salming-pv__venue-ask a, .salming-pv-root .salming-pv__fallback a { padding-block: 8px; }
