/* Shoppable Video for WooCommerce — frontend styles */

/* Defined on :root (not just .svp-feed) because the shared product modal
 * (#svp-modal-overlay) is printed once in the footer as a sibling of the
 * feed containers, not nested inside them — a variable scoped only to
 * .svp-feed would not cascade into it. */
:root {
	--svp-accent: #1e6b52;
	--svp-radius: 12px;
}

/* Optional heading/subheading printed above the feed by
 * SVP_Shortcode::render_heading_block() — only appears when the shortcode
 * attribute / Elementor field / Gutenberg attribute is actually filled in,
 * so this never changes the layout of existing feeds. Elementor's Style
 * tab "Heading" section overrides color/size/alignment directly via
 * higher-specificity inline selectors; the shortcode and Gutenberg block
 * just use these defaults. */
.svp-feed-heading-wrap {
	margin: 0 0 16px;
}
.svp-feed-heading {
	margin: 0 0 4px;
	font-size: 22px;
	font-weight: 700;
	line-height: 1.25;
	color: #1e1e1e;
}
.svp-feed-subheading {
	margin: 0;
	font-size: 14px;
	line-height: 1.4;
	color: #6b6b6b;
}

.svp-feed {
	margin: 24px 0 !important;
	box-sizing: border-box !important;
}
.svp-feed *,
.svp-feed *::before,
.svp-feed *::after {
	box-sizing: border-box !important;
}

/* Elementor's newer flexbox "Container" layout (.e-con) sets every
 * .elementor-widget-container inside a row to height:100%, so it matches
 * the tallest sibling widget in that row — useful for equal-height text/
 * image columns, but it fights our 9:16 video cards' own aspect-ratio
 * sizing: a flex item with the browser default align-items:stretch is
 * forced to fill that inflated height instead of sizing from its own
 * content, so the video wrap ends up taller than the video itself. The
 * extra space shows the wrap's own placeholder background (#111) as a
 * solid dark bar under the video, with the hotspot button appearing to
 * float in that dead space instead of sitting on the video. Found on a
 * client site testing the plugin on a WoodMart theme page built with
 * Elementor Containers, but the cause is Elementor's container flex
 * behavior, not anything WoodMart-specific — this can happen on any theme
 * once a video card widget shares a Container row with something taller.
 * Pinning height back to auto and opting our own elements out of the
 * stretch (align-self: flex-start) up and down the chain fixes it
 * regardless of theme. */
.elementor-widget-container:has( > .svp-feed ) {
	height: auto !important;
}
.svp-feed,
.svp-feed-carousel,
.svp-carousel-viewport,
.svp-feed-carousel .svp-carousel-track,
.svp-feed-inline,
.svp-video-card,
.svp-video-wrap {
	height: auto !important;
	max-height: none !important;
	align-self: flex-start !important;
	flex-shrink: 0 !important;
}

/* --- Carousel layout ---
 * --svp-cols is set per-instance (and per-breakpoint via media queries) by
 * templates/carousel.php based on the columns/columns_tablet/columns_mobile
 * settings — this drives how many cards are visible at once. */
