/* ==========================================================================
   Elementor Podcast Audio Player
   --------------------------------------------------------------------------
   All colours / sizes are CSS custom properties so the Elementor Style tab
   only needs to override variables (see widget register_*_style_controls).
   ========================================================================== */

/* -------------------------------------------------------------------------
   1. Design tokens
   ------------------------------------------------------------------------- */
.epp-player {
	--epp-bg: #15171c;
	--epp-surface: #1e2128;
	--epp-text: #f3f4f6;
	--epp-muted: #9aa1ad;
	--epp-accent: #8b6cff;
	--epp-accent-text: var(--epp-accent);
	--epp-on-accent: #ffffff;
	--epp-btn: #d6d9df;
	--epp-track: rgba(255, 255, 255, 0.12);
	--epp-buffer: rgba(255, 255, 255, 0.22);

	--epp-radius: 20px;
	--epp-cover-radius: 14px;
	--epp-cover-size: 168px;
	--epp-play-size: 58px;
	--epp-gap: 24px;

	--epp-progress: 0%; /* Updated by JS */
	--epp-buffered: 0%; /* Updated by JS */
}

/* -------------------------------------------------------------------------
   2. Card layout (flexbox)
   ------------------------------------------------------------------------- */

/* The wrap is a size container so the player responds to the width of its
   Elementor column, not just the viewport. */
.epp-wrap {
	container-type: inline-size;
	width: 100%;
}

.epp-player {
	position: relative;
	display: flex;
	align-items: center;
	gap: var(--epp-gap);
	padding: 22px;
	color: var(--epp-text);
	background: var(--epp-bg);
	background-image: linear-gradient(145deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0) 60%);
	border: 1px solid rgba(255, 255, 255, 0.06);
	border-radius: var(--epp-radius);
	box-shadow:
		0 1px 2px rgba(0, 0, 0, 0.3),
		0 18px 40px -12px rgba(0, 0, 0, 0.55);
	font-family: inherit;
	line-height: 1.4;
	box-sizing: border-box;
}

.epp-player *,
.epp-player *::before,
.epp-player *::after {
	box-sizing: border-box;
}

.epp-audio {
	display: none;
}

/* -------------------------------------------------------------------------
   3. Cover art
   ------------------------------------------------------------------------- */
.epp-cover {
	flex: 0 0 var(--epp-cover-size);
	width: var(--epp-cover-size);
	aspect-ratio: 1 / 1;
	border-radius: var(--epp-cover-radius);
	overflow: hidden;
	background: var(--epp-surface);
	box-shadow: 0 10px 24px -8px rgba(0, 0, 0, 0.6);
}

.epp-cover img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.6s ease;
}

.epp-player.is-playing .epp-cover img {
	transform: scale(1.04);
}

/* -------------------------------------------------------------------------
   4. Body: info / progress / controls
   ------------------------------------------------------------------------- */
.epp-body {
	flex: 1 1 auto;
	min-width: 0; /* allow text truncation inside flex child */
	display: flex;
	flex-direction: column;
	gap: 14px;
}

.epp-info {
	display: flex;
	flex-direction: column;
	gap: 4px;
	min-width: 0;
}

.epp-show {
	color: var(--epp-accent-text);
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}

