/**
 * [de_reviews] — two rows of review cards scrolling in opposite directions.
 *
 * Card layout follows the supplied reference: author and date top left, the
 * source platform's logo top right, a row of stars with a verified tick, the
 * review, then "Read more".
 *
 * Do NOT use --theme-font-family here. Blocksy rebinds it inside headings, so
 * it resolves to the theme serif.
 */

.de-rv {
	--de-rv-card-w: 297px;
	--de-rv-gap: 20px;
	--de-rv-speed: 120s;

	--de-rv-ink: #202124;
	--de-rv-muted: #80868b;
	--de-rv-line: #e6e8eb;
	--de-rv-star: #fbbc04;

	width: 100%;
}

/* ---------------------------------------------------------------- header -- */

.de-rv-header {
	text-align: center;
	margin: 0 auto 30px;
	max-width: 620px;
	padding: 0 16px;
}

/* The font MUST be stated explicitly.
 *
 * Leaving an h2 to inherit does not give the site's heading font: Blocksy's
 * default heading family is Merriweather, a serif, so the heading rendered in
 * serif against a page whose h1 and every Elementor card heading are Raleway.
 * Do not "simplify" this by removing the font-family, and do not reach for
 * --theme-font-family either, which Blocksy rebinds inside headings to the
 * same serif. Raleway is already loaded by the page, so this costs no extra
 * font request. */
/*
 * Values are matched to the page's existing h1 ("BEST ETHIOPIA TOURS") so this
 * section heading reads as part of the same site rather than a bolted-on
 * component. Measured from the live page at a 1512px viewport:
 *   Raleway 700, 56.88px, letter-spacing -3.6px, line-height 1.15, #212529.
 *
 * -3.6px at 56.88px is -0.063em, expressed in em so the tracking stays
 * proportional as the clamp scales the size down on smaller screens.
 * 3.76vw is 56.88px at 1512px, so the desktop size lands on the same number.
 *
 * Uppercase is applied here rather than typed into the heading text, so the
 * `heading` shortcode attribute can be written normally and still render in
 * the site's style.
 */
.de-rv-title {
	margin: 0;
	font-family: Raleway, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
	font-size: clamp(28px, 3.76vw, 57px);
	line-height: 1.15;
	font-weight: 700;
	letter-spacing: -0.063em;
	text-transform: uppercase;
	color: #212529;
}

/* Off by default. Kept so the `subhead` attribute still works if a line under
   the heading is ever wanted. */
.de-rv-sub {
	margin: 12px 0 0;
	font-family: Raleway, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
	font-size: 16px;
	line-height: 1.5;
	color: var(--de-rv-muted);
}

/* Each row clips its own track and fades both edges, so cards ease in and out
   instead of being chopped at a hard line. */
