/*
 * Clever LCR Directory — scoped stylesheet.
 *
 * Status: Step 1 scaffolding. This file currently contains ONLY the design
 * tokens (CSS custom properties), the page-level scope rule, and a handful
 * of placeholder/empty-state styles. As we land each section in subsequent
 * steps, real component CSS gets appended below — translating each Tailwind
 * utility from the reference HTML to a prefixed class scoped under
 * .lcr-page-v1.
 *
 * No Tailwind. No frameworks. Every selector lives under .lcr-page-v1.
 */

/* ── Design tokens (byte-identical to tailwind.config in reference HTML) ── */
.lcr-page-v1 {
  /* Brand — from tailwind.config.theme.extend.colors.brand */
  --lcr-blue:           #0075EB;
  --lcr-blue-hover:     #005FBF;
  --lcr-blue-light:     #E8F2FE;
  --lcr-green:          #00B373;
  --lcr-green-hover:    #009960;
  --lcr-green-light:    #ECFDF5;
  --lcr-green-border:   #6EE7B7;

  /* Neutrals */
  --lcr-dark:           #161E26;   /* text-dark */
  --lcr-muted:          #6B7280;   /* text-muted */
  /* Hairline. Raised from #E5E7EB to sell-fast's #DDE4ED (2026-08-11) — a
     touch darker and bluer. It was introduced when the page briefly went
     white and the card border had to carry all the separation on its own;
     that base has since reverted to off-white, but the stronger hairline is
     KEPT deliberately, because "cards blending into the background" was the
     complaint that prompted the revert and this is the half of the fix that
     costs nothing. Still no shadow: sell-fast doesn't use one here. */
  --lcr-border:         #DDE4ED;
  /* The page base (see .lcr-page-v1) and every component inset — listing-fee
     cells, card tabs, hover states. White is reserved for things that should
     read as raised off it: cards, controls, the minibar. */
  --lcr-surface-subtle: #F9FAFB;   /* bg-surface-subtle */
  --lcr-white:          #FFFFFF;
  --lcr-lwc-navy:       #2F3B54;
  --lcr-star-gold:      #F5A623;

  /* Sentiment (positive/negative theme cards) */
  --lcr-sentiment-positive-bg:    #D1FAE5;
  --lcr-sentiment-positive-text:  #059669;
  --lcr-sentiment-negative-bg:    #FEF3C7;
  --lcr-sentiment-negative-text:  #B45309;

  /* Layout */
  --lcr-content-w:     1144px;     /* maxWidth.content */
  /* Reading measure for running text and the narrow furniture that should share
     its right edge (intro copy, TOC bar, the how-to-choose drawers). Mirrors
     Clever's shared --clvr-content-width (810px); --lcr-content-w already
     matches --clvr-wide-width. Added for ALGCON-1670 — the intro, TOC and
     drawers each carried their own ad-hoc cap and so ended at three different
     right edges. Anything using this MUST also set box-sizing: border-box:
     this page is content-box, so a bordered element declaring 810px renders
     812px, which is exactly the 2px that made the TOC miss an aligned divider. */
  --lcr-reading-w:     810px;
  --lcr-radius-card:   12px;       /* borderRadius.card */
  --lcr-radius-btn:    8px;        /* borderRadius.btn */
  --lcr-radius-badge:  4px;        /* borderRadius.badge */
  --lcr-radius-pill:   100px;      /* borderRadius.pill */

  /* Typography */
  --lcr-font-sans:  'Poppins', -apple-system, BlinkMacSystemFont, sans-serif;
  --lcr-font-serif: 'Libre Baskerville', Georgia, serif;
  --lcr-tracking-clever: -0.02em;  /* letterSpacing.clever — applied to body */

  /* Scope */
  font-family: var(--lcr-font-sans);
  color: var(--lcr-dark);
  font-size: 16px;
  line-height: 1.5;
  letter-spacing: var(--lcr-tracking-clever);
  -webkit-font-smoothing: antialiased;
}

/* Page base is the off-white, not white (Hannah, 2026-08-11).

   This page went white for one round, matching sell-fast exactly, and the
   ranked cards blended into it: they are white with a 1px hairline and no
   shadow, so on a white field the card edge was the only thing separating a
   card from the page, and it wasn't enough. Sell-fast gets away with white
   because its cards are sparser; a 5-card ranked list plus 13 more-companies
   cards is a denser grid and needs the field behind it to do some work.

   So white is now a COMPONENT colour, not a page colour — cards, controls and
   the minibar are white, and they read as raised because everything behind
   them is #F9FAFB. That keeps the two-value system this pass was about, just
   with off-white as the base instead of white:

       #F9FAFB   page base — everything that isn't a band
       #E8F2FE   hero, About the author, and the inset accent panels

   ALGCON-1579's 520px blue-light bottom fade stays removed: it was the third
   treatment and the thing that read as a gradient in the methodology section.
   The flat author band replaces it. */
.lcr-page-v1 {
  background-color: var(--lcr-surface-subtle);
}

/* Heading defaults (from reference body global rules) */
.lcr-page-v1 h1,
.lcr-page-v1 h2,
.lcr-page-v1 h3,
.lcr-page-v1 h4,
.lcr-page-v1 h5,
.lcr-page-v1 h6 {
  font-family: var(--lcr-font-sans);
  font-weight: 600;
  line-height: 1.25;
  margin: 0;
}

/* Structural-only headings. The FAQ questions and the two compact drawers wrap
   their toggle <button> in an h3 so they appear in the document outline (the
   heading must be OUTSIDE the button — inside, it is not exposed as a heading).
   These wrappers must contribute nothing visually: the rule above deliberately
   does not set font-size, so without this the UA's h3 default of 1.17em would
   leak into the button and shift the control. Everything comes from the label
   spans, exactly as before. */
.lcr-page-v1 .lcr-faq-q,
.lcr-page-v1 .lcr-drawer-q {
  font-size: inherit;
  font-weight: inherit;
  line-height: inherit;
  letter-spacing: inherit;
  color: inherit;
  margin: 0;
}
.lcr-page-v1 p { margin: 0; }
.lcr-page-v1 a { color: inherit; text-decoration: none; }
.lcr-page-v1 ol, .lcr-page-v1 ul { margin: 0; padding: 0; }

/* ── Hover belongs to the button, not to its label ──
   Bricks' frontend CSS ships:

       :where(.brxe-post-content) a:not(.bricks-button):hover { color: #29abe2 }

   :not() carries the specificity of its argument, so that selector scores
   (0,2,1) — HIGHER than our `.lcr-page-v1 .lcr-card-cta { color: … }` at
   (0,2,0). The block renders inside post content, so every anchor-based CTA
   was in scope: the button darkened correctly on hover (that is our own
   background rule) while its label was repainted the theme's light blue.

   Only anchors were affected. The <button> CTAs — .lcr-cta-btn,
   .lcr-more-companies-btn, .pz-btn, and the FAQ/drawer toggles — were never
   reachable by an `a:hover` selector, which is why this looked inconsistent.

   Fixed by adding the type selector (a.lcr-… scores (0,3,1)) so these clear
   the theme rule outright. Restating the colour at equal specificity would
   only TIE at (0,2,1) and leave the outcome to stylesheet order — which is
   what .lcr-nearby-pill:hover was already silently relying on.

   No colour is changed here: each value restates what the element already
   renders, so hover now affects background alone. */
.lcr-page-v1 a.lcr-card-cta:hover,
.lcr-page-v1 a.lcr-glance-card-cta:hover,
.lcr-page-v1 a.lcr-nearby-pill:hover,
.lcr-page-v1 a.lcr-top-cities-cta:hover {
  color: var(--lcr-white);
}

/* Utility state classes (FFMLS convention) */
.lcr-page-v1 .lcr-hidden { display: none !important; }
.lcr-page-v1 .lcr-nowrap { white-space: nowrap; }

/* ── Tooltip system (scoped, reusable) ──────────────────────────────────
   Trigger = .lcr-tip-wrap (inline-flex by default, block via --block).
   Content = .lcr-tip — uses position:fixed so it ESCAPES any clipping
   ancestor (e.g. the carousel's overflow-x:auto). The wrap-relative
   coordinates that position:absolute would give us are computed by
   initTooltips() in script-view.js on hover/focus, then applied via
   inline top/left + a fixed translate(-50%, calc(-100% - 8px)) to
   center horizontally and sit 8px above the trigger.
   Used by: at-a-glance fee boxes, rating tooltips, top-5 stats (step 6). */
.lcr-page-v1 .lcr-tip-wrap {
  position: relative;
  display: inline-flex;
  cursor: help;
}
.lcr-page-v1 .lcr-tip-wrap--block {
  display: block;
  width: 100%;
}
.lcr-page-v1 .lcr-tip {
  position: fixed;
  top: 0;            /* JS sets per-show; default keeps it offscreen-ish */
  left: 0;
  transform: translate(-50%, calc(-100% - 8px));
  background: #161E26;
  color: #FFF;
  font-size: 13px;             /* bumped from 12px per Ben's feedback */
  font-weight: 400;
  line-height: 1.5;
  padding: 10px 14px;
  border-radius: 8px;
  white-space: normal;
  width: max-content;
  max-width: min(280px, calc(100vw - 24px));
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s ease;
  z-index: 60;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
  text-align: left;
  letter-spacing: 0;
}
.lcr-page-v1 .lcr-tip::after {
  content: '';
  position: absolute;
  /* The arrow is normally at the tip's horizontal center, but if initTooltips
     had to clamp the tip horizontally to keep it inside the viewport, it
     also writes a per-tip --lcr-tip-arrow-shift so the arrow continues to
     point at the trigger's center. */
  left: calc(50% + var(--lcr-tip-arrow-shift, 0px));
  transform: translateX(-50%);
  top: 100%;
  border: 5px solid transparent;
  border-top-color: #161E26;
}
/* Flipped variant — tip sits BELOW the trigger (used when the trigger is
   too close to the viewport top for the default above-position to fit).
   JS adds .lcr-tip--below; CSS shifts the transform downward instead of
   upward, and moves the arrow to the top edge pointing up. */
.lcr-page-v1 .lcr-tip.lcr-tip--below {
  transform: translate(-50%, 8px);
}
.lcr-page-v1 .lcr-tip.lcr-tip--below::after {
  top: auto;
  bottom: 100%;
  border-top-color: transparent;
  border-bottom-color: #161E26;
}
/* Visible on hover and on KEYBOARD focus only.
   Using :focus-visible (not :focus-within) means clicking the trigger
   doesn't make the tooltip stick around — once the cursor leaves, the
   tip hides. The .lcr-tip-show JS hook stays for touch tap-to-show. */
.lcr-page-v1 .lcr-tip-wrap:hover .lcr-tip,
.lcr-page-v1 .lcr-tip-wrap:focus-visible .lcr-tip,
.lcr-page-v1 .lcr-tip-wrap.lcr-tip-show .lcr-tip {
  opacity: 1;
  pointer-events: auto;
}
/* Tip content inherits — body contains <br>, <ul>, <li>. */
.lcr-page-v1 .lcr-tip ul {
  margin: 4px 0 0;
  padding-left: 18px;
  list-style: disc outside;
}
.lcr-page-v1 .lcr-tip li {
  margin-bottom: 2px;
  line-height: 1.4;
}
.lcr-page-v1 .lcr-tip strong { font-weight: 700; }

/* Force-close tooltips on scroll (ALGCON-1579) so a tapped carousel-tile tip
   doesn't stick/float while swiping to the next tile — matches the SBR review-tile
   carousels. JS adds .lcr-tip-suppressed to the page root on scroll; the next
   pointerdown/hover/focus on a trigger removes it. */
.lcr-page-v1.lcr-tip-suppressed .lcr-tip { opacity: 0 !important; pointer-events: none !important; }

/* ── .lcr-main — content wrapper that mirrors the reference's <main>.
   Sections that need the 1144px cap live inside this. Full-width sections
   (footer-zone) sit outside .lcr-main but still inside .lcr-page-v1.
   Top padding is 0 — the hero section is the first child and provides its
   own top breathing room via gradient padding, so adding padding here just
   creates an unwanted gap between any wrapping theme/header and the hero. */
.lcr-page-v1 .lcr-main {
  max-width: var(--lcr-content-w);
  margin: 0 auto;
  padding: 0 16px;             /* px-4 */
  box-sizing: content-box;
}

/* Empty-state placeholder (also used by the harness for unimplemented sections) */
.lcr-page-v1--empty {
  max-width: var(--lcr-content-w);
  margin: 40px auto;
  padding: 24px;
  text-align: center;
  color: var(--lcr-muted);
}

/* Step 1 stub style: each unimplemented section partial outputs a marker box.
   These all disappear as real content lands. */
.lcr-stub {
  max-width: var(--lcr-content-w);
  margin: 12px auto;
  padding: 16px 24px;
  border: 1px dashed var(--lcr-border);
  border-radius: var(--lcr-radius-btn);
  background: var(--lcr-surface-subtle);
  font-size: 13px;
  color: var(--lcr-muted);
}
.lcr-stub strong {
  color: var(--lcr-dark);
  font-weight: 600;
}
.lcr-stub-meta {
  display: block;
  margin-top: 4px;
  font-size: 12px;
  color: var(--lcr-muted);
  opacity: 0.7;
}

/* ════════════════════════════════════════════════════════════════════════
   STEP 2 — BREADCRUMBS + HERO (left column: title, byline, TOC, intro)
   The right column (savings calculator) lands in step 3.
   ──────────────────────────────────────────────────────────────────────── */

/* ── Breadcrumbs ──
   Reference: nav.mb-4.flex.flex-wrap.items-center.gap-1.5.text-[11px].font-semibold.text-brand-blue.uppercase.tracking-wider.leading-relaxed */
