/**
 * BSPE Connect — frontend bar + welcome bubble.
 *
 * Mobile-only widget. Visibility above the configured breakpoint is killed
 * by an inline media query printed in wp_head (see Frontend::print_inline_css_vars).
 *
 * Color custom properties are also set inline from settings; the values
 * below are the brand defaults used in case the inline styles fail to load.
 */

.bspe-connect {
	--bspe-bar-bg: #351E28;
	--bspe-button-bg: #351E28;
	--bspe-button-fg: #FAF7F2;
	--bspe-bubble-bg: #FAF7F2;
	--bspe-bubble-fg: #351E28;
	--bspe-accent: #3AAFB9;
	--bspe-bar-h: 52px;
	--bspe-icon-size: 16px;
	--bspe-label-size: 12px;
	--bspe-label-weight: 500;
	--bspe-label-transform: uppercase;
	--bspe-button-padding-top: 6px;
	--bspe-button-padding-right: 4px;
	--bspe-button-padding-bottom: 6px;
	--bspe-button-padding-left: 4px;
	--bspe-icon-label-gap: 2px;
	--bspe-ease: cubic-bezier(0.16, 1, 0.3, 1);
	--bspe-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;

	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	/* Sit above third-party bottom-corner widgets (live chat, accessibility
	   toolbars) so our welcome bubble + bar are never buried under them.
	   UserWay squats at the 32-bit max (2147483647), so we match it and let
	   DOM order break the tie — the frontend JS re-appends this root as the
	   last <body> child so we win. This is the root stacking context; the
	   bubble / modal keep their own smaller z-index for internal ordering. */
	z-index: 2147483647;
	pointer-events: none;
	font-family: var(--bspe-font-family);
}

/* Anti-flash reveal. An inline `#bspe-connect { visibility: hidden }` rule
   in wp_head keeps the raw markup invisible while an optimization plugin
   (NitroPack etc.) defers this stylesheet — otherwise the bar flashes as
   unstyled stacked links with unloaded icon-font tofu. This selector is
   deliberately one class MORE specific (1,1,0 beats the inline head rule's
   1,0,0) so the reveal wins no matter what order the optimizer injects
   styles in. Once this sheet is live the bar is fixed + translated
   off-screen until the show-delay, so the reveal itself never flashes. */
#bspe-connect.bspe-connect {
	visibility: visible;
}

.bspe-connect *,
.bspe-connect *::before,
.bspe-connect *::after {
	box-sizing: border-box;
}

/* ---------------------------------------------------------------------- */
/*  Bar                                                                    */
/* ---------------------------------------------------------------------- */
.bspe-connect__bar {
	display: flex;
	align-items: stretch;
	min-height: var(--bspe-bar-h);
	background: var(--bspe-bar-bg);
	pointer-events: auto;
	transform: translateY(110%);
	transition: transform 280ms var(--bspe-ease);
	will-change: transform;
	box-shadow: 0 -8px 24px -16px rgba(0, 0, 0, 0.28);
	padding-bottom: env(safe-area-inset-bottom, 0px);
}

.bspe-connect__bar[data-bspe-state="visible"] {
	transform: translateY(0);
}

/* ---------------------------------------------------------------------- */
/*  Buttons                                                                */
/* ---------------------------------------------------------------------- */
/*
 * NOTE: every <button>-targeting rule below is prefixed with #bspe-connect
 * (the wrapper's own id) so its specificity (1,1,0+) beats descendant
 * rules from page builders / themes — most notably Elementor's
 * `.elementor-kit-XXXX button { ... }` (specificity 0,1,1) which would
 * otherwise color the bar's <button> elements with the active kit's
 * fill instead of our brand plum / teal.
 */
#bspe-connect .bspe-connect__btn {
	flex: 1 1 0;
	min-width: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: var(--bspe-icon-label-gap, 2px);
	padding:
		var(--bspe-button-padding-top, 6px)
		var(--bspe-button-padding-right, 4px)
		var(--bspe-button-padding-bottom, 6px)
		var(--bspe-button-padding-left, 4px);
	background: var(--bspe-button-bg);
	color: var(--bspe-button-fg);
	border: 0;
	border-right: 1px solid rgba(250, 247, 242, 0.06);
	border-radius: 0;
	font: inherit;
	font-size: var(--bspe-label-size, 12px);
	font-weight: var(--bspe-label-weight, 500);
	letter-spacing: 0.02em;
	line-height: 1.2;
	text-align: center;
	text-decoration: none;
	text-transform: var(--bspe-label-transform, uppercase);
	cursor: pointer;
	margin: 0;
	-webkit-tap-highlight-color: transparent;
	-webkit-appearance: none;
	        appearance: none;
	transition: background 0.18s var(--bspe-ease), transform 0.12s var(--bspe-ease);
	position: relative;
	overflow: visible;
	width: auto;
	height: auto;
}

