/* =====================================================================
 * Google Reviews — coverflow carousel (homepage)
 * Markup: includes/google-reviews.php · Behaviour: assets/js/google-reviews.js
 * Without JS the reviews are a plain horizontal scroll-snap row; the script
 * adds .gr-js and positions the cards as a coverflow. Card + stage heights
 * are fixed in both modes, so nothing shifts when the script kicks in.
 * ===================================================================== */
.gr-section { overflow: hidden; }
.gr-section .eyebrow .gr-g { vertical-align: -2px; }
.gr-summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: .55rem; margin: .4rem 0 0; color: var(--muted); font-weight: 600; }
.gr-avg { font-family: var(--font-head); font-size: 1.6rem; color: var(--ink); line-height: 1; }
.gr-summary-stars { display: inline-flex; gap: 2px; }
.gr-btns { justify-content: center; margin-top: 1.2rem; }
.gr-btns .gr-g { flex: none; }

/* stars */
.gr-star { fill: #E2DDEB; flex: none; }
.gr-star.on { fill: #FBBC05; }

/* ---- stage + track ---- */
.gr-carousel { --gr-card-w: min(370px, 80vw); --gr-card-h: 330px; position: relative; }
.gr-stage { position: relative; height: calc(var(--gr-card-h) + 40px); outline: none; border-radius: var(--radius-lg); }
.gr-stage:focus-visible { box-shadow: 0 0 0 3px var(--teal); }
.gr-track { list-style: none; margin: 0; padding: 20px 4px; display: flex; gap: 1rem; overflow-x: auto; scroll-snap-type: x mandatory; height: 100%; box-sizing: border-box; }
.gr-card { flex: 0 0 var(--gr-card-w); width: var(--gr-card-w); height: var(--gr-card-h); scroll-snap-align: center; }

/* coverflow mode (JS) */
/* Perspective lives in each card's own transform (set by JS), not preserve-3d,
 * so rotated side cards stay flat layers and z-index keeps the centre on top. */
.gr-js .gr-stage { overflow: hidden; }
.gr-js .gr-track { display: block; position: relative; overflow: visible; padding: 0; }
.gr-js.gr-noanim .gr-card { transition: none; }
.gr-js .gr-card {
  position: absolute; left: 50%; top: 50%;
  margin-left: calc(var(--gr-card-w) / -2); margin-top: calc(var(--gr-card-h) / -2);
  transition: transform .75s var(--ease), opacity .75s var(--ease);
  will-change: transform, opacity;
  cursor: pointer;
}
.gr-js .gr-card.is-current { cursor: default; }
.gr-js .gr-card.is-far { opacity: 0 !important; pointer-events: none; }
.gr-js .gr-card:not(.is-current) .gr-card-inner { box-shadow: var(--shadow-sm); }

/* ---- card ---- */
.gr-card-inner {
  height: 100%; box-sizing: border-box; display: flex; flex-direction: column; gap: .6rem;
  padding: 1.3rem 1.35rem 1.1rem; background: #fff; border: 1px solid var(--line);
  border-radius: var(--radius-lg); box-shadow: var(--shadow); position: relative; overflow: hidden;
}
.gr-card-inner::before { content: ""; position: absolute; inset: 0 0 auto 0; height: 4px; background: var(--coral); opacity: 0; transition: opacity .4s; }
.gr-card.is-current .gr-card-inner { box-shadow: var(--shadow-lg); border-color: transparent; }
.gr-card.is-current .gr-card-inner::before { opacity: 1; }
.gr-card-head { display: flex; align-items: center; gap: .75rem; }
.gr-card-head > .gr-g { margin-left: auto; flex: none; }
.gr-avatar { position: relative; flex: none; width: 48px; height: 48px; border-radius: 50%; overflow: hidden; background: var(--violet); }
.gr-initial { position: absolute; inset: 0; display: grid; place-items: center; color: #fff; font-family: var(--font-head); font-weight: 700; font-size: 1.15rem; }
.gr-avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.gr-who { display: flex; flex-direction: column; min-width: 0; }
.gr-name { font-family: var(--font-head); font-weight: 600; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-decoration: none; }
a.gr-name:hover { color: var(--coral); }
.gr-date { font-size: .82rem; color: var(--muted); }
.gr-stars { display: flex; gap: 2px; }
.gr-text { flex: 1 1 auto; min-height: 0; color: var(--slate); font-size: .97rem; line-height: 1.6; overflow: hidden;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 6; line-clamp: 6; }
.gr-text p { margin: 0; }
.gr-text-empty { color: var(--muted); font-style: italic; }
.gr-card.is-expanded .gr-text { display: block; -webkit-line-clamp: unset; line-clamp: none; overflow-y: auto; overscroll-behavior: contain; padding-right: .3rem; }
.gr-more { align-self: flex-start; background: none; border: 0; padding: 0; color: var(--violet); font-weight: 700; font-size: .88rem; cursor: pointer; text-decoration: underline; text-underline-offset: 3px; }
.gr-more:hover { color: var(--coral); }
.gr-more[hidden] { display: none; }
.gr-link { display: inline-flex; align-items: center; gap: .3rem; margin-top: auto; font-size: .85rem; font-weight: 700; color: var(--teal-600); text-decoration: none; }
.gr-link:hover { color: var(--coral); }
.gr-link .mpc-icon { width: 14px; height: 14px; }

/* ---- controls ---- */
.gr-controls { display: flex; justify-content: center; gap: .7rem; margin-top: 1.2rem; }
.gr-btn { width: 46px; height: 46px; border-radius: 50%; border: 1.5px solid var(--line); background: #fff; color: var(--ink);
  display: grid; place-items: center; cursor: pointer; box-shadow: var(--shadow-sm); transition: background .2s, color .2s, transform .2s; }
.gr-btn:hover { background: var(--violet); color: #fff; transform: translateY(-2px); }
.gr-btn:focus-visible, .gr-dot:focus-visible, .gr-more:focus-visible { outline: 3px solid var(--teal); outline-offset: 2px; }
.gr-play .gr-ico-play { display: none; }
.gr-carousel.is-paused .gr-play .gr-ico-play { display: block; }
.gr-carousel.is-paused .gr-play .gr-ico-pause { display: none; }
.gr-dots { display: flex; flex-wrap: wrap; justify-content: center; gap: .45rem; margin-top: .9rem; }
.gr-dot { width: 10px; height: 10px; padding: 0; border-radius: 999px; border: 0; background: #D8D2E6; cursor: pointer; transition: width .3s var(--ease), background .3s; }
.gr-dot[aria-current="true"] { width: 26px; background: var(--coral); }
/* bigger tap targets without bigger dots */
.gr-dot { position: relative; }
.gr-dot::after { content: ""; position: absolute; inset: -8px -3px; }
.gr-controls, .gr-dots { display: none; }
.gr-js .gr-controls, .gr-js .gr-dots { display: flex; }

/* ---- phones: centre card + peeking sides ---- */
@media (max-width: 640px) {
  .gr-carousel { --gr-card-w: 78vw; --gr-card-h: 340px; }
  .gr-dots { gap: .35rem; }
  .gr-dot { width: 8px; height: 8px; }
  .gr-dot[aria-current="true"] { width: 20px; }
}

@media (prefers-reduced-motion: reduce) {
  .gr-js .gr-card, .gr-dot, .gr-btn { transition: none; }
}
