#sai-chat-root {
  --sai-brand: #25D366;
  --sai-brand-dark: #128C7E;
  /* Admin-configurable floating button size (Settings → ফ্লোটিং বাটন ও FAQ
     পপ-আপ). All the fixed "165px" / "105px" offsets below for the window,
     nudge bubble and FAQ popup are derived from this same variable so a
     bigger/smaller button never overlaps the panels above it. */
  --sai-toggle-size: 80px;
  font-family: 'Hind Siliguri', sans-serif;
}

/* Never allow the full-screen mobile backdrop to flash while the widget
   markup and JavaScript state are being initialized. */
#sai-chat-root.sai-widget-loading {
  visibility: hidden !important;
}
#sai-chat-root.sai-widget-loading .sai-backdrop,
#sai-chat-root.sai-widget-loading .sai-window,
#sai-chat-root.sai-widget-loading .sai-faq-popup-wrap,
#sai-chat-root.sai-widget-loading .sai-nudge-bubble {
  display: none !important;
}

/* Floating toggle button */
.sai-toggle-btn {
  position: fixed !important;
  bottom: 95px !important;
  right: 25px !important;
  width: var(--sai-toggle-size) !important;
  height: var(--sai-toggle-size) !important;
  border-radius: 50% !important;
  border: none !important;
  cursor: pointer !important;
  background: linear-gradient(135deg, var(--sai-brand) 0%, var(--sai-brand-dark) 100%) !important;
  color: #fff !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  box-shadow: 0 10px 25px rgba(0,0,0,0.35) !important;
  z-index: 999998 !important;
  transition: transform 0.25s ease !important;
}
.sai-toggle-btn:hover { transform: scale(1.08) !important; }
.sai-toggle-btn svg {
  width: calc(var(--sai-toggle-size) * 0.46) !important;
  height: calc(var(--sai-toggle-size) * 0.46) !important;
  fill: #fff !important;
}

@media (max-width: 768px) {
  .sai-toggle-btn { bottom: 85px !important; right: 18px !important; }
}

/* Expand/minimize button only exists for the mobile compact window (see
   the @media max-width:480px block below, which sets display:flex).
   Hidden by default so desktop layout is completely unaffected. This base
   rule MUST come before the @media max-width:480px block below, otherwise
   its !important would win by source order on mobile too and permanently
   hide the button there. */
.sai-expand-btn { display: none !important; }

/* Chat window */
.sai-window {
  position: fixed !important;
  bottom: calc(var(--sai-toggle-size) + 105px) !important;
  right: 25px !important;
  width: 360px !important;
  max-width: calc(100vw - 30px) !important;
  height: 520px !important;
  max-height: calc(100vh - 200px) !important;
  background: #0F172A !important;
  border: 1px solid rgba(255,255,255,0.08) !important;
  border-radius: 16px !important;
  box-shadow: 0 20px 50px rgba(0,0,0,0.5) !important;
  display: none !important;
  flex-direction: column !important;
  overflow: hidden !important;
  z-index: 999999 !important;
}
.sai-window.sai-open { display: none !important; }
.sai-window.sai-user-opened { display: flex !important; }

/* Semi-transparent backdrop shown behind the mobile window so it reads as a
   floating overlay card, not a second page. Toggled by JS (.sai-backdrop-visible)
   only while the chat is open on mobile; hidden everywhere else. */
.sai-backdrop {
  display: none !important;
}

