/**
 * Pro Before After Slider – Frontend Styles
 * Uses CSS custom properties for all themeable values so Elementor
 * selectors can override individual variables cleanly.
 */

/* ─────────────────────────────────────────────────────────────
   1. CSS Custom Property Defaults
   ───────────────────────────────────────────────────────────── */
.pbas-wrapper {
	--pbas-pos: 50%;            /* Handle position, updated by JS            */
	--pbas-label-offset: 12px;  /* Distance of label from container edge      */
	--pbas-divider-color: #fff; /* Fallback – overridden by Elementor control */
	--pbas-handle-color: #fff;
	--pbas-handle-size: 44px;
	--pbas-divider-width: 2px;
	--pbas-transition: 0ms;     /* 0 during drag, 300ms during scroll/hover  */

	display: block;
	width: 100%;
	position: relative;
	/* Eliminate any inherited line-height gaps */
	font-size: 0;
	line-height: 0;
}

/* ─────────────────────────────────────────────────────────────
   2. Container – aspect-ratio & custom height
   The Elementor SELECTOR control writes aspect-ratio directly.
   The .pbas-ratio--custom class is set by prefix_class so we
   honour the custom_height slider instead.
   ───────────────────────────────────────────────────────────── */
.pbas-container {
	position: relative;
	overflow: hidden;
	width: 100%;
	/* Fallback for browsers that don't support aspect-ratio */
	display: block;
	user-select: none;
	-webkit-user-select: none;
	/* Promote to its own compositing layer for smooth dragging */
	will-change: contents;
}

/* When no custom height is set, use aspect-ratio (written inline by Elementor) */
.pbas-container img {
	/* Images fill the container; object-fit / object-position
	   are written by Elementor selector controls              */
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;   /* Default – overridden by control  */
	object-position: center center;
	pointer-events: none; /* Prevent native image drag        */
	-webkit-user-drag: none;
}

/* ─────────────────────────────────────────────────────────────
   3. Image Layers
   After = full base layer.
   Before = top layer, clipped via clip-path driven by --pbas-pos.
   ───────────────────────────────────────────────────────────── */
.pbas-image {
	position: absolute;
	inset: 0;
	overflow: hidden;
}

/* The "after" layer fills 100% – nothing to clip */
.pbas-after {
	z-index: 1;
}

/* The "before" layer is clipped from the RIGHT so only the left
   portion (up to --pbas-pos) is visible.                         */
.pbas-before {
	z-index: 2;
	clip-path: inset(0 calc(100% - var(--pbas-pos)) 0 0);
	/* Smooth transition for hover & scroll modes only.
	   During drag we set --pbas-transition to 0ms.        */
	transition: clip-path var(--pbas-transition) linear;
	will-change: clip-path;
}

/* ─────────────────────────────────────────────────────────────
   4. Labels
   Position variants driven by Elementor prefix_class.
   ───────────────────────────────────────────────────────────── */
.pbas-label {
	position: absolute;
	z-index: 10;
	font-size: 13px;
	line-height: 1;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: #fff;
	background-color: rgba(0, 0, 0, 0.45);
	padding: 6px 12px;
	border-radius: 4px;
	/* Default position = top-left anchoring */
	top: var(--pbas-label-offset);
	left: var(--pbas-label-offset);
	transition: opacity 0.2s ease;
	white-space: nowrap;
	pointer-events: none;
}

/* After label mirrors the before label but on the right */
.pbas-label-after {
	left: auto;
	right: var(--pbas-label-offset);
}

/* ── Position variants (set via label_position control / prefix_class) ── */
.pbas-label-pos--top-right    .pbas-label-before  { left: auto; right: var(--pbas-label-offset); top: var(--pbas-label-offset); }
.pbas-label-pos--top-right    .pbas-label-after   { left: var(--pbas-label-offset); right: auto; }
.pbas-label-pos--bottom-left  .pbas-label-before  { top: auto; bottom: var(--pbas-label-offset); left: var(--pbas-label-offset); }
.pbas-label-pos--bottom-left  .pbas-label-after   { top: auto; bottom: var(--pbas-label-offset); left: auto; right: var(--pbas-label-offset); }
.pbas-label-pos--bottom-right .pbas-label-before  { top: auto; bottom: var(--pbas-label-offset); left: auto; right: var(--pbas-label-offset); }
.pbas-label-pos--bottom-right .pbas-label-after   { top: auto; bottom: var(--pbas-label-offset); left: var(--pbas-label-offset); right: auto; }