#bspe-connect .bspe-connect__btn:last-child {
	border-right: 0;
}

#bspe-connect .bspe-connect__btn:hover,
#bspe-connect .bspe-connect__btn:focus-visible {
	background: color-mix(in srgb, var(--bspe-button-bg) 88%, white);
	color: var(--bspe-button-fg);
	outline: none;
}

/* Fallback for browsers without color-mix (Safari < 16.2): keep the base bg. */
@supports not (background: color-mix(in srgb, red, blue)) {
	#bspe-connect .bspe-connect__btn:hover,
	#bspe-connect .bspe-connect__btn:focus-visible {
		background: var(--bspe-button-bg);
		color: var(--bspe-button-fg);
		opacity: 0.92;
	}
}

#bspe-connect .bspe-connect__btn:focus-visible {
	box-shadow: inset 0 0 0 2px var(--bspe-accent);
}

#bspe-connect .bspe-connect__btn:active {
	transform: scale(0.97);
	background: color-mix(in srgb, var(--bspe-button-bg) 80%, white);
}

/* Connect = primary CTA. Brand-defined Pop / CTA color, with a small
   right-pointing chevron that extends slightly past the right edge to
   suggest "tap me, then tap one of the next ones" hierarchy. */
#bspe-connect .bspe-connect__btn--connect {
	background: var(--bspe-accent);
	color: var(--bspe-button-fg);
	border-right: 0;
	z-index: 2;
}

#bspe-connect .bspe-connect__btn--connect::after {
	content: "";
	position: absolute;
	left: 100%;
	top: 0;
	bottom: 0;
	width: 12px;
	background: var(--bspe-accent);
	clip-path: polygon(0 0, 100% 50%, 0 100%);
	pointer-events: none;
	transition: background 0.18s var(--bspe-ease);
}

#bspe-connect .bspe-connect__btn--connect:hover::after,
#bspe-connect .bspe-connect__btn--connect:focus-visible::after {
	background: color-mix(in srgb, var(--bspe-accent) 90%, black);
}

@supports not (background: color-mix(in srgb, red, blue)) {
	#bspe-connect .bspe-connect__btn--connect:hover::after,
	#bspe-connect .bspe-connect__btn--connect:focus-visible::after {
		background: var(--bspe-accent);
		opacity: 0.92;
	}
}

#bspe-connect .bspe-connect__btn--connect:hover,
#bspe-connect .bspe-connect__btn--connect:focus-visible {
	background: color-mix(in srgb, var(--bspe-accent) 90%, black);
	color: var(--bspe-button-fg);
}

@supports not (background: color-mix(in srgb, red, blue)) {
	#bspe-connect .bspe-connect__btn--connect:hover,
	#bspe-connect .bspe-connect__btn--connect:focus-visible {
		background: var(--bspe-accent);
		color: var(--bspe-button-fg);
		opacity: 0.92;
	}
}

#bspe-connect .bspe-connect__btn--connect:active {
	background: var(--bspe-accent);
}

#bspe-connect .bspe-connect__icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(var(--bspe-icon-size, 16px) + 4px);
	height: calc(var(--bspe-icon-size, 16px) + 4px);
	color: inherit;
}

/* Brand SVG via mask-image so the active button_fg color themes it. */
#bspe-connect .bspe-connect__icon-svg {
	display: block;
	width: var(--bspe-icon-size, 16px);
	height: var(--bspe-icon-size, 16px);
	background: currentColor;
	-webkit-mask-image: var(--bspe-icon-url);
	        mask-image: var(--bspe-icon-url);
	-webkit-mask-size: contain;
	        mask-size: contain;
	-webkit-mask-position: center;
	        mask-position: center;
	-webkit-mask-repeat: no-repeat;
	        mask-repeat: no-repeat;
}

/* Font Awesome / Dripicons render as <i class="fa-..."> / <i class="dripicons-..."> */
#bspe-connect .bspe-connect__icon-fa,
#bspe-connect .bspe-connect__icon-drip {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: var(--bspe-icon-size, 16px);
	line-height: 1;
	color: inherit;
}

