/* ==========================================================================================================
   ELLIS STERLING v2, THE BOOKING FORM. Loaded by /consultation (after consultation.css's siblings, from its <head>)
   and, on every other page, by site.js block 5 (the floating button and its dialog). Script: assets/js/booking.js.
   Spec: _plan/CONSULTATION-SPEC.md sections 17 and 18 (18: the company form only, no switch, since 2026-10-16).
   Colours are site.css tokens and the grounds' --fg, --fg2, --rule, --mark, with one exception: the stand-in (6) is
   a picture of iClosed's own widget, so it carries iClosed's neutral greys and white, named once at its top. It is
   placeholder-only and make_dist.py --launch leaves it out of the deploy copy.
   Cache key: V in site.js block 5 (every other page) and the ?v= on consultation/index.html, booked.html and
   not-yet.html; change all of them together (changing V re-keys site.js on every page too: site.js header).
   Order: 1. the block and its column  2. the switch (only with two branches in CONFIG)  3. the lines around the form
   4. the slot and its states
   5. iClosed's own markup  6. the stand-in  7. the floating button  8. the dialog  9. print
   ========================================================================================================== */

/* 1. THE BLOCK (.bk) is a container, so the form follows the width it has, not the window: iClosed's inline widget
   is one stacked card that fills its frame under 520px and centres itself at 480px from 520 to 899px (a 63px empty
   band each side at Accelerated), and becomes a two-column card (form beside calendar, 807px, centred) from 900px.
   So under 900px everything in the block (the column, .bk-col, and the slot) stops at 519px and starts on the
   block's left edge: the card then fills the slot, and its edges are the switch's and the privacy note's. From
   900px (the dialog on a laptop) the slot takes the whole width, iClosed centres its 807px card in it, and the
   column is that 807px, centred too, so the title, the switch and the note line up with the card. */
.bk{container:bk/inline-size}
.bk-col,.bk-slot{max-width:519px}
@container bk (min-width:900px){
  .bk-col{max-width:807px;margin-inline:auto}
  .bk-slot{max-width:none}
}
.bk [hidden]{display:none!important}

/* 2. THE SWITCH (.bk-switch), kept for the personal form's return: shown only while CONFIG.branches in booking.js lists
   two forms (today it lists the company form alone, so no switch is rendered, on the page or in the dialog).
   Who the call is for, as two text tabs, the Insights hub's topic row (lab-c.css): Source
   Sans 3 15px in the second tone; the chosen one in full colour at 600 with a 2px bar in the ground's bronze on the
   row's hairline, under the word, never through it. Each label reserves its 600 width (::before), so choosing never
   moves the other. 44px tall. With JS off (the page's HTML) they are two links to the hosted booking pages, with
   neither marked; the inline script in /consultation's head marks the one the address asks for before the first
   paint (data-bk-first), so nothing changes when booking.js makes them tabs; if booking.js never mounts (blocked or
   failed), that script takes the mark away again once the page has loaded, and they read as links. The bar moves
   only once the block is ready (.bk-ready), never on arrival.
   The one departure from the hub's row: the tab not chosen is in full colour (400), not the second tone, because
   the small print under the switch is in the second tone at almost its size, and both tabs must read as choices,
   not as a caption. Each tab has 6px of room inside each side (cancelled by its margin, so the words keep the
   column's edge and their 32px gap), so the focus ring never touches a letter; the bar stays under the word.
   The label's span is first in the tab's grid (order), so the tab's baseline is its words' (the dialog's row
   aligns the "both" line on it, 3), not the zero-height width reserver's. */
.bk-switch{display:flex;gap:32px;border-bottom:1px solid var(--rule)}
.bk-tab{position:relative;display:inline-grid;flex-shrink:0;margin:0 -6px;padding:12px 6px 13px;border:0;background:none;
  font-family:var(--sans);font-weight:400;font-size:.9375rem;line-height:1.3;letter-spacing:.01em;color:var(--fg);
  white-space:nowrap;cursor:pointer;text-decoration:none;transition:color .16s var(--out),opacity .1s var(--out)}