.epp-player .epp-title {
	margin: 0;
	color: var(--epp-text);
	font-size: 1.2rem;
	font-weight: 700;
	line-height: 1.3;
	/* clamp long titles to 2 lines */
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.epp-meta {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	color: var(--epp-muted);
	font-size: 0.8rem;
}

.epp-meta .epp-icon {
	width: 14px;
	height: 14px;
}

/* -------------------------------------------------------------------------
   5. Progress bar / scrubber
   ------------------------------------------------------------------------- */
.epp-progress {
	display: flex;
	align-items: center;
	gap: 12px;
}

.epp-time {
	flex: 0 0 auto;
	min-width: 3.2em;
	color: var(--epp-muted);
	font-size: 0.78rem;
	font-variant-numeric: tabular-nums;
}

.epp-time[data-epp-duration] {
	text-align: right;
}

.epp-scrubber {
	position: relative;
	flex: 1 1 auto;
	height: 20px; /* generous hit area around a thin track */
	display: flex;
	align-items: center;
	cursor: pointer;
	touch-action: none; /* we handle pointer drag ourselves */
	outline: none;
}

.epp-scrubber-track {
	position: relative;
	width: 100%;
	height: 5px;
	border-radius: 999px;
	background: var(--epp-track);
	overflow: hidden;
	transition: height 0.15s ease;
}

.epp-scrubber-buffer,
.epp-scrubber-fill {
	position: absolute;
	inset: 0 auto 0 0;
	border-radius: inherit;
}

.epp-scrubber-buffer {
	width: var(--epp-buffered);
	background: var(--epp-buffer);
}

.epp-scrubber-fill {
	width: var(--epp-progress);
	background: var(--epp-accent);
}

.epp-scrubber-thumb {
	position: absolute;
	left: var(--epp-progress);
	top: 50%;
	width: 14px;
	height: 14px;
	border-radius: 50%;
	background: #fff;
	box-shadow: 0 0 0 4px color-mix(in srgb, var(--epp-accent) 35%, transparent);
	transform: translate(-50%, -50%) scale(0);
	transition: transform 0.15s ease;
	pointer-events: none;
}

.epp-scrubber:hover .epp-scrubber-track,
.epp-scrubber:focus-visible .epp-scrubber-track,
.epp-scrubber.is-dragging .epp-scrubber-track {
	height: 7px;
}

.epp-scrubber:hover .epp-scrubber-thumb,
.epp-scrubber:focus-visible .epp-scrubber-thumb,
.epp-scrubber.is-dragging .epp-scrubber-thumb {
	transform: translate(-50%, -50%) scale(1);
}

.epp-scrubber:focus-visible .epp-scrubber-track {
	box-shadow: 0 0 0 2px var(--epp-bg), 0 0 0 4px var(--epp-accent);
	overflow: visible;
}

/* Hover / drag time preview */
.epp-scrubber-tooltip {
	position: absolute;
	bottom: calc(100% + 6px);
	left: 0;
	padding: 3px 7px;
	border-radius: 6px;
	background: var(--epp-surface);
	color: var(--epp-text);
	font-size: 0.72rem;
	font-variant-numeric: tabular-nums;
	white-space: nowrap;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
	transform: translateX(-50%);
	opacity: 0;
	pointer-events: none;
	transition: opacity 0.15s ease;
}

.epp-scrubber.show-tooltip .epp-scrubber-tooltip {
	opacity: 1;
}

.epp-player.is-unseekable .epp-scrubber {
	cursor: default;
	opacity: 0.5;
}

/* -------------------------------------------------------------------------
   6. Buttons
   ------------------------------------------------------------------------- */
.epp-controls {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 12px 20px;
}

.epp-transport {
	display: flex;
	align-items: center;
	gap: 14px;
}

/* Reset theme/Elementor button styles */
.epp-player .epp-btn {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--epp-btn);
	line-height: 1;
	cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease, transform 0.12s ease;
	-webkit-tap-highlight-color: transparent;
}

.epp-player .epp-btn:hover {
	color: var(--epp-text);
	background: rgba(255, 255, 255, 0.08);
}

.epp-player .epp-btn:active {
	transform: scale(0.94);
}

.epp-player .epp-btn:focus-visible {
	outline: 2px solid var(--epp-accent);
	outline-offset: 2px;
}

.epp-icon {
	width: 24px;
	height: 24px;
	flex: 0 0 auto;
}

/* Skip ±N buttons – number sits inside the circular arrow */
.epp-player .epp-btn-skip {
	width: 44px;
	height: 44px;
}

.epp-btn-skip .epp-icon {
	width: 30px;
	height: 30px;
}

.epp-skip-label {
	position: absolute;
	top: 53%;
	left: 50%;
	transform: translate(-50%, -50%);
	font-size: 9px;
	font-weight: 700;
	letter-spacing: -0.02em;
	pointer-events: none;
}

/* Play / pause – primary action */
.epp-player .epp-btn-play {
	width: var(--epp-play-size);
	height: var(--epp-play-size);
	background: var(--epp-accent);
	color: var(--epp-on-accent);
	box-shadow: 0 8px 20px -6px color-mix(in srgb, var(--epp-accent) 70%, transparent);
}

.epp-player .epp-btn-play:hover {
	background: var(--epp-accent);
	color: var(--epp-on-accent);
	filter: brightness(1.1);
}

.epp-btn-play .epp-icon {
	width: 45%;
	height: 45%;
}