/* Ionicons web component */
#bspe-connect .bspe-connect__icon-ion {
	display: inline-flex;
	font-size: var(--bspe-icon-size, 16px);
	width: var(--bspe-icon-size, 16px);
	height: var(--bspe-icon-size, 16px);
	color: inherit;
}

/* User-uploaded Connect avatar: keep full color, circular crop. */
#bspe-connect .bspe-connect__icon-img {
	width: calc(var(--bspe-icon-size, 16px) + 6px);
	height: calc(var(--bspe-icon-size, 16px) + 6px);
	border-radius: 50%;
	object-fit: cover;
	display: block;
}

#bspe-connect .bspe-connect__btn .bspe-connect__label {
	color: inherit;
	font-size: var(--bspe-label-size, 12px);
	max-width: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* ---------------------------------------------------------------------- */
/*  Welcome bubble                                                         */
/* ---------------------------------------------------------------------- */
.bspe-connect__bubble {
	position: fixed;
	left: 8px;
	right: 8px;
	bottom: calc(var(--bspe-bar-h) + 12px + env(safe-area-inset-bottom, 0px));
	z-index: 9999;
	background: var(--bspe-bubble-bg);
	color: var(--bspe-bubble-fg);
	border-radius: 16px;
	box-shadow: 0 18px 40px -16px rgba(13, 27, 42, 0.42), 0 4px 10px -4px rgba(13, 27, 42, 0.18);
	pointer-events: auto;
	opacity: 0;
	transform: translateY(8px);
	transition: opacity 220ms var(--bspe-ease), transform 220ms var(--bspe-ease);
	will-change: opacity, transform;
	overflow: visible;
}

.bspe-connect__bubble[data-bspe-state="visible"] {
	opacity: 1;
	transform: translateY(0);
}

/* Triangle pointer pointing to Connect button on the bar. */
.bspe-connect__bubble::after {
	content: "";
	position: absolute;
	bottom: -7px;
	left: var(--bspe-pointer-pos, 50%);
	transform: translateX(-50%) rotate(45deg);
	width: 14px;
	height: 14px;
	background: var(--bspe-bubble-bg);
	border-radius: 2px;
	box-shadow: 4px 4px 6px -4px rgba(13, 27, 42, 0.18);
}

.bspe-connect__bubble-inner {
	display: grid;
	grid-template-columns: auto 1fr;
	align-items: center;
	gap: 12px;
	padding: 14px 40px 14px 16px;
}

.bspe-connect__bubble-inner > .bspe-connect__bubble-body {
	min-width: 0;
}

.bspe-connect__bubble-avatar {
	width: 40px;
	height: 40px;
	border-radius: 50%;
	overflow: hidden;
	background: rgba(53, 30, 40, 0.06);
	flex-shrink: 0;
}

/* <img> element — theme `.elementor-kit-N img` rules sit at the same
   (0,1,1) specificity and could win on source order. #bspe-connect
   prefix lifts this to (1,1,1) so the avatar sizing always holds. */
#bspe-connect .bspe-connect__bubble-avatar img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

/* These text nodes are <p> elements. Page-builder themes (Elementor,
   especially) ship rules like `.elementor-kit-N p { margin-block-end:
   16px }` at specificity (0,1,1), which outweighs a bare
   `.bspe-connect__bubble-heading` (0,1,0) and injects unwanted
   spacing. Prefixing with the `#bspe-connect` ID lifts every one of
   these to (1,1,0) so the plugin's own margins always win. */
#bspe-connect .bspe-connect__bubble-heading {
	margin: 0 0 2px;
	font-size: 14px;
	font-weight: 700;
	line-height: 1.25;
	color: var(--bspe-bubble-fg);
	letter-spacing: -0.005em;
}

#bspe-connect .bspe-connect__bubble-message {
	margin: 0;
	font-size: 13px;
	font-weight: 400;
	line-height: 1.4;
	color: var(--bspe-bubble-fg);
	opacity: 0.85;
}

#bspe-connect .bspe-connect__bubble-close {
	position: absolute;
	top: 6px;
	right: 6px;
	flex-shrink: 0;
	width: 30px;
	height: 30px;
	padding: 0;
	margin: 0;
	border-radius: 50%;
	border: 0;
	background: transparent;
	color: var(--bspe-bubble-fg);
	cursor: pointer;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	-webkit-tap-highlight-color: transparent;
	-webkit-appearance: none;
	        appearance: none;
	font: inherit;
	text-transform: none;
	transition: background 0.18s var(--bspe-ease), transform 0.12s var(--bspe-ease);
	opacity: 0.65;
	z-index: 2;
}

