/* BrightFrame Reviews — the front end of every layout. Colors and spacing are custom properties the
   module's Design tab (and a theme) can override; the Divi 5 width rule keeps the board at its column. */
.bf_reviews { width: 100%; min-width: 0; }
.et_pb_module:has(> .et_pb_text_inner > .bf-reviews), .et_pb_module:has(> .et_pb_code_inner > .bf-reviews), .et_pb_module:has(> .bf-reviews) { width: 100%; min-width: 0; }

.bf-reviews {
  --bf-reviews-accent: var(--bf-reviews-accent-fallback, #2271b1);
  --bf-reviews-star: #FFB900;
  --bf-reviews-star-off: rgba(0, 0, 0, .14);
  --bf-reviews-ink: #1f2328;
  --bf-reviews-muted: #6b7280;
  --bf-reviews-card-bg: #fff;
  --bf-reviews-card-border: rgba(0, 0, 0, .09);
  --bf-reviews-card-shadow: 0 1px 2px rgba(0, 0, 0, .05), 0 8px 24px rgba(0, 0, 0, .06);
  --bf-reviews-radius: 14px;
  --bf-reviews-gap: 20px;
  --bf-reviews-columns: 3;
  --bf-reviews-pad: 22px;
  box-sizing: border-box; color: var(--bf-reviews-ink); line-height: 1.55; min-width: 0; position: relative;
}
.bf-reviews *, .bf-reviews *::before, .bf-reviews *::after { box-sizing: border-box; }
.bf-reviews-theme-dark {
  --bf-reviews-star-off: rgba(255, 255, 255, .18);
  --bf-reviews-ink: #f3f4f6;
  --bf-reviews-muted: #b5bcc6;
  --bf-reviews-card-bg: #1b1f27;
  --bf-reviews-card-border: rgba(255, 255, 255, .1);
  --bf-reviews-card-shadow: 0 1px 2px rgba(0, 0, 0, .3), 0 10px 28px rgba(0, 0, 0, .35);
}
.bf-reviews-heading { margin: 0 0 1em; }
.bf-reviews-align-center { text-align: center; }
.bf-reviews-align-center .bf-reviews-head, .bf-reviews-align-center .bf-reviews-meta { justify-content: center; }
.bf-reviews-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.bf-reviews-empty { color: var(--bf-reviews-muted); }
.bf-reviews-admin-note { background: #fff8e5; border: 1px solid #f5d77a; border-radius: 8px; color: #6b4e00; font: 14px/1.5 system-ui, sans-serif; padding: 10px 14px; }

/* The track. position: relative on the track AND the card: an absolutely placed child (the Accessibility blueprint's
   "(opens in a new tab)" span on every target=_blank link) is contained by the strip, not laid across the page (Joe, 2026-11-03:
   the carousel made the document 4600 px wide). */
.bf-reviews-track { list-style: none; position: relative; display: grid; gap: var(--bf-reviews-gap); grid-template-columns: repeat(var(--bf-reviews-columns), minmax(0, 1fr)); margin: 0; padding: 0; }
.bf-reviews-layout-list .bf-reviews-track, .bf-reviews-layout-single .bf-reviews-track { grid-template-columns: minmax(0, 1fr); }
@media (max-width: 980px) { .bf-reviews-track { grid-template-columns: repeat(var(--bf-reviews-columns-tablet, min(var(--bf-reviews-columns), 2)), minmax(0, 1fr)); } }
@media (max-width: 767px) { .bf-reviews-track { grid-template-columns: repeat(var(--bf-reviews-columns-phone, 1), minmax(0, 1fr)); } }

/* A card */
.bf-reviews-card { list-style: none; margin: 0; position: relative; background: var(--bf-reviews-card-bg); border: 1px solid var(--bf-reviews-card-border); border-radius: var(--bf-reviews-radius); box-shadow: var(--bf-reviews-card-shadow); display: flex; flex-direction: column; gap: 10px; min-width: 0; padding: var(--bf-reviews-pad); }
.bf-reviews-card-flat .bf-reviews-card { box-shadow: none; }
.bf-reviews-card-bare .bf-reviews-card { background: transparent; border: 0; box-shadow: none; padding: 0; }
.bf-reviews-card-bare.bf-reviews-layout-list .bf-reviews-card + .bf-reviews-card { border-top: 1px solid var(--bf-reviews-card-border); padding-top: var(--bf-reviews-gap); }
.bf-reviews-head { align-items: center; display: flex; gap: 10px; justify-content: space-between; }
.bf-reviews-stars { display: inline-flex; gap: 2px; line-height: 0; }
.bf-reviews-star { fill: var(--bf-reviews-star-off); height: 18px; width: 18px; }
.bf-reviews-star.is-on { fill: var(--bf-reviews-star); }
.bf-reviews-source { color: var(--bf-reviews-muted); display: inline-flex; line-height: 0; position: relative; }
.bf-reviews-source svg { fill: currentColor; height: 18px; width: 18px; }
.bf-reviews-source-google { color: #4285f4; } .bf-reviews-source-facebook { color: #1877f2; } .bf-reviews-source-yelp { color: #d32323; } .bf-reviews-source-tripadvisor { color: #34e0a1; } .bf-reviews-source-opentable { color: #da3743; }
.bf-reviews-text { flex: 1 1 auto; font-size: 1em; margin: 0; overflow-wrap: anywhere; }
.bf-reviews-more { display: inline; }
.bf-reviews-more summary { color: var(--bf-reviews-accent); cursor: pointer; display: inline; list-style: none; }
.bf-reviews-more summary::-webkit-details-marker { display: none; }
.bf-reviews-more summary .bf-reviews-more-label { font-weight: 600; margin-left: .35em; text-decoration: underline; text-underline-offset: 2px; }
.bf-reviews-more[open] summary { display: none; }
.bf-reviews-response { background: rgba(127, 127, 127, .08); border-left: 3px solid var(--bf-reviews-accent); border-radius: 0 8px 8px 0; color: var(--bf-reviews-muted); font-size: .92em; padding: 8px 12px; }
.bf-reviews-response-label { display: block; font-size: .8em; font-weight: 700; letter-spacing: .04em; margin-bottom: 2px; text-transform: uppercase; }
.bf-reviews-meta { align-items: baseline; display: flex; flex-wrap: wrap; gap: 4px 12px; }
.bf-reviews-name { font-weight: 700; }
.bf-reviews-date { color: var(--bf-reviews-muted); font-size: .9em; }
.bf-reviews-link { align-self: flex-start; color: var(--bf-reviews-accent); font-size: .9em; font-weight: 600; text-decoration: none; }
.bf-reviews-link:hover, .bf-reviews-link:focus-visible { text-decoration: underline; }
.bf-reviews-align-center .bf-reviews-link { align-self: center; }

/* Carousel: a strip that scrolls (works without the script); the script adds arrows, dots and autoplay */
.bf-reviews-layout-carousel .bf-reviews-track { display: flex; gap: var(--bf-reviews-gap); -ms-overflow-style: none; overflow-x: auto; overscroll-behavior-x: contain; padding-bottom: 6px; scroll-snap-type: x mandatory; scrollbar-width: none; }
.bf-reviews-layout-carousel .bf-reviews-track::-webkit-scrollbar { display: none; }
.bf-reviews-layout-carousel .bf-reviews-card { flex: 0 0 calc((100% - (var(--bf-reviews-columns) - 1) * var(--bf-reviews-gap)) / var(--bf-reviews-columns)); scroll-snap-align: start; }
@media (max-width: 980px) { .bf-reviews-layout-carousel .bf-reviews-card { flex-basis: calc((100% - var(--bf-reviews-gap)) / var(--bf-reviews-columns-tablet, 2)); } }
@media (max-width: 767px) { .bf-reviews-layout-carousel .bf-reviews-card { flex-basis: calc(100% / var(--bf-reviews-columns-phone, 1)); } }

/* Rotator: one at a time, fading (the script); without it the reviews stack */
.bf-reviews-layout-rotator .bf-reviews-track { grid-template-columns: minmax(0, 1fr); }
.bf-reviews-layout-rotator.bf-reviews-js .bf-reviews-track { display: grid; }
.bf-reviews-layout-rotator.bf-reviews-js .bf-reviews-card { grid-area: 1 / 1; opacity: 0; pointer-events: none; transition: opacity .5s ease; }
.bf-reviews-layout-rotator.bf-reviews-js .bf-reviews-card.is-current { opacity: 1; pointer-events: auto; }
/* A card past the limit (order="random" keeps a pool for the shuffle): the card's own display beats the user-agent [hidden] rule, so say it here (2026-11-04: every pooled card painted on glenshomeinspection.com). */
.bf-reviews-card[hidden] { display: none !important; }
@media (prefers-reduced-motion: reduce) { .bf-reviews-layout-rotator.bf-reviews-js .bf-reviews-card { transition: none; } .bf-reviews-layout-carousel .bf-reviews-track { scroll-behavior: auto; } }

/* Arrows + dots */
.bf-reviews-nav { align-items: center; display: flex; gap: 12px; justify-content: center; margin-top: 14px; }
.bf-reviews-prev, .bf-reviews-next { align-items: center; background: var(--bf-reviews-card-bg); border: 1px solid var(--bf-reviews-card-border); border-radius: 999px; color: var(--bf-reviews-ink); cursor: pointer; display: inline-flex; height: 38px; justify-content: center; padding: 0; width: 38px; }
.bf-reviews-prev svg, .bf-reviews-next svg { height: 18px; width: 18px; }
.bf-reviews-prev:hover, .bf-reviews-next:hover, .bf-reviews-prev:focus-visible, .bf-reviews-next:focus-visible { border-color: var(--bf-reviews-accent); color: var(--bf-reviews-accent); }
.bf-reviews-prev:disabled, .bf-reviews-next:disabled { cursor: default; opacity: .35; }
.bf-reviews-dots { display: flex; gap: 0; }
/* A 24 px hit area (WCAG 2.5.8) around a 10 px dot (Joe's axe run, 2026-11-03). */
.bf-reviews-dot { background: transparent; border: 0; border-radius: 999px; cursor: pointer; height: 24px; padding: 0; position: relative; width: 24px; }
.bf-reviews-dot::before { background: var(--bf-reviews-star-off); border-radius: 999px; content: ""; height: 10px; left: 7px; position: absolute; top: 7px; width: 10px; }
.bf-reviews-dot[aria-selected="true"]::before { background: var(--bf-reviews-accent); }
.bf-reviews-dot:focus-visible { outline: 2px solid var(--bf-reviews-accent); outline-offset: 2px; }
.bf-reviews-live { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

/* Badge */
.bf-reviews-layout-badge { align-items: center; display: inline-flex; gap: 16px; }
.bf-reviews-layout-badge.bf-reviews-card-card, .bf-reviews-layout-badge.bf-reviews-card-flat { background: var(--bf-reviews-card-bg); border: 1px solid var(--bf-reviews-card-border); border-radius: var(--bf-reviews-radius); box-shadow: var(--bf-reviews-card-shadow); padding: 14px 20px; }
.bf-reviews-layout-badge.bf-reviews-card-flat { box-shadow: none; }
.bf-reviews-badge-logo .bf-reviews-logo { display: block; height: 48px; width: auto; max-width: 140px; object-fit: contain; }
.bf-reviews-badge-body { align-items: center; display: inline-flex; flex-wrap: wrap; gap: 6px 12px; }
.bf-reviews-badge-score { font-size: 1.6em; font-weight: 800; line-height: 1; }
.bf-reviews-badge-count { color: var(--bf-reviews-muted); }
.bf-reviews-badge-links { display: inline-flex; flex-wrap: wrap; gap: 10px; }
.bf-reviews-badge-link { align-items: center; color: var(--bf-reviews-ink); display: inline-flex; font-size: .9em; gap: 5px; text-decoration: none; }
.bf-reviews-badge-link:hover, .bf-reviews-badge-link:focus-visible { color: var(--bf-reviews-accent); text-decoration: underline; }
