/**
 * Imaging Booking Pro — booking widget.
 *
 * A booking form lands inside somebody else's theme, and themes style bare
 * elements — button, input, ul, h2 — with selectors that beat ordinary class
 * rules. So every descendant is reverted to user-agent defaults first, then the
 * widget's own styles are applied on top. `#id .class` (1,1,0) outranks
 * `#id *` (1,0,0), so nothing below is affected by the reset.
 *
 * Layout responds to container width where supported, with viewport fallbacks,
 * because dropped into a narrow column the widget must reflow on its own
 * measurements rather than the browser's.
 */

#ibp-booking-form-wrapper{
    display: block;
    margin: 0;
    padding: 0;
    /* Deliberately no containment anywhere in this file. `container-type`
       makes an element a containing block for position:fixed descendants,
       which detached the booking bar and the overlays from the viewport; and
       the @container rules it enabled were being dropped by the CSS minifier
       that caching plugins run. Viewport queries, no containment. */
}

/* Hard boundary against the host theme.
 *
 * Reverting an explicit element list rather than `*:not(svg):not(svg *)`.
 * Two reasons, both learned the hard way:
 *
 *  - `all: revert` on `*` also overrides SVG presentation attributes (fill,
 *    stroke, stop-color are author-origin at specificity zero), which emptied
 *    the gradients and left the anatomical figure invisible.
 *  - `:not()` holding a descendant combinator is Selectors Level 4. Minifiers
 *    bundled with optimisation plugins routinely fail to parse it, and a
 *    parser that chokes on a selector can drop everything after it. This site
 *    runs NitroPack, so that is not hypothetical.
 *
 * An explicit list is duller and cannot go wrong.
 */
#ibp-booking-form-wrapper div,
#ibp-booking-form-wrapper span,
#ibp-booking-form-wrapper p,
#ibp-booking-form-wrapper a,
#ibp-booking-form-wrapper b,
#ibp-booking-form-wrapper i,
#ibp-booking-form-wrapper em,
#ibp-booking-form-wrapper strong,
#ibp-booking-form-wrapper small,
#ibp-booking-form-wrapper h1,
#ibp-booking-form-wrapper h2,
#ibp-booking-form-wrapper h3,
#ibp-booking-form-wrapper h4,
#ibp-booking-form-wrapper h5,
#ibp-booking-form-wrapper ul,
#ibp-booking-form-wrapper ol,
#ibp-booking-form-wrapper li,
#ibp-booking-form-wrapper dl,
#ibp-booking-form-wrapper dt,
#ibp-booking-form-wrapper dd,
#ibp-booking-form-wrapper nav,
#ibp-booking-form-wrapper aside,
#ibp-booking-form-wrapper main,
#ibp-booking-form-wrapper section,
#ibp-booking-form-wrapper article,
#ibp-booking-form-wrapper header,
#ibp-booking-form-wrapper footer,
#ibp-booking-form-wrapper label,
#ibp-booking-form-wrapper button,
#ibp-booking-form-wrapper input,
#ibp-booking-form-wrapper select,
#ibp-booking-form-wrapper textarea,
#ibp-booking-form-wrapper iframe,
#ibp-booking-form-wrapper code,
#ibp-booking-form-wrapper table,
#ibp-booking-form-wrapper tr,
#ibp-booking-form-wrapper td,
#ibp-booking-form-wrapper th{
    all: revert;
    box-sizing: border-box;
    font-family: inherit;
    -webkit-tap-highlight-color: transparent;
}

/* Elements themes most often reach for. */
/* Checkboxes and radios are excluded. `appearance: none` removes the control
   the browser draws, and nothing replaces it — the box simply disappears. That
   took out the add-on ticks and, worse, the consent checkbox, which a booking
   cannot be completed without. Attribute selectors inside :not() are Selectors
   Level 3 and understood everywhere, unlike the descendant combinator that
   caused trouble in 3.6.4. */
#ibp-booking-form-wrapper button,
#ibp-booking-form-wrapper input:not([type="checkbox"]):not([type="radio"]),
#ibp-booking-form-wrapper select,
#ibp-booking-form-wrapper textarea{
    margin: 0;
    max-width: none;
    min-height: 0;
    text-transform: none;
    letter-spacing: inherit;
    line-height: inherit;
    border-radius: 0;
    box-shadow: none;
    appearance: none;
    -webkit-appearance: none;
    background-image: none;
}

/* Checkboxes and radios get the plain treatment: spacing normalised, the
   browser's own control left alone. */
#ibp-booking-form-wrapper input[type="checkbox"],
#ibp-booking-form-wrapper input[type="radio"]{
    margin: 0;
    padding: 0;
    max-width: none;
}
#ibp-booking-form-wrapper button{ border: 0; background: none; cursor: pointer; }
#ibp-booking-form-wrapper ul,
#ibp-booking-form-wrapper ol,
#ibp-booking-form-wrapper li{ list-style: none; margin: 0; padding: 0; }
#ibp-booking-form-wrapper h1,
#ibp-booking-form-wrapper h2,
#ibp-booking-form-wrapper h3,
#ibp-booking-form-wrapper h4,
#ibp-booking-form-wrapper h5,
#ibp-booking-form-wrapper p,
#ibp-booking-form-wrapper dl,
#ibp-booking-form-wrapper dd,
#ibp-booking-form-wrapper dt,
#ibp-booking-form-wrapper figure{ margin: 0; padding: 0; }
#ibp-booking-form-wrapper a{ box-shadow: none; text-decoration: none; }
#ibp-booking-form-wrapper svg{ display: block; max-width: none; height: auto; }
#ibp-booking-form-wrapper img{ max-width: 100%; height: auto; }
#ibp-booking-form-wrapper table{ border: 0; margin: 0; width: auto; }

#ibp-booking-form-wrapper .medex{
  --shell:#17141c;

  /* ambient field */
  --f1:#FFD9EC;  /* pink */
  --f2:#E6DAF8;  /* lavender */
  --f3:#FFE6D2;  /* peach */
  --f4:#F6ECFA;  /* haze */

  /* ink — plum-toned, never neutral grey */
  --ink:#2C2036;
  --body:#4E4159;
  --muted:#867696;
  --faint:#A99CB6;

  --purple:#770988;
  --purple-rgb:119,9,136;
  --lilac:#B47CFD;
  --pink:#E838A8;
  --pink-soft:#FF7FC2;
  --peach:#FFB07B;

  --good:#0F7A57;
  --warn:#A85510;
  --bad:#B32741;

  /* glass */
  --g:rgba(255,255,255,.52);
  --g-strong:rgba(255,255,255,.74);
  --g-soft:rgba(255,255,255,.34);
  --g-line:rgba(255,255,255,.62);
  --g-line-2:rgba(255,255,255,.4);
  --g-sh:0 8px 32px rgba(64,38,84,.10);
  --g-sh-lg:0 20px 60px rgba(64,38,84,.16);

  --r-xl:28px; --r:18px; --r-sm:12px; --r-xs:9px;
  --ring:0 0 0 3px rgba(var(--purple-rgb),.18);

  --sans:"Outfit",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,Menlo,monospace;
  --tight:-.02em; --track:.14em;
  --ease:cubic-bezier(.2,.7,.3,1);
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
/* The widget is a section on someone else's page, not the page itself.
   Nothing here is fixed to the viewport and nothing assumes 100vh — otherwise
   the booking bar floats over unrelated content once you scroll past. */
#ibp-booking-form-wrapper .medex{
  position:relative;font-family:var(--sans);font-size:15px;line-height:1.5;
  color:var(--body);-webkit-font-smoothing:antialiased;
}

h1,h2,h3,h4{margin:0;color:var(--ink);font-weight:600;letter-spacing:var(--tight);line-height:1.2}
p{margin:0}
button{font-family:inherit;font-size:inherit;color:inherit}
a{color:var(--purple)}
:focus-visible{outline:2px solid var(--purple);outline-offset:3px;border-radius:8px}
#ibp-booking-form-wrapper .vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
#ibp-booking-form-wrapper .mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
#ibp-booking-form-wrapper .grow{flex:1}

/* ---------- the window ---------- */
#ibp-booking-form-wrapper .app{
  position:relative;display:grid;grid-template-columns:214px 1fr;
  height:var(--h,660px);border-radius:var(--r-xl);overflow:hidden;
  background:
    radial-gradient(900px 620px at 12% 8%,  var(--f1) 0%, transparent 62%),
    radial-gradient(820px 700px at 88% 22%, var(--f2) 0%, transparent 60%),
    radial-gradient(760px 620px at 76% 92%, var(--f3) 0%, transparent 58%),
    radial-gradient(700px 560px at 24% 88%, var(--f2) 0%, transparent 60%),
    var(--f4);
  box-shadow:0 18px 50px rgba(64,38,84,.22),0 2px 8px rgba(64,38,84,.1);
  transition:height .4s var(--ease);
}
#ibp-booking-form-wrapper .medex.tall .app{--h:min(86vh,900px)}
/* .app is an ancestor of the container, so this must be a viewport query. */
@media (max-width:820px){#ibp-booking-form-wrapper .app{grid-template-columns:1fr}}
@media (max-width:600px){#ibp-booking-form-wrapper .app{border-radius:18px}}

/* ---------- sidebar ---------- */
#ibp-booking-form-wrapper .side{
  display:flex;flex-direction:column;gap:14px;padding:16px 13px;overflow:hidden;
  background:var(--g-soft);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);
  border-right:1px solid var(--g-line-2);
}
@media (max-width:820px){#ibp-booking-form-wrapper .side{display:none}}

#ibp-booking-form-wrapper .mark{display:flex;align-items:center;gap:10px;padding:2px 6px 0}
#ibp-booking-form-wrapper .mark svg{flex:none}
#ibp-booking-form-wrapper .mark b{font-size:17px;font-weight:600;letter-spacing:-.03em;color:var(--ink)}
#ibp-booking-form-wrapper .mark b em{font-style:normal;color:var(--purple)}

/* Steps are a real sequence, so they carry numbers — and each is named for the
   question it answers, not for a system stage. */
#ibp-booking-form-wrapper .steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
#ibp-booking-form-wrapper .steps button{
  display:flex;align-items:center;gap:9px;width:100%;padding:6px 9px;
  border:0;background:none;border-radius:var(--r-sm);text-align:left;
  cursor:default;transition:background .18s var(--ease);
}
#ibp-booking-form-wrapper .steps button[data-done="1"]{cursor:pointer}
#ibp-booking-form-wrapper .steps button[data-done="1"]:hover{background:var(--g-soft)}
#ibp-booking-form-wrapper .steps button[aria-current="step"]{background:var(--g-strong);box-shadow:var(--g-sh)}
#ibp-booking-form-wrapper .steps i{
  font-style:normal;font-family:var(--mono);font-size:9.5px;
  width:19px;height:19px;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--g-line);color:var(--faint);flex:none;background:var(--g-soft);
}
#ibp-booking-form-wrapper .steps button[data-done="1"] i{color:var(--purple);border-color:rgba(var(--purple-rgb),.3)}
#ibp-booking-form-wrapper .steps button[aria-current="step"] i{
  background:linear-gradient(135deg,var(--purple),var(--lilac));color:#fff;border-color:transparent;
}
#ibp-booking-form-wrapper .steps span{font-size:13px;font-weight:500;color:var(--muted);letter-spacing:-.01em}
#ibp-booking-form-wrapper .steps button[data-done="1"] span{color:var(--body)}
#ibp-booking-form-wrapper .steps button[aria-current="step"] span{color:var(--ink);font-weight:600}
#ibp-booking-form-wrapper .steps em{margin-left:auto;font-style:normal;font-size:11px;color:var(--faint);font-family:var(--mono)}

