@import url("https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,300..700,0..1,-50..200&display=block");

.sp-chat {
  --sp-blue: #54779f;
  --sp-blue-deep: #3f668f;
  --sp-pink: #dd96b8;
  --sp-pink-soft: #f2bcd1;
  --sp-white: #fffdf7;
  --sp-ink: #17191c;
  position: fixed;
  z-index: 1000;
  inset: 0;
  color: var(--sp-white);
  font-family: Arial, Helvetica, sans-serif;
  font-weight: 700;
  line-height: 1.35;
  pointer-events: none;
}

/* v119: preserve the optimized desktop message rendering while restoring the
   full-window cinematic transition. The chat panel itself now resolves from
   soft blur to focus, and the scrim smoothly blurs the live page behind it. */
@media (min-width: 601px) and (hover: hover) and (pointer: fine) {
  .sp-chat-scrim {
    -webkit-backdrop-filter: blur(0);
    backdrop-filter: blur(0);
    transition:
      opacity 420ms ease,
      -webkit-backdrop-filter 520ms cubic-bezier(.22, 1, .36, 1),
      backdrop-filter 520ms cubic-bezier(.22, 1, .36, 1) !important;
    will-change: opacity, backdrop-filter;
  }

  .sp-chat.is-open .sp-chat-scrim {
    background: rgba(12, 21, 31, .31);
    -webkit-backdrop-filter: blur(7px);
    backdrop-filter: blur(7px);
  }

  .sp-chat-panel,
  .sp-chat.is-open .sp-chat-panel,
  .sp-chat.is-closing .sp-chat-panel {
    will-change: transform, filter, opacity !important;
  }

  .sp-chat.is-open .sp-chat-panel {
    animation: sp-chat-panel-open-desktop-blur 360ms cubic-bezier(.22, 1, .36, 1) both !important;
  }

  .sp-chat.is-closing .sp-chat-panel {
    animation: sp-chat-panel-close-desktop-blur 260ms cubic-bezier(.4, 0, 1, 1) both !important;
  }

  .sp-chat-messages,
  .sp-chat-card,
  .sp-chat-suggestion,
  .sp-chat-input,
  .sp-chat-header {
    will-change: auto !important;
  }

}