#bspe-connect .bspe-connect__bubble-close svg {
	display: block;
	width: 14px;
	height: 14px;
	color: inherit;
}

#bspe-connect .bspe-connect__bubble-close:hover,
#bspe-connect .bspe-connect__bubble-close:focus-visible {
	background: rgba(53, 30, 40, 0.08);
	color: var(--bspe-bubble-fg);
	opacity: 1;
	outline: none;
}

#bspe-connect .bspe-connect__bubble-close:focus-visible {
	box-shadow: 0 0 0 2px var(--bspe-accent);
}

#bspe-connect .bspe-connect__bubble-close:active {
	transform: scale(0.92);
}

/* ---------------------------------------------------------------------- */
/*  Form modal (bottom sheet)                                              */
/* ---------------------------------------------------------------------- */
.bspe-connect__modal {
	position: fixed;
	inset: 0;
	z-index: 10000;
	pointer-events: none;
}

.bspe-connect__modal[data-bspe-state="visible"] {
	pointer-events: auto;
}

.bspe-connect__modal-backdrop {
	position: absolute;
	inset: 0;
	background: rgba(13, 27, 42, 0.55);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
	opacity: 0;
	transition: opacity 200ms var(--bspe-ease);
}

.bspe-connect__modal[data-bspe-state="visible"] .bspe-connect__modal-backdrop {
	opacity: 1;
}

.bspe-connect__modal-sheet {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 1;
	background: var(--bspe-bubble-bg);
	color: var(--bspe-bubble-fg);
	border-top-left-radius: 18px;
	border-top-right-radius: 18px;
	max-height: 85vh;
	display: flex;
	flex-direction: column;
	transform: translateY(100%);
	transition: transform 240ms var(--bspe-ease);
	will-change: transform;
	box-shadow: 0 -16px 40px -16px rgba(13, 27, 42, 0.32);
	padding-bottom: env(safe-area-inset-bottom, 0px);
}

.bspe-connect__modal[data-bspe-state="visible"] .bspe-connect__modal-sheet {
	transform: translateY(0);
}

.bspe-connect__modal-handle {
	width: 36px;
	height: 4px;
	border-radius: 2px;
	background: rgba(53, 30, 40, 0.18);
	margin: 10px auto 0;
	flex-shrink: 0;
}

.bspe-connect__modal-header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 12px 18px 8px;
	flex-shrink: 0;
}

/* modal-heading is an <h2>, modal-subheading is a <p> — both get the
   #bspe-connect prefix so theme `h2` / `p` rules can't override the
   plugin's spacing (see the bubble-heading note above). */
#bspe-connect .bspe-connect__modal-heading {
	margin: 0;
	font-size: 18px;
	font-weight: 700;
	color: var(--bspe-bubble-fg);
	letter-spacing: -0.01em;
	line-height: 1.25;
}

#bspe-connect .bspe-connect__modal-subheading {
	margin: 4px 0 0;
	font-size: 13px;
	font-weight: 400;
	color: var(--bspe-bubble-fg);
	opacity: 0.7;
	line-height: 1.45;
}

#bspe-connect .bspe-connect__modal-close {
	flex-shrink: 0;
	width: 36px;
	height: 36px;
	padding: 0;
	border-radius: 50%;
	border: 0;
	background: rgba(53, 30, 40, 0.05);
	color: var(--bspe-bubble-fg);
	cursor: pointer;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	-webkit-tap-highlight-color: transparent;
	-webkit-appearance: none;
	        appearance: none;
	font: inherit;
	text-transform: none;
	transition: background 0.18s var(--bspe-ease), transform 0.12s var(--bspe-ease);
	margin-right: -6px;
}

#bspe-connect .bspe-connect__modal-close svg {
	display: block;
	width: 14px;
	height: 14px;
}

#bspe-connect .bspe-connect__modal-close:hover,
#bspe-connect .bspe-connect__modal-close:focus-visible {
	background: rgba(53, 30, 40, 0.1);
	color: var(--bspe-bubble-fg);
	outline: none;
}

#bspe-connect .bspe-connect__modal-close:focus-visible {
	box-shadow: 0 0 0 2px var(--bspe-accent);
}