@media (max-width: 480px) {
  .sai-backdrop {
    display: block !important;
    position: fixed !important;
    inset: 0 !important;
    background: rgba(0,0,0,0.35) !important;
    z-index: 999997 !important;
    opacity: 0 !important;
    pointer-events: none !important;
    transition: opacity 0.2s ease !important;
  }
  .sai-backdrop.sai-backdrop-visible {
    opacity: 1 !important;
    pointer-events: auto !important;
  }
  /* Chat window kept as a floating card (not full-screen) on mobile, anchored
     bottom-right near the toggle button, with extra bottom clearance so it
     never overlaps the toggle button itself. Uses dvh with a vh fallback so
     mobile browser address-bar chrome doesn't inflate the height.
     Width: anchored to the RIGHT only, with a fixed card-like max-width
     (like a native chat widget) instead of stretching edge-to-edge — left
     is only used as a safety cap on very narrow screens so the card never
     overflows off-screen. */
  .sai-window {
    bottom: calc(var(--sai-toggle-size) + 40px) !important;
    right: 12px !important;
    left: auto !important;
    width: min(320px, calc(100vw - 24px)) !important;
    max-width: calc(100vw - 24px) !important;
    height: 38vh !important;
    height: 38dvh !important;
    max-height: 45vh !important;
    max-height: 45dvh !important;
    border-radius: 20px !important;
    box-shadow: 0 24px 60px rgba(0,0,0,0.55), 0 4px 14px rgba(0,0,0,0.35) !important;
    transition: height 0.25s ease, max-height 0.25s ease !important;
  }

  /* Expanded state, toggled by the header expand/minimize button. Only
     meaningful on mobile — this class has no matching rule outside this
     media block, so it's a no-op on desktop. */
  .sai-window.sai-window-expanded {
    height: 72vh !important;
    height: 72dvh !important;
    max-height: 80vh !important;
    max-height: 80dvh !important;
    width: min(380px, calc(100vw - 24px)) !important;
  }

  .sai-expand-btn {
    display: flex !important;
    background: rgba(255,255,255,0.18) !important;
    border: none !important;
    width: 26px !important;
    height: 26px !important;
    border-radius: 50% !important;
    cursor: pointer !important;
    align-items: center !important;
    justify-content: center !important;
  }
  .sai-expand-btn svg { width: 13px !important; height: 13px !important; fill: #fff !important; }
  .sai-expand-btn:hover { background: rgba(255,255,255,0.3) !important; }

  /* Compact header/footer so the shrunk window still shows a few messages
     without the chrome eating too much of the vertical space. Sizes are
     trimmed down further than before, and the actions row is protected
     with flex-shrink:0 + min-width:0 on the title so icons/text never get
     squeezed to invisible when 3 buttons + a title share one row. */
  .sai-header { padding: 6px 10px !important; }
  .sai-header-title {
    font-size: 0.8rem !important;
    gap: 6px !important;
    flex: 1 1 auto !important;
    min-width: 0 !important;
    overflow: hidden !important;
    white-space: nowrap !important;
    text-overflow: ellipsis !important;
  }
  .sai-header-actions { gap: 6px !important; flex-shrink: 0 !important; }
  .sai-wa-header-btn { width: 24px !important; height: 24px !important; flex-shrink: 0 !important; background: rgba(255,255,255,0.18) !important; }
  .sai-wa-header-btn svg { width: 13px !important; height: 13px !important; fill: #fff !important; }
  .sai-expand-btn { width: 24px !important; height: 24px !important; flex-shrink: 0 !important; background: rgba(255,255,255,0.18) !important; }
  .sai-expand-btn svg { width: 12px !important; height: 12px !important; fill: #fff !important; }
  .sai-close-btn { width: 22px !important; height: 22px !important; font-size: 13px !important; flex-shrink: 0 !important; color: #fff !important; }

  .sai-body { padding: 10px !important; gap: 8px !important; position: relative !important; }
  .sai-msg { font-size: 0.83rem !important; padding: 8px 11px !important; max-width: 86% !important; line-height: 1.55 !important; }

  /* Subtle bottom fade to hint there's more to scroll when a long reply
     overflows the shrunk window. Purely visual, no layout impact. */
  .sai-window:not(.sai-window-expanded) .sai-body::after {
    content: '' !important;
    position: sticky !important;
    bottom: 0 !important;
    left: 0 !important;
    right: 0 !important;
    height: 22px !important;
    margin-top: -22px !important;
    display: block !important;
    pointer-events: none !important;
    background: linear-gradient(to bottom, rgba(11,18,32,0), #0b1220) !important;
  }

  .sai-footer { padding: 6px 8px !important; }
  .sai-input { padding: 7px 10px !important; font-size: 0.83rem !important; }
  .sai-send-btn, .sai-mic-btn { width: 34px !important; height: 34px !important; }
  .sai-send-btn svg, .sai-mic-btn svg { width: 15px !important; height: 15px !important; }
  .sai-credit-line { font-size: 0.58rem !important; margin-top: 3px !important; }
}

.sai-header {
  background: linear-gradient(135deg, var(--sai-brand) 0%, var(--sai-brand-dark) 100%) !important;
  color: #fff !important;
  padding: 14px 16px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
}
.sai-header-title { display: flex !important; align-items: center !important; gap: 10px !important; font-weight: 700 !important; font-size: 0.98rem !important; }
.sai-header-actions { display: flex !important; align-items: center !important; gap: 8px !important; }
.sai-wa-header-btn { background: rgba(255,255,255,0.18) !important; border: none !important; width: 30px !important; height: 30px !important; border-radius: 50% !important; cursor: pointer !important; display: flex !important; align-items: center !important; justify-content: center !important; }
.sai-wa-header-btn svg { width: 15px !important; height: 15px !important; fill: #fff !important; }
.sai-wa-header-btn:hover { background: rgba(255,255,255,0.3) !important; }
.sai-header-dot { width: 9px !important; height: 9px !important; border-radius: 50% !important; background: #B6FFCB !important; box-shadow: 0 0 0 0 rgba(182,255,203,0.6) !important; animation: sai-pulse 2s infinite !important; }
@keyframes sai-pulse {
  0% { box-shadow: 0 0 0 0 rgba(182,255,203,0.6); }
  70% { box-shadow: 0 0 0 8px rgba(182,255,203,0); }
  100% { box-shadow: 0 0 0 0 rgba(182,255,203,0); }
}
.sai-close-btn { background: rgba(255,255,255,0.15) !important; border: none !important; color: #fff !important; width: 28px !important; height: 28px !important; border-radius: 50% !important; cursor: pointer !important; font-size: 16px !important; line-height: 1 !important; }

.sai-body {
  flex: 1 !important;
  overflow-y: auto !important;
  padding: 16px !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 10px !important;
  background: radial-gradient(circle at top, #131c30 0%, #0b1220 100%) !important;
}

.sai-msg { max-width: 82% !important; padding: 10px 13px !important; border-radius: 14px !important; font-size: 0.88rem !important; line-height: 1.5 !important; white-space: pre-wrap !important; word-wrap: break-word !important; }
.sai-msg-bot { align-self: flex-start !important; background: rgba(255,255,255,0.06) !important; color: #E5E7EB !important; border-bottom-left-radius: 4px !important; }
.sai-msg-user { align-self: flex-end !important; background: linear-gradient(135deg, var(--sai-brand) 0%, var(--sai-brand-dark) 100%) !important; color: #fff !important; border-bottom-right-radius: 4px !important; }

.sai-typing { align-self: flex-start !important; display: flex !important; gap: 4px !important; padding: 10px 13px !important; }
.sai-typing span { width: 6px !important; height: 6px !important; border-radius: 50% !important; background: #9CA3AF !important; animation: sai-blink 1.2s infinite ease-in-out !important; }
.sai-typing span:nth-child(2) { animation-delay: 0.2s !important; }
.sai-typing span:nth-child(3) { animation-delay: 0.4s !important; }
@keyframes sai-blink { 0%, 80%, 100% { opacity: 0.3; } 40% { opacity: 1; } }

.sai-footer { padding: 12px !important; border-top: 1px solid rgba(255,255,255,0.08) !important; background: #0F172A !important; }

/* Subtle authorship credit — small and low-opacity by design, not meant to
   compete with the client's own branding, but still visible enough to work
   as a quiet marketing signature for reselling this plugin. */
.sai-credit-line {
  display: block !important;
  text-align: center !important;
  margin-top: 8px !important;
  font-size: 0.65rem !important;
  color: rgba(255,255,255,0.28) !important;
  text-decoration: none !important;
  letter-spacing: 0.2px !important;
  transition: color 0.2s ease !important;
}
.sai-credit-line:hover { color: rgba(255,255,255,0.55) !important; }
.sai-input-row { display: flex !important; gap: 8px !important; }
.sai-input {
  flex: 1 !important;
  background: rgba(255,255,255,0.06) !important;
  border: 1px solid rgba(255,255,255,0.1) !important;
  color: #fff !important;
  border-radius: 10px !important;
  padding: 10px 12px !important;
  font-size: 0.88rem !important;
  resize: none !important;
  font-family: inherit !important;
  outline: none !important;
}
.sai-input::placeholder { color: #6B7280 !important; }
.sai-send-btn {
  background: linear-gradient(135deg, var(--sai-brand) 0%, var(--sai-brand-dark) 100%) !important;
  border: none !important;
  border-radius: 10px !important;
  width: 42px !important;
  height: 42px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  cursor: pointer !important;
  flex-shrink: 0 !important;
}
.sai-send-btn svg { width: 18px !important; height: 18px !important; fill: #fff !important; }
.sai-send-btn:disabled { opacity: 0.5 !important; cursor: not-allowed !important; }

/* ---------------- Phase A: Voice ---------------- */
.sai-mic-btn {
  background: rgba(255,255,255,0.06) !important;
  border: 1px solid rgba(255,255,255,0.1) !important;
  border-radius: 10px !important;
  width: 42px !important;
  height: 42px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  cursor: pointer !important;
  flex-shrink: 0 !important;
}
.sai-mic-btn svg { width: 18px !important; height: 18px !important; fill: #fff !important; }
.sai-mic-btn.sai-mic-recording {
  background: linear-gradient(135deg, #ef4444 0%, #b91c1c 100%) !important;
  animation: saiMicPulse 1.2s ease-in-out infinite !important;
}
@keyframes saiMicPulse {
  0% { box-shadow: 0 0 0 0 rgba(239,68,68,0.5); }
  70% { box-shadow: 0 0 0 10px rgba(239,68,68,0); }
  100% { box-shadow: 0 0 0 0 rgba(239,68,68,0); }
}
.sai-voice-row {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 8px !important;
  background: rgba(239,68,68,0.1) !important;
  border: 1px solid rgba(239,68,68,0.35) !important;
  border-radius: 10px !important;
  padding: 8px 10px !important;
  margin-bottom: 8px !important;
  font-size: 0.82rem !important;
}
.sai-voice-timer { color: #fff !important; font-variant-numeric: tabular-nums !important; }
.sai-voice-warning { color: #fca5a5 !important; font-weight: 600 !important; }
.sai-voice-stop-btn {
  background: #ef4444 !important;
  color: #fff !important;
  border: none !important;
  border-radius: 8px !important;
  padding: 6px 10px !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  cursor: pointer !important;
  font-size: 0.8rem !important;
}
.sai-voice-stop-btn svg { width: 12px !important; height: 12px !important; fill: #fff !important; }
.sai-voice-status { opacity: 0.75 !important; font-style: italic !important; }
.sai-voice-retry-actions { display: flex !important; gap: 8px !important; margin: 4px 0 10px !important; flex-wrap: wrap !important; }
.sai-listen-btn {
  display: inline-flex !important;
  align-items: center !important;
  gap: 5px !important;
  margin-top: 6px !important;
  background: rgba(255,255,255,0.08) !important;
  border: 1px solid rgba(255,255,255,0.15) !important;
  color: #fff !important;
  border-radius: 8px !important;
  padding: 4px 9px !important;
  font-size: 0.75rem !important;
  cursor: pointer !important;
}
.sai-listen-btn svg { fill: #fff !important; }
.sai-listen-btn:disabled { opacity: 0.6 !important; cursor: default !important; }
.sai-listen-btn.sai-listen-playing { background: var(--sai-brand) !important; border-color: var(--sai-brand) !important; }

/* Phase B: transcript correction affordance */
.sai-msg-voice-origin::before {
  content: '🎙️ ';
  opacity: 0.7 !important;
}
.sai-correct-transcript-link {
  display: inline-block !important;
  background: none !important;
  border: none !important;
  color: #9CA3AF !important;
  font-size: 0.72rem !important;
  text-decoration: underline !important;
  cursor: pointer !important;
  margin: 2px 0 8px !important;
  padding: 0 !important;
}
.sai-correct-transcript-box {
  background: rgba(255,255,255,0.05) !important;
  border: 1px solid rgba(255,255,255,0.12) !important;
  border-radius: 10px !important;
  padding: 8px 10px !important;
  margin-bottom: 10px !important;
}
.sai-correct-transcript-label { font-size: 0.72rem !important; color: #9CA3AF !important; margin-bottom: 4px !important; }
.sai-correct-transcript-textarea {
  width: 100% !important;
  box-sizing: border-box !important;
  background: rgba(255,255,255,0.06) !important;
  border: 1px solid rgba(255,255,255,0.15) !important;
  color: #fff !important;
  border-radius: 8px !important;
  padding: 8px !important;
  font-size: 0.85rem !important;
  font-family: inherit !important;
  resize: vertical !important;
  margin-bottom: 6px !important;
}
.sai-correct-send-again { font-size: 0.78rem !important; }

/* Generic small action chip — used by voice retry/type-instead (Phase A)
   and Send Again (Phase B). Mirrors .sai-suggested-chip styling so these
   buttons don't render unstyled. */
.sai-chip {
  background: rgba(255,255,255,0.06) !important;
  border: 1px solid rgba(255,255,255,0.15) !important;
  color: #E5E7EB !important;
  border-radius: 999px !important;
  padding: 7px 13px !important;
  font-size: 0.78rem !important;
  cursor: pointer !important;
  font-family: inherit !important;
}
.sai-chip:hover { background: rgba(255,255,255,0.14) !important; border-color: var(--sai-brand) !important; }

.sai-suggested-wrap { display: flex !important; flex-wrap: wrap !important; gap: 8px !important; align-self: flex-start !important; max-width: 100% !important; margin-top: -2px !important; }
.sai-suggested-chip {
  background: rgba(255,255,255,0.06) !important;
  border: 1px solid rgba(255,255,255,0.15) !important;
  color: #E5E7EB !important;
  border-radius: 999px !important;
  padding: 7px 13px !important;
  font-size: 0.78rem !important;
  cursor: pointer !important;
  transition: background 0.15s ease, border-color 0.15s ease !important;
  font-family: inherit !important;
}
.sai-suggested-chip:hover { background: rgba(255,255,255,0.14) !important; border-color: var(--sai-brand) !important; }

.sai-wa-fallback {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  margin-top: 6px !important;
  font-size: 0.8rem !important;
  color: var(--sai-brand) !important;
  text-decoration: none !important;
  font-weight: 600 !important;
}
.sai-wa-fallback:hover { text-decoration: underline !important; }

/* Rich pricing/package cards */
.sai-cards-wrap { display: flex !important; flex-direction: column !important; gap: 8px !important; align-self: flex-start !important; max-width: 90% !important; }
.sai-pkg-card {
  background: linear-gradient(145deg, rgba(var(--sai-brand-rgb, 37,211,102),0.08) 0%, rgba(255,255,255,0.04) 100%) !important;
  border: 1px solid rgba(var(--sai-brand-rgb, 37,211,102),0.25) !important;
  border-radius: 12px !important;
  padding: 12px 14px !important;
}
.sai-pkg-title { color: #fff !important; font-weight: 700 !important; font-size: 0.9rem !important; margin-bottom: 4px !important; }
.sai-pkg-desc { color: #9CA3AF !important; font-size: 0.8rem !important; line-height: 1.4 !important; margin-bottom: 6px !important; }
.sai-pkg-price { color: var(--sai-brand) !important; font-weight: 700 !important; font-size: 0.88rem !important; }

/* Conversation rating */
.sai-rating-row {
  align-self: center !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  background: rgba(255,255,255,0.05) !important;
  border-radius: 20px !important;
  padding: 6px 14px !important;
  margin: 4px 0 !important;
}
.sai-rating-label { color: #9CA3AF !important; font-size: 0.75rem !important; }
.sai-rating-btn { background: none !important; border: none !important; cursor: pointer !important; font-size: 1rem !important; padding: 2px 4px !important; border-radius: 6px !important; transition: transform 0.15s ease !important; }
.sai-rating-btn:hover { transform: scale(1.2) !important; }

/* ---------------- Proactive Nudge bubble ---------------- */
.sai-nudge-bubble {
  position: fixed !important;
  bottom: calc(var(--sai-toggle-size) + 105px) !important;
  right: 25px !important;
  max-width: 240px !important;
  background: #fff !important;
  color: #0F172A !important;
  padding: 12px 34px 12px 14px !important;
  border-radius: 14px 14px 4px 14px !important;
  box-shadow: 0 8px 25px rgba(0,0,0,0.25) !important;
  font-size: 0.85rem !important;
  line-height: 1.4 !important;
  cursor: pointer !important;
  z-index: 999997 !important;
  opacity: 0 !important;
  transform: translateY(8px) !important;
  transition: opacity 0.3s ease, transform 0.3s ease !important;
}
.sai-nudge-bubble.sai-nudge-visible { opacity: 1 !important; transform: translateY(0) !important; }
.sai-nudge-close {
  position: absolute !important;
  top: 4px !important;
  right: 8px !important;
  font-size: 1rem !important;
  color: #94A3B8 !important;
  cursor: pointer !important;
}
@media (max-width: 768px) {
  .sai-nudge-bubble { bottom: calc(var(--sai-toggle-size) + 90px) !important; right: 18px !important; }
}

/* ---------------- FAQ teaser popup beside the floating button ----------------
 * A stack of >=3 quick-question bubbles that appears a few seconds after
 * load (admin-configurable delay), separate from the single proactive
 * nudge line above. Clicking a bubble opens the chat AND immediately shows
 * that FAQ's saved answer — no extra typing or AI round-trip needed. */
.sai-faq-popup-wrap {
  position: fixed !important;
  bottom: calc(var(--sai-toggle-size) + 105px) !important;
  right: 25px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: flex-end !important;
  gap: 8px !important;
  max-width: 260px !important;
  z-index: 999997 !important;
}
.sai-faq-popup-header {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  align-self: flex-end !important;
  margin-bottom: 2px !important;
}
.sai-faq-popup-close {
  background: #fff !important;
  color: #64748B !important;
  border: none !important;
  border-radius: 50% !important;
  width: 22px !important;
  height: 22px !important;
  line-height: 22px !important;
  text-align: center !important;
  font-size: 0.9rem !important;
  cursor: pointer !important;
  box-shadow: 0 4px 12px rgba(0,0,0,0.2) !important;
}
.sai-faq-popup-item {
  background: #fff !important;
  color: #0F172A !important;
  padding: 10px 14px !important;
  border-radius: 14px 14px 4px 14px !important;
  box-shadow: 0 8px 20px rgba(0,0,0,0.22) !important;
  font-size: 0.82rem !important;
  line-height: 1.35 !important;
  cursor: pointer !important;
  border: none !important;
  text-align: right !important;
  opacity: 0 !important;
  transform: translateY(8px) !important;
  transition: opacity 0.25s ease, transform 0.25s ease, background 0.15s ease !important;
}
.sai-faq-popup-item:hover { background: #F1F5F9 !important; }
.sai-faq-popup-item.sai-faq-popup-visible { opacity: 1 !important; transform: translateY(0) !important; }

@media (max-width: 768px) {
  .sai-faq-popup-wrap { bottom: calc(var(--sai-toggle-size) + 90px) !important; right: 18px !important; max-width: 70vw !important; }
}

/* ---------------- Read receipt status line ---------------- */
.sai-status-line {
  align-self: flex-start !important;
  color: #94A3B8 !important;
  font-size: 0.75rem !important;
  font-style: italic !important;
  padding: 2px 4px !important;
}

/* ---------------- Typing preview auto-suggest ---------------- */
.sai-typing-suggest {
  position: absolute !important;
  bottom: 100% !important;
  left: 12px !important;
  right: 12px !important;
  background: #1a2436 !important;
  border: 1px solid rgba(255,255,255,0.1) !important;
  border-radius: 8px !important;
  overflow: hidden !important;
  margin-bottom: 6px !important;
  z-index: 5 !important;
}
.sai-footer { position: relative !important; }
.sai-typing-suggest:empty { display: none !important; }
.sai-typing-suggest-item {
  padding: 8px 12px !important;
  font-size: 0.82rem !important;
  color: #E5E7EB !important;
  cursor: pointer !important;
  border-bottom: 1px solid rgba(255,255,255,0.06) !important;
}
.sai-typing-suggest-item:last-child { border-bottom: none !important; }
.sai-typing-suggest-item:hover { background: rgba(255,255,255,0.08) !important; }

/* ------------------------------------------------------------------ */
/* 1.5.0 reliability fixes: heartbeat, retry chip, error wrap          */
/* ------------------------------------------------------------------ */

/* "Still thinking" heartbeat — appears after 15s of waiting, never part of history */
.sai-heartbeat {
  padding: 10px 14px !important;
  margin: 4px 10px 8px 0 !important;
  max-width: 85% !important;
  background: rgba(255,255,255,0.06) !important;
  border: 1px dashed rgba(255,255,255,0.25) !important;
  border-radius: 12px !important;
  color: rgba(255,255,255,0.65) !important;
  font-size: 12.5px !important;
  line-height: 1.5 !important;
  animation: sai-heartbeat-pulse 2.2s ease-in-out infinite !important;
}
/* BUG FIX: this previously reused the name "sai-pulse", which the header's
   online-status dot (see @keyframes sai-pulse near the top of this file)
   also uses. Two @keyframes rules with the same name silently overwrite
   each other in CSS (the one that appears LAST in the stylesheet wins for
   BOTH usages) — so the header dot's intended box-shadow "ping" animation
   was being replaced by this later opacity-fade animation instead. Renamed
   so each animation keeps its own correct definition. */
@keyframes sai-heartbeat-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}

/* Error block with retry chip + WhatsApp shortcut */
.sai-error-wrap {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 6px 10px 10px 0 !important;
}

.sai-retry-btn {
  background: linear-gradient(135deg, var(--sai-brand) 0%, var(--sai-brand-dark) 100%) !important;
  color: #fff !important;
  border: none !important;
  border-radius: 999px !important;
  padding: 8px 16px !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  cursor: pointer !important;
  box-shadow: 0 4px 12px rgba(var(--sai-brand-rgb, 37,211,102),0.35) !important;
  transition: transform 0.2s ease !important;
}
.sai-retry-btn:hover { transform: scale(1.05) !important; }

.sai-wa-fallback-inline {
  color: rgba(255,255,255,0.7) !important;
  font-size: 12.5px !important;
  text-decoration: underline !important;
  cursor: pointer !important;
}
.sai-wa-fallback-inline:hover { color: #fff !important; }

/* Rendered markdown inside bot replies (**bold**, *italic*, line breaks) */
.sai-msg-bot strong { font-weight: 700 !important; color: #fff !important; }
.sai-msg-bot em { font-style: italic !important; opacity: 0.92 !important; }
.sai-msg-bot br { line-height: 1.4 !important; }
