/*
=========================================================
TESTIMONIALS CAROUSEL STYLESHEET - Joshua Dalton Media
=========================================================

Purpose
-------
Shared component styles for the review carousel used on
any page that includes a testimonials section. Handles
the slider layout, dot navigation, and review card skin.

What belongs in this file
-------------------------
- .testimonials section wrapper and glow
- .testimonials-body flex container and header alignment
- .review-slider / .review-track / .review-slide layout
- .review-controls and .review-dot progress navigation
- .review-card skin and all inner element styles
- Responsive breakpoints for the above
- Hover states for review cards

Asset path usage
----------------
<link rel="stylesheet" href="/assets/css/testimonials.css">

Load after global.css and lightbox.css (cards open the
lightbox on click via commercial-page.js).

Maintenance rule
----------------
Keep this file component-scoped. Page-specific padding
overrides on .testimonials belong in the page skin file.
Shared layout and card skin changes belong here.
=========================================================
*/

/* ================= SECTION WRAPPER ================= */
.testimonials{position:relative;padding:28px 0 24px;overflow:hidden;border-top:1px solid var(--line)}
.testimonials-glow{position:absolute;top:50%;left:50%;width:min(900px,100vw);height:500px;transform:translate(-50%,-50%);background:radial-gradient(ellipse at center,rgba(255,77,77,.06) 0%,rgba(255,77,77,.015) 45%,transparent 70%);pointer-events:none}

/* ================= CONTAINER ================= */
.testimonials-body{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:18px}
.testimonials-header{text-align:center;align-items:center;justify-items:center}
.testimonials-header .measure-wide{margin-left:auto;margin-right:auto}
.testimonials-body .btn.ghost{margin-top:0}

/* ================= SLIDER ================= */
.review-slider{width:min(calc(100% - (var(--gutter) * 2)),var(--container-full));margin-inline:auto;overflow:hidden;padding-top:8px}
.review-track{display:flex;gap:12px;transition:transform .55s cubic-bezier(.25,.46,.45,.94);will-change:transform}
.review-slide{flex:0 0 100%;min-width:0;display:flex;flex-direction:column}

/* ================= DOT NAVIGATION ================= */
.review-controls{display:flex;justify-content:center;padding:4px 0;margin-bottom:-8px}
.review-dots{display:flex;gap:6px;align-items:center}
.review-dot{position:relative;width:20px;height:28px;border-radius:2px;background:rgba(255,255,255,.15);background-clip:content-box;border:none;padding:12px 0;cursor:pointer;overflow:hidden;transition:width .3s ease;flex-shrink:0}
.review-dot.is-active{width:44px;background:rgba(255,77,77,.2);background-clip:content-box}
.review-dot::after{content:"";position:absolute;top:12px;bottom:12px;left:0;right:0;background:var(--accent);transform:scaleX(0);transform-origin:left;border-radius:inherit}
.review-dot.is-active::after{animation:review-dot-fill 6s linear forwards}
@keyframes review-dot-fill{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@media(prefers-reduced-motion:reduce){.review-track{transition:none}.review-dot.is-active::after{animation:none;transform:scaleX(1)}}

/* ================= REVIEW CARD ================= */
.review-card{position:relative;width:100%;height:100%;background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.015));border:1px solid rgba(255,255,255,.08);border-radius:var(--radius);padding:.85rem;box-shadow:0 8px 32px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.05);backdrop-filter:blur(12px) saturate(130%);-webkit-backdrop-filter:blur(12px) saturate(130%);overflow:hidden;display:flex;flex-direction:column;gap:.4rem;transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease;cursor:pointer;box-sizing:border-box}
.review-card:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.review-year{position:absolute;top:.6rem;right:.6rem;padding:3px 7px;border-radius:4px;background:rgba(255,77,77,.1);border:1px solid rgba(255,77,77,.22);font-size:.52rem;font-weight:700;letter-spacing:.06em;color:var(--accent);line-height:1}
.review-stars{color:var(--accent);font-size:.65rem;line-height:1;letter-spacing:.18em}
.review-quote{font-size:.78rem;line-height:1.5;color:var(--muted);margin:0;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.review-quote p{margin:0}
.review-person{display:grid;gap:3px;padding-top:.45rem;border-top:1px solid rgba(255,255,255,.06);margin-top:auto}
.review-person::before{content:"Click to read full review \2192";display:block;text-align:right;font-size:.5rem;letter-spacing:.07em;text-transform:uppercase;font-weight:700;color:var(--accent);opacity:.65;margin-bottom:4px;line-height:1}
.review-name{font-size:.62rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink);line-height:1.3}
.review-name::before{content:"- "}
.review-org{font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);font-weight:700;line-height:1.2}

/* ================= RESPONSIVE BREAKPOINTS ================= */

@media(min-width:700px){
	.testimonials{padding:clamp(36px,5vw,48px) 0 clamp(28px,4vw,36px)}
	.testimonials-body{gap:clamp(20px,3vw,28px)}
	.review-controls{margin-bottom:-10px}
	.review-slide{flex:0 0 calc(50% - 6px)}
	.review-card{padding:clamp(.9rem,1.6vw,1.1rem)}
	.review-year{font-size:clamp(.55rem,1vw,.6rem)}
	.review-stars{font-size:clamp(.7rem,1.2vw,.8rem)}
	.review-quote{font-size:clamp(.82rem,1.4vw,.92rem);-webkit-line-clamp:4}
	.review-name{font-size:clamp(.65rem,1.1vw,.72rem)}
	.review-org{font-size:clamp(.6rem,1vw,.65rem)}
}

@media(min-width:1024px){
	.testimonials{padding:56px 0 44px}
	.testimonials-body{gap:28px}
	.review-slide{flex:0 0 calc(33.333% - 8px)}
	.review-card{padding:1.15rem}
	.review-year{font-size:.6rem;top:.7rem;right:.7rem}
	.review-stars{font-size:.8rem}
	.review-quote{font-size:.9rem;-webkit-line-clamp:4}
	.review-name{font-size:.72rem}
	.review-org{font-size:.65rem}
	.review-person::before{font-size:.6rem}
}

@media(hover:hover){
	.review-card:hover{transform:translateY(-5px);box-shadow:0 16px 48px rgba(0,0,0,.55),0 0 20px rgba(255,77,77,.12),inset 0 1px 0 rgba(255,77,77,.18);border-color:rgba(255,77,77,.42)}
}