#bspe-connect .bspe-connect__modal-close:active {
	transform: scale(0.92);
}

.bspe-connect__modal-body {
	flex: 1 1 auto;
	overflow-y: auto;
	-webkit-overflow-scrolling: touch;
	padding: 4px 18px 22px;
}

/* ---------------------------------------------------------------------- */
/*  Form fields                                                            */
/* ---------------------------------------------------------------------- */
/* <form> element — theme `.elementor-kit-N form` rules (margin /
   padding) would otherwise displace the modal's layout. #bspe-connect
   prefix wins the cascade. */
#bspe-connect .bspe-connect__form {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.bspe-connect__field {
	display: flex;
	flex-direction: column;
	gap: 4px;
}

/* Form-field labels are visually hidden but still announced to screen
   readers for accessibility — placeholders carry the visible label.
   Scoped to .bspe-connect__form so this DOES NOT clobber the bar
   button labels (which share the same .bspe-connect__label class). */
.bspe-connect__form .bspe-connect__label {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

.bspe-connect__required {
	color: var(--bspe-accent);
}

#bspe-connect .bspe-connect__input {
	width: 100%;
	min-height: 46px;
	padding: 12px 14px;
	border: 1px solid rgba(53, 30, 40, 0.15);
	border-radius: 10px;
	background: #fff;
	color: var(--bspe-bubble-fg);
	font: inherit;
	font-size: 15px;
	line-height: 1.4;
	transition: border-color 0.18s var(--bspe-ease), box-shadow 0.18s var(--bspe-ease);
	-webkit-appearance: none;
	        appearance: none;
}

#bspe-connect .bspe-connect__input:hover {
	border-color: rgba(53, 30, 40, 0.28);
}

#bspe-connect .bspe-connect__input:focus,
#bspe-connect .bspe-connect__input:focus-visible {
	border-color: var(--bspe-accent);
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--bspe-accent) 22%, transparent);
	outline: none;
}

#bspe-connect .bspe-connect__input[aria-invalid="true"] {
	border-color: #c0392b;
	box-shadow: 0 0 0 3px rgba(192, 57, 43, 0.18);
}

#bspe-connect .bspe-connect__input::placeholder {
	color: rgba(53, 30, 40, 0.42);
	opacity: 1;
	font-size: 15px;
}

#bspe-connect .bspe-connect__input::-webkit-input-placeholder {
	color: rgba(53, 30, 40, 0.42);
}

#bspe-connect .bspe-connect__input::-moz-placeholder {
	color: rgba(53, 30, 40, 0.42);
	opacity: 1;
}

#bspe-connect .bspe-connect__textarea {
	min-height: 96px;
	padding: 12px 14px;
	resize: vertical;
	font-family: inherit;
	line-height: 1.5;
}

#bspe-connect .bspe-connect__select {
	background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' stroke='%23351E28' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/></svg>");
	background-position: right 14px center;
	background-repeat: no-repeat;
	background-size: 12px 8px;
	padding-right: 38px;
}

#bspe-connect-phone {
	font-variant-numeric: tabular-nums;
	letter-spacing: 0.02em;
}

/* Both error nodes are <p> elements — #bspe-connect prefix keeps
   theme `p` margins from displacing them. */
#bspe-connect .bspe-connect__field-error {
	margin: 0;
	font-size: 12.5px;
	color: #c0392b;
	line-height: 1.35;
}

#bspe-connect .bspe-connect__form-error {
	margin: 0;
	padding: 10px 12px;
	border-radius: 8px;
	background: rgba(192, 57, 43, 0.08);
	border: 1px solid rgba(192, 57, 43, 0.2);
	color: #a83327;
	font-size: 13px;
	line-height: 1.4;
}

/* Honeypot — visually hidden but stays in the tab order trap for bots. */
.bspe-connect__honeypot {
	position: absolute;
	left: -10000px;
	top: -10000px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

/* ---------------------------------------------------------------------- */
/*  Submit button                                                          */
/* ---------------------------------------------------------------------- */
#bspe-connect .bspe-connect__submit {
	position: relative;
	width: 100%;
	min-height: 50px;
	padding: 14px 18px;
	border: 0;
	border-radius: 12px;
	background: var(--bspe-accent);
	color: var(--bspe-button-fg);
	font: inherit;
	font-size: 15px;
	font-weight: 600;
	letter-spacing: 0.005em;
	text-transform: none;
	cursor: pointer;
	-webkit-tap-highlight-color: transparent;
	-webkit-appearance: none;
	        appearance: none;
	transition: background 0.18s var(--bspe-ease), transform 0.12s var(--bspe-ease), box-shadow 0.2s var(--bspe-ease);
	margin-top: 4px;
	box-shadow: 0 4px 12px -4px color-mix(in srgb, var(--bspe-accent) 60%, transparent);
}