#ibp-booking-form-wrapper .sidesep{height:1px;background:var(--g-line-2)}

/* The cart lives in the sidebar on desktop and in the bar on mobile — the same
   list, placed where the eye already is. */
#ibp-booking-form-wrapper .tray{display:flex;flex-direction:column;gap:9px;min-height:0}
#ibp-booking-form-wrapper .tray__h{
  display:flex;align-items:center;justify-content:space-between;
  font-size:10.5px;font-weight:600;text-transform:uppercase;
  letter-spacing:var(--track);color:var(--muted);padding:0 4px;
}
#ibp-booking-form-wrapper .tray__l{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px;
  overflow-y:auto;min-height:0;flex:1}
#ibp-booking-form-wrapper .tray__i{
  display:flex;align-items:flex-start;gap:7px;padding:8px 9px;
  background:var(--g);border:1px solid var(--g-line);border-radius:var(--r-sm);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  animation:slidein .28s var(--ease);
}
@keyframes slidein{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:none}}
#ibp-booking-form-wrapper .tray__i div{flex:1;min-width:0}
#ibp-booking-form-wrapper .tray__i b{display:block;font-size:12px;font-weight:500;color:var(--ink);line-height:1.35}
#ibp-booking-form-wrapper .tray__i small{display:block;font-size:11px;color:var(--muted);margin-top:1px}
#ibp-booking-form-wrapper .tray__i .mono{font-size:12.5px;color:var(--ink);font-weight:500;white-space:nowrap}
#ibp-booking-form-wrapper .tray__x{
  width:20px;height:20px;border:0;border-radius:50%;background:none;color:var(--faint);
  font-size:15px;line-height:1;cursor:pointer;flex:none;transition:.16s;
}
#ibp-booking-form-wrapper .tray__x:hover{background:rgba(179,39,65,.1);color:var(--bad)}
#ibp-booking-form-wrapper .tray__e{
  padding:18px 12px;text-align:center;font-size:13px;color:var(--muted);
  border:1px dashed var(--g-line);border-radius:var(--r-sm);
}
#ibp-booking-form-wrapper .tray__t{
  display:flex;justify-content:space-between;align-items:baseline;
  padding:12px 12px 0;border-top:1px solid var(--g-line-2);margin-top:2px;
}
#ibp-booking-form-wrapper .tray__t small{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:var(--track);color:var(--muted)}
#ibp-booking-form-wrapper .tray__t b{font-family:var(--mono);font-size:17px;font-weight:500;color:var(--purple)}

#ibp-booking-form-wrapper .helpcard{
  margin-top:auto;padding:12px;background:var(--g);border:1px solid var(--g-line);
  border-radius:var(--r);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
}
#ibp-booking-form-wrapper .helpcard h4{font-size:13px;margin-bottom:4px}
#ibp-booking-form-wrapper .helpcard p{font-size:11.5px;color:var(--muted);line-height:1.45;margin-bottom:8px}

/* ---------- canvas ---------- */
#ibp-booking-form-wrapper .canvas{
    position:relative;padding:16px 20px 88px;
    overflow-y:auto;overflow-x:hidden;scroll-behavior:smooth;
}
@media (max-width:820px){#ibp-booking-form-wrapper .canvas{padding:14px 14px 96px}}

#ibp-booking-form-wrapper .contextbar{display:flex;flex-wrap:wrap;gap:10px;align-items:stretch;margin-bottom:6px}
#ibp-booking-form-wrapper .glass{
  background:var(--g);border:1px solid var(--g-line);border-radius:var(--r);
  backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:var(--g-sh);
}
#ibp-booking-form-wrapper .ctx{padding:11px 16px;display:flex;flex-direction:column;justify-content:center}
#ibp-booking-form-wrapper .ctx h1{font-size:17px;font-weight:600;letter-spacing:-.025em}
#ibp-booking-form-wrapper .ctx__meta{display:flex;flex-wrap:wrap;gap:0 14px;margin-top:3px;font-size:13px;color:var(--muted)}
#ibp-booking-form-wrapper .ctx__meta span{position:relative;padding-right:14px}
#ibp-booking-form-wrapper .ctx__meta span+span::before{
  content:"";position:absolute;left:-8px;top:50%;transform:translateY(-50%);
  width:1px;height:12px;background:var(--g-line);
}
#ibp-booking-form-wrapper .ctx--facts{margin-left:auto;display:grid;grid-template-columns:auto auto;gap:1px 16px;
  align-items:center;font-size:12.5px;padding:11px 16px}
#ibp-booking-form-wrapper .ctx--facts dt{color:var(--muted)}
#ibp-booking-form-wrapper .ctx--facts dd{margin:0;color:var(--ink);font-weight:500;text-align:right}
@media (max-width:900px){#ibp-booking-form-wrapper .ctx--facts{display:none}}

/* ---------- hero: the anatomy ----------
   The figure is the interface, not an illustration. 221 exams is unusable as a
   list, and patients arrive knowing where it hurts — so the body is the filter,
   and each pin is a live count. */
#ibp-booking-form-wrapper .stage{position:relative;display:grid;place-items:center;padding:2px 0 0}
#ibp-booking-form-wrapper .figwrap{position:relative;display:flex;flex-direction:column;align-items:center;gap:14px}
#ibp-booking-form-wrapper .human{
  width:auto;
  /* Plain fallback first: if container units are unsupported the whole
     declaration is dropped, and the figure would collapse to nothing. */
  height:300px;
  height:clamp(210px,34cqw,320px);
  max-width:100%;display:block;
  filter:drop-shadow(0 18px 36px rgba(120,30,120,.22));
}
@media (max-width:900px){#ibp-booking-form-wrapper .human{height:250px}}

/* Tissue reads as translucent glass; the selected area lights up in the
   brand pink so the body itself shows the filter. */
#ibp-booking-form-wrapper .region path{
  fill:url(#tissue);stroke:rgba(255,255,255,.8);stroke-width:1.6;
  transition:fill .26s var(--ease),stroke .26s var(--ease);
}
#ibp-booking-form-wrapper .region{cursor:pointer}
#ibp-booking-form-wrapper .region:hover path{fill:rgba(255,255,255,.9);stroke:var(--lilac)}
#ibp-booking-form-wrapper .region.on path{fill:url(#live);stroke:rgba(255,255,255,.9)}
#ibp-booking-form-wrapper .region:focus-visible{outline:none}
#ibp-booking-form-wrapper .region:focus-visible path{stroke:var(--purple);stroke-width:3}

#ibp-booking-form-wrapper .pin{cursor:pointer}
#ibp-booking-form-wrapper .pin circle.halo{fill:rgba(255,255,255,.7);stroke:rgba(255,255,255,.95);stroke-width:3;
  transition:r .24s var(--ease),fill .24s var(--ease)}
#ibp-booking-form-wrapper .pin circle.core{fill:var(--pink);transition:fill .24s var(--ease),r .24s var(--ease)}
#ibp-booking-form-wrapper .pin:hover circle.halo{fill:rgba(255,255,255,.95)}
#ibp-booking-form-wrapper .pin.on circle.halo{stroke:var(--purple)}
#ibp-booking-form-wrapper .pin.on circle.core{fill:var(--purple)}
#ibp-booking-form-wrapper .pin text{font-family:var(--mono);font-size:34px;fill:var(--purple);font-weight:500;pointer-events:none}
#ibp-booking-form-wrapper .pin:focus-visible circle.halo{stroke:var(--purple);stroke-width:5}
@keyframes ping{0%{r:26;opacity:.55}70%{r:46;opacity:0}100%{opacity:0}}
#ibp-booking-form-wrapper .pin .ping{fill:none;stroke:var(--pink);stroke-width:3;animation:ping 2.8s var(--ease) infinite}

#ibp-booking-form-wrapper .viewtoggle{
  display:inline-flex;gap:2px;padding:3px;border-radius:999px;
  background:var(--g);border:1px solid var(--g-line);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
}
#ibp-booking-form-wrapper .viewtoggle button{
  border:0;background:none;padding:6px 18px;border-radius:999px;
  font-size:13px;font-weight:500;color:var(--muted);cursor:pointer;transition:.18s var(--ease);
}
#ibp-booking-form-wrapper .viewtoggle button:hover{color:var(--ink)}
#ibp-booking-form-wrapper .viewtoggle button.on{
  background:linear-gradient(135deg,var(--purple),var(--lilac));color:#fff;
}

/* floating readout, as in the reference */
#ibp-booking-form-wrapper .readout{
  position:absolute;left:1%;top:26%;width:min(230px,40%);padding:13px 15px;
  background:var(--g-strong);border:1px solid var(--g-line);border-radius:var(--r);
  backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:var(--g-sh-lg);
  animation:rise .3s var(--ease);
}
@media (max-width:1000px){#ibp-booking-form-wrapper .readout{position:static;width:auto;margin:10px auto 0;max-width:380px}}
#ibp-booking-form-wrapper .readout h3{display:flex;align-items:center;gap:7px;font-size:14.5px;margin-bottom:8px}
#ibp-booking-form-wrapper .readout h3::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--pink);flex:none}
#ibp-booking-form-wrapper .readout dl{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:0;font-size:12.5px}
#ibp-booking-form-wrapper .readout dt{color:var(--muted)}
#ibp-booking-form-wrapper .readout dd{margin:0;text-align:right;color:var(--ink);font-weight:500}
#ibp-booking-form-wrapper .readout__f{margin-top:12px;padding-top:11px;border-top:1px solid var(--g-line);
  display:flex;gap:8px}