.lcr-page-v1 .lcr-breadcrumbs {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin-bottom: 16px;
  font-size: 11px;
  font-weight: 600;
  color: var(--lcr-blue);
  text-transform: uppercase;
  letter-spacing: 0.05em;        /* tracking-wider */
  line-height: 1.625;            /* leading-relaxed */
}
.lcr-page-v1 .lcr-breadcrumb-link {
  color: var(--lcr-blue);
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-breadcrumb-link:hover {
  color: var(--lcr-blue-hover);
}
.lcr-page-v1 .lcr-breadcrumb-sep {
  color: var(--lcr-muted);
}
.lcr-page-v1 .lcr-breadcrumb-current {
  color: var(--lcr-dark);
  font-weight: 600;
}

/* ── Hero section ──
   Subtle vertical gradient (light blue → white) that visually distinguishes
   the hero zone from the breadcrumbs above and the gray storefront zone
   below. Uses the same full-bleed margin trick the gray-zone uses so the
   gradient extends edge-to-edge while inner content stays capped at
   .lcr-main width. */
/* Flat band rather than a gradient (ALGCON-1670). --lcr-blue-light is already
   #E8F2FE — byte-identical to the sell-fast series' --hero-band — so this
   deletes the gradient, it does not introduce a new colour. The hard bottom
   edge is replaced by sell-fast's soft blurred drop-shadow (Jamie, 2026-07-22)
   so the band still separates from the content below it. */
.lcr-page-v1 .lcr-hero {
  background: var(--lcr-blue-light);
  box-shadow: 0 12px 24px -16px rgba(22, 42, 76, .22);
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  padding-left: calc(50vw - 50%);
  padding-right: calc(50vw - 50%);
  padding-top: 14px;       /* breadcrumbs sit at the top of the band */
  padding-bottom: 8px;
}

/* ── Hero wrapper ──
   Originally a 2-column flex layout (left: title/byline/TOC/intro,
   right: savings calculator). The calculator was removed per editorial
   review (Jamie); the wrapper now just provides bottom spacing for the
   single-column hero content. */
.lcr-page-v1 .lcr-hero-wrapper {
  margin-bottom: 12px;      /* ALGCON-1670: was 24px */
}

/* ── H1 title ──
   Reference: h1.text-[34px] md:text-[40px].font-bold.text-dark.tracking-clever.leading-tight.mb-3 md:mb-2
   Title now flows to fill the hero width with no forced break point —
   wraps naturally at narrower viewports. */
.lcr-page-v1 .lcr-hero-title {
  font-size: 30px;             /* ALGCON-1670: was 34px */
  font-weight: 700;
  color: var(--lcr-dark);
  letter-spacing: var(--lcr-tracking-clever);
  line-height: 1.1;            /* leading-tight */
  /* H1 -> byline gap. TIGHTEN took this to 8px/6px, which reads as crammed.
     Matched to the sell-fast hero, measured live on
     /sell-my-house-fast/tennessee/: 14.4px mobile, 16px desktop. */
  margin-bottom: 14px;         /* ALGCON-1670: 12px -> 8px -> 14px */
}
@media (min-width: 768px) {
  .lcr-page-v1 .lcr-hero-title {
    font-size: 34px;           /* ALGCON-1670: was 40px */
    margin-bottom: 16px;       /* ALGCON-1670: 8px -> 6px -> 16px */
  }
}

/* Title prefix — the portion of the H1 BEFORE the date span.

   This used to carry `white-space: nowrap` above 768px, so that a long title
   would wrap at the date boundary (date drops to its own line) rather than
   mid-phrase. That works only while the prefix actually fits the column; when it
   doesn't, nowrap has nowhere to break and pushes the whole DOCUMENT wider than
   the viewport — a horizontal scrollbar plus an H1 running off the right edge.

   Measured before removal, at the shipped 34px H1:
     San Antonio  (52-char prefix,  906px) — overflowed  768px..~938px
     Rancho Santa Margarita (68-char, 1181px) — overflowed 768px..~1213px, i.e.
       429px at iPad portrait and 173px at iPad landscape. That prefix is wider
       than the 1144px content cap itself, so nowrap could never be satisfied on
       that market at any width, and raising the breakpoint would not have helped.
   Present since the initial commit; it was worse before ALGCON-1670 reduced the
   desktop H1 from 40px to 34px (314px of overflow at 768px on origin/main).

   Natural wrapping is what mobile has always done here and it reads fine, so the
   prefix now wraps at every width. The date itself still never splits — that is
   .lcr-nowrap on the date span, which is independent of this.

   The .lcr-hero-title-prefix wrapper is still emitted by hero.php: it is inert
   styling-wise but remains the hook if the date-boundary behaviour is ever
   reattempted in a way that cannot overflow (it would need to be conditional on
   the title actually fitting, which CSS alone cannot express). */

/* ── Byline (Written by · Edited by · Last updated) ── */
.lcr-page-v1 .lcr-hero-byline {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  column-gap: 12px;
  row-gap: 6px;
  font-size: 13px;             /* bumped from 12px per Ben's feedback */
  color: #6B7280;              /* text-gray-500 */
  margin-bottom: 10px;         /* ALGCON-1670: was 24px */
}
.lcr-page-v1 .lcr-hero-byline-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

/* ── Byline: primary contributor inline, the rest behind "+N others" ──
   ALGCON-1670. The grouping spans are display:contents on desktop so all three
   contributors sit in the byline's own flex row exactly as before — the wrappers
   exist purely to give mobile something to collapse. The extra contributors are
   always in the DOM; only CSS hides them, so they stay crawlable.

   No "Expert reviewed" pill — it was prototyped and removed (Hannah, 2026-08-10). */
.lcr-page-v1 .lcr-byline-main,
.lcr-page-v1 .lcr-byline-extra { display: contents; }

.lcr-page-v1 .lcr-byline-item {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  min-width: 0;
}
.lcr-page-v1 .lcr-byline-copy {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: .15rem .25rem;
  min-width: 0;
}
.lcr-page-v1 .lcr-byline-role { white-space: nowrap; }

.lcr-page-v1 .lcr-byline-toggle {
  /* Hidden on desktop — there is nothing to expand, since all contributors show. */
  display: none;
  align-items: center;
  gap: .15rem;
  min-height: 28px;
  padding: .1rem .15rem;
  border: 0;
  border-radius: var(--lcr-radius-badge);
  background: transparent;
  color: var(--lcr-blue);
  font: 600 13px/1.2 inherit;
  white-space: nowrap;
  cursor: pointer;
}
.lcr-page-v1 .lcr-byline-toggle:hover { color: var(--lcr-blue-hover); }
.lcr-page-v1 .lcr-byline-toggle-icon {
  width: 14px;
  height: 14px;
  flex: none;
  transition: transform 200ms ease;
}
.lcr-page-v1 .lcr-hero-byline.is-expanded .lcr-byline-toggle-icon { transform: rotate(180deg); }

/* ── Mobile hero stack (ALGCON-1670) ──
   The binding constraint on reaching the mobile fold is the H1, not the intro
   copy: measured across San Antonio / Rancho Santa Margarita / South Carolina it
   runs 4-6 lines at the previous size. 26px is the single biggest remaining
   lever on that. Sizes only — no colour, no copy — so this reverts on its own.

   Context for how hard to chase this: GA4 last-90-days sessions landing on
   /discount-real-estate-brokers/ are desktop 6,021 (61%) / mobile 3,734 (38%) /
   tablet 170 (2%). The page is desktop-majority, which inverts the usual
   instinct — hence mobile-only rules rather than shrinking the H1 everywhere. */
@media (max-width: 767px) {
  .lcr-page-v1 .lcr-hero-title {
    font-size: 26px;
    line-height: 1.15;
  }
  .lcr-page-v1 .lcr-hero-byline { font-size: 12px; margin-bottom: 8px; }
}

@media (max-width: 767px) {
  .lcr-page-v1 .lcr-byline-main {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .2rem .4rem;
    min-width: 0;
  }
  .lcr-page-v1 .lcr-byline-toggle { display: inline-flex; flex: none; }
  .lcr-page-v1 .lcr-byline-extra  { display: none; }
  .lcr-page-v1 .lcr-hero-byline.is-expanded .lcr-byline-extra {
    display: grid;
    gap: .5rem;
    padding: .15rem 0 0 1px;
  }
  /* The interpuncts only make sense inline; stacked, they read as bullets. */
  .lcr-page-v1 .lcr-byline-extra .lcr-hero-byline-sep { display: none; }
  /* Own row, so the date doesn't float alongside the expanded contributor list. */
  .lcr-page-v1 .lcr-byline-updated { flex-basis: 100%; font-weight: 500; }
}
.lcr-page-v1 .lcr-hero-byline-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-weight: 600;
  color: #374151;              /* text-gray-700 */
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-hero-byline-link:hover {
  color: var(--lcr-blue);
}
.lcr-page-v1 .lcr-hero-byline-avatar {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  object-fit: cover;
}
.lcr-page-v1 .lcr-hero-byline-sep {
  display: none;
  color: #D1D5DB;              /* text-gray-300 */
}
@media (min-width: 768px) {
  .lcr-page-v1 .lcr-hero-byline-sep { display: inline; }
}
.lcr-page-v1 .lcr-hero-byline-strong {
  font-weight: 600;
  color: #374151;
}

/* The editorial / monetization disclosure had its own block here — a gray panel
   with an info-icon tooltip, rendered under the Methodology heading. It is now
   plain body copy at the end of that section's first paragraph (see
   methodology.php), so the panel, its icon and disclosure.php are all gone. */

/* Generic inline info-circle icon for FAQ / body-copy tooltips. Muted gray that
   brightens to brand blue on hover/focus of the wrapping .lcr-tip-wrap. */
.lcr-page-v1 .lcr-info-icon {
  display: inline-block;
  vertical-align: middle;
  margin-left: 4px;
  color: var(--lcr-muted);
  opacity: 0.7;
  transition: color 0.15s ease, opacity 0.15s ease;
}
.lcr-page-v1 .lcr-tip-wrap:hover .lcr-info-icon,
.lcr-page-v1 .lcr-tip-wrap:focus-visible .lcr-info-icon {
  color: var(--lcr-blue);
  opacity: 1;
}

/* ── Table of Contents ("On this page") ──
   Reference: div.mb-6.max-w-xl.border.border-gray-200.rounded-lg.overflow-hidden.bg-white */
/* ── "On this page" TOC — native <details>, no JS (ALGCON-1670) ──
   Ported from the sell-fast series: hamburger icon left, "On this page",
   right-aligned chevron that rotates on open, bullet-less <nav> link grid.
   Colours stay on LCR's own --lcr-* tokens rather than importing the --clvr-*
   layer, which this plugin does not load.

   This REPLACES the previous button + .lcr-toc-body + JS-toggled .lcr-hidden
   implementation outright — <details> carries its own open/closed state, so the
   initTOC handler in script-view.js is gone rather than left dangling.

   Ben's 14px bumps (both were raised from 12px for older-audience readability)
   are preserved: 14px on the summary label and 14px on the links. */
.lcr-page-v1 .lcr-toc {
  /* Shares the reading measure with the intro copy and the drawers so all three
     end on the same right edge. border-box is required, not cosmetic — a
     bordered element declaring 810px renders 812px under this page's inherited
     content-box. See the --lcr-reading-w note. */
  box-sizing: border-box;
  max-width: var(--lcr-reading-w);
  margin: 16px 0 14px;
  background: var(--lcr-white);
  border: 1px solid var(--lcr-border);
  border-radius: var(--lcr-radius-btn);
  box-shadow: 0 1px 2px rgba(12, 20, 42, .04);
  /* Not `hidden`: the summary's focus ring needs to be able to paint outside. */
  overflow: visible;
}
.lcr-page-v1 .lcr-toc > summary {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .7rem 1rem;
  cursor: pointer;
  font-size: 14px;             /* bumped from 12px per Ben's feedback — older audience readability */
  font-weight: 600;
  color: #374151;
  line-height: 1.4;
  list-style: none;
  user-select: none;
}
/* Suppress the native disclosure triangle in both engine families — we supply
   our own chevron. */
.lcr-page-v1 .lcr-toc > summary::-webkit-details-marker { display: none; }
.lcr-page-v1 .lcr-toc > summary::marker { content: ""; }
.lcr-page-v1 .lcr-toc > summary:focus-visible {
  outline: 2px solid var(--lcr-blue);
  outline-offset: 2px;
  border-radius: var(--lcr-radius-btn);
}
.lcr-page-v1 .lcr-toc-ico {
  width: 16px;
  height: 16px;
  flex: none;
  color: var(--lcr-blue);
}
.lcr-page-v1 .lcr-toc-chev {
  width: 16px;
  height: 16px;
  flex: none;
  margin-left: auto;
  color: var(--lcr-muted);
  transition: transform 200ms ease;
}
.lcr-page-v1 .lcr-toc[open] .lcr-toc-chev { transform: rotate(180deg); }
.lcr-page-v1 .lcr-toc-list {
  display: grid;
  gap: .4rem;
  margin: 0;
  /* Left padding indents the links past the summary icon, so they read as
     children of the label rather than a second column. */
  padding: .15rem 1rem .85rem 2.35rem;
  list-style: none;
}
.lcr-page-v1 .lcr-toc-list a {
  width: fit-content;
  font-size: 14px;             /* bumped from 12px per Ben's feedback — older audience readability */
  font-weight: 500;
  color: var(--lcr-dark);
  text-decoration: none;
  transition: color .15s ease;
}
.lcr-page-v1 .lcr-toc-list a:hover { color: var(--lcr-blue); }

/* ── Intro copy (3 paragraphs under the TOC) ──
   Reference: p.text-[15px].text-gray-600.mb-3 (last paragraph: mb-4) */
.lcr-page-v1 .lcr-intro-p {
  font-size: 16px;             /* 15 → 17 → 16 (dialed back a tad) */
  color: #4B5563;              /* text-gray-600 */
  margin-bottom: 8px;          /* ALGCON-1670: was 12px */
  line-height: 1.625;
  /* Shares the reading measure with the TOC bar and the drawers (ALGCON-1670). */
  box-sizing: border-box;
  max-width: var(--lcr-reading-w);
}
.lcr-page-v1 .lcr-intro-p:last-child { margin-bottom: 10px; }   /* ALGCON-1670: was 16px */

/* ── Bankrate-style read-more intro (ALGCON-1670) ──
   Deliberately quiet: no card, no accent border. The ranked cards below are what
   should pop; this block's job is to define the product and get out of the way.

   Reveal structure:
     .lcr-brintro__lede   always visible — defines the product
     .lcr-brintro__rates  visible on desktop, folded behind the toggle on mobile
     .lcr-brintro__rest   folded behind the toggle on BOTH breakpoints
   The toggle exists at every width; a desktop-only reveal was tried and rejected.

   The reveal uses display:none, so the text stays in the DOM and is indexable,
   but it is a slightly weaker signal than clipped-but-rendered text. Flagged for
   Tommy as an optional SEO read. */
.lcr-page-v1 .lcr-brintro { margin: 0 0 12px; }
@media (min-width: 768px) {
  .lcr-page-v1 .lcr-brintro {
    box-sizing: border-box;
    max-width: var(--lcr-reading-w);
  }
}
.lcr-page-v1 .lcr-brintro__lede,
.lcr-page-v1 .lcr-brintro__rates,
.lcr-page-v1 .lcr-brintro__rest p {
  font-size: 16px;
  line-height: 1.6;
  color: #4B5563;
}
.lcr-page-v1 .lcr-brintro__lede { margin: 0; }
.lcr-page-v1 .lcr-brintro__rates { margin: 8px 0 0; }
.lcr-page-v1 .lcr-brintro__rest { margin-top: 10px; }
.lcr-page-v1 .lcr-brintro__rest p { margin: 0 0 8px; }
.lcr-page-v1 .lcr-brintro__rest p:last-child { margin-bottom: 0; }
.lcr-page-v1 .lcr-brintro__lede strong,
.lcr-page-v1 .lcr-brintro__rates strong { font-weight: 600; color: #374151; }

.lcr-page-v1 .lcr-brintro .lcr-brintro__rest { display: none; }
.lcr-page-v1 .lcr-brintro.is-open .lcr-brintro__rest { display: block; }
@media (max-width: 767px) {
  .lcr-page-v1 .lcr-brintro__rates { display: none; }
  .lcr-page-v1 .lcr-brintro.is-open .lcr-brintro__rates { display: block; }
}

.lcr-page-v1 .lcr-intro-more {
  display: inline-block;
  background: none;
  border: 0;
  padding: 0;
  margin: 4px 0 10px;
  font: inherit;
  font-size: 14px;
  font-weight: 600;
  color: var(--lcr-blue);
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 2px;
}
.lcr-page-v1 .lcr-intro-more:hover { text-decoration-thickness: 2px; }
.lcr-page-v1 .lcr-intro-p strong {
  font-weight: 600;
  color: #4B5563;              /* keep gray-600 within strong; reference doesn't darken */
}
.lcr-page-v1 .lcr-intro-link {
  font-weight: 600;
  color: var(--lcr-blue);
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-intro-link:hover {
  color: var(--lcr-blue-hover);
}

/* ════════════════════════════════════════════════════════════════════════
   STEP 4 — GRAY "STOREFRONT" ZONE + COMPACT FAQ DRAWERS + WHAT-TO-KNOW FAQ
   ──────────────────────────────────────────────────────────────────────── */

/* ── "Storefront" zone wrapper ──
   Paints nothing of its own since 2026-08-11: the #F9FAFB it used to carry is
   now the page base, so the zone inherits the identical colour and a second
   declaration would just be a value to keep in sync. The region looks exactly
   as it always did.

   The negative-margin trick still earns its place: it is what lets the zone's
   padding bleed edge-to-edge. body has overflow-x:hidden as a defensive guard
   against horizontal scroll. */
.lcr-page-v1 .lcr-gray-zone {
  display: flow-root;
  padding-top: 40px;
  padding-bottom: 0;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  padding-left: calc(50vw - 50%);
  padding-right: calc(50vw - 50%);
}

/* Anchor offset for sticky-header-aware scroll-into-view (was scroll-mt-28). */
.lcr-page-v1 [id="how-to-choose"],
.lcr-page-v1 [id="about-rankings"],
.lcr-page-v1 [id="at-a-glance"],
.lcr-page-v1 [id="top-5"],
.lcr-page-v1 [id="what-to-know"],
.lcr-page-v1 [id="how-clever-works"],
.lcr-page-v1 [id="more-companies"],
.lcr-page-v1 [id="methodology"] {
  scroll-margin-top: 112px;
}

/* ── Compact FAQ drawers ──────────────────────────────────────────────────
   Two drawers in a single rounded container. Each drawer is a borderless
   button row + a max-height-animated body. Second drawer has border-top
   for visual separation. */
.lcr-page-v1 .lcr-drawers {
  margin-bottom: 24px;     /* drawers → first card vertical rhythm. (Previously
                              also matched the personalize widget, which used to
                              sit between them; it now precedes the H2.) */
  border: 1px solid var(--lcr-border);
  border-radius: var(--lcr-radius-card);
  overflow: hidden;
  background: var(--lcr-white);
}
/* Both drawers share this one bordered container, so the reading cap is applied
   once here rather than per drawer (ALGCON-1670). Desktop only — on mobile the
   container should still use the full column. border-box matters here: the 1px
   borders would otherwise push this to 812px against the TOC's 810px. */
@media (min-width: 768px) {
  .lcr-page-v1 .lcr-drawers {
    box-sizing: border-box;
    max-width: var(--lcr-reading-w);
  }
}
.lcr-page-v1 .lcr-drawer + .lcr-drawer {
  border-top: 1px solid var(--lcr-border);
}
.lcr-page-v1 .lcr-drawer-btn {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px;
  background: transparent;
  border: 0;
  text-align: left;
  cursor: pointer;
  transition: background-color 0.15s ease;
  font-family: inherit;
  letter-spacing: inherit;
}
.lcr-page-v1 .lcr-drawer-btn:hover { background: #F9FAFB; }
.lcr-page-v1 .lcr-drawer-btn-label {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 16px;             /* bumped from 14px per Ben's feedback */
  font-weight: 600;
  color: var(--lcr-dark);
}
.lcr-page-v1 .lcr-drawer-btn-icon {
  display: inline-flex;
  align-items: center;
  color: var(--lcr-blue);
}
.lcr-page-v1 .lcr-drawer-btn-icon svg {
  width: 18px;                 /* bumped from inline 16×16 per Ben's feedback */
  height: 18px;
}
.lcr-page-v1 .lcr-drawer-chev {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  color: var(--lcr-muted);
  transition: transform 0.3s ease;
}
.lcr-page-v1 .lcr-drawer-btn[aria-expanded="true"] .lcr-drawer-chev {
  transform: rotate(180deg);
}
.lcr-page-v1 .lcr-drawer-body {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.35s ease;
}
.lcr-page-v1 .lcr-drawer-body.lcr-open {
  max-height: 2000px;
}
.lcr-page-v1 .lcr-drawer-body-inner {
  padding: 4px 20px 20px;
  border-top: 1px solid var(--lcr-border);
}

/* Drawer 1 (How to choose) — numbered step list */
.lcr-page-v1 .lcr-drawer-steps {
  margin-top: 12px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.lcr-page-v1 .lcr-drawer-step {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}
.lcr-page-v1 .lcr-drawer-step-num {
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--lcr-blue-light);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 2px;
  font-size: 12px;
  font-weight: 700;
  color: var(--lcr-blue);
}
.lcr-page-v1 .lcr-drawer-step-title {
  font-size: 16px;             /* bumped from 14px per Ben's feedback */
  font-weight: 600;
  color: var(--lcr-dark);
  margin-bottom: 4px;
}
.lcr-page-v1 .lcr-drawer-step-body {
  font-size: 15px;             /* bumped from 13px per Ben's feedback */
  color: var(--lcr-muted);
  line-height: 1.625;
}
.lcr-page-v1 .lcr-drawer-step-body a {
  color: var(--lcr-blue);
}
.lcr-page-v1 .lcr-drawer-step-body a:hover {
  color: var(--lcr-blue-hover);
}

/* Drawer 2 (About our rankings) — intro p + 4-card grid + closing stat p */
.lcr-page-v1 .lcr-rankings-intro {
  margin-top: 12px;
  margin-bottom: 16px;
  font-size: 15px;             /* bumped from 13px per Ben's feedback */
  color: var(--lcr-muted);
  line-height: 1.625;
}
.lcr-page-v1 .lcr-rankings-intro a {
  color: var(--lcr-blue);
}
.lcr-page-v1 .lcr-rankings-intro a:hover { color: var(--lcr-blue-hover); }
.lcr-page-v1 .lcr-rankings-grid {
  display: grid;
  grid-template-columns: 1fr;   /* 1-col on mobile so the bumped text doesn't wrap awkwardly inside the narrow card */
  gap: 12px;
}
@media (min-width: 768px) {
  .lcr-page-v1 .lcr-rankings-grid {
    grid-template-columns: 1fr 1fr;
  }
}
.lcr-page-v1 .lcr-rankings-card {
  background: var(--lcr-blue-light);
  border-radius: var(--lcr-radius-btn);
  padding: 16px;
  border: 1px solid #BFDBFE;
}
.lcr-page-v1 .lcr-rankings-card-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
}
.lcr-page-v1 .lcr-rankings-card-icon {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  color: var(--lcr-blue);
}
.lcr-page-v1 .lcr-rankings-card-title {
  font-size: 16px;             /* bumped 12 → 14 → 16 per Ben's feedback (matches drawer-step-title) */
  font-weight: 600;
  color: var(--lcr-dark);
}
.lcr-page-v1 .lcr-rankings-card-body {
  font-size: 15px;             /* bumped 12 → 14 → 15 per Ben's feedback (matches drawer-step-body) */
  color: var(--lcr-muted);
  line-height: 1.625;
}
.lcr-page-v1 .lcr-rankings-stat {
  margin-top: 16px;
  font-size: 15px;             /* bumped 12 → 14 → 15 per Ben's feedback */
  color: var(--lcr-muted);
}
.lcr-page-v1 .lcr-rankings-stat strong {
  color: var(--lcr-dark);
  font-weight: 600;
}

/* ── What-to-know FAQ accordion ───────────────────────────────────────────
   Reference: max-w-2xl (672px), border-t, items separated by border-b.
   Each item: button (always visible) + .lcr-faq-ans (max-height animated). */
.lcr-page-v1 .lcr-faq {
  margin-bottom: 40px;
}
.lcr-page-v1 .lcr-faq-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  margin-bottom: 24px;
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
}
.lcr-page-v1 .lcr-faq-list {
  max-width: 42rem;          /* max-w-2xl */
  border-top: 1px solid var(--lcr-border);
}
.lcr-page-v1 .lcr-faq-item {
  border-bottom: 1px solid var(--lcr-border);
}
.lcr-page-v1 .lcr-faq-btn {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: space-between;
  padding: 16px 0;
  background: transparent;
  border: 0;
  text-align: left;
  cursor: pointer;
  font-family: inherit;
  letter-spacing: inherit;
}
.lcr-page-v1 .lcr-faq-btn-label {
  font-size: 16px;             /* bumped from 15px to match .lcr-drawer-btn-label per Ben's feedback */
  font-weight: 600;
  color: var(--lcr-dark);
  padding-right: 16px;
}
.lcr-page-v1 .lcr-faq-chev {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  transition: transform 0.2s ease;
  color: var(--lcr-muted);
}
.lcr-page-v1 .lcr-faq-btn[aria-expanded="true"] .lcr-faq-chev {
  transform: rotate(180deg);
}
.lcr-page-v1 .lcr-faq-ans {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.25s ease;
}
.lcr-page-v1 .lcr-faq-ans.lcr-open {
  max-height: 4000px;       /* generous; FAQ 6 has the longest body */
}
.lcr-page-v1 .lcr-faq-ans p {
  font-size: 15px;             /* bumped from 14px per Ben's feedback (matches drawer body) */
  color: #4B5563;          /* gray-600 */
  margin-bottom: 12px;
  line-height: 1.625;
}
.lcr-page-v1 .lcr-faq-ans p:last-child { padding-bottom: 16px; }
.lcr-page-v1 .lcr-faq-ans p strong {
  font-weight: 600;
  color: #4B5563;
}
.lcr-page-v1 .lcr-faq-ans ul,
.lcr-page-v1 .lcr-faq-ans ol {
  font-size: 15px;             /* bumped from 14px per Ben's feedback (matches drawer body) */
  color: #4B5563;
  padding-left: 20px;
  margin-bottom: 12px;
}
.lcr-page-v1 .lcr-faq-ans ul { list-style: disc outside; }
.lcr-page-v1 .lcr-faq-ans ol { list-style: decimal outside; }
.lcr-page-v1 .lcr-faq-ans ul li,
.lcr-page-v1 .lcr-faq-ans ol li { margin-bottom: 8px; line-height: 1.5; }
.lcr-page-v1 .lcr-faq-ans a {
  color: var(--lcr-blue);
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-faq-ans a:hover { color: var(--lcr-blue-hover); }
.lcr-page-v1 .lcr-faq-pros-label,
.lcr-page-v1 .lcr-faq-cons-label,
.lcr-page-v1 .lcr-faq-section-label {
  font-size: 16px;             /* bumped from 14px per Ben's feedback (matches drawer step-title) */
  font-weight: 700;
  color: #374151;
  margin-bottom: 8px;
}

/* "Good news" callout box at bottom of FAQ 6 */
.lcr-page-v1 .lcr-good-news-box {
  background: var(--lcr-blue-light);
  border: 1px solid #BFDBFE;
  border-radius: var(--lcr-radius-btn);
  padding: 16px;
  margin: 16px 0;
  font-size: 14px;
  color: var(--lcr-dark);
}
.lcr-page-v1 .lcr-good-news-box strong { font-weight: 600; }

/* ════════════════════════════════════════════════════════════════════════
   STEP 5 — AT-A-GLANCE CAROUSEL + PERSONALIZE INPUT + STAR UTILITIES
   ──────────────────────────────────────────────────────────────────────── */

/* ── Star rating utilities (used by glance cards now, top-5 cards in step 6) ──
   Two-color text-clip technique: gold gradient over the chosen %, gray for
   the rest. Buckets are 10/20/.../90 to keep CSS bounded. */
.lcr-page-v1 .lcr-stars { white-space: nowrap; font-size: 14px; }
.lcr-page-v1 .lcr-star-gold  { color: var(--lcr-star-gold); }
.lcr-page-v1 .lcr-star-empty { color: var(--lcr-border); }
.lcr-page-v1 .lcr-star-partial-10,
.lcr-page-v1 .lcr-star-partial-20,
.lcr-page-v1 .lcr-star-partial-30,
.lcr-page-v1 .lcr-star-partial-40,
.lcr-page-v1 .lcr-star-partial-50,
.lcr-page-v1 .lcr-star-partial-60,
.lcr-page-v1 .lcr-star-partial-70,
.lcr-page-v1 .lcr-star-partial-80,
.lcr-page-v1 .lcr-star-partial-90 {
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}
.lcr-page-v1 .lcr-star-partial-10 { background-image: linear-gradient(90deg, #F5A623 10%, #E5E7EB 10%); }
.lcr-page-v1 .lcr-star-partial-20 { background-image: linear-gradient(90deg, #F5A623 20%, #E5E7EB 20%); }
.lcr-page-v1 .lcr-star-partial-30 { background-image: linear-gradient(90deg, #F5A623 30%, #E5E7EB 30%); }
.lcr-page-v1 .lcr-star-partial-40 { background-image: linear-gradient(90deg, #F5A623 40%, #E5E7EB 40%); }
.lcr-page-v1 .lcr-star-partial-50 { background-image: linear-gradient(90deg, #F5A623 50%, #E5E7EB 50%); }
.lcr-page-v1 .lcr-star-partial-60 { background-image: linear-gradient(90deg, #F5A623 60%, #E5E7EB 60%); }
.lcr-page-v1 .lcr-star-partial-70 { background-image: linear-gradient(90deg, #F5A623 70%, #E5E7EB 70%); }
.lcr-page-v1 .lcr-star-partial-80 { background-image: linear-gradient(90deg, #F5A623 80%, #E5E7EB 80%); }
.lcr-page-v1 .lcr-star-partial-90 { background-image: linear-gradient(90deg, #F5A623 90%, #E5E7EB 90%); }

/* State-only: pill row under the at-a-glance heading — quick-jump links to
   each top city's LCR page, with a trailing "More cities" pill that jumps
   to the nearby-cities section. Visually matches the in-state nearby-cities
   pill grid but slightly tighter (smaller padding + font) since this row
   is a supporting nav, not primary content. */
.lcr-page-v1 .lcr-glance-pills {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 0 0 20px;
}
.lcr-page-v1 .lcr-glance-pills-label {
  display: inline-flex;
  align-items: center;
  font-size: 15px;             /* bumped from 13px per Ben's feedback (state pages) */
  color: var(--lcr-dark);
  margin-right: 4px;
}
.lcr-page-v1 .lcr-glance-pill {
  display: inline-block;
  background: var(--lcr-white);
  border: 1px solid #BFDBFE;
  color: var(--lcr-blue);
  font-size: 15px;             /* bumped from 13px per Ben's feedback (state pages) */
  font-weight: 500;
  padding: 6px 12px;
  border-radius: 6px;
  text-decoration: none;
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.lcr-page-v1 .lcr-glance-pill:hover {
  background: var(--lcr-blue);
  color: var(--lcr-white);
  border-color: var(--lcr-blue);
}
/* Mobile: cap the row at two city pills (ALGCON-1670). Stock rendered three
   rows / 146px between the heading and the cards on a 375px phone; this plus the
   shortened label brings South Carolina to one row / 57px. "More cities" still
   reaches the full in-state list, so nothing becomes unreachable, and font-size
   is untouched (Ben's 15px bump above stands) — the saving is element count and
   label length only.

   :nth-of-type(n+3) is safe here: the label is a <span> and every pill is an
   <a>, so the type counter starts at the first city pill, and :not(--more)
   protects the trailing "More cities" pill from being hidden.

   12 of the 32 state pages have city names long enough to still wrap to two
   rows (101px) — every state improves on 146px, none break. Desktop is
   unchanged and keeps all five pills. */
@media (max-width: 768px) {
  .lcr-page-v1 .lcr-glance-pill:not(.lcr-glance-pill--more):nth-of-type(n+3) {
    display: none;
  }
}

/* ── At-a-glance carousel ─────────────────────────────────────────────── */
.lcr-page-v1 .lcr-glance {
  position: relative;
  margin-bottom: 24px;
}
@media (min-width: 1024px) {
  /* Desktop section spacing — small bump (~8px) between major H2 sections
     in the gray storefront zone to give each "chapter" a touch more
     breathing room. Mobile spacing stays tight; desktop has the room. */
  .lcr-page-v1 .lcr-glance         { margin-bottom: 40px; }
  .lcr-page-v1 .lcr-top-5          { margin-bottom: 48px; }
  .lcr-page-v1 .lcr-faq            { margin-bottom: 48px; }
  .lcr-page-v1 .lcr-more-companies { margin-bottom: 48px; }
}

.lcr-page-v1 .lcr-glance-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
}
.lcr-page-v1 .lcr-glance-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
}
.lcr-page-v1 .lcr-glance-arrows-desktop {
  display: none;
  align-items: center;
  gap: 8px;
}
@media (min-width: 768px) {
  .lcr-page-v1 .lcr-glance-arrows-desktop { display: flex; }
}
.lcr-page-v1 .lcr-glance-arrow {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 1px solid var(--lcr-border);
  background: var(--lcr-white);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  color: var(--lcr-dark);
  transition: background-color 0.15s ease, opacity 0.15s ease;
}
.lcr-page-v1 .lcr-glance-arrow:hover { background: #F9FAFB; }
.lcr-page-v1 .lcr-glance-arrow.lcr-disabled {
  opacity: 0.3;
  cursor: not-allowed;
}

.lcr-page-v1 .lcr-glance-carousel-wrap {
  position: relative;
}
.lcr-page-v1 .lcr-glance-carousel {
  display: flex;
  gap: 12px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 4px;        /* keep card shadows / borders from clipping */
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-glance-carousel { gap: 16px; }
}
.lcr-page-v1 .lcr-glance-carousel::-webkit-scrollbar { display: none; }
.lcr-page-v1 .lcr-glance-carousel { scrollbar-width: none; }

/* Carousel wrapper. The edge-fade overlay was removed per ALGCON-1579 — it
   washed out tooltips near the carousel edges and hurt readability; the
   scroll arrows remain the affordance. The .lcr-can-scroll-left/right classes
   are still JS-toggled (they drive the arrow enable/disable state).
   position:relative kept for any absolutely-positioned children. */
.lcr-page-v1 .lcr-glance-carousel-wrap {
  position: relative;
}

/* Carousel cards */
.lcr-page-v1 .lcr-glance-card {
  scroll-snap-align: start;
  flex-shrink: 0;
  width: 280px;
  background: var(--lcr-white);
  border: 1px solid var(--lcr-border);
  border-radius: var(--lcr-radius-card);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-glance-card { width: 260px; }
}
.lcr-page-v1 .lcr-glance-card--best {
  border-width: 2px;
  border-color: var(--lcr-blue);
}

.lcr-page-v1 .lcr-glance-ribbon {
  background: var(--lcr-blue-light);
  padding: 6px 16px;
}
.lcr-page-v1 .lcr-glance-ribbon-icon {
  display: inline-flex;
  align-items: center;
  margin-right: 6px;
  vertical-align: middle;
  color: var(--lcr-blue);  /* default: matches the blue ribbon-label color */
}
.lcr-page-v1 .lcr-glance-ribbon--best .lcr-glance-ribbon-icon {
  color: var(--lcr-white); /* Best Overall tile — white icon on solid blue */
}
.lcr-page-v1 .lcr-glance-ribbon-icon svg {
  display: block;
  width: 16px;                 /* bumped from inline 14×14 per Ben's feedback */
  height: 16px;
}
/* Lucide ships outline icons, but every other pick-badge icon in
   lcr_directory_pick_icon_svg() is a solid fill. Fill the star and drop its
   stroke here rather than editing the SVG, so the inlined markup stays verbatim
   Lucide. Scoped to the star's own class so the other five icons — which have no
   stroke attribute to begin with — are untouched. (ALGCON-1670) */
.lcr-page-v1 .lcr-pick-ico--star {
  fill: currentColor;
  stroke: none;
}
.lcr-page-v1 .lcr-glance-ribbon-label {
  font-size: 13px;             /* bumped from 11px per Ben's feedback */
  font-weight: 700;
  color: var(--lcr-blue);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  vertical-align: middle;
}
.lcr-page-v1 .lcr-glance-ribbon--best { background: var(--lcr-blue); }
.lcr-page-v1 .lcr-glance-ribbon--best .lcr-glance-ribbon-label { color: var(--lcr-white); }

.lcr-page-v1 .lcr-glance-card-body {
  padding: 20px;
  display: flex;
  flex-direction: column;
  align-items: center;     /* center tile content to match SBR similar-companies tiles (ALGCON-1579) */
  text-align: center;
  flex: 1 1 auto;
}
.lcr-page-v1 .lcr-glance-card-logo {
  height: 40px;
  width: auto;
  max-width: 160px;
  object-fit: contain;
  object-position: center;
  margin-bottom: 12px;     /* logo centers via the body's align-items:center (ALGCON-1579); was margin-right:auto (left-pinned) */
}
.lcr-page-v1 .lcr-glance-card-name {
  font-size: 16px;             /* bumped from 14px per Ben's feedback */
  font-weight: 600;
  color: var(--lcr-dark);
  margin-bottom: 2px;
}
.lcr-page-v1 .lcr-glance-card-loc {
  display: block;
  font-size: 14px;             /* matches SBR .lcr-sbr-similar-type (ALGCON-1579); stays < .lcr-glance-card-name 16px */
  color: var(--lcr-muted);
  margin-bottom: 12px;
}
.lcr-page-v1 .lcr-glance-card-rating-row {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-bottom: 16px;       /* fills the gap left by removing reviews count */
}
.lcr-page-v1 .lcr-glance-card-rating {
  font-size: 16px;
  font-weight: 700;
  color: var(--lcr-dark);
}
.lcr-page-v1 .lcr-glance-card-fee {
  background: var(--lcr-surface-subtle);
  border-radius: var(--lcr-radius-btn);
  padding: 8px 12px;
  margin-bottom: 16px;
}
.lcr-page-v1 .lcr-glance-card-fee-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--lcr-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-bottom: 2px;
}
.lcr-page-v1 .lcr-glance-card-fee-value {
  font-size: 16px;
  font-weight: 700;
  color: var(--lcr-blue);
}
.lcr-page-v1 .lcr-glance-card-ctas {
  margin-top: auto;
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-self: stretch;     /* keep CTAs full-width under the body's align-items:center */
}
.lcr-page-v1 .lcr-glance-card-cta {
  display: block;
  text-align: center;
  font-size: 15px;             /* bumped from 14px per Ben's feedback */
  font-weight: 600;
  padding: 10px;
  border-radius: var(--lcr-radius-btn);
  color: var(--lcr-white);
  transition: background-color 0.15s ease;
}
.lcr-page-v1 .lcr-glance-card-cta--green { background: var(--lcr-green); }
.lcr-page-v1 .lcr-glance-card-cta--green:hover { background: var(--lcr-green-hover); }
.lcr-page-v1 .lcr-glance-card-cta--blue  { background: var(--lcr-blue); }
.lcr-page-v1 .lcr-glance-card-cta--blue:hover { background: var(--lcr-blue-hover); }
.lcr-page-v1 .lcr-glance-card-secondary {
  display: block;
  text-align: center;
  font-size: 13px;             /* bumped from 12px to match .lcr-glance-card-loc per Ben's feedback */
  color: var(--lcr-muted);
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-glance-card-secondary:hover { color: var(--lcr-blue); }
.lcr-page-v1 .lcr-glance-card-secondary-spacer {
  display: block;
  text-align: center;
  font-size: 13px;             /* match .lcr-glance-card-secondary so the spacer height stays in sync */
  visibility: hidden;
}

/* ── Our take callout (sits below the carousel) ──────────────────────── */
.lcr-page-v1 .lcr-our-take {
  background: var(--lcr-blue-light);
  border: 1px solid #BFDBFE;
  border-radius: var(--lcr-radius-card);
  padding: 20px;
  margin-top: 24px;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-our-take { margin-top: 16px; }
}
.lcr-page-v1 .lcr-our-take p {
  font-size: 16px;             /* 15 → 17 → 16 (dialed back a tad, matches .lcr-intro-p) */
  color: var(--lcr-dark);
  line-height: 1.625;
  margin-bottom: 12px;
}
.lcr-page-v1 .lcr-our-take p:last-child { margin-bottom: 0; }
.lcr-page-v1 .lcr-our-take p strong { font-weight: 600; }
/* In-text CTA (ALGCON-1670). Styled as an editorial link, not a button — the
   whole point is that it does not compete with the card CTAs. Underlined rather
   than colour-only so it is identifiable as a link without relying on hue
   (WCAG 1.4.1), and it inherits the paragraph's 16px so it stays in the flow. */
.lcr-page-v1 .lcr-our-take p a {
  color: var(--lcr-blue);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-our-take p a:hover {
  color: var(--lcr-blue-hover);
  text-decoration-thickness: 2px;
}

/* ── Personalize input form ───────────────────────────────────────────── */
/* ── Personalize minibar ──────────────────────────────────────────────────
   Replaces the previous boxed widget (white card, 440px, house icon, "Your Home
   Value" label + "Personalize this page" button). That version read as a form
   dropped into the editorial flow and never showed what the page was currently
   computing from.

   Built to the 2026-08-11 design spec: contained to the reading column, white
   card, icon tile, real primary button, and a confirmed state that carries the
   value. Sticky, so it stays reachable while the ranked list is on screen.

   Three spec values are new to this stylesheet and are scoped to the component
   as custom properties rather than added to the global token layer, so they are
   easy to reconcile later:
     --pz-navy          #09223D  (global text token is --lcr-dark #161E26)
     --pz-radius-ctl    9px      (global button radius is --lcr-radius-btn 8px)
     --pz-border-strong / --pz-label  no global equivalent today
   Everything else uses the existing --lcr-* tokens. */
.lcr-page-v1 .pz-bar {
  --pz-navy: #09223D;
  --pz-border-strong: #D1D5DB;
  --pz-label: #9CA3AF;
  --pz-radius-ctl: 9px;

  box-sizing: border-box;
  max-width: var(--lcr-reading-w);
  margin: 0 0 20px;
  background: var(--lcr-white);
  border: 1px solid var(--lcr-border);
  border-radius: var(--lcr-radius-card);
  box-shadow: 0 1px 2px rgba(0, 0, 0, .04);
  padding: 16px 20px;
}
.lcr-page-v1 .pz-state { display: flex; align-items: center; gap: 24px; }
.lcr-page-v1 .pz-state[hidden] { display: none; }

.lcr-page-v1 .pz-lede { display: flex; align-items: center; gap: 12px; flex: 1; min-width: 0; }
.lcr-page-v1 .pz-icon {
  width: 34px;
  height: 34px;
  flex-shrink: 0;
  border-radius: var(--pz-radius-ctl);
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--lcr-blue-light);
  color: var(--lcr-blue);
}
.lcr-page-v1 .pz-icon--done { background: var(--lcr-green-light); color: var(--lcr-green); }
.lcr-page-v1 .pz-icon svg { display: block; }
.lcr-page-v1 .pz-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.lcr-page-v1 .pz-title { font-size: 15px; font-weight: 600; color: var(--pz-navy); }
.lcr-page-v1 .pz-desc  { font-size: 13px; line-height: 1.45; color: var(--lcr-muted); }

.lcr-page-v1 .pz-controls { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
/* box-sizing is load-bearing: the page inherits content-box, so a 1px border on
   a height:42px shell renders 44px and the field sits 2px taller than the button
   beside it — the same trap as the TOC's 810-vs-812 miss. */
.lcr-page-v1 .pz-input {
  box-sizing: border-box;
  display: flex;
  align-items: center;
  gap: 6px;
  height: 42px;
  padding: 0 12px;
  margin: 0;
  border: 1px solid var(--pz-border-strong);
  border-radius: var(--pz-radius-ctl);
  background: var(--lcr-white);
  transition: border-color 150ms ease, box-shadow 150ms ease;
}
.lcr-page-v1 .pz-input:focus-within {
  border-color: var(--lcr-blue);
  box-shadow: 0 0 0 3px rgba(0, 117, 235, .12);
}
/* A real label rather than a placeholder — a placeholder vanishes the moment
   typing starts, taking the only cue for what the number means with it. */
.lcr-page-v1 .pz-field-label {
  font-size: 12px;
  font-weight: 500;
  color: var(--lcr-muted);
  white-space: nowrap;
  padding-right: 8px;
  border-right: 1px solid var(--lcr-border);
}
.lcr-page-v1 .pz-prefix { font-size: 14px; font-weight: 500; color: var(--pz-label); }
.lcr-page-v1 .pz-value-input {
  border: 0;
  outline: 0;
  background: transparent;
  padding: 0;
  /* Flexes so the field label can never push the input out of the shell. */
  flex: 1 1 auto;
  min-width: 0;
  width: 120px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 500;
  color: var(--pz-navy);
  letter-spacing: inherit;
  box-shadow: none;
}

.lcr-page-v1 .pz-btn {
  box-sizing: border-box;
  height: 42px;
  padding: 0 18px;
  border: 0;
  border-radius: var(--pz-radius-ctl);
  cursor: pointer;
  background: var(--lcr-blue);
  color: var(--lcr-white);
  font-family: inherit;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: inherit;
  transition: background 200ms ease, transform 200ms ease, box-shadow 200ms ease;
}
.lcr-page-v1 .pz-btn:hover {
  background: var(--lcr-blue-hover);
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(0, 117, 235, .28);
}
.lcr-page-v1 .pz-btn:active { transform: translateY(0); }
.lcr-page-v1 .pz-btn--ghost {
  height: 38px;
  padding: 0 16px;
  background: var(--lcr-white);
  color: var(--pz-navy);
  border: 1px solid var(--pz-border-strong);
  font-size: 13px;
}
.lcr-page-v1 .pz-btn--ghost:hover {
  background: var(--lcr-white);
  border-color: var(--lcr-blue);
  color: var(--lcr-blue);
  box-shadow: none;
  transform: none;
}

.lcr-page-v1 .pz-summary { display: flex; align-items: center; gap: 18px; flex-shrink: 0; }
.lcr-page-v1 .pz-value { display: flex; flex-direction: column; gap: 1px; text-align: right; }
.lcr-page-v1 .pz-value-label {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--pz-label);
}
.lcr-page-v1 .pz-value-num {
  font-size: 19px;
  font-weight: 600;
  letter-spacing: -.01em;
  color: var(--pz-navy);
}
.lcr-page-v1 .pz-error { font-size: 13px; color: #B45309; margin: 10px 0 0; }
.lcr-page-v1 .pz-error[hidden] { display: none; }

/* ── Fixed bar ──
   No in-flow copy: the component exists only as the pinned bar (Hannah,
   2026-08-11 — the in-flow card read as redundant beside it). It was sticky
   first, which put the same element in the page as a full card; sticky must
   occupy flow space, so removing that card meant moving to fixed.
   Revealed by initPersonalizeFixed while a card list is on screen. */
.lcr-page-v1 .pz-fixed {
  position: fixed;
  left: 0;
  right: 0;
  top: 0;
  z-index: 900;
  background: var(--lcr-white);
  border-bottom: 1px solid var(--lcr-border);
  box-shadow: 0 2px 10px -6px rgba(12, 20, 42, .28);
  transform: translateY(-100%);
  /* visibility, not just the transform: a transformed-offscreen element is
     still tabbable, so the hidden bar's input and buttons sat in the tab order
     (PR #7 review). visibility:hidden is untabbable in every browser, which is
     the floor under initPersonalizeFixed's `inert` toggle for browsers that
     don't support it.

     The 0s delay is what keeps the slide visible: on hide, visibility flips
     only after the .22s transform completes; on show (.is-shown below) it flips
     immediately, with no delay, so the bar is visible for the whole slide in. */
  visibility: hidden;
  transition: transform .22s ease, visibility 0s linear .22s;
}
.lcr-page-v1 .pz-fixed.is-shown {
  transform: translateY(0);
  visibility: visible;
  transition: transform .22s ease, visibility 0s;
}
.lcr-page-v1 .pz-inner {
  max-width: var(--lcr-content-w);
  margin: 0 auto;
  padding: 0 16px;
}

/* Anchor-jump clearance. The eight in-page targets carry scroll-margin-top:112px
   for the site header; a fixed bar on top of that would leave their headings
   underneath it. Raised only while the bar is actually visible, so jumps made
   when it is hidden keep the original offset. Keep in sync with the bar height. */
.lcr-page-v1.pz-bar-shown [id] { scroll-margin-top: 168px; }

/* Condensed (pinned): the card gives up its own frame — the strip supplies the
   surface — drops the description, and tightens to a single ~53px row. */
.lcr-page-v1 .pz-fixed .pz-bar {
  max-width: none;
  margin: 0;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  padding: 7px 0;
}
.lcr-page-v1 .pz-fixed .pz-desc { display: none; }
.lcr-page-v1 .pz-fixed .pz-title { font-size: 14px; }
.lcr-page-v1 .pz-fixed .pz-icon { width: 28px; height: 28px; }
.lcr-page-v1 .pz-fixed .pz-icon svg { width: 15px; height: 15px; }
.lcr-page-v1 .pz-fixed .pz-input { height: 38px; }
.lcr-page-v1 .pz-fixed .pz-btn { height: 38px; padding: 0 14px; }
.lcr-page-v1 .pz-fixed .pz-btn--ghost { height: 34px; }
.lcr-page-v1 .pz-fixed .pz-value-num { font-size: 16px; }
.lcr-page-v1 .pz-fixed .pz-state { gap: 16px; }

/* Payoff cue: most of the recomputed cells sit below the fold, so flash them. */
/* 2.2s, up from 1.3s (Hannah, 2026-08-12: "it does fade pretty fast"). The cue
   has to survive the moment after submit on mobile, where the keyboard is still
   collapsing and the reader's eye has not reached the cards yet.

   It is NOT disabled under prefers-reduced-motion, and that is deliberate. The
   keyframes move nothing — they fade a background and a box-shadow colour, with
   no transform, translation, parallax or scaling — so there is nothing here that
   triggers the vestibular responses the media query exists to protect against.
   It used to be switched off with the genuinely motion-based rules below, which
   left those readers with no cue at all that the figures had changed: the one
   group most likely to need the cue got the least. Screen readers are covered
   separately by the .pz-status live region (see personalize.php). */
.lcr-page-v1 .pz-flash { animation: pzFlash 2.2s ease-out 1; border-radius: 4px; }
@keyframes pzFlash {
  0%   { background: #FEF3C7; box-shadow: 0 0 0 4px #FEF3C7; }
  100% { background: transparent; box-shadow: 0 0 0 4px transparent; }
}

/* Live region for the recompute. Visually hidden but not display:none — the
   latter is ignored by screen readers, which would defeat the point. */
.lcr-page-v1 .pz-status {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

@media (prefers-reduced-motion: reduce) {
  /* .pz-flash is intentionally absent — see the note above. These two are real
     motion: a lift on hover and the bar sliding in from off-screen. */
  .lcr-page-v1 .pz-btn:hover { transform: none; }
  .lcr-page-v1 .pz-fixed { transition: none; }
}

/* ── Mobile ──
   In flow, the card stacks (spec). Pinned, it must NOT stack — a column would
   occupy ~140px of viewport permanently — so the row is forced back and stripped
   to what earns its place at 375px:  [Home value | $ …] [See savings].
   The section title drops; the FIELD label stays, because it is the only
   persistent cue for what to type. */
@media (max-width: 760px) {
  .lcr-page-v1 .pz-state { flex-direction: column; align-items: stretch; gap: 14px; }
  .lcr-page-v1 .pz-controls,
  .lcr-page-v1 .pz-summary { justify-content: space-between; }
  .lcr-page-v1 .pz-input { flex: 1; }
  .lcr-page-v1 .pz-value { text-align: left; }

  .lcr-page-v1 .pz-fixed .pz-state { flex-direction: row; align-items: center; gap: 8px; }
  .lcr-page-v1 .pz-fixed .pz-bar { padding: 6px 0; }
  .lcr-page-v1 .pz-fixed .pz-lede { flex: 0 0 auto; }
  .lcr-page-v1 .pz-fixed .pz-title { display: none; }
  /* Drop the sliders tile in the ASK state. With .pz-title already hidden the
     tile is the only thing left in that lede, and it is decorative
     (aria-hidden) — it was costing the field 46px of the 343px row while
     carrying no information. Measured value width at the 16px iOS-safe size:

              icon kept   icon dropped   "650,000" needs
       375px     77.3px       123.3px         65.1px
       360px     62.3px       108.3px         65.1px   <- clipped before
       320px     22.3px        68.3px         65.1px

     360px is the case Hannah caught on a handset: 62.3 < 65.1, so a normal
     seven-figure value ran under the button by ~3px. $10M (the validator's
     ceiling, 84.6px) now fits at 375 and 360.

     The DONE state keeps its lede: that tile is the green check, which is the
     confirmation cue itself, and that state has no input to starve. */
  .lcr-page-v1 .pz-fixed .pz-state--ask .pz-lede { display: none; }
  .lcr-page-v1 .pz-fixed .pz-icon { width: 26px; height: 26px; border-radius: 7px; }
  .lcr-page-v1 .pz-fixed .pz-icon svg { width: 14px; height: 14px; }
  .lcr-page-v1 .pz-fixed .pz-field-label { font-size: 11px; padding-right: 6px; }
  /* 8px rather than 10px: "Your home value" is 26px wider than the old "Home
     value" label, which left the value field 82.6px at 360px — enough for every
     value up to $9,999,999 (78.3px) but 2px short of the validator's $10,000,000
     ceiling (84.6px). Trimming 2px a side buys 4px and puts the full range back
     inside the field. */
  .lcr-page-v1 .pz-fixed .pz-input { padding: 0 8px; gap: 5px; height: 38px; flex: 1 1 auto; min-width: 0; }
  .lcr-page-v1 .pz-fixed .pz-controls { flex: 1 1 auto; min-width: 0; gap: 8px; }
  /* 38px, matching .pz-input above — same "input and button should be the same
     height" note from Mus, applied to the minibar as well as the CTA panel. */
  .lcr-page-v1 .pz-fixed .pz-btn { flex: 0 0 auto; height: 38px; padding: 0 12px; font-size: 13px; }
  /* Shorter label on mobile, swapped in CSS so the markup stays as specced. */
  .lcr-page-v1 .pz-fixed .pz-btn[data-personalize-submit] { font-size: 0; }
  .lcr-page-v1 .pz-fixed .pz-btn[data-personalize-submit]::after { content: "See savings"; font-size: 13px; }
  .lcr-page-v1 .pz-fixed .pz-summary { flex: 1 1 auto; justify-content: space-between; gap: 10px; min-width: 0; }
  .lcr-page-v1 .pz-fixed .pz-value { flex-direction: row; align-items: baseline; gap: 6px; }
  .lcr-page-v1 .pz-fixed .pz-value-label { font-size: 10px; }
  .lcr-page-v1 .pz-fixed .pz-value-num { font-size: 15px; }
  .lcr-page-v1 .pz-fixed .pz-btn--ghost { height: 32px; padding: 0 12px; }
}

/* ── iOS auto-zoom on focus ──
   Mobile Safari zooms the viewport whenever a focused form control has a
   computed font-size BELOW 16px. The field was 14px, so tapping it zoomed the
   page — and because the bar is fixed, the user was then left zoomed in with the
   layout shifted under them.

   16px is the threshold, not a minimum-plus-margin, so exactly 16px is enough.
   The "$" prefix goes up with it so the two stay optically aligned.

   Deliberately NOT fixed with `maximum-scale=1` / `user-scalable=no` on the
   viewport meta, which is the usual shortcut. That disables pinch-zoom for the
   whole page and fails WCAG 1.4.4 (resize up to 200%). It is also not this
   plugin's to set — the viewport meta is theme-level.

   Breakpoint is 767px rather than the component's 760px on purpose: 760 is the
   spec's layout breakpoint, whereas this needs to cover every phone-width device
   that could focus the field. */
@media (max-width: 767px) {
  .lcr-page-v1 .pz-value-input { font-size: 16px; }
  .lcr-page-v1 .pz-prefix { font-size: 16px; }
}

/* ════════════════════════════════════════════════════════════════════════
   STEP 6a — TOP-5 SECTION + CARD SHELL + TABS
   Tab body content lands in steps 6b–6d.
   ──────────────────────────────────────────────────────────────────────── */

/* ── Top-5 section ─────────────────────────────────────────────────────── */
.lcr-page-v1 .lcr-top-5 {
  margin-bottom: 40px;
}
.lcr-page-v1 .lcr-top-5-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  margin-bottom: 16px;
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
}

/* ── Card shell ─────────────────────────────────────────────────────────── */
.lcr-page-v1 .lcr-card {
  background: var(--lcr-white);
  border: 1px solid var(--lcr-border);
  border-radius: var(--lcr-radius-card);
  margin-bottom: 24px;
  /* No overflow:hidden — it inhibits touch-scroll on the .lcr-card-tabs
     child on mobile. Ribbon corner-clipping is done by giving the ribbon
     matching top radii directly (see .lcr-card-ribbon below). */
  scroll-margin-top: 112px;
}

/* Ribbon — light-blue default; solid blue + white text for "best_overall".
   Top corner radii match the card's so the ribbon's color doesn't bleed
   past the rounded card corners (was previously handled by overflow:hidden
   on .lcr-card, which had to be removed for mobile tab-scroll). */
.lcr-page-v1 .lcr-card-ribbon {
  background: var(--lcr-blue-light);
  padding: 8px 20px;
  border-top-left-radius: var(--lcr-radius-card);
  border-top-right-radius: var(--lcr-radius-card);
  text-align: center;            /* mobile/tablet centered hierarchy per Ben's feedback */
}
@media (min-width: 768px) { .lcr-page-v1 .lcr-card-ribbon { padding: 8px 24px; } }
@media (min-width: 1024px) { .lcr-page-v1 .lcr-card-ribbon { text-align: left; } }
.lcr-page-v1 .lcr-card-ribbon--best { background: var(--lcr-blue); }
.lcr-page-v1 .lcr-card-ribbon-icon {
  display: inline-flex;
  align-items: center;
  margin-right: 6px;
  vertical-align: middle;
  color: var(--lcr-blue);  /* default: matches the blue ribbon-label color */
}
.lcr-page-v1 .lcr-card-ribbon--best .lcr-card-ribbon-icon {
  color: var(--lcr-white); /* Best Overall ribbon — white icon on solid blue */
}
.lcr-page-v1 .lcr-card-ribbon-icon svg {
  display: block;              /* avoid descender-based misalignment */
  width: 16px;                 /* bumped from inline 14×14 per Ben's feedback (matches tile ribbon) */
  height: 16px;
}
.lcr-page-v1 .lcr-card-ribbon-label {
  font-size: 13px;             /* bumped from 11px per Ben's feedback (matches tile ribbon) */
  font-weight: 700;
  color: var(--lcr-blue);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  vertical-align: middle;
}
.lcr-page-v1 .lcr-card-ribbon--best .lcr-card-ribbon-label { color: var(--lcr-white); }

/* Card body padding wrapper */
.lcr-page-v1 .lcr-card-body { padding: 20px; }
@media (min-width: 1024px) { .lcr-page-v1 .lcr-card-body { padding: 20px 24px; } }

/* ── Header section (logo + content with stats/CTA flowing inside) ──────
   At ≥1024px the header is a 2-col single-row grid: 220px logo on the
   left, content on the right. Stats+CTA live INSIDE the content column,
   flowing directly under product type — so they visually align with the
   rating row in the logo column instead of being pushed to a separate
   row. The header has a single bottom border separating it from the
   tabs. At <1024px everything stacks. */
.lcr-page-v1 .lcr-card-header {
  display: flex;
  flex-direction: column;
  margin-bottom: 16px;
  text-align: center;          /* mobile/tablet centered hierarchy per Ben's feedback */
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-header {
    display: grid;
    grid-template-columns: 220px 1fr;
    column-gap: 24px;
    align-items: start;       /* top-align both columns to their content */
    margin-bottom: 20px;
    padding-bottom: 20px;
    border-bottom: 1px solid var(--lcr-border);
    text-align: left;          /* desktop reverts to left-aligned 2-column layout */
  }
}

/* Logo column — centered logo at mobile; left-aligned with right border
   at desktop. */
.lcr-page-v1 .lcr-card-logo-col {
  display: flex;
  justify-content: center;
  margin-bottom: 12px;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-logo-col {
    display: block;
    margin-bottom: 0;
    padding-right: 24px;
    border-right: 1px solid var(--lcr-border);
    align-self: stretch;      /* fill row height so the right border runs full-card */
  }
}
.lcr-page-v1 .lcr-card-logo {
  height: 80px;
  width: auto;
  max-width: 160px;
  object-fit: contain;
  flex-shrink: 0;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-logo {
    height: 72px;
    max-width: 190px;
    margin-bottom: 8px;
    display: block;
  }
}

/* Content column — at desktop becomes a stretching flex-col so the
   stats+CTA can push to the bottom (margin-top: auto), aligning with the
   rating row in the logo column instead of bunching near the top. */
.lcr-page-v1 .lcr-card-content-col { min-width: 0; }
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-content-col {
    display: flex;
    flex-direction: column;
    align-self: stretch;
  }
}
.lcr-page-v1 .lcr-card-name {
  font-size: 18px;
  font-weight: 600;
  color: var(--lcr-dark);
  line-height: 1.2;
  margin-bottom: 4px;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-name { font-size: 20px; margin-bottom: 4px; }
}
.lcr-page-v1 .lcr-card-product-type {
  font-size: 14px;
  color: var(--lcr-muted);          /* gray-500, not link-blue — Jamie: stop mimicking an anchor */
  margin-bottom: 12px;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-product-type { margin-bottom: 8px; }
}
/* Dotted-underline affordance — applied only when a tooltip body actually
   exists to discover. The first child <span> inside .lcr-tip-wrap is the
   visible text; the conditional second child .lcr-tip carries the body. */
.lcr-page-v1 .lcr-card-product-type .lcr-tip-wrap:has(> .lcr-tip) > span:first-child {
  text-decoration: underline dotted;
  text-underline-offset: 3px;
  text-decoration-color: #9CA3AF;   /* gray-400 — softer than the text */
}
.lcr-page-v1 .lcr-card-product-type .lcr-tip-wrap:hover > span:first-child,
.lcr-page-v1 .lcr-card-product-type .lcr-tip-wrap:focus-visible > span:first-child {
  color: var(--lcr-dark);           /* slight darken on hover signals interactivity */
}

/* Rating + location block — rendered twice; one variant visible per breakpoint */
.lcr-page-v1 .lcr-card-rating-loc--desktop { display: none; }
.lcr-page-v1 .lcr-card-rating-loc--mobile  { display: block; }
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-rating-loc--desktop { display: block; }
  .lcr-page-v1 .lcr-card-rating-loc--mobile  { display: none; }
}
.lcr-page-v1 .lcr-card-rating-wrap {
  display: inline-flex;
  margin-bottom: 8px;
}
.lcr-page-v1 .lcr-card-rating-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  column-gap: 8px;
  row-gap: 4px;
  justify-content: center;     /* mobile/tablet — keeps rating+stars+Top Rated centered */
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-rating-row { justify-content: flex-start; }
}
.lcr-page-v1 .lcr-card-rating-num {
  font-size: 20px;
  font-weight: 700;
  color: var(--lcr-dark);
  line-height: 1;
}
.lcr-page-v1 .lcr-card-top-rated {
  display: inline-block;
  font-size: 12px;             /* bumped from 10px per Ben's feedback */
  font-weight: 700;
  padding: 2px 8px;
  border-radius: var(--lcr-radius-badge);
  margin-left: 4px;
  background: #D1FAE5;       /* sentiment-positive bg */
  color: #059669;            /* sentiment-positive text */
}
.lcr-page-v1 .lcr-card-location {
  font-size: 14px;             /* bumped from 12px per Ben's feedback (matches .lcr-card-product-type) */
  color: var(--lcr-muted);
  margin-bottom: 16px;
}
.lcr-page-v1 .lcr-card-location-icon {
  display: inline-block;
  vertical-align: -1px;
  margin-right: 4px;
}
@media (min-width: 1024px) {
  /* Last element in the desktop logo column — no trailing space needed.
     Mobile keeps the 16px since the rating-loc block sits between content
     and stats inside .lcr-card-content-col. */
  .lcr-page-v1 .lcr-card-rating-loc--desktop .lcr-card-location { margin-bottom: 0; }
}

/* ── Stats + CTA — lives inside .lcr-card-content-col. At desktop,
   margin-top:auto pushes it to the bottom of the stretched content-col
   so its top edge aligns with the rating row on the left (the rating
   sits roughly at the same y once logo + 12px gap pushes it down).
   At mobile the flex-col runs naturally; the CTA already lives below
   the stats box via the wrapper's flex-col. */
.lcr-page-v1 .lcr-card-stats-cta {
  display: flex;
  flex-direction: column;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-stats-cta {
    flex-direction: row;
    align-items: center;
    gap: 12px;
    margin-top: auto;        /* push toward the bottom of .lcr-card-content-col */
    margin-bottom: 4px;      /* small nudge — keeps the stat values' baseline at
                                roughly the rating-number height on the left */
  }
}

/* Stats wrapper — three layouts by breakpoint:
   <480px (tiny phones):  bordered-box w/ 3 stacked rows (label | value)
   ≥480px (tablet/desktop): flat horizontal row, 3 cells side-by-side, centered text
   ≥1024px (desktop):     same horizontal row, cells left-aligned (sits in right col) */
.lcr-page-v1 .lcr-card-stats {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--lcr-border);
  border-radius: var(--lcr-radius-btn);
  overflow: hidden;
  margin-bottom: 16px;
}
@media (min-width: 480px) {
  .lcr-page-v1 .lcr-card-stats {
    flex-direction: row;
    gap: 12px;
    border: 0;
    border-radius: 0;
    overflow: visible;
  }
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-stats {
    flex: 1 1 0;
    margin-bottom: 0;
  }
}
.lcr-page-v1 .lcr-card-stat {
  flex: 1 1 0;
  display: flex;       /* lcr-tip-wrap is inline-flex by default; force flex for layout */
}
.lcr-page-v1 .lcr-card-stat-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 16px;
  width: 100%;
  border-top: 1px solid var(--lcr-border);
}
.lcr-page-v1 .lcr-card-stats > .lcr-card-stat:first-child .lcr-card-stat-inner { border-top: 0; }
@media (min-width: 480px) {
  .lcr-page-v1 .lcr-card-stat-inner {
    flex-direction: column;
    align-items: center;     /* tablet centered hierarchy */
    justify-content: center;
    padding: 0;
    border-top: 0;
  }
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-stat-inner { align-items: flex-start; }   /* desktop reverts */
}
.lcr-page-v1 .lcr-card-stat-label {
  font-size: 12px;             /* bumped from 11px per Ben's feedback */
  font-weight: 600;
  color: var(--lcr-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-card-stat-label { margin-bottom: 4px; } }
.lcr-page-v1 .lcr-card-stat-value {
  font-size: 18px;
  font-weight: 700;
  color: var(--lcr-dark);
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-card-stat-value { font-size: 20px; } }
.lcr-page-v1 .lcr-card-stat-value--savings { color: #059669; }   /* green for positive savings */

/* CTA — full width below stats at mobile; fixed 180px to the right at desktop */
.lcr-page-v1 .lcr-card-cta {
  display: block;
  width: 100%;
  max-width: 240px;            /* cap on mobile/tablet so the button doesn't stretch across the card */
  margin: 0 auto;              /* center within the centered hierarchy */
  text-align: center;
  font-size: 15px;             /* matched to .lcr-glance-card-cta per Ben's feedback (was 16px) */
  font-weight: 600;
  padding: 12px;
  border-radius: var(--lcr-radius-btn);
  color: var(--lcr-white);
  transition: background-color 0.15s ease;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-cta {
    width: 180px;
    max-width: none;           /* desktop uses the fixed 180px in the right column row */
    margin: 0;
    flex-shrink: 0;
    font-size: 15px;
    padding: 10px;
  }
}
.lcr-page-v1 .lcr-card-cta--green { background: var(--lcr-green); }
.lcr-page-v1 .lcr-card-cta--green:hover { background: var(--lcr-green-hover); }
.lcr-page-v1 .lcr-card-cta--blue  { background: var(--lcr-blue); }
.lcr-page-v1 .lcr-card-cta--blue:hover  { background: var(--lcr-blue-hover); }

/* ── Tabs ─────────────────────────────────────────────────────────────── */
/* Border between header/stats and tabs. At desktop, the header section already
   has its own bottom border, so we suppress the redundant top border here. */
.lcr-page-v1 .lcr-card-tabs-section {
  margin-top: 20px;
  padding-top: 20px;
  border-top: 1px solid var(--lcr-border);
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-tabs-section {
    margin-top: 20px;
    padding-top: 0;
    border-top: 0;
  }
}

/* Tab bar — pill buttons, scrolls horizontally on mobile if they overflow.
   The fade-edge affordance lives on the .lcr-card-tabs-wrap parent (see below)
   so users have a visual cue that more tabs exist to the right. Mirrors the
   at-a-glance carousel pattern. */
.lcr-page-v1 .lcr-card-tabs-wrap {
  position: relative;
  margin-bottom: 16px;
}
.lcr-page-v1 .lcr-card-tabs {
  display: flex;
  align-items: center;
  gap: 6px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;  /* iOS momentum */
  padding-bottom: 4px;
}
.lcr-page-v1 .lcr-card-tabs::-webkit-scrollbar { display: none; }
.lcr-page-v1 .lcr-card-tabs { scrollbar-width: none; }
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-tabs-wrap { margin-bottom: 16px; }
  .lcr-page-v1 .lcr-card-tabs { overflow-x: visible; padding-bottom: 0; }
}

/* Edge-fade overlays — pseudo-elements on the wrap (not mask-image on the
   tabs themselves) so position:fixed tooltips inside tab content aren't
   clipped. Opacity controlled by .lcr-can-scroll-left/right classes that
   JS toggles on the inner .lcr-card-tabs (same pattern as the carousel). */
.lcr-page-v1 .lcr-card-tabs-wrap::before,
.lcr-page-v1 .lcr-card-tabs-wrap::after {
  content: '';
  position: absolute;
  top: 0;
  bottom: 4px;          /* match .lcr-card-tabs padding-bottom so fade aligns with the row */
  width: 24px;
  pointer-events: none;
  z-index: 5;
  opacity: 0;
  transition: opacity 0.2s ease;
}
.lcr-page-v1 .lcr-card-tabs-wrap::before {
  left: 0;
  background: linear-gradient(to right, var(--lcr-white), transparent);
}
.lcr-page-v1 .lcr-card-tabs-wrap::after {
  right: 0;
  background: linear-gradient(to left, var(--lcr-white), transparent);
}
.lcr-page-v1 .lcr-card-tabs-wrap:has(.lcr-can-scroll-left)::before  { opacity: 1; }
.lcr-page-v1 .lcr-card-tabs-wrap:has(.lcr-can-scroll-right)::after { opacity: 1; }
@media (min-width: 1024px) {
  /* No overflow at desktop — suppress the fades regardless of class state. */
  .lcr-page-v1 .lcr-card-tabs-wrap::before,
  .lcr-page-v1 .lcr-card-tabs-wrap::after { display: none; }
}
.lcr-page-v1 .lcr-card-tab {
  background: var(--lcr-surface-subtle);
  color: var(--lcr-muted);
  font-family: inherit;
  letter-spacing: inherit;
  font-size: 14px;             /* bumped from 12px per Ben's feedback */
  font-weight: 500;
  padding: 6px 12px;
  border: 0;
  border-radius: var(--lcr-radius-pill);
  cursor: pointer;
  white-space: nowrap;
  flex-shrink: 0;
  transition: background-color 0.15s ease, color 0.15s ease;
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-card-tab { padding: 6px 16px; } }
/* Selected tab uses the light blue, NOT the CTA fill (Mus, 2026-08-12: "only
   the CTA should use the CTA styling", "tabs are secondary so should not stand
   out as much"). The selected tab was solid --lcr-blue on white text, i.e.
   identical to a primary button, so every card carried something that looked
   like a CTA but wasn't.

   Text is --lcr-blue-hover, not --lcr-blue. At 14px these labels are normal
   text and need 4.5:1: --lcr-blue on this background is 3.95:1 and fails,
   --lcr-blue-hover is 5.39:1 and passes. The hover state had the same failing
   pair and is corrected with it. */
.lcr-page-v1 .lcr-card-tab:hover {
  background: var(--lcr-blue-light);
  color: var(--lcr-blue-hover);
}
.lcr-page-v1 .lcr-card-tab--active,
.lcr-page-v1 .lcr-card-tab[aria-selected="true"] {
  background: var(--lcr-blue-light);
  color: var(--lcr-blue-hover);
  font-weight: 600;
}
.lcr-page-v1 .lcr-card-tab--active:hover,
.lcr-page-v1 .lcr-card-tab[aria-selected="true"]:hover {
  background: var(--lcr-blue-light);
  color: var(--lcr-blue-hover);
}

/* Tab panels — base typography */
.lcr-page-v1 .lcr-card-panel {
  font-size: 15px;             /* bumped from 14px per Ben's feedback */
  color: var(--lcr-dark);
  line-height: 1.625;
}

/* ── Step 6b — Summary tab body ───────────────────────────────────────── */
.lcr-page-v1 .lcr-card-summary {
  font-size: 15px;             /* bumped from 14px per Ben's feedback */
  color: var(--lcr-dark);
  line-height: 1.625;
}
.lcr-page-v1 .lcr-card-summary strong { font-weight: 600; }
.lcr-page-v1 .lcr-card-summary a {
  color: var(--lcr-blue);
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-card-summary a:hover { color: var(--lcr-blue-hover); }
.lcr-page-v1 .lcr-card-summary--empty {
  color: var(--lcr-muted);
  font-style: italic;
}

/* ── Step 6b — Company Info tab body ──────────────────────────────────── */
.lcr-page-v1 .lcr-card-info {
  font-size: 15px;             /* bumped from 14px per Ben's feedback */
  color: var(--lcr-dark);
  line-height: 1.625;
}
.lcr-page-v1 .lcr-card-info-row {
  margin-bottom: 8px;
}
.lcr-page-v1 .lcr-card-info-row:last-child { margin-bottom: 0; }
.lcr-page-v1 .lcr-card-info-row strong {
  font-weight: 600;
  color: var(--lcr-dark);
  margin-right: 4px;
}
.lcr-page-v1 .lcr-card-info-link {
  color: var(--lcr-blue);
  transition: color 0.15s ease;
  word-break: break-word;       /* long URLs wrap cleanly on narrow widths */
}
.lcr-page-v1 .lcr-card-info-link:hover { color: var(--lcr-blue-hover); }
.lcr-page-v1 .lcr-card-info-claim {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 16px;
  font-size: 13px;
}
.lcr-page-v1 .lcr-card-info-claim-icon {
  display: inline-flex;
  color: var(--lcr-muted);
  flex-shrink: 0;
}
.lcr-page-v1 .lcr-card-info-claim-question {
  color: #374151;          /* gray-700 — readable but secondary */
}
.lcr-page-v1 .lcr-card-info-claim-link {
  color: var(--lcr-blue);
  opacity: 0.75;           /* softer than standard link blue per Jamie */
  transition: opacity 0.15s ease;
}
.lcr-page-v1 .lcr-card-info-claim-link:hover { opacity: 1; }

/* ── Step 6c — Pros & Cons tab body ───────────────────────────────────── */
.lcr-page-v1 .lcr-card-proscons {
  display: flex;
  flex-direction: column;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-proscons {
    flex-direction: row;
    gap: 24px;
  }
  .lcr-page-v1 .lcr-card-proscons-pros,
  .lcr-page-v1 .lcr-card-proscons-cons { flex: 1 1 0; }
}
.lcr-page-v1 .lcr-card-proscons-pros { margin-bottom: 20px; }
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-card-proscons-pros { margin-bottom: 0; }
}
.lcr-page-v1 .lcr-card-proscons-heading {
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-bottom: 12px;
}
.lcr-page-v1 .lcr-card-proscons-heading--pros { color: var(--lcr-green); }
.lcr-page-v1 .lcr-card-proscons-heading--cons { color: #DC2626; }   /* red-600 */
.lcr-page-v1 .lcr-card-proscons-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.lcr-page-v1 .lcr-card-proscons-item {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin-bottom: 10px;
  font-size: 15px;             /* bumped from 14px per Ben's feedback */
  line-height: 1.5;
}
.lcr-page-v1 .lcr-card-proscons-item:last-child { margin-bottom: 0; }
.lcr-page-v1 .lcr-card-proscons-icon {
  flex-shrink: 0;
  margin-top: 2px;
}
.lcr-page-v1 .lcr-card-proscons-pros .lcr-card-proscons-item span {
  color: var(--lcr-dark);
}
.lcr-page-v1 .lcr-card-proscons-cons .lcr-card-proscons-item span {
  color: var(--lcr-muted);
}

/* ── Step 6d — Reviews tab body ───────────────────────────────────────── */

/* AI summary block — light-blue panel with sparkle icon + label + body */
.lcr-page-v1 .lcr-card-ai-summary {
  background: var(--lcr-blue-light);
  border: 1px solid #BFDBFE;
  border-radius: var(--lcr-radius-btn);
  padding: 16px;
  margin-bottom: 16px;
}
.lcr-page-v1 .lcr-card-ai-summary-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}
.lcr-page-v1 .lcr-card-ai-summary-sparkle {
  color: var(--lcr-blue);
  flex-shrink: 0;
}
.lcr-page-v1 .lcr-card-ai-summary-label {
  font-size: 13px;             /* bumped from 11px per Ben's feedback */
  font-weight: 600;
  color: var(--lcr-blue);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.lcr-page-v1 .lcr-card-ai-summary-body {
  font-size: 14px;
  color: var(--lcr-dark);
  line-height: 1.625;
}
.lcr-page-v1 .lcr-card-ai-summary-body strong { font-weight: 600; }
/* v2 confidence line — single-sentence sample-size qualifier rendered
   below the main blurb. De-emphasized via italic + muted color so the
   narrative reads first; suppressed entirely for the Thin archetype
   (N is named in the blurb). */
.lcr-page-v1 .lcr-card-ai-summary-confidence {
  margin-top: 8px;
  font-size: 14px;             /* matched to blurb body per Ben's feedback (was 12px) */
  color: var(--lcr-muted);
  font-style: italic;
}

/* Sentiment theme grid — 1-col mobile, 2-col tablet/desktop */
.lcr-page-v1 .lcr-card-sentiment-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 12px;
  margin-bottom: 20px;
}
@media (min-width: 640px) {
  .lcr-page-v1 .lcr-card-sentiment-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.lcr-page-v1 .lcr-card-theme {
  /* Match the prototype's flat tile look — no card border / background /
     padding. Each tile is just (icon+name | pct) above a thin progress
     bar. The grid gap provides separation between tiles. flex-col +
     bar-bottom keeps bars aligned across the row when names wrap. */
  display: flex;
  flex-direction: column;
}
.lcr-page-v1 .lcr-card-theme-inner {
  display: flex;
  flex-direction: column;
  height: 100%;
  width: 100%;
}
.lcr-page-v1 .lcr-card-theme-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 8px;
}
.lcr-page-v1 .lcr-card-theme-bar {
  margin-top: auto;       /* pins the bar to the bottom of the card */
}
.lcr-page-v1 .lcr-card-theme-name {
  display: inline-flex;
  align-items: flex-start;
  gap: 6px;
  font-size: 14px;             /* bumped from 13px per Ben's feedback */
  font-weight: 500;
  color: var(--lcr-dark);
  line-height: 1.35;
  min-width: 0;
}
.lcr-page-v1 .lcr-card-theme-icon {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  margin-top: 1px;
}
.lcr-page-v1 .lcr-card-theme-icon--pos { color: var(--lcr-blue); }
.lcr-page-v1 .lcr-card-theme-icon--neg { color: #D97706; }   /* amber-600 */
.lcr-page-v1 .lcr-card-theme-pct {
  font-size: 13px;             /* bumped from 12px per Ben's feedback */
  font-weight: 600;
  color: var(--lcr-dark);
  flex-shrink: 0;
  margin-top: 1px;
}
/* Raw mention count — sits parenthetical after the %, lighter weight + muted
   color so the count reads as anchoring context rather than competing with
   the primary % signal that drives the progress bar below. */
.lcr-page-v1 .lcr-card-theme-count {
  font-weight: 500;
  color: var(--lcr-muted);
  margin-left: 2px;
}
.lcr-page-v1 .lcr-card-theme-bar {
  display: block;
  width: 100%;
  height: 8px;
  background: #F3F4F6;       /* gray-100 */
  border-radius: 9999px;
  overflow: hidden;
}
.lcr-page-v1 .lcr-card-theme-bar-fill {
  display: block;
  height: 100%;
  border-radius: 9999px;
}
.lcr-page-v1 .lcr-card-theme-bar-fill.lcr-card-theme-bar--pos { background: var(--lcr-blue); }
.lcr-page-v1 .lcr-card-theme-bar-fill.lcr-card-theme-bar--neg { background: #F59E0B; }   /* amber-500 */

/* Insufficient-reviews fallback */
.lcr-page-v1 .lcr-card-sentiment-empty {
  background: #F9FAFB;
  border: 1px solid var(--lcr-border);
  border-radius: var(--lcr-radius-btn);
  padding: 16px;
  margin-bottom: 16px;
  text-align: center;
}
.lcr-page-v1 .lcr-card-sentiment-empty p {
  font-size: 14px;
  color: var(--lcr-muted);
  font-style: italic;
}

/* Review-platforms summary — replaces the prior full-platform table per
   Jamie's CLO v1 pattern. Two stat pills (overall rating + total reviews) +
   inline sources line. Sentiment grid above is the meatier content in this
   tab; the by-platform table competed with it for visual weight. */
.lcr-page-v1 .lcr-card-reviews-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 12px;
}
.lcr-page-v1 .lcr-card-reviews-stat {
  display: inline-flex;
  flex-direction: column;
  background: var(--lcr-blue-light);
  padding: 8px 14px;
  border-radius: var(--lcr-radius-btn);
}
.lcr-page-v1 .lcr-card-reviews-stat-label {
  font-size: 12px;             /* bumped from 10px per Ben's feedback (matches .lcr-card-stat-label) */
  font-weight: 600;
  color: var(--lcr-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-bottom: 2px;
}
.lcr-page-v1 .lcr-card-reviews-stat-value {
  font-size: 16px;
  font-weight: 700;
  color: var(--lcr-dark);
}
/* N/A state — no public review profile found for this company. Muted
   color signals "missing data" without alarming; the tooltip on the
   wrapping .lcr-tip-wrap explains why. */
.lcr-page-v1 .lcr-card-reviews-stat-value--na {
  color: var(--lcr-muted);
  font-weight: 600;
}
.lcr-page-v1 .lcr-card-reviews-sources {
  font-size: 14px;             /* bumped from 13px per Ben's feedback */
  color: var(--lcr-muted);
}
.lcr-page-v1 .lcr-card-reviews-source {
  color: var(--lcr-blue);
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-card-reviews-source:hover { color: var(--lcr-blue-hover); }

/* ── Tags row (highlights + positive sentiment) ────────────────────────
   Sits inside .lcr-card-body, after the tab panels. Top border separates
   it from whichever panel is currently visible. JS hides this row on
   non-Summary tabs (initCardTabs in script-view.js).
   - Highlight pills (blue): editorial labels from directory_highlights_list.
   - Sentiment pills (green): top positive themes; hover triggers tooltip
     showing "X% of reviewers mentioned this. {description}". */
.lcr-page-v1 .lcr-card-tags-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 20px;
  padding-top: 16px;
  border-top: 1px solid var(--lcr-border);
}
.lcr-page-v1 .lcr-card-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 14px;             /* bumped from 12px per Ben's feedback */
  font-weight: 600;
  padding: 6px 12px;
  border-radius: var(--lcr-radius-badge);
  line-height: 1.2;
  /* All positive pills share these colors per Jamie's 2-color schema —
     "good" reads as the same green regardless of source (editorial
     highlights vs. sentiment). The .lcr-card-tag--highlight class is
     kept in the DOM as a semantic flag (analytics, future re-treatments)
     but doesn't surface visually. Negative variant overrides below.
     Color: switched from --lcr-green to --lcr-sentiment-positive-text
     (darker green) per Ben's feedback — better contrast against the
     green-light bg, matches the Reviews-tab theme grid positives. */
  color: var(--lcr-sentiment-positive-text);
  background: var(--lcr-green-light);
}
.lcr-page-v1 .lcr-card-tag--sentiment {
  cursor: help;
  transition: background-color 0.15s ease;
}
.lcr-page-v1 .lcr-tip-wrap:hover .lcr-card-tag--sentiment,
.lcr-page-v1 .lcr-tip-wrap:focus-visible .lcr-card-tag--sentiment {
  background: #BBF7D0;       /* slightly stronger green on hover */
}
/* Negative-sentiment override — amber over the green base. Reuses the
   same design tokens the Reviews-tab theme grid uses for negative themes
   so amber stays consistent across the page. */
.lcr-page-v1 .lcr-card-tag--negative {
  color: var(--lcr-sentiment-negative-text);
  background: var(--lcr-sentiment-negative-bg);
}
.lcr-page-v1 .lcr-tip-wrap:hover .lcr-card-tag--negative,
.lcr-page-v1 .lcr-tip-wrap:focus-visible .lcr-card-tag--negative {
  background: #FDE68A;       /* amber-200 — small hover darken */
}
.lcr-page-v1 .lcr-card-tag-icon {
  flex-shrink: 0;
  opacity: 0.6;
  width: 14px;                 /* bumped from inline 12×12 per Ben's feedback (matches pill text) */
  height: 14px;
}

/* ════════════════════════════════════════════════════════════════════════
   STEP 7 — MORE COMPANIES SECTION
   Reuses the .lcr-card shell (with --collapsible modifier) for cards 6+.
   Mobile gets a per-card "See details" toggle to save vertical scroll;
   ≥1024px hides the toggle and forces details open.
   When >7 cards, section-level "View more / View fewer" pagination kicks
   in (matches both the reference HTML and the production page).
   ──────────────────────────────────────────────────────────────────────── */

.lcr-page-v1 .lcr-more-companies {
  margin-bottom: 40px;
  scroll-margin-top: 112px;
}
.lcr-page-v1 .lcr-more-companies-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  margin-bottom: 16px;
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
}

/* Intro callout — light-blue panel, three labeled paragraphs. */
.lcr-page-v1 .lcr-more-companies-intro {
  background: var(--lcr-blue-light);
  border: 1px solid #BFDBFE;            /* blue-200 from reference */
  border-radius: var(--lcr-radius-card);
  padding: 20px;
  margin-bottom: 24px;
}
.lcr-page-v1 .lcr-more-companies-intro p {
  font-size: 16px;             /* 15 → 17 → 16 (dialed back a tad, matches .lcr-our-take p) */
  color: var(--lcr-dark);
  line-height: 1.625;
  margin-bottom: 12px;
}
.lcr-page-v1 .lcr-more-companies-intro p:last-child { margin-bottom: 0; }
/* "What it is:" / "Who this is for:" / "How to choose:" — match the "Our take:"
   lead-in exactly. Both callouts already shared everything else (16px,
   --lcr-dark, 1.625, same blue panel and blue-200 border); the labels were
   heavier only because <strong> defaults to 700 and .lcr-our-take p strong
   dials it back to 600. Without this the two panels sit ~4,000px apart looking
   almost-but-not-quite alike, which reads as an inconsistency rather than a
   distinction. */
.lcr-page-v1 .lcr-more-companies-intro p strong { font-weight: 600; }

/* ── More-card "See details" toggle ─────────────────────────────────────
   Sits as a sibling immediately before .lcr-more-card-collapse, inside
   .lcr-card-body. Stretches full-width with a top border so it reads as
   a footer action; centered label + chevron. Mobile-only. */
.lcr-page-v1 .lcr-more-card-toggle {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin-top: 20px;
  padding: 20px 0 0 0;
  border: 0;
  border-top: 1px solid var(--lcr-border);
  background: transparent;
  font-family: inherit;
  letter-spacing: inherit;
  font-size: 14px;
  font-weight: 600;
  color: var(--lcr-blue);
  cursor: pointer;
  transition: color 0.15s ease;
}
.lcr-page-v1 .lcr-more-card-toggle:hover { color: var(--lcr-blue-hover); }
.lcr-page-v1 .lcr-more-card-chev {
  display: inline-block;
  transition: transform 0.2s ease;
}
.lcr-page-v1 .lcr-more-card-toggle.lcr-open .lcr-more-card-chev { transform: rotate(180deg); }

/* Collapse wrap — collapsed by default; .lcr-open reveals tab section.
   `display: none` is harsh but matches the reference's approach (the tab
   section's height isn't worth animating — too much variation across
   cards, and the user's expectation is a simple show/hide). */
.lcr-page-v1 .lcr-more-card-collapse { display: none; }
.lcr-page-v1 .lcr-more-card-collapse.lcr-open { display: block; }

/* Desktop override: ≥1024px the section is always open and the toggle
   is hidden. Cards then look + behave just like Top-5 cards (minus the
   ribbon, which card.php already suppresses for collapsible mode). */
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-more-card-toggle { display: none; }
  .lcr-page-v1 .lcr-more-card-collapse { display: block; }
}

/* ── Section-level pagination buttons (View more / View fewer) ─────────
   Solid blue, full-width-feel via flex+inline-flex pattern from reference.
   Both buttons share the same shape; they're toggled via [hidden]. */
.lcr-page-v1 .lcr-more-companies-toggle {
  display: flex;
  margin-bottom: 24px;
}
.lcr-page-v1 .lcr-more-companies-toggle[hidden] { display: none; }
.lcr-page-v1 .lcr-more-companies-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--lcr-blue);
  border: 1px solid var(--lcr-blue);
  color: var(--lcr-white);
  font-family: inherit;
  letter-spacing: inherit;
  font-size: 15px;             /* bumped from 14px to match other CTAs per Ben's feedback */
  font-weight: 600;
  padding: 12px 24px;
  border-radius: var(--lcr-radius-btn);
  cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease;
}
.lcr-page-v1 .lcr-more-companies-btn:hover {
  background: var(--lcr-blue-hover);
  border-color: var(--lcr-blue-hover);
}
.lcr-page-v1 .lcr-more-companies-hidden[hidden] { display: none; }

/* ════════════════════════════════════════════════════════════════════════
   STEP 8a — FIND TOP-RATED CTA
   Bottom CTA banner: heading + light-panel with subhead, zip input,
   Compare Agents button, Trustpilot footer. Last block in the gray zone;
   #startmsf is the page-wide scroll target for in-page Compare anchors.
   ──────────────────────────────────────────────────────────────────────── */

.lcr-page-v1 .lcr-cta {
  margin-top: 48px;
  margin-bottom: 40px;
  scroll-margin-top: 112px;
}
.lcr-page-v1 .lcr-cta-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  margin-bottom: 24px;
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
}

/* Light panel — distinct from intro callout (#E8F2FE); this one is a
   slightly cooler blue-gray so the CTA stands out against neighboring
   blue-light callouts. */
.lcr-page-v1 .lcr-cta-panel {
  /* Was #F0F4FA — a third blue-gray tint that existed nowhere else on the page.
     Folded into the shared light blue so every tinted surface is one value. */
  background: var(--lcr-blue-light);
  border-radius: 16px;
  padding: 32px 20px;
  text-align: center;
}
@media (min-width: 768px) {
  .lcr-page-v1 .lcr-cta-panel { padding: 40px 24px; }
}

.lcr-page-v1 .lcr-cta-sub {
  font-size: 15px;
  color: #4B5563;          /* gray-700 */
  line-height: 1.5;
  margin: 0 auto 32px;
  max-width: 680px;
}
@media (min-width: 768px) { .lcr-page-v1 .lcr-cta-sub { font-size: 16px; } }
@media (min-width: 1024px) { .lcr-page-v1 .lcr-cta-sub { font-size: 17px; } }

/* Form row — column on mobile, row on ≥640px. Capped width so the
   input + button don't stretch on a wide panel.
   Defensive overrides: the form keeps the .zipForm + .zipFormOffersCta
   classes for compatibility with WPCodeBox's startFunnel JS hook on
   production. wpcodebox's algo_reviews_styling.css ships a rule on
   .zipFormOffersCta that treats the form AS the panel (bg + 50px
   padding + 40px margin + border-radius) — we null those out here so
   our .lcr-cta-panel is the only panel in play. */
.lcr-page-v1 .lcr-cta-form {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  max-width: 512px;        /* max-w-lg */
  margin: 0 auto 32px;
  background: transparent;
  padding: 0;
  border-radius: 0;
}
@media (min-width: 640px) {
  .lcr-page-v1 .lcr-cta-form {
    flex-direction: row;
    /* stretch, not center (Mus, 2026-08-12: input and button should be the same
       height). Side by side the zip input rendered ~2px taller: it carries a 1px
       border the button doesn't, and their content boxes resolve differently
       from the same padding. Stretching makes the two exactly equal by
       construction, so it survives future padding, border or font-size changes
       instead of needing a matching fudge on the button. Row layout only —
       stacked, they aren't adjacent and nothing needs to line up. */
    align-items: stretch;
  }
}

/* ZIP input wrapper — relative so the pin icon can sit absolutely inside */
.lcr-page-v1 .lcr-cta-zip-wrap {
  position: relative;
  width: 100%;
}
/* ── Equal control height, stated outright ──
   Both controls in the row are pinned to one explicit height rather than being
   equalised by flexbox. Three attempts at the flex route failed on the live
   page, and the cascade dump from it explains why:

     BUTTON 58px (pad 0/0, border 0, minH auto, lh 15px, alignSelf stretch)
     INPUT  53px (pad 14/14, border 1px, lh 40px)
     WRAP   53px (alignSelf stretch)

   The button had NO padding, no border and a 15px line-height — content height
   ~15px — yet stood 58px, while the wrapper next to it, also align-self:stretch,
   stayed 53px. Two stretched items on one flex line cannot differ, so the line
   itself was 58px and the wrapper was failing to stretch into it: `height:100%`
   on the input against an auto-height wrapper is an INDEFINITE percentage, so
   the wrapper sized to the input's own content instead of to the line, and
   `align-self` had nothing to resolve against.

   That circularity disappears the moment the wrapper's height is definite. Both
   controls now take --lcr-cta-control-h and the input fills the wrapper, so the
   row is equal by declaration and does not depend on flex sizing, on which item
   is intrinsically taller, or on the theme line-heights that differ between the
   two (the input inherits 40px from WPCodeBox CSS, the button 1.15 from the
   theme reset — neither is ours).

   53px is our own math, not a theme artifact: 14px padding top and bottom, a
   ~22.5px line box for 15px Poppins, and 1px of border. It matches what the
   input already rendered, so nothing moves visually. Row layout only. */
@media (min-width: 640px) {
  .lcr-page-v1 .lcr-cta-form { --lcr-cta-control-h: 53px; }
  .lcr-page-v1 .lcr-cta-zip-wrap,
  .lcr-page-v1 .lcr-cta-btn {
    height: var(--lcr-cta-control-h);
    align-self: auto;      /* height is explicit; nothing left to stretch */
  }
  .lcr-page-v1 .lcr-cta-zip-wrap { flex: 1; }
}

.lcr-page-v1 .lcr-cta-zip-input {
  width: 100%;
  /* Fills .lcr-cta-zip-wrap, whose height is made DEFINITE at >=640px (see the
     --lcr-cta-control-h block below). It has to be definite: a percentage height
     against an auto-height parent is indefinite, and the parent then sizes to
     this input's own content, which is the circularity that broke the row. */
  height: 100%;
  background: var(--lcr-white);
  border: 1px solid #D1D5DB;            /* gray-300 */
  border-radius: var(--lcr-radius-btn);
  padding: 14px 40px 14px 16px;          /* extra right padding for icon */
  font-family: inherit;
  letter-spacing: inherit;
  font-size: 16px;
  color: #4B5563;
  outline: none;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
  box-sizing: border-box;
}
@media (min-width: 768px) { .lcr-page-v1 .lcr-cta-zip-input { font-size: 15px; } }
.lcr-page-v1 .lcr-cta-zip-input::placeholder { color: #9CA3AF; }
.lcr-page-v1 .lcr-cta-zip-input:focus {
  border-color: var(--lcr-blue);
  box-shadow: 0 0 0 1px var(--lcr-blue);
}
.lcr-page-v1 .lcr-cta-zip-icon {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  color: #9CA3AF;
  pointer-events: none;
}

/* Compare Agents button */
.lcr-page-v1 .lcr-cta-btn {
  width: 100%;
  background: var(--lcr-blue);
  border: 0;
  color: var(--lcr-white);
  font-family: inherit;
  letter-spacing: inherit;
  font-size: 15px;
  font-weight: 700;
  padding: 14px 32px;
  border-radius: var(--lcr-radius-btn);
  cursor: pointer;
  white-space: nowrap;
  transition: background-color 0.15s ease;
}
@media (min-width: 640px) {
  .lcr-page-v1 .lcr-cta-btn {
    width: auto;
    /* The height above is explicit, so the vertical padding has to go: kept, it
       would add 28px on top of that height and the button would overflow its own
       box. line-height:1 removes the last thing the theme can inflate (the
       button inherits 1.15 from the theme reset, the input 40px from WPCodeBox
       CSS — neither is ours), and inline-flex re-centres the label inside the
       fixed height instead of relying on padding to place it.

       Row layout only. Stacked, the button keeps its 14px padding and its
       natural height: there is no neighbour to match, and with no height set it
       would otherwise collapse to the line box. */
    padding: 0 32px;
    line-height: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
}
.lcr-page-v1 .lcr-cta-btn:hover { background: var(--lcr-blue-hover); }

/* Trustpilot footer line */
.lcr-page-v1 .lcr-cta-trustpilot {
  font-size: 12px;
  color: #6B7280;          /* gray-500 */
  line-height: 1.5;
}
@media (min-width: 768px) { .lcr-page-v1 .lcr-cta-trustpilot { font-size: 14px; } }
.lcr-page-v1 .lcr-cta-tp-excellent {
  color: #00B67A;          /* Trustpilot green */
  font-weight: 700;
}
.lcr-page-v1 .lcr-cta-tp-brand {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  vertical-align: middle;
}
.lcr-page-v1 .lcr-cta-tp-brand-name {
  font-weight: 700;
  color: #1F2937;          /* gray-800 */
}
.lcr-page-v1 .lcr-cta-tp-star { fill: #00B67A; flex-shrink: 0; }

/* ════════════════════════════════════════════════════════════════════════
   STEP 8b — NEARBY CITIES (city template variant)
   Full-width section below <main>. Visually continues the gray storefront
   zone — same #F9FAFB background. Inner container caps at 1144px to align
   with .lcr-main. Pill links wrap into rows, alphabetical.
   ──────────────────────────────────────────────────────────────────────── */

.lcr-page-v1 .lcr-nearby {
  padding: 0 0 40px;
  scroll-margin-top: 112px;
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-nearby { padding-bottom: 48px; } }

/* Inner container — capped width matching .lcr-main, with horizontal padding
   so pills don't run to the edge on mobile. */
.lcr-page-v1 .lcr-nearby-inner {
  max-width: var(--lcr-content-w);
  margin: 0 auto;
  padding: 0 16px;
}
@media (min-width: 768px) { .lcr-page-v1 .lcr-nearby-inner { padding: 0 24px; } }

.lcr-page-v1 .lcr-nearby-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  margin-bottom: 24px;
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
}

/* Pill grid — flex-wrap so cities fill rows naturally. */
.lcr-page-v1 .lcr-nearby-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
@media (min-width: 768px) { .lcr-page-v1 .lcr-nearby-list { gap: 12px; } }

.lcr-page-v1 .lcr-nearby-pill {
  display: inline-block;
  background: var(--lcr-white);
  border: 1px solid #BFDBFE;            /* blue-200 — same hue as intro callout border */
  color: var(--lcr-blue);
  font-size: 14px;
  font-weight: 500;
  padding: 8px 16px;
  border-radius: 6px;
  text-decoration: none;
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.lcr-page-v1 .lcr-nearby-pill:hover {
  background: var(--lcr-blue);
  color: var(--lcr-white);
  border-color: var(--lcr-blue);
}

/* Collapsible city pills (ALGCON-1579) — overflow pills past the threshold stay
   hidden until the toggle expands the list. The "View more / View fewer" button
   mirrors the more-companies pattern (chevron rotates on aria-expanded). */
.lcr-page-v1 .lcr-nearby-pill--overflow { display: none; }
.lcr-page-v1 .lcr-nearby-list--expanded .lcr-nearby-pill--overflow { display: inline-block; }
.lcr-page-v1 .lcr-nearby-toggle { margin-top: 16px; }
.lcr-page-v1 .lcr-nearby-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 4px 0;
  color: var(--lcr-blue);
  font-size: 14px;
  font-weight: 600;
  font-family: inherit;
  letter-spacing: var(--lcr-tracking-clever);
}
.lcr-page-v1 .lcr-nearby-btn:hover { text-decoration: underline; }
.lcr-page-v1 .lcr-nearby-btn svg { transition: transform 0.15s ease; }
.lcr-page-v1 .lcr-nearby-btn[aria-expanded="true"] svg { transform: rotate(180deg); }
.lcr-page-v1 .lcr-nearby-btn .lcr-nearby-btn-fewer { display: none; }
.lcr-page-v1 .lcr-nearby-btn[aria-expanded="true"] .lcr-nearby-btn-more  { display: none; }
.lcr-page-v1 .lcr-nearby-btn[aria-expanded="true"] .lcr-nearby-btn-fewer { display: inline; }

/* State variant: lives inside the gray storefront zone alongside the other
   gray-zone sections, so we drop the duplicate panel bg + the inner cap div.
   Top margin matches the rhythm between adjacent gray-zone sections. */
.lcr-page-v1 .lcr-nearby--state {
  background: transparent;
  padding: 0;
  margin-top: 32px;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-nearby--state { padding-bottom: 0; margin-top: 40px; }
}

/* ════════════════════════════════════════════════════════════════════════
   STATE TEMPLATE — TOP CITIES (Phase 3)
   "Top discount real estate brokers near you" — H2 section with 5 city
   groups. Each group: H3 ("Best discount realtors in {City}, {ST}") +
   horizontal carousel of company tiles (reuses .lcr-glance-carousel
   markup so initCarousels picks it up automatically) + a "See all N
   companies in {City}" CTA link to the city's LCR page.
   ──────────────────────────────────────────────────────────────────── */

.lcr-page-v1 .lcr-top-cities {
  margin-top: 40px;
  scroll-margin-top: 112px;
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-top-cities { margin-top: 48px; } }

.lcr-page-v1 .lcr-top-cities-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
  margin: 0 0 24px;
}

/* Per-city group — flow vertically, slightly tighter spacing than the
   section heading. */
.lcr-page-v1 .lcr-top-cities-group + .lcr-top-cities-group {
  margin-top: 32px;
}
@media (min-width: 1024px) {
  .lcr-page-v1 .lcr-top-cities-group + .lcr-top-cities-group { margin-top: 40px; }
}

.lcr-page-v1 .lcr-top-cities-group-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 16px;
}

.lcr-page-v1 .lcr-top-cities-city-name {
  font-size: 18px;
  font-weight: 600;
  color: var(--lcr-fg);
  line-height: 1.25;
  margin: 0;
}

/* "See all N companies in {City}" — bordered pill button. Sits below
   the carousel as the natural read-direction next step. */
.lcr-page-v1 .lcr-top-cities-cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 16px;
  padding: 8px 16px;
  font-size: 14px;
  font-weight: 600;
  color: var(--lcr-blue);
  background: transparent;
  border: 1px solid var(--lcr-blue);
  border-radius: 9999px;
  text-decoration: none;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.lcr-page-v1 .lcr-top-cities-cta:hover {
  background: var(--lcr-blue);
  color: var(--lcr-white);
  text-decoration: none;
}
.lcr-page-v1 .lcr-top-cities-cta svg {
  flex-shrink: 0;
  transition: transform 0.15s ease;
}
.lcr-page-v1 .lcr-top-cities-cta:hover svg {
  transform: translateX(2px);
}

/* Ribbon-less card variant — at-a-glance cards have a colored top ribbon
   that doubles as visual top padding; tiles in this section have no
   ribbon, so restore that visual breathing room via card-body padding. */
.lcr-page-v1 .lcr-glance-card--noribbon .lcr-glance-card-body {
  padding-top: 16px;
}

/* ════════════════════════════════════════════════════════════════════════
   STEP 8c — RELATED GUIDES
   Mirrors clever-ffmls-page/partials/related-resources.php — wraps the
   [related] shortcode's HTML in .lcr-related-list and styles the
   inner .related-posts / .related-post / .related-image / .related-title /
   .related-excerpt elements (same DOM shape the WP plugin emits).
   ──────────────────────────────────────────────────────────────────────── */

.lcr-page-v1 .lcr-related-guides {
  padding: 0 0 40px;
  scroll-margin-top: 112px;
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-related-guides { padding-bottom: 48px; } }

.lcr-page-v1 .lcr-related-inner {
  max-width: var(--lcr-content-w);
  margin: 0 auto;
  padding: 0 16px;
}
@media (min-width: 768px) { .lcr-page-v1 .lcr-related-inner { padding: 0 24px; } }

.lcr-page-v1 .lcr-related-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  margin-bottom: 24px;
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-related-heading { margin-bottom: 32px; } }

/* Inner shortcode HTML — DOM identical to FFMLS's port. */
.lcr-page-v1 .lcr-related-list .related-posts {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.lcr-page-v1 .lcr-related-list .related-post {
  display: flex;
  gap: 16px;
  align-items: center;
  text-decoration: none;
  color: inherit;
}
.lcr-page-v1 .lcr-related-list .related-image {
  flex: 0 0 auto;
  width: 140px;
}
.lcr-page-v1 .lcr-related-list .related-image img {
  width: 140px;
  height: auto;
  max-height: 90px;
  object-fit: cover;
  display: block;
  border-radius: 8px;
  margin: 0;
  background: #E5E7EB;     /* fallback shade for empty preview placeholders */
  aspect-ratio: 4 / 2;
}
.lcr-page-v1 .lcr-related-list .related-info { flex: 1 1 auto; min-width: 0; }
.lcr-page-v1 .lcr-related-list .related-title {
  font-size: 17px;
  font-weight: 700;
  margin: 0 0 6px;
  line-height: 1.3;
  color: var(--lcr-dark);
  text-wrap: pretty;
}
.lcr-page-v1 .lcr-related-list .related-excerpt {
  font-size: 15px;
  color: var(--lcr-muted);
  line-height: 1.5;
  text-wrap: pretty;
}
.lcr-page-v1 .lcr-related-list .related-post:hover .related-title {
  color: var(--lcr-blue);
}

@media (max-width: 640px) {
  .lcr-page-v1 .lcr-related-list .related-post {
    display: flex !important;
    flex-direction: row !important;
    align-items: center;
    gap: 12px;
    text-align: left;
  }
  .lcr-page-v1 .lcr-related-list .related-image {
    width: 130px;
    margin: 0 !important;
    text-align: left;
  }
  .lcr-page-v1 .lcr-related-list .related-image img {
    width: 130px;
    max-height: 80px;
    margin: 0 !important;
  }
  .lcr-page-v1 .lcr-related-list .related-title { font-size: 14px; }
  .lcr-page-v1 .lcr-related-list .related-excerpt { font-size: 12px; }
}

/* ════════════════════════════════════════════════════════════════════════
   STEP 8d — METHODOLOGY + AUTHOR
   Two stacked white sections. Both cap at a narrow 672px reading column
   inside the 1144px container (mirrors reference HTML's max-w-2xl).
   Methodology has the page-wide #methodology anchor (jumped to from "see
   our full methodology" links). Author block visually separates with a
   top border on its inner column.
   ──────────────────────────────────────────────────────────────────────── */

.lcr-page-v1 .lcr-methodology {
  background: transparent;   /* inherits the off-white page base; the bottom fade that used to tint this section is gone */
  padding: 40px 0 0;
  scroll-margin-top: 112px;
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-methodology { padding-top: 48px; } }

.lcr-page-v1 .lcr-methodology-inner,
.lcr-page-v1 .lcr-author-inner {
  max-width: var(--lcr-content-w);
  margin: 0 auto;
  padding: 0 16px;
}
@media (min-width: 768px) {
  .lcr-page-v1 .lcr-methodology-inner,
  .lcr-page-v1 .lcr-author-inner { padding: 0 24px; }
}

/* Both inner columns also constrain reading width — sub-container narrowing
   matches the reference's max-w-2xl on each section. */
.lcr-page-v1 .lcr-methodology-inner > *,
.lcr-page-v1 .lcr-author-inner > * {
  max-width: 672px;
}

.lcr-page-v1 .lcr-methodology-heading {
  font-size: 22px;
  font-weight: 600;
  color: var(--lcr-dark);   /* ALGCON-1670: was --lcr-blue */
  margin-bottom: 24px;
  line-height: 1.1;
  letter-spacing: var(--lcr-tracking-clever);
}

/* Author section — the page's closing band, flat --lcr-blue-light (Hannah,
   2026-08-11). It replaces ALGCON-1579's 520px bottom gradient: the page still
   ends on colour rather than trailing off into white, but as one flat value
   instead of a fade, which is what the rest of this pass is about.

   Full-bleed via the same negative-margin trick .lcr-gray-zone uses — the
   section sits inside the capped container, so without it the band would stop
   at the content width instead of reaching the viewport edges.

   Top padding is now heavier than before: the band's own top edge is the
   separator, so .lcr-author-heading's divider rule was dropped. Two separators
   stacked (a colour change AND a hairline) read as a mistake. */
.lcr-page-v1 .lcr-author {
  background: var(--lcr-blue-light);
  padding: 40px 0;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  padding-left: calc(50vw - 50%);
  padding-right: calc(50vw - 50%);
  margin-top: 40px;
}
@media (min-width: 1024px) { .lcr-page-v1 .lcr-author { padding-top: 48px; padding-bottom: 48px; } }
.lcr-page-v1 .lcr-author-heading {
  font-size: 16px;
  font-weight: 600;
  color: var(--lcr-dark);
  margin: 0 0 12px;
}

/* ── .lcr-prose — shared rich-text typography for the WYSIWYG body. ────
   Used by methodology + author.

   Body copy is 16px/1.625, the page's standard measure — the same as the hero
   intro, "Our take", the more-companies intro and the How-Clever-Works intro.
   It started at 14px (the reference HTML's text-sm treatment), went to 15px on
   Ben's feedback for older-audience readability, and reached 16px on Hannah's
   (2026-08-11) because it still read smaller than the rest of the page's body
   text. Each step has been in the same direction; none of them reverted the
   one before. */
.lcr-page-v1 .lcr-prose h3 {
  /* Raised 16 -> 18px alongside the body bump. At 16px it would have been the
     exact size of the paragraphs beneath it, leaving weight and colour as the
     only signals that "Data sources" and "Methodology" are headings. 18px sits
     between the body and the section's own 22px h2. */
  font-size: 18px;
  font-weight: 600;
  color: var(--lcr-dark);
  margin: 24px 0 12px;
  line-height: 1.25;
}
.lcr-page-v1 .lcr-prose h3:first-child { margin-top: 0; }
.lcr-page-v1 .lcr-prose p {
  font-size: 16px;             /* 14 -> 15 (Ben) -> 16 (Hannah); matches the page's body measure */
  color: #4B5563;          /* gray-700, slightly cooler than --lcr-muted */
  line-height: 1.625;
  margin: 0 0 16px;
}
.lcr-page-v1 .lcr-prose p:last-child { margin-bottom: 0; }
.lcr-page-v1 .lcr-prose ul {
  list-style: disc outside;
  padding-left: 20px;
  margin: 0 0 16px;
}
.lcr-page-v1 .lcr-prose li {
  font-size: 16px;             /* keep in step with .lcr-prose p above */
  color: #4B5563;
  line-height: 1.625;
  margin: 8px 0;
}
.lcr-page-v1 .lcr-prose a { color: var(--lcr-blue); }
.lcr-page-v1 .lcr-prose a:hover { color: var(--lcr-blue-hover); }
.lcr-page-v1 .lcr-prose strong { color: var(--lcr-dark); }

/* ── How Clever works — discount-broker explainer (ALGCON-1659) ────────────
   Positioning: Clever IS a discount brokerage (1.5% price, full service); the
   seller picks their own local agent. "Lives on the page" treatment — no box or
   divider on the section itself; the single value card carries the visual
   weight. Uses the directory's --lcr-* tokens. Anchor scroll offset lives in the
   shared selector list above. */
.lcr-page-v1 .lcr-hcw {
  margin: 0 0 40px;
  padding: 24px 0;
  color: var(--lcr-dark);
}
.lcr-page-v1 .lcr-hcw__grid {
  display: grid;
  grid-template-columns: 300px 1fr;
  gap: 48px;
  align-items: stretch;
}
.lcr-page-v1 .lcr-hcw__figure { display: flex; flex-direction: column; justify-content: center; }

/* Agent card — a representative top-rated local agent offering Clever's 1.5%
   pricing + full service. Illustrative; the seller picks their real agent. */
.lcr-page-v1 .lcr-hcw__agentcard {
  background: var(--lcr-white);
  border: 2px solid var(--lcr-blue);
  border-radius: var(--lcr-radius-card);
  box-shadow: 0 10px 28px rgba(0, 117, 235, 0.12);
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.lcr-page-v1 .lcr-hcw__ac-head { display: flex; align-items: center; gap: 12px; padding-bottom: 14px; border-bottom: 1px solid var(--lcr-border); }
.lcr-page-v1 .lcr-hcw__ac-avatar {
  flex: none; width: 44px; height: 44px; border-radius: var(--lcr-radius-pill);
  background: var(--lcr-blue-light); color: var(--lcr-blue);
  display: inline-flex; align-items: center; justify-content: center;
}
.lcr-page-v1 .lcr-hcw__ac-id { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.lcr-page-v1 .lcr-hcw__ac-name { font-size: 14px; font-weight: 600; color: var(--lcr-dark); }
.lcr-page-v1 .lcr-hcw__ac-meta { display: flex; align-items: center; gap: 8px; }
.lcr-page-v1 .lcr-hcw__ac-stars { display: inline-flex; gap: 1px; color: var(--lcr-star-gold); }
.lcr-page-v1 .lcr-hcw__ac-star { display: block; }
.lcr-page-v1 .lcr-hcw__ac-area { font-size: 12px; color: var(--lcr-muted); }
.lcr-page-v1 .lcr-hcw__ac-offer { display: flex; flex-direction: column; align-items: flex-start; gap: 14px; }
.lcr-page-v1 .lcr-hcw__ac-fee { display: flex; flex-direction: column; gap: 2px; }
.lcr-page-v1 .lcr-hcw__ac-feehead { font-size: 26px; font-weight: 700; line-height: 1.1; color: var(--lcr-blue); }
.lcr-page-v1 .lcr-hcw__ac-feesub { font-size: 12px; color: var(--lcr-muted); }
.lcr-page-v1 .lcr-hcw__ac-badge {
  align-self: flex-start;
  background: var(--lcr-sentiment-positive-bg);
  color: var(--lcr-sentiment-positive-text);
  font-size: 12px;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: var(--lcr-radius-pill);
}
.lcr-page-v1 .lcr-hcw__ac-list { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 10px; }
.lcr-page-v1 .lcr-hcw__ac-list li { margin: 0; display: flex; align-items: center; gap: 9px; font-size: 14px; line-height: 1.3; color: var(--lcr-dark); }
.lcr-page-v1 .lcr-hcw__ac-check { color: var(--lcr-green); flex: none; }
.lcr-page-v1 .lcr-hcw__ac-svc-short { display: none; } /* desktop shows full labels; mobile swaps to short */

.lcr-page-v1 .lcr-hcw__body { display: flex; flex-direction: column; gap: 22px; }
.lcr-page-v1 .lcr-hcw__title {
  margin: 0;
  font-weight: 600;          /* matches the page's other section H2s (22px/600) */
  font-size: 22px;
  line-height: 1.25;
  letter-spacing: var(--lcr-tracking-clever);
  color: var(--lcr-dark);    /* dark instead of the sections' blue — the intended distinction */
}
.lcr-page-v1 .lcr-hcw__intro { margin: 0; font-size: 16px; line-height: 1.625; color: var(--lcr-dark); } /* matches .lcr-more-companies-intro p */

.lcr-page-v1 .lcr-hcw__steps { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 20px; }
.lcr-page-v1 .lcr-hcw__steps > li { display: grid; grid-template-columns: 46px 1fr; gap: 14px; }
.lcr-page-v1 .lcr-hcw__num { font-size: 26px; font-weight: 700; line-height: 1.1; color: var(--lcr-blue); }
.lcr-page-v1 .lcr-hcw__step-text { display: flex; flex-direction: column; gap: 4px; }
.lcr-page-v1 .lcr-hcw__step-head { font-size: 16px; font-weight: 600; line-height: 1.4; color: var(--lcr-dark); }
.lcr-page-v1 .lcr-hcw__step-desc { font-size: 15px; line-height: 1.6; color: #3F4A59; }

.lcr-page-v1 .lcr-hcw__more { margin: 0; font-size: 14px; }
.lcr-page-v1 .lcr-hcw__more a { color: var(--lcr-blue); font-weight: 600; text-decoration: none; }
.lcr-page-v1 .lcr-hcw__more a:hover { color: var(--lcr-blue-hover); text-decoration: underline; }

/* Stacked mobile layout below 768px — matches the page's own min-width:768px
   breakpoint so the block flips in step with every other section. */
@media (max-width: 767.98px) {
  .lcr-page-v1 .lcr-hcw { margin: 0 0 28px; padding: 16px 0; }
  .lcr-page-v1 .lcr-hcw__grid { grid-template-columns: 1fr; gap: 16px; }
  /* Mobile order: title → intro → value card → steps → learn-more. display:contents
     lifts the body's children into the single-column grid. Desktop is unaffected. */
  .lcr-page-v1 .lcr-hcw__body { display: contents; }
  .lcr-page-v1 .lcr-hcw__title  { order: 1; }
  .lcr-page-v1 .lcr-hcw__intro  { order: 2; }
  .lcr-page-v1 .lcr-hcw__figure { order: 3; }
  .lcr-page-v1 .lcr-hcw__steps  { order: 4; margin-top: 14px; }
  .lcr-page-v1 .lcr-hcw__more   { order: 5; }

  .lcr-page-v1 .lcr-hcw__agentcard { padding: 18px; gap: 14px; }
  .lcr-page-v1 .lcr-hcw__ac-feehead { font-size: 24px; }
  /* Fill the width on mobile (A): fee + badge share a row, checklist goes 2-up. */
  .lcr-page-v1 .lcr-hcw__ac-offer { flex-direction: row; align-items: center; justify-content: space-between; gap: 12px; }
  .lcr-page-v1 .lcr-hcw__ac-list { display: grid; grid-template-columns: 1fr 1fr; column-gap: 14px; row-gap: 10px; }
  /* Short one-line labels on mobile → every 2-up row is the same height. */
  .lcr-page-v1 .lcr-hcw__ac-svc-full { display: none; }
  .lcr-page-v1 .lcr-hcw__ac-svc-short { display: inline; }

  .lcr-page-v1 .lcr-hcw__intro { font-size: 16px; }
  .lcr-page-v1 .lcr-hcw__steps { gap: 12px; }
  .lcr-page-v1 .lcr-hcw__steps > li { grid-template-columns: 28px 1fr; gap: 10px; align-items: baseline; }
  .lcr-page-v1 .lcr-hcw__num { font-size: 18px; }
  .lcr-page-v1 .lcr-hcw__step-text { display: block; }
  .lcr-page-v1 .lcr-hcw__step-head { display: inline; font-size: 15px; }
  .lcr-page-v1 .lcr-hcw__step-desc { display: inline; font-size: 15px; }
}