/* ─────────────────────────────────────────────────────────────
   5. Handle
   .pbas-divider  = the full-height vertical line, direct child of container.
   .pbas-handle   = the circular button, centred vertically, on top.
   Both read --pbas-pos so they move in perfect sync.
   ───────────────────────────────────────────────────────────── */

/* ── Full-height divider line ── */
.pbas-divider {
	position: absolute;
	z-index: 18;
	top: 0;
	bottom: 0;
	left: var(--pbas-pos);
	transform: translateX(-50%);
	width: 2px;          /* overridden by Elementor control */
	background-color: #fff;
	pointer-events: none;
	/* Only transition during scroll/hover modes */
	transition: left var(--pbas-transition) linear;
	will-change: left;
}

/* ── Handle wrapper (button only, no divider) ── */
.pbas-handle {
	position: absolute;
	z-index: 20;
	top: 50%;
	left: var(--pbas-pos);
	transform: translate(-50%, -50%);
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: col-resize;
	/* Only transition during scroll/hover modes */
	transition: left var(--pbas-transition) linear;
	will-change: left;
	outline: none;
	/* No padding/margin here – those shift the element and
	   break transform: translate(-50%) centering alignment.
	   Touch target is expanded via the ::before pseudo-element. */
}

/* Wider invisible touch target that doesn't affect centering */
.pbas-handle::before {
	content: '';
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: calc(100% + 24px);
	height: calc(100% + 24px);
}

/* Keyboard focus ring */
.pbas-handle:focus-visible .pbas-handle-btn {
	outline: 3px solid #4285f4;
	outline-offset: 2px;
}

/* ── Handle button (the circular icon) ── */
.pbas-handle-btn {
	position: relative;
	z-index: 2;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border-radius: 50%;
	background-color: #fff;
	border: none;
	padding: 0;
	cursor: col-resize;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
	transition: transform 0.15s ease, box-shadow 0.15s ease;
	flex-shrink: 0;
}

.pbas-handle:active .pbas-handle-btn,
.pbas-wrapper[data-dragging="true"] .pbas-handle-btn {
	transform: scale(1.08);
	box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
}

/* ── Default arrow chevrons (shown when no custom icon is set) ── */
.pbas-arrows {
	display: flex;
	align-items: center;
	gap: 4px;
}

.pbas-arrow {
	display: inline-block;
	width: 8px;
	height: 8px;
	border-style: solid;
	border-color: #333;
	border-width: 0;
	flex-shrink: 0;
}

.pbas-arrow-left {
	border-left-width: 2px;
	border-bottom-width: 2px;
	transform: rotate(45deg);
}

.pbas-arrow-right {
	border-right-width: 2px;
	border-top-width: 2px;
	transform: rotate(45deg);
}

/* ── Custom icon sizing within the button ── */
.pbas-handle-btn i,
.pbas-handle-btn svg {
	font-size: 18px;
	width: 18px;
	height: 18px;
	color: #333;
	fill: #333;
	display: block;
}

/* ─────────────────────────────────────────────────────────────
   6. Hover interaction variant
   When interaction is "hover", hide the visible handle chrome
   and only show the clip-path line.
   ───────────────────────────────────────────────────────────── */
.pbas-wrapper[data-interaction="hover"] .pbas-handle-btn {
	opacity: 0;
	transform: scale(0.7);
	transition: opacity 0.2s ease, transform 0.2s ease;
}

.pbas-wrapper[data-interaction="hover"]:hover .pbas-handle-btn {
	opacity: 1;
	transform: scale(1);
}

/* ─────────────────────────────────────────────────────────────
   7. Responsive aspect-ratio prefix_class variants
   These are defined here as fallbacks for older browsers;
   modern browsers use the inline aspect-ratio CSS output by
   Elementor's selector control.
   ───────────────────────────────────────────────────────────── */
.pbas-ratio--1-1  .pbas-container { aspect-ratio: 1 / 1; }
.pbas-ratio--16-9 .pbas-container { aspect-ratio: 16 / 9; }
.pbas-ratio--4-3  .pbas-container { aspect-ratio: 4 / 3; }
.pbas-ratio--3-2  .pbas-container { aspect-ratio: 3 / 2; }
.pbas-ratio--9-16 .pbas-container { aspect-ratio: 9 / 16; }

/* ─────────────────────────────────────────────────────────────
   8. Accessibility – reduced motion
   ───────────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
	.pbas-before,
	.pbas-handle {
		transition: none !important;
	}
}