.bk-tab::before{content:attr(data-name);grid-area:1/1;height:0;overflow:hidden;visibility:hidden;font-weight:600}
.bk-tab>span{grid-area:1/1;order:-1}
.bk-tab::after{content:"";position:absolute;left:6px;right:6px;bottom:-1px;height:2px;background:var(--mark);transform:scaleX(0);transform-origin:left}
.bk-ready .bk-tab::after{transition:transform .2s var(--out)}
.bk-tab[aria-selected="true"],
:root[data-bk-first="business"] .bk-switch:not([role]) .bk-tab[data-event="business"],
:root[data-bk-first="personal"] .bk-switch:not([role]) .bk-tab[data-event="personal"]{color:var(--fg);font-weight:600}
.bk-tab[aria-selected="true"]::after,
:root[data-bk-first="business"] .bk-switch:not([role]) .bk-tab[data-event="business"]::after,
:root[data-bk-first="personal"] .bk-switch:not([role]) .bk-tab[data-event="personal"]::after{transform:none}
/* with JS off (no data-bk-first: the head script did not run) they are links to the hosted pages, so they look it */
:root:not([data-bk-first]) .bk-switch:not([role]) .bk-tab>span{text-decoration-line:underline;text-decoration-thickness:1px;
  text-underline-offset:.2em;text-decoration-color:var(--mark);color:var(--fg)}
.bk-tab:focus-visible{outline-offset:-2px}
.bk-tab:active{opacity:.72}
/* hover on the tab not chosen: the site's hover for a text control (the nav's links, Menu, Close), an underline in
   the text's own colour, since the colour itself no longer changes */
@media (hover:hover) and (pointer:fine){.bk-tab:not([aria-selected="true"]):hover>span{text-decoration-line:underline;
  text-decoration-thickness:1px;text-underline-offset:.3em;text-decoration-color:currentColor}}
/* Windows high contrast: the bar is drawn in the system's selection colour, not forced to the page's */
@media (forced-colors:active){.bk-tab::after{forced-color-adjust:none;background:Highlight}}

/* 3. THE LINES AROUND THE FORM. The privacy note (pending counsel; one line since 2026-10-16) sits directly above
   the form, 8px, with nothing between them (the stand-in's own line is under the card, 6): iClosed saves what is
   typed before Continue, so the note is read before typing. In the dialog it follows the line about the call, 16px
   (a new group: what happens to what you type). On /consultation it sits outside the block, on the head grid's own
   row (consultation.css 2), so the form's card and the panel beside it start level. Under the form, the guest line
   and the hosted link, 16px. All small text, wrapping as prose.
   With two branches: under the tabs the one line for "both" (8px, the row's own padding above it), then the note,
   8px; from 900px (the dialog on a laptop) the switch and that line share one row (.bk-switchrow), the line at its
   right end on the tabs' baseline (2: the tab's baseline is its words') and the hairline across the whole row. */
.bk-help{margin-top:8px}
@container bk (min-width:900px){
  .bk-switchrow{display:flex;align-items:baseline;justify-content:space-between;gap:24px;border-bottom:1px solid var(--rule)}
  .bk-switchrow .bk-switch{border-bottom:0}
  .bk-switchrow .bk-help{margin-top:0;text-align:right}
}
.bk-privacy{margin-top:8px}
.bk-dlg-line+.bk-privacy{margin-top:16px}
.bk-after{margin-top:16px}
.bk-help,.bk-after,.bk-fallback .t-small{text-wrap:pretty}
.bk-privacy{text-wrap:balance}
.bk-nojs{margin-top:12px;text-wrap:pretty}
/* The line for visitors without the form (the one hosted link and the email): in the page's HTML (not in
   <noscript>), shown with JS off and when booking.js never mounted (the head script removes data-bk-first, 2);
   hidden while the form works. */
:root[data-bk-first] .bk-nojs{display:none}
/* text links with no arrow (the hosted link, the email): underlined in the ground's bronze, as prose links are */
.bk-u{text-decoration-line:underline;text-decoration-thickness:1px;text-underline-offset:.2em;text-decoration-color:var(--mark);
  overflow-wrap:anywhere;transition:opacity .1s var(--out)}
.bk-u:active{opacity:.72}
@media (hover:hover) and (pointer:fine){
  .bk-u{transition:text-decoration-color .16s var(--out),opacity .1s var(--out)}
  .bk-u:hover{text-decoration-color:currentColor}
}

/* 4. THE SLOT (.bk-slot) and its panels (one per event, the other hidden). The slot holds the form's height before
   anything arrives (--bk-h: the stacked card, about 960px measured on the stand-in; the two-column card about 440px),
   so nothing under it moves when the form or the stand-in comes in. The loading line sits at its top-left; the
   fallback replaces the reserved height with its three lines. The status line stays in the accessibility tree after
   a failure (.is-sr), so its live region can announce it. */