.svp-feed-carousel {
	--svp-cols: 3;
}
.svp-carousel-viewport {
	position: relative !important;
}
.svp-feed-carousel .svp-carousel-track {
	display: flex !important;
	gap: 14px !important;
	overflow-x: auto !important;
	scroll-snap-type: x proximity !important;
	padding-bottom: 2px !important;
	-webkit-overflow-scrolling: touch !important;
	/* scroll-behavior intentionally NOT !important (regression found right
	 * after the v1.5.4 hardening pass shipped): the clone-based infinite-loop
	 * carousel in frontend.js needs to silently jump the track's scrollLeft
	 * from a cloned slide back to the matching real slide, and it does this
	 * by briefly setting an inline `scrollBehavior: 'auto'` so the jump is
	 * instant/invisible. A stylesheet `!important` beats a non-!important
	 * inline style, so forcing !important here made that reset jump animate
	 * instead — visible as the carousel appearing to reverse and scroll
	 * backward to slide 1, on both arrow-click and swipe/touch. Same
	 * root-cause pattern as the v1.5.5 .svp-modal-overlay `display` fix.
	 * Normal navigation clicks still animate smoothly; only the internal
	 * reset jump needs to skip the animation. */
	scroll-behavior: smooth;
	/* Native scrollbar is replaced by the dot navigation below the track. */
	scrollbar-width: none !important;
	-ms-overflow-style: none !important;
}
.svp-feed-carousel .svp-carousel-track::-webkit-scrollbar {
	display: none !important;
}
.svp-feed-carousel .svp-video-card {
	flex-grow: 0 !important;
	flex-shrink: 0 !important;
	flex-basis: calc( ( 100% - ( var( --svp-cols, 3 ) - 1 ) * 14px ) / var( --svp-cols, 3 ) ) !important;
	width: auto !important;
	scroll-snap-align: start !important;
}

/* Prev/next nav arrows.
 * --svp-arrow-bg / --svp-arrow-color / --svp-arrow-hover-bg / --svp-arrow-hover-color
 * are only ever set inline by the Elementor widget's Style tab (see
 * class-svp-elementor-widget.php); the shortcode and Gutenberg block never
 * set them, so the var() fallbacks below (the original hardcoded look) are
 * what those contexts use. Hover fallbacks default to the same as the
 * resting state (no visible change) unless a hover color is explicitly set. */