/* ---------- ask bar (search) ---------- */
#ibp-booking-form-wrapper .ask{
  position:relative;margin:12px auto 0;max-width:760px;padding:5px;
  background:var(--g-strong);border:1px solid var(--g-line);border-radius:var(--r);
  backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);box-shadow:var(--g-sh-lg);
}
#ibp-booking-form-wrapper .ask__row{display:flex;align-items:center;gap:10px;padding:7px 10px}
#ibp-booking-form-wrapper .ask__spark{font-size:17px;color:var(--purple);flex:none}
#ibp-booking-form-wrapper .ask input{
  flex:1;border:0;background:none;font-family:inherit;font-size:15px;color:var(--ink);
  padding:4px 0;min-width:0;
}
#ibp-booking-form-wrapper .ask input:focus{outline:none}
#ibp-booking-form-wrapper .ask input::placeholder{color:var(--faint)}
#ibp-booking-form-wrapper .ask__go{
  width:33px;height:33px;border:0;border-radius:50%;flex:none;cursor:pointer;
  background:linear-gradient(135deg,var(--purple),var(--lilac));color:#fff;font-size:16px;
  display:grid;place-items:center;transition:transform .16s var(--ease);
}
#ibp-booking-form-wrapper .ask__go:hover{transform:scale(1.06)}
#ibp-booking-form-wrapper .ask__foot{display:flex;flex-wrap:wrap;gap:7px;padding:0 12px 10px}

#ibp-booking-form-wrapper .sugg{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin:14px auto 0;max-width:860px}
#ibp-booking-form-wrapper .sugg button{
  padding:10px 18px;background:var(--g);border:1px solid var(--g-line);border-radius:999px;
  font-size:13.5px;color:var(--body);cursor:pointer;backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);transition:.18s var(--ease);
}
#ibp-booking-form-wrapper .sugg button:hover{background:var(--g-strong);color:var(--ink);transform:translateY(-1px)}

/* ---------- generic pieces ---------- */
#ibp-booking-form-wrapper .head{margin-bottom:16px;max-width:64ch}
#ibp-booking-form-wrapper .head h2{font-size:clamp(19px,2.4cqw,24px);margin-bottom:5px}
#ibp-booking-form-wrapper .head p{color:var(--muted);font-size:14px}
#ibp-booking-form-wrapper .eyebrow{display:block;font-size:10.5px;font-weight:600;text-transform:uppercase;
  letter-spacing:var(--track);color:var(--purple);margin-bottom:8px}

#ibp-booking-form-wrapper .step{animation:rise .34s var(--ease)}
@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

#ibp-booking-form-wrapper .btn{
  border:1px solid var(--g-line);background:var(--g);border-radius:var(--r-sm);
  padding:9px 17px;font-size:14px;font-weight:500;color:var(--ink);cursor:pointer;
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  transition:.18s var(--ease);white-space:nowrap;
}
#ibp-booking-form-wrapper .btn:hover:not(:disabled){background:var(--g-strong);transform:translateY(-1px)}
#ibp-booking-form-wrapper .btn--p{background:linear-gradient(135deg,var(--purple),#9b1fb0);border-color:transparent;color:#fff}
#ibp-booking-form-wrapper .btn--p:hover:not(:disabled){background:linear-gradient(135deg,#8b0f9e,#ab2ac0)}
#ibp-booking-form-wrapper .btn:disabled{opacity:.42;cursor:not-allowed}
#ibp-booking-form-wrapper .btn--g{background:none;border-color:transparent;color:var(--muted)}
#ibp-booking-form-wrapper .btn--g:hover{color:var(--ink);background:var(--g-soft)}
#ibp-booking-form-wrapper .btn--sm{padding:6px 13px;font-size:13px}
#ibp-booking-form-wrapper .link{background:none;border:0;font-size:13px;color:var(--muted);cursor:pointer;
  text-decoration:underline;padding:0}
#ibp-booking-form-wrapper .link:hover{color:var(--purple)}

#ibp-booking-form-wrapper .pill{
  border:1px solid var(--g-line);background:var(--g);border-radius:999px;
  padding:6px 14px;font-size:13px;color:var(--body);cursor:pointer;transition:.18s var(--ease);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
}
#ibp-booking-form-wrapper .pill:hover{background:var(--g-strong)}
#ibp-booking-form-wrapper .pill.on{background:linear-gradient(135deg,var(--purple),var(--lilac));border-color:transparent;color:#fff}
#ibp-booking-form-wrapper .pill b{font-family:var(--mono);font-size:10.5px;font-weight:400;opacity:.6;margin-left:5px}

#ibp-booking-form-wrapper .tools{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-bottom:16px}
#ibp-booking-form-wrapper .rhead{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  margin-bottom:14px;flex-wrap:wrap}
#ibp-booking-form-wrapper .rhead h3{font-size:18px}
#ibp-booking-form-wrapper .rcount{font-family:var(--mono);font-size:13px;color:var(--muted)}

/* ---------- exam cards ---------- */
#ibp-booking-form-wrapper .grid{
    display:grid;
    /* Capped: six columns of clinical detail is a spreadsheet, not a choice. */
    grid-template-columns:repeat(auto-fill,minmax(290px,1fr));
    gap:12px;max-width:1180px;
}
@media (min-width:1400px){
    #ibp-booking-form-wrapper .grid{grid-template-columns:repeat(4,1fr)}
}
#ibp-booking-form-wrapper .exam{
  position:relative;padding:14px;background:var(--g);border:1px solid var(--g-line);
  border-radius:var(--r);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);
  transition:.2s var(--ease);
}
#ibp-booking-form-wrapper .exam:hover{background:var(--g-strong);box-shadow:var(--g-sh);transform:translateY(-2px)}
#ibp-booking-form-wrapper .exam.in{border-color:rgba(var(--purple-rgb),.5);background:var(--g-strong);box-shadow:var(--ring)}
#ibp-booking-form-wrapper .exam.in::before{
  content:"";position:absolute;inset:0 0 auto 0;height:3px;border-radius:var(--r) var(--r) 0 0;
  background:linear-gradient(90deg,var(--purple),var(--lilac),var(--pink-soft));
}
#ibp-booking-form-wrapper .exam__t{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
#ibp-booking-form-wrapper .exam__n{font-size:14.5px;font-weight:600;color:var(--ink);letter-spacing:-.015em;margin-bottom:2px}
#ibp-booking-form-wrapper .exam__c{font-family:var(--mono);font-size:11px;color:var(--faint);letter-spacing:.03em}
#ibp-booking-form-wrapper .tag{
  flex:none;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  padding:3.5px 9px;border-radius:999px;color:var(--purple);
  background:rgba(255,255,255,.6);border:1px solid var(--g-line);
}
#ibp-booking-form-wrapper .meta{display:flex;flex-wrap:wrap;gap:5px;margin-top:11px}
#ibp-booking-form-wrapper .m{font-size:12px;padding:2.5px 9px;border-radius:999px;background:rgba(255,255,255,.5);
  border:1px solid var(--g-line-2);color:var(--muted)}
#ibp-booking-form-wrapper .m--c{color:var(--purple)}
#ibp-booking-form-wrapper .m--p{color:var(--warn)}

#ibp-booking-form-wrapper .offers{margin-top:13px;display:flex;flex-direction:column;gap:6px}
#ibp-booking-form-wrapper .offer{
  display:flex;align-items:center;gap:10px;width:100%;text-align:left;
  padding:8px 11px;border:1px solid var(--g-line-2);border-radius:var(--r-xs);
  background:rgba(255,255,255,.4);cursor:pointer;font-size:13.5px;transition:.16s var(--ease);
}
#ibp-booking-form-wrapper .offer:hover{background:rgba(255,255,255,.7)}
#ibp-booking-form-wrapper .offer.pick{border-color:rgba(var(--purple-rgb),.45);background:rgba(255,255,255,.8)}
/* The unselected ring used to be --g-line, which is white at 62% — invisible
   on a near-white card. A patient choosing between two centres has to be able
   to see that the other one is choosable. */
#ibp-booking-form-wrapper .offer__r{
  width:18px;height:18px;border-radius:50%;
  border:2px solid rgba(var(--purple-rgb),.32);
  background:#fff;
  flex:none;display:grid;place-items:center;transition:.16s}
#ibp-booking-form-wrapper .offer:hover .offer__r{border-color:rgba(var(--purple-rgb),.55)}
#ibp-booking-form-wrapper .offer.pick .offer__r{border-color:var(--purple);border-width:2px}
#ibp-booking-form-wrapper .offer.pick .offer__r::after{content:"";width:9px;height:9px;border-radius:50%;background:var(--purple)}
#ibp-booking-form-wrapper .offer__w{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--body)}
#ibp-booking-form-wrapper .offer__p{font-family:var(--mono);font-size:13.5px;font-weight:500;color:var(--ink)}
#ibp-booking-form-wrapper .best{font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;
  color:var(--good);background:rgba(15,122,87,.1);border-radius:999px;padding:2px 7px;flex:none}
#ibp-booking-form-wrapper .save{display:inline-block;margin-top:9px;font-size:12px;font-weight:600;color:var(--good);
  background:rgba(15,122,87,.1);border-radius:999px;padding:3px 11px}

#ibp-booking-form-wrapper .disc{display:inline-flex;align-items:center;gap:6px;background:none;border:0;
  padding:11px 0 0;font-size:13px;font-weight:500;color:var(--purple);cursor:pointer}
#ibp-booking-form-wrapper .disc:hover{text-decoration:underline}
#ibp-booking-form-wrapper .caret{font-size:10px;transition:transform .2s var(--ease);display:inline-block}
[aria-expanded="true"] .caret{transform:rotate(180deg)}
#ibp-booking-form-wrapper .detail{display:none;margin-top:12px;padding-top:12px;border-top:1px solid var(--g-line-2)}
#ibp-booking-form-wrapper .detail.open{display:block;animation:rise .22s var(--ease)}
#ibp-booking-form-wrapper .detail h5{margin:0 0 5px;font-size:10px;font-weight:600;text-transform:uppercase;
  letter-spacing:.1em;color:var(--muted)}
#ibp-booking-form-wrapper .detail section+section{margin-top:13px}
#ibp-booking-form-wrapper .detail p{font-size:13.5px;line-height:1.6;color:var(--body)}
#ibp-booking-form-wrapper .detail ul{margin:0;padding:0;list-style:none}
#ibp-booking-form-wrapper .detail li{position:relative;padding-left:17px;margin-bottom:4px;font-size:13.5px;line-height:1.55}
#ibp-booking-form-wrapper .detail li::before{content:"";position:absolute;left:4px;top:8px;width:5px;height:5px;
  border-radius:50%;background:var(--lilac)}
#ibp-booking-form-wrapper .caution{background:rgba(168,85,16,.07);border-left:3px solid var(--warn);
  border-radius:0 9px 9px 0;padding:10px 12px}
#ibp-booking-form-wrapper .caution h5{color:var(--warn)}
#ibp-booking-form-wrapper .caution li::before{background:var(--warn)}

#ibp-booking-form-wrapper .foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px}
#ibp-booking-form-wrapper .price{font-family:var(--mono);font-size:19px;font-weight:500;color:var(--purple)}
#ibp-booking-form-wrapper .price small{font-family:var(--sans);font-size:10px;color:var(--muted);letter-spacing:var(--track);
  text-transform:uppercase;display:block;font-weight:500}