@keyframes sp-chat-panel-open-desktop-blur {
  0% {
    opacity: 0;
    filter: blur(15px);
    transform: translate3d(0, 14px, 0) scale(.99);
  }
  100% {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
}

@keyframes sp-chat-panel-close-desktop-blur {
  0% {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
  100% {
    opacity: 0;
    filter: blur(13px);
    transform: translate3d(0, 10px, 0) scale(.992);
  }
}

.sp-chat *,
.sp-chat *::before,
.sp-chat *::after { box-sizing: border-box; }

.sp-chat-scrim {
  position: absolute;
  inset: 0;
  border: 0;
  background: rgba(12, 21, 31, .27);
  opacity: 0;
  pointer-events: none;
  backdrop-filter: blur(0);
  transition: opacity 420ms ease, backdrop-filter 420ms ease;
}

.sp-chat.is-open .sp-chat-scrim {
  opacity: 1;
  pointer-events: auto;
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
}

.sp-chat-launcher-anchor {
  position: fixed;
  z-index: 1001;
  right: max(20px, env(safe-area-inset-right));
  bottom: max(28px, calc(env(safe-area-inset-bottom) + 8px));
  pointer-events: none;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

.sp-chat-launcher {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: 58px;
  padding: 7px 19px 7px 7px;
  border: 2px solid #111;
  border-radius: 999px;
  background: var(--sp-blue);
  color: #fff;
  box-shadow: 5px 5px 0 #111;
  cursor: pointer;
  pointer-events: none;
  font-size: .79rem;
  font-weight: 800;
  letter-spacing: .045em;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 0;
  filter: blur(9px);
  transform: translate3d(0, 22px, 0) scale(.82);
  transform-origin: center;
  transition: transform 360ms cubic-bezier(.22, 1, .36, 1), opacity 300ms ease, filter 360ms ease;
  will-change: transform, opacity;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

.sp-chat.is-launcher-ready:not(.has-launcher-arrived) .sp-chat-launcher {
  pointer-events: auto;
  animation: sp-chat-launcher-arrive 980ms cubic-bezier(.16, 1, .3, 1) both;
}

.sp-chat.has-launcher-arrived .sp-chat-launcher {
  opacity: 1;
  filter: blur(0);
  transform: translate3d(0, 0, 0) scale(1);
  pointer-events: auto;
  animation: none;
}

.sp-chat.is-launcher-shaking .sp-chat-launcher {
  animation: sp-chat-launcher-pop 860ms cubic-bezier(.22, 1, .36, 1) both;
}

.sp-chat-launcher:hover,
.sp-chat-launcher:focus-visible,
.sp-chat-launcher:active {
  transform: translate3d(0, 0, 0) scale(1);
  box-shadow: 5px 5px 0 #111;
}

.sp-chat.is-open .sp-chat-launcher {
  animation: none;
  opacity: 0;
  filter: blur(6px);
  transform: translate3d(0, 8px, 0) scale(.72);
  pointer-events: none;
}

.sp-chat.is-closing .sp-chat-launcher {
  animation: sp-chat-launcher-return 320ms 400ms cubic-bezier(.22, 1, .36, 1) both;
  pointer-events: none;
}

.sp-chat-launcher-mark {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 39px;
  height: 39px;
  overflow: hidden;
  border: 2px solid #111;
  border-radius: 50%;
  background: #fff;
}

.sp-chat-launcher-mark img { width: 72%; height: 72%; object-fit: contain; }

@keyframes sp-chat-launcher-arrive {
  0% { opacity: 0; filter: blur(10px); transform: translate3d(0, 48px, 0) scale(.7); }
  48% { opacity: 1; filter: blur(0); transform: translate3d(0, -11px, 0) scale(1.07); }
  70% { transform: translate3d(0, 4px, 0) scale(.98); }
  86% { transform: translate3d(0, -2px, 0) scale(1.015); }
  100% { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes sp-chat-launcher-pop {
  0%, 100% { transform: scale3d(1, 1, 1); }
  22% { transform: scale3d(1.14, 1.14, 1); }
  43% { transform: scale3d(.955, .955, 1); }
  68% { transform: scale3d(1.09, 1.09, 1); }
  85% { transform: scale3d(.99, .99, 1); }
}

@keyframes sp-chat-launcher-return {
  0% { opacity: 0; filter: blur(5px); transform: translate3d(0, 7px, 0) scale(.88); }
  100% { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0) scale(1); }
}

.sp-chat-panel {
  position: absolute;
  right: max(20px, env(safe-area-inset-right));
  bottom: max(20px, env(safe-area-inset-bottom));
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  width: min(430px, calc(100vw - 40px));
  height: min(720px, calc(100dvh - 112px));
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, .18);
  border-radius: 28px;
  background:
    linear-gradient(145deg, #6d8fb5 0%, var(--sp-blue) 48%, var(--sp-blue-deep) 100%);
  box-shadow: 0 28px 80px rgba(19, 36, 55, .3);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  filter: blur(18px);
  transform: translate3d(0, 18px, 0) scale(.982);
  transition: transform 660ms cubic-bezier(.16, 1, .3, 1), filter 620ms cubic-bezier(.16, 1, .3, 1), opacity 520ms ease, visibility 0s linear 660ms;
  will-change: transform, filter, opacity;
}

.sp-chat-panel::before {
  content: "";
  position: absolute;
  z-index: 0;
  inset: -18%;
  pointer-events: none;
  background-image:
    radial-gradient(ellipse, rgba(227, 163, 194, .52) 0%, rgba(200, 124, 160, .32) 28%, rgba(200, 124, 160, .11) 48%, transparent 68%),
    radial-gradient(ellipse, rgba(215, 139, 177, .36) 0%, rgba(197, 121, 159, .18) 34%, transparent 67%),
    radial-gradient(ellipse, rgba(159, 201, 239, .34) 0%, rgba(120, 171, 218, .17) 34%, transparent 69%),
    radial-gradient(ellipse, rgba(176, 214, 244, .24) 0%, transparent 66%);
  background-repeat: no-repeat;
  background-size: 70% 64%, 58% 56%, 72% 66%, 64% 58%;
  /* Pink glows stay on the left edge, right edge, or along the bottom. The center remains blue. */
  background-position: var(--sp-pink-1-k0, -42% 58%), var(--sp-pink-2-k0, 126% 55%), 118% 8%, -26% 84%;
  filter: blur(18px) saturate(112%);
  opacity: .96;
  transform: translate3d(0, 0, 0) scale(1.05);
  transform-origin: center;
  animation: none;
  transition: filter 920ms cubic-bezier(.16, 1, .3, 1), opacity 920ms cubic-bezier(.16, 1, .3, 1);
  will-change: auto;
}

/* v150: send feedback changes motion speed only. The gradient keeps the same
   opacity, saturation, blur, and brightness before, during, and after a send. */

.sp-chat.is-open .sp-chat-panel::before,
.sp-chat.is-closing .sp-chat-panel::before {
  animation-name: sp-chat-ambient-gradient-travel;
  animation-duration: var(--sp-ambient-duration, 44s);
  animation-delay: var(--sp-ambient-delay, 0s);
  animation-timing-function: cubic-bezier(.42, 0, .58, 1);
  animation-iteration-count: infinite;
  will-change: background-position, background-size, transform;
}

@keyframes sp-chat-ambient-gradient-travel {
  0% {
    background-position: var(--sp-pink-1-k0, -42% 58%), var(--sp-pink-2-k0, 126% 55%), 118% 8%, -26% 84%;
    background-size: 70% 64%, 58% 56%, 72% 66%, 64% 58%;
    transform: translate3d(-2%, -1%, 0) scale(1.05) rotate(-1deg);
  }
  11% {
    background-position: var(--sp-pink-1-k1, -28% 78%), var(--sp-pink-2-k1, 116% 80%), 86% -10%, 2% 66%;
    background-size: 76% 68%, 56% 60%, 68% 63%, 68% 61%;
    transform: translate3d(1%, -2%, 0) scale(1.075) rotate(.35deg);
  }
  27% {
    background-position: var(--sp-pink-1-k2, -8% 108%), var(--sp-pink-2-k2, 108% 108%), 42% 12%, 74% 2%;
    background-size: 68% 62%, 62% 54%, 76% 69%, 60% 55%;
    transform: translate3d(2%, 1%, 0) scale(1.095) rotate(1.1deg);
  }
  43% {
    background-position: var(--sp-pink-1-k3, 8% 122%), var(--sp-pink-2-k3, 92% 118%), -22% 37%, 112% 46%;
    background-size: 74% 66%, 57% 59%, 70% 64%, 67% 60%;
    transform: translate3d(-1%, 2%, 0) scale(1.065) rotate(-.55deg);
  }
  58% {
    background-position: var(--sp-pink-1-k4, -2% 110%), var(--sp-pink-2-k4, 102% 112%), 108% 84%, 28% 3%;
    background-size: 71% 69%, 64% 55%, 74% 67%, 62% 57%;
    transform: translate3d(-2%, 1%, 0) scale(1.105) rotate(.75deg);
  }
  72% {
    background-position: var(--sp-pink-1-k5, -24% 80%), var(--sp-pink-2-k5, 114% 78%), 54% 109%, -24% 43%;
    background-size: 77% 63%, 58% 61%, 69% 62%, 69% 63%;
    transform: translate3d(1%, 3%, 0) scale(1.08) rotate(-1.15deg);
  }
  87% {
    background-position: var(--sp-pink-1-k6, -44% 62%), var(--sp-pink-2-k6, 128% 60%), -18% 18%, 88% 73%;
    background-size: 69% 67%, 61% 53%, 77% 70%, 61% 56%;
    transform: translate3d(2%, -1%, 0) scale(1.095) rotate(.45deg);
  }
  100% {
    background-position: var(--sp-pink-1-k0, -42% 58%), var(--sp-pink-2-k0, 126% 55%), 118% 8%, -26% 84%;
    background-size: 70% 64%, 58% 56%, 72% 66%, 64% 58%;
    transform: translate3d(-2%, -1%, 0) scale(1.05) rotate(-1deg);
  }
}

.sp-chat-panel > * { position: relative; z-index: 1; min-width: 0; width: 100%; }

.sp-chat.is-open .sp-chat-panel {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  filter: blur(0);
  transform: translate3d(0, 0, 0) scale(1);
  transition-delay: 0s;
  animation: sp-chat-panel-open 760ms 16ms cubic-bezier(.65, 0, .35, 1) both;
}

.sp-chat.is-closing .sp-chat-panel {
  visibility: visible;
  opacity: 1;
  pointer-events: none;
  animation: sp-chat-panel-close 760ms cubic-bezier(.65, 0, .35, 1) both;
}

@keyframes sp-chat-panel-open {
  0% { opacity: 0; filter: blur(16px); transform: translate3d(0, 24px, 0); }
  100% { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0); }
}

@keyframes sp-chat-panel-close {
  0% { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0); }
  100% { opacity: 0; filter: blur(16px); transform: translate3d(0, 24px, 0); }
}

.sp-chat-header {
  position: absolute;
  z-index: 5;
  top: 14px;
  right: 14px;
  display: flex;
  justify-content: flex-end;
  gap: 4px;
  width: auto;
  padding: 3px;
  border-radius: 999px;
  background: rgba(39, 76, 116, .62);
  -webkit-backdrop-filter: blur(9px) saturate(112%);
  backdrop-filter: blur(9px) saturate(112%);
  pointer-events: none;
}

.sp-chat-title {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.sp-chat-header-button,
.sp-chat-send {
  display: grid;
  place-items: center;
  cursor: pointer;
}

.sp-chat-header-button {
  width: 44px;
  height: 44px;
  padding: 7px;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: #fff;
  pointer-events: auto;
  opacity: .92;
  transition: opacity 180ms ease, transform 280ms cubic-bezier(.22, 1, .36, 1);
  appearance: none;
  -webkit-appearance: none;
  -webkit-tap-highlight-color: transparent;
}

.sp-chat-header-button:hover { opacity: 1; transform: scale(1.08); }
.sp-chat-header-button:disabled { opacity: .4; cursor: not-allowed; }
.sp-chat-close:hover { transform: rotate(-5deg) scale(1.05); }
.sp-chat-reset:hover { transform: rotate(8deg) scale(1.05); }

.sp-chat-close-glyph { width: 29px; height: 29px; fill: none; stroke: currentColor; stroke-width: 2.25; stroke-linecap: round; stroke-linejoin: round; }

.sp-chat-material-icon {
  display: inline-block;
  overflow: hidden;
  width: 1em;
  font-family: "Material Symbols Rounded";
  font-size: 21px;
  font-style: normal;
  font-weight: 500;
  line-height: 1;
  letter-spacing: normal;
  text-align: center;
  text-transform: none;
  white-space: nowrap;
  direction: ltr;
  font-feature-settings: "liga";
  font-variation-settings: "FILL" 0, "wght" 500, "GRAD" 0, "opsz" 24;
  -webkit-font-feature-settings: "liga";
  -webkit-font-smoothing: antialiased;
}

.sp-chat-reset-glyph { font-size: 27px; transform: rotate(0deg) translateZ(0); transform-origin: center; backface-visibility: hidden; }
.sp-chat-reset.is-spinning .sp-chat-reset-glyph { animation: sp-chat-reset-spin 760ms cubic-bezier(.22, 1, .36, 1) both; }

@keyframes sp-chat-reset-spin {
  0% { transform: rotate(0) scale(1); }
  44% { transform: rotate(205deg) scale(.84); }
  78% { transform: rotate(382deg) scale(1.08); }
  100% { transform: rotate(360deg) scale(1); }
}

.sp-chat-messages {
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: auto;
  overflow-anchor: none;
  padding: 86px 25px 26px;
  scrollbar-color: rgba(255, 255, 255, .45) transparent;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  contain: paint;
  will-change: scroll-position;
  transform: translate3d(0, 0, 0);
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  transition: opacity 300ms ease, filter 340ms ease, transform 340ms cubic-bezier(.22, 1, .36, 1);
}

.sp-chat-messages::-webkit-scrollbar { width: 0; height: 0; display: none; }

.sp-chat-scroll-spacer {
  width: 1px;
  height: 0;
  margin: 0;
  padding: 0;
  pointer-events: none;
}

.sp-chat-message {
  display: block;
  width: min(84%, 370px);
  margin: 0 auto 38px 0;
}

.sp-chat-message.is-user { width: min(74%, 310px); margin-right: 0; margin-left: auto; text-align: right; }
.sp-chat-message-copy { min-width: 0; }
.sp-chat-avatar,
.sp-chat-speaker { display: none; }

.sp-chat-block {
  margin: 0 0 13px;
  color: #fff;
  font-size: 1.16rem;
  font-weight: 800;
  line-height: 1.28;
  letter-spacing: -.025em;
  overflow-wrap: anywhere;
  text-shadow: 0 1px 16px rgba(25, 49, 76, .14);
}

.sp-chat-block:last-child { margin-bottom: 0; }
.sp-chat-block.is-spacer { height: 20px; margin: 0; padding: 0; border: 0; pointer-events: none; }
.sp-chat-message, .sp-chat-message-copy, .sp-chat-block, .sp-chat-block.is-list, .sp-chat-block.is-list li { min-width: 0; max-width: 100%; }
.sp-chat-message-copy, .sp-chat-block, .sp-chat-block.is-list li { overflow-wrap: anywhere; word-break: normal; }
.sp-chat-block.is-heading {
  margin: 18px 0 7px;
  padding-bottom: 6px;
  border-bottom: 1px solid rgba(255, 255, 255, .18);
  color: rgba(255, 255, 255, .92);
  font-size: .88rem;
  font-weight: 900;
  line-height: 1.2;
  letter-spacing: .025em;
  text-transform: uppercase;
}
.sp-chat-speaker + .sp-chat-block.is-heading { margin-top: 0; }
.sp-chat-block.is-list { display: grid; gap: 0; margin: 11px 0 10px; padding: 0; border-top: 0; list-style: none; }
.sp-chat-block.is-list li { position: relative; padding: 11px 2px 11px 25px; border-bottom: 0; font-size: .94em; font-weight: 820; line-height: 1.38; letter-spacing: -.012em; }
.sp-chat-block.is-list:not(.is-ordered) li::before { content: ""; position: absolute; top: calc(11px + .69em); left: 3px; width: 8px; height: 8px; border-radius: 50%; background: rgba(255, 255, 255, .94); box-shadow: 0 0 0 2px rgba(255, 255, 255, .12); transform: translateY(-50%); }
.sp-chat-block.is-list li.is-key-value { display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(0, .92fr); align-items: start; column-gap: 12px; padding-left: 25px; }
.sp-chat-block.is-list:not(.is-ordered) li.is-key-value::before { content: ""; }
.sp-chat-block.is-list.is-ordered { counter-reset: list-item; }
.sp-chat-block.is-list.is-ordered li { padding-left: 29px; counter-increment: list-item; }
.sp-chat-block.is-list.is-ordered li::before { content: counter(list-item) "."; position: absolute; top: 11px; left: 1px; min-width: 22px; color: rgba(255, 255, 255, .7); font-weight: 900; font-variant-numeric: tabular-nums; }
.sp-chat-list-label { color: #fff; font-weight: 900; letter-spacing: -.018em; }
.sp-chat-list-label, .sp-chat-list-value { min-width: 0; max-width: 100%; overflow-wrap: anywhere; word-break: normal; }
.sp-chat-list-value { margin-left: 0; color: rgba(255, 255, 255, .86); font-weight: 760; text-align: right; white-space: normal; }
.sp-chat-block strong { font-weight: 900; }

.sp-chat-message.is-user.sp-chat-user-pending { opacity: 0; filter: blur(9px); transform: translate3d(0, 42px, 0); will-change: transform, opacity, filter; backface-visibility: hidden; -webkit-backface-visibility: hidden; }


.sp-chat-enter {
  opacity: 0;
  filter: blur(9px);
  transform: translate3d(0, 42px, 0);
  will-change: transform, opacity, filter;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}
.sp-chat-enter.is-visible { animation: sp-chat-rise-focus 980ms cubic-bezier(.22, 1, .36, 1) both; }
.sp-chat-card.sp-chat-enter {
  filter: none !important;
  will-change: transform, opacity;
}

@keyframes sp-chat-rise-focus {
  0% { opacity: 0; filter: blur(9px); transform: translate3d(0, 42px, 0); }
  100% { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0); }
}

.sp-chat-card {
  width: 100%;
  margin: 2px 0 38px;
  padding: 22px 21px 21px;
  border: 1px solid rgba(255, 255, 255, .14);
  border-radius: 28px;
  background: rgba(229, 239, 249, .17);
  color: #fff;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08);
  backdrop-filter: blur(20px) saturate(1.08);
  -webkit-backdrop-filter: blur(20px) saturate(1.08);
}

.sp-chat-card-heading { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
.sp-chat-card-status {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: #f4f0e7;
  color: var(--sp-ink);
}
.sp-chat-card-status .sp-chat-material-icon { font-size: 23px; font-weight: 600; }
.sp-chat-card-eyebrow { margin: 0; color: #fff; font-size: .78rem; font-weight: 900; letter-spacing: .035em; text-transform: uppercase; }
.sp-chat-card-title { margin: 0; color: #fff; font-size: 1.46rem; font-weight: 900; line-height: 1.08; letter-spacing: -.035em; }
.sp-chat-card-value { display: block; margin: 11px 0 2px; color: #fff; font-size: 1.72rem; font-weight: 900; line-height: 1; letter-spacing: -.035em; }
.sp-chat-card-details { display: grid; gap: 14px; margin: 21px 0 0; padding: 0; list-style: none; }
.sp-chat-card-details li { display: grid; grid-template-columns: 30px minmax(0, 1fr); align-items: center; gap: 10px; color: rgba(255, 255, 255, .96); font-size: .91rem; font-weight: 700; line-height: 1.25; }
.sp-chat-card-detail-icon { color: #fff; font-size: 24px; font-weight: 450; }
.sp-chat-card-links { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 20px; }
.sp-chat-card-links a { display: inline-flex; align-items: center; min-height: 34px; padding: 7px 11px; border: 1px solid rgba(255, 255, 255, .24); border-radius: 999px; background: rgba(255, 255, 255, .1); color: #fff; font-size: .69rem; font-weight: 800; text-decoration: none; }
.sp-chat-card-videos { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; margin-top: 20px; }
.sp-chat-video { margin: 0; }
.sp-chat-video iframe {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  border: 0;
  border-radius: 20px;
  background: #173654;
  box-shadow: 0 12px 28px rgba(12, 31, 51, .18);
}
.sp-chat-video.is-portrait iframe { width: min(68%, 240px); aspect-ratio: 9 / 16; margin-inline: auto; }

.sp-chat-response-stage { min-height: 0; scroll-margin-top: 10px; }
.sp-chat-response-stage:not(.is-current) { min-height: 0; }
.sp-chat-response-stage .sp-chat-message:last-child,
.sp-chat-response-stage .sp-chat-card:last-child { margin-bottom: 0; }
.sp-chat-response-stage.has-reply + .sp-chat-message.is-user { margin-top: 18px; }
.sp-chat-thinking { width: auto; max-width: 100%; min-width: 0; margin-bottom: 28px; }
.sp-chat-thinking-line { display: flex; flex-wrap: nowrap; align-items: center; width: 100%; max-width: 100%; min-width: 0; gap: 8px; color: rgba(255, 255, 255, .72); font-size: .7rem; font-weight: 800; letter-spacing: .055em; line-height: 1; text-transform: uppercase; white-space: nowrap; }
.sp-chat-thinking-label { display: inline-grid; flex: 0 1 auto; align-items: center; min-width: 0; white-space: nowrap; }
.sp-chat-thinking-line.is-tight { gap: 6px; font-size: .6rem; letter-spacing: .025em; }
.sp-chat-thinking-line.is-extra-tight { gap: 5px; font-size: .54rem; letter-spacing: .012em; }
.sp-chat-thinking-copy { grid-area: 1 / 1; white-space: nowrap; opacity: 0; filter: blur(8px); transform: translate3d(0, 4px, 0); transition: opacity 320ms cubic-bezier(.22, 1, .36, 1), filter 340ms cubic-bezier(.22, 1, .36, 1), transform 340ms cubic-bezier(.22, 1, .36, 1); will-change: opacity, filter, transform; }
.sp-chat-thinking-copy.is-current { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0); }
.sp-chat-thinking-copy.is-current.is-leaving { opacity: 0; filter: blur(8px); transform: translate3d(0, -4px, 0); }
.sp-chat-dots { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 4px; }
.sp-chat-dots i { display: block; width: 5px; height: 5px; border-radius: 50%; background: #fff; animation: sp-chat-think 1.15s ease-in-out infinite; }
.sp-chat-dots i:nth-child(2) { animation-delay: 140ms; }
.sp-chat-dots i:nth-child(3) { animation-delay: 280ms; }
@keyframes sp-chat-think { 0%, 75%, 100% { opacity: .25; filter: blur(1px); transform: translateY(0); } 35% { opacity: 1; filter: blur(0); transform: translateY(-4px); } }

.sp-chat-footer {
  z-index: 4 !important;
  align-self: end;
  overflow: visible;
  margin-top: -72px;
  padding: 72px 16px calc(16px + env(safe-area-inset-bottom));
  position: relative;
  isolation: isolate;
  pointer-events: none;
  background: none;
}
.sp-chat-footer::before {
  content: "";
  position: absolute;
  z-index: 0;
  right: 0;
  bottom: 0;
  left: 0;
  height: 230px;
  pointer-events: none;
  opacity: 0;
  background: linear-gradient(to bottom, rgba(68, 105, 146, 0) 0, rgba(68, 105, 146, 0) 8px, rgba(68, 105, 146, .72) 56px, rgba(65, 101, 141, .96) 84px, rgba(63, 98, 138, .99) 100%);
  transition: opacity 1120ms cubic-bezier(.37, 0, .63, 1);
  transform: translateZ(0);
  backface-visibility: hidden;
  will-change: opacity;
}
.sp-chat.has-suggestions .sp-chat-footer::before { opacity: 1; }
.sp-chat-footer > * { position: relative; z-index: 1; pointer-events: auto; }
.sp-chat-suggestions {
  --sp-suggestions-padding-bottom: 10px;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-auto-flow: row dense;
  gap: 7px;
  width: 100%;
  max-height: 184px;
  padding: 3px 1px var(--sp-suggestions-padding-bottom);
  opacity: 1;
  filter: blur(0);
  overflow: visible;
  transform: translate3d(0, 0, 0);
  transform-origin: center bottom;
}
.sp-chat-suggestions:empty { display: none; }
.sp-chat-suggestion {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 34px;
  width: 100%;
  min-width: 0;
  max-width: 100%;
  padding: 7px 11px;
  border: 1px solid rgba(255, 255, 255, .24);
  border-radius: 999px;
  background: rgba(255, 255, 255, .11);
  color: #fff;
  cursor: pointer;
  font-size: .68rem;
  font-weight: 800;
  line-height: 1.1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  transition: background-color 180ms ease;
  will-change: opacity, filter, transform;
}
.sp-chat-suggestion.is-wide {
  grid-column: 1 / -1;
  white-space: normal;
  text-wrap: balance;
}
.sp-chat-suggestions.is-video-type-menu {
  grid-template-columns: minmax(0, 1fr);
}
.sp-chat-suggestions.is-video-type-menu .sp-chat-suggestion.is-quote-path {
  grid-column: 1 / -1;
}
.sp-chat-suggestions.is-card-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.sp-chat-suggestions.is-card-row .sp-chat-suggestion { grid-column: auto !important; white-space: nowrap; }
.sp-chat-suggestion::after { content: "north_east"; margin-left: 4px; font-family: "Material Symbols Rounded"; font-size: 12px; font-feature-settings: "liga"; font-variation-settings: "FILL" 0, "wght" 500, "GRAD" 0, "opsz" 24; }
.sp-chat-suggestion:hover { background: rgba(255, 255, 255, .21); transform: translateY(-1px); }

.sp-chat-suggestions.is-entering {
  max-height: 0;
  padding-top: 0;
  padding-bottom: 0;
  opacity: 0;
  filter: blur(9px);
  overflow: hidden;
  transform: translate3d(0, 22px, 0);
  pointer-events: none;
}
.sp-chat-suggestions.is-entering .sp-chat-suggestion {
  opacity: 0;
  filter: blur(10px);
  transform: translate3d(0, 28px, 0) scale(.95);
}

.sp-chat-suggestions.is-revealing,
.sp-chat-suggestions.is-leaving {
  overflow: hidden;
  pointer-events: none;
  animation: sp-chat-suggestions-reveal 760ms cubic-bezier(.22, 1, .36, 1) both;
}
.sp-chat-suggestions.is-leaving {
  animation-direction: reverse;
}
.sp-chat-suggestions.is-revealing .sp-chat-suggestion,
.sp-chat-suggestions.is-leaving .sp-chat-suggestion {
  animation: sp-chat-suggestion-reveal 760ms cubic-bezier(.22, 1, .36, 1) both;
  animation-delay: calc(var(--sp-suggestion-index, 0) * 76ms);
}
.sp-chat-suggestions.is-leaving .sp-chat-suggestion {
  animation-direction: reverse;
  animation-delay: calc(var(--sp-suggestion-dismiss-index, 0) * 76ms);
}

@keyframes sp-chat-suggestions-reveal {
  0% {
    max-height: 0;
    padding-top: 0;
    padding-bottom: 0;
    opacity: 0;
    filter: blur(9px);
    transform: translate3d(0, 22px, 0);
  }
  100% {
    max-height: 184px;
    padding-top: 3px;
    padding-bottom: var(--sp-suggestions-padding-bottom);
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0);
  }
}

@keyframes sp-chat-suggestion-reveal {
  0% {
    opacity: 0;
    filter: blur(10px);
    transform: translate3d(0, 28px, 0) scale(.95);
  }
  100% {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
}

.sp-chat-composer {
  z-index: 3;
  isolation: isolate;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 62px;
  align-items: end;
  gap: 10px;
  width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  transform: translate3d(0, 0, 0);
  transition: transform 320ms cubic-bezier(.22, 1, .36, 1), opacity 220ms ease, filter 220ms ease;
}
.sp-chat-composer.is-booking-form-locked {
  opacity: .82;
  filter: blur(1.15px);
  pointer-events: none;
  user-select: none;
  -webkit-user-select: none;
}
.sp-chat-composer.is-booking-form-locked .sp-chat-input:disabled { opacity: .9; }
.sp-chat-composer.is-booking-form-locked .sp-chat-input:disabled::placeholder { color: rgba(226, 237, 248, .76); }
.sp-chat-composer.is-booking-form-locked .sp-chat-send:disabled { opacity: .82; }
.sp-chat-input {
  position: relative;
  z-index: 2;
  width: 100%;
  min-width: 0;
  min-height: 62px;
  max-height: 134px;
  resize: none;
  -webkit-user-drag: none;
  -webkit-touch-callout: none;
  overflow-y: hidden;
  padding: 18px 22px 16px;
  border: 2px solid #7b9fc2;
  border-radius: 32px;
  outline: 0;
  background: #2e5277;
  color: #fff;
  font: inherit;
  font-size: .96rem;
  font-weight: 700;
  line-height: 1.4;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 12px 28px rgba(22, 50, 79, .12);
  touch-action: manipulation;
  scrollbar-width: none;
  overscroll-behavior: contain;
  transition: background-color 220ms ease, border-color 220ms ease, transform 280ms cubic-bezier(.22, 1, .36, 1);
}
.sp-chat-input::-webkit-scrollbar { display: none; }
.sp-chat-input:focus,
.sp-chat-input:focus-visible { outline: 0 !important; background: #2b4f73; border-color: #c9def3; }
.sp-chat-input::placeholder { color: rgba(226, 237, 248, .58); font-weight: 600; }

.sp-chat-send {
  position: relative;
  z-index: 2;
  width: 62px;
  height: 62px;
  border: 2px solid #faf8f2;
  border-radius: 50%;
  background: #f4f0e7;
  color: #173e67;
  box-shadow: 0 12px 28px rgba(18, 44, 72, .18), inset 0 1px 0 rgba(255, 255, 255, .72);
  transition: transform 190ms cubic-bezier(.22, 1, .36, 1), opacity 160ms ease, background-color 160ms ease;
}
.sp-chat-send:hover { transform: scale(1.055); background: #fffdf7; }
.sp-chat-send:active { transform: scale(.93); }
.sp-chat-send:disabled { opacity: .44; cursor: not-allowed; }
.sp-chat-send .sp-chat-material-icon { font-size: 30px; font-weight: 700; transform: translate(1px, 0); font-variation-settings: "FILL" 1, "wght" 700, "GRAD" 0, "opsz" 28; }

.sp-chat button:focus-visible,
.sp-chat a:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }

.sp-chat-header-button:focus,
.sp-chat-header-button:focus-visible,
.sp-chat-header-button:active,
.sp-chat-close,
.sp-chat-reset {
  outline: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  -webkit-tap-highlight-color: transparent;
}

.sp-chat.is-typing .sp-chat-messages,
.sp-chat.is-sending .sp-chat-messages { filter: none !important; }
.sp-chat.is-resetting .sp-chat-messages { opacity: 0; filter: blur(7px); transform: translate3d(0, -10px, 0); }

@media (max-width: 600px) {
  html.sp-chat-open,
  body.sp-chat-open { overflow: hidden !important; overscroll-behavior: none; }
  .sp-chat.is-open,
  .sp-chat.is-closing {
    height: var(--sp-shell-vh, 100dvh);
    overflow: hidden;
    pointer-events: auto;
    overscroll-behavior: none;
    background-color: #54779f;
  }
  .sp-chat {
    background-color: transparent;
    transition: background-color 820ms linear;
  }
  .sp-chat:not(.is-open):not(.is-closing) { position: static; inset: auto; }
  .sp-chat-scrim { display: none; }
  .sp-chat-launcher-anchor {
    position: absolute;
    right: max(14px, env(safe-area-inset-right));
    bottom: max(20px, calc(env(safe-area-inset-bottom) + 8px));
    transform: translateZ(0);
  }
  .sp-chat-launcher { min-height: 55px; }
  .sp-chat-panel {
    position: fixed;
    top: var(--sp-vv-top, 0px);
    right: 0;
    bottom: auto;
    left: 0;
    width: 100vw;
    max-width: none;
    height: var(--sp-vh, var(--sp-shell-vh, 100dvh));
    max-height: none;
    border: 0;
    border-radius: 0;
    box-shadow: none;
  }
  .sp-chat-panel::after {
    content: "";
    position: absolute;
    z-index: 2;
    left: 0;
    right: 0;
    bottom: 0;
    height: 118px;
    pointer-events: none;
    background: linear-gradient(to bottom, rgba(49, 84, 120, 0) 0, rgba(49, 84, 120, .08) 18px, rgba(49, 84, 120, .55) 58px, rgba(49, 84, 120, .93) 91px, #315478 100%);
    transition: none;
  }
  .sp-chat:not(.is-open) .sp-chat-panel {
    transition: none;
  }
  .sp-chat.is-open .sp-chat-panel {
    transition: none;
    animation: sp-chat-panel-open 760ms 16ms cubic-bezier(.65, 0, .35, 1) both;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }
  .sp-chat.is-closing {
    animation: sp-chat-mobile-close 1080ms cubic-bezier(.65, 0, .35, 1) both;
    will-change: opacity, filter;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }
  @keyframes sp-chat-mobile-close {
    0% { opacity: 1; filter: blur(0); background-color: #54779f; }
    100% { opacity: 0; filter: blur(14px); background-color: rgba(84, 119, 159, 0); }
  }
  .sp-chat.is-closing .sp-chat-launcher {
    opacity: 0;
    filter: blur(7px);
    transform: translate3d(0, 10px, 0) scale(.86);
    animation: none;
    pointer-events: none;
  }
  .sp-chat.is-mobile-launcher-returning .sp-chat-launcher {
    animation: sp-chat-launcher-return 620ms 60ms cubic-bezier(.16, 1, .3, 1) both;
    pointer-events: auto;
  }
  .sp-chat.is-closing .sp-chat-panel {
    visibility: visible;
    opacity: 1;
    filter: none;
    transform: translate3d(0, 0, 0);
    pointer-events: none;
    animation: none;
  }
  .sp-chat-header { top: calc(12px + env(safe-area-inset-top)); right: 12px; gap: 6px; padding: 4px; }
  .sp-chat-header-button { width: 48px; height: 48px; }
  .sp-chat-reset-glyph { font-size: 30px; }
  .sp-chat-close-glyph { width: 32px; height: 32px; }
  .sp-chat-messages { padding: calc(82px + env(safe-area-inset-top)) 22px 112px; }
  .sp-chat-message { width: min(92%, 390px); margin-bottom: 43px; }
  .sp-chat-message.is-user { width: min(76%, 300px); }
  .sp-chat-response-stage.has-reply + .sp-chat-message.is-user { margin-top: 20px; }
  .sp-chat-block { font-size: 1.08rem; line-height: 1.31; }
  .sp-chat-block.is-heading { font-size: 1.16rem; }
  .sp-chat-block.is-list li { padding-top: 8px; padding-bottom: 8px; }
  .sp-chat-block.is-list:not(.is-ordered) li::before { top: calc(8px + .69em); }
  .sp-chat-block.is-list.is-ordered li::before { top: 8px; }
  .sp-chat-card { padding: 22px 21px; border-radius: 27px; }
  .sp-chat-card-title { font-size: 1.5rem; }
  .sp-chat-card-value { font-size: 1.78rem; }
  .sp-chat-card-details li { font-size: .92rem; }
  .sp-chat-footer {
    margin-top: -64px;
    padding: 64px 12px max(12px, env(safe-area-inset-bottom));
    background: none;
    transform: translate3d(0, 0, 0);
    transition: none;
    will-change: transform;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }
  .sp-chat-footer::before {
    height: 220px;
    background: linear-gradient(to bottom, rgba(68, 105, 146, 0) 0, rgba(68, 105, 146, 0) 8px, rgba(66, 103, 143, .1) 20px, rgba(64, 100, 140, .7) 48px, rgba(63, 98, 138, .98) 68px, rgba(63, 98, 138, 1) 100%);
  }
  .sp-chat-composer { grid-template-columns: minmax(0, 1fr) 62px; gap: 10px; }
  .sp-chat-suggestions { --sp-suggestions-padding-bottom: 12px; max-height: 184px; padding-bottom: var(--sp-suggestions-padding-bottom); }
  .sp-chat-input { font-size: 16px; }

  .sp-chat.is-typing .sp-chat-messages,
  .sp-chat.is-sending .sp-chat-messages { opacity: 1; filter: none; transform: none; pointer-events: auto; }
  .sp-chat.is-typing .sp-chat-composer,
  .sp-chat.is-sending .sp-chat-composer { transform: translate3d(0, 0, 0); }
  .sp-chat-messages {
    touch-action: pan-y;
    will-change: auto;
    transform: none;
  }
  .sp-chat-composer,
  .sp-chat-input {
    touch-action: none;
    overscroll-behavior: none;
  }

  @media (hover: none) {
    .sp-chat-header-button:hover,
    .sp-chat-close:hover,
    .sp-chat-reset:hover { transform: none; }
  }
}

@media (max-width: 360px) {
  .sp-chat-launcher { padding-right: 14px; font-size: .72rem; }
  .sp-chat-messages { padding-right: 18px; padding-left: 18px; }
  .sp-chat-message { width: 94%; }
  .sp-chat-block { font-size: 1.02rem; }
  .sp-chat-card { padding: 20px 18px; }
  .sp-chat-card-title { font-size: 1.35rem; }
  .sp-chat-footer { padding-right: 9px; padding-left: 9px; }
  .sp-chat-composer { grid-template-columns: minmax(0, 1fr) 58px; gap: 8px; }
  .sp-chat-send { width: 58px; height: 58px; }
}

@media (prefers-reduced-motion: reduce) {
  .sp-chat *,
  .sp-chat *::before,
  .sp-chat *::after { animation-duration: 1ms !important; animation-delay: 0ms !important; transition-duration: 1ms !important; scroll-behavior: auto !important; }
  .sp-chat-panel { filter: none; }
  .sp-chat-enter { opacity: 1; filter: none; transform: none; }
  .sp-chat-launcher { animation: none !important; }
}

/* v70: adaptive information cards, true control overlays, and layered motion. */
.sp-chat-panel { display: block; }

.sp-chat-messages {
  position: absolute;
  inset: 0;
  padding: 86px 25px 24px;
}

.sp-chat-message.is-assistant { width: 100%; }
.sp-chat-message.is-assistant .sp-chat-block:not(.is-list) { max-width: 88%; }
.sp-chat-message.is-assistant .sp-chat-block.is-heading { max-width: 100%; }

.sp-chat-block.is-list.is-info-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-auto-flow: row dense;
  gap: 8px;
  width: 100%;
  margin: 12px 0 10px;
}

.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card {
  position: relative;
  display: flex;
  align-items: center;
  min-width: 0;
  min-height: 58px;
  padding: 12px 13px;
  border: 1px solid rgba(255, 255, 255, .14);
  border-radius: 18px;
  background: rgba(39, 76, 116, .44);
  color: #fff;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07);
  -webkit-backdrop-filter: blur(9px) saturate(112%);
  backdrop-filter: blur(9px) saturate(112%);
  font-size: .86rem;
  font-weight: 790;
  line-height: 1.22;
}

.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card::before { content: none; }
.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-wide,
.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-key-value,
.sp-chat-block.is-list.is-info-grid.is-ordered li.sp-chat-info-card { grid-column: 1 / -1; }
.sp-chat-block.is-list.is-info-grid.is-ordered li.sp-chat-info-card { padding-left: 45px; }
.sp-chat-block.is-list.is-info-grid.is-ordered li.sp-chat-info-card::before {
  content: counter(list-item);
  top: 50%;
  left: 13px;
  display: grid;
  place-items: center;
  width: 23px;
  min-width: 23px;
  height: 23px;
  border-radius: 50%;
  background: rgba(255, 255, 255, .14);
  color: #fff;
  font-size: .72rem;
  transform: translateY(-50%);
}
.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-key-value {
  display: flex;
  grid-template-columns: none;
  justify-content: space-between;
  gap: 12px;
  padding-left: 13px;
}
.sp-chat-list-label { flex: 1 1 auto; }
.sp-chat-list-value {
  flex: 0 0 auto;
  margin-left: auto;
  text-align: right;
  white-space: nowrap;
}
.sp-chat-info-card.is-important-line,
.sp-chat-info-card.is-important-line .sp-chat-list-label,
.sp-chat-info-card.is-important-line .sp-chat-list-value {
  white-space: nowrap;
  font-size: clamp(.76rem, 2.8vw, .86rem);
  letter-spacing: -.018em;
}

.sp-chat-card {
  width: fit-content;
  max-width: 100%;
  padding: 19px;
  border-radius: 24px;
  background: rgba(39, 76, 116, .46);
  -webkit-backdrop-filter: blur(12px) saturate(112%);
  backdrop-filter: blur(12px) saturate(112%);
}
.sp-chat-card.is-compact-card { min-width: min(100%, 270px); }
.sp-chat-card.is-wide-card,
.sp-chat-card.is-media-card { width: 100%; }
.sp-chat-card-heading { margin-bottom: 14px; }
.sp-chat-card-title { max-width: 100%; text-wrap: balance; overflow-wrap: normal; }
.sp-chat-card-value { white-space: nowrap; }
.sp-chat-card-details {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-top: 16px;
}
.sp-chat-card-details li.sp-chat-card-detail {
  grid-template-columns: 24px minmax(0, 1fr);
  min-height: 54px;
  gap: 8px;
  padding: 10px 11px;
  border: 1px solid rgba(255, 255, 255, .12);
  border-radius: 16px;
  background: rgba(255, 255, 255, .075);
  font-size: .82rem;
}
.sp-chat-card-details li.is-wide { grid-column: 1 / -1; }
.sp-chat-card-details li.is-important-line span:last-child {
  white-space: nowrap;
  font-size: clamp(.76rem, 2.75vw, .86rem);
}
.sp-chat-card-detail-icon { font-size: 21px; }

.sp-chat-footer {
  position: absolute;
  z-index: 4 !important;
  right: 0;
  bottom: 0;
  left: 0;
  width: auto;
  margin: 0;
  padding: 0 16px calc(16px + env(safe-area-inset-bottom));
  background: none;
  pointer-events: none;
}
.sp-chat-footer::before {
  right: 0;
  bottom: calc(78px + env(safe-area-inset-bottom));
  left: 0;
  height: 42px;
  opacity: .96;
  background: linear-gradient(to bottom, rgba(63, 98, 138, 0), rgba(63, 98, 138, .86));
  transition: none;
}
.sp-chat.has-suggestions .sp-chat-footer::before { opacity: .96; }
.sp-chat-suggestions-viewport { overflow: visible; pointer-events: none; }
.sp-chat-suggestions { padding: 3px 1px 10px; pointer-events: auto; }
.sp-chat-suggestion {
  min-height: 38px;
  border: 1px solid rgba(255, 255, 255, .14);
  background: rgba(39, 76, 116, .62);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .06), 0 8px 22px rgba(19, 42, 67, .12);
  -webkit-backdrop-filter: blur(9px) saturate(112%);
  backdrop-filter: blur(9px) saturate(112%);
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  text-wrap: balance;
}
.sp-chat-suggestions.is-card-row .sp-chat-suggestion { white-space: normal; }
.sp-chat-input {
  border: 1px solid rgba(255, 255, 255, .16);
  background: rgba(39, 76, 116, .68);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 12px 28px rgba(22, 50, 79, .14);
  -webkit-backdrop-filter: blur(9px) saturate(112%);
  backdrop-filter: blur(9px) saturate(112%);
}
.sp-chat-input:focus,
.sp-chat-input:focus-visible {
  background: rgba(34, 70, 108, .78);
  border-color: rgba(255, 255, 255, .45);
}

@media (max-width: 600px) {
  .sp-chat { z-index: 80; }
  html.sp-chat-open .site-header,
  body.sp-chat-open .site-header {
    position: fixed !important;
    z-index: 100 !important;
    top: 0 !important;
    right: 0;
    left: 0;
    width: 100%;
  }
  .sp-chat.is-open,
  .sp-chat.is-closing {
    top: var(--sp-site-header-height, 75px);
    height: calc(var(--sp-shell-vh, 100dvh) - var(--sp-site-header-height, 75px));
    background: transparent;
  }
  .sp-chat-panel {
    top: calc(var(--sp-vv-top, 0px) + var(--sp-site-header-height, 75px));
    height: calc(var(--sp-vh, var(--sp-shell-vh, 100dvh)) - var(--sp-site-header-height, 75px));
    transform-origin: center bottom;
  }
  .sp-chat-panel::after { display: none; }
  .sp-chat.is-open .sp-chat-panel {
    animation: sp-chat-mobile-open 920ms cubic-bezier(.22, 1, .36, 1) both;
  }
  .sp-chat.is-closing { animation: none; }
  .sp-chat.is-closing .sp-chat-panel {
    visibility: visible;
    opacity: 1;
    pointer-events: none;
    animation: sp-chat-mobile-close 920ms cubic-bezier(.65, 0, .35, 1) both;
  }
  @keyframes sp-chat-mobile-open {
    0% { opacity: 0; filter: blur(18px); clip-path: inset(100% 0 0 0); transform: translate3d(0, 24px, 0); }
    55% { opacity: 1; }
    100% { opacity: 1; filter: blur(0); clip-path: inset(0 0 0 0); transform: translate3d(0, 0, 0); }
  }
  @keyframes sp-chat-mobile-close {
    0% { opacity: 1; filter: blur(0); clip-path: inset(0 0 0 0); transform: translate3d(0, 0, 0); }
    70% { opacity: 1; }
    100% { opacity: 0; filter: blur(18px); clip-path: inset(100% 0 0 0); transform: translate3d(0, 18px, 0); }
  }
  .sp-chat-header { top: 12px; }
  .sp-chat-messages { padding: 82px 18px 20px; }
  .sp-chat-message { width: min(94%, 410px); }
  .sp-chat-message.is-assistant { width: 100%; }
  .sp-chat-message.is-user { width: min(76%, 300px); }
  .sp-chat-footer {
    margin: 0;
    padding: 0 12px max(12px, env(safe-area-inset-bottom));
  }
  .sp-chat-footer::before {
    bottom: calc(74px + env(safe-area-inset-bottom));
    height: 40px;
    background: linear-gradient(to bottom, rgba(63, 98, 138, 0), rgba(63, 98, 138, .88));
  }
  .sp-chat-suggestions { padding-bottom: 10px; }
}

@media (max-width: 360px) {
  .sp-chat-block.is-list.is-info-grid { grid-template-columns: minmax(0, 1fr); }
  .sp-chat-block.is-list.is-info-grid li.sp-chat-info-card { grid-column: 1; }
  .sp-chat-footer { margin: 0; padding-right: 9px; padding-left: 9px; }
}

.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-more-card {
  grid-column: 1 / -1;
  justify-content: center;
  min-height: 42px;
  padding: 10px 12px;
  color: rgba(255, 255, 255, .78);
  font-size: .72rem;
  text-align: center;
}
.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-more-card::before { content: none !important; }

/* v71: calm, full-width comparison cards matching the approved mobile layout. */
.sp-chat-footer::before,
.sp-chat.has-suggestions .sp-chat-footer::before {
  display: none !important;
  content: none !important;
}

.sp-chat-message.is-assistant .sp-chat-block.is-heading {
  padding: 0;
  border: 0;
  font-size: clamp(1.05rem, 4vw, 1.22rem);
  font-weight: 820;
  letter-spacing: -.025em;
  line-height: 1.2;
  text-transform: none;
}

.sp-chat-block.is-list.is-info-grid {
  grid-template-columns: minmax(0, 1fr);
  gap: 12px;
}

.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card,
.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-wide,
.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-key-value,
.sp-chat-block.is-list.is-info-grid.is-ordered li.sp-chat-info-card {
  grid-column: 1;
  min-height: 68px;
  padding: 14px 16px;
  border: 0;
  border-radius: 21px;
  background: rgba(48, 76, 130, .58);
  box-shadow: none;
  font-size: clamp(.84rem, 3.2vw, .96rem);
  line-height: 1.2;
}

.sp-chat-block.is-list.is-info-grid.is-ordered li.sp-chat-info-card::before {
  display: none !important;
  content: none !important;
}

.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-key-value {
  justify-content: space-between;
  gap: 18px;
}

.sp-chat-info-card .sp-chat-list-label,
.sp-chat-info-card .sp-chat-list-value {
  min-width: 0;
  font-weight: 820;
}

.sp-chat-info-card .sp-chat-list-value {
  flex: 0 0 auto;
  white-space: nowrap;
}

.sp-chat-info-card.is-important-line,
.sp-chat-info-card.is-important-line .sp-chat-list-label,
.sp-chat-info-card.is-important-line .sp-chat-list-value {
  font-size: clamp(.8rem, 3vw, .94rem);
}

.sp-chat-card-details {
  grid-template-columns: minmax(0, 1fr);
  gap: 0;
  margin-top: 14px;
  border-top: 1px solid rgba(255, 255, 255, .12);
}

.sp-chat-card-details li.sp-chat-card-detail,
.sp-chat-card-details li.sp-chat-card-detail.is-wide {
  grid-column: 1;
  grid-template-columns: minmax(0, 1fr);
  min-height: 0;
  padding: 11px 0;
  border: 0;
  border-bottom: 1px solid rgba(255, 255, 255, .1);
  border-radius: 0;
  background: transparent;
}

.sp-chat-card-detail-icon { display: none; }

.sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-more-card {
  min-height: 42px;
  border-radius: 16px;
  background: rgba(48, 76, 130, .34);
}

@media (max-width: 360px) {
  .sp-chat-block.is-list.is-info-grid li.sp-chat-info-card,
  .sp-chat-block.is-list.is-info-grid li.sp-chat-info-card.is-key-value,
  .sp-chat-block.is-list.is-info-grid.is-ordered li.sp-chat-info-card {
    min-height: 64px;
    padding-right: 14px;
    padding-left: 14px;
  }
}

/* Quick actions use the exact same glass backing as the text input. */
.sp-chat-suggestion,
.sp-chat-suggestions.is-card-row .sp-chat-suggestion {
  border: 1px solid rgba(255, 255, 255, .16);
  background: rgba(39, 76, 116, .68);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 12px 28px rgba(22, 50, 79, .14);
  -webkit-backdrop-filter: blur(9px) saturate(112%);
  backdrop-filter: blur(9px) saturate(112%);
}

.sp-chat-suggestion:hover,
.sp-chat-suggestion:focus-visible {
  background: rgba(34, 70, 108, .78);
  border-color: rgba(255, 255, 255, .45);
}

/* v72: stable mobile viewport, feathered reveal edge, and cleaner header seam. */
@media (max-width: 600px) {
  html.sp-chat-open .site-header,
  body.sp-chat-open .site-header {
    border-bottom: 3px solid var(--line) !important;
    box-shadow: 0 3px 0 rgba(0, 0, 0, .05) !important;
  }

  .sp-chat-panel {
    top: calc(var(--sp-vv-top, 0px) + var(--sp-site-header-height, 75px) - 1px);
    height: calc(var(--sp-vh, var(--sp-shell-vh, 100dvh)) - var(--sp-site-header-height, 75px) + 1px);
    clip-path: none !important;
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, .035) 16px, rgba(0, 0, 0, .16) 34px, rgba(0, 0, 0, .42) 54px, rgba(0, 0, 0, .76) 72px, #000 90px);
    mask-image: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, .035) 16px, rgba(0, 0, 0, .16) 34px, rgba(0, 0, 0, .42) 54px, rgba(0, 0, 0, .76) 72px, #000 90px);
    -webkit-mask-position: left bottom;
    mask-position: left bottom;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-size: 100% calc(100% + 90px);
    mask-size: 100% calc(100% + 90px);
  }

  .sp-chat.is-open .sp-chat-panel {
    animation: sp-chat-mobile-open 920ms cubic-bezier(.22, 1, .36, 1) both;
  }

  .sp-chat.is-closing .sp-chat-panel {
    animation: sp-chat-mobile-close 920ms cubic-bezier(.65, 0, .35, 1) both;
  }

  @keyframes sp-chat-mobile-open {
    0% {
      opacity: 0;
      filter: blur(18px);
      -webkit-mask-size: 100% 0;
      mask-size: 100% 0;
      transform: translate3d(0, 20px, 0);
    }
    58% { opacity: 1; }
    100% {
      opacity: 1;
      filter: blur(0);
      -webkit-mask-size: 100% calc(100% + 90px);
      mask-size: 100% calc(100% + 90px);
      transform: translate3d(0, 0, 0);
    }
  }

  @keyframes sp-chat-mobile-close {
    0% {
      opacity: 1;
      filter: blur(0);
      -webkit-mask-size: 100% calc(100% + 90px);
      mask-size: 100% calc(100% + 90px);
      transform: translate3d(0, 0, 0);
    }
    70% { opacity: 1; }
    100% {
      opacity: 0;
      filter: blur(18px);
      -webkit-mask-size: 100% 0;
      mask-size: 100% 0;
      transform: translate3d(0, 16px, 0);
    }
  }

  .sp-chat-messages { padding-top: 104px; }

  .sp-chat-footer,
  .sp-chat-composer { transform: translate3d(0, 0, 0); backface-visibility: hidden; -webkit-backface-visibility: hidden; }
}

/* v74: preserve enough scroll tail to lift final cards above floating controls. */
.sp-chat-messages {
  padding-top: 104px;
  padding-bottom: var(--sp-message-end-space, 26px);
  scroll-padding-bottom: var(--sp-message-end-space, 26px);
}

/* v75: one stable quick-action layout, true header-matched glass, and settled message frames. */
.sp-chat {
  --sp-chat-control-glass: rgba(39, 76, 116, .62);
  --sp-chat-control-blur: blur(9px) saturate(112%);
}

.sp-chat-header {
  background: var(--sp-chat-control-glass);
  -webkit-backdrop-filter: var(--sp-chat-control-blur);
  backdrop-filter: var(--sp-chat-control-blur);
}

.sp-chat-suggestions,
.sp-chat-suggestions.is-entering,
.sp-chat-suggestions.is-revealing,
.sp-chat-suggestions.is-leaving {
  max-height: 184px;
  padding: 3px 1px var(--sp-suggestions-padding-bottom);
  opacity: 1;
  filter: none;
  overflow: visible;
  transform: none;
  animation: none;
}

.sp-chat-suggestion,
.sp-chat-suggestions.is-card-row .sp-chat-suggestion {
  border: 1px solid rgba(255, 255, 255, .14);
  background: var(--sp-chat-control-glass);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .06), 0 8px 22px rgba(19, 42, 67, .12);
  -webkit-backdrop-filter: var(--sp-chat-control-blur);
  backdrop-filter: var(--sp-chat-control-blur);
  will-change: auto;
}

.sp-chat-suggestions.is-entering .sp-chat-suggestion {
  opacity: 0;
  filter: blur(10px);
  transform: translate3d(0, 22px, 0) scale(.96);
}

.sp-chat-suggestions.is-revealing .sp-chat-suggestion {
  animation: sp-chat-suggestion-in 620ms cubic-bezier(.22, 1, .36, 1) both;
  animation-delay: calc(var(--sp-suggestion-index, 0) * 64ms);
  will-change: opacity, filter, transform;
}

.sp-chat-suggestions.is-leaving .sp-chat-suggestion {
  animation: sp-chat-suggestion-out 480ms cubic-bezier(.65, 0, .35, 1) both;
  animation-delay: calc(var(--sp-suggestion-dismiss-index, 0) * 54ms);
  will-change: opacity, filter, transform;
}

@keyframes sp-chat-suggestion-in {
  0% {
    opacity: 0;
    filter: blur(10px);
    transform: translate3d(0, 22px, 0) scale(.96);
  }
  100% {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
}

@keyframes sp-chat-suggestion-out {
  0% {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
  100% {
    opacity: 0;
    filter: blur(10px);
    transform: translate3d(0, -16px, 0) scale(.97);
  }
}

.sp-chat-suggestion.is-motion-settled {
  opacity: 1;
  filter: none;
  transform: translate3d(0, 0, 0) scale(1);
  animation: none;
  will-change: auto;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

.sp-chat-settled {
  opacity: 1 !important;
  filter: none !important;
  transform: translate3d(0, 0, 0) !important;
  animation: none !important;
  will-change: auto !important;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}
.sp-chat.is-resetting .sp-chat-reset:disabled { opacity: .92; }

/* v76: semantic list treatments, overflow-safe summaries, and menu layering. */
.sp-chat-block.is-list {
  width: 100%;
  max-width: 100%;
  margin: 10px 0 12px;
  color: #fff;
}

.sp-chat-block.is-bullets-list,
.sp-chat-block.is-steps-list {
  display: grid;
  gap: 8px;
  padding-left: 0;
  list-style: none;
}

.sp-chat-block.is-bullets-list li,
.sp-chat-block.is-steps-list li {
  position: relative;
  min-width: 0;
  padding: 7px 2px 7px 25px;
  font-size: clamp(.88rem, 2.7vw, .96rem);
  font-weight: 690;
  line-height: 1.38;
  overflow-wrap: anywhere;
}

.sp-chat-block.is-bullets-list li::before {
  content: "" !important;
  position: absolute !important;
  top: calc(7px + .69em) !important;
  left: 4px !important;
  display: block !important;
  width: 7px !important;
  height: 7px !important;
  border-radius: 50% !important;
  background: rgba(255, 255, 255, .9) !important;
  box-shadow: none !important;
  transform: translateY(-50%) !important;
}

.sp-chat-block.is-steps-list { counter-reset: sp-chat-step; }
.sp-chat-block.is-steps-list li { counter-increment: sp-chat-step; }
.sp-chat-block.is-steps-list li::before {
  content: counter(sp-chat-step) "." !important;
  position: absolute !important;
  top: 7px !important;
  left: 2px !important;
  display: block !important;
  width: 18px !important;
  height: auto !important;
  color: rgba(255, 255, 255, .82) !important;
  background: none !important;
  box-shadow: none !important;
  font-weight: 900 !important;
  line-height: 1.38 !important;
  transform: none !important;
}

.sp-chat-block.is-times-list {
  display: grid;
  gap: 0;
  padding: 0;
  border-top: 1px solid rgba(255, 255, 255, .2);
  list-style: none;
}

.sp-chat-block.is-times-list .sp-chat-time-row {
  display: grid;
  grid-template-columns: minmax(112px, 38%) minmax(0, 1fr);
  align-items: start;
  gap: 12px;
  min-width: 0;
  padding: 11px 2px;
  border-bottom: 1px solid rgba(255, 255, 255, .16);
  font-size: clamp(.78rem, 2.7vw, .91rem);
  font-weight: 820;
  line-height: 1.25;
}
.sp-chat-block.is-times-list li::before,
.sp-chat-block.is-comparison-list li::before,
.sp-chat-card-details li::before,
.sp-chat-more-item::before {
  display: none !important;
  content: none !important;
}

.sp-chat-block.is-comparison-list {
  display: grid;
  gap: 0;
  padding: 0;
  border-top: 1px solid rgba(255, 255, 255, .2);
  list-style: none;
}

.sp-chat-block.is-comparison-list .sp-chat-comparison-row {
  display: grid;
  grid-template-columns: minmax(105px, 40%) minmax(0, 1fr);
  align-items: start;
  gap: 12px;
  min-width: 0;
  padding: 11px 2px;
  border-bottom: 1px solid rgba(255, 255, 255, .16);
  font-size: clamp(.83rem, 2.75vw, .93rem);
  line-height: 1.32;
}

.sp-chat-block.is-comparison-list.has-price-values .sp-chat-list-value {
  color: #fff;
  font-weight: 900;
  letter-spacing: -.018em;
}

.sp-chat-block.is-comparison-list.is-compact-comparison .sp-chat-comparison-row {
  grid-template-columns: minmax(120px, 44%) minmax(0, 1fr);
}

.sp-chat-block.is-comparison-list.is-detailed-comparison .sp-chat-comparison-row {
  grid-template-columns: minmax(0, 1fr);
  gap: 5px;
}

.sp-chat-block.is-times-list .sp-chat-list-label { letter-spacing: -.012em; }
.sp-chat-block.is-times-list .sp-chat-list-value { color: rgba(255, 255, 255, .9); }

.sp-chat-list-label,
.sp-chat-list-value {
  min-width: 0;
  overflow-wrap: anywhere;
  word-break: normal;
}

.sp-chat-list-label { font-weight: 860; }
.sp-chat-list-value {
  margin: 0;
  text-align: left;
  white-space: normal;
  font-weight: 710;
}

.sp-chat-more-item {
  grid-column: 1 / -1;
  margin: 2px 0 0;
  padding: 8px 2px;
  color: rgba(255, 255, 255, .8);
  font-size: .76rem;
  font-weight: 700;
  line-height: 1.3;
  list-style: none;
}

.sp-chat-card,
.sp-chat-card * { min-width: 0; }
.sp-chat-card-title,
.sp-chat-card-value,
.sp-chat-card-eyebrow,
.sp-chat-card-details li span:last-child {
  max-width: 100%;
  overflow-wrap: anywhere;
  word-break: normal;
  white-space: normal;
}
.sp-chat-card-title { font-size: clamp(1.12rem, 4.5vw, 1.38rem); line-height: 1.12; }
.sp-chat-card-value { font-size: clamp(1.32rem, 5.3vw, 1.68rem); line-height: 1.08; }
.sp-chat-card-eyebrow { font-size: clamp(.69rem, 2.7vw, .78rem); }
.sp-chat-card-details li.sp-chat-card-detail { font-size: clamp(.78rem, 2.7vw, .88rem); }

@media (max-width: 390px) {
  .sp-chat-block.is-times-list .sp-chat-time-row,
  .sp-chat-block.is-comparison-list .sp-chat-comparison-row {
    grid-template-columns: minmax(0, 1fr);
    gap: 5px;
  }
  .sp-chat-block.is-times-list .sp-chat-time-row { padding: 10px 2px; }
  .sp-chat-card { padding: 17px 15px; }
}

@media (max-width: 1100px) {
  html.sp-chat-open #site-root { z-index: auto !important; }
  html.sp-chat-open .site-header,
  body.sp-chat-open .site-header {
    position: fixed !important;
    z-index: 1200 !important;
    top: 0 !important;
    right: 0;
    left: 0;
    width: 100%;
  }
  body.menu-is-open .sp-chat { z-index: 70 !important; }
  body.menu-is-open .site-header { z-index: 1200 !important; }
  body.menu-is-open .mobile-menu { z-index: 1190 !important; }
  .menu-toggle {
    transition: opacity 320ms ease, filter 420ms cubic-bezier(.22, 1, .36, 1), transform 420ms cubic-bezier(.22, 1, .36, 1) !important;
  }
  html.sp-chat-open .menu-toggle,
  body.sp-chat-open .menu-toggle {
    opacity: 0 !important;
    filter: blur(12px) !important;
    transform: scale(.86) !important;
    pointer-events: none !important;
  }
}

@media (max-width: 600px) {
  .sp-chat.is-open,
  .sp-chat.is-closing {
    top: 0;
    height: var(--sp-shell-vh, 100dvh);
  }
  .sp-chat.is-closing { will-change: auto; }
}

/* v81: subtly larger type throughout every chat surface. */
.sp-chat-block { font-size: clamp(1.1rem, 3.5vw, 1.17rem); line-height: 1.36; }
.sp-chat-message.is-assistant .sp-chat-block.is-heading { font-size: clamp(1.13rem, 3.7vw, 1.22rem); }
.sp-chat-block.is-bullets-list li,
.sp-chat-block.is-steps-list li { font-size: clamp(.95rem, 3.05vw, 1.01rem); }
.sp-chat-block.is-times-list .sp-chat-time-row,
.sp-chat-block.is-comparison-list .sp-chat-comparison-row { font-size: clamp(.91rem, 3vw, .98rem); }
.sp-chat-card-eyebrow { font-size: clamp(.72rem, 2.7vw, .8rem); }
.sp-chat-card-title { font-size: clamp(1.22rem, 4.5vw, 1.43rem); }
.sp-chat-card-value { font-size: clamp(1.42rem, 5.2vw, 1.75rem); }
.sp-chat-card-details li.sp-chat-card-detail { font-size: clamp(.85rem, 2.85vw, .94rem); line-height: 1.32; }
.sp-chat-card-links a { font-size: clamp(.73rem, 2.55vw, .8rem); }
.sp-chat-suggestion { font-size: clamp(.72rem, 2.4vw, .78rem); line-height: 1.22; }
.sp-chat-suggestion {
  justify-content: center;
  text-align: center;
}
.sp-chat-suggestion::after { display: none !important; content: none !important; }
.sp-chat-thinking-line { font-size: clamp(.64rem, 2.1vw, .74rem); }
.sp-chat-input { font-size: 17px; line-height: 1.3; }

/* v88: smaller, balanced composer controls. */
.sp-chat-composer {
  grid-template-columns: minmax(0, 1fr) 54px;
  gap: 8px;
}
.sp-chat-input {
  min-height: 54px;
  padding: 14px 19px 13px;
  border-radius: 28px;
}
.sp-chat-send {
  width: 54px;
  height: 54px;
}
.sp-chat-send .sp-chat-material-icon { font-size: 26px; }

@media (max-width: 360px) {
  .sp-chat-composer { grid-template-columns: minmax(0, 1fr) 52px; gap: 7px; }
  .sp-chat-input { min-height: 52px; padding: 13px 17px 12px; }
  .sp-chat-send { width: 52px; height: 52px; }
}

/* v83: minimal, background-free user/assistant distinction. */
.sp-chat-message.is-user .sp-chat-message-copy {
  position: relative;
  padding-right: 12px;
}
.sp-chat-message.is-user .sp-chat-message-copy::after {
  content: "";
  position: absolute;
  top: 2px;
  right: 0;
  bottom: 2px;
  width: 2px;
  border-radius: 999px;
  background: rgba(255, 255, 255, .42);
  opacity: 1;
  filter: blur(0);
  transform: translate3d(0, 0, 0);
}
.sp-chat-message.is-user.sp-chat-user-pending .sp-chat-message-copy::after,
.sp-chat-message.is-user.sp-chat-enter .sp-chat-message-copy::after {
  opacity: 0;
  filter: blur(9px);
  transform: translate3d(0, 18px, 0);
}
.sp-chat-message.is-user.sp-chat-enter.is-visible .sp-chat-message-copy::after {
  animation: sp-chat-user-divider-in 1280ms cubic-bezier(.4, 0, .2, 1) both;
}
@keyframes sp-chat-user-divider-in {
  0% { opacity: 0; filter: blur(7px); transform: translate3d(0, 12px, 0); }
  100% { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0); }
}
.sp-chat-message.is-user.sp-chat-user-pending,
.sp-chat-message.is-user.sp-chat-enter {
  opacity: 0;
  filter: blur(7px);
  transform: translate3d(0, 24px, 0);
}
.sp-chat-message.is-user.sp-chat-enter.is-visible {
  animation: sp-chat-user-message-in 1280ms cubic-bezier(.4, 0, .2, 1) both;
}
@keyframes sp-chat-user-message-in {
  0% { opacity: 0; filter: blur(7px); transform: translate3d(0, 24px, 0); }
  100% { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0); }
}
.sp-chat-message.is-user .sp-chat-block {
  color: rgba(255, 255, 255, .9);
  text-shadow: none;
}

/* v85: structural lines enter with their text; headings always read as headings. */
.sp-chat-block.is-heading,
.sp-chat-message.is-assistant .sp-chat-block.is-heading {
  font-size: clamp(1.25rem, 4.35vw, 1.42rem);
  line-height: 1.16;
  letter-spacing: -.018em;
  text-transform: none;
}
.sp-chat-block.is-heading.is-level-1 { font-size: clamp(1.38rem, 4.8vw, 1.58rem); }
.sp-chat-block.is-heading.is-level-3 { font-size: clamp(1.18rem, 4vw, 1.32rem); }
.sp-chat-block.is-heading.is-bold-label strong { font-weight: 900; }

.sp-chat-block.is-spacer {
  position: relative;
  height: 25px;
}
.sp-chat-block.is-spacer::before {
  content: "";
  position: absolute;
  top: 12px;
  right: 0;
  left: 0;
  height: 1px;
  background: rgba(255, 255, 255, .18);
}
.sp-chat-block.is-spacer.is-spacing-only::before { display: none; }

.sp-chat-block.is-times-list,
.sp-chat-block.is-comparison-list {
  position: relative;
  border-top: 0;
}
.sp-chat-block.is-times-list::before,
.sp-chat-block.is-comparison-list::before {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  height: 1px;
  background: rgba(255, 255, 255, .2);
}
.sp-chat-block.sp-chat-lines-enter::before {
  opacity: 0;
  filter: blur(9px);
  transform: translate3d(0, 18px, 0);
}
.sp-chat-block.sp-chat-lines-enter.is-visible::before {
  animation: sp-chat-rise-focus 980ms cubic-bezier(.22, 1, .36, 1) both;
}

.sp-chat-card-details li.sp-chat-card-detail,
.sp-chat-card-details li.sp-chat-card-detail.is-wide {
  grid-template-columns: 24px minmax(0, 1fr);
  gap: 9px;
}
.sp-chat-card-detail-icon {
  display: inline-block;
  align-self: center;
  font-size: 20px;
}

/* v87: reserve the sticky header's flow space while it is promoted above mobile chat. */
@media (max-width: 1100px) {
  html.sp-chat-open #site-root,
  body.sp-chat-open #site-root {
    padding-top: var(--sp-site-header-height, 75px);
  }
}

/* A calm idle drift keeps the launcher feeling alive without competing with
   the page. Opening, closing, keyboard focus, and pointer interaction always
   take priority over the ambient movement. */
.sp-chat.has-launcher-arrived:not(.is-launcher-shaking):not(.is-open):not(.is-closing):not(.is-mobile-launcher-returning) .sp-chat-launcher {
  animation: sp-chat-launcher-gentle-float 15.2s cubic-bezier(.42, 0, .58, 1) infinite;
}

.sp-chat.has-launcher-arrived:not(.is-launcher-shaking) .sp-chat-launcher:hover,
.sp-chat.has-launcher-arrived:not(.is-launcher-shaking) .sp-chat-launcher:focus-visible,
.sp-chat.has-launcher-arrived:not(.is-launcher-shaking) .sp-chat-launcher:active {
  animation: none;
  transform: translate3d(0, 0, 0) scale(1);
}

@keyframes sp-chat-launcher-gentle-float {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg); }
  24% { transform: translate3d(0, -5.25px, 0) rotate(-.52deg); }
  51% { transform: translate3d(0, 3.15px, 0) rotate(.44deg); }
  76% { transform: translate3d(0, -3.9px, 0) rotate(-.36deg); }
}

/* Mobile browser controls resize the fixed chat layer while scrolling. Keep the
   launcher anchored by its outer layer and reserve transforms for the button's
   one-time open/close motion. This prevents competing fixed/composited layers
   from producing the familiar toolbar jump or wobble. */
@media (max-width: 600px), (pointer: coarse) {
  .sp-chat.is-launcher-ready:not(.has-launcher-arrived) .sp-chat-launcher {
    animation: sp-chat-launcher-arrive-mobile 440ms cubic-bezier(.22, 1, .36, 1) both;
  }
  .sp-chat.has-launcher-arrived:not(.is-open):not(.is-closing):not(.is-mobile-launcher-returning) .sp-chat-launcher,
  .sp-chat.is-launcher-shaking .sp-chat-launcher {
    animation: none;
    transform: translate3d(0, 0, 0) scale(1);
  }
  @keyframes sp-chat-launcher-arrive-mobile {
    0% { opacity: 0; filter: blur(7px); transform: translate3d(0, 0, 0) scale(.9); }
    100% { opacity: 1; filter: blur(0); transform: translate3d(0, 0, 0) scale(1); }
  }
}

/* Keep the mobile document's geometry unchanged while chat is open. The page
   is scroll-locked without converting its sticky header to fixed positioning,
   so opening and closing cannot nudge the content behind the chat. */
@media (max-width: 600px) {
  .sp-chat,
  .sp-chat:not(.is-open):not(.is-closing) {
    position: fixed;
    inset: 0;
  }

  html.sp-chat-open,
  body.sp-chat-open {
    overflow: visible !important;
    overscroll-behavior: auto;
  }

  html.sp-chat-open #site-root,
  body.sp-chat-open #site-root {
    padding-top: 0 !important;
  }

  html.sp-chat-open .site-header,
  body.sp-chat-open .site-header {
    position: sticky !important;
    z-index: 1200 !important;
    top: 0 !important;
    right: auto !important;
    left: auto !important;
    width: auto !important;
  }

  html.sp-chat-keyboard-open .site-header,
  body.sp-chat-keyboard-open .site-header {
    position: fixed !important;
    top: var(--sp-vv-top, 0px) !important;
    right: 0 !important;
    left: 0 !important;
    width: 100% !important;
  }

  .sp-chat.is-keyboard-open {
    background: #54779f;
  }
}

/* Compact film-day details form shown immediately before booking review. */
.sp-chat-card.is-booking-form-card {
  width: min(100%, 430px);
  min-width: 0;
  padding: 19px;
  border: 1px solid rgba(255, 255, 255, .12);
  background: rgba(39, 76, 116, .58);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 18px 36px rgba(18, 44, 72, .15);
  -webkit-backdrop-filter: blur(12px) saturate(112%);
  backdrop-filter: blur(12px) saturate(112%);
}
.sp-chat-card.is-booking-form-card .sp-chat-card-heading { margin-bottom: 10px; }
.sp-chat-card.is-booking-form-card .sp-chat-card-title {
  max-width: 330px;
  font-size: clamp(1.08rem, 4.2vw, 1.3rem);
  line-height: 1.12;
}
.sp-chat-booking-form {
  display: grid;
  gap: 11px;
  margin-top: 17px;
}
.sp-chat-booking-label {
  display: grid;
  gap: 6px;
  min-width: 0;
  color: rgba(244, 249, 255, .9);
  font-size: .72rem;
  font-weight: 850;
  letter-spacing: .015em;
}
.sp-chat-booking-field {
  width: 100%;
  min-width: 0;
  height: 49px;
  padding: 0 16px;
  border: 1px solid rgba(255, 255, 255, .18);
  border-radius: 18px;
  outline: 0;
  background: rgba(39, 76, 116, .7);
  color: #fff;
  font: inherit;
  font-size: 17px;
  font-weight: 720;
  line-height: 1.2;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 8px 18px rgba(18, 44, 72, .1);
  -webkit-backdrop-filter: blur(9px) saturate(112%);
  backdrop-filter: blur(9px) saturate(112%);
  touch-action: manipulation;
  transition: border-color 180ms ease, background-color 180ms ease, box-shadow 180ms ease, transform 220ms cubic-bezier(.22, 1, .36, 1);
}
.sp-chat-booking-field::placeholder { color: rgba(226, 237, 248, .53); }
.sp-chat-booking-field:focus,
.sp-chat-booking-field:focus-visible {
  border-color: rgba(233, 244, 255, .76);
  background: rgba(34, 70, 108, .84);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 0 0 3px rgba(205, 227, 247, .1), 0 10px 22px rgba(18, 44, 72, .14);
  transform: translate3d(0, -1px, 0);
}
.sp-chat-booking-field[aria-invalid="true"] {
  border-color: rgba(255, 219, 207, .92);
  box-shadow: 0 0 0 3px rgba(255, 213, 199, .1);
}
.sp-chat-booking-error {
  min-height: 16px;
  margin: -2px 2px 0;
  color: #fff0ea;
  font-size: .7rem;
  font-weight: 750;
  line-height: 1.25;
}
.sp-chat-booking-submit {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: 100%;
  min-height: 47px;
  padding: 10px 16px;
  border: 1px solid #faf8f2;
  border-radius: 18px;
  background: #f4f0e7;
  color: #173e67;
  font: inherit;
  font-size: .81rem;
  font-weight: 900;
  cursor: pointer;
  box-shadow: 0 10px 22px rgba(18, 44, 72, .14), inset 0 1px 0 rgba(255, 255, 255, .72);
  transition: transform 190ms cubic-bezier(.22, 1, .36, 1), opacity 160ms ease, background-color 160ms ease;
}
.sp-chat-booking-submit:hover { transform: translate3d(0, -1px, 0) scale(1.015); background: #fffdf7; }
.sp-chat-booking-submit:active { transform: scale(.975); }
.sp-chat-booking-submit:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
.sp-chat-booking-submit .sp-chat-material-icon { font-size: 20px; font-weight: 700; }
.sp-chat-booking-field:disabled,
.sp-chat-booking-submit:disabled { cursor: default; }
.sp-chat-booking-form.is-submitted .sp-chat-booking-field { opacity: .62; }
.sp-chat-booking-form.is-submitted .sp-chat-booking-submit { opacity: .78; }

.sp-chat-review-estimate {
  position: relative;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 14px;
  margin-top: 15px;
  padding: 16px 10px 1px;
  color: rgba(239, 247, 255, .78);
  font-size: .72rem;
  font-weight: 850;
  letter-spacing: .02em;
}
.sp-chat-card.is-booking-review-card { overflow: hidden; }
.sp-chat-review-estimate::before {
  content: "";
  position: absolute;
  top: 0;
  left: -50px;
  width: calc(100% + 100px);
  border-top: 1px solid rgba(224, 237, 250, .2);
}
.sp-chat-review-estimate strong {
  min-width: 0;
  color: #fff;
  font-size: clamp(1rem, 4vw, 1.24rem);
  font-weight: 950;
  line-height: 1.12;
  overflow-wrap: anywhere;
  text-align: right;
}

@media (max-width: 600px) {
  .sp-chat-card.is-booking-form-card {
    width: 100%;
    padding: 17px 16px;
    border-radius: 23px;
  }
  .sp-chat-booking-form { gap: 10px; margin-top: 15px; }
  .sp-chat-booking-field { height: 48px; border-radius: 17px; }
  .sp-chat-booking-submit { min-height: 48px; border-radius: 17px; }
}

/* v83: keep the mobile header in its native sticky layer while the keyboard animates. */
@media (max-width: 600px) {
  html.sp-chat-open,
  body.sp-chat-open {
    height: 100% !important;
    overflow: hidden !important;
    overscroll-behavior: none !important;
  }

  html.sp-chat-open #site-root,
  body.sp-chat-open #site-root {
    padding-top: 0 !important;
  }

  html.sp-chat-open .site-header,
  body.sp-chat-open .site-header,
  html.sp-chat-keyboard-open .site-header,
  body.sp-chat-keyboard-open .site-header {
    position: sticky !important;
    z-index: 1200 !important;
    top: 0 !important;
    right: auto !important;
    left: auto !important;
    width: auto !important;
    transform: none !important;
    backface-visibility: visible;
    -webkit-backface-visibility: visible;
    will-change: auto;
    opacity: 1 !important;
    border-bottom: 3px solid var(--line) !important;
    box-shadow: 0 3px 0 rgba(0, 0, 0, .05) !important;
  }

  .sp-chat.is-open,
  .sp-chat.is-closing {
    position: fixed !important;
    inset: 0 !important;
    height: var(--sp-shell-vh, 100dvh) !important;
    overflow: hidden !important;
  }

  .sp-chat-panel {
    top: calc(var(--sp-site-header-height, 75px) - 1px) !important;
    height: calc(var(--sp-vh, var(--sp-shell-vh, 100dvh)) + var(--sp-vv-top, 0px) - var(--sp-site-header-height, 75px) + 1px) !important;
    contain: layout paint;
  }
}
/* v88: stable mobile launcher during browser-toolbar scroll.
   In the closed state the launcher is the only fixed layer. It is no longer
   absolutely positioned inside a viewport-sized fixed wrapper, and it uses no
   transforms, filters, or ambient animation that can be re-composited while
   mobile browser controls expand or collapse. */
@media (max-width: 600px), (hover: none) and (pointer: coarse) and (max-width: 1100px) {
  .sp-chat:not(.is-open):not(.is-closing) {
    position: static !important;
    inset: auto !important;
    width: 0 !important;
    height: 0 !important;
    overflow: visible !important;
    contain: none !important;
    background: transparent !important;
  }

  .sp-chat:not(.is-open):not(.is-closing) .sp-chat-launcher-anchor {
    position: fixed !important;
    z-index: 1001;
    top: auto !important;
    right: max(14px, env(safe-area-inset-right)) !important;
    bottom: max(16px, calc(env(safe-area-inset-bottom) + 10px)) !important;
    left: auto !important;
    transform: none !important;
    will-change: auto !important;
    contain: layout style;
    backface-visibility: visible;
    -webkit-backface-visibility: visible;
  }

  .sp-chat:not(.is-open):not(.is-closing) .sp-chat-launcher,
  .sp-chat.is-launcher-ready:not(.has-launcher-arrived):not(.is-open):not(.is-closing) .sp-chat-launcher,
  .sp-chat.has-launcher-arrived:not(.is-open):not(.is-closing) .sp-chat-launcher,
  .sp-chat.is-launcher-shaking:not(.is-open):not(.is-closing) .sp-chat-launcher {
    animation: none !important;
    transform: none !important;
    filter: none !important;
    will-change: auto !important;
    backface-visibility: visible;
    -webkit-backface-visibility: visible;
  }

  .sp-chat.is-launcher-ready:not(.is-open):not(.is-closing) .sp-chat-launcher,
  .sp-chat.has-launcher-arrived:not(.is-open):not(.is-closing) .sp-chat-launcher {
    opacity: 1;
    pointer-events: auto;
    transition: opacity 180ms ease !important;
  }
}


/* v89: stable mobile composer during keyboard attachment.
   The visual viewport can report transient tiny heights while iOS/Android
   attaches the keyboard. The panel now keeps its settled geometry and only
   the footer moves after a stable viewport sample is available. */
@media (max-width: 600px) {
  .sp-chat.is-open .sp-chat-footer,
  .sp-chat.is-closing .sp-chat-footer {
    transform: translate3d(0, 0, 0);
    transition: transform 190ms cubic-bezier(.22, 1, .36, 1) !important;
    will-change: auto !important;
  }

  .sp-chat.is-open.is-keyboard-open .sp-chat-footer {
    transform: translate3d(0, calc(-1 * var(--sp-keyboard-offset, 0px)), 0);
  }

  .sp-chat.is-keyboard-transitioning .sp-chat-footer {
    transition: none !important;
  }

  .sp-chat.is-keyboard-open .sp-chat-panel,
  .sp-chat.is-keyboard-transitioning .sp-chat-panel {
    top: calc(var(--sp-site-header-height, 75px) - 1px) !important;
    height: calc(var(--sp-shell-vh, 100dvh) - var(--sp-site-header-height, 75px) + 1px) !important;
  }
}

/* v90: mobile browser-control transparency and stable composer clearance.
   The chat surface fills the large viewport behind translucent device/browser
   controls. The footer alone follows the visible viewport bottom, so the
   composer stays accessible without exposing an opaque page-colored strip. */
@media (max-width: 600px) {
  .sp-chat {
    --sp-safe-bottom: env(safe-area-inset-bottom, 0px);
    --sp-visual-bottom-offset: 0px;
  }

  .sp-chat.is-open,
  .sp-chat.is-closing {
    background: transparent !important;
  }

  .sp-chat.is-open .sp-chat-panel,
  .sp-chat.is-closing .sp-chat-panel {
    top: calc(var(--sp-site-header-height, 75px) - 1px) !important;
    bottom: auto !important;
    height: calc(var(--sp-large-vh, var(--sp-shell-vh, 100dvh)) - var(--sp-site-header-height, 75px) + 1px) !important;
    min-height: 0 !important;
  }

  .sp-chat.is-open .sp-chat-footer,
  .sp-chat.is-closing .sp-chat-footer,
  .sp-chat.is-open.is-keyboard-open .sp-chat-footer,
  .sp-chat.is-keyboard-transitioning .sp-chat-footer {
    bottom: 0 !important;
    padding-bottom: max(12px, env(safe-area-inset-bottom, 0px)) !important;
    background: transparent !important;
    transform: translate3d(0, calc(-1 * var(--sp-visual-bottom-offset, 0px)), 0) !important;
    transition: transform 170ms cubic-bezier(.22, 1, .36, 1) !important;
  }

  .sp-chat.is-keyboard-transitioning .sp-chat-footer {
    transition: none !important;
  }

  .sp-chat-footer::before,
  .sp-chat-footer::after,
  .sp-chat-panel::after {
    display: none !important;
    content: none !important;
    background: transparent !important;
  }
}

@supports (height: 100lvh) {
  @media (max-width: 600px) {
    .sp-chat.is-open,
    .sp-chat.is-closing {
      height: 100lvh !important;
      min-height: 100lvh !important;
    }

    .sp-chat.is-open .sp-chat-panel,
    .sp-chat.is-closing .sp-chat-panel {
      height: calc(100lvh - var(--sp-site-header-height, 75px) + 1px) !important;
    }
  }
}

/* v115: keep the launcher anchor stable while its isolated inner wrapper
   handles entrance, ambient motion, and the smooth two-bounce scale-only attention pop.
   The random attention timer and pop remain active during native page scrolling. */
.sp-chat-launcher-motion {
  display: inline-flex;
  transform-origin: center;
}

@media (max-width: 600px), (hover: none) and (pointer: coarse) and (max-width: 1100px) {
  .sp-chat:not(.is-open):not(.is-closing) .sp-chat-launcher-anchor {
    contain: layout style !important;
  }

  .sp-chat:not(.is-open):not(.is-closing) .sp-chat-launcher-motion {
    display: inline-flex;
    transform: translate3d(0, 0, 0);
    transform-origin: center;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }

  /* Keep the actual button geometry and fixed hit target motionless. */
  .sp-chat:not(.is-open):not(.is-closing) .sp-chat-launcher,
  .sp-chat.is-launcher-ready:not(.has-launcher-arrived):not(.is-open):not(.is-closing) .sp-chat-launcher,
  .sp-chat.has-launcher-arrived:not(.is-open):not(.is-closing) .sp-chat-launcher,
  .sp-chat.is-launcher-shaking:not(.is-open):not(.is-closing) .sp-chat-launcher {
    animation: none !important;
    transform: none !important;
    filter: none !important;
    will-change: auto !important;
  }

  /* First-page reveal: the full pill springs in, matching desktop character. */
  .sp-chat.is-launcher-ready:not(.has-launcher-arrived):not(.is-open):not(.is-closing) .sp-chat-launcher {
    opacity: 1 !important;
  }

  .sp-chat.is-launcher-ready:not(.has-launcher-arrived):not(.is-open):not(.is-closing) .sp-chat-launcher-motion {
    animation: sp-chat-launcher-arrive-mobile-rich 920ms cubic-bezier(.16, 1, .3, 1) both;
  }

  /* Gentle ambient drift only while idle. */
  .sp-chat.has-launcher-arrived:not(.is-launcher-shaking):not(.is-open):not(.is-closing):not(.is-mobile-launcher-returning) .sp-chat-launcher-motion {
    animation: sp-chat-launcher-float-mobile 10.8s cubic-bezier(.42, 0, .58, 1) infinite;
  }

  /* The occasional attention pop is scale-only and remains available while
     the page is moving under native touch or wheel scrolling. */
  .sp-chat.is-launcher-shaking:not(.is-open):not(.is-closing) .sp-chat-launcher-motion {
    animation: sp-chat-launcher-pop-mobile 860ms cubic-bezier(.22, 1, .36, 1) both;
  }

  @keyframes sp-chat-launcher-arrive-mobile-rich {
    0% { opacity: 0; transform: translate3d(0, 30px, 0) scale(.78); }
    46% { opacity: 1; transform: translate3d(0, -8px, 0) scale(1.055); }
    68% { transform: translate3d(0, 3px, 0) scale(.985); }
    84% { transform: translate3d(0, -1.5px, 0) scale(1.012); }
    100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
  }

  @keyframes sp-chat-launcher-float-mobile {
    0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg); }
    23% { transform: translate3d(0, -4.5px, 0) rotate(-.4deg); }
    50% { transform: translate3d(0, 2.65px, 0) rotate(.31deg); }
    76% { transform: translate3d(0, -3.35px, 0) rotate(-.25deg); }
  }

  @keyframes sp-chat-launcher-pop-mobile {
    0%, 100% { transform: scale3d(1, 1, 1); }
    22% { transform: scale3d(1.15, 1.15, 1); }
    43% { transform: scale3d(.95, .95, 1); }
    68% { transform: scale3d(1.10, 1.10, 1); }
    85% { transform: scale3d(.988, .988, 1); }
  }
}


/* v93: eliminate mobile tap flashes and replay the full launcher entrance
   whenever the planning window closes. The launcher stays hidden throughout
   panel transitions, then returns with one clean pop on the isolated motion
   layer so the fixed hit target never jumps. */
.sp-chat-launcher,
.sp-chat-launcher-anchor,
.sp-chat-launcher-motion {
  -webkit-tap-highlight-color: transparent;
  -webkit-touch-callout: none;
}

.sp-chat-launcher {
  appearance: none;
  -webkit-appearance: none;
  background-clip: padding-box;
  touch-action: manipulation;
  user-select: none;
  -webkit-user-select: none;
}

.sp-chat-launcher:focus:not(:focus-visible),
.sp-chat-launcher:active {
  outline: 0;
}

/* Do not leave the button, its black offset shadow, or a native pressed-state
   rectangle visible for a frame while the panel is opening or closing. */
.sp-chat.is-open .sp-chat-launcher-anchor,
.sp-chat.is-closing .sp-chat-launcher-anchor {
  visibility: hidden;
  pointer-events: none;
}

.sp-chat.is-open .sp-chat-launcher,
.sp-chat.is-closing .sp-chat-launcher {
  animation: none !important;
  transition: none !important;
}

.sp-chat.is-launcher-reentering:not(.is-open):not(.is-closing) .sp-chat-launcher-anchor {
  visibility: visible;
}

.sp-chat.is-launcher-reentering:not(.is-open):not(.is-closing) .sp-chat-launcher {
  animation: sp-chat-launcher-arrive 920ms cubic-bezier(.16, 1, .3, 1) both !important;
  pointer-events: auto;
}

@media (max-width: 600px), (hover: none) and (pointer: coarse) and (max-width: 1100px) {
  .sp-chat.is-launcher-reentering:not(.is-open):not(.is-closing) .sp-chat-launcher {
    animation: none !important;
    opacity: 1 !important;
    filter: none !important;
    transform: none !important;
  }

  .sp-chat.is-launcher-reentering:not(.is-open):not(.is-closing) .sp-chat-launcher-motion {
    animation: sp-chat-launcher-arrive-mobile-rich 920ms cubic-bezier(.16, 1, .3, 1) both !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .sp-chat.is-launcher-reentering .sp-chat-launcher,
  .sp-chat.is-launcher-reentering .sp-chat-launcher-motion {
    animation: none !important;
  }
}


/* v94: preserve the website's exact mobile scroll position while chat is open.
   Background touch movement is already blocked in chat.js and the message list
   contains its own overscroll, so changing the document height is unnecessary
   and causes iPhone browsers to jump to the top. */
@media (max-width: 600px) {
  html.sp-chat-open,
  body.sp-chat-open {
    height: auto !important;
    overflow: visible !important;
    overscroll-behavior: auto !important;
  }
}

/* Keep the floating Plan a Video launcher beneath the expanded navigation.
   The drawer remains the visible and interactive layer across its full area. */
@media (max-width: 1100px) {
  body.menu-is-open .sp-chat:not(.is-open):not(.is-closing) .sp-chat-launcher-anchor {
    z-index: 60 !important;
    pointer-events: none !important;
  }

  body.menu-is-open .mobile-menu {
    z-index: 1190 !important;
  }
}

@media (max-width: 1100px) {
  body.menu-is-open #site-root {
    z-index: 1200 !important;
  }
}


/* v92: keyboard isolation, gap coverage, and resumable scheduling action. */
.sp-chat-resume-scheduling {
  width: 100%;
  min-height: 42px;
  margin: 0 0 9px;
  padding: 9px 16px;
  pointer-events: auto;
}
.sp-chat-resume-scheduling.is-entering {
  opacity: 0;
  filter: blur(10px);
  transform: translate3d(0, 22px, 0) scale(.96);
}
.sp-chat-resume-scheduling.is-revealing {
  animation: sp-chat-suggestion-in 620ms cubic-bezier(.22, 1, .36, 1) both;
  will-change: opacity, filter, transform;
}
.sp-chat-resume-scheduling.is-leaving {
  animation: sp-chat-suggestion-out 480ms cubic-bezier(.65, 0, .35, 1) both;
  pointer-events: none;
  will-change: opacity, filter, transform;
}
.sp-chat-resume-scheduling[hidden] { display: none !important; }
.sp-chat-keyboard-fill { display: none; }

@media (max-width: 600px) {
  html.sp-chat-open,
  body.sp-chat-open {
    overscroll-behavior: none !important;
    touch-action: none !important;
  }

  html.sp-chat-open #site-root,
  body.sp-chat-open #site-root {
    touch-action: none !important;
    overscroll-behavior: none !important;
  }

  .sp-chat.is-open,
  .sp-chat.is-closing,
  .sp-chat-panel,
  .sp-chat-footer {
    overscroll-behavior: none !important;
  }

  .sp-chat.is-open,
  .sp-chat.is-closing,
  .sp-chat-panel {
    touch-action: none;
  }

  .sp-chat-messages {
    touch-action: pan-y pinch-zoom !important;
    overscroll-behavior-y: auto !important;
  }

  .sp-chat-keyboard-fill {
    position: fixed;
    z-index: 0;
    right: 0;
    bottom: 0;
    left: 0;
    display: block;
    height: 0;
    min-height: 0;
    background: var(--sp-blue-deep);
    opacity: 0;
    pointer-events: none;
    transform: translateZ(0);
  }

  .sp-chat.is-keyboard-open .sp-chat-keyboard-fill,
  .sp-chat.is-keyboard-transitioning .sp-chat-keyboard-fill {
    height: calc(var(--sp-visual-bottom-offset, 0px) + 24px) !important;
    opacity: 1 !important;
  }

  .sp-chat.has-resume-scheduling .sp-chat-footer {
    background: transparent !important;
  }
}


/* v96: deterministic Safari keyboard geometry and a permanent mobile header guard.
   The keyboard now resizes the chat panel to the settled visual viewport instead
   of translating the footer by an inferred occlusion. This removes the intermittent
   jump-to-the-top failure. Quick actions are collapsed only visually and return on
   blur. A separate solid header layer prevents WebKit from exposing the frozen page
   when it drops a sticky header compositing layer during chat opening. */
.sp-chat-site-header-guard { display: none; }

@media (max-width: 600px) {
  .sp-chat-site-header-guard {
    position: fixed;
    z-index: 1400;
    top: 0;
    right: 0;
    left: 0;
    display: flex;
    align-items: center;
    height: var(--sp-site-header-height, 75px);
    overflow: hidden;
    border-bottom: 3px solid var(--line, #111);
    background: var(--bg, #fffdf7);
    box-shadow: 0 3px 0 rgba(0, 0, 0, .05);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transform: translateZ(0);
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }

  .sp-chat.is-open .sp-chat-site-header-guard,
  .sp-chat.is-closing .sp-chat-site-header-guard {
    opacity: 1;
    visibility: visible;
  }

  .sp-chat-site-header-inner {
    display: flex;
    align-items: center;
    width: min(1224px, calc(100% - 36px));
    height: 100%;
    margin-inline: auto;
  }

  .sp-chat-site-header-inner img {
    display: block;
    width: clamp(116px, 33vw, 138px);
    max-height: 45px;
    object-fit: contain;
    object-position: left center;
  }

  /* The original header stays in the frozen page for exact scroll restoration,
     but the independent guard is the only header WebKit needs to composite. */
  html.sp-chat-open #site-root .site-header,
  body.sp-chat-open #site-root .site-header {
    visibility: hidden !important;
    opacity: 0 !important;
  }

  .sp-chat.is-open .sp-chat-panel,
  .sp-chat.is-closing .sp-chat-panel {
    top: calc(var(--sp-site-header-height, 75px) - 1px) !important;
    height: calc(var(--sp-large-vh, var(--sp-shell-vh, 100dvh)) - var(--sp-site-header-height, 75px) + 1px) !important;
  }

  /* With the keyboard present, the panel itself ends at the visual viewport
     bottom. The footer remains at bottom:0 inside that panel—no large transform,
     no stale keyboard offset, and no path for the send bar to reach the header. */
  .sp-chat.is-open.is-keyboard-open .sp-chat-panel,
  .sp-chat.is-keyboard-transitioning .sp-chat-panel {
    top: calc(var(--sp-site-header-height, 75px) - 1px) !important;
    height: max(220px, calc(var(--sp-vh, var(--sp-shell-vh, 100dvh)) + var(--sp-vv-top, 0px) - var(--sp-site-header-height, 75px) + 1px)) !important;
  }

  .sp-chat.is-open .sp-chat-footer,
  .sp-chat.is-closing .sp-chat-footer {
    bottom: 0 !important;
    /* The panel paints through the large viewport, but the composer belongs at
       the visible viewport edge so browser/device controls cannot cover it. */
    transform: translate3d(0, calc(-1 * var(--sp-visual-bottom-offset, 0px)), 0) !important;
    transition: none !important;
  }

  /* Once the on-screen keyboard is present the panel itself is resized to the
     visual viewport, so applying the lower-control offset again would double-lift
     the composer. */
  .sp-chat.is-open.is-keyboard-open .sp-chat-footer,
  .sp-chat.is-keyboard-transitioning .sp-chat-footer {
    bottom: 0 !important;
    transform: translate3d(0, 0, 0) !important;
    transition: none !important;
  }

  /* Focusing an empty composer no longer destroys quick actions. They occupy no
     keyboard-time height and return automatically when the keyboard closes. */
  .sp-chat.is-keyboard-open .sp-chat-suggestions-viewport,
  .sp-chat.is-keyboard-transitioning .sp-chat-suggestions-viewport {
    display: none !important;
  }

  .sp-chat.is-keyboard-open .sp-chat-keyboard-fill,
  .sp-chat.is-keyboard-transitioning .sp-chat-keyboard-fill {
    top: var(--sp-visible-bottom, var(--sp-shell-vh, 100dvh)) !important;
    right: 0 !important;
    bottom: 0 !important;
    left: 0 !important;
    width: auto !important;
    height: auto !important;
    min-height: 0 !important;
    background: var(--sp-blue-deep) !important;
    opacity: 1 !important;
  }
}


/* v98: model-authored schedule rows and reliable card semantics. */
.sp-chat-block.is-times-list {
  margin: 14px 0 16px;
}
.sp-chat-block.is-times-list .sp-chat-time-row {
  padding: 13px 3px;
  border-bottom-color: rgba(255, 255, 255, .17);
}
.sp-chat-block.is-times-list::before {
  background: rgba(255, 255, 255, .22);
}
.sp-chat-card-detail-icon {
  color: rgba(255, 255, 255, .96);
  font-variation-settings: "FILL" 0, "wght" 560, "GRAD" 0, "opsz" 24;
}
.sp-chat-card-detail-copy {
  display: block;
  min-width: 0;
  color: rgba(255, 255, 255, .9);
  font-weight: 700;
  line-height: 1.34;
}
.sp-chat-card-detail-label {
  display: inline;
  margin-right: .34em;
  color: #fff;
  font-weight: 950;
  letter-spacing: -.012em;
}
.sp-chat-card-detail-value {
  color: rgba(255, 255, 255, .88);
  font-weight: 710;
}

/* v102: native device scrolling inside the conversation.
   Do not contain or cancel the message list at its first/last pixel. The
   browser now owns momentum, edge resistance, and rubber-band feedback while
   the frozen site root still prevents the page behind the chat from moving. */
.sp-chat-messages {
  overscroll-behavior-x: none;
  overscroll-behavior-y: auto;
  touch-action: pan-y pinch-zoom;
  -webkit-overflow-scrolling: touch;
}

@media (max-width: 600px), (hover: none) and (pointer: coarse) {
  html.sp-chat-open,
  body.sp-chat-open,
  .sp-chat.is-open,
  .sp-chat.is-closing,
  .sp-chat-panel {
    touch-action: auto !important;
  }

  .sp-chat-messages {
    overscroll-behavior-y: auto !important;
    touch-action: pan-y pinch-zoom !important;
  }
}



/* v103: model-owned editorial hierarchy for clear, minimal information layouts. */
.sp-chat-message.is-assistant .sp-chat-message-copy {
  --sp-copy-muted: rgba(255, 255, 255, .82);
  --sp-copy-rule: rgba(255, 255, 255, .2);
}

.sp-chat-message.is-assistant .sp-chat-block:not(.is-heading):not(.is-list):not(.is-spacer) {
  max-width: 94%;
  font-size: clamp(1.04rem, 3.35vw, 1.13rem);
  font-weight: 760;
  line-height: 1.42;
  letter-spacing: -.018em;
}

.sp-chat-block.is-heading,
.sp-chat-message.is-assistant .sp-chat-block.is-heading {
  max-width: 100%;
  padding: 0;
  border: 0;
  color: #fff;
  text-wrap: balance;
}

.sp-chat-block.is-heading.is-level-1 {
  margin: 0 0 16px;
  font-size: clamp(1.72rem, 5.65vw, 2.08rem);
  font-weight: 960;
  line-height: 1.04;
  letter-spacing: -.041em;
}

.sp-chat-block.is-heading.is-level-2 {
  margin: 28px 0 13px;
  padding-bottom: 11px;
  border-bottom: 1px solid var(--sp-copy-rule, rgba(255, 255, 255, .22));
  font-size: clamp(1.5rem, 4.95vw, 1.82rem);
  font-weight: 950;
  line-height: 1.07;
  letter-spacing: -.034em;
}

.sp-chat-message-copy > .sp-chat-block.is-heading.is-level-2:first-child,
.sp-chat-message-copy > .sp-chat-speaker + .sp-chat-block.is-heading.is-level-2 {
  margin-top: 0;
}

.sp-chat-block.is-heading.is-level-3,
.sp-chat-block.is-heading.is-bold-label {
  margin: 22px 0 8px;
  padding: 17px 0 0;
  border-top: 1px solid var(--sp-copy-rule, rgba(255, 255, 255, .2));
  border-right: 0;
  border-bottom: 0;
  border-left: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  font-size: clamp(1.08rem, 3.55vw, 1.23rem);
  font-weight: 920;
  line-height: 1.16;
  letter-spacing: -.023em;
}

/* The parent heading already supplies the first separator. Avoid a doubled
   rule before the first child while keeping clean rules between offerings. */
.sp-chat-block.is-heading.is-level-2 + .sp-chat-block.is-heading.is-level-3,
.sp-chat-block.is-heading.is-level-2 + .sp-chat-block.is-heading.is-bold-label,
.sp-chat-block.is-spacer + .sp-chat-block.is-heading.is-level-3,
.sp-chat-block.is-spacer + .sp-chat-block.is-heading.is-bold-label {
  margin-top: 12px;
  padding-top: 3px;
  border-top: 0;
}

.sp-chat-block.is-heading.has-heading-meta {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: baseline;
  gap: 6px 12px;
  text-wrap: initial;
}
.sp-chat-heading-title { min-width: 0; text-wrap: balance; }
.sp-chat-heading-meta {
  flex: 0 0 auto;
  color: rgba(255, 255, 255, .9);
  font-size: .9em;
  font-weight: 950;
  letter-spacing: -.018em;
  white-space: nowrap;
}

@media (max-width: 410px) {
  .sp-chat-block.is-heading.is-level-3.has-heading-meta {
    grid-template-columns: minmax(0, 1fr);
  }
  .sp-chat-block.is-heading.is-level-3 .sp-chat-heading-meta {
    justify-self: start;
    font-size: .82em;
  }
}

.sp-chat-block.is-heading.is-level-3 + .sp-chat-block:not(.is-heading):not(.is-spacer) {
  margin-top: 0;
}
.sp-chat-block.is-heading.is-level-3 + .sp-chat-block.is-list {
  margin-top: 4px;
}

.sp-chat-block.is-bullets-list,
.sp-chat-block.is-steps-list {
  gap: 4px;
  margin: 7px 0 13px;
}
.sp-chat-block.is-bullets-list li,
.sp-chat-block.is-steps-list li {
  padding-top: 6px;
  padding-bottom: 6px;
  font-size: clamp(.96rem, 3.05vw, 1.03rem);
  font-weight: 680;
  line-height: 1.4;
  letter-spacing: -.011em;
}
.sp-chat-block.is-bullets-list li::before {
  top: calc(6px + .7em) !important;
  width: 6px !important;
  height: 6px !important;
  background: rgba(255, 255, 255, .82) !important;
}
.sp-chat-block.is-steps-list li::before { top: 6px !important; }

.sp-chat-block.is-spacer {
  height: 31px;
  margin: 2px 0;
}
.sp-chat-block.is-spacer::before {
  top: 15px;
  background: var(--sp-copy-rule, rgba(255, 255, 255, .2));
}

.sp-chat-block.is-comparison-list .sp-chat-comparison-row {
  padding-top: 12px;
  padding-bottom: 12px;
  font-size: clamp(.94rem, 3vw, 1.01rem);
  line-height: 1.38;
}
.sp-chat-block.is-comparison-list .sp-chat-list-label { font-weight: 900; }
.sp-chat-block.is-comparison-list .sp-chat-list-value {
  color: var(--sp-copy-muted, rgba(255, 255, 255, .82));
  font-weight: 700;
}

@media (max-width: 420px) {
  .sp-chat-block.is-heading.has-heading-meta {
    align-items: flex-start;
    flex-direction: column;
    gap: 3px;
  }
  .sp-chat-heading-meta { font-size: .86em; }
}

/* v106: restore native glass blur on desktop controls.
   The desktop performance pass intentionally keeps expensive blur off the full
   chat surface, but these small interactive pills retain the established glass
   treatment without re-enabling blur on messages, cards, or the panel. */
@media (min-width: 601px) and (hover: hover) and (pointer: fine) {
  .sp-chat .sp-chat-header,
  .sp-chat .sp-chat-input,
  .sp-chat .sp-chat-suggestion,
  .sp-chat .sp-chat-suggestions.is-card-row .sp-chat-suggestion,
  .sp-chat .sp-chat-resume-scheduling {
    -webkit-backdrop-filter: var(--sp-chat-control-blur) !important;
    backdrop-filter: var(--sp-chat-control-blur) !important;
  }
}

/* v108: keep the desktop site header in its native geometry while chat opens.
   Earlier tablet/desktop rules promoted the header to fixed positioning, which
   changed its containing width by roughly the scrollbar gutter and nudged the
   centered Skylines logo. Desktop chat does not need that promotion: the
   existing z-index already keeps the header layered correctly. */
@media (min-width: 601px) {
  html {
    scrollbar-gutter: stable;
  }
}

@media (min-width: 601px) and (max-width: 1100px) {
  html.sp-chat-open #site-root,
  body.sp-chat-open #site-root {
    padding-top: 0 !important;
  }

  html.sp-chat-open .site-header,
  body.sp-chat-open .site-header {
    position: sticky !important;
    top: 0 !important;
    right: auto !important;
    left: auto !important;
    width: auto !important;
    transform: none !important;
  }
}

/* v116: softer mobile reveal boundary. The panel keeps the established
   920 ms motion; only the moving mask feather is lengthened and eased. */
@media (max-width: 600px) {
  .sp-chat-panel {
    -webkit-mask-image: linear-gradient(
      to bottom,
      transparent 0,
      rgba(0, 0, 0, .012) 22px,
      rgba(0, 0, 0, .05) 44px,
      rgba(0, 0, 0, .13) 68px,
      rgba(0, 0, 0, .27) 92px,
      rgba(0, 0, 0, .47) 114px,
      rgba(0, 0, 0, .68) 132px,
      rgba(0, 0, 0, .86) 145px,
      #000 156px
    );
    mask-image: linear-gradient(
      to bottom,
      transparent 0,
      rgba(0, 0, 0, .012) 22px,
      rgba(0, 0, 0, .05) 44px,
      rgba(0, 0, 0, .13) 68px,
      rgba(0, 0, 0, .27) 92px,
      rgba(0, 0, 0, .47) 114px,
      rgba(0, 0, 0, .68) 132px,
      rgba(0, 0, 0, .86) 145px,
      #000 156px
    );
    -webkit-mask-size: 100% calc(100% + 156px);
    mask-size: 100% calc(100% + 156px);
  }

  @keyframes sp-chat-mobile-open {
    0% {
      opacity: 0;
      filter: blur(18px);
      -webkit-mask-size: 100% 0;
      mask-size: 100% 0;
      transform: translate3d(0, 20px, 0);
    }
    58% { opacity: 1; }
    100% {
      opacity: 1;
      filter: blur(0);
      -webkit-mask-size: 100% calc(100% + 156px);
      mask-size: 100% calc(100% + 156px);
      transform: translate3d(0, 0, 0);
    }
  }

  @keyframes sp-chat-mobile-close {
    0% {
      opacity: 1;
      filter: blur(0);
      -webkit-mask-size: 100% calc(100% + 156px);
      mask-size: 100% calc(100% + 156px);
      transform: translate3d(0, 0, 0);
    }
    70% { opacity: 1; }
    100% {
      opacity: 0;
      filter: blur(18px);
      -webkit-mask-size: 100% 0;
      mask-size: 100% 0;
      transform: translate3d(0, 16px, 0);
    }
  }
}


/* v117: keep the ambient float and attention bounce on independent transform
   layers. Triggering the two-bounce pop no longer replaces or restarts the
   infinite float animation, so the launcher continues from its current phase. */
.sp-chat-launcher-pop {
  display: inline-flex;
  transform: scale3d(1, 1, 1);
  transform-origin: center;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

/* Once the launcher has arrived, the motion wrapper owns only the continuous
   float. The actual button stays geometrically stable and the inner pop layer
   owns only the temporary scale animation. */
.sp-chat.has-launcher-arrived:not(.is-open):not(.is-closing):not(.is-mobile-launcher-returning):not(.is-launcher-reentering) .sp-chat-launcher-motion {
  animation: sp-chat-launcher-gentle-float 15.2s cubic-bezier(.42, 0, .58, 1) infinite !important;
}

.sp-chat.has-launcher-arrived:not(.is-open):not(.is-closing):not(.is-mobile-launcher-returning):not(.is-launcher-reentering) .sp-chat-launcher,
.sp-chat.is-launcher-shaking:not(.is-open):not(.is-closing) .sp-chat-launcher {
  animation: none !important;
}

.sp-chat.is-launcher-shaking:not(.is-open):not(.is-closing) .sp-chat-launcher-pop {
  animation: sp-chat-launcher-pop 860ms cubic-bezier(.22, 1, .36, 1) both;
}

@media (max-width: 600px), (hover: none) and (pointer: coarse) and (max-width: 1100px) {
  .sp-chat.has-launcher-arrived:not(.is-open):not(.is-closing):not(.is-mobile-launcher-returning):not(.is-launcher-reentering) .sp-chat-launcher-motion {
    animation: sp-chat-launcher-float-mobile 10.8s cubic-bezier(.42, 0, .58, 1) infinite !important;
  }

  .sp-chat.is-launcher-shaking:not(.is-open):not(.is-closing) .sp-chat-launcher-pop {
    animation: sp-chat-launcher-pop-mobile 860ms cubic-bezier(.22, 1, .36, 1) both;
  }
}

.sp-chat.is-open .sp-chat-launcher-pop,
.sp-chat.is-closing .sp-chat-launcher-pop,
.sp-chat.is-launcher-reentering .sp-chat-launcher-pop {
  animation: none !important;
}

@media (prefers-reduced-motion: reduce) {
  .sp-chat-launcher-motion,
  .sp-chat-launcher-pop {
    animation: none !important;
  }
}


/* v118: independent desktop hover bounce, longer menu blur transitions, and
   scrollbar-width preservation so the site brand never shifts when chat opens. */
@media (hover: hover) and (pointer: fine) {
  .sp-chat.is-launcher-hover-bouncing:not(.is-open):not(.is-closing) .sp-chat-launcher-pop {
    animation: sp-chat-launcher-hover-pop 460ms cubic-bezier(.22, 1, .36, 1) both;
  }

  @keyframes sp-chat-launcher-hover-pop {
    0%, 100% { transform: scale3d(1, 1, 1); }
    46% { transform: scale3d(1.072, 1.072, 1); }
    74% { transform: scale3d(.993, .993, 1); }
  }
}

.sp-chat.is-open .sp-chat-launcher-pop,
.sp-chat.is-closing .sp-chat-launcher-pop,
.sp-chat.is-launcher-reentering .sp-chat-launcher-pop {
  animation: none !important;
}

@media (max-width: 1100px) {
  .menu-toggle {
    transition:
      opacity 520ms ease,
      filter 680ms cubic-bezier(.22, 1, .36, 1),
      transform 680ms cubic-bezier(.22, 1, .36, 1) !important;
  }
}

@media (max-width: 600px) {
  .sp-chat-site-header-guard {
    right: var(--sp-page-scrollbar-width, 0px);
  }

  .sp-chat-site-header-inner {
    position: relative;
    justify-content: space-between;
  }

  .sp-chat-site-menu-ghost {
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    margin-right: 4px;
    color: #111;
    opacity: 0;
    filter: blur(14px);
    transform: scale(.84);
    pointer-events: none;
  }

  .sp-chat-site-menu-ghost svg {
    width: 32px;
    height: 32px;
    stroke: currentColor;
    stroke-width: 2.75;
    stroke-linecap: round;
    stroke-linejoin: round;
  }

  .sp-chat.is-open .sp-chat-site-menu-ghost {
    animation: sp-chat-site-menu-blur-away 680ms cubic-bezier(.22, 1, .36, 1) both;
  }

  .sp-chat.is-closing .sp-chat-site-menu-ghost {
    opacity: 0;
    filter: blur(14px);
    transform: scale(.84);
    animation: none;
  }

  @keyframes sp-chat-site-menu-blur-away {
    0% {
      opacity: 1;
      filter: blur(0);
      transform: scale(1);
    }
    100% {
      opacity: 0;
      filter: blur(14px);
      transform: scale(.84);
    }
  }
}

/* Keep a real desktop scrollbar track allocated even while the chat surface is
   active. On narrow desktop windows the JS compensation above preserves the
   pre-lock content width before overflow is frozen. */
@media (min-width: 601px) {
  html {
    overflow-y: scroll;
    scrollbar-gutter: stable;
  }

  html.sp-chat-open,
  body.sp-chat-open {
    overflow-y: scroll !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .sp-chat.is-launcher-hover-bouncing .sp-chat-launcher-pop,
  .sp-chat.is-open .sp-chat-site-menu-ghost {
    animation: none !important;
  }
}


/* v120: low-confidence estimate refinement stays minimal and directly beneath
   the booking-review price without changing the standard card layout. */
.sp-chat-review-estimate-note {
  display: grid;
  grid-template-columns: 24px minmax(0, 1fr);
  align-items: start;
  gap: 9px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid rgba(255, 255, 255, .18);
  color: rgba(255, 255, 255, .82);
  font-size: .78rem;
  font-weight: 650;
  line-height: 1.35;
}
.sp-chat-review-estimate-note .sp-chat-card-detail-icon {
  margin-top: -1px;
  font-size: 19px;
  opacity: .88;
}
.sp-chat-review-estimate-note .sp-chat-card-detail-label {
  color: rgba(255, 255, 255, .97);
  font-weight: 900;
}

/* v123: when estimate accuracy needs more video requirements, frame the price
   with full-card-width rules. The standard review keeps only its existing top
   rule, so no lower separator appears when the note is absent. */
.sp-chat-card.is-booking-review-card.has-estimate-note .sp-chat-review-estimate {
  padding-bottom: 16px;
}
.sp-chat-card.is-booking-review-card.has-estimate-note .sp-chat-review-estimate::after {
  content: "";
  position: absolute;
  right: -50px;
  bottom: 0;
  left: -50px;
  border-bottom: 1px solid rgba(224, 237, 250, .2);
}
.sp-chat-card.is-booking-review-card.has-estimate-note .sp-chat-review-estimate-note {
  margin-top: 0;
  padding-top: 13px;
  border-top: 0;
}

.sp-chat-estimate-update {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 38px;
  margin-top: 12px;
  padding: 8px 14px;
  border: 1px solid rgba(255, 255, 255, .22);
  border-radius: 999px;
  background: rgba(255, 255, 255, .1);
  color: #fff;
  font: inherit;
  font-size: .76rem;
  font-weight: 850;
  letter-spacing: .01em;
  cursor: pointer;
  backdrop-filter: blur(12px) saturate(125%);
  -webkit-backdrop-filter: blur(12px) saturate(125%);
  transition: background-color .22s ease, border-color .22s ease, transform .22s ease;
}
.sp-chat-estimate-update:hover {
  background: rgba(255, 255, 255, .16);
  border-color: rgba(255, 255, 255, .34);
  transform: translateY(-1px);
}
.sp-chat-estimate-update:active { transform: translateY(0) scale(.985); }

.sp-chat-suggestions.is-card-row.has-inline-estimate-update { grid-template-columns: minmax(0, 1fr); }

.sp-chat-estimate-update:disabled { opacity: .48; cursor: default; transform: none; }

/* v121: desktop now uses the same soft blur language as mobile. The chat
   panel does not inherit mobile's vertical reveal; it resolves in place while
   messages, structural lines, cards, and quick actions retain their existing
   model-driven entrance and exit choreography. Mobile rules are untouched. */
@media (min-width: 601px) {
  .sp-chat-scrim {
    transition:
      opacity 920ms cubic-bezier(.22, 1, .36, 1),
      -webkit-backdrop-filter 920ms cubic-bezier(.22, 1, .36, 1),
      backdrop-filter 920ms cubic-bezier(.22, 1, .36, 1) !important;
  }

  .sp-chat.is-open .sp-chat-scrim {
    background: rgba(12, 21, 31, .31);
    -webkit-backdrop-filter: blur(7px);
    backdrop-filter: blur(7px);
  }

  .sp-chat.is-closing .sp-chat-scrim {
    transition-timing-function: cubic-bezier(.65, 0, .35, 1) !important;
  }

  .sp-chat.is-open .sp-chat-panel {
    animation: sp-chat-panel-open-desktop-mobile-soft 920ms cubic-bezier(.22, 1, .36, 1) both !important;
  }

  .sp-chat.is-closing .sp-chat-panel {
    animation: sp-chat-panel-close-desktop-mobile-soft 920ms cubic-bezier(.65, 0, .35, 1) both !important;
  }

  .sp-chat-enter,
  .sp-chat-lines-enter,
  .sp-chat-suggestions.is-entering .sp-chat-suggestion {
    will-change: opacity, filter, transform !important;
  }

  .sp-chat-suggestions.is-revealing .sp-chat-suggestion,
  .sp-chat-suggestions.is-leaving .sp-chat-suggestion {
    will-change: opacity, filter, transform !important;
  }
}

@keyframes sp-chat-panel-open-desktop-mobile-soft {
  0% {
    opacity: 0;
    filter: blur(18px);
  }
  58% { opacity: 1; }
  100% {
    opacity: 1;
    filter: blur(0);
  }
}

@keyframes sp-chat-panel-close-desktop-mobile-soft {
  0% {
    opacity: 1;
    filter: blur(0);
  }
  70% { opacity: 1; }
  100% {
    opacity: 0;
    filter: blur(18px);
  }
}


/* v122: desktop compositor cleanup. Visual blur values, animation timing, and
   interaction behavior remain identical to v121; only completed animation
   layers and duplicate layout work are released after they are no longer
   needed. Mobile is intentionally untouched. */
@media (min-width: 601px) and (hover: hover) and (pointer: fine) {
  .sp-chat-panel {
    contain: layout style;
  }

  .sp-chat-scrim {
    contain: layout paint style;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }

  /* A completed fill-mode filter animation otherwise leaves the entire chat
     panel promoted and rasterized as one large filtered surface. Freeze the
     exact final frame into ordinary properties once the opening has finished. */
  .sp-chat.is-open.is-desktop-chat-settled .sp-chat-panel {
    animation: none !important;
    transition: none !important;
    visibility: visible !important;
    opacity: 1 !important;
    filter: blur(0) !important;
    transform: translate3d(0, 0, 0) scale(1) !important;
    will-change: auto !important;
  }

  .sp-chat.is-open.is-desktop-chat-settled .sp-chat-scrim {
    opacity: 1 !important;
    background: rgba(12, 21, 31, .31);
    -webkit-backdrop-filter: blur(7px);
    backdrop-filter: blur(7px);
    transition: none !important;
    will-change: auto !important;
  }

  .sp-chat:not(.is-open):not(.is-closing) .sp-chat-panel,
  .sp-chat:not(.is-open):not(.is-closing) .sp-chat-scrim {
    will-change: auto !important;
  }

  /* The panel uses keyframes for the visible transition. Avoid simultaneously
     tracking its older property transition while those keyframes are active. */
  .sp-chat.is-open:not(.is-desktop-chat-settled) .sp-chat-panel,
  .sp-chat.is-closing .sp-chat-panel {
    transition: none !important;
  }

  /* Quick actions only need compositor hints during their actual entrance or
     exit. Keeping every settled glass pill promoted increases desktop layer
     count and hurts scrolling without changing how the blur looks. */
  .sp-chat-suggestion,
  .sp-chat-suggestion.is-motion-settled {
    will-change: auto !important;
  }

  .sp-chat-suggestions.is-entering .sp-chat-suggestion,
  .sp-chat-suggestions.is-revealing .sp-chat-suggestion,
  .sp-chat-suggestions.is-leaving .sp-chat-suggestion {
    will-change: opacity, filter, transform !important;
  }

  .sp-chat-card,
  .sp-chat-header,
  .sp-chat-input,
  .sp-chat-suggestion,
  .sp-chat-estimate-update {
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }
}

/* v135: price-first scan hierarchy without fade blocks or long-dash joins. */
.sp-chat-message.is-assistant .sp-chat-block.is-price-highlight {
  max-width: 100%;
  margin: 0 0 9px;
  color: #fff;
  font-size: clamp(1.42rem, 5.15vw, 1.78rem);
  font-weight: 960;
  line-height: 1.02;
  letter-spacing: -.038em;
  text-wrap: balance;
}

.sp-chat-block.is-heading.is-level-3 + .sp-chat-block.is-price-highlight,
.sp-chat-block.is-heading.is-bold-label + .sp-chat-block.is-price-highlight {
  margin-top: -1px;
}

.sp-chat-block.is-price-highlight + .sp-chat-block:not(.is-heading):not(.is-spacer) {
  margin-top: 0;
}

.sp-chat-block.is-comparison-list.has-price-values .sp-chat-list-value {
  font-size: clamp(1.08rem, 3.75vw, 1.24rem);
  line-height: 1.16;
}

/* v136: semantic section separation for deal, package, and pricing answers.
   The renderer adds these classes only when the response structure calls for
   them, so short answers stay light while multi-section catalogs remain easy
   to scan even when the model omits an explicit Markdown divider. */
.sp-chat-block.is-heading.is-level-2.has-auto-section-divider {
  margin-top: 36px;
  padding-top: 24px;
  border-top: 1px solid var(--sp-copy-rule, rgba(255, 255, 255, .24));
}

.sp-chat-block.is-heading.is-level-3.has-auto-offering-divider {
  margin-top: 32px;
  padding-top: 22px;
  border-top: 1px solid rgba(255, 255, 255, .36);
}

.sp-chat-block.is-spacer.is-offering-section-divider::before,
.sp-chat-block.is-spacer.is-major-section-divider::before {
  background: rgba(255, 255, 255, .36);
}

.sp-chat-block.is-comparison-list.has-section-row-dividers .sp-chat-comparison-row + .sp-chat-comparison-row {
  border-top: 1px solid var(--sp-copy-rule, rgba(255, 255, 255, .2));
}

.sp-chat-block.is-comparison-list.has-section-row-dividers .sp-chat-comparison-row {
  padding-top: 14px;
  padding-bottom: 14px;
}

@media (max-width: 420px) {
  .sp-chat-block.is-heading.is-level-2.has-auto-section-divider {
    margin-top: 31px;
    padding-top: 21px;
  }
  .sp-chat-block.is-heading.is-level-3.has-auto-offering-divider {
    margin-top: 27px;
    padding-top: 19px;
  }
}

/* v140: softly animated blue and blush-pink ambient chat background. */
@media (prefers-reduced-motion: reduce) {
  .sp-chat-panel::before {
    animation: none !important;
    filter: blur(18px) saturate(112%) !important;
    opacity: .96 !important;
    transform: translate3d(0, 0, 0) scale(1.08) !important;
    transition: none !important;
    will-change: auto !important;
  }
}

/* v151: loading and frame-pacing stabilization. These rules preserve the
   approved dimensions, colors, blur values, gradient paths, and timing. They
   only keep the desktop panel on its final transform throughout close and
   confine repaint work to the already-clipped chat surface. */
@media (min-width: 601px) {
  .sp-chat.is-open .sp-chat-panel,
  .sp-chat.is-closing .sp-chat-panel {
    transform: translate3d(0, 0, 0) scale(1) !important;
  }

  .sp-chat.is-closing .sp-chat-panel::before {
    animation-play-state: paused !important;
    will-change: auto !important;
  }
}

@media (min-width: 601px) and (hover: hover) and (pointer: fine) {
  .sp-chat-panel {
    contain: layout paint style;
    isolation: isolate;
  }

  .sp-chat-panel::before {
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }

  .sp-chat-messages {
    contain: layout paint style;
    will-change: auto !important;
  }
}

@keyframes sp-chat-panel-open-desktop-mobile-soft {
  0% {
    opacity: 0;
    filter: blur(18px);
    transform: translate3d(0, 0, 0) scale(1);
  }
  58% {
    opacity: 1;
    transform: translate3d(0, 0, 0) scale(1);
  }
  100% {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
}

@keyframes sp-chat-panel-close-desktop-mobile-soft {
  0% {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
  70% {
    opacity: 1;
    transform: translate3d(0, 0, 0) scale(1);
  }
  100% {
    opacity: 0;
    filter: blur(18px);
    transform: translate3d(0, 0, 0) scale(1);
  }
}

/* v152: simple desktop blur motion, longer velocity-only send energy, and a
   body-level mobile drawer that covers the launcher without toggling it. */
@media (min-width: 601px) {
  .sp-chat-scrim {
    transition:
      opacity 560ms cubic-bezier(.22, 1, .36, 1),
      -webkit-backdrop-filter 560ms cubic-bezier(.22, 1, .36, 1),
      backdrop-filter 560ms cubic-bezier(.22, 1, .36, 1) !important;
  }

  .sp-chat.is-closing .sp-chat-scrim {
    transition-duration: 540ms !important;
    transition-timing-function: cubic-bezier(.4, 0, .2, 1) !important;
  }

  .sp-chat.is-open .sp-chat-panel {
    animation: sp-chat-panel-open-desktop-mobile-soft 560ms cubic-bezier(.22, 1, .36, 1) both !important;
  }

  .sp-chat.is-closing .sp-chat-panel {
    animation: sp-chat-panel-close-desktop-mobile-soft 540ms cubic-bezier(.4, 0, .2, 1) both !important;
  }
}

@keyframes sp-chat-panel-open-desktop-mobile-soft {
  from {
    opacity: 0;
    filter: blur(14px);
    transform: translate3d(0, 0, 0) scale(1);
  }
  to {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
}

@keyframes sp-chat-panel-close-desktop-mobile-soft {
  from {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
  to {
    opacity: 0;
    filter: blur(14px);
    transform: translate3d(0, 0, 0) scale(1);
  }
}

@media (max-width: 1100px) {
  body.menu-is-open .sp-chat {
    z-index: 1000 !important;
  }

  body.menu-is-open #site-root {
    z-index: 1 !important;
  }

  body.menu-is-open .mobile-menu,
  .mobile-menu.is-mounted {
    z-index: 1190 !important;
  }

  body.menu-is-open .sp-chat:not(.is-open):not(.is-closing) .sp-chat-launcher-anchor {
    z-index: 1001 !important;
    pointer-events: none !important;
  }
}



/* v153: slightly richer blush-pink color at constant lightness. Send feedback
   remains velocity-only; no brightness, opacity, blur, or filter pulse is added. */

/* v161: keep the mobile chat anchored to the visible viewport while booking
   fields are focused. iOS can pan the visual viewport to follow a form field;
   without compensating for offsetTop, the whole fixed chat appears to jump
   upward and the reset/close controls can leave the screen. During keyboard
   attachment the root now occupies the exact visual viewport, while the panel
   and header retain their existing internal geometry and appearance. */
@media (max-width: 600px) {
  .sp-chat.is-open.is-keyboard-open,
  .sp-chat.is-keyboard-transitioning {
    top: var(--sp-vv-top, 0px) !important;
    right: 0 !important;
    bottom: auto !important;
    left: 0 !important;
    height: var(--sp-vh, var(--sp-shell-vh, 100dvh)) !important;
    min-height: 0 !important;
  }

  .sp-chat.is-open.is-keyboard-open .sp-chat-site-header-guard,
  .sp-chat.is-keyboard-transitioning .sp-chat-site-header-guard {
    top: var(--sp-vv-top, 0px) !important;
  }

  .sp-chat.is-open.is-keyboard-open .sp-chat-panel,
  .sp-chat.is-keyboard-transitioning .sp-chat-panel {
    top: calc(var(--sp-site-header-height, 75px) - 1px) !important;
    height: calc(100% - var(--sp-site-header-height, 75px) + 1px) !important;
    max-height: none !important;
  }

  .sp-chat.is-open.is-keyboard-open .sp-chat-footer,
  .sp-chat.is-keyboard-transitioning .sp-chat-footer {
    bottom: 0 !important;
    transform: translate3d(0, 0, 0) !important;
  }
}

/* v162: immediate mobile header recovery while the software keyboard closes.
   A confirmed blur restores the full chat shell and white site header to the
   layout-viewport origin immediately. The footer retains the existing visual-
   viewport offset during the keyboard animation, so controls do not jump and
   the hero can never appear through a temporary strip above the chat. */
@media (max-width: 600px) {
  /* Paint a solid bridge above the temporarily shifted shell. This is only a
     fallback for sparse Safari viewport events; it disappears as soon as a
     real dismissal is confirmed and never covers the chat controls. */
  .sp-chat.is-open.is-keyboard-open:not(.is-keyboard-dismissing)::after,
  .sp-chat.is-keyboard-transitioning:not(.is-keyboard-dismissing)::after {
    content: "";
    position: fixed;
    z-index: 1399;
    top: 0;
    right: 0;
    left: 0;
    height: max(0px, calc(var(--sp-vv-top, 0px) + var(--sp-site-header-height, 75px) - 1px));
    background: var(--bg, #fffdf7);
    pointer-events: none;
  }

  .sp-chat.is-open.is-keyboard-dismissing {
    top: 0 !important;
    right: 0 !important;
    bottom: auto !important;
    left: 0 !important;
    height: var(--sp-large-vh, var(--sp-shell-vh, 100dvh)) !important;
    min-height: 0 !important;
  }

  .sp-chat.is-open.is-keyboard-dismissing .sp-chat-site-header-guard {
    top: 0 !important;
    transform: translate3d(0, 0, 0) !important;
    transition: none !important;
  }

  .sp-chat.is-open.is-keyboard-dismissing .sp-chat-panel {
    top: calc(var(--sp-site-header-height, 75px) - 1px) !important;
    height: calc(var(--sp-large-vh, var(--sp-shell-vh, 100dvh)) - var(--sp-site-header-height, 75px) + 1px) !important;
    max-height: none !important;
  }

  .sp-chat.is-open.is-keyboard-dismissing .sp-chat-footer {
    bottom: 0 !important;
    transform: translate3d(0, calc(-1 * var(--sp-visual-bottom-offset, 0px)), 0) !important;
    transition: none !important;
  }
}
