/* ==========================================================================
   Product Reviews page (product-details/<slug>/reviews)
   Also loaded on product_details so the embedded review photos reuse the
   same thumbnail/lightbox styles (.pi-review-images / .prv-review-img).

   Uses only the global theme tokens (light + dark) — no hard-coded colours.
   Direction-safe: logical properties everywhere (LTR + RTL).
   ========================================================================== */

.prv-area {
	--prv-star: var(--statr-color, #fba707);   /* your token is spelled --statr-color */
	--prv-ease: cubic-bezier(0.22, 0.61, 0.36, 1);

	padding: var(--spacing-2xl) 0 var(--spacing-4xl);
}

/* ── Product shortcut card ── */
.prv-product {
	display: flex;
	align-items: center;
	gap: var(--spacing-md);
	margin-bottom: var(--spacing-2xl);
	padding: var(--spacing-md) var(--spacing-lg);
	border: 1px solid var(--border-light);
	border-radius: var(--radius-lg);
	background: var(--bg-card);
	color: inherit;
	text-decoration: none;
	transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}

.prv-product:hover {
	border-color: var(--primary-color);
	box-shadow: var(--shadow-light);
}

.prv-product:focus-visible {
	outline: 3px solid var(--primary-light);
	outline-offset: 2px;
}

.prv-product-img {
	flex-shrink: 0;
	width: 54px;
	height: 54px;
	overflow: hidden;
	border-radius: var(--radius-md);
	background: var(--bg-secondary);
}

.prv-product-img img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.prv-product-info {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.prv-product-label {
	font-size: var(--font-size-xs);
	color: var(--text-muted);
}

.prv-product-name {
	overflow: hidden;
	font-size: var(--font-size-md);
	font-weight: 700;
	color: var(--text-primary);
	white-space: nowrap;
	text-overflow: ellipsis;
}

.prv-product-cta {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-inline-start: auto;
	font-size: var(--font-size-base);
	font-weight: 600;
	color: var(--primary-color);
	white-space: nowrap;
}

/* arrow icon points "forward": flip it in RTL */
[dir="rtl"] .prv-product-cta svg {
	transform: scaleX(-1);
}

/* ── Layout ── */
.prv-layout {
	display: grid;
	grid-template-columns: 320px minmax(0, 1fr);
	gap: var(--spacing-2xl);
	align-items: start;
}

/* ── Summary card ── */
.prv-summary {
	position: sticky;
	top: calc(var(--header-height) + var(--spacing-lg));
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--spacing-sm);
	padding: var(--spacing-2xl);
	border: 1px solid var(--border-light);
	border-radius: var(--radius-lg);
	background: var(--bg-card);
	text-align: center;
}

.prv-avg {
	margin: 0;
	font-size: 44px;
	font-weight: 800;
	line-height: 1;
	color: var(--text-primary);
	font-variant-numeric: tabular-nums;
}

.prv-stars {
	display: flex;
	justify-content: center;
}

.prv-count {
	margin: 0;
	font-size: var(--font-size-base);
	color: var(--text-muted);
}

.prv-bars {
	display: flex;
	flex-direction: column;
	gap: var(--spacing-sm);
	width: 100%;
	margin-top: var(--spacing-md);
}

.prv-bar-row {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 2px var(--spacing-xs);
	border-radius: var(--radius-sm);
	color: inherit;
	text-decoration: none;
	transition: background-color var(--transition-fast);
}

.prv-bar-row:hover {
	background: var(--bg-hover);
}

.prv-bar-row:focus-visible {
	outline: 3px solid var(--primary-light);
	outline-offset: 1px;
}

.prv-bar-row.is-active {
	outline: 2px solid var(--primary-color);
	outline-offset: 0;
	background: var(--primary-more-light);
}

.prv-bar-row[aria-disabled="true"] {
	opacity: 0.55;
	cursor: default;
	pointer-events: none;
}

.prv-bar-label {
	display: inline-flex;
	align-items: center;
	gap: 3px;
	min-width: 22px;
	font-size: var(--font-size-xs);
	font-weight: 600;
	color: var(--text-secondary);
}

.prv-bar-label svg {
	width: 12px;
	height: 12px;
	fill: var(--prv-star);
}

.prv-bar-track {
	flex: 1;
	height: 8px;
	overflow: hidden;
	border-radius: var(--radius-badge);
	background: var(--bg-tertiary);
}

.prv-bar-fill {
	display: block;
	height: 100%;
	border-radius: var(--radius-badge);
	background: var(--prv-star);
	transition: width 0.4s var(--prv-ease);
}

.prv-bar-meta {
	min-width: 58px;
	font-size: var(--font-size-xs);
	color: var(--text-muted);
	text-align: end;
	font-variant-numeric: tabular-nums;
}

.prv-clear-filter {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-top: var(--spacing-sm);
	font-size: var(--font-size-base);
	font-weight: 600;
	color: var(--primary-color);
	text-decoration: none;
}

.prv-clear-filter:hover {
	text-decoration: underline;
}

.prv-clear-filter:focus-visible {
	outline: 3px solid var(--primary-light);
	outline-offset: 2px;
	border-radius: var(--radius-sm);
}

/* ── Reviews list ── */
.prv-list {
	display: flex;
	flex-direction: column;
	gap: var(--spacing-lg);
	min-width: 0;
}

.prv-filter-note {
	margin: 0;
	font-size: var(--font-size-base);
	color: var(--text-muted);
}

.prv-review {
	display: flex;
	flex-direction: column;
	gap: var(--spacing-sm);
	padding: var(--spacing-xl);
	border: 1px solid var(--border-light);
	border-radius: var(--radius-lg);
	background: var(--bg-card);
}

.prv-review-head {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--spacing-md);
}

