/* BookSesh Conversational Homepage — PREVIEW styles (scoped to #aura-home).
   Brand system: Plus Jakarta Sans, Ink #090711, Lavender #AA96F8, Coral #EB666D,
   Warm Paper #F7F5F1, Body Ink #252229, Soft Lavender #EEE9FE, Muted Stone #D8D3CC,
   Blue #0F40FF, White. Premium through restraint. */

@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');

#aura-home {
  --ink: #090711;
  --body-ink: #252229;
  --lav: #AA96F8;
  --soft-lav: #EEE9FE;
  --lav-deep: #7A5AF0; /* deeper lavender: text-on-white + filled interaction states, ~4.6:1 on white */
  --coral: #EB666D;
  --paper: #F7F5F1;
  --stone: #D8D3CC;
  --blue: #0F40FF;
  --white: #FFFFFF;
  --radius: 20px;
  --ease: cubic-bezier(.22,.61,.36,1);

  /* Shared hero rhythm tokens — one consistent vertical gap governs the whole
     hero grid (brand -> H1 -> CTA -> OR -> input -> browse); --hero-lift nudges
     the desktop lock-up slightly higher; --logo-size sizes the brand pin. */
  --logo-size: 76px;
  --hero-gap: clamp(15px, 2.1vh, 24px);
  --hero-lift: 3vh;

  /* Mobile-only tokens: compact header strip height + a deliberate (non-uniform)
     hero-stack rhythm. Fluid clamps → proportionally identical 360–440px & tall
     viewports (device-agnostic, no Huawei-specific fixed values). */
  --m-header-h: 58px;
  --m-gap:       clamp(16px, 3.9vw, 24px);  /* balanced      : H1  -> CTA   */
  --m-gap-lg:    clamp(21px, 5.4vw, 32px);  /* breathing     : CTA -> OR    */
  --m-gap-sm:    clamp(13px, 3.6vw, 20px);  /* compact+      : OR  -> input (slightly larger, drops field lower) */
  --m-gap-break: clamp(34px, 10vw,  62px);  /* section break : input -> Browse (larger deliberate gap) */

  position: relative;
  font-family: 'Plus Jakarta Sans', system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
  color: var(--body-ink);
  background: var(--white);
  min-height: calc(100vh - 70px);
  overflow: hidden;
  isolation: isolate;
}

/* ---------- PREVIEW-PAGE-ONLY: remove the duplicate top-bar centre icon (desktop) ----------
   The global Voxel header (post 12427) renders a black chat-bubble Elementor ICON widget
   (.elementor-element-f95167f) in its centre — a second brand mark that duplicates the hero
   lock-up and floats awkwardly. This stylesheet is enqueued ONLY on /aura-home-demo
   (page-scoped is_page enqueue) AND this rule is pinned to body.page-id-15186, so it applies
   to THIS PAGE ALONE — the header markup (12427) is never modified, so every other page keeps
   its original centre icon. On desktop we HIDE the whole widget (no leftover box/background),
   leaving the top-bar centre EMPTY; Menu + Quick search (left) and Sign in (right) are untouched.
   The hero "BOOKSESH.COM + Your booking concierge" lock-up is the sole desktop brand anchor. */
@media (min-width: 821px) {
  body.page-id-15186 .elementor-element-f95167f { display: none !important; }
}

/* Mobile-only preview header strip — hidden on desktop (see the mobile media query). */
.aura-mhead { display: none; }

/* ---------- Hero image (subtle anchor, recedes on booking) ---------- */
.aura-hero-media {
  position: absolute;
  top: 0; right: 0;
  width: 46%;
  height: 100%;
  z-index: 0;
  transition: opacity .5s var(--ease), transform .6s var(--ease);
  will-change: opacity, transform;
}
.aura-hero-stack { position: absolute; inset: 0; }
.aura-hero-slide {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: center center;
  display: block;
  border-bottom-left-radius: 120px;
  filter: saturate(1.02) contrast(1.05);
  opacity: 0;
  transition: opacity 1.4s ease-in-out;
  will-change: opacity;
}
.aura-hero-slide.is-active { opacity: 1; }
/* Reduced wash: a soft left blend into the text area only; the image reads clearer
   on the right. Text sits in the left column, so contrast stays readable. */
.aura-hero-fade {
  position: absolute; inset: 0;
  background: linear-gradient(100deg, #fff 0%, rgba(255,255,255,.32) 15%, rgba(255,255,255,0) 40%);
  pointer-events: none;
}
#aura-home[data-mode="booking"] .aura-hero-media {
  opacity: 0;
  transform: translateY(-24px) scale(1.02);
  pointer-events: none;
}

/* ---------- Stage ---------- */
.aura-stage {
  position: relative;
  z-index: 1;
  max-width: 1200px;
  margin: 0 auto;
  padding: clamp(28px, 6vh, 84px) clamp(20px, 5vw, 56px);
  min-height: calc(100vh - 70px);
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* ---------- Landing ---------- */
.aura-landing {
  max-width: 620px;
  transition: opacity .35s var(--ease), transform .45s var(--ease);
}
#aura-home[data-mode="booking"] .aura-landing { display: none; }

.aura-eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 600; letter-spacing: .04em;
  color: var(--body-ink); opacity: .7; margin: 0 0 18px;
  text-transform: uppercase;
}
.aura-dot {
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--lav);
  box-shadow: 0 0 0 4px rgba(170,150,248,.22);
}
/* ---------- Hero brand lockup: icon + BOOKSESH.COM wordmark + strapline ----------
   Full lock-up retained (owner). On desktop it left-aligns to the H1's left edge (both
   are left-flush children of .aura-landing). Slightly enlarged so it reads as a confident
   brand mark; the pin/badge stays static and ONLY the heart-B breathes. Vertical spacing
   is governed by the shared --hero-gap token (no ad-hoc margins). */
.aura-brand { display: flex; align-items: center; gap: 10px; margin: 0 0 var(--hero-gap); }
.aura-logo { position: relative; width: var(--logo-size); height: var(--logo-size); flex: 0 0 auto; display: inline-block; }
.aura-brand-text { display: flex; flex-direction: column; line-height: 1.1; }
.aura-brand-name {
  font-family: inherit; font-weight: 800; font-size: 22px; letter-spacing: .01em;
  color: var(--coral); /* brand wordmark single-colour coral */
}
.aura-brand-strap { font-size: 13.5px; font-weight: 500; color: var(--blue); opacity: .83; margin-top: 2px; }
.aura-logo-base { width: 100%; height: 100%; display: block; content: url('https://cdn.booksesh.com/media/2026/09/13002604/booksesh-logo-red-02.png'); object-fit: contain; }
/* Overlay is the SAME real logo asset, feather-masked to just the heart-B region.
   STATIC (owner directive, logomobile pass): the breathing/pulsing animation was removed
   so the heart-B is completely flat — the overlay simply sits at full opacity over the
   masked heart-B region (identical pixels to the base beneath it), so size, position,
   colour, pin-circle and lock-up are all unchanged; only the motion is gone. The mobile
   header strip (.aura-mhead .aura-logo-b) shares this exact hook, so it is static too. */
/* ASSET-QUALITY FIX (logo sharpness): the overlay was ONLY ever a second copy of the
   same asset, masked to the heart-B centre, to power the (now-removed) breathing. With
   the animation gone it is purely redundant — a second rasterisation of the identical
   pixels stacked on the base <img>, which introduced a faint sub-pixel ghost/softening
   over the pin centre. Hidden here so the crisp base <img> alone renders. Size, position,
   colour, pin-circle, lock-up and static state are all unchanged (the base IS the full
   logo). Shared hook, so both the desktop lock-up and the mobile header strip benefit. */