.de-rv-viewport {
	overflow: hidden;
	padding: 6px 0;
	-webkit-mask-image: linear-gradient(to right, transparent, #000 5%, #000 95%, transparent);
	mask-image: linear-gradient(to right, transparent, #000 5%, #000 95%, transparent);
}

.de-rv-viewport + .de-rv-viewport { margin-top: var(--de-rv-gap); }

/* Deliberately no `gap`. Spacing is margin-right on each card so a card
   occupies exactly (width + gap). With flex gap, N cards measure
   N*W + (N-1)*G while a seamless loop must travel N*(W+G), leaving -50% half a
   gap short and producing a visible jump once per cycle. */
.de-rv-track {
	display: flex;
	width: max-content;
	will-change: transform;
}

/* The marquee that used to live here is gone: no keyframes, no duplicated
   card set, no pause-on-hover. Motion is now user-initiated only, in
   assets/reviews-nav.js. .de-rv-track keeps display:flex because the
   carousel still lays cards out in a row. */

/* ------------------------------------------------------------------ card -- */

/* Fixed width and min-height is what keeps the cards aligned. Card height used
   to follow the length of the review, so the rows staggered. */
.de-rv-card {
	flex: 0 0 var(--de-rv-card-w);
	width: var(--de-rv-card-w);
	min-height: 220px;
	margin: 0 var(--de-rv-gap) 0 0;
	padding: 18px 18px 16px;
	display: flex;
	flex-direction: column;
	box-sizing: border-box;
	background: #fff;
	border: 1px solid var(--de-rv-line);
	border-radius: 14px;
	box-shadow: 0 1px 3px rgb(17 21 24 / 6%);
}

.de-rv-head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 12px;
	margin-bottom: 12px;
}

.de-rv-who {
	display: flex;
	flex-direction: column;
	min-width: 0;
}

.de-rv-name {
	font-size: 15px;
	font-weight: 700;
	line-height: 1.3;
	color: var(--de-rv-ink);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.de-rv-when {
	margin-top: 2px;
	font-size: 14px;
	color: var(--de-rv-muted);
}

.de-rv-logo {
	flex: 0 0 auto;
	line-height: 0;
}

.de-rv-logo-svg {
	width: 26px;
	height: 26px;
	display: block;
}

.de-rv-rating {
	display: flex;
	align-items: center;
	gap: 7px;
	margin-bottom: 14px;
}

.de-rv-stars {
	color: var(--de-rv-star);
	font-size: 21px;
	line-height: 1;
	letter-spacing: 1px;
	white-space: nowrap;
}

.de-rv-star.is-empty { color: var(--de-rv-line); }

.de-rv-verified {
	width: 18px;
	height: 18px;
	flex: 0 0 auto;
	display: block;
}

/* The clamp is a safety net. Text is trimmed in PHP already, but a long
   unbroken word or a font-size override must not blow the card open. */
.de-rv-text {
	flex: 1 1 auto;
	margin: 0 0 14px;
	padding: 0;
	border: 0;
	quotes: none;
	font-size: 13px;
	line-height: 1.55;
	color: var(--de-rv-ink);
	overflow-wrap: anywhere;
	display: -webkit-box;
	-webkit-line-clamp: 4;
	line-clamp: 4;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.de-rv-text::before,
.de-rv-text::after { content: none; }

.de-rv-link {
	margin-top: auto;
	align-self: flex-start;
	font-size: 13px;
	color: var(--de-rv-muted);
	text-decoration: none;
}

.de-rv-link:hover,
.de-rv-link:focus {
	color: var(--de-rv-ink);
	text-decoration: underline;
}

/* Visually hidden, still read aloud. Gives every "Read more" a unique,
   meaningful label instead of 27 identical ones. */
.de-rv .screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

.de-rv-more {
	margin: 22px 0 0;
	text-align: center;
	font-size: 14px;
	color: var(--de-rv-muted);
}

.de-rv-more a {
	color: var(--de-rv-ink);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.de-rv-more span { margin: 0 8px; color: #c4c7c9; }

/* ----------------------------------------------------------- responsive -- */

@media (max-width: 767px) {
	.de-rv { --de-rv-card-w: 280px; --de-rv-gap: 14px; }
	.de-rv-card { min-height: 274px; padding: 18px 20px; }
	.de-rv-name { font-size: 14px; }
	.de-rv-header { margin-bottom: 22px; }
	.de-rv-sub { font-size: 15px; }
	.de-rv-text { -webkit-line-clamp: 5; line-clamp: 5; }
}

/* Motion is decorative. If it is unwanted, stop it and hand over a normal
   scrollable strip rather than trapping the later reviews off-screen. */
@media (prefers-reduced-motion: reduce) {
	.de-rv-track {
		width: auto;
	}
	.de-rv-viewport {
		overflow-x: auto;
		-webkit-mask-image: none;
		mask-image: none;
		scroll-snap-type: x mandatory;
	}
	.de-rv-card { scroll-snap-align: start; }
	.de-rv-card[aria-hidden="true"] { display: none; }
}


/* ===================================================================== *
 * v2: static layout. Aggregate rail + manually paged carousel.
 *
 * Everything that made this move on its own has been removed: the marquee
 * keyframes, the two counter-scrolling rows, the pause-on-hover that existed
 * only because it was moving in the first place.
 * ===================================================================== */

.de-rv-layout {
	display: grid;
	gap: 32px;
	align-items: start;
}

@media (min-width: 900px) {
	.de-rv-layout { grid-template-columns: 220px 1fr; gap: 44px; }
}

/* ------------------------------------------------- the aggregate rail -- */

.de-rv-agg__word {
	font-family: Poppins, system-ui, sans-serif;
	font-size: 26px;
	font-weight: 700;
	letter-spacing: .01em;
	margin: 0 0 10px;
	color: #111518;
}

/* Card geometry measured off the reference implementation: 300x245, 14px
   radius, 20px/20px/18px padding. */

.de-rv-agg__marks {
	margin: 0 0 12px;
	font-size: 24px;   /* a touch larger than the cards': this is the headline rating */
}

/* Owl and wordmark as one lockup, not a text link with an icon near it. */
.de-rv-agg__src {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	font-weight: 600;
	font-size: 15px;
	color: #111518;
	text-decoration: none;
	border-bottom: 0;
}

.de-rv-agg__src .de-rv-logo-svg { width: 22px; height: 22px; display: block; }
.de-rv-agg__src span { border-bottom: 1px solid transparent; }
.de-rv-agg__src:hover span { border-bottom-color: #111518; }

.de-rv-agg__line {
	margin: 0 0 6px;
	font-size: 15px;
	color: #3f4245;
}

.de-rv-agg__line strong { color: #111518; font-size: 17px; }

.de-rv-agg__src {
	font-size: 14px;
	color: #0d9693;
	text-decoration: none;
	border-bottom: 1px solid rgba(13, 150, 147, .35);
}

.de-rv-agg__src:hover { border-bottom-color: #0d9693; }

/* ----------------------------------------------------- the carousel -- */

.de-rv-carousel {
	position: relative;
	display: flex;
	align-items: center;
	gap: 10px;
	min-width: 0;   /* lets the viewport shrink inside the grid column */
}

.de-rv-viewport {
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
	min-width: 0;
	flex: 1;
}

.de-rv-viewport::-webkit-scrollbar { display: none; }

.de-rv-viewport:focus-visible {
	outline: 2px solid #0d9693;
	outline-offset: 4px;
	border-radius: 12px;
}

.de-rv-track {
	display: flex;
	align-items: stretch;
}

.de-rv-track > * { scroll-snap-align: start; }

/*
 * The arrows are hidden until the script wires them up, and hidden again if
 * everything already fits. A dead button is worse than no button.
 */
.de-rv-nav {
	display: none;
	flex: 0 0 auto;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	border: 1px solid #eaeaec;
	background: #fff;
	color: #111518;
	cursor: pointer;
	align-items: center;
	justify-content: center;
	transition: border-color .16s ease, color .16s ease, opacity .16s ease;
}

.de-rv-carousel.is-ready.is-scrollable .de-rv-nav { display: inline-flex; }

.de-rv-nav svg { width: 20px; height: 20px; display: block; }
.de-rv-nav:hover:not(:disabled) { border-color: #f78f1e; color: #f78f1e; }
.de-rv-nav:disabled { opacity: .3; cursor: default; }

.de-rv-nav:focus-visible {
	outline: 2px solid #0d9693;
	outline-offset: 2px;
}

.de-rv-more {
	margin-top: 26px;
	font-size: 14px;
	color: #767b80;
	text-align: center;
}

.de-rv-more a { color: #0d9693; text-decoration: none; }
.de-rv-more a:hover { text-decoration: underline; }


/* ------------------------------------------------------- v2.3 additions -- */

/*
 * Reviewer avatar: 42px, matching the reference. An initial rather than a
 * photo, because we do not have reviewer photos and inventing them would be
 * worse than a monogram.
 */
.de-rv-avatar {
	flex: 0 0 auto;
	width: 42px;
	height: 42px;
	border-radius: 50%;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: #fff;
	font-family: Poppins, system-ui, sans-serif;
	font-size: 17px;
	font-weight: 600;
	line-height: 1;
	margin-right: 11px;
	user-select: none;
}

/* The source line carries the marks now, not just words. */
.de-rv-more {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 8px 20px;
}

.de-rv-more__label { color: #767b80; }

.de-rv-more a {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	color: #111518;
	font-weight: 600;
	text-decoration: none;
}

.de-rv-more a .de-rv-logo-svg { width: 20px; height: 20px; display: block; }
.de-rv-more a span { border-bottom: 1px solid transparent; }
.de-rv-more a:hover span { border-bottom-color: #111518; }


/* ------------------------------------------------------- v2.4 corrections -- */

/*
 * Avatar and name sit together; only the source logo goes right.
 *
 * .de-rv-head is a flex row with space-between and three children, so the
 * avatar, the name block and the logo were each pushed apart, opening a gap
 * between the avatar and the name it belongs to. Anchoring the logo with
 * margin-left:auto lets the first two sit as one unit.
 */
.de-rv-head {
	justify-content: flex-start;
	gap: 11px;
}

.de-rv-logo { margin-left: auto; }

/* The flex gap already spaces these; the margin was doubling it. */
.de-rv-avatar { margin-right: 0; }

/* No shadow on the cards. The border alone carries the edge. */
/*
 * The card floats rather than being drawn.
 *
 * The border and the shadow were doing the same job twice, and the hairline
 * was the one that read as a boundary, so the card sat flat on the section
 * instead of above it. Depth alone separates a card from white better than a
 * 1px line does, because the eye reads the soft edge as distance.
 *
 * The border is kept at transparent rather than removed. box-sizing is
 * border-box so the geometry would not move either way, but leaving the
 * declaration in place means the 297px card width stays derived from one set
 * of numbers, and anyone reinstating a visible edge changes a colour rather
 * than re-deriving the box.
 *
 * Two shadows, not one: the tight 2px pass keeps the edge defined against
 * white, and the wide 18px pass is what actually lifts it. A single large
 * shadow at this opacity goes muddy at the corners.
 */
.de-rv-card {
	border-color: transparent;
	box-shadow:
		0 1px 2px rgb(17 21 24 / 6%),
		0 6px 18px rgb(17 21 24 / 8%);
}

/*
 * Hover is a weight change, nothing else.
 *
 * The border-bottom I added sat underneath the theme's own text-decoration, so
 * hovering drew two lines. Removing the decoration outright and shifting
 * weight avoids that, and avoids the layout shifting as a line appears.
 */
.de-rv-more a,
.de-rv-agg__src {
	text-decoration: none;
}

.de-rv-more a span,
.de-rv-agg__src span {
	border-bottom: 0;
	transition: font-weight .12s ease;
}

.de-rv-more a:hover span,
.de-rv-more a:focus-visible span,
.de-rv-agg__src:hover span,
.de-rv-agg__src:focus-visible span {
	border-bottom: 0;
	font-weight: 700;
	text-decoration: none;
}


/*
 * Card sizing history: the reference is 300x245. Scaled to 270x220, then the
 * width put back up 10% to 297 at the client's request. Height stays at the
 * reduced min-height, and the wider measure fits more per line, so the cards
 * should settle a little shorter than they were at 270.
 */
.de-rv-more__label { display: none; }


/* The rating, the word "from" and the Tripadvisor lockup now share one line. */
.de-rv-agg__line {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 7px;
	margin: 0;
}

.de-rv-agg__from { color: #3f4245; }


/*
 * Stop the shadow being guillotined by the scroll container.
 *
 * .de-rv-viewport sets overflow-x: auto, and the spec then computes
 * overflow-y to a non-visible value: a box cannot clip on one axis and
 * overflow on the other. So the viewport clips vertically whether or not
 * anything asked it to, and it had 6px of vertical padding while the card's
 * shadow reaches 12px above and 24px below. The soft falloff was being cut
 * off mid-fade, which is exactly the straight line where grey meets white.
 *
 * The fix is room, not a softer shadow: pad the viewport past the shadow's
 * reach, then pull the same amount back with negative margin so the section's
 * vertical rhythm is unchanged. The shadow now ends where it fades out rather
 * than where the box stops.
 *
 * The horizontal mask is respecified here because it must now span the padded
 * box. Its stops move in from 5%/95% to 3%/97%: the padding widened the
 * masked area, and at the old percentages the fade started eating into the
 * first and last card instead of just the edge.
 */
.de-rv-viewport {
	padding: 16px 0 28px;
	margin: -16px 0 -28px;
	-webkit-mask-image: linear-gradient(to right, transparent, #000 3%, #000 97%, transparent);
	mask-image: linear-gradient(to right, transparent, #000 3%, #000 97%, transparent);
}

/*
 * A third, very wide, very faint pass. With the clipping gone the falloff is
 * visible along its whole length, so it is worth making that length longer:
 * 2% over 36px reads as the card sitting above the page rather than as a
 * drawn edge.
 */
.de-rv-card {
	box-shadow:
		0 1px 2px rgb(17 21 24 / 6%),
		0 6px 18px rgb(17 21 24 / 7%),
		0 14px 36px rgb(17 21 24 / 2%);
}

/* No mask on small screens, so no padded box to compensate for either. */
@media (max-width: 619px) {
	.de-rv-viewport {
		-webkit-mask-image: none;
		mask-image: none;
	}
}


/* ===================================================================== *
 * v3.0 "What travellers say" (2026-09-27)
 * Intro line, a trust bar of the two platform scores, six featured cards
 * in the scroll-snap carousel, then "See all reviews" links.
 * ===================================================================== */

.de-rv--v3 .de-rv-header { max-width: 760px; margin-bottom: 22px; }
.de-rv--v3 .de-rv-sub { margin-top: 14px; font-size: 17px; color: #5f6368; }

.de-rv-badges {
	list-style: none;
	margin: 0 auto 30px;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 12px 16px;
}
.de-rv-badges li { margin: 0; }

.de-rv-badge {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 10px 18px;
	border: 1px solid #e6e8eb;
	border-radius: 999px;
	background: #fff;
	color: #111518;
	text-decoration: none;
	font-size: 15px;
	line-height: 1;
	transition: border-color .16s ease, box-shadow .16s ease;
}
.de-rv-badge:hover,
.de-rv-badge:focus-visible { border-color: #0d9693; box-shadow: 0 4px 14px rgb(17 21 24 / 8%); }
.de-rv-badge:focus-visible { outline: 2px solid #0d9693; outline-offset: 2px; }
.de-rv-badge__logo { line-height: 0; }
.de-rv-badge__logo .de-rv-logo-svg { width: 22px; height: 22px; }
.de-rv-badge__name { font-weight: 600; }
.de-rv-badge__score { font-size: 17px; font-weight: 800; }
.de-rv-badge__stars { font-size: 16px; }
.de-rv-badge__count { color: #5f6368; }

.de-rv--v3 .de-rv-when { font-size: 13px; }
.de-rv--v3 .de-rv-text { font-size: 14px; -webkit-line-clamp: 4; line-clamp: 4; }
.de-rv--v3 .de-rv-card { min-height: 214px; }

.de-rv--v3 .de-rv-more { margin-top: 24px; gap: 10px 26px; }
.de-rv--v3 .de-rv-more a { color: #0d9693; }
.de-rv--v3 .de-rv-more a span { color: #0d9693; }

@media (max-width: 560px) {
	.de-rv-badge { padding: 9px 14px; font-size: 14px; }
	.de-rv--v3 .de-rv-sub { font-size: 16px; }
}
@media (prefers-reduced-motion: reduce) {
	.de-rv-badge { transition: none; }
}