.bk-slot{--bk-h:960px;position:relative;margin-top:8px}
@container bk (min-width:900px){.bk-slot{--bk-h:440px}}
/* held only once booking.js has the block (data-bk-event): with JS off, or if booking.js fails, the slot stays empty
   and takes no room, and the switch's two links lead to the hosted pages */
.bk[data-bk-event] .bk-slot{min-height:var(--bk-h)}
.bk .bk-slot:is(.is-standin,.is-failed,:has(.bk-panel:not([hidden]):is(.is-ready,.is-failed))){min-height:0}
.bk-panel{position:relative}
.bk-panel:focus-visible{outline:2px solid var(--focus,var(--bronze-hi));outline-offset:4px}
.bk-status{position:absolute;top:0;left:0}
.bk-status.is-sr{width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
.bk-panel.is-failed>.iclosed-widget{height:0!important;overflow:hidden;visibility:hidden}
.bk-fallback-text{color:var(--fg)}
.bk-fallback .lnk{display:flex;width:fit-content;max-width:100%;margin-top:8px}
.bk-fallback .t-small{margin-top:8px;max-width:62ch}
/* the line under the form offers the same hosted page as the fallback's link, so it steps aside while that shows */
.bk:has(.bk-panel:not([hidden]).is-failed) .bk-hosted-line,.bk:has(.bk-slot.is-failed) .bk-after{display:none}

/* 5. ICLOSED'S OWN MARKUP. widget.js puts a pulsing skeleton (.iclosed-loader-container) in our page while its frame
   loads; the slot already says "Loading the booking form." in one quiet line (ICLOSED-SETUP 3.9), so it is hidden.
   The frame is iClosed's: nothing else of it is styled. */
.iclosed-widget .iclosed-loader-container{display:none!important}
.iclosed-widget iframe{display:block}

/* STANDIN:START (placeholder mode only; make_dist.py --launch leaves this block out of the deploy copy)
   6. THE STAND-IN: a picture of iClosed's inline widget at its real footprint, from the measurements of a live
   embed (CONSULTATION-SPEC 17): the white card, 8px corners, a 1px #D1D5DB edge, iClosed's font (Inter where
   installed, else the system's own sans, which is close; no font is loaded for it), 14px text. Fields 40px on a
   56px pitch (the first 16px under the event name), Continue 44px, the event name 18/600, the month 16/500, day boxes 70px, slots 40px on a 52px pitch,
   "Powered by iClosed" at the foot. The brand colour is the one ICLOSED-SETUP 2.12 recommends setting in iClosed
   (Light theme, --bronze-dk with white text, 6.5:1). Under 900px: the stacked card filling its slot (the slot is at
   most 519px, where iClosed's card fills its frame). From 900px: the two-column card, 807px, centred, form beside
   calendar. The line under it, in the page's own small text, says it is a stand-in, so the card itself sits where the
   real widget will, directly under the privacy note. */
.bk-standin-note{position:absolute!important;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}
.bk-si-wrap{container:bksi/inline-size}
.bk-si{--si-bg:#fff;--si-ink:#111827;--si-text:#374151;--si-mute:#6B7280;--si-faint:#A3A9B4;--si-line:#D1D5DB;
  --si-line2:#E5E7EB;--si-tint:#F6F7F9;--si-field:#FBFBFB;
  position:relative;background:var(--si-bg);border:1px solid var(--si-line);border-radius:8px;overflow:hidden;
  color:var(--si-ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  font-size:14px;line-height:1.4;letter-spacing:0;-webkit-font-smoothing:antialiased;user-select:none;-webkit-user-select:none}
.bk-si-form{padding:20px 20px 0}
.bk-si-title{font-size:18px;line-height:24px;font-weight:600}
.bk-si-field{display:flex;align-items:center;gap:8px;height:40px;margin-top:16px;padding:0 12px;border:1px solid var(--si-line);
  border-radius:8px;background:var(--si-field);color:var(--si-mute);white-space:nowrap;overflow:hidden}
.bk-si-title+.bk-si-field{margin-top:16px}
.bk-si-flag{flex-shrink:0;width:20px;height:14px;border-radius:2px;background:var(--si-line2)}
.bk-si-caret{flex-shrink:0;width:0;height:0;margin-left:-4px;border-left:3.5px solid transparent;border-right:3.5px solid transparent;border-top:4px solid var(--si-mute)}
.bk-si-div{flex-shrink:0;align-self:stretch;width:1px;margin:0 4px;background:var(--si-line)}
.bk-si-consent{margin-top:16px;font-size:12px;line-height:18px;color:var(--si-text)}
.bk-si-consent b{font-weight:600;color:var(--si-ink);text-decoration:underline;text-underline-offset:2px}
.bk-si-btn{display:flex;align-items:center;justify-content:center;gap:6px;height:44px;margin-top:16px;border-radius:8px;
  background:var(--bronze-dk);color:#fff;font-weight:500}
.bk-si-chev{width:6px;height:6px;border-top:1.5px solid currentColor;border-right:1.5px solid currentColor;transform:rotate(45deg);margin-left:2px}
.bk-si-cal{padding:48px 20px 0;color:var(--si-faint)}
.bk-si-month{display:flex;align-items:center;justify-content:space-between;height:32px;font-size:16px;font-weight:500}
.bk-si-arrows{display:flex;gap:4px}
.bk-si-arrows i{position:relative;width:32px;height:32px}
.bk-si-arrows i::before{content:"";position:absolute;left:50%;top:50%;width:6px;height:6px;border-top:1.5px solid var(--si-line);border-left:1.5px solid var(--si-line);transform:translate(-30%,-50%) rotate(-45deg)}
.bk-si-arrows .bk-si-next::before{transform:translate(-70%,-50%) rotate(135deg)}
.bk-si-days{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-top:16px}
.bk-si-day{display:grid;align-content:center;justify-items:center;gap:2px;height:70px;border-radius:8px;background:var(--si-tint);font-size:13px}
.bk-si-day span+span{font-size:14px}
.bk-si-tz{display:flex;align-items:center;gap:8px;margin-top:16px;height:24px;font-size:14px;white-space:nowrap}
.bk-si-zone{overflow:hidden;text-overflow:ellipsis;min-width:0}
.bk-si-zcaret{margin-left:-2px;border-top-color:var(--si-faint)}
.bk-si-globe{flex-shrink:0;width:14px;height:14px;border:1.5px solid var(--si-line);border-radius:50%}
.bk-si-fmt{display:flex;gap:2px;margin-left:auto;flex-shrink:0}
.bk-si-fmt span{padding:2px 8px;border-radius:6px;font-size:13px}
.bk-si-fmt .is-on{color:var(--bronze-dk);background:var(--si-tint)}
.bk-si-slots{position:relative;display:grid;gap:12px;margin-top:16px;height:300px;overflow:hidden}
.bk-si-slot{display:grid;place-items:center;height:40px;border:1px solid var(--si-line2);border-radius:8px}
.bk-si-tip{position:absolute;left:50%;top:46px;transform:translateX(-50%);width:max-content;max-width:calc(100% - 32px);
  padding:10px 16px;border:1px solid var(--si-line2);border-radius:6px;background:var(--si-bg);color:var(--si-ink);text-align:center}
.bk-si-foot{padding:16px 20px 14px;text-align:center;font-size:11px;color:var(--si-mute)}
.bk-si-foot b{font-weight:600;color:var(--si-text)}
@container bksi (min-width:900px){
  .bk-si{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);max-width:807px;margin-inline:auto}
  .bk-si-form{padding:22px 24px 24px}
  .bk-si-btn{height:40px}
  .bk-si-cal{padding:22px 24px 24px;border-left:1px solid var(--si-line2)}
  .bk-si-slots{grid-template-columns:repeat(3,minmax(0,1fr));height:auto}
  .bk-si-tip{top:2px}
  .bk-si-foot{grid-column:1/-1;padding:8px 20px 9px;border-top:1px solid var(--si-line2)}
  /* the line under the card on the card's own edges, as the column above it */
}
/* STANDIN:END */

/* 7. THE FLOATING BUTTON (button.bk-float, made by site.js block 5). A 56px circle fixed 16px in from the bottom and
   right edges (more on a phone with a home bar or a notch: the safe area). The firm's call to book, so the deep of
   the consultation ground, ringed in bronze, with an ivory calendar whose chosen day is bronze: deep on ivory is
   13.7:1 and the bronze ring on deep or forest about 5.5:1, so its edge reads on every ground (a bronze fill would be
   2.5:1 on ivory). Flat: no shadow, no badge, no pulse. Under the site's header bar (z-index 50).
   Hover (a mouse only): the fill stays deep (the forest fill vanished into forest sections) and the ring lightens to
   --bronze-hi; its name shows beside it, a square label in the button's own colours (.bk-float-label, Source Sans 3
   600), so the icon is never a guess. The label shows on keyboard focus too, never on touch, and fades in 160ms
   (none under reduced motion). Press: the site's .97.
   Away (.is-away, site.js): it fades out while the page's own call, the footer or a field is in use, and on a phone
   or tablet while the site's bar is parked (reading down the page). It stays in the Tab order, so a keyboard always
   reaches it: on keyboard focus it shows again, wherever the page is. Under the Menu panel and the dialog it is
   hidden outright (visibility), so it cannot be reached there.
   Focus: the bronze ring 3px out, with an ink band between, so the ring reads on ivory (ink 17:1) and on the dark
   grounds (bronze-hi 5.6:1 and more). */
.bk-float{position:fixed;z-index:40;right:max(16px,env(safe-area-inset-right,0px));bottom:max(16px,env(safe-area-inset-bottom,0px));
  display:grid;place-items:center;width:56px;height:56px;margin:0;padding:0;border:2px solid var(--bronze);border-radius:50%;
  background:var(--deep);color:var(--on);cursor:pointer;-webkit-tap-highlight-color:transparent;
  transition:opacity .2s var(--out),transform .16s var(--out),border-color .2s ease}
.bk-float svg{display:block;width:24px;height:24px}
.bk-float-day{fill:var(--bronze)}
.bk-float.is-away{opacity:0;pointer-events:none;transition:opacity .16s var(--out)}
.bk-float.is-away:focus-visible{opacity:1;pointer-events:auto}
.bk-float:active{transform:scale(.97)}
.bk-float:focus-visible{outline:2px solid var(--bronze-hi);outline-offset:3px;box-shadow:0 0 0 3px var(--ink)}
.bk-float-label{position:absolute;right:calc(100% + 10px);top:50%;transform:translateY(-50%);padding:9px 12px;
  border:1px solid var(--bronze);background:var(--deep);color:var(--on);font-family:var(--sans);font-weight:600;
  font-size:.875rem;line-height:1.3;letter-spacing:.01em;white-space:nowrap;pointer-events:none;
  opacity:0;visibility:hidden;transition:opacity .16s var(--out),visibility 0s linear .16s}
.bk-float:focus-visible .bk-float-label{opacity:1;visibility:visible;transition:opacity .16s var(--out),visibility 0s}
@media (hover:hover) and (pointer:fine){
  .bk-float:hover{border-color:var(--bronze-hi)}
  .bk-float:not(.is-away):hover .bk-float-label{opacity:1;visibility:visible;transition:opacity .16s var(--out),visibility 0s}
}
html.menu-open .bk-float,html.bk-open .bk-float{visibility:hidden}
@media (prefers-reduced-motion:reduce){.bk-float:active{transform:none}.bk-float-label{transition:none!important}}
@media (forced-colors:active){.bk-float{border-color:ButtonText}.bk-float-day{fill:ButtonText}.bk-float-label{border-color:ButtonText}}

/* 8. THE DIALOG (dialog.bk-dlg.g-deep, made by booking.js). The consultation's deep ground, square like everything on
   the site, one hairline edge on the dimmed page (ink at 68%, the --ink2 token). Three sizes, each so the form fills
   what it is given:
     from 960px   a centred panel, at most 960px wide and the window's height less 16px each side, scrolling inside
                  if the form grows: from about 1008px its block is wider than 900px, so iClosed shows its two-column
                  card and the whole booking fits a 768px laptop screen.
     600 to 959   a centred panel as wide as the stacked card plus its 24px sides (567px), as tall as the window less
                  16px each side, the form scrolling under the title and Close (sticky). A tablet's full screen left
                  a quarter of it empty beside the 519px card.
     below 600    the whole screen (100dvh), its gutters the site's, the safe areas kept clear, the title and Close
                  staying at its top while the form scrolls under them.
   Inside: the title (the statement role) and Close (the site Menu's word for closing, a 44px target) on one row,
   one line about the call, the privacy note (16px, 3) and the form (8px); no switch while the company form is the
   only one (CONFIG.branches). From about 1008px the whole booking fits a 768px screen with room to spare (the switch
   row's 46px are gone). From 960 to about 1000px the block is still under 900px, iClosed stacks its card and the
   dialog scrolls, so the title row with Close is sticky there as well (the container rule below). It fades in over 200ms, 8px up (@starting-style; none under reduced motion); it closes at
   once. */
html.bk-open{overflow:hidden}
.bk-dlg{width:min(100vw - 48px,960px);max-width:none;max-height:calc(100dvh - 32px);margin:auto;padding:0;
  border:1px solid var(--rule);overflow:auto;overscroll-behavior:contain;opacity:1;transform:none;
  transition:opacity .2s var(--out),transform .2s var(--out)}
@starting-style{.bk-dlg[open]{opacity:0;transform:translateY(8px)}}
.bk-dlg::backdrop{background:var(--ink2,rgba(7,23,17,.68));opacity:1;transition:opacity .2s var(--out)}
@starting-style{.bk-dlg[open]::backdrop{opacity:0}}
@media (prefers-reduced-motion:reduce){.bk-dlg,.bk-dlg::backdrop{transition:none}}
.bk--dialog{--dg-l:24px;--dg-r:24px;--dg-t:12px;padding:var(--dg-t) var(--dg-r) 20px var(--dg-l)}
.bk-dlg-top{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:44px}
.bk-dlg-h{font-family:var(--serif);font-weight:400;font-size:var(--fs-sec,clamp(1.375rem,1.9vw,1.875rem));line-height:1.2;
  letter-spacing:-.005em;text-wrap:balance;color:var(--fg)}
.bk-dlg-h:focus{outline:none}
.bk-close{display:inline-flex;align-items:center;justify-content:flex-end;flex-shrink:0;min-width:44px;min-height:44px;margin-right:-4px;padding:0 4px;
  border:0;background:none;font-family:var(--sans);font-weight:600;font-size:.9375rem;letter-spacing:.01em;color:var(--fg);cursor:pointer;
  text-decoration-line:underline;text-decoration-color:transparent;text-decoration-thickness:1px;text-underline-offset:.3em;
  transition:text-decoration-color .18s ease,opacity .1s var(--out)}
.bk-close:active{opacity:.72}
@media (hover:hover) and (pointer:fine){.bk-close:hover{text-decoration-color:currentColor}}
.bk-dlg-line{margin-top:4px}
.bk--dialog .bk-switchrow{margin-top:12px}
@media (max-width:959px){
  .bk--dialog{--dg-t:0px}
  .bk-dlg-top{position:sticky;top:0;z-index:2;margin-inline:calc(-1 * var(--dg-l)) calc(-1 * var(--dg-r));
    padding:max(8px,env(safe-area-inset-top,0px)) var(--dg-r) 8px var(--dg-l);max-width:none;
    background:var(--deep);border-bottom:1px solid var(--rule)}
  .bk-dlg-line{margin-top:16px}
  .bk--dialog .bk-switchrow{margin-top:16px}
}
/* From 960px to about 1000px the dialog is 912 to 950px wide, so its block is under 900px and iClosed shows the
   stacked card (about 960px tall): the dialog scrolls inside, as below 960px, so the title row with Close stays at
   its top there too. The block's own width decides (the container query), not the window's, so the row is sticky
   exactly where the card stacks; at rest it keeps the dialog's 12px top. */
@media (min-width:960px){
  @container bk (max-width:899px){
    .bk--dialog .bk-dlg-top{position:sticky;top:0;z-index:2;margin-inline:calc(-1 * var(--dg-l)) calc(-1 * var(--dg-r));
      padding:8px var(--dg-r) 8px var(--dg-l);max-width:none;background:var(--deep);border-bottom:1px solid var(--rule)}
  }
}
@media (min-width:600px) and (max-width:959px){
  .bk-dlg{width:min(100vw - 48px,567px)}
  .bk-dlg-top{padding-top:8px}
}
@media (max-width:599px){
  .bk-dlg{width:100%;height:100%;height:100dvh;max-height:none;margin:0;border:0}
  .bk--dialog{--dg-l:var(--gut-l);--dg-r:var(--gut-r);min-height:100%;padding-bottom:max(24px,env(safe-area-inset-bottom,0px))}
}

/* 9. PRINT: the booking is screen-only. */
@media print{.bk-float,.bk-dlg,.bk-slot,.bk-switch,.bk-help,.bk-privacy,.bk-after{display:none!important}}