.prv-avatar {
	flex-shrink: 0;
	width: 42px;
	height: 42px;
	overflow: hidden;
	border-radius: var(--radius-full);
	background: var(--bg-secondary);
}

.prv-avatar img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.prv-review-meta {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.prv-review-name {
	margin: 0;
	overflow-wrap: anywhere;
	font-size: var(--font-size-base);
	font-weight: 700;
	color: var(--text-primary);
}

.prv-review-date {
	font-size: var(--font-size-xs);
	color: var(--text-muted);
}

.prv-stars-inline {
	display: inline-flex;
	gap: 2px;
	margin-inline-start: auto;
}

.prv-star {
	width: 16px;
	height: 16px;
}

.prv-star.is-filled {
	fill: var(--prv-star);
	color: var(--prv-star);
}

.prv-star.is-empty {
	fill: var(--border-light);
	color: var(--border-light);
}

.prv-verified-badge {
	display: inline-flex;
	align-items: center;
	align-self: flex-start;
	gap: 6px;
	padding: 3px 10px;
	border-radius: var(--radius-badge);
	background: var(--primary-more-light);
	color: var(--primary-color);
	font-size: var(--font-size-xs);
	font-weight: 600;
}

.prv-verified-badge svg {
	width: 13px;
	height: 13px;
}

.prv-review-title {
	margin: 0;
	overflow-wrap: anywhere;
	font-size: var(--font-size-md);
	font-weight: 700;
	color: var(--text-primary);
}

.prv-review-text {
	margin: 0;
	overflow-wrap: anywhere;
	font-size: var(--font-size-base);
	line-height: 1.7;
	color: var(--text-secondary);
}

.prv-empty {
	margin: 0;
	padding: var(--spacing-4xl) var(--spacing-xl);
	border: 1px dashed var(--border-primary);
	border-radius: var(--radius-lg);
	background: var(--bg-card);
	font-size: var(--font-size-base);
	color: var(--text-muted);
	text-align: center;
}

/* ── Review photos (page + embedded product-details preview) ── */
.prv-review-images,
.pi-review-images {
	display: flex;
	flex-wrap: wrap;
	gap: var(--spacing-sm);
}

.prv-review-img,
.pi-review-img {
	display: block;
	width: 88px;
	height: 88px;
	padding: 0;
	overflow: hidden;
	border: 1px solid var(--border-light);
	border-radius: var(--radius-md);
	background: var(--bg-secondary);
	cursor: zoom-in;
	transition:
		border-color var(--transition-fast),
		transform var(--transition-fast),
		box-shadow var(--transition-fast);
}

.prv-review-img:hover,
.pi-review-img:hover {
	border-color: var(--primary-color);
	box-shadow: var(--shadow-medium);
	transform: translateY(-2px);
}

.prv-review-img:focus-visible,
.pi-review-img:focus-visible {
	outline: 3px solid var(--primary-light);
	outline-offset: 2px;
}

.prv-review-img img,
.pi-review-img img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* ==========================================================================
   Lightbox  (markup injected by js/products/review-images.js)

   States:   [hidden]            → display:none (removed from the page)
             .is-open            → visible (drives the enter / exit animation)
             .is-loading         → spinner while the photo downloads
             img.is-loaded       → photo fades + scales in
   ========================================================================== */
.prv-lightbox {
	--prv-lb-dur: 0.28s;
	--prv-lb-ease: cubic-bezier(0.22, 0.61, 0.36, 1);

	position: fixed;
	inset: 0;
	z-index: 2000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--spacing-xl);
	background: var(--bg-modal);
	-webkit-backdrop-filter: blur(0);
	backdrop-filter: blur(0);
	opacity: 0;
	transition:
		opacity var(--prv-lb-dur) ease,
		-webkit-backdrop-filter var(--prv-lb-dur) ease,
		backdrop-filter var(--prv-lb-dur) ease;
}