#ibp-booking-form-wrapper .empty{padding:50px 24px;text-align:center;border:1px dashed var(--g-line);
  border-radius:var(--r);background:var(--g-soft)}
#ibp-booking-form-wrapper .empty h4{font-size:17px;margin-bottom:5px}
#ibp-booking-form-wrapper .empty p{font-size:14px;color:var(--muted);margin-bottom:14px}

/* ---------- bands ---------- */
#ibp-booking-form-wrapper .band{margin-top:24px;padding-top:18px;border-top:1px solid var(--g-line-2)}
#ibp-booking-form-wrapper .band__h{margin-bottom:15px;max-width:64ch}
#ibp-booking-form-wrapper .band__h h3{font-size:19px;margin-bottom:4px}
#ibp-booking-form-wrapper .band__h p{font-size:14px;color:var(--muted)}
#ibp-booking-form-wrapper .packs{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:12px}
#ibp-booking-form-wrapper .pack{position:relative;display:flex;flex-direction:column;gap:6px;padding:15px;
  background:var(--g);border:1px solid var(--g-line);border-radius:var(--r);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);transition:.2s var(--ease)}
#ibp-booking-form-wrapper .pack:hover{background:var(--g-strong);transform:translateY(-2px);box-shadow:var(--g-sh)}
#ibp-booking-form-wrapper .pack.in{border-color:rgba(var(--purple-rgb),.5);box-shadow:var(--ring)}
#ibp-booking-form-wrapper .pack__f{position:absolute;top:-9px;left:16px;padding:3.5px 11px;border-radius:999px;
  background:linear-gradient(135deg,var(--purple),var(--lilac));color:#fff;font-size:9.5px;
  font-weight:600;text-transform:uppercase;letter-spacing:.1em}
#ibp-booking-form-wrapper .pack h4{font-size:15.5px}
#ibp-booking-form-wrapper .pack__d{font-size:13px;color:var(--muted);line-height:1.5}
#ibp-booking-form-wrapper .pack ul{list-style:none;margin:2px 0;padding:0}
#ibp-booking-form-wrapper .pack li{font-size:12.5px;color:var(--body);padding-left:15px;position:relative;margin-bottom:2px}
#ibp-booking-form-wrapper .pack li::before{content:"";position:absolute;left:3px;top:8px;width:4px;height:4px;
  border-radius:50%;background:var(--lilac)}
#ibp-booking-form-wrapper .pack__pr{display:flex;align-items:baseline;flex-wrap:wrap;gap:8px;margin-top:auto;padding-top:8px}
#ibp-booking-form-wrapper .pack__now{font-family:var(--mono);font-size:19px;font-weight:500;color:var(--purple)}
#ibp-booking-form-wrapper .pack__was{font-family:var(--mono);font-size:13px;color:var(--muted);text-decoration:line-through}

#ibp-booking-form-wrapper .addons{list-style:none;margin:0;padding:0;border:1px solid var(--g-line);
  border-radius:var(--r);overflow:hidden;background:var(--g);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
#ibp-booking-form-wrapper .addon+.addon{border-top:1px solid var(--g-line-2)}
#ibp-booking-form-wrapper .addon label{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;cursor:pointer;transition:.16s}
#ibp-booking-form-wrapper .addon:hover label{background:rgba(255,255,255,.4)}
#ibp-booking-form-wrapper .addon.in label{background:rgba(255,255,255,.6)}
#ibp-booking-form-wrapper .addon input{margin-top:3px;width:18px;height:18px;accent-color:var(--purple);flex:none}
#ibp-booking-form-wrapper .addon__t{flex:1;min-width:0}
#ibp-booking-form-wrapper .addon__n{display:block;font-size:14.5px;font-weight:500;color:var(--ink)}
#ibp-booking-form-wrapper .addon__d{display:block;margin-top:2px;font-size:12.5px;color:var(--muted);line-height:1.5}
#ibp-booking-form-wrapper .addon__p{flex:none;font-family:var(--mono);font-size:14.5px;font-weight:500;color:var(--purple)}

/* ---------- resolver ---------- */
#ibp-booking-form-wrapper .conflict{
  padding:18px 20px;margin-bottom:20px;border-radius:var(--r);
  background:rgba(255,246,236,.62);border:1px solid rgba(168,85,16,.28);
  border-left:3px solid var(--warn);backdrop-filter:blur(18px);
  -webkit-backdrop-filter:blur(18px);animation:rise .3s var(--ease);
}
#ibp-booking-form-wrapper .conflict h4{font-size:16px;margin-bottom:5px;color:var(--warn)}
#ibp-booking-form-wrapper .conflict p{font-size:14px;color:var(--body);margin-bottom:14px;max-width:70ch}
#ibp-booking-form-wrapper .opts{display:flex;flex-wrap:wrap;gap:10px}
#ibp-booking-form-wrapper .opt{display:flex;flex-direction:column;gap:2px;align-items:flex-start;text-align:left;
  border:1px solid var(--g-line);background:var(--g-strong);border-radius:var(--r-sm);
  padding:11px 15px;cursor:pointer;transition:.18s var(--ease)}
#ibp-booking-form-wrapper .opt:hover{transform:translateY(-1px);box-shadow:var(--g-sh)}
#ibp-booking-form-wrapper .opt b{font-size:14px;font-weight:600;color:var(--ink)}
#ibp-booking-form-wrapper .opt span{font-size:12.5px;color:var(--muted)}
#ibp-booking-form-wrapper .opt em{font-style:normal;font-family:var(--mono);font-size:12.5px;color:var(--purple)}
#ibp-booking-form-wrapper .okband{
  display:flex;align-items:center;gap:10px;padding:11px 16px;margin-bottom:18px;
  border-radius:var(--r-sm);background:rgba(232,248,242,.62);
  border:1px solid rgba(15,122,87,.22);font-size:14px;color:var(--good);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
}

/* ---------- locations ---------- */
#ibp-booking-form-wrapper .locbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:20px}
#ibp-booking-form-wrapper .locbar input{flex:1;min-width:220px;padding:12px 16px;font-size:15px;font-family:inherit;
  border:1px solid var(--g-line);border-radius:var(--r-sm);background:var(--g);color:var(--ink);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
#ibp-booking-form-wrapper .locbar input:focus{outline:none;border-color:var(--purple);box-shadow:var(--ring)}
#ibp-booking-form-wrapper .prov{margin-bottom:24px}
#ibp-booking-form-wrapper .prov__h{display:flex;align-items:center;gap:10px;margin:0 0 12px;padding-bottom:8px;
  border-bottom:1px solid var(--g-line-2);font-size:10.5px;font-weight:600;
  text-transform:uppercase;letter-spacing:var(--track);color:var(--purple)}
#ibp-booking-form-wrapper .prov__n{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;
  padding:0 6px;border-radius:999px;background:rgba(255,255,255,.6);border:1px solid var(--g-line);
  font-family:var(--mono);font-size:10.5px;letter-spacing:0}
#ibp-booking-form-wrapper .prov__c{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:11px}
#ibp-booking-form-wrapper .loc{padding:13px;background:var(--g);border:1px solid var(--g-line);border-radius:var(--r);
  cursor:pointer;transition:.2s var(--ease);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
#ibp-booking-form-wrapper .loc:hover{background:var(--g-strong);transform:translateY(-2px);box-shadow:var(--g-sh)}
#ibp-booking-form-wrapper .loc.in{border-color:rgba(var(--purple-rgb),.5);box-shadow:var(--ring);background:var(--g-strong)}
#ibp-booking-form-wrapper .loc__n{font-size:15px;font-weight:600;color:var(--ink);margin-bottom:1px}
#ibp-booking-form-wrapper .loc__th{font-size:12.5px;color:var(--muted);margin-bottom:6px}
#ibp-booking-form-wrapper .loc__a{font-size:12.5px;color:var(--muted)}
#ibp-booking-form-wrapper .loc__d{font-family:var(--mono);font-size:12px;color:var(--purple);margin-top:6px}
#ibp-booking-form-wrapper .loc__f{display:flex;align-items:center;gap:10px;margin-top:12px;padding-top:11px;
  border-top:1px solid var(--g-line-2)}

/* ---------- when ---------- */
#ibp-booking-form-wrapper .when{display:grid;grid-template-columns:minmax(0,285px) minmax(0,1fr);gap:20px}
@media (max-width:860px){#ibp-booking-form-wrapper .when{grid-template-columns:1fr}}
#ibp-booking-form-wrapper .cal{padding:18px;background:var(--g);border:1px solid var(--g-line);border-radius:var(--r);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
#ibp-booking-form-wrapper .cal__h{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
#ibp-booking-form-wrapper .cal__h h4{font-size:15.5px}
#ibp-booking-form-wrapper .cal__nav{display:flex;gap:5px}
#ibp-booking-form-wrapper .cal__nav button{width:30px;height:30px;border:1px solid var(--g-line);border-radius:9px;
  background:var(--g-soft);cursor:pointer;color:var(--body)}
#ibp-booking-form-wrapper .cal__nav button:hover:not(:disabled){background:var(--g-strong);color:var(--purple)}
#ibp-booking-form-wrapper .cal__nav button:disabled{opacity:.35;cursor:not-allowed}
#ibp-booking-form-wrapper .cal__g{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
#ibp-booking-form-wrapper .dow{text-align:center;font-family:var(--mono);font-size:10px;color:var(--faint);padding-bottom:6px}
#ibp-booking-form-wrapper .day{aspect-ratio:1;border:1px solid transparent;border-radius:10px;background:none;
  font-family:var(--mono);font-size:13px;color:var(--body);cursor:pointer;transition:.14s;
  position:relative;display:grid;place-items:center}
#ibp-booking-form-wrapper .day:hover:not(:disabled){background:rgba(255,255,255,.6)}
#ibp-booking-form-wrapper .day:disabled{color:var(--faint);cursor:not-allowed;opacity:.4}
#ibp-booking-form-wrapper .day.on{background:linear-gradient(135deg,var(--purple),var(--lilac));color:#fff;font-weight:500}
#ibp-booking-form-wrapper .day.today{border-color:var(--lilac)}
#ibp-booking-form-wrapper .day i{position:absolute;bottom:5px;width:4px;height:4px;border-radius:50%;background:var(--good);font-style:normal}
#ibp-booking-form-wrapper .day.on i{background:#fff}
#ibp-booking-form-wrapper .day.busy i{background:var(--warn)}
#ibp-booking-form-wrapper .callegend{display:flex;gap:14px;margin-top:12px;font-size:12px;color:var(--muted)}
#ibp-booking-form-wrapper .callegend span{display:inline-flex;align-items:center;gap:5px}
#ibp-booking-form-wrapper .callegend b{width:6px;height:6px;border-radius:50%;display:inline-block}
#ibp-booking-form-wrapper .slots__h{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:14px;gap:12px}
#ibp-booking-form-wrapper .slots__h h4{font-size:15.5px}
#ibp-booking-form-wrapper .slots__m{font-family:var(--mono);font-size:12px;color:var(--muted)}
#ibp-booking-form-wrapper .sgroup{margin-bottom:18px}
#ibp-booking-form-wrapper .sgroup h5{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;
  color:var(--muted);margin:0 0 8px}