.epp-btn-play .epp-icon-pause,
.epp-player.is-playing .epp-btn-play .epp-icon-play {
	display: none;
}

.epp-player.is-playing .epp-btn-play .epp-icon-pause {
	display: block;
}

/* Buffering spinner ring around the play button */
.epp-spinner {
	position: absolute;
	inset: -4px;
	border-radius: 50%;
	border: 2px solid transparent;
	border-top-color: var(--epp-accent);
	opacity: 0;
	pointer-events: none;
}

.epp-player.is-loading .epp-spinner {
	opacity: 1;
	animation: epp-spin 0.8s linear infinite;
}

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

/* -------------------------------------------------------------------------
   7. Volume
   ------------------------------------------------------------------------- */
.epp-volume {
	--epp-vol: 80%; /* Updated by JS */
	display: flex;
	align-items: center;
	gap: 8px;
}

.epp-player .epp-btn-mute {
	width: 36px;
	height: 36px;
}

.epp-btn-mute .epp-icon {
	width: 20px;
	height: 20px;
	display: none;
}

.epp-volume[data-level="high"] .epp-icon-vol-high,
.epp-volume[data-level="low"] .epp-icon-vol-low,
.epp-volume[data-level="mute"] .epp-icon-vol-mute {
	display: block;
}

.epp-volume-slider {
	-webkit-appearance: none;
	appearance: none;
	width: 96px;
	height: 5px;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 999px;
	background: linear-gradient(
		to right,
		var(--epp-accent) 0 var(--epp-vol),
		var(--epp-track) var(--epp-vol) 100%
	);
	cursor: pointer;
	outline: none;
}

.epp-volume-slider::-webkit-slider-thumb {
	-webkit-appearance: none;
	width: 13px;
	height: 13px;
	border-radius: 50%;
	background: #fff;
	border: 0;
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
	transition: transform 0.15s ease;
}

.epp-volume-slider::-moz-range-thumb {
	width: 13px;
	height: 13px;
	border-radius: 50%;
	background: #fff;
	border: 0;
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}

.epp-volume-slider:hover::-webkit-slider-thumb {
	transform: scale(1.15);
}

.epp-volume-slider:focus-visible {
	box-shadow: 0 0 0 2px var(--epp-bg), 0 0 0 4px var(--epp-accent);
}

/* -------------------------------------------------------------------------
   8. Responsive
   ------------------------------------------------------------------------- */

/* Forced stacked layout (Layout control = Stacked) */
.epp-layout-vertical .epp-player {
	flex-direction: column;
	align-items: stretch;
	text-align: center;
}

.epp-layout-vertical .epp-cover {
	align-self: center;
	flex-basis: auto;
	width: min(var(--epp-cover-size), 100%);
}

.epp-layout-vertical .epp-info { align-items: center; }
.epp-layout-vertical .epp-controls { justify-content: center; flex-direction: column; }

/* Automatic stacking when the container (column) is narrow */
@container (max-width: 560px) {
	.epp-player {
		flex-direction: column;
		align-items: stretch;
		text-align: center;
		padding: 20px;
	}

	.epp-cover {
		align-self: center;
		flex-basis: auto;
		width: min(var(--epp-cover-size), 100%);
	}

	.epp-info { align-items: center; }

	.epp-controls {
		flex-direction: column;
		justify-content: center;
	}

	.epp-transport { gap: 22px; }
}

/* Very small: hide the volume slider, keep mute button (mobile devices use
   hardware volume keys; many iOS versions ignore audio.volume anyway). */
@container (max-width: 340px) {
	.epp-volume-slider { display: none; }
	.epp-transport { gap: 12px; }
}

/* Fallback for browsers without container query support */
@supports not (container-type: inline-size) {
	@media (max-width: 600px) {
		.epp-player { flex-direction: column; align-items: stretch; text-align: center; }
		.epp-cover { align-self: center; }
		.epp-info { align-items: center; }
		.epp-controls { flex-direction: column; }
	}
}

/* -------------------------------------------------------------------------
   9. Accessibility & editor
   ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
	.epp-player *,
	.epp-player *::before,
	.epp-player *::after {
		transition: none !important;
		animation-duration: 1.5s !important;
	}
}

.epp-editor-notice {
	padding: 16px;
	border: 1px dashed #9aa1ad;
	border-radius: 8px;
	text-align: center;
	color: #6b7280;
	font-size: 13px;
}