.svp-carousel-arrow {
	/* position/min-height !important (found on the same WoodMart + Elementor
	 * site as the background/border-radius fix below, still showing a UI
	 * issue after that fix shipped): WoodMart's base stylesheet has a global
	 * `:is(.btn, .button, button, [type="submit"], [type="button"]) {
	 * position: relative; min-height: var(--btn-height, 42px); ... }` reset
	 * — same (class-level) specificity as our plain `.svp-carousel-arrow`,
	 * so it was winning on source order alone. That silently turned this
	 * `position: absolute` into `position: relative`, which knocked the
	 * arrow out of its floating overlay position and, since a
	 * relatively-positioned element still occupies space in normal flow,
	 * added ~42px (the theme's forced min-height) of empty space to
	 * `.svp-carousel-viewport`'s height — the "extra gap" half of the bug.
	 * The background/border-radius fix from before only covered the
	 * visible-color half; this covers the layout half. */
	position: absolute !important;
	min-height: 0 !important;
	top: 40% !important;
	transform: translateY(-50%) !important;
	width: 36px !important;
	height: 36px !important;
	/* !important on background/border-radius (added after a client found
	 * this on a WoodMart + Elementor site): Elementor's own Global Kit CSS
	 * ships a site-wide `.elementor-kit-N button { background: ... }` rule
	 * with higher specificity (class + element) than our plain
	 * `.svp-carousel-arrow` (single class), so whatever accent color the
	 * site owner picked in Elementor's Site Settings → Buttons was winning
	 * and painting the arrows that color as flat squares instead of the
	 * intended white circles. Same story for border-radius: many themes'
	 * base stylesheet resets `button { border-radius: 0 }`. Forcing both
	 * with !important, same as color/width/height already were, makes the
	 * arrows render consistently regardless of the theme's own button
	 * defaults. */
	border-radius: 50% !important;
	background: var( --svp-arrow-bg, #fff ) !important;
	border: none !important;
	color: var( --svp-arrow-color, #1e1e1e ) !important;
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	cursor: pointer !important;
	padding: 0 !important;
	line-height: 0 !important;
	box-shadow: 0 2px 8px rgba( 0, 0, 0, 0.22 ) !important;
	z-index: 5 !important;
	transition: background-color 0.15s ease, color 0.15s ease !important;
}
.svp-carousel-arrow:hover,
.svp-carousel-arrow:focus,
.svp-carousel-arrow:focus-visible {
	background: var( --svp-arrow-hover-bg, var( --svp-arrow-bg, #fff ) ) !important;
	color: var( --svp-arrow-hover-color, var( --svp-arrow-color, #1e1e1e ) ) !important;
}
/* Clicking the arrow leaves it focused (not just briefly ":hover"), and
 * plain ":focus" isn't the same as ":focus-visible" — clicking with a
 * mouse focuses the button but many browsers don't treat that as
 * "focus-visible", so the ":focus-visible" rule above alone never matched
 * after a click and the theme's own default focused-button background
 * (blue on this theme) showed through instead of the styled color. Adding
 * plain ":focus" (and forcing background with !important, same reasoning
 * as the hotspot button fix) closes that gap so the arrow keeps its
 * chosen/hover color after every click, not just while the mouse hovers. */
.svp-carousel-arrow svg {
	width: 18px !important;
	height: 18px !important;
	min-width: 18px !important;
	flex-shrink: 0 !important;
	stroke: currentColor !important;
	fill: none !important;
}
.svp-carousel-prev {
	left: -14px !important;
}
.svp-carousel-next {
	right: -14px !important;
}
@media ( max-width: 600px ) {
	/* Previously hidden entirely on mobile ("rely on native swipe"), but
	 * that meant "Continue Scrolling" (infinite loop) never worked on
	 * touch devices — native swipe just stops at the last card, it has no
	 * concept of looping. The arrow-click handler already loops correctly
	 * (see bindCarouselArrows() in frontend.js), so the fix is simply to
	 * keep the arrows reachable on mobile too — swipe still works for
	 * normal scrolling, the arrows are just an extra always-available way
	 * to advance/loop. Pulled slightly inward (-14px -> 2px) so they stay
	 * within the viewport instead of overflowing off narrow screens. */
	.svp-carousel-arrow {
		width: 32px !important;
		height: 32px !important;
	}
	.svp-carousel-prev {
		left: 2px !important;
	}
	.svp-carousel-next {
		right: 2px !important;
	}
}

/* Pagination dots — replaces the native horizontal scrollbar. Built/updated
 * dynamically by frontend.js since the number of pages depends on how many
 * cards are visible at the current breakpoint. --svp-dot-color /
 * --svp-dot-active-color / --svp-dot-size follow the same "Elementor-only
 * inline override, sane fallback otherwise" pattern as the arrow colors. */
.svp-carousel-dots {
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	gap: 8px !important;
	margin-top: 12px !important;
}
.svp-carousel-dot {
	width: var( --svp-dot-size, 8px ) !important;
	height: var( --svp-dot-size, 8px ) !important;
	min-width: 0 !important;
	/* min-height !important: without it, WoodMart's forced `min-height:
	 * var(--btn-height, 42px)` on all <button> elements (see the
	 * .svp-carousel-arrow comment above) clamps the *used* height up to
	 * 42px even though `height` above is already 8px !important — min-height
	 * and height are separate properties and the browser takes whichever is
	 * larger, !important or not. Dots were rendering as ~42px tall blobs
	 * instead of small circles on that theme. */
	min-height: 0 !important;
	padding: 0 !important;
	border: none !important;
	/* !important throughout: same Elementor Global Kit / theme button-reset
	 * conflict as the arrows above — dots are <button> elements too, so
	 * without !important they picked up the theme's accent blue instead of
	 * the plugin's intended neutral/active colors. */
	border-radius: 50% !important;
	background: var( --svp-dot-color, #d6d6d6 ) !important;
	cursor: pointer !important;
	transition: background-color 0.2s ease, width 0.2s ease !important;
}
.svp-carousel-dot.is-active {
	background: var( --svp-dot-active-color, var( --svp-accent, #1e6b52 ) ) !important;
	width: calc( var( --svp-dot-size, 8px ) * 2.2 ) !important;
	border-radius: 999px !important;
}

/* --- Inline (vertical TikTok-style) layout --- */
.svp-feed-inline {
	display: flex !important;
	flex-direction: column !important;
	gap: 18px !important;
	max-width: 420px !important;
	margin-left: auto !important;
	margin-right: auto !important;
}
.svp-feed-inline .svp-video-card {
	width: 100% !important;
}

/* --- Video card --- */
.svp-video-card {
	position: relative !important;
	border-radius: var(--svp-radius, 12px) !important;
	overflow: hidden !important;
	background: #000 !important;
	cursor: pointer !important;
}
.svp-video-wrap {
	position: relative !important;
	width: 100% !important;
	aspect-ratio: 9 / 16 !important;
	background: #111 !important;
}
.svp-video-el {
	width: 100% !important;
	height: 100% !important;
	object-fit: cover !important;
	display: block !important;
}
.svp-play-btn {
	/* Same WoodMart theme-reset conflict as .svp-carousel-arrow above, plus
	 * this rule never had !important on background/border-radius at all
	 * (only color did) — so on that theme the play button rendered as a
	 * flat, theme-colored square sitting slightly out of place instead of
	 * a white circle centered on the video, and (via the forced
	 * position:relative + min-height) added its own ~42px of extra height
	 * to .svp-video-wrap. All four properties now match the same
	 * !important treatment already used for .svp-hotspot-btn. */
	position: absolute !important;
	min-height: 0 !important;
	top: 50% !important;
	left: 50% !important;
	transform: translate(-50%, -50%) !important;
	width: 52px !important;
	height: 52px !important;
	border-radius: 50% !important;
	background: rgba(255, 255, 255, 0.9) !important;
	border: none !important;
	color: #1e1e1e !important;
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	cursor: pointer !important;
	padding: 0 !important;
	line-height: 0 !important;
}
.svp-play-btn svg {
	width: 16px !important;
	height: 16px !important;
	min-width: 16px !important;
	flex-shrink: 0 !important;
	margin-left: 2px !important; /* optically center the play triangle */
}
.svp-video-card.svp-playing .svp-play-btn {
	display: none !important;
}
.svp-hotspot-btn {
	/* position/min-height !important: same WoodMart position:relative +
	 * min-height:42px reset described on .svp-carousel-arrow above also
	 * matches this <button> — the background/color !important added back
	 * in v1.3.8 covered the color half of that theme's conflicts, but not
	 * this layout half, so the hotspot button was still adding stray height
	 * inside .svp-video-wrap. */
	position: absolute !important;
	min-height: 0 !important;
	bottom: 12px !important;
	right: 12px !important;
	width: 40px !important;
	height: 40px !important;
	border-radius: 50% !important;
	background: var(--svp-hotspot-bg, #fff) !important;
	border: none !important;
	color: var(--svp-hotspot-color, #1e1e1e) !important;
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	cursor: pointer !important;
	padding: 0 !important;
	line-height: 0 !important;
	box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25) !important;
}
/* Without an explicit hover/focus state, this <button> fell back to the
 * active theme's own global button:hover color (blue on this theme) as
 * soon as the cursor touched it — the base rule only covered the resting
 * state. Explicit hover/focus rules (with their own overridable CSS vars,
 * defaulting back to the resting-state colors) close that gap and give
 * Elementor something to hook "Icon/Background Hover Color" into. */
.svp-hotspot-btn:hover,
.svp-hotspot-btn:focus,
.svp-hotspot-btn:focus-visible {
	background: var(--svp-hotspot-hover-bg, var(--svp-hotspot-bg, #fff)) !important;
	color: var(--svp-hotspot-hover-color, var(--svp-hotspot-color, #1e1e1e)) !important;
}
.svp-hotspot-btn svg {
	width: 18px !important;
	height: 18px !important;
	min-width: 18px !important;
	flex-shrink: 0 !important;
}
.svp-play-btn svg,
.svp-hotspot-btn svg {
	stroke: currentColor !important;
	fill: none !important;
}
.svp-play-btn svg path {
	fill: currentColor !important;
}
.svp-hotspot-count {
	position: absolute !important;
	top: -4px !important;
	right: -4px !important;
	background: var(--svp-accent, #1e6b52) !important;
	color: #fff !important;
	font-size: 10px !important;
	line-height: 1 !important;
	padding: 3px 5px !important;
	border-radius: 999px !important;
}
.svp-video-price-badge {
	position: absolute !important;
	top: 10px !important;
	left: 10px !important;
	background: rgba(0, 0, 0, 0.65) !important;
	color: #fff !important;
	font-size: 12px !important;
	padding: 4px 8px !important;
	border-radius: 6px !important;
	display: flex !important;
	align-items: center !important;
	gap: 6px !important;
}
.svp-combo-label {
	background: var(--svp-accent, #1e6b52) !important;
	padding: 2px 6px !important;
	border-radius: 4px !important;
	font-size: 10px !important;
	text-transform: uppercase !important;
}

/* --- Modal --- */
.svp-modal-overlay {
	position: fixed !important;
	inset: 0 !important;
	background: rgba(0, 0, 0, 0.65) !important;
	z-index: 100000 !important;
	/* display intentionally NOT !important (regression found right after the
	 * v1.5.4 hardening pass shipped): the modal's open/closed state is
	 * driven entirely by frontend.js toggling the *inline* `display` style
	 * via jQuery's fadeIn()/fadeOut() (and the template prints
	 * style="display:none;" by default — see templates/product-modal.php).
	 * A stylesheet `!important` beats a non-!important inline style, so
	 * forcing !important here made the modal ignore fadeOut() entirely and
	 * stay visible/open on every page load, before any video was even
	 * clicked. Every other property on this element is still hardened;
	 * only `display` has to stay overridable by inline styles for
	 * open/close to keep working. */
	display: flex;
	align-items: center !important;
	justify-content: center !important;
	padding: 16px !important;
}
.svp-modal {
	background: #fff !important;
	width: 100% !important;
	max-width: 860px !important;
	max-height: 90vh !important;
	border-radius: 14px !important;
	overflow: hidden !important;
	display: flex !important;
	position: relative !important;
}
@media (max-width: 640px) {
	/* Root cause of the mobile "everything disappears" bug: with
	 * flex-direction:column, .svp-modal-video-wrap's flex-basis:42% needed
	 * a definite height on its parent (.svp-modal) to resolve against —
	 * but .svp-modal's height was auto, so the percentage fell back to the
	 * video's intrinsic size, which could blow up to fill (or exceed) the
	 * whole viewport. Combined with .svp-modal-overlay centering vertically,
	 * an oversized modal got pushed so its top (with the close button) sat
	 * above the visible viewport — leaving only the video on screen, no
	 * close button, no product list. Fixed by giving every level a
	 * definite height instead of a percentage of an auto one. */
	.svp-modal-overlay {
		align-items: flex-start !important;
		padding: 0 !important;
	}
	.svp-modal {
		flex-direction: column !important;
		width: 100% !important;
		max-width: 100% !important;
		height: 100vh !important;
		max-height: 100vh !important;
		border-radius: 0 !important;
	}
	.svp-modal-video-wrap {
		flex: 0 0 auto !important;
		height: 38vh !important;
		max-height: 38vh !important;
	}
	.svp-modal-body {
		flex: 1 1 auto !important;
		min-height: 0 !important; /* lets this flex child scroll instead of growing to fit its content */
		overflow-y: auto !important;
		-webkit-overflow-scrolling: touch !important;
	}
	.svp-modal-close {
		z-index: 3 !important;
	}
}
.svp-modal-close {
	position: absolute !important;
	top: 10px !important;
	right: 10px !important;
	z-index: 2 !important;
	width: 34px !important;
	height: 34px !important;
	border-radius: 50% !important;
	border: none !important;
	background: rgba(255, 255, 255, 0.9) !important;
	font-size: 20px !important;
	line-height: 1 !important;
	padding: 0 !important;
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	cursor: pointer !important;
}
.svp-modal-video-wrap {
	flex: 0 0 42% !important;
	background: #000 !important;
}
.svp-modal-video {
	width: 100% !important;
	height: 100% !important;
	max-height: 90vh !important;
	object-fit: contain !important;
	display: block !important;
}
.svp-modal-body {
	flex: 1 !important;
	padding: 20px !important;
	overflow-y: auto !important;
}
.svp-modal-title {
	margin: 0 0 12px !important;
	font-size: 16px !important;
}
.svp-modal-products {
	display: flex !important;
	flex-direction: column !important;
	gap: 12px !important;
}
.svp-modal-product {
	display: flex !important;
	align-items: center !important;
	gap: 10px !important;
	border: 1px solid #eee !important;
	border-radius: 10px !important;
	padding: 10px !important;
}
.svp-modal-product img {
	width: 56px !important;
	height: 56px !important;
	object-fit: cover !important;
	border-radius: 6px !important;
	flex-shrink: 0 !important;
}
.svp-modal-product-info {
	flex: 1 !important;
	min-width: 0 !important;
}
.svp-modal-product-name {
	font-weight: 600 !important;
	font-size: 13px !important;
	margin: 0 0 2px !important;
}
.svp-modal-product-price {
	font-size: 13px !important;
	color: #555 !important;
}
.svp-modal-product-add {
	flex-shrink: 0 !important;
}

/* Forced with !important throughout: the plugin's buttons/links must look
 * identical regardless of the active theme's default <button>/<a> styling
 * (text-transform, padding, letter-spacing, font-family all commonly get
 * overridden by WooCommerce themes otherwise — see the icon-visibility fix
 * above for the same root cause). */
.svp-btn {
	all: unset !important;
	box-sizing: border-box !important;
	display: inline-flex !important;
	align-items: center !important;
	justify-content: center !important;
	gap: 6px !important;
	padding: 9px 16px !important;
	margin: 0 !important;
	border-radius: 8px !important;
	border: none !important;
	background: var(--svp-accent, #1e6b52) !important;
	color: #fff !important;
	font-family: inherit !important;
	font-size: 13px !important;
	font-weight: 600 !important;
	line-height: normal !important;
	letter-spacing: normal !important;
	text-transform: none !important;
	text-align: center !important;
	cursor: pointer !important;
	text-decoration: none !important;
	white-space: nowrap !important;
	vertical-align: middle !important;
}
.svp-btn:hover,
.svp-btn:focus,
.svp-btn:active {
	opacity: 0.92 !important;
	color: #fff !important;
	text-decoration: none !important;
}
.svp-btn[disabled] {
	opacity: 0.6 !important;
	cursor: not-allowed !important;
}
.svp-btn-small {
	padding: 6px 10px !important;
	font-size: 12px !important;
}
.svp-btn-whatsapp {
	background: #25d366 !important;
}
/* .svp-btn's own `display: inline-flex !important` above wins over jQuery's
 * .hide()/.show() (which just toggles an inline `display:none` — !important
 * in a stylesheet beats a non-!important inline style). Without this, the
 * WhatsApp button stayed visible/clickable even when JS tried to hide it
 * (e.g. WhatsApp disabled for that video) — worse, it could still carry the
 * wa.me link from whichever video was last opened. JS now toggles this
 * class instead of relying on .show()/.hide(). */
.svp-btn-hidden {
	display: none !important;
}
.svp-modal-actions {
	margin-top: 16px !important;
	display: flex !important;
	flex-direction: column !important;
	gap: 8px !important;
}
.svp-modal-cart-msg {
	margin-top: 10px !important;
	font-size: 13px !important;
	color: var(--svp-accent, #1e6b52) !important;
	min-height: 16px !important;
}
.svp-out-of-stock {
	color: #b32d2e !important;
	font-size: 12px !important;
}
.svp-empty-notice {
	padding: 16px !important;
	background: #fff8e5 !important;
	border: 1px solid #f0dca0 !important;
	border-radius: 8px !important;
}

/* --- Front-end "Add Video" (staff-only) ---
 * Only ever rendered for users who pass
 * SVP_Frontend_Editor::current_user_can_edit(), so it's safe for these
 * styles to load in the shared stylesheet without an extra request. */
.svp-add-video-trigger {
	all: unset !important;
	box-sizing: border-box !important;
	display: inline-flex !important;
	align-items: center !important;
	justify-content: center !important;
	gap: 6px !important;
	margin-top: 10px !important;
	padding: 8px 14px !important;
	border-radius: 8px !important;
	border: 1px dashed var( --svp-accent, #1e6b52 ) !important;
	background: transparent !important;
	color: var( --svp-accent, #1e6b52 ) !important;
	font-family: inherit !important;
	font-size: 13px !important;
	font-weight: 600 !important;
	cursor: pointer !important;
}
.svp-add-video-trigger svg {
	width: 14px !important;
	height: 14px !important;
	flex-shrink: 0 !important;
	stroke: currentColor !important;
	fill: none !important;
}
.svp-add-video-trigger:hover {
	background: rgba( 30, 107, 82, 0.08 ) !important;
}

.svp-editor-modal .svp-modal-body {
	width: 100% !important;
}
.svp-editor-row {
	margin-bottom: 16px !important;
}
.svp-editor-row label {
	display: block !important;
	font-weight: 600 !important;
	font-size: 13px !important;
	margin-bottom: 6px !important;
}
.svp-required {
	color: #b32d2e !important;
}
.svp-editor-input {
	width: 100% !important;
	box-sizing: border-box !important;
	padding: 8px 10px !important;
	border: 1px solid #ddd !important;
	border-radius: 6px !important;
	font-size: 13px !important;
	font-family: inherit !important;
	margin-top: 6px !important;
}
.svp-editor-checkbox-label {
	display: flex !important;
	align-items: center !important;
	gap: 8px !important;
	font-weight: 400 !important;
	cursor: pointer !important;
}
.svp-editor-preview {
	margin-top: 8px !important;
}
.svp-editor-preview video,
.svp-editor-preview img {
	display: block !important;
	border-radius: 6px !important;
}
.svp-editor-search-results {
	position: relative !important;
}
.svp-editor-search-results .svp-search-results-list {
	list-style: none !important;
	margin: 4px 0 0 !important;
	padding: 0 !important;
	border: 1px solid #eee !important;
	border-radius: 6px !important;
	max-height: 180px !important;
	overflow-y: auto !important;
}
.svp-editor-search-results .svp-search-results-list li {
	padding: 8px 10px !important;
	font-size: 13px !important;
	cursor: pointer !important;
	display: flex !important;
	justify-content: space-between !important;
	gap: 8px !important;
}
.svp-editor-search-results .svp-search-results-list li:hover {
	background: #f7f7f7 !important;
}
.svp-editor-search-results .svp-search-results-list li span {
	color: #777 !important;
	white-space: nowrap !important;
}
.svp-editor-tag-list {
	list-style: none !important;
	margin: 10px 0 0 !important;
	padding: 0 !important;
	display: flex !important;
	flex-wrap: wrap !important;
	gap: 6px !important;
}
.svp-editor-tag-list li {
	background: #f1f5f3 !important;
	border-radius: 999px !important;
	padding: 5px 10px !important;
	font-size: 12px !important;
	display: flex !important;
	align-items: center !important;
	gap: 6px !important;
}
.svp-editor-tag-list .svp-remove-product {
	color: #b32d2e !important;
	text-decoration: none !important;
	font-weight: 700 !important;
}
.svp-editor-msg {
	font-size: 13px !important;
	min-height: 18px !important;
	margin-bottom: 8px !important;
}
.svp-editor-msg-error {
	color: #b32d2e !important;
}
.svp-editor-msg-ok {
	color: var( --svp-accent, #1e6b52 ) !important;
}