#ibp-booking-form-wrapper .srow{display:flex;flex-wrap:wrap;gap:7px}
#ibp-booking-form-wrapper .slot{border:1px solid var(--g-line);background:var(--g);border-radius:10px;
  padding:9px 14px;font-family:var(--mono);font-size:13px;color:var(--body);cursor:pointer;
  transition:.16s var(--ease);min-height:42px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
#ibp-booking-form-wrapper .slot:hover:not(:disabled){background:var(--g-strong);color:var(--purple);transform:translateY(-1px)}
#ibp-booking-form-wrapper .slot.on{background:linear-gradient(135deg,var(--purple),var(--lilac));border-color:transparent;color:#fff}
#ibp-booking-form-wrapper .slot:disabled{opacity:.3;cursor:not-allowed;text-decoration:line-through}

/* ---------- form ---------- */
#ibp-booking-form-wrapper .form{display:grid;grid-template-columns:1fr 1fr;gap:16px;max-width:760px}
@media (max-width:720px){#ibp-booking-form-wrapper .form{grid-template-columns:1fr}}
#ibp-booking-form-wrapper .f{display:flex;flex-direction:column;gap:5px}
#ibp-booking-form-wrapper .f--w{grid-column:1/-1}
#ibp-booking-form-wrapper .f label{font-size:13px;font-weight:500;color:var(--ink)}
#ibp-booking-form-wrapper .f label em{font-style:normal;color:var(--bad)}
#ibp-booking-form-wrapper .f input, #ibp-booking-form-wrapper .f select, #ibp-booking-form-wrapper .f textarea{padding:11px 14px;font-size:15px;font-family:inherit;color:var(--ink);
  border:1px solid var(--g-line);border-radius:var(--r-sm);background:var(--g);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:.16s}
#ibp-booking-form-wrapper .f input:focus, #ibp-booking-form-wrapper .f select:focus, #ibp-booking-form-wrapper .f textarea:focus{outline:none;border-color:var(--purple);
  box-shadow:var(--ring);background:var(--g-strong)}
#ibp-booking-form-wrapper .f small{font-size:12.5px;color:var(--muted)}
#ibp-booking-form-wrapper .f.bad input, #ibp-booking-form-wrapper .f.bad textarea{border-color:var(--bad);box-shadow:0 0 0 3px rgba(179,39,65,.12)}
#ibp-booking-form-wrapper .f .err{display:none;font-size:12.5px;color:var(--bad);font-weight:500}
#ibp-booking-form-wrapper .f.bad .err{display:block}
#ibp-booking-form-wrapper .f.bad small{display:none}
#ibp-booking-form-wrapper .consent{grid-column:1/-1;display:flex;gap:11px;align-items:flex-start;padding:14px;
  background:var(--g);border:1px solid var(--g-line);border-radius:var(--r-sm);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
#ibp-booking-form-wrapper .consent.bad{border-color:var(--bad);box-shadow:0 0 0 3px rgba(179,39,65,.12)}
#ibp-booking-form-wrapper .consent input{margin-top:2px;width:18px;height:18px;accent-color:var(--purple);flex:none}
#ibp-booking-form-wrapper .consent span{font-size:13.5px;color:var(--body);line-height:1.55}

/* ---------- review ---------- */
#ibp-booking-form-wrapper .rev{max-width:680px;border-radius:var(--r);overflow:hidden;background:var(--g);
  border:1px solid var(--g-line);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}
#ibp-booking-form-wrapper .rev__s{padding:18px 20px}
#ibp-booking-form-wrapper .rev__s+.rev__s{border-top:1px solid var(--g-line-2)}
#ibp-booking-form-wrapper .rev__s h4{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;
  color:var(--muted);margin-bottom:10px;display:flex;justify-content:space-between;align-items:center}
#ibp-booking-form-wrapper .rw{display:flex;justify-content:space-between;gap:14px;padding:4px 0;font-size:14.5px}
#ibp-booking-form-wrapper .rw span:first-child{color:var(--body)}
#ibp-booking-form-wrapper .rw span:last-child{color:var(--ink);font-weight:500;text-align:right}
#ibp-booking-form-wrapper .rw--t{padding-top:11px;margin-top:8px;border-top:1px solid var(--g-line-2);font-size:18px;font-weight:600}
#ibp-booking-form-wrapper .rw--t span:last-child{font-family:var(--mono);color:var(--purple)}
#ibp-booking-form-wrapper .prep{list-style:none;margin:0;padding:0}
#ibp-booking-form-wrapper .prep li{position:relative;padding-left:20px;margin-bottom:6px;font-size:14px;line-height:1.55}
#ibp-booking-form-wrapper .prep li::before{content:"";position:absolute;left:5px;top:8px;width:5px;height:5px;
  border-radius:50%;background:var(--lilac)}
#ibp-booking-form-wrapper .prep li.warn{color:var(--warn)}
#ibp-booking-form-wrapper .prep li.warn::before{background:var(--warn)}

#ibp-booking-form-wrapper .done{max-width:560px;margin:32px auto;text-align:center}
#ibp-booking-form-wrapper .done__m{width:72px;height:72px;margin:0 auto 20px;border-radius:50%;
  background:linear-gradient(135deg,var(--purple),var(--lilac),var(--pink-soft));
  display:grid;place-items:center;color:#fff;font-size:31px;
  box-shadow:0 12px 40px rgba(var(--purple-rgb),.32);animation:pop .5s var(--ease)}
@keyframes pop{0%{transform:scale(.5);opacity:0}60%{transform:scale(1.06)}100%{transform:scale(1);opacity:1}}
#ibp-booking-form-wrapper .done h2{font-size:27px;margin-bottom:8px}
#ibp-booking-form-wrapper .done>p{color:var(--muted);margin-bottom:20px}
#ibp-booking-form-wrapper .code{display:inline-block;font-family:var(--mono);font-size:21px;letter-spacing:.09em;
  color:var(--purple);background:var(--g-strong);border:1px solid var(--g-line);
  border-radius:var(--r-sm);padding:14px 26px;margin-bottom:20px;box-shadow:var(--g-sh)}
#ibp-booking-form-wrapper .donecard{padding:20px;text-align:left;margin-bottom:20px;background:var(--g);
  border:1px solid var(--g-line);border-radius:var(--r);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
#ibp-booking-form-wrapper .donecard h4{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;
  color:var(--muted);margin-bottom:10px}

#ibp-booking-form-wrapper .nav{display:flex;align-items:center;gap:10px;margin-top:22px}

/* ---------- mobile bar ---------- */
/* Anchored to the widget, never the viewport. A position:fixed bar would keep
   floating over the rest of the landing page after the visitor scrolls past. */
#ibp-booking-form-wrapper .bar{
  position:absolute;left:0;right:0;bottom:0;z-index:20;
  background:var(--g-strong);border-top:1px solid var(--g-line);
  backdrop-filter:blur(28px);-webkit-backdrop-filter:blur(28px);
  box-shadow:0 -8px 32px rgba(64,38,84,.16);
  transform:translateY(110%);transition:transform .28s var(--ease);
}

#ibp-booking-form-wrapper .bar.up{transform:none}
#ibp-booking-form-wrapper .bar__p{max-height:0;overflow:hidden;transition:max-height .28s var(--ease)}
#ibp-booking-form-wrapper .bar__p.open{max-height:210px;overflow-y:auto;border-bottom:1px solid var(--g-line-2)}
#ibp-booking-form-wrapper .bar__i{padding:0 16px}
#ibp-booking-form-wrapper .bar__ttl{padding:13px 0 5px;font-size:10px;font-weight:600;text-transform:uppercase;
  letter-spacing:var(--track);color:var(--muted)}
#ibp-booking-form-wrapper .bar__l{list-style:none;margin:0;padding:0 0 10px}
#ibp-booking-form-wrapper .bar__it{display:flex;align-items:center;gap:11px;padding:8px 0;
  border-bottom:1px solid var(--g-line-2);font-size:14px}
#ibp-booking-form-wrapper .bar__it:last-child{border-bottom:0}
#ibp-booking-form-wrapper .bar__it b{flex:1;min-width:0;font-weight:400;color:var(--ink)}
#ibp-booking-form-wrapper .bar__it small{display:block;font-size:11.5px;color:var(--muted)}
#ibp-booking-form-wrapper .bar__m{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 16px}
#ibp-booking-form-wrapper .bar__tg{display:inline-flex;align-items:center;gap:7px;background:none;border:0;padding:0;
  font-size:14px;font-weight:500;color:var(--purple);cursor:pointer}
#ibp-booking-form-wrapper .bar__r{display:flex;align-items:center;gap:14px}
#ibp-booking-form-wrapper .bar__t{display:flex;flex-direction:column;align-items:flex-end;line-height:1.2}
#ibp-booking-form-wrapper .bar__t small{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:var(--track);color:var(--muted)}
#ibp-booking-form-wrapper .bar__t b{font-family:var(--mono);font-size:19px;font-weight:500;color:var(--purple)}

/* ---------- toast ---------- */
#ibp-booking-form-wrapper .toasts{position:absolute;bottom:78px;left:50%;transform:translateX(-50%);z-index:40;
  display:flex;flex-direction:column;gap:7px;align-items:center;pointer-events:none}
#ibp-booking-form-wrapper .toast{background:rgba(44,32,54,.9);color:#fff;padding:10px 18px;border-radius:999px;
  font-size:13.5px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:0 8px 28px rgba(0,0,0,.28);animation:rise .26s var(--ease)}

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


/* ============================================================
   FREEZE
   Embedded mid-page, an interactive widget competes with the page for the
   visitor's scroll and attention. Frozen is the resting state: the panel sits
   at preview height, ignores input, and lets the page scroll straight past.
   One click hands control over.
   ============================================================ */
#ibp-booking-form-wrapper .medex.frozen .app{--h:340px}
#ibp-booking-form-wrapper .medex.frozen .canvas,
#ibp-booking-form-wrapper .medex.frozen .side,
#ibp-booking-form-wrapper .medex.frozen .bar{pointer-events:none;user-select:none}
#ibp-booking-form-wrapper .medex.frozen .canvas{overflow:hidden}
#ibp-booking-form-wrapper .medex.frozen .pin .ping{animation:none}