#bspe-connect .bspe-connect__submit:hover {
	background: color-mix(in srgb, var(--bspe-accent) 88%, black);
	color: var(--bspe-button-fg);
}

#bspe-connect .bspe-connect__submit:active {
	transform: scale(0.985) translateY(1px);
}

#bspe-connect .bspe-connect__submit:focus-visible {
	outline: none;
	box-shadow:
		0 4px 12px -4px color-mix(in srgb, var(--bspe-accent) 60%, transparent),
		0 0 0 3px color-mix(in srgb, var(--bspe-accent) 35%, transparent);
}

#bspe-connect .bspe-connect__submit:disabled,
#bspe-connect .bspe-connect__submit[aria-busy="true"] {
	cursor: progress;
	opacity: 0.85;
}

.bspe-connect__submit-spinner {
	display: inline-block;
	width: 16px;
	height: 16px;
	margin-left: 8px;
	border-radius: 50%;
	border: 2px solid color-mix(in srgb, var(--bspe-button-fg) 35%, transparent);
	border-top-color: var(--bspe-button-fg);
	vertical-align: -3px;
	animation: bspe-spin 0.7s linear infinite;
	visibility: hidden;
}

.bspe-connect__submit[aria-busy="true"] .bspe-connect__submit-spinner {
	visibility: visible;
}

@keyframes bspe-spin {
	to { transform: rotate(360deg); }
}

.bspe-connect__turnstile {
	display: flex;
	justify-content: flex-start;
	margin-top: 4px;
	overflow-x: auto;
}

/* Make Cloudflare's iframe widget align to the form's left edge and grow
   to fill the container instead of sitting awkwardly centered. */
.bspe-connect__turnstile .cf-turnstile {
	width: 100%;
}

.bspe-connect__turnstile iframe {
	max-width: 100%;
}

/* ---------------------------------------------------------------------- */
/*  Success state                                                          */
/* ---------------------------------------------------------------------- */
.bspe-connect__success-inner {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 14px;
	padding: 28px 18px 36px;
	color: var(--bspe-bubble-fg);
}

.bspe-connect__success-icon {
	width: 64px;
	height: 64px;
	color: var(--bspe-accent);
	display: flex;
	align-items: center;
	justify-content: center;
}

.bspe-connect__success-icon svg {
	width: 100%;
	height: 100%;
}

.bspe-connect__success-ring {
	transform-origin: center;
	transform: rotate(-90deg);
	transition: stroke-dashoffset 600ms var(--bspe-ease);
}

.bspe-connect__success-check {
	stroke-dasharray: 36;
	stroke-dashoffset: 36;
	transition: stroke-dashoffset 320ms 220ms var(--bspe-ease);
}

.bspe-connect__success.is-revealed .bspe-connect__success-ring {
	stroke-dashoffset: 138;
}

.bspe-connect__success.is-revealed .bspe-connect__success-check {
	stroke-dashoffset: 0;
}

/* <p> element — #bspe-connect prefix per the note above. */
#bspe-connect .bspe-connect__success-message {
	margin: 0;
	font-size: 16px;
	font-weight: 500;
	line-height: 1.5;
	max-width: 36ch;
}

/* When the form has succeeded, hide the form and show the success state. */
.bspe-connect__modal[data-bspe-form-state="success"] .bspe-connect__form {
	display: none;
}

.bspe-connect__modal[data-bspe-form-state="success"] .bspe-connect__success {
	display: block;
}

/* ---------------------------------------------------------------------- */
/*  Reduced motion                                                         */
/* ---------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
	.bspe-connect__bar,
	.bspe-connect__bubble,
	.bspe-connect__btn,
	.bspe-connect__bubble-close,
	.bspe-connect__modal-backdrop,
	.bspe-connect__modal-sheet,
	.bspe-connect__modal-close,
	.bspe-connect__submit,
	.bspe-connect__success-ring,
	.bspe-connect__success-check {
		transition: none !important;
	}
	.bspe-connect__submit-spinner {
		animation: none !important;
	}
}