.aura-logo-b {
  display: none;
  position: absolute; inset: 0;
  background-position: center; background-repeat: no-repeat; background-size: 100% 100%;
  -webkit-mask: radial-gradient(circle at 53% 42%, #000 22%, rgba(0,0,0,0) 44%);
          mask: radial-gradient(circle at 53% 42%, #000 22%, rgba(0,0,0,0) 44%);
  transform-origin: 53% 42%;
}
.aura-logo-word { font-size: 15px; font-weight: 600; color: var(--body-ink); letter-spacing: .01em; }

.aura-h1 {
  font-weight: 800;
  font-size: clamp(40px, 4.6vw, 60px);
  line-height: 1.04;
  letter-spacing: -.02em;
  color: var(--ink);
  margin: 0 0 var(--hero-gap);
}
/* Keep "near you" from breaking across lines (headline reads Book [Type] / near you). */
.aura-nowrap { white-space: nowrap; }

/* ---------- Hero CPT-type switcher: "Book [TYPE] near you" ----------
   "Book" and "near you" are FIXED. The middle TYPE word lives in a fixed-width slot
   (width reserved in JS to the WIDEST word) so the surrounding words never move and the
   headline never reflows during the lift-up + fade swap. The changing word is coral to
   read as the interactive element; it is also clickable to advance the type. */
.aura-type-slot {
  position: relative; display: inline-block;
  text-align: center; vertical-align: baseline;
}
/* Decorative only (ambient rotation) — NOT an interactive control (capsule chips drive
   selection). Coral with a soft underline accent; default cursor, no hover affordance. */
.aura-type-word {
  display: inline-block; color: var(--lav-deep); cursor: default;
  will-change: transform, opacity;
  text-decoration: underline; text-decoration-color: rgba(122,90,240,.34);
  text-underline-offset: .14em; text-decoration-thickness: .06em;
}
/* Outgoing ghost overlays the slot exactly (absolute) so it can lift+fade without reflow. */
.aura-type-ghost {
  position: absolute; left: 0; right: 0; top: 0;
  text-align: center; color: var(--lav-deep); pointer-events: none;
  text-decoration: underline; text-decoration-color: rgba(122,90,240,.34);
  text-underline-offset: .14em; text-decoration-thickness: .06em;
}
@keyframes aura-word-out { from { opacity: 1; transform: translateY(0); }   to { opacity: 0; transform: translateY(-.34em); } }
@keyframes aura-word-in  { from { opacity: 0; transform: translateY(.36em); } to { opacity: 1; transform: translateY(0); } }
.aura-word-anim-out { animation: aura-word-out .38s var(--ease) forwards; }
.aura-word-anim-in  { animation: aura-word-in  .42s var(--ease) forwards; }

/* Selectable type toggle — restrained pills; must not compete with the booking path. */
.aura-type-switch { display: flex; gap: 8px; flex-wrap: wrap; margin: 0 0 var(--hero-gap); }
.aura-type-chip {
  font-family: inherit; font-size: 13.5px; font-weight: 600; color: var(--body-ink);
  background: var(--white); border: 1px solid var(--stone); border-radius: 999px;
  padding: 7px 16px; cursor: pointer; transition: all .15s var(--ease);
}
.aura-type-chip:hover { border-color: var(--lav); background: var(--soft-lav); }
.aura-type-chip.is-active { background: var(--lav-deep); color: #fff; border-color: var(--lav-deep); }

/* ---------- CPT inventory preview (Events / Venues) ---------- */
.aura-type-inv[hidden] { display: none; }
/* Single shared container — only ever holds ONE type's state at a time (JS replaces its
   contents), so states never overlap. A light min-height steadies the ambient showcase. */
.aura-type-inv { margin: var(--hero-gap) 0 0; max-width: 620px; min-height: 210px; animation: aura-rise .3s var(--ease) both; }
.aura-inv-head { font-size: 12.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #8a8792; margin: 0 0 12px; }
.aura-inv-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }
.aura-inv-card {
  display: flex; flex-direction: column; background: var(--white);
  border: 1px solid var(--stone); border-radius: 16px; overflow: hidden;
  text-decoration: none; color: inherit;
  transition: box-shadow .2s var(--ease), border-color .2s var(--ease), transform .2s var(--ease);
}
.aura-inv-card:hover { box-shadow: 0 8px 26px rgba(9,7,17,.09); border-color: var(--lav); transform: translateY(-2px); }
.aura-inv-thumb { aspect-ratio: 16 / 10; background: var(--soft-lav) center/cover no-repeat; }
.aura-inv-thumb.ph { background: linear-gradient(135deg, var(--soft-lav) 0%, #e6ddfb 100%); }
.aura-inv-b { padding: 10px 12px 12px; }
.aura-inv-t { font-size: 14px; font-weight: 700; color: var(--ink); line-height: 1.25; margin: 0 0 4px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.aura-inv-m { font-size: 12px; color: var(--body-ink); opacity: .75; display: flex; gap: 4px 10px; flex-wrap: wrap; }
.aura-inv-count { font-weight: 600; color: #b7b3bd; letter-spacing: 0; }
/* Desktop "Show more" button (mobile uses the invisible sentinel + infinite scroll). */
.aura-inv-more {
  display: inline-block; margin: 14px 0 0; font-family: inherit; font-size: 14px; font-weight: 700;
  color: var(--ink); background: var(--white); border: 1.5px solid var(--stone); border-radius: 12px;
  padding: 11px 22px; cursor: pointer; transition: border-color .15s var(--ease), background .15s var(--ease), transform .1s var(--ease);
}
.aura-inv-more:hover { border-color: var(--lav); background: var(--soft-lav); }
.aura-inv-more:active { transform: scale(.98); }
.aura-inv-more:disabled { opacity: .6; cursor: default; }
.aura-inv-sentinel { width: 100%; height: 1px; }

/* Premium empty / coming-soon state (never hides the vertical). */
.aura-inv-empty {
  background: linear-gradient(135deg, var(--soft-lav) 0%, #e6ddfb 100%);
  border: 1px solid var(--stone); border-radius: 20px; padding: 26px 24px;
}
.aura-inv-empty h4 { font-size: 20px; font-weight: 800; color: var(--ink); margin: 0 0 6px; letter-spacing: -.01em; }
.aura-inv-empty p { font-size: 14px; color: var(--body-ink); opacity: .8; margin: 0; }

/* Restrained supply-side (partner) CTA — clearly secondary to the customer path. */
.aura-supply {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; font-weight: 600; color: var(--body-ink); opacity: .72;
  text-decoration: none; margin-top: 14px;
  transition: opacity .15s var(--ease), color .15s var(--ease);
}
.aura-supply::before { content: "+"; font-weight: 700; }
.aura-supply:hover { opacity: 1; color: var(--blue); }

.aura-input-wrap {
  display: flex; align-items: center;
  background: var(--white);
  border: 1px solid var(--stone);
  border-radius: var(--radius);
  padding: 6px 6px 6px 20px;
  box-shadow: 0 1px 2px rgba(9,7,17,.04);
  transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
  max-width: 560px;
}
.aura-input-wrap:focus-within {
  border-color: var(--lav-deep);
  box-shadow: 0 0 0 4px rgba(122,90,240,.16);
}
.aura-input {
  flex: 1; border: 0; outline: 0; background: transparent;
  font-family: inherit; font-size: 19px; font-weight: 500;
  color: var(--ink); padding: 14px 8px 14px 0;
  min-width: 0;
}
.aura-input::placeholder { color: #8a8792; font-weight: 500; }
.aura-input--sm { font-size: 16px; padding: 11px 8px 11px 0; }

.aura-send {
  flex: 0 0 auto;
  width: 50px; height: 50px; border-radius: 14px; border: 0;
  background: var(--ink); color: #fff; cursor: pointer;
  display: grid; place-items: center;
  transition: background .18s var(--ease), transform .12s var(--ease);
}
.aura-send:hover { background: var(--lav-deep); }
.aura-send:active { transform: scale(.95); }
.aura-send--sm { width: 42px; height: 42px; border-radius: 12px; }

.aura-hint-row { display: flex; gap: 10px; margin: 20px 0 0; flex-wrap: wrap; }
.aura-chip {
  font-family: inherit; font-size: 14px; font-weight: 600;
  color: var(--body-ink);
  background: var(--white);
  border: 1px solid var(--stone);
  border-radius: 999px; padding: 9px 18px; cursor: pointer;
  transition: all .15s var(--ease);
}
.aura-chip:hover { background: var(--soft-lav); border-color: var(--lav); }
.aura-chip[aria-pressed="true"] { background: var(--lav-deep); color: #fff; border-color: var(--lav-deep); }

.aura-browse-row { display: flex; gap: 22px; margin: 0; flex-wrap: wrap; }
.aura-browse {
  font-size: 15px; font-weight: 600; color: var(--body-ink);
  text-decoration: none; opacity: .78;
  transition: opacity .15s var(--ease), color .15s var(--ease);
}
.aura-browse:hover { opacity: 1; color: var(--blue); }
.aura-browse--alt { opacity: .6; }
.aura-browse--sm { display: inline-flex; align-items: center; gap: 6px; margin-top: 0; font-size: 15px; }
.aura-browse--sm svg { flex: 0 0 auto; }

/* "Take me home" — back on the same row as "Browse all sessions" (owner 2026-09-14).
   Same size as browse (15px), DARK GREY (#252229 --body-ink), left arrow. Returns home. */
.aura-nav-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 14px; flex-wrap: wrap; }
.aura-home-link {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 15px; font-weight: 600; color: var(--body-ink);
  text-decoration: none; opacity: .78; cursor: pointer;
  transition: opacity .15s var(--ease), color .15s var(--ease);
}
.aura-home-link svg { flex: 0 0 auto; }
.aura-home-link:hover, .aura-home-link:focus-visible { opacity: 1; color: var(--blue); }

/* ---------- Landing: two clear paths (guided vs direct) ---------- */
.aura-path--guided { display: flex; flex-direction: column; gap: 8px; margin: 0 0 var(--hero-gap); }
.aura-start {
  align-self: flex-start;
  font-family: inherit; font-size: 18px; font-weight: 700; color: #fff;
  background: var(--ink); border: 0; border-radius: 16px; padding: 17px 30px; cursor: pointer;
  transition: background .16s var(--ease), transform .1s var(--ease);
}
.aura-start:hover, .aura-start:focus-visible { background: var(--coral); }
.aura-start:focus-visible { outline: none; box-shadow: 0 0 0 4px rgba(235,102,109,.30); }
.aura-start:active { transform: scale(.98); }
.aura-path-hint { font-size: 13.5px; color: var(--body-ink); opacity: .68; }

.aura-path-or {
  display: flex; align-items: center; gap: 12px; max-width: 520px; margin: 0 0 var(--hero-gap);
  color: #9a96a3; font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: .08em;
}
.aura-path-or::before, .aura-path-or::after { content: ""; flex: 1; height: 1px; background: var(--stone); }

.aura-path--direct { display: flex; flex-direction: column; gap: 8px; margin: 0 0 var(--hero-gap); }
.aura-path-label { font-size: 13.5px; font-weight: 600; color: var(--body-ink); opacity: .8; }
.aura-input-wrap { max-width: 520px; }
.aura-input-wrap .aura-input { font-size: 16px; }

/* ---------- Booking mode ---------- */
/* Steps phase: single centred column. Results phase (.results-mode): 40/60 split. */
.aura-booking {
  display: block;
  animation: aura-rise .4s var(--ease) both;
}
.aura-booking.results-mode {
  display: grid;
  grid-template-columns: 40% 60%;
  gap: clamp(20px, 3vw, 44px);
  align-items: start;
}

/* ---------- Card-led flow stage ---------- */
.aura-flow { max-width: 720px; margin: 0 auto; }
.aura-trail { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
.aura-trail-chip {
  font-size: 12.5px; font-weight: 600; color: var(--body-ink);
  background: var(--paper); border: 1px solid var(--stone); border-radius: 999px; padding: 6px 13px;
}
.aura-trail-chip b { color: var(--ink); }
.aura-flowcard { animation: aura-rise .3s var(--ease) both; }
.aura-q { font-size: clamp(24px, 3.4vw, 34px); font-weight: 800; color: var(--ink); letter-spacing: -.02em; margin: 0 0 6px; }
.aura-q-sub { font-size: 15px; color: #8a8792; margin: 0 0 20px; }
.aura-q + .aura-choices { margin-top: 18px; }

.aura-choices { display: flex; flex-wrap: wrap; gap: 12px; }
.aura-choice {
  flex: 1 1 150px; min-height: 92px; text-align: left;
  display: flex; flex-direction: column; justify-content: center; gap: 4px;
  font-family: inherit; cursor: pointer;
  background: var(--white); border: 1.5px solid var(--stone); border-radius: 18px; padding: 16px 18px;
  transition: border-color .15s var(--ease), box-shadow .15s var(--ease), transform .1s var(--ease), background .15s var(--ease);
}
.aura-choice:hover { border-color: var(--lav); background: var(--soft-lav); box-shadow: 0 6px 22px rgba(9,7,17,.07); }
.aura-choice:active { transform: scale(.98); }
.aura-choice-t { font-size: 17px; font-weight: 700; color: var(--ink); }
.aura-choice-s { font-size: 13px; color: var(--body-ink); opacity: .7; }

.aura-flowcard-extra { margin-top: 16px; }
.aura-inline { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.aura-inline input[type=text], .aura-inline input[type=date] {
  font-family: inherit; font-size: 15px; border: 1px solid var(--stone); border-radius: 12px; padding: 11px 14px; background: #fff;
}
.aura-inline input:focus { outline: 0; border-color: var(--lav-deep); box-shadow: 0 0 0 3px rgba(122,90,240,.15); }
.aura-mini-cta {
  font-family: inherit; font-size: 14px; font-weight: 600; color: #fff; background: var(--ink);
  border: 0; border-radius: 12px; padding: 11px 18px; cursor: pointer;
}
.aura-mini-cta:hover { background: var(--lav-deep); }
.aura-loading { font-size: 15px; color: #8a8792; }

.aura-svc { display: flex; align-items: center; gap: 8px; width: 100%;
  background: #fff; border: 1.5px solid var(--stone); border-radius: 18px; padding: 6px 6px 6px 18px; }
.aura-svc:focus-within { border-color: var(--lav-deep); box-shadow: 0 0 0 4px rgba(122,90,240,.16); }
.aura-svc .aura-input { flex: 1; font-size: 18px; padding: 12px 0; }

.aura-slider { margin-top: 4px; padding: 14px 16px; background: var(--paper); border-radius: 14px; }
.aura-slider label { font-size: 14px; font-weight: 600; color: var(--ink); display: block; margin-bottom: 8px; }
.aura-slrange { font-weight: 500; color: #8a8792; }
.aura-slider input[type=range] { width: 100%; accent-color: var(--lav-deep); }
.aura-slider .aura-mini-cta { margin-top: 10px; }

.aura-avail-note { font-size: 12.5px; color: #8a8792; margin: -4px 0 8px; }
@keyframes aura-rise { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }

.aura-convo { position: sticky; top: 24px; }
.aura-summary {
  display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px;
}
.aura-summary .tag {
  font-size: 12.5px; font-weight: 600; color: var(--ink);
  background: var(--soft-lav); border-radius: 999px; padding: 6px 13px;
  border: 1px solid rgba(170,150,248,.4);
  /* Editable affordance (lavender interaction cue): the whole chip is a button. */
  font-family: inherit; line-height: 1.25; cursor: pointer;
  display: inline-flex; align-items: center; gap: 5px;
  transition: border-color .15s var(--ease), box-shadow .15s var(--ease), background .15s var(--ease);
}
.aura-summary .tag:hover { border-color: var(--lav-deep); background: #fff; box-shadow: 0 4px 14px rgba(122,90,240,.14); }
.aura-summary .tag:focus-visible { outline: 0; border-color: var(--lav-deep); box-shadow: 0 0 0 3px rgba(122,90,240,.28); }
.aura-summary .tag.is-editing { border-color: var(--lav-deep); background: #fff; box-shadow: 0 0 0 2px rgba(122,90,240,.30); }
.aura-summary .tag b { font-weight: 700; }
.aura-tag-caret { color: var(--lav-deep); font-size: .92em; line-height: 1; margin-left: 1px; }

/* Inline chip editor (results view) — re-opens one dimension's control under the chip row. */
.aura-chip-editor {
  margin: -4px 0 18px; padding: 16px; background: var(--white);
  border: 1.5px solid var(--lav); border-radius: 16px;
  box-shadow: 0 10px 34px rgba(122,90,240,.12);
  animation: aura-fade .2s var(--ease) both;
}
.aura-chip-editor-head {
  display: flex; align-items: center; justify-content: space-between;
  font-size: 13px; font-weight: 700; color: var(--lav-deep);
  text-transform: capitalize; margin-bottom: 12px;
}
.aura-chip-editor-x {
  font-family: inherit; font-size: 22px; line-height: 1; color: #8a8792;
  background: transparent; border: 0; cursor: pointer; padding: 0 4px;
}
.aura-chip-editor-x:hover { color: var(--lav-deep); }
.aura-chip-editor-extra { margin-top: 12px; }
.aura-chip-editor .aura-choices { gap: 10px; }
.aura-chip-editor .aura-choice { min-height: 60px; padding: 12px 14px; flex: 1 1 130px; }
.aura-chip-editor .aura-choice-t { font-size: 15px; }
.aura-chip-editor .aura-slider { margin-top: 12px; }

.aura-thread { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }
.aura-msg { font-size: 16px; line-height: 1.5; max-width: 100%; }
.aura-msg--aura {
  color: var(--ink); font-weight: 600; font-size: 19px; line-height: 1.35;
  animation: aura-fade .24s var(--ease) both;
}
.aura-msg--user {
  color: var(--body-ink); background: var(--paper);
  border-radius: 14px 14px 14px 4px; padding: 10px 14px; align-self: flex-start;
  font-weight: 500;
}
.aura-msg--sys {
  font-size: 13px; color: #8a8792; font-style: italic;
}
@keyframes aura-fade { from { opacity: 0; transform: translateY(6px);} to { opacity:1; transform:none; } }

.aura-typing { display: inline-flex; gap: 4px; padding: 4px 0; }
.aura-typing i { width: 7px; height: 7px; border-radius: 50%; background: var(--lav); opacity: .5; animation: aura-blink 1s infinite; }
.aura-typing i:nth-child(2){ animation-delay:.15s } .aura-typing i:nth-child(3){ animation-delay:.3s }
@keyframes aura-blink { 0%,100%{opacity:.3;transform:translateY(0)} 50%{opacity:1;transform:translateY(-3px)} }

.aura-refine { display: flex; align-items: center; gap: 8px;
  background: var(--white); border: 1px solid var(--stone); border-radius: 16px;
  padding: 4px 4px 4px 16px; max-width: 420px; }
.aura-refine:focus-within { border-color: var(--lav-deep); box-shadow: 0 0 0 3px rgba(122,90,240,.15); }

/* ---------- Result cards ---------- */
.aura-results { display: flex; flex-direction: column; gap: 16px; min-height: 40px; }
.aura-results-head { font-size: 14px; font-weight: 600; color: #8a8792; margin: 2px 0 0; }

.aura-card {
  display: grid; grid-template-columns: 116px 1fr; gap: 16px;
  background: var(--white); border: 1px solid var(--stone);
  border-radius: 22px; padding: 14px; align-items: stretch;
  transition: box-shadow .2s var(--ease), border-color .2s var(--ease), transform .25s var(--ease);
  animation: aura-rise .35s var(--ease) both;
}
.aura-card:hover { box-shadow: 0 8px 30px rgba(9,7,17,.09); border-color: var(--lav); }
.aura-card-img {
  border-radius: 14px; background: var(--soft-lav) center/cover no-repeat;
  min-height: 116px; position: relative; overflow: hidden;
  display: grid; place-items: center;
}
/* Tasteful graphic placeholder (used when a listing has no root featured image) —
   a soft brand-gradient tile with a large translucent monogram, not a bare letter. */
.aura-card-img.aura-ph {
  background: linear-gradient(135deg, var(--soft-lav) 0%, #e6ddfb 100%);
}
.aura-card-img.aura-ph::after {
  content: ""; position: absolute; inset: 0;
  background: radial-gradient(circle at 30% 25%, rgba(170,150,248,.35), transparent 60%);
}
.aura-card-img.aura-ph span {
  position: relative; z-index: 1;
  font-family: inherit; font-weight: 800; font-size: 40px; color: rgba(9,7,17,.18);
}
.aura-card-body { display: flex; flex-direction: column; min-width: 0; }
.aura-card-type {
  font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--lav); margin-bottom: 4px;
}
.aura-card-title { font-size: 17px; font-weight: 700; color: var(--ink); line-height: 1.2; margin: 0 0 2px; }
.aura-card-biz { font-size: 14px; color: var(--body-ink); opacity: .8; margin: 0 0 8px; }
.aura-card-meta { font-size: 13.5px; color: var(--body-ink); display: flex; flex-wrap: wrap; gap: 4px 12px; margin-bottom: 12px; }
.aura-card-meta .price { font-weight: 700; color: var(--ink); }
.aura-card-cta {
  margin-top: auto; align-self: flex-start;
  font-family: inherit; font-size: 14.5px; font-weight: 600;
  color: #fff; background: var(--blue); border: 0; border-radius: 12px;
  padding: 10px 18px; cursor: pointer; transition: background .15s var(--ease), transform .1s var(--ease);
}
.aura-card-cta:hover { background: var(--ink); }
.aura-card-cta:active { transform: scale(.97); }
.aura-card-cta.coral { background: var(--coral); }

.aura-slots { grid-column: 1 / -1; margin-top: 4px; padding-top: 12px; border-top: 1px solid var(--paper); }
.aura-slots-note {
  font-size: 12px; color: #b06a00; background: #fff7e6; border: 1px solid #ffe0a3;
  border-radius: 8px; padding: 6px 10px; margin-bottom: 10px; display: inline-block;
}
.aura-slot-row { display: flex; gap: 8px; flex-wrap: wrap; }
.aura-slot {
  font-family: inherit; font-size: 14px; font-weight: 600; color: var(--ink);
  background: var(--white); border: 1px solid var(--stone); border-radius: 10px;
  padding: 9px 15px; cursor: pointer; transition: all .12s var(--ease);
}
.aura-slot:hover, .aura-slot.sel { background: var(--ink); color: #fff; border-color: var(--ink); }

.aura-more { font-size: 14px; font-weight: 600; color: var(--body-ink); background: none;
  border: 0; cursor: pointer; padding: 8px 0; opacity: .8; }
.aura-more:hover { color: var(--blue); }

/* review + detail compact steps live in results column */
.aura-panel {
  background: var(--paper); border: 1px solid var(--stone); border-radius: 22px; padding: 22px;
  animation: aura-rise .3s var(--ease) both;
}
.aura-panel h3 { font-size: 14px; font-weight: 600; color: #8a8792; margin: 0 0 6px; text-transform: uppercase; letter-spacing: .05em; }
.aura-review-title { font-size: 24px; font-weight: 800; color: var(--ink); margin: 0 0 4px; }
.aura-review-line { font-size: 15px; color: var(--body-ink); line-height: 1.6; }
.aura-review-price { font-size: 26px; font-weight: 800; color: var(--ink); margin-top: 10px; }
.aura-detail-field { display: block; margin: 12px 0 0; }
.aura-detail-field input {
  width: 100%; box-sizing: border-box; font-family: inherit; font-size: 16px;
  border: 1px solid var(--stone); border-radius: 12px; padding: 12px 14px; background:#fff;
}
.aura-detail-field input:focus { outline: 0; border-color: var(--lav-deep); box-shadow: 0 0 0 3px rgba(122,90,240,.15); }
.aura-cta-lg {
  width: 100%; margin-top: 16px; font-family: inherit; font-size: 16px; font-weight: 700;
  color: #fff; background: var(--coral); border: 0; border-radius: 14px; padding: 15px; cursor: pointer;
  transition: background .15s var(--ease), transform .1s var(--ease);
}
.aura-cta-lg:hover { background: #d9535a; }
.aura-cta-lg:active { transform: scale(.99); }

/* ---------- Payment overlay (stub) ---------- */
.aura-pay[hidden] { display: none; }
.aura-pay { position: fixed; inset: 0; z-index: 9999; display: grid; place-items: center; }
.aura-pay-dim { position: absolute; inset: 0; background: rgba(9,7,17,.55); backdrop-filter: blur(3px); animation: aura-fade .3s var(--ease) both; }
.aura-pay-sheet {
  position: relative; z-index: 1; width: min(460px, 92vw);
  background: #fff; border-radius: 24px; padding: 30px;
  box-shadow: 0 30px 80px rgba(9,7,17,.4); animation: aura-rise .35s var(--ease) both;
}
.aura-pay-close { position: absolute; top: 16px; right: 16px; background: none; border: 0; font-size: 18px; cursor: pointer; color: var(--body-ink); }
.aura-stub-badge {
  display: inline-block; font-size: 11px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase;
  color: #b06a00; background: #fff7e6; border: 1px solid #ffe0a3; border-radius: 999px; padding: 4px 12px; margin-bottom: 14px;
}
.aura-booked-title { font-size: 34px; font-weight: 800; color: var(--ink); margin: 6px 0 12px; letter-spacing: -.02em; }
.aura-booked-ref { font-family: ui-monospace, Menlo, monospace; font-size: 14px; background: var(--soft-lav); border-radius: 8px; padding: 6px 12px; display: inline-block; }
.aura-booked-actions { display: flex; gap: 10px; margin-top: 20px; flex-wrap: wrap; }
.aura-booked-actions a, .aura-booked-actions button {
  font-family: inherit; font-size: 14px; font-weight: 600; text-decoration: none; cursor: pointer;
  border-radius: 12px; padding: 11px 16px; border: 1px solid var(--stone); background: #fff; color: var(--ink);
}
.aura-booked-actions .primary { background: var(--ink); color: #fff; border-color: var(--ink); }

/* ---------- STEP 2: real iframe wizard handoff + server-verified readback (payment-test-path
   plan, 2026-09-13). Additive only -- shares .aura-pay/.aura-stub-badge/.aura-cta-lg with the
   stub above; nothing here is reachable unless CFG.paymentTestEnabled is on. ---------- */
.aura-handoff-skel { padding: 6px 0 2px; }
.aura-handoff-skel-bar {
  height: 14px; border-radius: 7px; margin-bottom: 10px;
  background: linear-gradient(90deg, var(--soft-lav) 25%, #eee7ff 37%, var(--soft-lav) 63%);
  background-size: 400% 100%; animation: aura-handoff-shimmer 1.4s ease infinite;
}
@keyframes aura-handoff-shimmer { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
.aura-handoff-frame { width: 100%; height: min(70vh, 620px); border: 0; border-radius: 14px; background: #fff; }
.aura-handoff-verify[hidden] { display: none; }
.aura-handoff-verify { margin-top: 14px; }
.aura-handoff-result { font-size: 13px; color: #6b6774; margin-top: 10px; min-height: 1.2em; }

/* ---------- STEP 2 desktop: trapped-modal fix (owner 2026-09-13). On short desktop
   viewports (e.g. 1366x720) the handoff sheet's natural height (badge + heading + 620px
   iframe + padding) exceeds the viewport; grid `place-items:center` on .aura-pay then
   centres it with the TOP clipped above y=0, hiding the close X (top:16px, inside the
   sheet) above the visible viewport and trapping the user. Fix: cap the sheet at 90vh and
   let it flex-shrink internally (#aura-pay-body -> .aura-handoff-frame) so the whole sheet
   — including the close X pinned at its own top:16px — always stays within the viewport.
   Scoped to the handoff sheet ONLY via :has(.aura-handoff-frame) so the stub payment /
   booked / details sheets (which size to their own content, never this tall) are
   byte-identical. Desktop only (min-width:821px) -- the <=820px full-screen overlay
   further below is untouched. A small top margin nudges the centred sheet a little below
   dead-centre (cosmetic only, not required for the fix). */
@media (min-width: 821px) {
  .aura-pay-sheet:has(.aura-handoff-frame) {
    /* DESKTOP-ONLY enlarge (owner 2026-09-14): the base sheet is min(460px,92vw) which
       squeezed the booking iframe on desktop. Widen to a large comfortable modal; the
       frame flex-fills. Mobile (<=820px full-screen) + stub/booked sheets untouched. */
    /* Narrowed (owner 2026-09-14): the Booknetic wizard content is ~830px and LEFT-aligned
       inside the frame, so a 1100px sheet left a wide dead strip on the right (uncentred on
       large monitors). Hug the content so the frame reads centred. Booknetic reflows fine at
       this width; 94vw fallback keeps smaller desktops safe. */
    width: min(880px, 94vw);
    max-width: min(880px, 94vw);
    height: min(90vh, 880px);   /* fixed large height so the sheet is reliably big and the iframe flex-fills (not content-sized/short) */
    max-height: 90vh;
    margin-top: 2vh;
    display: flex;
    flex-direction: column;
  }
  .aura-pay-sheet:has(.aura-handoff-frame) #aura-pay-body {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
  }
  .aura-pay-sheet:has(.aura-handoff-frame) .aura-handoff-frame {
    flex: 1 1 auto;
    min-height: 0;
    height: auto;
  }
  /* Close X is position:absolute within the sheet itself (not the flexed body), so as
     long as the sheet stays <=90vh (guaranteed above) it is always inside the viewport;
     no sticky/scroll handling needed. z-index keeps it above the iframe. */
  .aura-pay-sheet:has(.aura-handoff-frame) .aura-pay-close {
    z-index: 2;
  }
}

/* ---------- Desktop hero: left-flush single-rhythm grid, lifted slightly ----------
   The lock-up and H1 are both left-flush children of .aura-landing, so the brand
   lock-up's left edge aligns exactly with the H1's left edge. A small upward nudge
   (--hero-lift) lifts the whole vertically-centred lock-up so it doesn't sit low. */
@media (min-width: 821px) {
  /* A per-type inventory panel is always present now, so top-align the hero (instead of
     vertically centring) to keep the lock-up/H1 in place and let the panel flow below. */
  /* Vertical rebalance (desktop): reposition the WHOLE hero/content frame as one unit so
     the composition (logo -> H1 -> CPT capsules/CTA/search -> inventory row -> Show more /
     + List) sits evenly balanced and drops proportionately when the inventory row leaves
     breathing room. `safe center` centres the whole frame when it fits the viewport (even
     rhythm, breathing room retained) and falls back to top-anchored start alignment when
     the content is taller than the viewport (never clips the logo). This changes ONLY the
     frame's vertical positioning — every intra-group and inter-element gap is untouched, so
     it applies identically to the Sessions, Events and Venues (coming-soon) states. */
  /* DESKTOP VERTICAL CENTRING (2026-09-13, supersedes the earlier `safe flex-end`
     bottom-anchored drop): on large screens the composition read tiny + sank to the
     bottom of the tall left pane. Centre the WHOLE frame vertically instead -- `safe
     center` balances the composition in the middle of the pane (landing hero AND the
     results two-column view both live inside this stage, so both centre together) and
     `safe` keeps the top-anchored fallback when content is taller than the viewport
     (never clips the logo/heading). Balanced symmetric padding gives even breathing room
     top + bottom. Only the frame's vertical anchoring changes -- every intra-group and
     inter-element gap is untouched, so it applies identically to Sessions / Events /
     Venues in BOTH the landing and results states. */
  .aura-stage { justify-content: safe center; padding-top: clamp(40px, 6vh, 84px); padding-bottom: clamp(40px, 6vh, 84px); }

  /* Shift the ENTIRE left content column inward (one padding change on the shared
     container) so the lock-up/H1/CTA/input/Browse all sit farther from BOTH the left
     viewport edge AND the centre image seam — responsive so it breathes laptop→desktop.
     Internal left-edge alignment/rhythm is preserved (all children are left-flush inside
     this padded container). Mobile/tablet are untouched (this is min-width:821px only). */
  /* Logo-lockup left-alignment (desktop): the H1's "B" glyph sits at the container's left
     content edge, but the pin ART inside the square logo box has ~22.7% transparent left
     padding, so the VISIBLE pin previously started ~0.227*--logo-size to the right of the
     "B". Shift the WHOLE lock-up left by exactly that padding (as one unit — icon +
     BOOKSESH.COM + strapline move together) so the visible pin's left edge lines up with
     the "B". Vertical position, size, colour, internal spacing and the flat/static logo
     are all unchanged. Mobile is untouched (.aura-brand is display:none there). */
  .aura-brand { margin-left: calc(-0.227 * var(--logo-size)); margin-top: -20px; gap: 4px; }

  /* Bottom action row: comfortable HORIZONTAL gap between the "Show more <type>" button and
     the "+ List your <type> ->" supply link. The two are emitted directly adjacent with no
     whitespace between them, so the "+" would otherwise sit squashed against the button.
     The adjacent-sibling selector only matches when the button precedes the link (desktop
     Show-more path), so mobile -- which renders an invisible scroll sentinel instead of the
     button -- is unaffected. */
  .aura-inv-more + .aura-supply { margin-left: 22px; }

  .aura-landing {
    margin-top: calc(-1 * var(--hero-lift));
    box-sizing: border-box;
    /* Width tracks the left half so the column never rides onto the clear image;
       padding shifts the whole column inward from BOTH the left edge and the seam. */
    max-width: min(600px, 50vw);
    padding-left: clamp(16px, 3.2vw, 48px);
    padding-right: clamp(24px, 4vw, 72px);
  }

  /* --- Strapline width-match (desktop): spread "Your booking concierge" to ~the same
     ink width as the coral BOOKSESH.COM wordmark above it (mirrors the mobile
     .aura-mhead-strap letter-spacing approach; DIFFERENT class, so mobile is untouched).
     Measured wordmark ink = 194.2px; a small +1px font bump (13.5->14.5px) plus 0.09em
     tracking lands the strap ink at ~194px (within ~0.3px). Stays BLUE (--blue @ .83
     opacity), weight 500, clearly SECONDARY; not stretched unnaturally. */
  .aura-brand-strap { font-size: 14.5px; letter-spacing: 0.09em; }

  /* --- Desktop inventory heading removed (owner 2026-09-13): the desktop variant renders
     as <p class="aura-inv-head"> ("Live <type> now") with NO --calm modifier; the mobile
     variant is <p class="aura-inv-head aura-inv-head--calm"> ("Explore <type>"). Hiding
     :not(.aura-inv-head--calm) inside this desktop-only block removes the desktop
     "Live sessions now" label (cards sit directly under the search/Browse area) while the
     mobile "Explore sessions" label stays untouched. */
  .aura-inv-head:not(.aura-inv-head--calm) { display: none; }

  /* --- Bigger logo-lockup -> H1 breathing gap (owner 2026-09-13): add top spacing to the
     H1 (first element of the sub-frame) so EVERYTHING from the H1 downward — H1, CPT
     capsules, Help-me-choose, search, Browse, cards, bottom action row — drops as ONE
     coordinated unit with intra-group spacing intact. Adjacent-sibling vertical margins
     collapse, so logo->H1 gap becomes ~max(hero-gap, this) — roughly doubled (~19->~38px
     @ 900h). Coordinated with the pass-15 `safe flex-end` frame anchor: the bottom action
     row still sits near the pane bottom and `safe` prevents any top clip. */
  .aura-h1 { margin-top: clamp(30px, 4.2vh, 50px); font-size: clamp(46px, 5.4vw, 74px); }

  /* ============================================================================
     DESKTOP SCALE-UP (2026-09-13) -- owner: on large screens the composition read
     tiny/"drowning" in the left pane. Enlarge every UI element as ONE coordinated
     scale so the content fills the real estate. ALL rules live inside this
     @media (min-width:821px) block => MOBILE (max-width:820px) is completely
     unchanged. Relative rhythm preserved (scale, not distort). Covers BOTH the
     landing hero AND the results (post-search) two-column view; identical across
     Sessions / Events / Venues. ============================================== */

  /* Logo lock-up: modest pin bump (76 -> 86px). The H1-"B" left-alignment offset
     (.aura-brand margin-left: -0.227*--logo-size) tracks the token automatically,
     so the pin stays lined up with the H1's "B". Wordmark/strapline unchanged. */
  #aura-home { --logo-size: 86px; }

  /* --- Landing hero controls --- */
  /* CPT capsules (owner emphasis: noticeably bigger). */
  .aura-type-switch { gap: 10px; }
  .aura-type-chip { font-size: 16px; padding: 11px 24px; }

  /* "Help me choose ->" primary CTA. */
  .aura-start { font-size: 21px; padding: 19px 38px; border-radius: 18px; }

  /* "OR . DESCRIBE IT" divider + direct-search input + its arrow. */
  .aura-path-or { font-size: 14.5px; }
  .aura-input-wrap { max-width: 560px; padding: 7px 7px 7px 22px; }
  .aura-input-wrap .aura-input { font-size: 18.5px; padding: 15px 8px 15px 0; }
  .aura-send { width: 56px; height: 56px; border-radius: 16px; }
  .aura-send svg { width: 22px; height: 22px; }

  /* Widen the left column so the scaled-up content fills the pane while the 3
     inventory cards stay comfortably in one row (kept off the image seam by the
     right padding of .aura-landing). */
  .aura-landing { max-width: min(660px, 52vw); }
  .aura-type-inv { max-width: 660px; }

  /* Inventory cards a touch larger (grid min column width unchanged so 3 stay in
     one row; the wider column makes each card bigger). Text + Show-more scaled. */
  .aura-inv-t { font-size: 15.5px; }
  .aura-inv-m { font-size: 13px; }
  .aura-inv-b { padding: 12px 14px 14px; }
  .aura-inv-more { font-size: 15px; padding: 13px 26px; }
  .aura-supply { font-size: 14px; }

  /* --- Results (post-search) two-column view -- brought up + scaled up --- */
  /* Editable filter/summary chips (Service/Format/Where/When/Time/Budget). */
  .aura-summary { gap: 10px; margin-bottom: 20px; }
  .aura-summary .tag { font-size: 14.5px; padding: 9px 16px; }

  /* "N strong matches" heading + helper copy line. */
  .aura-results { gap: 20px; }
  .aura-results-head { font-size: 17px; }
  .aura-avail-note { font-size: 14px; }

  /* Result cards: bigger overall (image, padding, radius) -- the two-column 40/60
     structure is preserved (only the card internals scale). */
  .aura-card { grid-template-columns: 140px 1fr; gap: 20px; padding: 18px; border-radius: 24px; }
  .aura-card-img { min-height: 140px; }
  .aura-card-img.aura-ph span { font-size: 48px; }
  .aura-card-title { font-size: 20px; }
  .aura-card-biz { font-size: 15.5px; }
  .aura-card-meta { font-size: 15px; gap: 5px 14px; margin-bottom: 14px; }
  /* "See times" button. */
  .aura-card-cta { font-size: 16px; padding: 12px 22px; }

  /* "Refine, or ask for a change..." input. */
  .aura-refine { max-width: 480px; padding: 6px 6px 6px 20px; }
  .aura-refine .aura-input { font-size: 17px; padding: 13px 0; }
}

/* ---------- Mobile ---------- */
@media (max-width: 820px) {
  /* ----- Mobile brand moves into a compact preview-owned header strip (top) -----
     Heart-B pin on the LEFT + BOOKSESH.COM with a smaller BLACK strapline beside it.
     Vertically centred; compact fixed height so the header is not inflated. */
  .aura-mhead {
    display: flex; align-items: center; gap: 10px;
    height: var(--m-header-h); padding: 0 clamp(14px, 4.5vw, 20px);
    background: #fff; position: relative; z-index: 5; box-sizing: border-box;
  }
  /* Heart-B pin enlarged ~18% (38 -> 45px); only the heart-B breathes (pin static). */
  .aura-mhead .aura-logo { width: 45px; height: 45px; }
  .aura-mhead-text { display: flex; flex-direction: column; line-height: 1.14; }
  .aura-mhead-name { font-weight: 800; font-size: 15px; letter-spacing: .01em; color: var(--coral); }
  /* Secondary strapline: BLACK, lighter, clearly subordinate. A subtle letter-spacing
     increase spreads it to ~the same visual width as "BOOKSESH.COM" (no unnatural stretch).
     Tuned width parity — see pass-9 measurement note. */
  .aura-mhead-strap { font-size: 10.5px; font-weight: 500; color: #111; letter-spacing: .055em; margin-top: 1px; } /* smaller BLACK secondary text */
  /* The in-hero lock-up is hidden on mobile — the hero now starts at the H1. */
  .aura-brand { display: none; }

  /* Hero image becomes a band directly BELOW the header strip (curve + fade kept). */
  .aura-hero-media { width: 100%; top: var(--m-header-h); height: 24vh; opacity: .78; }
  .aura-hero-slide { object-position: center 22%; border-bottom-left-radius: 24px; border-bottom-right-radius: 24px; }
  .aura-hero-fade { background: linear-gradient(180deg, rgba(255,255,255,0) 58%, rgba(255,255,255,.45) 84%, #fff 100%); }

  /* The content stack sits below the header strip + image band; min-height auto so
     there is comfortable whitespace below Browse rather than a forced full screen.
     Pass-9: dropped slightly LOWER (larger image->H1 gap, uses lower whitespace for
     rhythm) and given a touch more horizontal room (comfortable ~16-18px side margins,
     also gives the enlarged H1 one-line headroom). NOT vertically centred. */
  .aura-stage {
    justify-content: flex-start;
    /* image->title gap lifted UP to sit right beneath the hero image band (owner
       orange-arrow target, 2026-09-13): tightened from +22px -> +6px so the title
       rises close under the image. This top offset is the ONLY thing that governs the
       mobile image->title gap; the whole stack below (chips/CTA/OR/input/Browse/teaser)
       rides up together as one unit with its INTERNAL rhythm fully unchanged. */
    padding-top: calc(24vh + 6px);
    padding-bottom: 30px;
    padding-left: clamp(16px, 4vw, 24px);
    padding-right: clamp(16px, 4vw, 24px);
    min-height: auto;
  }

  /* ----- ONE centred hero stack with a deliberate (non-uniform) rhythm -----
     H1 -> balanced -> CTA -> breathing -> OR -> compact -> input -> section break -> Browse.
     CTA, OR divider and input share the same centre axis (all centred on the viewport). */
  /* H1 nudged up slightly (still one line at 360/390/440 — verified pass-9). */
  /* SECTION LIFT (mobile): the ONLY change is the title->section top offset — the whole
     interaction section (capsules + Help me choose + OR + input + Browse + inventory teaser)
     rides up together as one unit to sit closer beneath the title. The title itself, its
     size/position, and the section's INTERNAL spacing are all unchanged; just this bottom
     gap shrinks (~9px lift across 360-440). Reconciled with the peek offset below. */
  /* TITLE->CHIPS gap matched to the CHIPS->CTA gap (owner 2026-09-13): margin-bottom now
     uses the SAME token as .aura-type-switch's bottom margin (var(--m-gap)) so title->chips
     == chips->"Help me choose". This adds ~9px vs the old clamp(6px,1.8vw,12px); that extra
     is absorbed one-for-one by shrinking the SEARCH->Browse gap below (.aura-path--direct
     margin-bottom = --m-gap-break - 9px) so "Browse all sessions" stays at ~its position.
     H1 size/position/behaviour unchanged; only this bottom gap grows. */
  .aura-h1 { text-align: center; font-size: clamp(22px, 6.15vw, 40px); margin: 0 0 var(--m-gap); }
  .aura-path--guided { align-items: center; margin: 0 0 var(--m-gap-lg); }
  .aura-start { align-self: center; font-size: 15px; padding: 11px 24px; } /* tightened height */
  /* OR divider + direct search share ONE centred width (=> same centre axis as H1/CTA/
     Browse). Widened modestly to 380 (comfortable side margins come from the stage's
     symmetric horizontal padding); capped by content width on the narrowest phones. */
  .aura-path-or { max-width: 380px; margin: 0 auto var(--m-gap-sm); justify-content: center; }
  /* SEARCH->Browse gap reduced by ~9px (owner 2026-09-13) to absorb the ~9px added to the
     TITLE->CHIPS gap above, so "Browse all sessions" holds ~its previous vertical position
     (measured within <1px across 360/390/440 + tall). Plenty of slack here (--m-gap-break
     34-62px), so the section may drop a touch overall — acceptable. Browse row untouched. */
  .aura-path--direct { max-width: 380px; margin: 0 auto calc(var(--m-gap-break) - 9px); }
  /* Input fills the centred direct container (matches the OR divider width); no auto
     margins here — those would shrink a flex item to content instead of stretching. */
  .aura-input-wrap { max-width: none; padding: 5px 5px 5px 18px; }
  .aura-input { font-size: 14px; padding: 12px 8px 12px 0; }
  .aura-send { width: 42px; height: 42px; border-radius: 12px; }
  .aura-send svg { width: 18px; height: 18px; }
  .aura-browse-row { justify-content: center; margin: 0; }
  /* CPT switcher on mobile: chips + inventory centred to the same axis as the stack. */
  .aura-type-switch { justify-content: center; margin: 0 0 var(--m-gap); }
  /* INVENTORY SNEAK-PREVIEW (mobile first view): push the teaser down so ONLY ~10–20% of
     the first session-card row peeks above the fixed bottom nav — a deliberate "there's
     real inventory below" cue, not a catalogue. The bottom nav is ~60px tall (fixed), so
     the fold ≈ 100dvh − 60. The hero stack above is ~constant per width, so a viewport-
     height-relative offset lands the first card row's top a card-fraction below the fold
     across 360–440px + tall phones (verified peek 11–16%). max() floor keeps the normal
     section gap on any short viewport where the calc would go small/negative. */
  .aura-type-inv {
    max-width: none; text-align: center;
    /* Peek bumped from ~10-20% to ~25-30% of the first card row above the bottom nav:
       a larger subtrahend lifts the teaser row higher into view (still a teaser, not a
       catalogue). Combined with the tightened image->title gap above (both raise the row).
       Re-measured across 360/390/440 + tall phones. max() floor keeps a sane gap on short
       viewports where the calc would go small/negative. */
    margin-top: max(var(--m-gap-lg), calc(67vh  - 424px));
    margin-top: max(var(--m-gap-lg), calc(67dvh - 424px));
  }
  /* Quieter, editorial section label on mobile ("Explore sessions"): calmer than the
     desktop "LIVE SESSIONS NOW" — lower weight, sentence case (no uppercase tracking) and
     softer colour so it reads as an invitation, not a dashboard readout. The (N of TOTAL)
     count is dropped from the visible label (kept in the DOM for the unchanged pagination
     mechanism — appendNew still updates it). Desktop label/behaviour is untouched. */
  .aura-inv-head--calm {
    font-weight: 600; letter-spacing: .01em; text-transform: none;
    font-size: 14px; color: #6f6b78;
  }
  .aura-inv-head--calm .aura-inv-count { display: none; }
  .aura-inv-grid { grid-template-columns: 1fr 1fr; text-align: left; }
  .aura-inv-b { text-align: left; }
  .aura-inv-empty { text-align: center; }
  .aura-booking.results-mode { grid-template-columns: 1fr; }
  .aura-convo { position: static; }
  .aura-choice { flex: 1 1 44%; min-height: 78px; }
  .aura-q { font-size: clamp(22px, 6vw, 28px); }
  .aura-card { grid-template-columns: 92px 1fr; }
  .aura-card-img { min-height: 92px; }
  #aura-home[data-mode="booking"] .aura-stage { padding-top: clamp(20px, 4vh, 40px); }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  #aura-home *, #aura-home *::before, #aura-home *::after {
    animation-duration: .001ms !important; animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
  }
}

/* ---------- STEP 2 mobile: full-width Booknetic wizard iframe inside the handoff modal
   (owner 2026-09-13). Scoped to the handoff sheet ONLY via :has(.aura-handoff-frame) so
   the stub payment/booked/details sheets are unchanged; desktop (>=821px) untouched;
   payment/deep-link/flow/copy untouched. Falls back gracefully if :has() unsupported. ---------- */
@media (max-width: 820px) {
  .aura-pay-sheet:has(.aura-handoff-frame) {
    width: 100vw;
    max-width: 100vw;
    border-radius: 16px 16px 0 0;
    padding: max(14px, env(safe-area-inset-top)) 8px calc(12px + env(safe-area-inset-bottom));
  }
  .aura-pay-sheet:has(.aura-handoff-frame) .aura-handoff-frame {
    width: 100%;
    height: min(80vh, 720px);
    border-radius: 10px;
  }
  /* keep the close button reachable below any notch */
  .aura-pay-sheet:has(.aura-handoff-frame) .aura-pay-close {
    top: max(14px, env(safe-area-inset-top));
    right: 12px;
  }
}

/* ---------- STEP 2 mobile: TRUE full-screen handoff overlay above ALL host chrome
   (owner 2026-09-13). Widening the sheet above exposed the problem underneath it: the
   host's fixed Voxel mobile bottom nav (Menu/Home/Sign-in bar) and the Super Aura chat
   FAB/panel sit on top of Booknetic's own sticky Next/Back/Confirm footer inside the
   iframe, blocking it on mobile. Gated on body.aura-handoff-open, toggled ONLY for the
   flag-ON handoff in aura-home.js (openWizardHandoff / payClose) -- so this is fully
   inert when the modal is closed, on desktop (>=821px), and for the flag-OFF stub
   payment sheet (payment()) which never sets the class. Selectors for the host chrome
   were discovered at runtime (Playwright, 411x915 mobile viewport against the live
   /aura-home-demo/ page) rather than guessed:
     - Voxel bottom nav: the single mobile-only (elementor-hidden-desktop/laptop) fixed
       Elementor container that wraps the ts-user-bar widget (Menu / Home / Sign-in
       icons) -- targeted via the stable Voxel widget class, not the auto-generated
       Elementor element id, so it survives Elementor re-saves.
     - Aura chat FAB: #bksesh-sa-launcher (the purple bubble button) and its flyout
       panel #bksesh-sa-panel, both stable plugin-owned ids.
   No other fixed-position elements were found near the bottom of the mobile viewport. */
@media (max-width: 820px) {
  body.aura-handoff-open {
    overflow: hidden;
    position: fixed;
    inset: 0;
    width: 100%;
  }
  body.aura-handoff-open .aura-pay {
    position: fixed;
    inset: 0;
    height: 100dvh;
    width: 100vw;
    z-index: 2147483000;
  }
  body.aura-handoff-open .aura-pay-sheet:has(.aura-handoff-frame) {
    width: 100vw;
    max-width: 100vw;
    height: 100dvh;
    max-height: 100dvh;
    border-radius: 0;
    display: flex;
    flex-direction: column;
    padding: max(14px, env(safe-area-inset-top)) 0 env(safe-area-inset-bottom);
  }
  /* #aura-pay-body (the innerHTML target in openWizardHandoff -- badge/h3/iframe/verify
     box are all its direct children) sits between the sheet and the iframe, so the flex
     chain has to pass through it too or the iframe only ever gets its content height. */
  body.aura-handoff-open .aura-pay-sheet:has(.aura-handoff-frame) #aura-pay-body {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-height: 0;
    width: 100%;
  }
  body.aura-handoff-open .aura-pay-sheet:has(.aura-handoff-frame) .aura-handoff-frame {
    flex: 1 1 auto;
    width: 100%;
    height: auto;
    min-height: 0;
    border-radius: 0;
    padding-bottom: env(safe-area-inset-bottom);
  }
  body.aura-handoff-open .aura-pay-sheet:has(.aura-handoff-frame) .aura-handoff-verify {
    flex: 0 0 auto;
  }
  body.aura-handoff-open .aura-pay-sheet:has(.aura-handoff-frame) .aura-pay-close {
    top: max(14px, env(safe-area-inset-top));
    right: 12px;
    z-index: 2;
  }
  /* Host chrome, hidden only while the overlay is open */
  body.aura-handoff-open .elementor-hidden-desktop.elementor-hidden-laptop:has(.elementor-widget-ts-user-bar),
  body.aura-handoff-open #bksesh-sa-launcher,
  body.aura-handoff-open #bksesh-sa-panel {
    display: none !important;
  }
}