#ibp-booking-form-wrapper .scrim{
  position:absolute;inset:0;z-index:30;display:none;
  align-items:center;justify-content:center;flex-direction:column;gap:14px;
  border-radius:var(--r-xl);cursor:pointer;border:0;width:100%;
  background:linear-gradient(180deg,rgba(251,246,252,.18) 0%,rgba(246,236,250,.72) 68%,rgba(246,236,250,.92) 100%);
  backdrop-filter:blur(1.5px);-webkit-backdrop-filter:blur(1.5px);
  font-family:var(--sans);
}
#ibp-booking-form-wrapper .medex.frozen .scrim{display:flex;animation:fadein .3s var(--ease)}
@keyframes fadein{from{opacity:0}to{opacity:1}}
#ibp-booking-form-wrapper .scrim__cta{
  display:inline-flex;align-items:center;gap:9px;padding:12px 24px;border-radius:999px;
  background:linear-gradient(135deg,var(--purple),#9b1fb0);color:#fff;
  font-size:15px;font-weight:500;box-shadow:0 10px 30px rgba(var(--purple-rgb),.34);
  transition:transform .2s var(--ease),box-shadow .2s var(--ease);
}
#ibp-booking-form-wrapper .scrim:hover .scrim__cta{transform:translateY(-2px);box-shadow:0 14px 38px rgba(var(--purple-rgb),.42)}
#ibp-booking-form-wrapper .scrim__sub{font-size:13px;color:var(--body);max-width:32ch;text-align:center}

/* The control itself sits on the panel edge, always reachable. */
#ibp-booking-form-wrapper .freeze{
  position:absolute;top:12px;right:14px;z-index:35;display:inline-flex;align-items:center;gap:7px;
  padding:6px 13px;border-radius:999px;cursor:pointer;
  background:var(--g-strong);border:1px solid var(--g-line);color:var(--body);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  font-family:var(--sans);font-size:12.5px;font-weight:500;
  box-shadow:var(--g-sh);transition:.2s var(--ease);
}
#ibp-booking-form-wrapper .freeze:hover{color:var(--ink);transform:translateY(-1px)}
#ibp-booking-form-wrapper .freeze__dot{width:7px;height:7px;border-radius:50%;background:var(--good);flex:none}
#ibp-booking-form-wrapper .medex.frozen .freeze__dot{background:var(--faint)}
#ibp-booking-form-wrapper .medex.frozen .freeze{opacity:0;pointer-events:none}

/* Compact by default; the panel grows once someone is actually using it. */
#ibp-booking-form-wrapper .medex.live .app{--h:min(84vh,820px)}

/* ============================================================
   3.5 — mobile, overlays, floating actions
   ============================================================ */

/* ---- The bar belongs to the page, not the panel --------------------------
   Asked for as a footer bar, so it sits at the bottom of the viewport like one.
   It only appears while the widget is unfrozen and on screen, so it never
   floats over unrelated sections. */
#ibp-booking-form-wrapper .bar{
    position: fixed;
    left: 0; right: 0; bottom: 0;
    z-index: 2147483000;
    transform: translateY(110%);
    transition: transform .28s cubic-bezier(.2,.7,.3,1);
    background: rgba(255,255,255,.86);
    border-top: 1px solid rgba(255,255,255,.7);
    box-shadow: 0 -8px 34px rgba(64,38,84,.18);
    backdrop-filter: blur(26px) saturate(1.4);
    -webkit-backdrop-filter: blur(26px) saturate(1.4);
}
#ibp-booking-form-wrapper .bar.up{ transform: none; }
#ibp-booking-form-wrapper .bar__m{
    max-width: 1180px; margin: 0 auto;
    padding: 10px 20px calc(10px + env(safe-area-inset-bottom, 0px));
}
#ibp-booking-form-wrapper .bar__i{ max-width: 1180px; margin: 0 auto; padding: 0 20px; }

/* ---- Floating step action ------------------------------------------------
   The primary action follows the thumb instead of sitting at the bottom of a
   long scroll, so it is reachable without hunting for it. */
#ibp-booking-form-wrapper .fab{
    position: absolute;
    /* Clear of the chat launchers most sites park in the bottom-right. */
    right: 92px; bottom: 78px;
    z-index: 25;
    display: inline-flex; align-items: center; gap: 9px;
    padding: 13px 22px; border-radius: 999px;
    background: linear-gradient(135deg, var(--purple), #9b1fb0);
    color: #fff; font-size: 15px; font-weight: 500;
    box-shadow: 0 12px 34px rgba(var(--purple-rgb), .38);
    cursor: pointer;
    transition: transform .2s cubic-bezier(.2,.7,.3,1), opacity .2s, box-shadow .2s;
}
#ibp-booking-form-wrapper .fab:hover{ transform: translateY(-2px); box-shadow: 0 16px 42px rgba(var(--purple-rgb),.46); }
#ibp-booking-form-wrapper .fab[hidden]{ display: none; }
#ibp-booking-form-wrapper .fab--back{
    right: auto; left: 18px;
    background: rgba(255,255,255,.86); color: var(--body);
    border: 1px solid var(--g-line); box-shadow: var(--g-sh);
    padding: 11px 18px; font-size: 14px;
}
#ibp-booking-form-wrapper .fab--back:hover{ box-shadow: var(--g-sh-lg); }
#ibp-booking-form-wrapper .fab__count{
    font-family: var(--mono); font-size: 12px; opacity: .82;
    padding-left: 9px; margin-left: 3px; border-left: 1px solid rgba(255,255,255,.34);
}

/* ---- Overlays ------------------------------------------------------------
   Scan details and directions open in place. Sending someone to a new tab
   mid-booking loses their basket and their thread. */
#ibp-booking-form-wrapper .ov{
    position: fixed; inset: 0; z-index: 2147483100;
    display: flex; align-items: center; justify-content: center;
    padding: 40px 24px;
    background: rgba(30,18,38,.58);
    backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px);
    animation: ibpfade .2s ease;
}
#ibp-booking-form-wrapper .ov[hidden]{ display: none; }
@keyframes ibpfade{ from{ opacity: 0 } to{ opacity: 1 } }

#ibp-booking-form-wrapper .ov__box{
    position: relative;
    width: min(640px, 100%);
    max-height: min(86vh, 800px);
    display: flex; flex-direction: column;
    border-radius: 20px; overflow: hidden;
    /* Solid white. This holds preparation instructions and contraindications;
       reading them through a translucent panel over a busy page is not a
       reasonable thing to ask of a patient. */
    background: #fff;
    border: 1px solid rgba(38,24,46,.1);
    box-shadow: 0 30px 80px rgba(38,24,46,.34), 0 4px 12px rgba(38,24,46,.12);
    animation: ibprise .26s cubic-bezier(.2,.7,.3,1);
}
@keyframes ibprise{ from{ opacity:0; transform: translateY(16px) scale(.985) } to{ opacity:1; transform:none } }

#ibp-booking-form-wrapper .ov__head{
    display: flex; align-items: flex-start; gap: 14px;
    padding: 24px 28px 16px;
    border-bottom: 1px solid rgba(38,24,46,.09);
}
#ibp-booking-form-wrapper .ov__head h3{ font-size: 18px; margin-bottom: 3px; }
#ibp-booking-form-wrapper .ov__head p{ font-size: 13px; color: var(--muted); }
#ibp-booking-form-wrapper .ov__x{
    flex: none; width: 34px; height: 34px; margin-left: auto;
    border-radius: 50%; display: grid; place-items: center;
    background: rgba(255,255,255,.7); border: 1px solid var(--g-line);
    color: var(--body); font-size: 19px; line-height: 1; cursor: pointer;
    transition: .16s;
}
#ibp-booking-form-wrapper .ov__x:hover{ background: #fff; color: var(--ink); transform: rotate(90deg); }
#ibp-booking-form-wrapper .ov__body{ padding: 22px 28px 26px; overflow-y: auto; }
#ibp-booking-form-wrapper .ov__foot{
    padding: 16px 28px; border-top: 1px solid rgba(38,24,46,.09);
    display: flex; align-items: center; gap: 10px;
    background: #fbf8fc;
}
#ibp-booking-form-wrapper .ov__map{
    width: 100%; height: clamp(220px, 40vh, 340px);
    border: 0; display: block; background: var(--g-soft);
}
#ibp-booking-form-wrapper .ov__addr{
    padding: 16px 28px; font-size: 14px; line-height: 1.6; color: var(--body);
}
#ibp-booking-form-wrapper .ov__addr b{ display: block; color: var(--ink); font-weight: 600; margin-bottom: 2px; }

/* Detail sections reused inside the overlay */
/* The class goes on .ov__body itself, so this has to match the element, not a
   descendant — as a descendant selector the base `.detail{display:none}` won
   and the whole dialog body was blank. */
/* Only the parts of `.detail` that do not belong in a dialog are neutralised.
   Zeroing the padding here also removed the dialog's own, leaving the clinical
   text flush against the edges. */
#ibp-booking-form-wrapper .ov__body.detail,
#ibp-booking-form-wrapper .ov__body .detail{
    display: block;
    margin: 0;
    border: 0;
    padding: 22px 28px 26px;
}
#ibp-booking-form-wrapper .ov__body .detail{ padding: 0; }
#ibp-booking-form-wrapper .ov__price{
    display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
    margin-bottom: 16px; padding-bottom: 14px; border-bottom: 1px solid var(--g-line-2);
}

/* ---- Mobile --------------------------------------------------------------
   Below 820px the sidebar cannot fit, so the steps move into the canvas as a
   scrolling rail and the cart lives entirely in the footer bar. */