/* THE FIX: `display:flex` above beats the browser's [hidden] rule,
   so the dark overlay stayed on screen after the image was removed. */
.prv-lightbox[hidden] {
	display: none;
}

.prv-lightbox.is-open {
	opacity: 1;
	-webkit-backdrop-filter: blur(4px);
	backdrop-filter: blur(4px);
}

.prv-lightbox__img {
	display: block;
	max-width: 100%;
	max-height: calc(100dvh - (var(--spacing-xl) * 2));
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-heavy);
	object-fit: contain;
	opacity: 0;
	transform: translateY(14px) scale(0.94);
	transition:
		opacity var(--prv-lb-dur) ease,
		transform 0.36s var(--prv-lb-ease);
}

.prv-lightbox.is-open .prv-lightbox__img.is-loaded {
	opacity: 1;
	transform: none;
	transition-delay: 0.05s;
}

/* spinner while the photo loads */
.prv-lightbox__spinner {
	position: absolute;
	inset-block-start: 50%;
	inset-inline-start: 50%;
	width: 36px;
	height: 36px;
	margin: -18px 0 0 -18px;
	border: 3px solid color-mix(in srgb, var(--text-white) 25%, transparent);
	border-top-color: var(--text-white);
	border-radius: var(--radius-full);
	opacity: 0;
	visibility: hidden;
	animation: prv-lb-spin 0.8s linear infinite;
	transition: opacity var(--transition-fast), visibility 0s linear 0.15s;
}

[dir="rtl"] .prv-lightbox__spinner {
	margin: -18px -18px 0 0;
}

.prv-lightbox.is-loading .prv-lightbox__spinner {
	opacity: 1;
	visibility: visible;
	transition-delay: 0s;
}

/* close button */
.prv-lightbox__close {
	position: absolute;
	inset-block-start: calc(var(--spacing-lg) + env(safe-area-inset-top, 0px));
	inset-inline-end: var(--spacing-lg);
	display: flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	border: 0;
	border-radius: var(--radius-full);
	background: color-mix(in srgb, var(--text-white) 16%, transparent);
	color: var(--text-white);
	cursor: pointer;
	opacity: 0;
	transform: scale(0.7) rotate(-45deg);
	transition:
		opacity var(--prv-lb-dur) ease,
		transform 0.36s var(--prv-lb-ease),
		background-color var(--transition-fast);
}

.prv-lightbox.is-open .prv-lightbox__close {
	opacity: 1;
	transform: none;
	transition-delay: 0.08s, 0.08s, 0s;
}

.prv-lightbox__close:hover {
	background: color-mix(in srgb, var(--text-white) 30%, transparent);
}

.prv-lightbox.is-open .prv-lightbox__close:hover {
	transform: rotate(90deg);
	transition-delay: 0s;
}

.prv-lightbox__close:focus-visible {
	outline: 2px solid var(--text-white);
	outline-offset: 2px;
}

/* stop the page behind from scrolling / shifting while open */
body.prv-lightbox-open {
	overflow: hidden !important;
	padding-inline-end: var(--prv-scrollbar-w, 0);
}

@keyframes prv-lb-spin {
	to {
		transform: rotate(1turn);
	}
}

/* ── Responsive ── */
@media (max-width: 1024px) {
	.prv-layout {
		grid-template-columns: minmax(0, 1fr);
	}

	.prv-summary {
		position: static;
	}
}

@media (max-width: 640px) {
	.prv-area {
		padding-block: var(--spacing-lg) var(--spacing-3xl);
	}

	.prv-review {
		padding: var(--spacing-lg);
	}

	.prv-product-cta span {
		display: none;
	}

	.prv-stars-inline {
		width: 100%;
		margin-inline-start: 0;
	}

	.prv-review-img,
	.pi-review-img {
		width: 72px;
		height: 72px;
	}

	.prv-avg {
		font-size: 36px;
	}

	.prv-lightbox {
		padding: var(--spacing-md);
	}

	.prv-lightbox__img {
		max-height: calc(100dvh - (var(--spacing-md) * 2));
	}

	.prv-lightbox__close {
		inset-inline-end: var(--spacing-md);
		width: 44px;
		height: 44px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.prv-lightbox,
	.prv-lightbox__img,
	.prv-lightbox__close,
	.prv-bar-fill,
	.prv-review-img,
	.pi-review-img {
		transition-duration: 0.01ms !important;
		transition-delay: 0s !important;
	}

	.prv-review-img:hover,
	.pi-review-img:hover {
		transform: none;
	}
}