@media (max-width: 820px){
    #ibp-booking-form-wrapper .app{
        grid-template-columns: 1fr;
        height: auto;
        min-height: 520px;
        border-radius: 18px;
    }
    #ibp-booking-form-wrapper .side{ display: none; }
    #ibp-booking-form-wrapper .canvas{
        height: auto; max-height: none; overflow: visible;
        padding: 14px 14px 96px;
    }
    #ibp-booking-form-wrapper .medex.frozen .app{ min-height: 0; height: 320px; }
    #ibp-booking-form-wrapper .medex.live .app{ height: auto; }

    #ibp-booking-form-wrapper .miniSteps{ display: flex; }

    #ibp-booking-form-wrapper .contextbar{ gap: 8px; }
    #ibp-booking-form-wrapper .ctx{ padding: 10px 13px; flex: 1; }
    #ibp-booking-form-wrapper .ctx h1{ font-size: 15.5px; }
    #ibp-booking-form-wrapper .ctx__meta{ font-size: 12px; }

    #ibp-booking-form-wrapper .human{ height: 230px; }
    #ibp-booking-form-wrapper .readout{
        position: static; width: auto; max-width: none; margin: 12px 0 0;
    }
    #ibp-booking-form-wrapper .ask{ margin-top: 10px; }
    #ibp-booking-form-wrapper .ask input{ font-size: 16px; } /* stops iOS zooming on focus */
    #ibp-booking-form-wrapper .grid,
    #ibp-booking-form-wrapper .packs,
    #ibp-booking-form-wrapper .prov__c{ grid-template-columns: 1fr; }
    #ibp-booking-form-wrapper .when{ grid-template-columns: 1fr; gap: 18px; }
    #ibp-booking-form-wrapper .form{ grid-template-columns: 1fr; }
    #ibp-booking-form-wrapper .nav{ display: none; } /* replaced by the floating action */
    #ibp-booking-form-wrapper .fab{ position: fixed; bottom: 84px; right: 80px; z-index: 2147482900; }
    #ibp-booking-form-wrapper .fab--back{ left: 14px; right: auto; }
    #ibp-booking-form-wrapper .freeze{ top: 8px; right: 10px; font-size: 11.5px; padding: 5px 11px; }
    #ibp-booking-form-wrapper .ov{ padding: 0; align-items: flex-end; }
    #ibp-booking-form-wrapper .ov__box{
        width: 100%; max-height: 92vh;
        border-radius: 22px 22px 0 0;
        animation: ibpsheet .3s cubic-bezier(.2,.7,.3,1);
    }
    @keyframes ibpsheet{ from{ transform: translateY(100%) } to{ transform: none } }
    #ibp-booking-form-wrapper .bar__m{ padding: 9px 14px calc(9px + env(safe-area-inset-bottom,0px)); }
    #ibp-booking-form-wrapper .bar__t b{ font-size: 17px; }
    #ibp-booking-form-wrapper .slot{ min-height: 46px; padding: 10px 15px; }
    #ibp-booking-form-wrapper .day{ font-size: 14px; }
}

@media (max-width: 480px){
    #ibp-booking-form-wrapper .human{ height: 200px; }
    #ibp-booking-form-wrapper .ctx--facts{ display: none; }
    #ibp-booking-form-wrapper .fab{ padding: 12px 18px; font-size: 14px; }
}

/* Compact step rail, mobile only */
#ibp-booking-form-wrapper .miniSteps{
    display: none; gap: 6px; overflow-x: auto; margin-bottom: 12px;
    padding-bottom: 2px; scrollbar-width: none;
}
#ibp-booking-form-wrapper .miniSteps::-webkit-scrollbar{ display: none; }
#ibp-booking-form-wrapper .miniSteps button{
    flex: none; display: inline-flex; align-items: center; gap: 6px;
    padding: 6px 12px; border-radius: 999px; white-space: nowrap;
    background: var(--g); border: 1px solid var(--g-line);
    font-size: 12.5px; color: var(--muted); cursor: default;
}
#ibp-booking-form-wrapper .miniSteps button[data-done="1"]{ cursor: pointer; color: var(--body); }
#ibp-booking-form-wrapper .miniSteps button[aria-current="step"]{
    background: linear-gradient(135deg, var(--purple), var(--lilac));
    border-color: transparent; color: #fff; font-weight: 500;
}
#ibp-booking-form-wrapper .miniSteps i{ font-style: normal; font-family: var(--mono); font-size: 10px; opacity: .7; }

/* ============================================================
   Assistant
   ============================================================ */

#ibp-booking-form-wrapper .chat{
    max-width: 760px; margin: 12px auto 0;
    border-radius: var(--r); overflow: hidden;
    background: var(--g); border: 1px solid var(--g-line);
    backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
    box-shadow: var(--g-sh);
}
#ibp-booking-form-wrapper .chat__tab{
    display: flex; align-items: center; gap: 10px; width: 100%;
    padding: 13px 18px; cursor: pointer; text-align: left;
    font-size: 14.5px; font-weight: 500; color: var(--purple);
    transition: background .18s var(--ease);
}
#ibp-booking-form-wrapper .chat__tab:hover{ background: rgba(255,255,255,.45); }
#ibp-booking-form-wrapper .chat__spark{ font-size: 15px; }
#ibp-booking-form-wrapper .chat__tab .caret{ margin-left: auto; }
#ibp-booking-form-wrapper .chat.is-open .chat__tab .caret{ transform: rotate(180deg); }

#ibp-booking-form-wrapper .chat__body{ display: none; padding: 0 18px 16px; }
#ibp-booking-form-wrapper .chat.is-open .chat__body{ display: block; }

#ibp-booking-form-wrapper .chat__note{
    font-size: 12.5px; line-height: 1.55; color: var(--muted);
    padding: 0 0 12px; border-bottom: 1px solid var(--g-line-2); margin-bottom: 12px;
}

#ibp-booking-form-wrapper .chat__log{
    display: flex; flex-direction: column; gap: 10px;
    max-height: 300px; overflow-y: auto; margin-bottom: 12px;
}
#ibp-booking-form-wrapper .cmsg{ display: flex; flex-direction: column; gap: 4px; max-width: 88%; }
#ibp-booking-form-wrapper .cmsg--me{ align-self: flex-end; align-items: flex-end; }
#ibp-booking-form-wrapper .cmsg__b{
    padding: 10px 14px; border-radius: 14px; font-size: 14px; line-height: 1.55;
    background: rgba(255,255,255,.72); color: var(--body);
    border: 1px solid var(--g-line-2);
}
#ibp-booking-form-wrapper .cmsg--me .cmsg__b{
    background: linear-gradient(135deg, var(--purple), #9b1fb0); color: #fff; border-color: transparent;
}
#ibp-booking-form-wrapper .cmsg__file{
    font-size: 11px; color: var(--muted); font-family: var(--mono);
}
#ibp-booking-form-wrapper .cmsg__typing{ display: flex; gap: 5px; align-items: center; }
#ibp-booking-form-wrapper .cmsg__typing i{
    width: 6px; height: 6px; border-radius: 50%; background: var(--lilac);
    animation: ibpdot 1.2s infinite ease-in-out;
}
#ibp-booking-form-wrapper .cmsg__typing i:nth-child(2){ animation-delay: .16s; }
#ibp-booking-form-wrapper .cmsg__typing i:nth-child(3){ animation-delay: .32s; }
@keyframes ibpdot{ 0%,60%,100%{ opacity:.25; transform: translateY(0) } 30%{ opacity:1; transform: translateY(-3px) } }

#ibp-booking-form-wrapper .chat__recs{
    margin-bottom: 12px; padding: 13px 14px; border-radius: var(--r-sm);
    background: rgba(255,255,255,.6); border: 1px solid var(--g-line);
}
#ibp-booking-form-wrapper .chat__recs h5{
    font-size: 10.5px; font-weight: 600; text-transform: uppercase;
    letter-spacing: .1em; color: var(--muted); margin-bottom: 9px;
}
/* Anything short of a confident match says so, right next to the suggestion. */
#ibp-booking-form-wrapper .chat__flag{
    display: block; margin: -4px 0 10px; font-size: 12px; color: var(--warn);
}
#ibp-booking-form-wrapper .rec{
    display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
    padding: 9px 0; border-top: 1px solid var(--g-line-2);
}
#ibp-booking-form-wrapper .rec:first-of-type{ border-top: 0; }
#ibp-booking-form-wrapper .rec__t{ flex: 1; min-width: 150px; }
#ibp-booking-form-wrapper .rec__t b{ display: block; font-size: 14px; font-weight: 600; color: var(--ink); }
#ibp-booking-form-wrapper .rec__t small{ font-family: var(--mono); font-size: 11px; color: var(--faint); }
#ibp-booking-form-wrapper .rec__p{ font-family: var(--mono); font-size: 14px; font-weight: 500; color: var(--purple); }

#ibp-booking-form-wrapper .chat__in{
    display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
    padding: 6px; border-radius: var(--r-sm);
    background: rgba(255,255,255,.66); border: 1px solid var(--g-line);
}
#ibp-booking-form-wrapper .chat__clip{
    flex: none; width: 34px; height: 34px; border-radius: 9px;
    display: grid; place-items: center; cursor: pointer; font-size: 15px;
    transition: background .16s;
}
#ibp-booking-form-wrapper .chat__clip:hover{ background: rgba(255,255,255,.9); }
#ibp-booking-form-wrapper .chat__in input[type="text"]{
    flex: 1; min-width: 120px; border: 0; background: none;
    font-size: 15px; color: var(--ink); padding: 6px 2px;
}
#ibp-booking-form-wrapper .chat__in input[type="text"]:focus{ outline: none; }
#ibp-booking-form-wrapper .chat__go{
    flex: none; width: 34px; height: 34px; border-radius: 50%;
    background: linear-gradient(135deg, var(--purple), var(--lilac));
    color: #fff; font-size: 15px; display: grid; place-items: center; cursor: pointer;
}
#ibp-booking-form-wrapper .chat__go:disabled{ opacity: .45; cursor: not-allowed; }
#ibp-booking-form-wrapper .chat__chip{
    display: inline-flex; align-items: center; gap: 7px; width: 100%;
    padding: 7px 11px; border-radius: 8px; font-size: 12.5px; color: var(--body);
    background: rgba(var(--purple-rgb),.07); border: 1px solid rgba(var(--purple-rgb),.16);
}
#ibp-booking-form-wrapper .chat__chipx{
    margin-left: auto; width: 20px; height: 20px; border-radius: 50%;
    color: var(--muted); font-size: 15px; line-height: 1; cursor: pointer;
}
#ibp-booking-form-wrapper .chat__chipx:hover{ color: var(--bad); }

@media (max-width: 820px){
    #ibp-booking-form-wrapper .chat__log{ max-height: 240px; }
    #ibp-booking-form-wrapper .chat__in input[type="text"]{ font-size: 16px; }
}


/* Pins are the primary control on a phone; 27px radius in model space is far
   smaller once the figure is scaled down to 230px. */
@media (max-width: 820px){
    #ibp-booking-form-wrapper .pin circle.halo{ r: 40; }
    #ibp-booking-form-wrapper .pin.on circle.halo{ r: 48; }
    #ibp-booking-form-wrapper .pin circle.core{ r: 13; }
    #ibp-booking-form-wrapper .region path{ stroke-width: 2.2; }
}

/* ============================================================
   ARMOUR
   Last in the file, and the only place !important is used.

   Elementor's kit stylesheet carries rules like:

       .elementor-kit-128935 button {
           background-image: none !important;
           box-shadow: none !important;
       }

   An !important declaration beats any normal one regardless of specificity, so
   no amount of scoping wins that argument — every gradient button in the widget
   rendered flat. The only answer is to reassert with the same weight.

   Deliberately narrow: interactive surfaces whose appearance carries meaning,
   and only the properties themes actually force (background, shadow, border,
   colour). Everything else stays a normal declaration so a site can still
   restyle the widget if it wants to.
   ============================================================ */

/* --- Buttons --------------------------------------------------------- */
#ibp-booking-form-wrapper .btn{
    background: var(--g) !important;
    background-image: none !important;
    border: 1px solid var(--g-line) !important;
    color: var(--ink) !important;
    box-shadow: none !important;
}
#ibp-booking-form-wrapper .btn:hover:not(:disabled){
    background: var(--g-strong) !important;
}
#ibp-booking-form-wrapper .btn--p,
#ibp-booking-form-wrapper .exam.in .btn:not(.btn--g),
#ibp-booking-form-wrapper .pack.in .btn:not(.btn--g){
    background: linear-gradient(135deg, var(--purple), #9b1fb0) !important;
    background-image: linear-gradient(135deg, var(--purple), #9b1fb0) !important;
    border-color: transparent !important;
    color: #fff !important;
}
#ibp-booking-form-wrapper .btn--p:hover:not(:disabled){
    background-image: linear-gradient(135deg, #8b0f9e, #ab2ac0) !important;
}
#ibp-booking-form-wrapper .btn--g{
    background: none !important;
    background-image: none !important;
    border-color: transparent !important;
    color: var(--muted) !important;
}
#ibp-booking-form-wrapper .btn--g:hover{
    background: var(--g-soft) !important;
}

/* --- The floating step action ---------------------------------------- */
#ibp-booking-form-wrapper .fab{
    background-image: linear-gradient(135deg, var(--purple), #9b1fb0) !important;
    color: #fff !important;
    border: 0 !important;
    box-shadow: 0 12px 34px rgba(var(--purple-rgb), .38) !important;
}
#ibp-booking-form-wrapper .fab--back{
    background-image: none !important;
    background-color: rgba(255,255,255,.86) !important;
    color: var(--body) !important;
    border: 1px solid var(--g-line) !important;
    box-shadow: var(--g-sh) !important;
}

/* --- Other gradient surfaces ----------------------------------------- */
#ibp-booking-form-wrapper .scrim__cta,
#ibp-booking-form-wrapper .ask__go,
#ibp-booking-form-wrapper .chat__go,
#ibp-booking-form-wrapper .pack__f,
#ibp-booking-form-wrapper .done__m{
    background-image: linear-gradient(135deg, var(--purple), var(--lilac)) !important;
    color: #fff !important;
}
#ibp-booking-form-wrapper .pill.on,
#ibp-booking-form-wrapper .slot.on,
#ibp-booking-form-wrapper .day.on,
#ibp-booking-form-wrapper .steps button[aria-current="step"] i,
#ibp-booking-form-wrapper .miniSteps button[aria-current="step"],
#ibp-booking-form-wrapper .viewtoggle button.on{
    background-image: linear-gradient(135deg, var(--purple), var(--lilac)) !important;
    color: #fff !important;
    border-color: transparent !important;
}

/* --- Glass surfaces the theme would flatten --------------------------- */
#ibp-booking-form-wrapper .exam,
#ibp-booking-form-wrapper .pack,
#ibp-booking-form-wrapper .loc,
#ibp-booking-form-wrapper .cal,
#ibp-booking-form-wrapper .chat,
#ibp-booking-form-wrapper .ask,
#ibp-booking-form-wrapper .glass,
#ibp-booking-form-wrapper .rev,
#ibp-booking-form-wrapper .addons{
    background-color: var(--g) !important;
    border: 1px solid var(--g-line) !important;
}
#ibp-booking-form-wrapper .ask,
#ibp-booking-form-wrapper .readout,
#ibp-booking-form-wrapper .ov__box{
    background-color: var(--g-strong) !important;
    box-shadow: var(--g-sh-lg) !important;
}
#ibp-booking-form-wrapper .app{
    box-shadow: 0 18px 50px rgba(64,38,84,.22), 0 2px 8px rgba(64,38,84,.1) !important;
}
#ibp-booking-form-wrapper .bar{
    background-color: rgba(255,255,255,.86) !important;
    box-shadow: 0 -8px 34px rgba(64,38,84,.18) !important;
}

/* Selected states must remain unmistakable — this is a medical booking and
   the patient has to be able to see what they have chosen. */
#ibp-booking-form-wrapper .exam.in,
#ibp-booking-form-wrapper .pack.in,
#ibp-booking-form-wrapper .loc.in{
    border-color: rgba(var(--purple-rgb), .5) !important;
    box-shadow: var(--ring) !important;
}


/* --- Checkboxes ------------------------------------------------------
   Drawn rather than native.

   Restoring the browser's own control means winning an argument with the theme
   over `appearance`, and losing it once leaves a patient with no visible way to
   consent. A theme can also hide a native control with `display: none`, which
   no amount of appearance armour helps with — hiding the real input and drawing
   a substitute is the standard way themes style checkboxes, so it is exactly
   what this one is likely to do.

   So the control is built here instead: `appearance: none` on purpose, then a
   box and a tick drawn with our own properties, all of which are armoured. The
   input remains a real focusable input, so keyboard and screen-reader
   behaviour is unchanged.
   ------------------------------------------------------------------- */
#ibp-booking-form-wrapper input[type="checkbox"],
#ibp-booking-form-wrapper input[type="radio"]{
    appearance: none !important;
    -webkit-appearance: none !important;
    -moz-appearance: none !important;

    display: inline-grid !important;
    place-content: center !important;
    position: static !important;
    float: none !important;

    width: 20px !important;
    height: 20px !important;
    min-width: 20px !important;
    min-height: 20px !important;
    max-width: 20px !important;
    max-height: 20px !important;
    flex: 0 0 20px !important;
    padding: 0 !important;
    margin: 0 !important;

    background: #fff !important;
    background-image: none !important;
    border: 2px solid rgba(var(--purple-rgb), .35) !important;
    border-radius: 6px !important;
    box-shadow: none !important;

    opacity: 1 !important;
    visibility: visible !important;
    clip: auto !important;
    clip-path: none !important;
    transform: none !important;
    pointer-events: auto !important;
    cursor: pointer !important;
    transition: border-color .15s ease, background-color .15s ease !important;
}

#ibp-booking-form-wrapper input[type="radio"]{
    border-radius: 50% !important;
}

/* The tick. A drawn glyph rather than a font character, so it cannot be lost
   to a webfont that failed to load. */
#ibp-booking-form-wrapper input[type="checkbox"]::before{
    content: "" !important;
    display: block !important;
    width: 11px !important;
    height: 11px !important;
    transform: scale(0) !important;
    transition: transform .12s ease-in-out !important;
    background-color: #fff !important;
    clip-path: polygon(14% 44%, 0 65%, 45% 100%, 100% 16%, 80% 0%, 43% 62%) !important;
}
#ibp-booking-form-wrapper input[type="radio"]::before{
    content: "" !important;
    display: block !important;
    width: 9px !important;
    height: 9px !important;
    border-radius: 50% !important;
    transform: scale(0) !important;
    transition: transform .12s ease-in-out !important;
    background-color: #fff !important;
}

#ibp-booking-form-wrapper input[type="checkbox"]:checked,
#ibp-booking-form-wrapper input[type="radio"]:checked{
    background-color: var(--purple) !important;
    border-color: var(--purple) !important;
}
#ibp-booking-form-wrapper input[type="checkbox"]:checked::before,
#ibp-booking-form-wrapper input[type="radio"]:checked::before{
    transform: scale(1) !important;
}

#ibp-booking-form-wrapper input[type="checkbox"]:hover:not(:checked),
#ibp-booking-form-wrapper input[type="radio"]:hover:not(:checked){
    border-color: rgba(var(--purple-rgb), .6) !important;
}
#ibp-booking-form-wrapper input[type="checkbox"]:focus-visible,
#ibp-booking-form-wrapper input[type="radio"]:focus-visible{
    outline: 2px solid var(--purple) !important;
    outline-offset: 2px !important;
}

/* The consent tick gates the whole booking, so it is a little larger. */
#ibp-booking-form-wrapper .consent input[type="checkbox"]{
    width: 22px !important;
    height: 22px !important;
    min-width: 22px !important;
    max-width: 22px !important;
    min-height: 22px !important;
    max-height: 22px !important;
    flex: 0 0 22px !important;
    margin-top: 1px !important;
}

/* The assistant's file input is hidden on purpose — the paperclip is its
   control. Nothing above should drag it back into view. */
#ibp-booking-form-wrapper input[type="file"][hidden]{
    display: none !important;
}


/* The dialog is solid on purpose; the theme must not tint it back. */
#ibp-booking-form-wrapper .ov__box{
    background-color: #fff !important;
    background-image: none !important;
}
#ibp-booking-form-wrapper .ov__foot{ background-color: #fbf8fc !important; }
#ibp-booking-form-wrapper .ov{ background-color: rgba(30,18,38,.58) !important; }


/* The offer ring is the only signal that a second centre can be chosen. */
#ibp-booking-form-wrapper .offer__r{
    border: 2px solid rgba(var(--purple-rgb), .32) !important;
    background-color: #fff !important;
    background-image: none !important;
    width: 18px !important;
    height: 18px !important;
    min-width: 18px !important;
    border-radius: 50% !important;
    opacity: 1 !important;
    visibility: visible !important;
}
#ibp-booking-form-wrapper .offer.pick .offer__r{
    border-color: var(--purple) !important;
}
#ibp-booking-form-wrapper .offer.pick .offer__r::after{
    background-color: var(--purple) !important;
}

/* ---------- preparation inside a chosen card ----------
   The card grid stretches every card to the tallest in its row, so a chosen
   card generally has room going spare. Preparation is what the patient needs
   next once they have chosen, so it goes there instead of behind a click. */
#ibp-booking-form-wrapper .inprep{
    margin-top: 14px;
    padding-top: 13px;
    border-top: 1px dashed rgba(var(--purple-rgb), .22);
    animation: ibpfade .24s ease;
}
#ibp-booking-form-wrapper .inprep section + section{ margin-top: 12px; }
#ibp-booking-form-wrapper .inprep h5{
    margin: 0 0 5px;
    font-size: 10px; font-weight: 600; text-transform: uppercase;
    letter-spacing: .1em; color: var(--muted);
}
#ibp-booking-form-wrapper .inprep ul{ margin: 0; padding: 0; list-style: none; }
#ibp-booking-form-wrapper .inprep li{
    position: relative; padding-left: 16px; margin-bottom: 4px;
    font-size: 12.5px; line-height: 1.5; color: var(--body);
}
#ibp-booking-form-wrapper .inprep li::before{
    content: ""; position: absolute; left: 4px; top: 7px;
    width: 4px; height: 4px; border-radius: 50%; background: var(--lilac);
}
#ibp-booking-form-wrapper .inprep .caution{
    background: rgba(168,85,16,.07);
    border-left: 3px solid var(--warn);
    border-radius: 0 8px 8px 0;
    padding: 9px 11px;
}
#ibp-booking-form-wrapper .inprep .caution h5{ color: var(--warn); }
#ibp-booking-form-wrapper .inprep .caution li::before{ background: var(--warn); }

/* Not on a phone: the space is not there, and the extra height would push
   every other option off the screen. */
@media (max-width: 900px){
    #ibp-booking-form-wrapper .inprep{ display: none; }
}
