/* ==================================================================
   Carvins — Phase 37 v2.2 Design System (Verbatim Port)
   ==================================================================
   Component CSS for the v2.2 Carvins redesign. Every rule below is
   scoped under the `.cv-v3` ancestor selector so it ONLY applies to
   pages that opt in via `<body class="cv-v3…">`. Legacy v2.0 pages
   render unchanged (D-02, D-06).

   Tokens consumed from design-system.css (Phase 37 :root#2 block, see
   "SECTION 1b" at design-system.css L2490+).
   Source prototypes: design-system/v2.2-source/

   Wave scope: A (Foundation only — primitives below). Wave-gated
   component classes land in later waves (no .cv-strip / .cv-nav__ /
   .cv-footer__ / .cv-vehicle-header / .cv-report-card / .cv-auction-card
   / .cv-pricing-card / .cv-tool-* / .cv-modal__ / .cv-admin-* /
   .cv-blog-* in this file yet — those are Waves B through I).
   ================================================================== */


/* --- Section 1: Reset & Base --- */

.cv-v3 {
  font-family: var(--cc-font-body);
  font-size: var(--cc-fs-base);
  line-height: 1.6;
  color: var(--cc-fg-1);
  background: var(--cc-color-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  /* REG-15 (Wave D iter-5) defense-in-depth — clip horizontal overflow on the cv-v3 root.
     CR-02 (Wave D iter-6) corrective: `overflow-x: clip` (not `hidden`) per design-system.css
     L212-215 maintainer warning: "clip is preferred over hidden because it doesn't create
     a new scroll container (keeps position:sticky working on descendants)". The cv-navbar
     at L344 below uses position:sticky — hidden would break its sticks-to-viewport-top
     behavior by promoting body to a scroll container. clip preserves the horizontal-overflow
     defense without that side effect. Complements the existing html/body overflow-x: clip
     in design-system.css L215 + L226. */
  overflow-x: clip;
}

.cv-v3 *,
.cv-v3 *::before,
.cv-v3 *::after {
  box-sizing: border-box;
}

.cv-v3 img,
.cv-v3 svg,
.cv-v3 video,
.cv-v3 canvas {
  display: block;
  max-width: 100%;
  height: auto;
}


/* --- Section 2: Typography --- */

.cv-v3 h1, .cv-v3 .cv-h1,
.cv-v3 h2, .cv-v3 .cv-h2,
.cv-v3 h3, .cv-v3 .cv-h3,
.cv-v3 h4, .cv-v3 .cv-h4,
.cv-v3 h5, .cv-v3 .cv-h5,
.cv-v3 h6, .cv-v3 .cv-h6 {
  font-family: var(--cc-font-display);
  font-weight: var(--cc-fw-bold);
  letter-spacing: -0.02em;
  line-height: 1.1;
  color: var(--cc-fg-1);
  margin: 0;
}

.cv-v3 h1, .cv-v3 .cv-h1 {
  font-size: clamp(2.25rem, 4.5vw + 0.5rem, var(--cc-fs-7xl));
  letter-spacing: -0.035em;
}

.cv-v3 h2, .cv-v3 .cv-h2 {
  font-size: clamp(1.875rem, 2.5vw + 0.75rem, var(--cc-fs-5xl));
  letter-spacing: -0.03em;
}

.cv-v3 h3, .cv-v3 .cv-h3 {
  font-size: var(--cc-fs-3xl);
  letter-spacing: -0.02em;
}

.cv-v3 h4, .cv-v3 .cv-h4 {
  font-size: var(--cc-fs-2xl);
  letter-spacing: -0.015em;
}

.cv-v3 h5, .cv-v3 .cv-h5 { font-size: var(--cc-fs-xl); letter-spacing: -0.01em; }
.cv-v3 h6, .cv-v3 .cv-h6 { font-size: var(--cc-fs-lg); }

.cv-v3 p, .cv-v3 .cv-p {
  font-size: var(--cc-fs-base);
  line-height: 1.65;
  color: var(--cc-fg-2);
  margin: 0;
  text-wrap: pretty;
}

.cv-v3 small, .cv-v3 .cv-small { font-size: var(--cc-fs-sm); color: var(--cc-fg-4); }

.cv-v3 .cv-eyebrow {
  font-family: var(--cc-font-body);
  font-size: var(--cc-fs-sm);
  font-weight: var(--cc-fw-semi);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--cc-navy);
}

.cv-v3 a, .cv-v3 .cv-link {
  color: var(--cc-blue);
  text-decoration: none;
  transition: color var(--cc-dur-fast) var(--cc-ease);
}

.cv-v3 a:hover, .cv-v3 .cv-link:hover {
  color: var(--cc-navy);
  text-decoration: underline;
  text-underline-offset: 2px;
}


/* --- Section 3: Button --- */

.cv-v3 .cv-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--cc-space-2);
  font-family: var(--cc-font-display);
  font-weight: var(--cc-fw-semi);
  font-size: var(--cc-fs-base);
  line-height: 1.2;
  padding: var(--cc-space-3) var(--cc-space-5);
  border: 1px solid transparent;
  border-radius: var(--cc-radius-md);
  cursor: pointer;
  text-decoration: none;
  transition: background var(--cc-dur) var(--cc-ease-out),
              color var(--cc-dur) var(--cc-ease-out),
              border-color var(--cc-dur) var(--cc-ease-out),
              box-shadow var(--cc-dur) var(--cc-ease-out);
  -webkit-appearance: none;
  appearance: none;
}

.cv-v3 .cv-btn:focus-visible {
  outline: 2px solid var(--cc-blue);
  outline-offset: 2px;
}

.cv-v3 .cv-btn:disabled,
.cv-v3 .cv-btn[aria-disabled="true"] {
  opacity: 0.55;
  cursor: not-allowed;
}

.cv-v3 .cv-btn--primary { background: var(--cc-navy); color: #fff; }
.cv-v3 .cv-btn--primary:hover { background: #002F4D; color: #fff; }

.cv-v3 .cv-btn--accent { background: var(--cc-blue); color: #fff; }
.cv-v3 .cv-btn--accent:hover { background: var(--cc-blue-strong); color: #fff; }

.cv-v3 .cv-btn--ghost { background: transparent; color: var(--cc-navy); border-color: var(--cc-border); }
.cv-v3 .cv-btn--ghost:hover { background: var(--cc-navy-bg); color: var(--cc-navy); }


/* --- Section 4: Card --- */

.cv-v3 .cv-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: var(--cc-radius-lg);
  padding: var(--cc-space-6);
  box-shadow: var(--cc-shadow-sm);
}

.cv-v3 .cv-card--flat { box-shadow: none; }
.cv-v3 .cv-card--elevated { box-shadow: var(--cc-shadow-md); }


/* --- Section 5: Input --- */

.cv-v3 .cv-input {
  display: block;
  width: 100%;
  font-family: var(--cc-font-body);
  font-size: var(--cc-fs-base);
  line-height: 1.4;
  color: var(--cc-fg-1);
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: var(--cc-radius-md);
  padding: var(--cc-space-3) var(--cc-space-4);
  transition: border-color var(--cc-dur-fast) var(--cc-ease),
              box-shadow var(--cc-dur-fast) var(--cc-ease);
  -webkit-appearance: none;
  appearance: none;
}

.cv-v3 .cv-input::placeholder { color: var(--cc-fg-4); }

.cv-v3 .cv-input:focus {
  outline: none;
  border-color: var(--cc-blue);
  box-shadow: 0 0 0 3px var(--cc-blue-tint);
}

.cv-v3 .cv-input--error { border-color: #B91C1C; }
.cv-v3 .cv-input--error:focus { box-shadow: 0 0 0 3px rgba(185, 28, 28, 0.15); }


/* --- Section 6: Section helpers --- */

.cv-v3 .cv-section { padding-block: var(--cc-space-16); }
.cv-v3 .cv-section--tight { padding-block: var(--cc-space-10); }
.cv-v3 .cv-section--loose { padding-block: var(--cc-space-24); }

.cv-v3 .cv-container {
  max-width: 1200px;
  margin-inline: auto;
  padding-inline: var(--cc-space-4);
}


/* --- Section 7: Reduced motion --- */

@media (prefers-reduced-motion: reduce) {
  .cv-v3 *,
  .cv-v3 *::before,
  .cv-v3 *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}


/* --- Section 8: Sale Strip (Phase 37 Wave B — Banner CMS) --- */
/*
 * Verbatim from design-system/v2.2-source/project/ui_kits/marketing/index.html
 * L11-21 + mobile responsive (planner-locked 640px breakpoint).
 *
 * Consumed by render_sale_strip() (Plan 37-07) reading site_banners rows.
 * Scoped under .cv-v3 — no render on un-migrated pages even after Plan 37-08
 * wires the unconditional hook above the navbar. D-04 ships 4 color presets
 * (.cv-strip--primary | --accent | --success | --warning) plus a .cv-strip--custom
 * hook that defers to inline style for operator-set bg_custom_hex / text_custom_hex.
 */

.cv-strip {
  display: none;  /* default-hidden on every page; activated by .cv-v3 .cv-strip descendant rule below */
}

.cv-v3 .cv-strip {
  display: block;
  width: 100%;
  text-align: center;
  font-family: var(--cc-font-body);
  font-size: 13px;
  line-height: 1.5;
  padding: 8px 16px;
  font-weight: 500;
  letter-spacing: 0.02em;
  position: relative;
  z-index: 5;
}

.cv-v3 .cv-strip strong {
  color: #FFD56B;
  font-weight: 700;
}

.cv-v3 .cv-strip a,
.cv-v3 .cv-strip .cv-strip__link {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
  font-weight: 600;
}

.cv-v3 .cv-strip--primary {
  background: var(--cc-navy);
  color: #fff;
}

.cv-v3 .cv-strip--accent {
  background: var(--cc-blue);
  color: #fff;
}

.cv-v3 .cv-strip--success {
  background: var(--cc-green);
  color: #fff;
}

.cv-v3 .cv-strip--warning {
  background: #F59E0B;
  color: var(--cc-navy);
}

.cv-v3 .cv-strip--custom {
  /* No background or color rules — inline style="background: {bg_custom_hex}; color: {text_custom_hex}"
     from render_sale_strip() takes precedence when bg_preset='custom'. */
}

@media (max-width: 640px) {
  .cv-v3 .cv-strip {
    font-size: 12px;
    padding: 7px 12px;
  }
}


/* --- Section 9: Navbar — sticky white + blur (Phase 37 Wave C — Chrome Rewrite) --- */
/*
 * Verbatim port of design-system/v2.2-source/project/ui_kits/marketing/styles.jsx
 * mkStyles.header (L5-11) + mkStyles.headerInner (L12-15) + mkStyles.logoLink (L16) +
 * mkStyles.nav (L17) + mkStyles.navLink (L18-20) + mkStyles.loginLink (L21), plus the
 * responsive hide-rules from index.html L46-49 (below 900px hide nav/login, show burger).
 *
 * MUTEX with legacy `.navbar` from design-system.css L1199+: under `.cv-v3` body scope
 * the legacy `.navbar { display: none !important }` rule below forces the legacy header
 * to hide; the compound `.cv-v3.cv-navbar--sticky { display: flex }` rule activates this
 * new header (the markup emits `<header class="cv-v3 cv-navbar cv-navbar--sticky">`, so
 * `.cv-v3` and `.cv-navbar*` live on the SAME element and require a compound selector,
 * not a descendant combinator). On NON-`.cv-v3` pages (default body), the base rule
 * `.cv-navbar { display: none }` hides the new header and legacy renders normally.
 *
 * Consumed by includes/header.php's NEW <header class="cv-v3 cv-navbar"> block (Task 2).
 */

.cv-navbar {
  display: none;  /* default-hidden on every page; activated by .cv-v3 .cv-navbar--sticky descendant below */
}

.cv-v3 .cv-navbar--sticky {
  display: flex;
  position: sticky;
  top: 0;
  z-index: 50;
  background: rgba(255, 255, 255, 0.85);
  -webkit-backdrop-filter: saturate(180%) blur(8px);
  backdrop-filter: saturate(180%) blur(8px);
  border-bottom: 1px solid var(--cc-border);
}

/*
 * REG-05 closure (Plan 37-25, Wave D iter-6) — cv-navbar scroll-state modifier rules.
 *
 * The base `.cv-v3 .cv-navbar--sticky` rule above provides the "glass" appearance
 * (semi-transparent white + saturate/blur backdrop-filter). The --glass modifier is
 * implicit — toggling it on/off in JS is a class-name affordance for parity with the
 * legacy navbar's `navbar--glass` modifier, but the underlying rendering is provided
 * by the base --sticky rule (see landing.js Section 1, second IntersectionObserver block).
 *
 * The --solid modifier OVERRIDES the glass background + backdrop-filter with an opaque
 * white background and no blur. This is the scrolled-past-hero state — mirrors the
 * legacy `navbar--solid` rule in design-system.css. position:sticky + border-bottom from
 * the --sticky base STAY via cascade.
 */
.cv-v3 .cv-navbar--solid {
  background: #fff;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.cv-v3 .cv-navbar--glass {
  /* Explicit no-op for class-name parity with legacy navbar--glass — the actual glass
   * styling is provided by the base .cv-v3 .cv-navbar--sticky rule above. This rule exists
   * so that the JS-side `.classList.toggle('cv-navbar--glass', true)` has a documented
   * receiver class even though no CSS overrides are needed. */
}

.cv-v3 .cv-navbar__inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 12px 24px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  width: 100%;
}

/* Phase 37 Wave D iter-7 LAY-01/02 (Plan 37-26): flex-shrink:0 + white-space:nowrap on cv-navbar inline-content elements. Closes operator UAT 2026-05-19 layout collapse (brand text overlap + Free Tools/100 Credits/My Reports 2-line wrap). */
.cv-v3 .cv-navbar__brand {
  display: flex;
  align-items: center;
  gap: var(--cc-space-2);
  text-decoration: none;
  color: var(--cc-fg-1);
  flex-shrink: 0;
}

.cv-v3 .cv-navbar__logo {
  height: 32px;
  width: auto;
  display: block;
}

.cv-v3 .cv-navbar__brand-text {
  font-family: var(--cc-font-display);
  font-weight: var(--cc-fw-bold);
  font-size: var(--cc-fs-lg);
  color: var(--cc-fg-1);
  letter-spacing: -0.01em;
  white-space: nowrap;
}

.cv-v3 .cv-navbar__links {
  display: flex;
  gap: 22px;
  align-items: center;
}

.cv-v3 .cv-navbar__link {
  font-family: var(--cc-font-body);
  font-size: 14px;
  font-weight: var(--cc-fw-medium);
  color: var(--cc-fg-3);
  text-decoration: none;
  transition: color var(--cc-dur) var(--cc-ease);
  white-space: nowrap;
}

.cv-v3 .cv-navbar__link:hover {
  color: var(--cc-navy);
  text-decoration: none;
}

/*
 * REG-07 closure (Plan 37-25, Wave D iter-6) — cv-navbar active-link visual indicator.
 *
 * Applies when landing.js Section 5 adds the `cv-navbar__link--active` class to a link
 * whose href matches the current page path. Uses the same navy color as :hover (so the
 * user's hover/active visual language is consistent) plus a semibold font-weight bump
 * for clearer visual indication of "you are here." No transition — the user is already
 * on this page, so the highlighted state should appear instantly on page render rather
 * than animating in (animation would create odd post-load visual movement).
 *
 * Mirrors the legacy `.navbar__link--active` pattern in design-system.css.
 */
.cv-v3 .cv-navbar__link--active {
  color: var(--cc-navy);
  font-weight: var(--cc-fw-semi);
}

.cv-v3 .cv-navbar__actions {
  display: flex;
  gap: 10px;
  align-items: center;
}

.cv-v3 .cv-navbar__login {
  font-family: var(--cc-font-body);
  font-size: 14px;
  font-weight: var(--cc-fw-medium);
  color: var(--cc-fg-2);
  text-decoration: none;
  padding: 8px 4px;
  cursor: pointer;
}

.cv-v3 .cv-navbar__login:hover {
  color: var(--cc-navy);
}

/*
 * .cv-v3 .cv-navbar__cta has no rules of its own — the `<button class="cv-btn
 * cv-btn--primary cv-navbar__cta">` element inherits its styling from the
 * Section 3 .cv-btn / .cv-btn--primary rules. The cv-navbar__cta class is a
 * marker hook for future overrides (e.g., reduced padding inside the navbar)
 * — to be uncommented and populated when such an override is needed.
 */

.cv-v3 .cv-navbar__burger {
  display: none;
  background: transparent;
  border: 1px solid var(--cc-border);
  padding: 8px;
  border-radius: var(--cc-radius);
  cursor: pointer;
  color: var(--cc-fg-2);
  align-items: center;
  justify-content: center;
}

.cv-v3 .cv-navbar__burger:hover {
  background: var(--cc-navy-bg);
  border-color: var(--cc-navy-10);
}


/* --- Section 9.5: cv-navbar dropdown (REG-01 Wave D iter-5) --- */
/*
 * cv-v3 BEM analog of the legacy .dropdown / .dropdown__menu / .dropdown__item
 * pattern at design-system.css L1338-L1407. The cv-v3 dropdown is wired via
 * data-action="toggle-account-dropdown" handler at script.js which toggles
 * .cv-navbar__dropdown--open on the wrapper; the menu transition is opacity +
 * transform (matches legacy pattern at design-system.css L1357-L1369).
 *
 * Operator UX decision 2026-05-18: My Reports is surfaced as a top-level
 * standalone button (cv-navbar__reports-btn) instead of a buried dropdown item.
 * The reports button intentionally mirrors the credit-pill base treatment for
 * visual consistency across the three navbar action surfaces (credit-pill +
 * reports-btn + dropdown-toggle).
 *
 * Consumed by script.js updateLoginStatus logged-in branch (cvNavAuth innerHTML
 * mirror) + actionHandlers entries show-credit-breakdown / toggle-account-dropdown
 * / show-dashboard / logout (show-my-reports REUSED from iter-4 WR-01 — no new
 * handler for the standalone button).
 */

/* Phase 37 Wave D iter-7 LAY-04/05/06 (Plan 37-26): visual restyle of the 3
 * logged-in cv-navbar action surfaces to match bundle design language
 * (design-system/v2.2-source/.../styles.jsx mkStyles.btnPrimary +
 * mkStyles.loginLink). Coordinated hierarchy: credit-pill = soft data chip
 * (navy-bg pill), reports-btn = primary navy CTA (btnPrimary look),
 * dropdown-toggle = secondary ghost (white + border). Closes operator
 * UAT 2026-05-19 visual-inconsistency finding. */
.cv-v3 .cv-navbar__credit-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--cc-font-body);
  font-size: var(--cc-fs-sm);
  font-weight: var(--cc-fw-semi);
  color: var(--cc-navy);
  background: var(--cc-navy-bg);
  border: none;
  padding: 6px 14px;
  border-radius: var(--cc-radius-full);
  cursor: pointer;
  position: relative;
  transition: color var(--cc-dur) var(--cc-ease), background-color var(--cc-dur) var(--cc-ease);
  white-space: nowrap;
}

.cv-v3 .cv-navbar__credit-pill:hover {
  color: var(--cc-navy);
  background: var(--cc-navy-tint);
}

/* Phase 37 Wave D iter-7 LAY-05 (Plan 37-26): standalone top-level My Reports
 * button restyled as primary navy CTA. Matches bundle mkStyles.btnPrimary —
 * navy fill, white text, inset highlight + 6px navy-tinted drop shadow,
 * hover transform lift. Was: transparent ghost (operator decision 2026-05-18
 * coordinated-set styling; revised 2026-05-19 to match bundle btnPrimary
 * design language per operator visual-restyle directive). */
.cv-v3 .cv-navbar__reports-btn {
  background: var(--cc-navy);
  border: none;
  padding: 10px 18px;
  border-radius: var(--cc-radius-md);
  color: #fff;
  font-family: var(--cc-font-body);
  font-size: var(--cc-fs-sm);
  font-weight: var(--cc-fw-semi);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 6px rgba(0, 65, 106, 0.20);
  transition: transform 120ms var(--cc-ease), box-shadow 180ms var(--cc-ease);
  white-space: nowrap;
}

.cv-v3 .cv-navbar__reports-btn:hover {
  background: var(--cc-navy);
  color: #fff;
  transform: translateY(-1px);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.20), 0 4px 12px rgba(0, 65, 106, 0.30);
}

.cv-v3 .cv-navbar__dropdown {
  position: relative;
  display: inline-flex;
}

/* Phase 37 Wave D iter-7 LAY-06 (Plan 37-26): Account dropdown toggle restyled
 * as refined ghost button matching bundle mkStyles.btnSecondary shape.
 * White bg + hairline border + navy text on hover. Padding matches reports-btn
 * (10/18) so the 3-element chrome set aligns at the same visual height. */
.cv-v3 .cv-navbar__dropdown-toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--cc-font-body);
  font-size: var(--cc-fs-sm);
  font-weight: var(--cc-fw-semi);
  color: var(--cc-fg-2);
  background: #fff;
  border: 1px solid var(--cc-border);
  padding: 10px 18px;
  border-radius: var(--cc-radius);
  white-space: nowrap;
  cursor: pointer;
  transition: color var(--cc-dur) var(--cc-ease), background-color var(--cc-dur) var(--cc-ease), border-color var(--cc-dur) var(--cc-ease);
}

.cv-v3 .cv-navbar__dropdown-toggle:hover {
  color: var(--cc-navy);
  background: var(--cc-bg-soft);
  border-color: var(--cc-navy-10);
}

.cv-v3 .cv-navbar__dropdown-menu {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  min-width: 220px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: var(--cc-radius);
  box-shadow: var(--cc-shadow-md);
  padding: 6px 0;
  opacity: 0;
  pointer-events: none;
  transform: translateY(-4px);
  transition: opacity var(--cc-dur) var(--cc-ease), transform var(--cc-dur) var(--cc-ease);
  z-index: 60;
}

.cv-v3 .cv-navbar__dropdown--open .cv-navbar__dropdown-menu {
  opacity: 1;
  pointer-events: auto;
  transform: translateY(0);
}

.cv-v3 .cv-navbar__dropdown-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  color: var(--cc-fg-2);
  font-family: var(--cc-font-body);
  font-size: var(--cc-fs-sm);
  font-weight: var(--cc-fw-medium);
  text-decoration: none;
  cursor: pointer;
  background: transparent;
  border: none;
  width: 100%;
  text-align: left;
  transition: background-color var(--cc-dur) var(--cc-ease), color var(--cc-dur) var(--cc-ease);
}

.cv-v3 .cv-navbar__dropdown-item:hover {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  text-decoration: none;
}

.cv-v3 .cv-navbar__dropdown-divider {
  border-top: 1px solid var(--cc-border);
  margin: 6px 0;
}


/* --- Section 9.6: Free Tools hover dropdown + mobile slide-down menu (Phase 37 navbar enhancement) --- */
/*
 * Free Tools dropdown reuses the Section 9.5 cv-navbar__dropdown-menu / -item /
 * -divider visual treatment, but opens on hover + focus-within (CSS only, no JS)
 * via the --hover modifier and anchors to the left edge via the --left modifier.
 * Mobile menu: the burger (shown <= 1024px) toggles cv-navbar__mobile-menu--open
 * via the toggle-mobile-menu handler in script.js; the panel drops below the
 * sticky navbar with the nav links.
 */
.cv-v3 .cv-navbar__dropdown--hover .cv-navbar__dropdown-menu { top: 100%; }
.cv-v3 .cv-navbar__dropdown--hover:hover .cv-navbar__dropdown-menu,
.cv-v3 .cv-navbar__dropdown--hover:focus-within .cv-navbar__dropdown-menu {
  opacity: 1;
  pointer-events: auto;
  transform: translateY(0);
}
.cv-v3 .cv-navbar__dropdown-menu--left { left: 0; right: auto; }
.cv-v3 .cv-navbar__dropdown-trigger { cursor: pointer; }
.cv-v3 .cv-navbar__dropdown-caret {
  font-size: 0.7em;
  margin-left: 3px;
  display: inline-block;
}

.cv-v3 .cv-navbar__mobile-menu {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: #fff;
  border-top: 1px solid var(--cc-border);
  border-bottom: 1px solid var(--cc-border);
  box-shadow: var(--cc-shadow-md);
  padding: 6px 0;
  z-index: 59;
  max-height: calc(100vh - 64px);
  overflow-y: auto;
}
.cv-v3 .cv-navbar__mobile-menu--open { display: block; }
.cv-v3 .cv-navbar__mobile-link {
  display: block;
  padding: 13px 22px;
  color: var(--cc-fg-2);
  font-family: var(--cc-font-body);
  font-size: 15px;
  font-weight: var(--cc-fw-medium);
  text-decoration: none;
  transition: background-color var(--cc-dur) var(--cc-ease), color var(--cc-dur) var(--cc-ease);
}
.cv-v3 .cv-navbar__mobile-link:hover {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  text-decoration: none;
}

/* Mobile expandable section (Free Tools) — tap the toggle button to reveal the
   nested tool links. The submenu items reuse the desktop dropdown icon classes
   (cv-navbar__dropdown-item__icon--<color>) so colors stay consistent across
   both surfaces. */
.cv-v3 .cv-navbar__mobile-section { display: block; }
.cv-v3 .cv-navbar__mobile-toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  background: transparent;
  border: none;
  text-align: left;
  font: inherit;
  cursor: pointer;
}
.cv-v3 .cv-navbar__mobile-caret {
  display: inline-block;
  font-size: 0.85em;
  color: var(--cc-fg-4);
  margin-left: 12px;
  transition: transform 180ms var(--cc-ease), color var(--cc-dur) var(--cc-ease);
}
.cv-v3 .cv-navbar__mobile-section--open .cv-navbar__mobile-caret {
  transform: rotate(180deg);
  color: var(--cc-navy);
}
.cv-v3 .cv-navbar__mobile-submenu {
  display: none;
  background: var(--cc-bg-soft);
  padding: 4px 0;
}
.cv-v3 .cv-navbar__mobile-section--open .cv-navbar__mobile-submenu {
  display: block;
}
.cv-v3 .cv-navbar__mobile-link--sub {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 11px 22px 11px 44px;
  font-size: 14px;
}

/* Desktop guard — the mobile menu never shows >= 1025px (the burger is its only
   opener and the burger is desktop-hidden; this defends against a lingering
   --open class after a viewport resize). */
@media (min-width: 1025px) {
  .cv-v3 .cv-navbar__mobile-menu { display: none !important; }
}


/* --- Section 9.7: Dropdown item icons (Free Tools dropdown — Phase 37 navbar enhancement) --- */
/*
 * Each Free Tools dropdown item carries an icon span + a text span. The icon
 * SVGs use stroke="currentColor", so colors are set via a per-tool modifier on
 * the icon span (parent <a>:hover changes the text color via inheritance but
 * the icon span has its OWN color property, so the icon keeps its thematic
 * color across hover state). Icon colors mirror tools.php $tools icon_class.
 */
.cv-v3 .cv-navbar__dropdown-item__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 20px;
  height: 20px;
}
.cv-v3 .cv-navbar__dropdown-item__icon svg {
  width: 18px;
  height: 18px;
  display: block;
}
.cv-v3 .cv-navbar__dropdown-item__icon--blue   { color: #3B82F6; }
.cv-v3 .cv-navbar__dropdown-item__icon--red    { color: #EF4444; }
.cv-v3 .cv-navbar__dropdown-item__icon--green  { color: #10B981; }
.cv-v3 .cv-navbar__dropdown-item__icon--violet { color: #8B5CF6; }
.cv-v3 .cv-navbar__dropdown-item__icon--amber  { color: #F59E0B; }
.cv-v3 .cv-navbar__dropdown-item__icon--orange { color: #FB923C; }
.cv-v3 .cv-navbar__dropdown-item__icon--navy   { color: var(--cc-navy); }


/* Responsive — below 1024px hide nav/login, show burger. Raised from 900px → 1024px per Plan 37-26 LAY-03 (operator decision 2026-05-19 — cv-navbar at 900-1024px is too cramped with 6 nav links + 3 logged-in actions + brand). Bundle originally specified 900px (index.html L46-49). */
@media (max-width: 1024px) {
  /* Mobile (<= 1024px): top navbar shows logo IMAGE (no brand text) + auth chrome
     (logged-in: credit-pill + reports-btn + account dropdown; logged-out: Log in + Sign Up).
     The burger button is shown here and opens the cv-navbar__mobile-menu slide-down
     panel with the nav links. The bottom-tab-bar still covers the primary actions
     (Home/Reports/Credits/Account). */

  /* Hide brand text — logo image only */
  .cv-v3 .cv-navbar__brand-text {
    display: none;
  }

  /* Hide the desktop nav links — the burger menu exposes them on mobile */
  .cv-v3 .cv-navbar__links {
    display: none;
  }

  /* Show the burger — opens the cv-navbar__mobile-menu slide-down panel */
  .cv-v3 .cv-navbar__burger {
    display: inline-flex;
  }

  /* Compact navbar padding + gap to fit narrow viewports */
  .cv-v3 .cv-navbar__inner {
    padding: 10px 16px;
    gap: 8px;
  }
  .cv-v3 .cv-navbar__actions {
    gap: 6px;
  }

  /* Compact button sizing on mobile (logged-in trio) */
  .cv-v3 .cv-navbar__credit-pill {
    padding: 5px 10px;
    font-size: 13px;
  }
  .cv-v3 .cv-navbar__reports-btn {
    padding: 7px 12px;
    font-size: 13px;
  }
  .cv-v3 .cv-navbar__dropdown-toggle {
    padding: 7px 12px;
    font-size: 13px;
  }

  /* Compact logged-out elements */
  .cv-v3 .cv-navbar__login {
    padding: 7px 4px;
    font-size: 13px;
  }
}

/* MUTEX: hide legacy .navbar under .cv-v3 body scope */
.cv-v3 .navbar,
.cv-v3 .navbar--glass {
  display: none !important;
}


/* --- Section 10: Mobile Bottom Tab Bar (Phase 37 Wave C — Chrome Rewrite) --- */
/*
 * Restyle of the legacy <nav class="bottom-tab-bar"> from includes/header.php L101.
 * No bundle source — the design system does not specify a mobile bottom-tab bar
 * (HeroSection.jsx + styles.jsx target desktop layouts). Per D-09 (off-design pages
 * inherit new design system tokens + existing copy), we restyle the existing 4-item
 * bottom-tab (Home / Reports / Credits / Account) using --cc-* tokens: white surface,
 * navy active tint, --cc-border separators, --cc-fg-3 inactive labels.
 *
 * MUTEX with legacy `.bottom-tab-bar` rule below. Same dual-emit pattern as the navbar:
 * the markup emits `<nav class="cv-v3 cv-bottom-tab ...">` with both classes on the SAME
 * element, so the activation rule must be a compound selector `.cv-v3.cv-bottom-tab`
 * (NOT a descendant combinator — an element is never a descendant of itself).
 * Consumed by includes/header.php's NEW <nav class="cv-v3 cv-bottom-tab"> block.
 */

.cv-bottom-tab {
  display: none;  /* default-hidden on every page; restored under .cv-v3.cv-bottom-tab + (max-width: 767px) below */
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 40;
  background: rgba(255, 255, 255, 0.96);
  -webkit-backdrop-filter: saturate(180%) blur(8px);
  backdrop-filter: saturate(180%) blur(8px);
  border-top: 1px solid var(--cc-border);
  padding: 6px 4px calc(env(safe-area-inset-bottom, 0px) + 4px);
}

.cv-v3 .cv-bottom-tab__item {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  padding: 6px 4px;
  text-decoration: none;
  color: var(--cc-fg-3);
  font-family: var(--cc-font-body);
  font-size: 11px;
  font-weight: var(--cc-fw-medium);
  transition: color var(--cc-dur-fast) var(--cc-ease);
}

.cv-v3 .cv-bottom-tab__item:hover,
.cv-v3 .cv-bottom-tab__item--active {
  color: var(--cc-navy);
}

.cv-v3 .cv-bottom-tab__icon {
  width: 22px;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.cv-v3 .cv-bottom-tab__label {
  font-size: 11px;
  letter-spacing: 0.01em;
}

/* Show only on mobile/tablet narrow viewports (matches legacy .bottom-tab-bar.d-none--desktop).
   Compound selector `.cv-v3.cv-bottom-tab` — both classes ride the SAME <nav> element. */
@media (max-width: 767px) {
  .cv-v3 .cv-bottom-tab {
    display: flex;
  }
}

/* MUTEX: hide legacy .bottom-tab-bar under .cv-v3 body scope */
.cv-v3 .bottom-tab-bar {
  display: none !important;
}

/* --- Section 11: Footer — 4-col grid + badges + fine-print (Phase 37 Wave C — Chrome Rewrite) --- */
/*
 * Verbatim port of design-system/v2.2-source/project/ui_kits/marketing/styles.jsx
 * mkStyles.footer (L316) + mkStyles.footerInner (L317) + mkStyles.footerCol (L318) +
 * mkStyles.footerHead (L319) + mkStyles.footerLink (L320) + mkStyles.footerBadges (L321) +
 * mkStyles.footerFine (L322). Markup shape from SocialAndFooter.jsx Footer() L90-132.
 *
 * MUTEX with legacy `.footer` from design-system.css (Phase 16 chrome).
 *
 * Dual-emit pattern (corrected): the markup ships `<footer class="cv-v3 cv-footer">`
 * with both classes on the SAME element. A descendant combinator like
 * `.cv-v3 .cv-footer` would never match (an element is not a descendant of itself),
 * so on non-cv-v3 pages the new <footer> would fall back to the user-agent block-level
 * default and render unstyled UNDER the legacy dark footer. Instead:
 *
 *   1. Default-hide via the plain `.cv-footer { display: none }` rule below — applies on
 *      every page regardless of body class.
 *   2. Activate via the compound `.cv-v3.cv-footer { display: block; ... }` rule below —
 *      both classes live on the same element, so this matches and overrides the default-hide.
 *   3. Hide legacy via the existing `.cv-v3 .footer { display: none !important }` rule at
 *      the bottom of this section — this descendant combinator is correct because
 *      `body.cv-v3` IS a proper ancestor of the legacy `<footer class="footer">`.
 *
 * Consumed by includes/footer.php's NEW <footer class="cv-v3 cv-footer"> block (Task 2).
 */

.cv-footer {
  display: none;  /* default-hidden on every page; activated by .cv-v3 .cv-footer descendant below */
}

.cv-v3 .cv-footer {
  display: block;
  background: #fff;
  border-top: 1px solid var(--cc-border);
  padding: 48px 24px 24px;
}

.cv-v3 .cv-footer__brand-link {
  display: inline-block;
  text-decoration: none;
  margin-bottom: 12px;
  color: inherit;
}

.cv-v3 .cv-footer__inner {
  max-width: 1200px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 2fr 1fr 1fr 1fr;
  gap: 32px;
}

.cv-v3 .cv-footer__col {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.cv-v3 .cv-footer__col--brand {
  gap: 8px;
}

.cv-v3 .cv-footer__logo {
  height: 32px;
  width: auto;
  display: block;
  margin-bottom: 12px;
}

.cv-v3 .cv-footer__col--brand p {
  font-size: 13px;
  color: var(--cc-fg-4);
  line-height: 1.55;
  margin: 0;
}

.cv-v3 .cv-footer__col--brand p + p {
  margin-top: 4px;
}

.cv-v3 .cv-footer__head {
  font-family: var(--cc-font-body);
  font-weight: var(--cc-fw-bold);
  font-size: 14px;
  color: var(--cc-fg-1);
  margin-bottom: 10px;
}

.cv-v3 .cv-footer__link {
  font-family: var(--cc-font-body);
  font-size: 13px;
  color: var(--cc-fg-3);
  text-decoration: none;
  padding: 3px 0;
  transition: color var(--cc-dur) var(--cc-ease);
}

.cv-v3 .cv-footer__link:hover {
  color: var(--cc-navy);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.cv-v3 .cv-footer__badges {
  max-width: 1200px;
  margin: 32px auto 0;
  display: flex;
  gap: 24px;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  padding: 16px 0;
  border-top: 1px solid var(--cc-border);
}

.cv-v3 .cv-footer__badges img {
  display: block;
  height: 32px;
  width: auto;
}

.cv-v3 .cv-footer__badges img[alt="PayPal"] {
  height: 28px;
}

.cv-v3 .cv-footer__fine {
  max-width: 1200px;
  margin: 16px auto 0;
  text-align: left;
  font-size: 11px;
  color: var(--cc-fg-5);
  line-height: 1.7;
  padding: 0 8px;
}

.cv-v3 .cv-footer__fine p {
  margin: 0 0 12px;
}

.cv-v3 .cv-footer__fine p:last-child {
  margin: 0;
}

.cv-v3 .cv-footer__fine a {
  color: var(--cc-fg-4);
  text-decoration: underline;
}

.cv-v3 .cv-footer__bottom {
  max-width: 1200px;
  margin: 16px auto 0;
  text-align: center;
  font-size: 12px;
  color: var(--cc-fg-5);
  padding: 16px 8px 0;
  border-top: 1px solid var(--cc-border);
}

.cv-v3 .cv-footer__bottom p {
  margin: 0;
}

/* Responsive — Phase 37 navbar enhancement (revised 2026-05-23):
 * The original mobile rule collapsed the 4-col grid to a single column, which
 * stacked the brand + 3 link columns into a ~1500px-tall strip at typical mobile
 * widths. Replaced with: brand spans the full row, the 3 link columns sit on a
 * 3-col grid (480-900px) or a 2-col grid (<= 480px) — a much more compact and
 * readable mobile footer. */
@media (max-width: 900px) {
  .cv-v3 .cv-footer {
    padding: 40px 16px 24px;
  }
  .cv-v3 .cv-footer__inner {
    grid-template-columns: repeat(3, 1fr);
    gap: 28px 16px;
  }
  .cv-v3 .cv-footer__col--brand {
    grid-column: 1 / -1;
    text-align: center;
  }
  .cv-v3 .cv-footer__col--brand .cv-footer__logo {
    margin-left: auto;
    margin-right: auto;
  }
  .cv-v3 .cv-footer__badges {
    gap: 16px;
  }
}
@media (max-width: 480px) {
  .cv-v3 .cv-footer__inner {
    grid-template-columns: repeat(2, 1fr);
    gap: 24px 14px;
  }
}

/* MUTEX: hide legacy .footer under .cv-v3 body scope */
.cv-v3 .footer {
  display: none !important;
}


/* --- Section 12: VIN Results render (Phase 37 Wave D — VIN Results) ---
   Verbatim port of:
   - design-system/v2.2-source/project/ui_kits/marketing/vin-results-styles.jsx (305 LOC CSS-in-JS)
   - design-system/v2.2-source/project/ui_kits/marketing/vin-results.html (@media + hover + @keyframes)
   - design-system/v2.2-source/project/ui_kits/marketing/VinResultsPage.jsx L268 (inline progress-ring transition)
   Scoping rules:
   - Bare cv-vr-* default-hide rules (specificity 0,1,0) win on un-migrated pages.
   - Activation rules use descendant combinator: body.cv-v3 ancestor + cv-vr-X descendant (specificity 0,2,0).
   - Compound-selector pattern from Wave C 37-12 deliberately avoided here.
   - @keyframes vr-pulse renamed cv-vr-pulse for namespacing.
   - Hover not-selector rewritten as semantic class selector (CSS practice over the CSS-in-JS attribute form).
*/


/* --- 12.1 Bare default-hide for cv-vr-* component roots (defense-in-depth) --- */

.cv-vr-search-section {
  display: none;
}

.cv-vr-header-section {
  display: none;
}

.cv-vr-cards-section {
  display: none;
}

.cv-vr-trust-strip {
  display: none;
}


/* --- 12.2 cv-vr-pulse keyframes (verbatim from vin-results.html L44-47) --- */

@keyframes cv-vr-pulse {
  0%, 100% {
    box-shadow: 0 0 0 0 rgba(0, 135, 83, 0.55);
  }
  50% {
    box-shadow: 0 0 0 8px rgba(0, 135, 83, 0);
  }
}


/* --- 12.3 Persistent search bar (vin-results-styles.jsx L4-36) --- */

.cv-v3 .cv-vr-search-section {
  display: block;
  padding: 16px 24px;
  background: #fff;
  border-bottom: 1px solid var(--cc-border);
}

.cv-v3 .cv-vr-search-section__search-bar {
  display: flex;
  align-items: center;
  gap: 6px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  padding: 5px;
  max-width: 620px;
  margin: 0 auto;
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.06);
}

.cv-v3 .cv-vr-search-section__mode-wrap {
  padding: 0 2px;
}

.cv-v3 .cv-vr-search-section__mode-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  padding: 7px 12px;
  border-radius: 8px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 12px;
  color: var(--cc-fg-2);
  letter-spacing: 0.04em;
}

.cv-v3 .cv-vr-search-section__input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: var(--cc-font-mono);
  font-size: 14px;
  letter-spacing: 0.06em;
  color: var(--cc-fg-1);
  padding: 8px 6px;
}

.cv-v3 .cv-vr-search-section__submit {
  background: var(--cc-navy);
  color: #fff;
  border: none;
  width: 34px;
  height: 34px;
  border-radius: 8px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 4px rgba(0, 65, 106, 0.25);
  flex-shrink: 0;
}


/* --- 12.4 Compact search bar overrides per Q5 (matches index.php L444-465 markup) --- */

.cv-v3 .vin-card-compact-wrap {
  /* Positioning context for the inline compactStateListbox dropdown (Plan 37-27
     UAT follow-up). Width + vertical margin moved here from .vin-card-compact so
     the listbox can position absolutely against this wrapper. */
  position: relative;
  max-width: 620px;
  margin: 24px auto;
}
.cv-v3 .vin-card-compact {
  display: flex;
  align-items: center;
  gap: 6px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  padding: 5px;
  /* width + margin now live on .vin-card-compact-wrap above */
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.06);
}
.cv-v3 .vin-card-compact__listbox {
  position: absolute;
  top: 100%;
  right: 56px;
  margin: 6px 0 0;
  z-index: 30;
  width: 220px;
  max-height: 280px;
  overflow-y: auto;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  box-shadow: 0 12px 32px rgba(0, 65, 106, 0.14);
  list-style: none;
  padding: 6px 0;
}
.cv-v3 .vin-card-compact__listbox[hidden] {
  display: none;
}
.cv-v3 .vin-card-compact__listbox li {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 14px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-size: 13px;
  color: var(--cc-fg-2);
}
.cv-v3 .vin-card-compact__listbox li:hover,
.cv-v3 .vin-card-compact__listbox li[aria-selected="true"] {
  background: var(--cc-bg-soft);
  color: var(--cc-navy);
}
.cv-v3 .vin-card-compact__listbox-code {
  font-weight: 700;
  color: var(--cc-navy);
  min-width: 28px;
}
.cv-v3 .vin-card-compact__listbox-name {
  color: var(--cc-fg-3);
}

.cv-v3 .vin-card-compact__mode {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  padding: 7px 12px;
  border-radius: 8px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 12px;
  color: var(--cc-fg-2);
  letter-spacing: 0.04em;
}

.cv-v3 .vin-card-compact__input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: var(--cc-font-mono);
  font-size: 14px;
  letter-spacing: 0.06em;
  color: var(--cc-fg-1);
  padding: 8px 6px;
}

.cv-v3 .vin-card-compact__state {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  padding: 7px 10px;
  border-radius: 8px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 12px;
  color: var(--cc-fg-2);
}

.cv-v3 .vin-card-compact__submit {
  background: var(--cc-navy);
  color: #fff;
  border: none;
  width: 34px;
  height: 34px;
  border-radius: 8px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 4px rgba(0, 65, 106, 0.25);
  flex-shrink: 0;
}


/* --- 12.5 Vehicle header section (vin-results-styles.jsx L38-61 + L283-302) --- */

.cv-v3 .cv-vr-header-section {
  display: block;
  padding: 32px 24px 16px;
  background: var(--cc-bg-soft);
  /* G-D-02 (Wave D iter-3) defense-in-depth against ribbon overhang on < 900px viewports.
     Updated 2026-05-19: `clip` instead of `hidden` per CR-02 corrective (design-system.css L212-215
     warning) — `hidden` promotes the element to a scroll container and forces overflow-y:auto,
     making the section scroll independently of the page on mobile. `clip` provides the same
     horizontal clipping defense without the scroll-container side effect. */
  overflow-x: clip;
}

.cv-v3 .cv-vr-header-section__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}

.cv-v3 .cv-vr-header-section__eyebrow {
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.10em;
  text-transform: uppercase;
}

.cv-v3 .cv-vr-header-section__vehicle-name {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(1.5rem, 3vw, 2.25rem);
  letter-spacing: -0.025em;
  color: var(--cc-fg-1);
  margin: 6px 0 8px;
  font-variant-numeric: tabular-nums;
}

.cv-v3 .cv-vr-header-section__vehicle-line {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 14px;
  color: var(--cc-fg-3);
  flex-wrap: wrap;
}

.cv-v3 .cv-vr-header-section__vehicle-line strong {
  color: var(--cc-fg-1);
  font-family: var(--cc-font-mono);
  letter-spacing: 0.04em;
}

.cv-v3 .cv-vr-header-section__vehicle-line .cv-vr-header-section__sep {
  color: var(--cc-fg-5);
}

.cv-v3 .cv-vr-header-section__vehicle-line .cv-vr-header-section__status {
  color: var(--cc-green);
  font-weight: 600;
}

.cv-v3 .cv-vr-header-section__cta {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

.cv-v3 .cv-vr-header-section__link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 9px;
  color: var(--cc-navy);
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
}

.cv-v3 .cv-vr-auction-pill {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 8px 16px 8px 14px;
  background: linear-gradient(135deg, #F0FDF4 0%, #ECFDF5 100%);
  color: var(--cc-green);
  border: 1px solid #00875340;
  border-radius: 9999px;
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
  box-shadow: 0 2px 8px rgba(0, 135, 83, 0.10), inset 0 1px 0 rgba(255, 255, 255, 0.5);
  transition: all 180ms cubic-bezier(0.16, 1, 0.3, 1);
}

.cv-v3 .cv-vr-auction-pill__dot {
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  background: var(--cc-green);
  box-shadow: 0 0 0 0 rgba(0, 135, 83, 0.55);
  animation: cv-vr-pulse 1.8s ease-in-out infinite;
  flex-shrink: 0;
}

.cv-v3 .cv-vr-auction-pill:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(0, 135, 83, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.6);
}

/* G-D-05 (Wave D iter-3) — neutralize landing-critical.css L307-311 #results-section .container { text-align: center; }
   cascade into the new cv-vr-* markup. Scoped under .cv-v3 so non-cv-v3 pages keep their legacy centered text-align
   (Wave A invariant). Also incidentally closes G-D-08 because .cv-v3 .cv-vr-header-section__cta inherits from
   .cv-v3 .cv-vr-header-section ancestor. */
.cv-v3 #results-section,
.cv-v3 #results-section .container,
.cv-v3 .cv-vr-header-section,
.cv-v3 .cv-vr-cards-section,
.cv-v3 .cv-vr-trust-strip {
  text-align: left;
}

/* BUG FIX 2026-05-19: landing.css #report-options at L745 sets display: flex + justify-content: center,
   and at @media (max-width: 767px) adds flex-direction: column + align-items: center. With align-items:
   center on a flex-column parent, the child (.cv-vr-cards-section) takes its natural content width
   instead of stretching to 100%. When the card's internal content is wider than the viewport, the
   section sizes to content width → cascade overflow on card → button.
   Override #report-options under .cv-v3 scope: reset to block layout + explicit 100% width so the
   cv-v3 sections behave like normal block children of the .container wrapper. */
.cv-v3 #report-options {
  display: block;
  width: 100%;
  margin-bottom: 0;
}

.cv-v3 #vehicle-info {
  width: 100%;
}

/* Ensure the cv-vr sections themselves fill the wrapper width — defense-in-depth in case any
   ancestor flex layout regresses to align-items: center. */
.cv-v3 .cv-vr-header-section,
.cv-v3 .cv-vr-cards-section {
  width: 100%;
}

/* G-D-06 (Wave D iter-3) — VehicleIcon SVG color + flex-shrink lift from bundle inline style
   at VinResultsPage.jsx L355: style={{color:"var(--cc-fg-4)", flexShrink:0}}. */
.cv-v3 .cv-vr-header-section__vehicle-icon {
  color: var(--cc-fg-4);
  flex-shrink: 0;
}


/* --- 12.6 Cards section + grid (vin-results-styles.jsx L63-67) --- */

.cv-v3 .cv-vr-cards-section {
  display: block;
  padding: 20px 24px 56px;
  background: var(--cc-bg-soft);
  /* G-D-02 (Wave D iter-3) defense-in-depth — clips cv-vr-report-card__ribbon
     `position: absolute; left: -8px` overhang at the section boundary, preventing
     horizontal scrollbar at narrow widths even when 12.10 @media grid-template-columns: 1fr
     collapse is active. Updated 2026-05-19: `clip` instead of `hidden` per CR-02 corrective
     (design-system.css L212-215 warning) — `hidden` promotes the element to a scroll container
     and forces overflow-y: auto, making the cards section scroll INDEPENDENTLY of the page
     on mobile (operator UAT 2026-05-19). `clip` keeps the horizontal-clip defense without the
     scroll-container side effect. */
  overflow-x: clip;
}

.cv-v3 .cv-vr-cards-grid {
  display: grid;
  /* BUG FIX 2026-05-19: use minmax(0, 1fr) instead of 1fr. The default `1fr` is shorthand for
     `minmax(auto, 1fr)` where `auto` means "at least as wide as content needs". The featured card's
     no-wrap meta row (3 inline-flex items: Carfax included + AutoCheck included + Same VIN) forces
     the card wider than the section content area on narrow viewports → button + corner banner appear
     to overflow the viewport. `minmax(0, 1fr)` lets the column stay at section width and overflow
     gets clipped by the card's `overflow: hidden` instead of pushing the grid wider. */
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
  align-items: stretch;
  margin-bottom: 24px;
}


/* --- 12.7 Report card (vin-results-styles.jsx L68-194) --- */

.cv-v3 .cv-vr-report-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  padding: 26px 22px 22px;
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: center;
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.06);
  transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 200ms;
}

.cv-v3 .cv-vr-report-card--featured {
  border: 2px solid var(--cc-navy);
  box-shadow: 0 20px 50px -8px rgba(0, 65, 106, 0.30), 0 8px 20px -4px rgba(0, 65, 106, 0.18), 0 0 0 6px rgba(0, 65, 106, 0.04);
  transform: translateY(-8px) scale(1.04);
  background: linear-gradient(180deg, #FFFFFF 0%, #F7FBFD 100%);
  z-index: 2;
}

.cv-v3 .cv-vr-report-card:hover:not(.cv-vr-report-card--featured) {
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(0, 65, 106, 0.10);
}

.cv-v3 .cv-vr-report-card__ribbon {
  position: absolute;
  top: 14px;
  left: -8px;
  background: linear-gradient(135deg, var(--cc-green), #00a368);
  color: #fff;
  padding: 6px 14px;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.08em;
  box-shadow: 0 4px 10px rgba(0, 135, 83, 0.25);
  border-radius: 0 6px 6px 0;
  z-index: 3;
}

.cv-v3 .cv-vr-report-card__corner-banner {
  position: absolute;
  top: 18px;
  right: -42px;
  width: 160px;
  transform: rotate(45deg);
  background: linear-gradient(90deg, #FFB347, #F59E0B);
  color: #fff;
  text-align: center;
  padding: 5px 0;
  box-shadow: 0 4px 10px rgba(245, 158, 11, 0.30);
  z-index: 2;
}

.cv-v3 .cv-vr-report-card__corner-banner-text {
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.10em;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}

.cv-v3 .cv-vr-report-card__tag {
  position: absolute;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  padding: 4px 12px;
  border-radius: 9999px;
  letter-spacing: 0.06em;
  white-space: nowrap;
  background: var(--cc-navy);
}

.cv-v3 .cv-vr-report-card__tag--green {
  background: var(--cc-green);
}

.cv-v3 .cv-vr-report-card__tag--blue {
  background: var(--cc-blue);
}

.cv-v3 .cv-vr-report-card__tag--navy {
  background: var(--cc-navy);
}

.cv-v3 .cv-vr-report-card__title {
  font-family: var(--cc-font-display);
  font-size: 19px;
  font-weight: 700;
  letter-spacing: -0.015em;
  color: var(--cc-fg-1);
  margin-bottom: 18px;
  margin-top: 4px;
}

.cv-v3 .cv-vr-ring-wrap {
  margin-bottom: 10px;
}

.cv-v3 .cv-vr-ring-label {
  font-size: 12px;
  color: var(--cc-fg-4);
  font-weight: 500;
  margin-bottom: 18px;
  letter-spacing: 0.02em;
}

.cv-v3 .cv-vr-progress-ring__progress {
  transition: stroke-dashoffset 800ms cubic-bezier(0.16, 1, 0.3, 1);
}

.cv-v3 .cv-vr-price-row {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 14px;
}

.cv-v3 .cv-vr-original-price {
  font-size: 15px;
  color: var(--cc-fg-4);
  text-decoration: line-through;
  text-decoration-color: var(--cc-fg-5);
}

.cv-v3 .cv-vr-card-price {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 28px;
  letter-spacing: -0.025em;
  line-height: 1;
  color: var(--cc-navy);
}

.cv-v3 .cv-vr-card-price--featured {
  font-size: 36px;
}

.cv-v3 .cv-vr-card-price--blue {
  color: var(--cc-blue);
}

.cv-v3 .cv-vr-card-price--green {
  color: var(--cc-green);
}

.cv-v3 .cv-vr-card-price--navy {
  color: var(--cc-navy);
}

.cv-v3 .cv-vr-owned-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
  padding: 8px 14px;
  border-radius: 9999px;
  font-size: 12px;
  font-weight: 700;
  margin-bottom: 14px;
}

.cv-v3 .cv-vr-cta-primary {
  width: 100%;
  color: #fff;
  border: none;
  padding: 12px 16px;
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 6px rgba(0, 65, 106, 0.18);
  background: var(--cc-navy);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}

.cv-v3 .cv-vr-cta-primary--blue {
  background: var(--cc-blue);
}

.cv-v3 .cv-vr-cta-primary--green {
  background: var(--cc-green);
}

.cv-v3 .cv-vr-cta-primary--navy {
  background: var(--cc-navy);
}

.cv-v3 .cv-vr-cta-secondary {
  width: 100%;
  border: none;
  padding: 12px 16px;
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 6px rgba(0, 65, 106, 0.18);
  color: #fff;
  background: var(--cc-navy);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}

.cv-v3 .cv-vr-featured-cta {
  width: 100%;
  color: #fff;
  border: none;
  padding: 15px 18px;
  border-radius: 11px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 15px;
  cursor: pointer;
  background: linear-gradient(180deg, #00558A 0%, #00416A 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.20), 0 6px 18px rgba(0, 65, 106, 0.34), 0 2px 4px rgba(0, 65, 106, 0.18);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}

.cv-v3 .cv-vr-featured-cta--blue {
  background: linear-gradient(180deg, #2480FF 0%, #0066FF 100%);
}

.cv-v3 .cv-vr-featured-cta--navy {
  background: linear-gradient(180deg, #00558A 0%, #00416A 100%);
}

.cv-v3 .cv-vr-featured-card__meta {
  display: flex;
  gap: 14px;
  justify-content: center;
  margin-top: 12px;
  margin-bottom: 4px;
  font-size: 11px;
  color: var(--cc-fg-3);
  font-weight: 600;
}

.cv-v3 .cv-vr-featured-card__meta-item {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.cv-v3 .cv-vr-secondary-link {
  display: block;
  text-align: center;
  margin-top: 10px;
  font-size: 12px;
  color: var(--cc-fg-4);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-color: var(--cc-border);
}

.cv-v3 .cv-vr-footnote {
  margin-top: 14px;
  padding-top: 14px;
  width: 100%;
  border-top: 1px solid var(--cc-border);
  font-size: 11px;
  color: var(--cc-fg-4);
  text-align: center;
  font-weight: 500;
}


/* --- 12.8 Auction card full-width (vin-results-styles.jsx L196-267) --- */

.cv-v3 .cv-vr-auction-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.06);
  display: grid;
  grid-template-columns: 200px 1fr 240px;
  align-items: stretch;
}

.cv-v3 .cv-vr-auction-card__visual {
  background: var(--cc-navy-bg);
  border-right: 1px solid var(--cc-border);
  padding: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.cv-v3 .cv-vr-auction-card__photo-wrap {
  position: relative;
  width: 100%;
  height: 100%;
  min-height: 160px;
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 4px 12px rgba(0, 65, 106, 0.15);
  background: #1a1a2e;
}

.cv-v3 .cv-vr-auction-card__photo {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.cv-v3 .cv-vr-auction-card__badge {
  position: absolute;
  top: 8px;
  left: 8px;
  background: #fff;
  color: var(--cc-navy);
  font-size: 9px;
  font-weight: 700;
  padding: 3px 7px;
  border-radius: 4px;
  letter-spacing: 0.06em;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
}

.cv-v3 .cv-vr-auction-card__price {
  position: absolute;
  bottom: 8px;
  right: 8px;
  background: rgba(0, 0, 0, 0.75);
  color: #fff;
  font-family: var(--cc-font-display);
  font-size: 16px;
  font-weight: 700;
  padding: 4px 10px;
  border-radius: 6px;
  letter-spacing: -0.02em;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}

.cv-v3 .cv-vr-auction-card__content {
  padding: 22px 26px;
}

.cv-v3 .cv-vr-auction-card__free-row {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 6px;
}

.cv-v3 .cv-vr-auction-card__free-badge {
  background: var(--cc-green);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  padding: 3px 10px;
  border-radius: 9999px;
  letter-spacing: 0.06em;
}

.cv-v3 .cv-vr-auction-card__no-signup {
  font-size: 12px;
  color: var(--cc-fg-4);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.cv-v3 .cv-vr-auction-card__title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 22px;
  letter-spacing: -0.02em;
  color: var(--cc-fg-1);
  margin: 4px 0 8px;
}

.cv-v3 .cv-vr-auction-card__desc {
  font-size: 14px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  margin: 0;
  margin-bottom: 14px;
  max-width: 540px;
}

.cv-v3 .cv-vr-auction-card__desc-strong {
  color: var(--cc-fg-1);
}

.cv-v3 .cv-vr-auction-card__stats {
  display: grid;
  grid-template-columns: repeat(4, auto);
  gap: 10px 22px;
  margin-top: 6px;
}

.cv-v3 .cv-vr-auction-card__stat {
  display: flex;
  flex-direction: column;
}

.cv-v3 .cv-vr-auction-card__stat-label {
  font-size: 11px;
  color: var(--cc-fg-4);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.cv-v3 .cv-vr-auction-card__stat-value {
  font-size: 14px;
  font-weight: 700;
  color: var(--cc-fg-1);
  margin-top: 2px;
  letter-spacing: -0.01em;
}

.cv-v3 .cv-vr-auction-card__action {
  background: var(--cc-bg-soft);
  border-left: 1px solid var(--cc-border);
  padding: 22px 24px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: stretch;
}

.cv-v3 .cv-vr-auction-card__cta {
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 12px 18px;
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 4px 10px rgba(0, 65, 106, 0.20);
}

.cv-v3 .cv-vr-auction-card__action-fineprint {
  font-size: 11px;
  color: var(--cc-fg-4);
  margin-top: 8px;
  text-align: center;
}


/* --- 12.9 Trust strip (vin-results-styles.jsx L269-282) --- */

.cv-v3 .cv-vr-trust-strip {
  display: block;
  padding: 32px 24px 64px;
  background: var(--cc-bg-soft);
}

.cv-v3 .cv-vr-trust-strip__grid {
  display: grid;
  /* BUG FIX 2026-05-19: minmax(0, 1fr) so the grid can shrink below content width on mobile.
     Default `1fr` is `minmax(auto, 1fr)` which forces tracks at least as wide as content —
     4 columns of trust items don't fit a mobile viewport. */
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 16px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 14px;
  padding: 20px 24px;
}

.cv-v3 .cv-vr-trust-strip__item {
  display: flex;
  align-items: center;
  gap: 12px;
}

.cv-v3 .cv-vr-trust-strip__icon {
  width: 36px;
  height: 36px;
  border-radius: 9px;
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.cv-v3 .cv-vr-trust-strip__label {
  font-size: 13px;
  font-weight: 700;
  color: var(--cc-fg-1);
}

.cv-v3 .cv-vr-trust-strip__sub {
  font-size: 12px;
  color: var(--cc-fg-4);
}


/* --- 12.10 Responsive @media (vin-results.html L23-37) --- */

@media (max-width: 900px) {
  .cv-v3 .cv-vr-cards-grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  }
  .cv-v3 .cv-vr-auction-card {
    grid-template-columns: minmax(0, 1fr);
  }
  .cv-v3 .cv-vr-auction-card__stats {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  }
  /* BUG FIX 2026-05-19: trust strip collapses to 2 columns on mobile so 4 items don't crowd. */
  .cv-v3 .cv-vr-trust-strip__grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 12px;
    padding: 16px 18px;
  }
}

@media (max-width: 640px) {
  /* BUG FIX 2026-05-19 — aggressive mobile scaling for the VIN-results cards section.
     The bundle design targets desktop widths; on narrow phones (< 640px), internal padding,
     ring sizes, and font sizes need to scale down to keep the layout within the viewport.
     Combined with minmax(0, 1fr) on the grid and flex-wrap on the meta row, this prevents
     any single child from forcing horizontal overflow. */

  /* 1-column grid that can shrink below content (minmax(0, 1fr)) */
  .cv-v3 .cv-vr-cards-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 12px;
  }
  .cv-v3 .cv-vr-auction-card__stats {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  }

  /* Reduce section padding to give cards more breathing room */
  .cv-v3 .cv-vr-cards-section {
    padding: 16px 12px 40px;
  }
  .cv-v3 .cv-vr-header-section {
    padding: 24px 12px 12px;
  }

  /* Reduce card internal padding to keep card content slim */
  .cv-v3 .cv-vr-report-card {
    padding: 20px 16px 16px;
  }

  /* Featured card: drop scale (overflow risk), shrink spread-shadow ring */
  .cv-v3 .cv-vr-report-card--featured {
    transform: translateY(-8px);
    box-shadow: 0 12px 28px -8px rgba(0, 65, 106, 0.25), 0 4px 12px -4px rgba(0, 65, 106, 0.15), 0 0 0 2px rgba(0, 65, 106, 0.04);
  }

  /* Featured meta row: wrap when narrow (3 chip items shouldn't force a single line) */
  .cv-v3 .cv-vr-featured-card__meta {
    flex-wrap: wrap;
    row-gap: 6px;
    gap: 10px;
    font-size: 11px;
  }

  /* Buttons: width: 100%, smaller padding, defensive width clamps */
  .cv-v3 .cv-vr-featured-cta,
  .cv-v3 .cv-vr-cta-primary,
  .cv-v3 .cv-vr-cta-secondary {
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
    padding: 12px 14px;
    font-size: 14px;
  }

  /* Title + price: smaller on mobile */
  .cv-v3 .cv-vr-card-price--featured {
    font-size: 30px;
  }
  .cv-v3 .cv-vr-card-price {
    font-size: 24px;
  }

  /* Progress ring: smaller (the bundle's 144px featured ring is too large for narrow phones) */
  .cv-v3 .cv-vr-ring-wrap svg {
    width: 110px;
    height: 110px;
  }

  /* Trust strip: tighter outer padding to maximize inner grid width */
  .cv-v3 .cv-vr-trust-strip {
    padding: 24px 12px 48px;
  }
}


/* --- Section 14: Iter-5 cv-v3 ↔ legacy overrides (REG-13 + REG-15 + WR-05) --- */
/*
 * REG-13 closure: design-system.css L2326-L2336 sets .hero--collapsed
 * padding-top: calc(var(--navbar-h, 64px) + 12px) !important to compensate
 * for the LEGACY navbar's position: fixed (out of normal flow). Under cv-v3
 * (post-37-20 CR-01 server-side body.cv-v3 injection), the cv-navbar is
 * position: sticky (carvins.css L344) — participates in normal flow — so
 * the legacy padding-top double-counts the navbar height and produces a
 * ~76px empty gap above the compact VIN-search bar (operator screenshot
 * 2026-05-18 iter-5 finding).
 *
 * WR-05 (Wave D iter-6) corrective: doubled-class `.cv-v3.cv-v3 .hero--collapsed`
 * has specificity (0, 3, 1) which BEATS the legacy `section.hero.hero--collapsed`
 * (0, 2, 1) regardless of CSS load order. The iter-5 plan claimed `body.cv-v3`
 * gave (0,1,3), but actual specificity for `body.cv-v3 .hero--collapsed` =
 * 1 tag (body) + 2 classes (.cv-v3 + .hero--collapsed) = (0,2,1) — TIED with
 * legacy. The iter-5 form won by source-order accident (carvins.css loads
 * after design-system.css), which would silently regress if load order ever
 * changes (critical CSS extraction, FOUC inlining, build-tool reorders).
 *
 * The doubled-class idiom counts each .cv-v3 reference as a separate class
 * selector in specificity calculation while semantically matching the same
 * element (a class selector matches presence of the class on an element,
 * not multiple occurrences). This is a standard CSS technique for raising
 * specificity without changing markup or semantics.
 *
 * Rule bodies UNCHANGED — only the SELECTOR prefix changed (body.cv-v3 →
 * .cv-v3.cv-v3). padding-top + padding-bottom values + !important all
 * byte-identical to iter-5. padding-left + padding-right left UNTOUCHED —
 * the design-system.css L2331-L2332 (24px desktop) and L2376-L2377 (16px
 * mobile) values stay live (their specificity is unaffected because only
 * padding-top/padding-bottom are being overridden here).
 */

.cv-v3.cv-v3 .hero--collapsed {
  padding-top: 12px !important;
  padding-bottom: 12px !important;
}

@media (max-width: 767px) {
  .cv-v3.cv-v3 .hero--collapsed {
    padding-top: 8px !important;
    padding-bottom: 8px !important;
  }
}


/* --- Section 15: Homepage hero + 3-tab VIN/Plate/Auctions search (Phase 37 Wave E plan 37-27) ---
   Verbatim port of:
   - design-system/v2.2-source/project/ui_kits/marketing/HeroSection.jsx L29-162 (Hero component + TrustStrip + Pill)
   - design-system/v2.2-source/project/ui_kits/marketing/styles.jsx L23-108 (hero/heroInner/h1/heroSub/trustStrip/vinWrap/vinTabs/vinTab/vinBody/vinFoot/vinPrice/sslLine/instaLink mkStyles keys)

   Scoping rules (same as Sections 12/13):
   - Bare cv-hero default-hide rule (specificity 0,1,0) for un-migrated pages.
   - Activation via descendant combinator (.cv-v3 .cv-hero — specificity 0,2,0).
   - Compound selectors deliberately avoided per Wave C 37-12 corrective pattern.
   - Read by index.php hero section after Plan 37-27 ships.

   Notes:
   - The existing .vin-card BEM (Phase 33 hero search card) is PRESERVED inside cv-hero markup;
     this section overrides .vin-card styling under .cv-v3 scope where bundle visual differs.
   - The Auctions sub-toggle (bundle HeroSection.jsx L69-83) is DEFERRED to Wave F per Q4 operator
     decision; this section does NOT include cv-hero__sub-toggle rules.
*/

/* --- 15.1 Bare default-hide for cv-hero component root --- */
.cv-hero { display: none; }

/* --- 15.2 Section wrapper (mkStyles.hero + heroInner) --- */
.cv-v3 .cv-hero {
  display: block;
  background: #fff;
  padding: 32px 24px 64px;
}
.cv-v3 .cv-hero__inner {
  max-width: 920px;
  margin: 0 auto;
  text-align: center;
}

/* --- 15.3 Trust strip above H1 — MIGRATED to §24.1 cv-trust-strip (absorbed D-11; moved, not duplicated) --- */

/* --- 15.4 H1 + sub (mkStyles.h1 + heroSub) --- */
.cv-v3 .cv-hero__h1 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(2.5rem, 5.5vw, 4.75rem);
  letter-spacing: -0.04em;
  line-height: 1.02;
  color: var(--cc-fg-1);
  margin: 20px 0 0;
}
.cv-v3 .cv-hero__brand { color: var(--cc-blue); }
.cv-v3 .cv-hero__sub {
  font-size: 18px;
  line-height: 1.6;
  color: var(--cc-fg-3);
  max-width: 660px;
  margin: 20px auto 28px;
}
.cv-v3 .cv-hero__sub strong { color: var(--cc-fg-1); font-weight: 700; }

/* --- 15.5 .vin-card descendant overrides (.vin-card preserved inside cv-hero) ---
   Bundle: mkStyles.vinWrap / vinTabs / vinTab / vinTabActive / vinBody / vinLeadIcon /
           vinField / vinCount / vinFoot / vinPrice. The CarVins .vin-card BEM markup
           (Phase 33 L333-447) keeps every data-action + id + form name per D-34;
           styling is overridden under .cv-v3 scope to match bundle visual. */
.cv-v3 .vin-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 14px;
  /* Plan 37-27 UAT fix: overflow MUST stay visible so the absolutely-positioned
     #stateListbox (anchored at top:100% of panel-plate) can float past the card's
     bottom edge as an overlay. Phase 33-09 round-5 made this same fix in landing.css;
     my Section 15 regressed it to clip tab corners. Tab corners are now clipped by
     .cv-v3 .vin-card__tab-row's own border-radius below instead. */
  overflow: visible;
  box-shadow: 0 12px 32px rgba(0, 65, 106, 0.12), 0 2px 6px rgba(0, 0, 0, 0.04);
  max-width: 680px;
  margin: 0 auto;
  padding: 0;
}
.cv-v3 .vin-card__tab-row {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  /* Tight grid per bundle vinTabs — explicitly zero out landing.css:1708-1713
     padding/gap/border-bottom that otherwise leak through (only flex/display were
     overridden by the rule above, not the spacing properties). */
  gap: 0;
  padding: 0;
  border-bottom: none;
  background: var(--cc-bg-soft);
  margin-bottom: 0;
  /* Round only the TOP corners to match the card's 14px border-radius. Replaces the
     .vin-card overflow:hidden trick (which broke the state dropdown — see above). */
  border-radius: 14px 14px 0 0;
}
.cv-v3 .vin-card__tab {
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--cc-border);
  /* Square tabs with flat bottoms (bundle vinTab has no border-radius).
     Explicitly zero out landing.css:1730 border-radius:8px which otherwise
     propagates through — my (0,2,0) rule overrides only properties it
     explicitly declares, so border-radius needs its own override. */
  border-radius: 0;
  padding: 14px 16px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  color: var(--cc-fg-4);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  transition: color 180ms, border-color 180ms, background 180ms;
}
.cv-v3 .vin-card__tab[aria-selected="true"] {
  background: #fff;
  color: var(--cc-navy);
  border-bottom: 2px solid var(--cc-navy);
}
.cv-v3 .vin-card__input-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  background: #fff;
}
/* [hidden] carve-out: under .cv-v3 the rule above (0,2,0) is loaded after landing.css's
   own .vin-card__input-row[hidden]{display:none} (0,2,0) and wins via source order, so
   inactive tab panels never hide. (0,3,0) specificity restores the tab switcher. */
.cv-v3 .vin-card__input-row[hidden] {
  display: none;
}
.cv-v3 .vin-card__leading-icon {
  width: 34px;
  height: 34px;
  border-radius: 8px;
  background: var(--cc-navy-bg);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--cc-navy);
  flex-shrink: 0;
}
.cv-v3 .vin-card__input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: var(--cc-font-mono);
  font-size: 16px;
  letter-spacing: 0.05em;
  color: var(--cc-fg-1);
  min-width: 100px;
  padding: 0;
  text-transform: uppercase;
}
.cv-v3 .vin-card__input::placeholder {
  color: var(--cc-fg-5);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.cv-v3 .vin-card__counter {
  color: var(--cc-fg-4);
  font-size: 13px;
  font-family: var(--cc-font-mono);
  flex-shrink: 0;
}
.cv-v3 .vin-card__state-picker {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 8px;
  padding: 6px 10px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 13px;
  color: var(--cc-navy);
  cursor: pointer;
  flex-shrink: 0;
}
.cv-v3 .vin-card__state-picker:hover {
  background: var(--cc-navy-bg);
  border-color: var(--cc-navy-10);
}
.cv-v3 .vin-card__state-listbox {
  position: absolute;
  /* Explicit anchor: under the state chip on the right edge of panel-plate.
     Don't rely on landing.css for top/right since its 'right: var(--space-4)'
     uses a token that may not be in scope. */
  top: 100%;
  right: 16px;
  z-index: 30;
  margin: 6px 0 0;
  max-height: 260px;
  overflow-y: auto;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  box-shadow: 0 12px 32px rgba(0, 65, 106, 0.18);
  list-style: none;
  padding: 6px;
  width: 240px;
  font-family: var(--cc-font-body);
  font-size: 13px;
}
.cv-v3 .vin-card__state-listbox li {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border-radius: 6px;
  cursor: pointer;
  color: var(--cc-fg-2);
}
.cv-v3 .vin-card__state-listbox li:hover,
.cv-v3 .vin-card__state-listbox li[aria-selected="true"] {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
}
.cv-v3 .vin-card__state-listbox-code {
  font-weight: 700;
  color: var(--cc-navy);
  min-width: 28px;
}
.cv-v3 .vin-card__state-listbox-name {
  color: var(--cc-fg-3);
}
.cv-v3 .vin-card__footer-strip {
  display: flex;
  /* Explicit row + width:auto on the CTA below override landing.css:1880-1887's
     @media (max-width:767px) rule that forces flex-direction:column +
     .vin-card__cta{width:100%}. Bundle vinFoot stays horizontal across desktop
     and tablet; my own @media (max-width:640px) below handles the true mobile
     stack. */
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  padding: 12px 16px;
  background: var(--cc-bg-soft);
  border-top: 1px solid var(--cc-border);
  gap: 12px;
  flex-wrap: wrap;
}
.cv-v3 .vin-card__footer-copy {
  font-family: var(--cc-font-body);
  font-size: 13px;
  color: var(--cc-fg-3);
  line-height: 1.3;
  text-align: left;
  flex: 1 1 auto;
  min-width: 0;
}
.cv-v3 .vin-card__footer-copy strong {
  color: var(--cc-fg-1);
  font-weight: 700;
}
.cv-v3 .vin-card__footer-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.cv-v3 .vin-card__cta {
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 10px 18px;
  border-radius: 9px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  /* width:auto pins compact CTA — overrides landing.css:1886 .vin-card__cta{width:100%}
     under @media (max-width:767px). Bundle btnPrimaryLg is intrinsic-width. */
  width: auto;
  gap: 6px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 4px rgba(0, 65, 106, 0.25);
  transition: transform 120ms, box-shadow 180ms;
}
.cv-v3 .vin-card__cta:hover {
  transform: translateY(-1px);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 4px 10px rgba(0, 65, 106, 0.32);
}
.cv-v3 .vin-card__cta:active {
  transform: translateY(0);
}
.cv-v3 .vin-card__feedback {
  font-family: var(--cc-font-body);
  font-size: 13px;
  color: var(--cc-fg-3);
  padding: 0 16px 12px;
  text-align: left;
}
.cv-v3 .vin-card__feedback:empty {
  display: none;
}

/* --- 15.6 cv-hero__view-sample anchor pill (HeroSection.jsx L111-140 inline link) --- */
.cv-v3 .cv-hero__view-sample {
  display: flex;
  justify-content: center;
  margin-top: 14px;
}
.cv-v3 .cv-hero__view-sample-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 18px;
  background: transparent;
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  color: var(--cc-navy);
  font-family: var(--cc-font-body);
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
  box-shadow: 0 1px 2px rgba(0, 65, 106, 0.04);
  transition: background 180ms, border-color 180ms;
  cursor: pointer;
}
.cv-v3 .cv-hero__view-sample-link:hover {
  background: var(--cc-navy-bg);
  border-color: var(--cc-navy-10);
}
.cv-v3 .cv-hero__view-sample-link svg {
  display: inline-block;
  vertical-align: middle;
}

/* --- 15.7 SSL line + Instagram link (mkStyles.sslLine + instaLink) --- */
.cv-v3 .cv-hero__ssl-line {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 500;
  color: var(--cc-fg-4);
  margin-top: 18px;
  justify-content: center;
  flex-wrap: wrap;
}
.cv-v3 .cv-hero__ssl-line svg.cv-hero__ssl-lock { color: var(--cc-green); }
.cv-v3 .cv-hero__ssl-line-sep { color: var(--cc-fg-5); }
.cv-v3 .cv-hero__ssl-line img {
  display: inline-block;
  vertical-align: middle;
  height: 18px;
}
.cv-v3 .cv-hero__instagram {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 28px;
  font-size: 13px;
  color: var(--cc-fg-4);
  text-decoration: none;
  transition: color 180ms;
}
.cv-v3 .cv-hero__instagram:hover { color: var(--cc-navy); }
.cv-v3 .cv-hero__instagram svg {
  display: inline-block;
  vertical-align: middle;
}

/* --- 15.8 Responsive — below 1024px shrink hero padding; below 640px collapse VIN card --- */
@media (max-width: 1024px) {
  .cv-v3 .cv-hero { padding: 24px 16px 48px; }
}
@media (max-width: 640px) {
  .cv-v3 .cv-hero { padding: 20px 12px 40px; }
  .cv-v3 .cv-hero__h1 {
    font-size: clamp(2rem, 8vw, 2.5rem);
    line-height: 1.1;
  }
  .cv-v3 .cv-hero__sub { font-size: 16px; }
  .cv-v3 .vin-card__input-row {
    padding: 12px;
    gap: 8px;
  }
  .cv-v3 .vin-card__footer-strip {
    padding: 10px 12px;
    flex-direction: column;
    align-items: stretch;
  }
  .cv-v3 .vin-card__footer-copy {
    text-align: center;
  }
  .cv-v3 .vin-card__footer-actions {
    justify-content: center;
  }
  .cv-v3 .cv-hero__ssl-line {
    font-size: 12px;
    gap: 6px;
  }
}

/* --- Section 16: Homepage pricing carousel (Phase 37 Wave E plan 37-28 iter 3 — D-52) ---
   Verbatim port of:
   - design-system/v2.2-source/project/ui_kits/marketing/PricingSection.jsx L37-198 (component layout + state machine)
   - design-system/v2.2-source/project/ui_kits/marketing/styles.jsx L162-242 (mkStyles.pricingPills/pricingPill/pricingPillActive/carouselWrap/carouselTrack/carouselSlot/carouselNav/carouselDots/priceCard/priceCardActive/priceCardDimmed/priceCardFeatured/priceTag/priceName/priceBig/bullets/bullet/qtyRow/qtyBtn/priceFoot keys)

   D-52 mapping applied at PHP layer: tabs labeled Most Popular / Credits /
   Membership (NOT Personal/Pro/Power from the dead D-51).

   Scoping rules (same as Sections 12/13/15):
   - Bare cv-pricing default-hide rule (specificity 0,1,0) for un-migrated pages.
   - Activation via descendant combinator (.cv-v3 .cv-pricing-* — specificity 0,2,0).
   - Compound selectors deliberately avoided per Wave C 37-12 corrective pattern.
   - Read by index.php cv-pricing section after Plan 37-28 ships.

   CENTERPIECE UX (must NOT be skipped — see 37-28-PLAN.md must_haves):
   - Dim card = bundle priceCardDimmed: scale(0.97) + opacity 1 (NOT iter-2's
     washed-out scale(0.92) + opacity 0.55 — that was D-51-era guesswork that
     operator UAT rejected as "looks broken / washed out").
   - Active card = bundle priceCardActive: scale(1.04) + 2px navy border +
     dramatic shadow.
   - Featured card = bundle priceCardFeatured: 2px navy border + drop shadow +
     translateY(-4px) (applies even when not the active card; combines
     additively with priceCardActive when the featured card IS active).
   - CheckIcon = green-filled 18×18 circle containing literal ✓ (NOT
     icon('check') stroke).
   - Tag tones restricted to navy + blue ONLY (NO --green).
   - Trustpilot review block on every card (NEVER empty placeholder).
*/

/* --- 16.1 Bare default-hide for cv-pricing component roots --- */
.cv-pricing,
.cv-pricing-carousel,
.cv-pricing-card { display: none; }

/* --- 16.2 Section wrapper (mkStyles.section + sectionInner) --- */
.cv-v3 .cv-pricing {
  display: block;
  padding: 72px 24px;
  background: #fff;
}
.cv-v3 .cv-pricing__inner {
  max-width: 1200px;
  margin: 0 auto;
}
.cv-v3 .cv-pricing__head {
  text-align: center;
  margin-bottom: 20px;
}
.cv-v3 .cv-pricing__eyebrow {
  display: inline-block;
  font-family: var(--cc-font-body);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--cc-navy);
  margin-bottom: 10px;
}
.cv-v3 .cv-pricing__h2 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(1.875rem, 3vw, 2.75rem);
  letter-spacing: -0.03em;
  line-height: 1.15;
  color: var(--cc-fg-1);
  margin: 0;
}

/* --- 16.3 3-tab pills (mkStyles.pricingPills + pricingPill + pricingPillActive) --- */
.cv-v3 .cv-pricing__pills {
  display: flex;
  gap: 8px;
  justify-content: center;
  margin: 24px auto 32px;
  flex-wrap: wrap;
  background: var(--cc-bg-soft);
  padding: 6px;
  border-radius: 9999px;
  width: fit-content;
}
.cv-v3 .cv-pricing__pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 18px;
  background: transparent;
  border: none;
  border-radius: 9999px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  color: var(--cc-fg-3);
  transition: all 180ms;
}
.cv-v3 .cv-pricing__pill:hover {
  color: var(--cc-navy);
}
.cv-v3 .cv-pricing__pill--active {
  background: #fff;
  color: var(--cc-navy);
  box-shadow: 0 1px 3px rgba(0,65,106,0.10), 0 1px 2px rgba(0,0,0,0.04);
}

/* --- 16.4 Carousel track (mkStyles.carouselWrap + carouselTrack + carouselSlot) --- */
.cv-v3 .cv-pricing-carousel {
  display: block;
  position: relative;
  margin: 0 -24px;
  padding: 30px 0 8px;
}
.cv-v3 .cv-pricing-carousel[hidden] { display: none; }
.cv-v3 .cv-pricing-carousel__track {
  display: flex;
  gap: 0;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  padding: 20px 0;
  scrollbar-width: none;
  -ms-overflow-style: none;
  justify-content: safe center;
}
.cv-v3 .cv-pricing-carousel__track::-webkit-scrollbar { display: none; }
.cv-v3 .cv-pricing-carousel__slot {
  flex: 0 0 300px;
  padding: 0 10px;
  scroll-snap-align: center;
  cursor: pointer;
}

/* --- 16.5 Card base = bundle priceCardDimmed (D-52 CORRECTION over iter-2) ---
   Bundle's priceCardDimmed (styles.jsx L217-221) = scale(0.97) + opacity 1 +
   cubic-bezier transition. NO opacity reduction — operator UAT on iter 2
   explicitly called out the washed-out look as "broken". */
.cv-v3 .cv-pricing-card {
  display: flex;
  flex-direction: column;
  position: relative;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  padding: 24px;
  text-align: left;
  box-shadow: 0 1px 3px rgba(0,65,106,0.06);
  cursor: pointer;
  height: 100%;
  /* Bundle priceCardDimmed — subtle scale-only diff, FULL opacity */
  transform: scale(0.97);
  opacity: 1;
  transition: all 280ms cubic-bezier(0.16, 1, 0.3, 1);
}

/* --- 16.5a Active card state = bundle priceCardActive (styles.jsx L211-216) --- */
.cv-v3 .cv-pricing-card--active {
  transform: scale(1.04);
  border: 2px solid var(--cc-navy);
  box-shadow: 0 24px 56px rgba(0,65,106,0.18), 0 6px 16px rgba(0,0,0,0.08);
  z-index: 2;
}

/* --- 16.5b Featured static highlight = bundle priceCardFeatured (styles.jsx L206-210)
   Applies even when NOT active so a non-centered featured card still pops.
   When BOTH featured AND active, --active wins on scale + shadow (compound rule below). */
.cv-v3 .cv-pricing-card--featured {
  border: 2px solid var(--cc-navy);
  box-shadow: 0 16px 40px rgba(0,65,106,0.14), 0 4px 12px rgba(0,0,0,0.06);
  transform: scale(0.97) translateY(-4px);
}
.cv-v3 .cv-pricing-card--featured.cv-pricing-card--active {
  transform: scale(1.04) translateY(-2px);
  box-shadow: 0 32px 64px rgba(0,65,106,0.22), 0 8px 20px rgba(0,0,0,0.10);
  z-index: 3;
}

/* --- 16.5c Hover-lift reserved for ACTIVE card only --- */
.cv-v3 .cv-pricing-card--active:hover {
  transform: scale(1.04) translateY(-3px);
  box-shadow: 0 28px 60px rgba(0,65,106,0.22);
}

/* --- 16.5d Tag tone palette: navy + blue ONLY (bundle restraint — NO green) --- */
.cv-v3 .cv-pricing-card__tag {
  position: absolute;
  top: -12px;
  left: 50%;
  transform: translateX(-50%);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  padding: 5px 14px;
  border-radius: 9999px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
}
.cv-v3 .cv-pricing-card__tag--navy { background: var(--cc-navy); }
.cv-v3 .cv-pricing-card__tag--blue { background: var(--cc-blue); }
/* NO --green tag tone — bundle restraint per D-52 */

/* --- 16.5e Card body (mkStyles.priceName + priceBig + bullets) --- */
.cv-v3 .cv-pricing-card__name {
  font-family: var(--cc-font-display);
  font-size: 20px;
  font-weight: 700;
  color: var(--cc-fg-1);
  margin: 0 0 4px;
}
.cv-v3 .cv-pricing-card__price-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-top: 6px;
}
.cv-v3 .cv-pricing-card__price-big {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 48px;
  letter-spacing: -0.04em;
  color: var(--cc-navy);
  line-height: 1;
}
.cv-v3 .cv-pricing-card__price-unit {
  color: var(--cc-fg-3);
  font-size: 14px;
}
.cv-v3 .cv-pricing-card__per {
  color: var(--cc-fg-3);
  font-size: 13px;
  margin-top: 4px;
}

/* --- 16.5f Adjustable qty row (bundle mkStyles.qtyRow + qtyBtn — Single Report only) --- */
.cv-v3 .cv-pricing-card__qty-row {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 12px;
  background: var(--cc-bg-soft);
  border-radius: 8px;
  padding: 6px 12px;
  width: fit-content;
}
.cv-v3 .cv-pricing-card__qty-btn {
  width: 26px;
  height: 26px;
  border: 1px solid var(--cc-border);
  background: #fff;
  border-radius: 6px;
  cursor: pointer;
  font-size: 16px;
  font-weight: 600;
  color: var(--cc-navy);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.cv-v3 .cv-pricing-card__qty-value {
  font-weight: 600;
  min-width: 20px;
  text-align: center;
}

.cv-v3 .cv-pricing-card__bullets {
  list-style: none;
  margin: 16px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex: 1;
}
.cv-v3 .cv-pricing-card__bullet {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 14px;
  color: var(--cc-fg-2);
}

/* --- 16.5g CheckIcon: green-filled circle (verbatim port of PricingSection.jsx L201-210).
   Markup MUST emit `<span class="cv-pricing-card__check">&#x2713;</span>` — NOT `icon('check', N)`
   which renders a generic lucide stroke and loses the bundle's green-circle visual signature. */
.cv-v3 .cv-pricing-card__check {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 9999px;
  background: var(--cc-green);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  line-height: 1;
  flex-shrink: 0;
}

/* --- 16.5h CTA variants — secondary outline (default) + primary fill (active card cascade) ---
   Default state = secondary outline; the cascade flips to primary fill ONLY when the parent
   `.cv-pricing-card--active` class is present. Featured + active = electric-blue primary. */
.cv-v3 .cv-pricing-card__cta {
  display: block;
  width: 100%;
  background: #fff;
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy);
  padding: 12px 18px;
  border-radius: 10px;
  font-weight: 600;
  font-family: var(--cc-font-body);
  font-size: 14px;
  cursor: pointer;
  text-align: center;
  text-decoration: none;
  margin-top: 16px;
  transition: background 180ms, color 180ms, border-color 180ms;
}
.cv-v3 .cv-pricing-card__cta:hover {
  background: rgba(0,65,106,0.06);
}
.cv-v3 .cv-pricing-card--active .cv-pricing-card__cta {
  background: var(--cc-navy);
  color: #fff;
  border-color: var(--cc-navy);
}
.cv-v3 .cv-pricing-card--active .cv-pricing-card__cta:hover {
  background: #00355a;
}
.cv-v3 .cv-pricing-card--featured.cv-pricing-card--active .cv-pricing-card__cta {
  background: var(--cc-blue);
  border-color: var(--cc-blue);
}
.cv-v3 .cv-pricing-card--featured.cv-pricing-card--active .cv-pricing-card__cta:hover {
  background: #0052cc;
}

/* --- 16.5i Card footer (mkStyles.priceFoot) --- */
.cv-v3 .cv-pricing-card__foot {
  text-align: center;
  font-size: 12px;
  color: var(--cc-fg-3);
  margin-top: 10px;
}

/* --- 16.6 Trustpilot review block (bundle PricingSection.jsx L162-178) ---
   D-52 CORRECTION over iter-2: this block ALWAYS renders when the card has a
   matching tier_testimonials row; the iter-2 `:empty` hide rule is gone because
   the seed delivers 9 reviews and the cv-pricing-card__review markup only
   emits at all when $testimonial !== null. */
.cv-v3 .cv-pricing-card__review {
  margin-top: 14px;
  padding: 12px 12px 10px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 10px;
}
.cv-v3 .cv-pricing-card__review-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 4px;
}
.cv-v3 .cv-pricing-card__review-head-left {
  display: flex;
  align-items: center;
  gap: 6px;
}
.cv-v3 .cv-pricing-card__review-trustpilot {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
}
.cv-v3 .cv-pricing-card__review-brand {
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-2);
  letter-spacing: 0.02em;
}
.cv-v3 .cv-pricing-card__review-stars {
  color: #00B67A;  /* Trustpilot brand green — bundle uses this exact hex */
  font-size: 11px;
  letter-spacing: 1px;
}
.cv-v3 .cv-pricing-card__review-name {
  font-size: 10px;
  color: var(--cc-fg-4);
  font-weight: 600;
}
.cv-v3 .cv-pricing-card__review-quote {
  font-size: 12px;
  color: var(--cc-fg-3);
  line-height: 1.4;
  font-style: italic;
  margin: 0;
}

/* --- 16.7 Carousel chevrons + dot pagination (mkStyles.carouselNav + carouselDots) --- */
.cv-v3 .cv-pricing-carousel__nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 5;
  width: 44px;
  height: 44px;
  border-radius: 9999px;
  background: #fff;
  border: 1px solid var(--cc-border);
  color: var(--cc-navy);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 12px rgba(0,65,106,0.10);
  padding: 0;
  transition: background 180ms;
}
.cv-v3 .cv-pricing-carousel__nav:hover {
  background: var(--cc-bg-soft);
}
.cv-v3 .cv-pricing-carousel__nav--prev { left: 8px; }
.cv-v3 .cv-pricing-carousel__nav--next { right: 8px; }
.cv-v3 .cv-pricing-carousel__dots {
  display: flex;
  gap: 8px;
  justify-content: center;
  margin-top: 4px;
}
.cv-v3 .cv-pricing-carousel__dot {
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  background: var(--cc-border);
  border: none;
  cursor: pointer;
  padding: 0;
  transition: all 180ms;
}
.cv-v3 .cv-pricing-carousel__dot--active {
  background: var(--cc-navy);
  width: 24px;
}

/* IN-05 (37-REVIEW): empty-state for tabs with zero rows. Replaces the
   empty carousel + dots scaffolding when $__tiers is empty (typically the
   Most Popular tab on a fresh install with no show_in_popular flags set).
   Centered, dimmed, matches cv-pricing card padding/radius for visual
   continuity. No interactive controls — just an icon + explanatory copy. */
.cv-v3 .cv-pricing-carousel__empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 64px 24px;
  background: var(--cc-bg-soft, #f7f8fa);
  border: 1px dashed var(--cc-border);
  border-radius: 16px;
  color: var(--cc-text-muted, #5b6271);
  text-align: center;
  min-height: 200px;
}
.cv-v3 .cv-pricing-carousel__empty svg { opacity: 0.5; }
.cv-v3 .cv-pricing-carousel__empty-copy {
  margin: 0;
  font-size: 15px;
  line-height: 1.5;
  max-width: 360px;
}

/* --- 16.8 Responsive --- */
@media (max-width: 900px) {
  .cv-v3 .cv-pricing-carousel__slot { flex-basis: 280px; }
}
@media (max-width: 640px) {
  .cv-v3 .cv-pricing { padding: 48px 16px; }
  .cv-v3 .cv-pricing-carousel__nav { width: 36px; height: 36px; }
  .cv-v3 .cv-pricing-card { padding: 20px; }
  .cv-v3 .cv-pricing-card__price-big { font-size: 40px; }
  /* IN-04 (37-REVIEW iter 3): tighten the empty-state padding + min-height
     on narrow viewports so it matches the surrounding compact pricing styles.
     Defense-in-depth polish — message + icon still fit at 640px even without
     the override, but the 64px vertical padding looked oversized. */
  .cv-v3 .cv-pricing-carousel__empty { padding: 40px 16px; min-height: 160px; }
}

/* --- Section 17: Homepage comparison table (Phase 37 Wave E plan 37-29) ---
   Verbatim port of:
   - design-system/v2.2-source/project/ui_kits/marketing/ComparisonSection.jsx L3-67
   - design-system/v2.2-source/project/ui_kits/marketing/styles.jsx L244-260 (compareWrap + compareTable + compHead + compRow + compRowFeatured + compCell + compCellFeatured + compareFoot mkStyles keys)
   Static (no JS); legacy comparisonRollup + data-comparison-row + save-chips REMOVED per researcher rec.
   Scoping rules (same as Sections 15/16):
   - Bare cv-compare default-hide rule.
   - Activation via descendant combinator (.cv-v3 .cv-compare).
   - Compound selectors deliberately avoided per Wave C 37-12 corrective pattern.
*/

/* --- 17.1 Bare default-hide for cv-compare component root --- */
.cv-compare { display: none; }

/* --- 17.2 Section wrapper (navy-tinted background per ComparisonSection.jsx L5) --- */
.cv-v3 .cv-compare {
  display: block;
  padding: 72px 24px;
  background: var(--cc-navy-bg);
}
.cv-v3 .cv-compare__inner {
  max-width: 980px;
  margin: 0 auto;
}
.cv-v3 .cv-compare__head {
  text-align: center;
  margin-bottom: 28px;
}
.cv-v3 .cv-compare__eyebrow {
  display: inline-block;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  font-weight: 600;
  margin-bottom: 8px;
}
.cv-v3 .cv-compare__h2 {
  font-family: var(--cc-font-display);
  font-size: 40px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.02em;
  margin: 0 0 12px;
}
.cv-v3 .cv-compare__lead {
  font-size: 17px;
  line-height: 1.55;
  color: var(--cc-fg-2);
  max-width: 720px;
  margin: 0 auto;
}

/* --- 17.3 Compare wrap card (mkStyles.compareWrap) --- */
.cv-v3 .cv-compare__wrap {
  background: #fff;
  border-radius: 16px;
  padding: 24px;
  box-shadow: 0 6px 24px rgba(0,65,106,0.08);
  border: 1px solid var(--cc-border);
}

/* --- 17.4 Table (mkStyles.compareTable + compHead + compRow + compCell) --- */
.cv-v3 .cv-compare__table {
  width: 100%;
  border-collapse: collapse;
}
.cv-v3 .cv-compare__head-cell {
  text-align: left;
  padding: 12px 16px;
  font-size: 12px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  font-weight: 600;
  border-bottom: 1px solid var(--cc-border);
}
.cv-v3 .cv-compare__row {
  border-bottom: 1px solid var(--cc-border);
}
.cv-v3 .cv-compare__cell {
  padding: 16px;
  font-size: 15px;
  color: var(--cc-fg-2);
}
.cv-v3 .cv-compare__row--featured {
  border-top: 2px solid var(--cc-green);
  border-bottom: 2px solid var(--cc-green);
  background: rgba(0,135,83,0.04);
}
.cv-v3 .cv-compare__cell--featured {
  padding: 18px 16px;
  font-size: 16px;
  font-weight: 700;
  color: var(--cc-navy);
}
.cv-v3 .cv-compare__cell--featured-green { color: var(--cc-green); }

/* --- 17.5 Footer tag pills (mkStyles.compareFoot + Tag green + Tag navy) --- */
.cv-v3 .cv-compare__foot {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: center;
  margin-top: 24px;
}
.cv-v3 .cv-compare__tag {
  display: inline-block;
  padding: 6px 12px;
  border-radius: 9999px;
  font-size: 13px;
  font-weight: 600;
  border: 1px solid transparent;
}
.cv-v3 .cv-compare__tag--green {
  background: #F0FDF4;
  color: var(--cc-green);
  border-color: rgba(0,135,83,0.20);
}
.cv-v3 .cv-compare__tag--navy {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border-color: var(--cc-navy-10);
}

/* --- 17.6 Responsive --- */
@media (max-width: 768px) {
  .cv-v3 .cv-compare { padding: 48px 16px; }
  .cv-v3 .cv-compare__h2 { font-size: 28px; }
  .cv-v3 .cv-compare__lead { font-size: 15px; }
  .cv-v3 .cv-compare__cell,
  .cv-v3 .cv-compare__head-cell { padding: 10px 8px; font-size: 13px; }
  .cv-v3 .cv-compare__cell--featured { font-size: 14px; }
}

/* --- Section 18: Homepage features grid + ReportPreview (Phase 37 Wave E plan 37-30) ---
   Verbatim port of:
   - design-system/v2.2-source/project/ui_kits/marketing/FeaturesSection.jsx L1-555
   - design-system/v2.2-source/project/ui_kits/marketing/styles.jsx L254-298
     (featGrid12 + featSplitWrap + featCard + featVisual + featBadge + featBody +
      featTagline + featTitle + featDesc + featBullets + featBullet + featBulletDot)
   Q6 (operator 2026-05-20): ReportPreview folded into this section as sibling block.
   Largest section in Wave E (~600 LOC); plan-checker allows latitude per researcher rec.
   Scoping rules (same as Sections 15/16/17):
   - Bare default-hide for cv-feat + cv-feat-card + cv-report-preview roots.
   - Activation via descendant combinator under .cv-v3.
   - Compound selectors deliberately avoided per Wave C 37-12 corrective pattern.
*/

/* --- 18.1 Bare default-hide --- */
.cv-feat, .cv-feat-card, .cv-report-preview { display: none; }

/* --- 18.2 Section wrapper + head --- */
.cv-v3 .cv-feat {
  display: block;
  padding: 72px 24px;
  background: #fff;
}
.cv-v3 .cv-feat__inner {
  max-width: 1200px;
  margin: 0 auto;
}
.cv-v3 .cv-feat__head {
  text-align: center;
  margin-bottom: 36px;
}
.cv-v3 .cv-feat__eyebrow {
  display: inline-block;
  font-family: var(--cc-font-body);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--cc-navy);
  margin-bottom: 10px;
}
.cv-v3 .cv-feat__h2 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(1.875rem, 3vw, 2.75rem);
  letter-spacing: -0.03em;
  line-height: 1.15;
  color: var(--cc-fg-1);
  margin: 0 0 12px;
}
.cv-v3 .cv-feat__lead {
  font-size: 18px;
  color: var(--cc-fg-3);
  margin: 12px 0 0;
}

/* --- 18.3 12-col grid (mkStyles.featGrid12) --- */
.cv-v3 .cv-feat__grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 16px;
}

/* --- 18.4 Card root (mkStyles.featCard) --- */
.cv-v3 .cv-feat-card {
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(0,65,106,0.06);
  position: relative;
  transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 200ms;
}
.cv-v3 .cv-feat-card:hover {
  box-shadow: 0 6px 24px rgba(0,65,106,0.10);
  transform: translateY(-2px);
}
.cv-v3 .cv-feat-card--span-4 { grid-column: span 4; }
.cv-v3 .cv-feat-card--span-12 { grid-column: span 12; }

/* --- 18.5 Card visual region (mkStyles.featVisual) --- */
.cv-v3 .cv-feat-card__visual {
  position: relative;
  padding: 20px;
  min-height: 130px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-bottom: 1px solid var(--cc-border);
  background: var(--cc-bg-soft);
}
.cv-v3 .cv-feat-card--accent-blue .cv-feat-card__visual { background: #EFF6FF; }
.cv-v3 .cv-feat-card--accent-green .cv-feat-card__visual { background: #F0FDF4; }
.cv-v3 .cv-feat-card--accent-navy .cv-feat-card__visual { background: var(--cc-navy-bg); }

/* --- 18.6 Card badge (mkStyles.featBadge) --- */
.cv-v3 .cv-feat-card__badge {
  position: absolute;
  top: 10px;
  right: 10px;
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 9999px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  background: var(--cc-navy);
  z-index: 2;
}
.cv-v3 .cv-feat-card--accent-blue .cv-feat-card__badge { background: var(--cc-blue); }
.cv-v3 .cv-feat-card--accent-green .cv-feat-card__badge { background: var(--cc-green); }

/* --- 18.7 Card body elements (mkStyles.featBody/featTagline/featTitle/featDesc/featBullets/featBullet/featBulletDot) --- */
.cv-v3 .cv-feat-card__body {
  padding: 18px 20px 20px;
  flex: 1;
  display: flex;
  flex-direction: column;
}
.cv-v3 .cv-feat-card__tagline {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--cc-navy);
  margin-bottom: 6px;
}
.cv-v3 .cv-feat-card--accent-blue .cv-feat-card__tagline { color: var(--cc-blue); }
.cv-v3 .cv-feat-card--accent-green .cv-feat-card__tagline { color: var(--cc-green); }
.cv-v3 .cv-feat-card__title {
  font-family: var(--cc-font-display);
  font-size: 18px;
  font-weight: 700;
  margin: 0 0 6px;
  letter-spacing: -0.015em;
  color: var(--cc-navy);
}
.cv-v3 .cv-feat-card--accent-blue .cv-feat-card__title { color: var(--cc-blue); }
.cv-v3 .cv-feat-card--accent-green .cv-feat-card__title { color: var(--cc-green); }
.cv-v3 .cv-feat-card__desc {
  font-size: 13.5px;
  color: var(--cc-fg-3);
  line-height: 1.55;
  margin: 0 0 12px;
}
.cv-v3 .cv-feat-card__bullets {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 5px;
  margin-top: auto;
}
.cv-v3 .cv-feat-card__bullet {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12.5px;
  color: var(--cc-fg-2);
  font-weight: 500;
}
.cv-v3 .cv-feat-card__bullet-dot {
  width: 5px;
  height: 5px;
  border-radius: 9999px;
  flex-shrink: 0;
  background: var(--cc-navy);
}
.cv-v3 .cv-feat-card--accent-blue .cv-feat-card__bullet-dot { background: var(--cc-blue); }
.cv-v3 .cv-feat-card--accent-green .cv-feat-card__bullet-dot { background: var(--cc-green); }

/* --- 18.8 Split-wrap layout for span-12 cards (mkStyles.featSplitWrap) --- */
.cv-v3 .cv-feat-card--split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: stretch;
}
.cv-v3 .cv-feat-card--split .cv-feat-card__body {
  padding: 28px;
}
.cv-v3 .cv-feat-card--split .cv-feat-card__title {
  font-size: 26px;
}
.cv-v3 .cv-feat-card--split .cv-feat-card__desc {
  font-size: 15px;
}
.cv-v3 .cv-feat-card--split .cv-feat-card__bullet {
  font-size: 13.5px;
}
.cv-v3 .cv-feat-card--split .cv-feat-card__visual {
  min-height: 260px;
  border-bottom: none;
  border-left: 1px solid var(--cc-border);
}

/* --- 18.9 Shared mini-visual scaffolding (visualWrap / visualField / visualPill) --- */
.cv-v3 .cv-feat-vis {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  width: 100%;
}
.cv-v3 .cv-feat-vis__field {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 12px;
  border-radius: 8px;
  width: 100%;
  background: #fff;
  border: 1px solid var(--cc-border);
}
.cv-v3 .cv-feat-vis__pill {
  display: inline-block;
  padding: 4px 10px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 600;
  font-family: var(--cc-font-body);
}
.cv-v3 .cv-feat-vis__pill:has(svg) {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.cv-v3 .cv-feat-vis__pill--solid { color: #fff; }
.cv-v3 .cv-feat-card--accent-navy .cv-feat-vis__pill--solid { background: var(--cc-navy); }
.cv-v3 .cv-feat-card--accent-blue .cv-feat-vis__pill--solid { background: var(--cc-blue); }
.cv-v3 .cv-feat-card--accent-green .cv-feat-vis__pill--solid { background: var(--cc-green); }
.cv-v3 .cv-feat-vis__pill--outline {
  background: #fff;
  border: 1px solid var(--cc-border);
}
.cv-v3 .cv-feat-card--accent-navy .cv-feat-vis__pill--outline { color: var(--cc-navy); border-color: rgba(0,65,106,0.25); }
.cv-v3 .cv-feat-card--accent-blue .cv-feat-vis__pill--outline { color: var(--cc-blue); border-color: rgba(0,102,179,0.25); }
.cv-v3 .cv-feat-card--accent-green .cv-feat-vis__pill--outline { color: var(--cc-green); border-color: rgba(0,135,83,0.25); }
.cv-v3 .cv-feat-vis__pill-row {
  display: flex;
  gap: 6px;
  align-items: center;
  flex-wrap: wrap;
  justify-content: center;
}

/* --- 18.9.1 VinVisual --- */
.cv-v3 .cv-feat-vis-vin__value {
  font-family: var(--cc-font-mono);
  font-size: 13px;
  color: var(--cc-fg-2);
  letter-spacing: 0.06em;
}
.cv-v3 .cv-feat-vis-vin__counter {
  font-size: 11px;
  color: var(--cc-fg-4);
  font-family: var(--cc-font-mono);
}

/* --- 18.9.2 PlateVisual --- */
.cv-v3 .cv-feat-vis-plate__plate {
  background: #fff;
  border: 2px solid var(--cc-blue);
  border-radius: 8px;
  padding: 10px 14px;
  font-family: var(--cc-font-mono);
  font-weight: 700;
  font-size: 18px;
  color: var(--cc-fg-1);
  letter-spacing: 0.1em;
}
.cv-v3 .cv-feat-vis-plate__state {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 8px;
  padding: 10px 12px;
  font-size: 12px;
  color: var(--cc-fg-3);
  font-weight: 600;
}

/* --- 18.9.3 ScanVisual --- */
.cv-v3 .cv-feat-vis-scan__dashboard {
  position: relative;
  width: 140px;
  height: 70px;
  background: #fff;
  border-radius: 6px;
  border: 1px solid var(--cc-border);
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}
.cv-v3 .cv-feat-vis-scan__vin {
  font-family: var(--cc-font-mono);
  font-size: 11px;
  color: var(--cc-fg-3);
  letter-spacing: 0.06em;
}
.cv-v3 .cv-feat-vis-scan__corner {
  position: absolute;
  width: 12px;
  height: 12px;
  border: 2px solid var(--cc-green);
}
.cv-v3 .cv-feat-vis-scan__corner--tl { top: 4px; left: 4px; border-right: none; border-bottom: none; }
.cv-v3 .cv-feat-vis-scan__corner--tr { top: 4px; right: 4px; border-left: none; border-bottom: none; }
.cv-v3 .cv-feat-vis-scan__corner--bl { bottom: 4px; left: 4px; border-right: none; border-top: none; }
.cv-v3 .cv-feat-vis-scan__corner--br { bottom: 4px; right: 4px; border-left: none; border-top: none; }
.cv-v3 .cv-feat-vis-scan__line {
  position: absolute;
  left: 4px;
  right: 4px;
  top: 50%;
  height: 1.5px;
  background: var(--cc-green);
  opacity: 0.7;
}
.cv-v3 .cv-feat-vis-scan__camera-icon { color: var(--cc-green); }

/* --- 18.9.4 AuctionShowcaseVisual --- */
.cv-v3 .cv-feat-vis-auction {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.cv-v3 .cv-feat-vis-auction__head {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--cc-fg-3);
  font-weight: 600;
}
.cv-v3 .cv-feat-vis-auction__count {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 6px;
  padding: 4px 8px;
  font-family: var(--cc-font-mono);
  font-size: 11px;
  color: var(--cc-navy);
  font-weight: 700;
}
.cv-v3 .cv-feat-vis-auction__grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
}
.cv-v3 .cv-feat-vis-auction__lot {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(0,65,106,0.06);
  display: flex;
  flex-direction: column;
}
.cv-v3 .cv-feat-vis-auction__lot-photo-wrap {
  position: relative;
  height: 110px;
  background: #1a1a2e;
  overflow: hidden;
}
.cv-v3 .cv-feat-vis-auction__lot-photo {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.cv-v3 .cv-feat-vis-auction__lot-badge {
  position: absolute;
  top: 6px;
  left: 6px;
  font-size: 9px;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 3px;
  letter-spacing: 0.06em;
  box-shadow: 0 1px 2px rgba(0,0,0,0.25);
}
.cv-v3 .cv-feat-vis-auction__lot-badge--copart {
  background: #0254A2;
  color: #fff;
}
.cv-v3 .cv-feat-vis-auction__lot-badge--iaai {
  background: #C8102E;
  color: #fff;
}
.cv-v3 .cv-feat-vis-auction__lot-num {
  position: absolute;
  top: 6px;
  right: 6px;
  background: rgba(0,0,0,0.6);
  color: #fff;
  font-size: 9px;
  font-weight: 600;
  padding: 2px 6px;
  border-radius: 3px;
  font-family: var(--cc-font-mono);
}
.cv-v3 .cv-feat-vis-auction__lot-damage {
  position: absolute;
  bottom: 6px;
  left: 6px;
  background: #dc2626;
  color: #fff;
  font-size: 9px;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 3px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  box-shadow: 0 1px 2px rgba(0,0,0,0.25);
}
.cv-v3 .cv-feat-vis-auction__lot-meta {
  padding: 8px 10px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.cv-v3 .cv-feat-vis-auction__lot-date {
  font-size: 10px;
  color: var(--cc-fg-4);
  font-weight: 600;
}
.cv-v3 .cv-feat-vis-auction__lot-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}
.cv-v3 .cv-feat-vis-auction__lot-price {
  font-size: 16px;
  font-weight: 700;
  color: var(--cc-green);
  letter-spacing: -0.02em;
}
.cv-v3 .cv-feat-vis-auction__lot-miles {
  font-size: 10px;
  color: var(--cc-fg-3);
  font-family: var(--cc-font-mono);
}

/* --- 18.9.5 DealerVisual --- */
.cv-v3 .cv-feat-vis-dealer {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.cv-v3 .cv-feat-vis-dealer__card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  padding: 14px;
  box-shadow: 0 1px 3px rgba(0,65,106,0.06);
}
.cv-v3 .cv-feat-vis-dealer__vehicle {
  font-size: 11px;
  color: var(--cc-fg-4);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-bottom: 6px;
}
.cv-v3 .cv-feat-vis-dealer__spread {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
.cv-v3 .cv-feat-vis-dealer__cell {
  border-radius: 8px;
  padding: 8px 10px;
}
.cv-v3 .cv-feat-vis-dealer__cell--wholesale {
  background: #F0FDF4;
  border: 1px solid rgba(0,135,83,0.13);
}
.cv-v3 .cv-feat-vis-dealer__cell--retail {
  background: var(--cc-navy-bg);
  border: 1px solid var(--cc-navy-10);
}
.cv-v3 .cv-feat-vis-dealer__cell-label {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.cv-v3 .cv-feat-vis-dealer__cell--wholesale .cv-feat-vis-dealer__cell-label { color: var(--cc-green); }
.cv-v3 .cv-feat-vis-dealer__cell--retail .cv-feat-vis-dealer__cell-label { color: var(--cc-navy); }
.cv-v3 .cv-feat-vis-dealer__cell-value {
  font-size: 22px;
  font-weight: 700;
  color: var(--cc-navy);
  letter-spacing: -0.03em;
  line-height: 1.1;
}
.cv-v3 .cv-feat-vis-dealer__cell-note {
  font-size: 10px;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-feat-vis-dealer__spread-bar {
  margin-top: 10px;
  padding: 6px 10px;
  background: #fff3cd;
  border-radius: 6px;
  font-size: 11px;
  color: #7c5b00;
  font-weight: 600;
  text-align: center;
  border: 1px solid rgba(0,0,0,0.06);
}

/* --- 18.9.6 ShareVisual --- */
.cv-v3 .cv-feat-vis-share__url {
  font-family: var(--cc-font-mono);
  font-size: 12px;
  color: var(--cc-fg-3);
}
.cv-v3 .cv-feat-vis-share__copy {
  font-weight: 600;
  font-size: 11px;
}
.cv-v3 .cv-feat-card--accent-navy .cv-feat-vis-share__copy { color: var(--cc-navy); }
.cv-v3 .cv-feat-card--accent-blue .cv-feat-vis-share__copy { color: var(--cc-blue); }
.cv-v3 .cv-feat-card--accent-green .cv-feat-vis-share__copy { color: var(--cc-green); }

/* --- 18.9.7 BulkVisual --- */
.cv-v3 .cv-feat-vis-bulk__list {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 8px;
  padding: 8px;
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.cv-v3 .cv-feat-vis-bulk__row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 3px 0;
  border-bottom: 1px solid var(--cc-bg-soft);
}
.cv-v3 .cv-feat-vis-bulk__row:last-child { border-bottom: none; }
.cv-v3 .cv-feat-vis-bulk__vin {
  font-family: var(--cc-font-mono);
  font-size: 10px;
  color: var(--cc-fg-3);
}
.cv-v3 .cv-feat-vis-bulk__check {
  font-size: 9px;
  font-weight: 600;
  color: var(--cc-blue);
}

/* --- 18.9.8 LifetimeVisual --- */
.cv-v3 .cv-feat-vis-lifetime__list {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 8px;
  padding: 10px;
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.cv-v3 .cv-feat-vis-lifetime__row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 10px;
}
.cv-v3 .cv-feat-vis-lifetime__vin {
  font-family: var(--cc-font-mono);
  color: var(--cc-fg-3);
}
.cv-v3 .cv-feat-vis-lifetime__date { color: var(--cc-fg-4); }

/* --- 18.10 cv-report-preview (Q6 fold — verbatim port of FeaturesSection.jsx L535-553) --- */
.cv-v3 .cv-report-preview {
  display: block;
  padding: 72px 24px;
  background: var(--cc-navy-bg);
}
.cv-v3 .cv-report-preview__inner {
  max-width: 1200px;
  margin: 0 auto;
}
.cv-v3 .cv-report-preview__head {
  text-align: center;
  margin-bottom: 32px;
}
.cv-v3 .cv-report-preview__eyebrow {
  display: inline-block;
  font-family: var(--cc-font-body);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--cc-navy);
  margin-bottom: 10px;
}
.cv-v3 .cv-report-preview__h2 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(1.875rem, 3vw, 2.75rem);
  letter-spacing: -0.03em;
  line-height: 1.15;
  color: var(--cc-fg-1);
  margin: 0;
}
.cv-v3 .cv-report-preview__frame {
  background: #fff;
  border-radius: 16px;
  padding: 16px;
  max-width: 720px;
  margin: 0 auto;
  box-shadow: 0 16px 40px rgba(0,65,106,0.14);
  border: 1px solid var(--cc-border);
}
.cv-v3 .cv-report-preview__image {
  width: 100%;
  display: block;
  border-radius: 8px;
}
.cv-v3 .cv-report-preview__foot {
  text-align: center;
  margin-top: 24px;
}
.cv-v3 .cv-report-preview__cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: #fff;
  color: var(--cc-navy);
  padding: 12px 22px;
  border-radius: 10px;
  border: 1px solid var(--cc-border);
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 15px;
  text-decoration: none;
  transition: background 180ms, box-shadow 180ms;
}
.cv-v3 .cv-report-preview__cta:hover {
  background: var(--cc-bg-soft);
  box-shadow: 0 4px 12px rgba(0,65,106,0.10);
}

/* --- 18.11 Responsive --- */
@media (max-width: 900px) {
  .cv-v3 .cv-feat__grid {
    grid-template-columns: 1fr;
    gap: 16px;
  }
  .cv-v3 .cv-feat-card--span-4,
  .cv-v3 .cv-feat-card--span-12 { grid-column: 1 / -1; }
  .cv-v3 .cv-feat-card--split {
    grid-template-columns: 1fr;
  }
  .cv-v3 .cv-feat-card--split .cv-feat-card__visual {
    border-left: none;
    border-top: 1px solid var(--cc-border);
    min-height: 0;
  }
}
@media (max-width: 640px) {
  .cv-v3 .cv-feat { padding: 48px 16px; }
  .cv-v3 .cv-feat__h2 { font-size: 28px; }
  .cv-v3 .cv-feat__lead { font-size: 15px; }
  .cv-v3 .cv-feat-card--split .cv-feat-card__body { padding: 20px; }
  .cv-v3 .cv-feat-vis-auction__grid { grid-template-columns: 1fr; }
  .cv-v3 .cv-report-preview { padding: 48px 16px; }
  .cv-v3 .cv-report-preview__h2 { font-size: 28px; }
}

/* --- Section 19: Homepage reviews + FAQ + FinalCTA (Phase 37 Wave E plan 37-31) ---
   Verbatim port of:
   - design-system/v2.2-source/project/ui_kits/marketing/SocialAndFooter.jsx L4-88 (Reviews + FAQ + FinalCTA — Footer already shipped Wave C 37-10)
   - design-system/v2.2-source/project/ui_kits/marketing/styles.jsx L300-313 (reviewGrid + reviewCard + avatar + faqItem + faqQ + faqA + btnOnDark mkStyles keys)
   Reviews + FAQ read DYNAMIC data from site_testimonials + site_faqs (reseed lands data in plan 37-33).
   FinalCTA NEW for CarVins (no existing equivalent on homepage); button reuses comparison-repeat-cta handler.
   Scoping rules (same as Sections 15-18):
   - Bare default-hide for cv-reviews + cv-faq + cv-final-cta roots.
   - Activation via descendant combinator under .cv-v3.
   - Compound selectors deliberately avoided per Wave C 37-12 corrective pattern.
*/

/* --- 19.1 Bare default-hide --- */
.cv-reviews, .cv-faq, .cv-final-cta { display: none; }

/* === 19.2 Reviews (mkStyles.reviewGrid + reviewCard + avatar) === */
.cv-v3 .cv-reviews {
  display: block;
  padding: 72px 24px;
  background: #fff;
}
.cv-v3 .cv-reviews__inner { max-width: 1200px; margin: 0 auto; }
.cv-v3 .cv-reviews__head { text-align: center; margin-bottom: 32px; }
.cv-v3 .cv-reviews__eyebrow {
  display: inline-block;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  font-weight: 600;
  margin-bottom: 8px;
}
.cv-v3 .cv-reviews__h2 {
  font-family: var(--cc-font-display);
  font-size: 40px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.02em;
  margin: 0;
}
.cv-v3 .cv-reviews__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
.cv-v3 .cv-review-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 14px;
  padding: 24px;
  box-shadow: 0 1px 3px rgba(0,65,106,0.05);
}
.cv-v3 .cv-review-card__head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 12px;
}
.cv-v3 .cv-review-card__avatar {
  width: 40px;
  height: 40px;
  border-radius: 9999px;
  object-fit: cover;
}
.cv-v3 .cv-review-card__avatar--initials {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 13px;
}
.cv-v3 .cv-review-card__author {
  font-weight: 600;
  font-size: 14px;
  color: var(--cc-fg-1);
}
.cv-v3 .cv-review-card__flag { margin-left: 4px; }
.cv-v3 .cv-review-card__stars {
  color: #F59E0B;
  font-size: 12px;
  letter-spacing: 1px;
}
.cv-v3 .cv-review-card__quote {
  font-size: 14px;
  line-height: 1.55;
  color: var(--cc-fg-2);
  margin: 0;
  font-style: italic;
}

/* === 19.3 FAQ (mkStyles.faqItem + faqQ + faqA) === */
.cv-v3 .cv-faq {
  display: block;
  padding: 72px 24px;
  background: var(--cc-bg-soft);
}
.cv-v3 .cv-faq__inner { max-width: 800px; margin: 0 auto; }
.cv-v3 .cv-faq__head { text-align: center; margin-bottom: 28px; }
.cv-v3 .cv-faq__eyebrow {
  display: inline-block;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  font-weight: 600;
  margin-bottom: 8px;
}
.cv-v3 .cv-faq__h2 {
  font-family: var(--cc-font-display);
  font-size: 40px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.02em;
  margin: 0 0 12px;
}
.cv-v3 .cv-faq__lead {
  font-size: 17px;
  line-height: 1.55;
  color: var(--cc-fg-2);
  margin: 0;
}
.cv-v3 .cv-faq__list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.cv-v3 .cv-faq-item {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  overflow: hidden;
}
.cv-v3 .cv-faq-item__question {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: space-between;
  background: transparent;
  border: none;
  padding: 18px 24px;
  text-align: left;
  font-family: var(--cc-font-body);
  font-size: 16px;
  font-weight: 600;
  color: var(--cc-fg-1);
  cursor: pointer;
}
.cv-v3 .cv-faq-item__question:hover { background: var(--cc-bg-soft); }
.cv-v3 .cv-faq-item__chevron {
  color: var(--cc-navy);
  transition: transform 180ms;
  display: inline-block;
}
.cv-v3 .cv-faq-item__question--open .cv-faq-item__chevron {
  transform: rotate(180deg);
}
.cv-v3 .cv-faq-item__answer {
  padding: 0 24px 18px;
  font-size: 15px;
  line-height: 1.6;
  color: var(--cc-fg-2);
}
.cv-v3 .cv-faq-item__answer[hidden] { display: none; }

/* === 19.4 FinalCTA (mkStyles.section + btnOnDark + navy bg per SocialAndFooter.jsx L77) === */
.cv-v3 .cv-final-cta {
  display: block;
  padding: 72px 24px;
  background: var(--cc-navy);
  color: #fff;
}
.cv-v3 .cv-final-cta__inner {
  max-width: 800px;
  margin: 0 auto;
  text-align: center;
}
.cv-v3 .cv-final-cta__h2 {
  font-family: var(--cc-font-display);
  font-size: 42px;
  font-weight: 700;
  color: #fff;
  letter-spacing: -0.02em;
  margin: 0 0 12px;
}
.cv-v3 .cv-final-cta__sub {
  font-size: 18px;
  color: rgba(255,255,255,0.85);
  margin: 0 0 24px;
}
.cv-v3 .cv-final-cta__button {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--cc-blue);
  color: #fff;
  border: none;
  padding: 14px 28px;
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 16px;
  cursor: pointer;
  transition: background 180ms, transform 180ms;
}
.cv-v3 .cv-final-cta__button:hover {
  background: #0052cc;
  transform: translateY(-1px);
}

/* === 19.5 Responsive === */
@media (max-width: 900px) {
  .cv-v3 .cv-reviews__grid { grid-template-columns: 1fr; }
  .cv-v3 .cv-reviews__h2,
  .cv-v3 .cv-faq__h2,
  .cv-v3 .cv-final-cta__h2 { font-size: 30px; }
}
@media (max-width: 640px) {
  .cv-v3 .cv-reviews,
  .cv-v3 .cv-faq,
  .cv-v3 .cv-final-cta { padding: 48px 16px; }
  .cv-v3 .cv-reviews__h2,
  .cv-v3 .cv-faq__h2,
  .cv-v3 .cv-final-cta__h2 { font-size: 26px; }
  .cv-v3 .cv-faq-item__question { padding: 14px 16px; font-size: 15px; }
  .cv-v3 .cv-faq-item__answer { padding: 0 16px 14px; font-size: 14px; }
}

/* --- Section 20: Pricing page (Phase 37 Wave E plan 37-32) — LARGEST SECTION ---
   Verbatim port of:
   - design-system/v2.2-source/project/ui_kits/marketing/PricingPage.jsx L1-958
   - design-system/v2.2-source/project/ui_kits/marketing/pricing-styles.jsx (ppStyles, 45 keys)
   D-53 (operator 2026-05-21): real-tables model. 3 data-driven sections + 2 contact panels.
   Q1: Plan Recommender slider — no persistence. Q2: 10-Q FAQ as PHP literals.
   Scoping rules (Sections 15-19 precedent): bare default-hide for cv-pp-* roots;
   activation via descendant combinator under .cv-v3; NO compound selectors (Wave C 37-12).
   cv-pp-faq REUSES cv-faq-item__ rules from Section 19 — no clone.
*/

/* === 20.1 Bare default-hide + native smooth-scroll === */
.cv-pp-hero,
.cv-pp-recommender,
.cv-pp-section,
.cv-pp-savings-strip,
.cv-pp-compare-wrap,
.cv-pp-guarantee,
.cv-pp-faq { display: none; }
/* Pricing-container top-padding reset under cv-v3 (was 96px from legacy landing.css —
   stacked on top of the 66px sticky cv-navbar, pushing the cv-pp-hero to ~212px
   below viewport top instead of the ~116px it sits at on the homepage where
   <main> has no top padding). cv-pp-hero already provides its own 32-56px
   internal top padding (Section 20.2), so this just removes the legacy gap. */
.cv-v3 main.pricing-container { padding-top: 0; }
/* WR-03 (37-REVIEW): gate site-wide smooth-scroll behind prefers-reduced-motion.
   Section 7 reduced-motion override at L235 targets `.cv-v3 *` which does NOT
   match the `html` element (cv-v3 lives on body), so an unscoped
   `html { scroll-behavior: smooth }` would otherwise survive reduced-motion
   on every page that loads carvins.css (legacy + admin included). Matches
   the standard MDN pattern for vestibular-safe smooth scrolling (WCAG 2.3.3). */
@media (prefers-reduced-motion: no-preference) {
  html { scroll-behavior: smooth; }
}

/* === 20.2 Hero (ppStyles.heroSection / heroTrust / h1 / lead / anchorNav / anchorChip) === */
.cv-v3 .cv-pp-hero {
  display: block;
  padding: 56px 24px 32px;
  background: #fff;
}
.cv-v3 .cv-pp-hero__inner {
  max-width: 1200px;
  margin: 0 auto;
  text-align: center;
}
.cv-v3 .cv-pp-hero__trust {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  justify-content: center;
  padding: 7px 16px 7px 10px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  margin-bottom: 22px;
}
.cv-v3 .cv-pp-hero__trust-avatars {
  display: flex;
}
.cv-v3 .cv-pp-hero__trust-avatar {
  width: 26px;
  height: 26px;
  border-radius: 9999px;
  border: 2px solid #fff;
}
.cv-v3 .cv-pp-hero__trust-avatar + .cv-pp-hero__trust-avatar {
  margin-left: -8px;
}
.cv-v3 .cv-pp-hero__trust-stars {
  color: #F59E0B;
  font-size: 13px;
  letter-spacing: 1px;
}
.cv-v3 .cv-pp-hero__trust-text {
  font-size: 13px;
  color: var(--cc-fg-3);
  font-weight: 500;
}
.cv-v3 .cv-pp-hero__trust-text strong {
  color: var(--cc-fg-1);
}
.cv-v3 .cv-pp-hero__eyebrow {
  /* Was inline-block, which let it float up next to the trust strip on wide
     viewports because the centered .cv-pp-hero__inner is a block container —
     both children fit on one line, eyebrow drifts to the right of the trust.
     Force block so the stack is: trust strip → eyebrow → H1 → lead → chips. */
  display: block;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  font-weight: 600;
  margin-top: 16px;
  margin-bottom: 8px;
}
.cv-v3 .cv-pp-hero__h1 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(2.5rem, 5vw, 4rem);
  letter-spacing: -0.035em;
  line-height: 1.05;
  color: var(--cc-fg-1);
  margin: 8px 0 0;
}
.cv-v3 .cv-pp-hero__accent { color: var(--cc-blue); }
.cv-v3 .cv-pp-hero__lead {
  font-size: 18px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  max-width: 620px;
  margin: 16px auto 0;
}
.cv-v3 .cv-pp-hero__lead strong {
  color: var(--cc-fg-1);
  font-weight: 700;
}
.cv-v3 .cv-pp-hero__anchors {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  margin-top: 22px;
  background: var(--cc-bg-soft);
  padding: 8px;
  border-radius: 9999px;
  border: 1px solid var(--cc-border);
}
.cv-v3 .cv-pp-hero__anchor-chip {
  padding: 7px 14px;
  border-radius: 9999px;
  font-size: 13px;
  font-weight: 600;
  color: var(--cc-fg-2);
  text-decoration: none;
  background: #fff;
  border: 1px solid var(--cc-border);
  transition: all 160ms;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.cv-v3 .cv-pp-hero__anchor-chip:hover {
  background: var(--cc-navy-bg);
  border-color: var(--cc-navy);
  color: var(--cc-navy);
}
.cv-v3 .cv-pp-hero__anchor-icon {
  color: var(--cc-fg-4);
  display: inline-flex;
}

/* === 20.3 Plan Recommender (ppStyles.recommender* / slider / tickBtn) === */
.cv-v3 .cv-pp-recommender {
  display: block;
  padding: 24px;
  background: #fff;
}
.cv-v3 .cv-pp-recommender__inner {
  max-width: 1200px;
  margin: 0 auto;
}
.cv-v3 .cv-pp-recommender__card {
  display: grid;
  grid-template-columns: 1fr 360px;
  gap: 0;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 4px 16px rgba(0,65,106,0.06);
}
.cv-v3 .cv-pp-recommender__left { padding: 26px 30px; }
.cv-v3 .cv-pp-recommender__right {
  padding: 26px 30px;
  background: var(--cc-navy-bg);
  border-top: 4px solid var(--cc-navy);
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.cv-v3 .cv-pp-recommender__eyebrow {
  display: inline-block;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--cc-blue);
  font-weight: 600;
  margin-bottom: 8px;
}
.cv-v3 .cv-pp-recommender__title {
  font-family: var(--cc-font-display);
  font-size: 22px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.02em;
  margin: 8px 0 16px;
}
.cv-v3 .cv-pp-recommender__slider-row {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-bottom: 12px;
}
.cv-v3 .cv-pp-recommender__slider {
  flex: 1;
  height: 6px;
  border-radius: 9999px;
  background: var(--cc-border);
  appearance: none;
  -webkit-appearance: none;
  outline: none;
  cursor: pointer;
  accent-color: var(--cc-navy);
}
.cv-v3 .cv-pp-recommender__slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 22px;
  height: 22px;
  border-radius: 9999px;
  background: var(--cc-navy);
  border: 3px solid #fff;
  box-shadow: 0 2px 6px rgba(0,65,106,0.25);
  cursor: pointer;
}
.cv-v3 .cv-pp-recommender__slider::-moz-range-thumb {
  width: 22px;
  height: 22px;
  border-radius: 9999px;
  background: var(--cc-navy);
  border: 3px solid #fff;
  box-shadow: 0 2px 6px rgba(0,65,106,0.25);
  cursor: pointer;
}
.cv-v3 .cv-pp-recommender__slider-value {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  min-width: 110px;
}
.cv-v3 .cv-pp-recommender__value {
  font-family: var(--cc-font-display);
  font-size: 36px;
  font-weight: 700;
  color: var(--cc-navy);
  letter-spacing: -0.02em;
}
.cv-v3 .cv-pp-recommender__value-label {
  color: var(--cc-fg-4);
  font-size: 13px;
}
.cv-v3 .cv-pp-recommender__ticks {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.cv-v3 .cv-pp-recommender__tick {
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  padding: 4px 10px;
  border-radius: 9999px;
  cursor: pointer;
  font-family: var(--cc-font-mono);
  font-size: 11px;
  color: var(--cc-fg-3);
  font-weight: 600;
}
.cv-v3 .cv-pp-recommender__tick:hover {
  background: var(--cc-navy-bg);
  border-color: var(--cc-navy);
  color: var(--cc-navy);
}
.cv-v3 .cv-pp-recommender__rec-eyebrow {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--cc-navy);
  margin-bottom: 8px;
}
.cv-v3 .cv-pp-recommender__rec-name {
  font-family: var(--cc-font-display);
  font-size: 22px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.02em;
  margin-bottom: 4px;
}
.cv-v3 .cv-pp-recommender__rec-price-row {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 12px;
}
.cv-v3 .cv-pp-recommender__rec-price {
  font-family: var(--cc-font-display);
  font-size: 36px;
  font-weight: 700;
  color: var(--cc-navy);
  letter-spacing: -0.03em;
  line-height: 1;
}
.cv-v3 .cv-pp-recommender__rec-per {
  font-size: 13px;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-pp-recommender__rec-reason {
  font-size: 13px;
  color: var(--cc-fg-3);
  line-height: 1.5;
  margin: 0 0 16px;
}
.cv-v3 .cv-pp-recommender__see-plan {
  display: inline-block;
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 10px 18px;
  border-radius: 10px;
  text-align: center;
  text-decoration: none;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.15), 0 4px 12px rgba(0,65,106,0.20);
  transition: background 180ms, transform 180ms;
}
.cv-v3 .cv-pp-recommender__see-plan:hover {
  background: #003352;
  transform: translateY(-1px);
}

/* === 20.4 Section wrapper === */
.cv-v3 .cv-pp-section {
  display: block;
  padding: 64px 24px;
  background: #fff;
  scroll-margin-top: 80px;
}
.cv-v3 .cv-pp-section--navy { background: var(--cc-navy-bg); }
.cv-v3 .cv-pp-section__inner {
  max-width: 1200px;
  margin: 0 auto;
}
.cv-v3 .cv-pp-section__head {
  text-align: center;
  margin-bottom: 32px;
}
.cv-v3 .cv-pp-section__eyebrow {
  display: inline-block;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  font-weight: 600;
  margin-bottom: 8px;
}
.cv-v3 .cv-pp-section__h2 {
  font-family: var(--cc-font-display);
  font-size: 40px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.02em;
  margin: 0 0 12px;
}
.cv-v3 .cv-pp-section__lead {
  font-size: 17px;
  line-height: 1.55;
  color: var(--cc-fg-2);
  max-width: 640px;
  margin: 0 auto;
}
.cv-v3 .cv-pp-section__cross-sell {
  display: flex;
  align-items: center;
  gap: 16px;
  justify-content: center;
  margin-top: 24px;
  padding: 14px 20px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  font-size: 13px;
  color: var(--cc-fg-3);
  flex-wrap: wrap;
}
.cv-v3 .cv-pp-section__cross-sell strong { color: var(--cc-fg-1); }
.cv-v3 .cv-pp-section__cross-sell-link {
  color: var(--cc-navy);
  font-weight: 600;
  text-decoration: none;
}
.cv-v3 .cv-pp-section__cross-sell-link:hover { text-decoration: underline; }

/* === 20.5 Tier grid + Tier card (ppStyles.tierGrid / tierCard / tierCardFeatured / ...) === */
.cv-v3 .cv-pp-tier-grid {
  display: grid;
  /* auto-fit on a min(320px) track avoids the orphan-row problem when the operator
     has 4 credit packs OR 5 membership tiers active — at 1440px desktop we get
     4 columns (4 packs = clean row) / 5 columns (5 tiers = clean row); at 1024px
     we collapse to 3-up; at <960px to 2-up; <640px to 1-up. Cleaner than the
     prior repeat(3, 1fr) which dumped the 4th pack alone on a second row. */
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 18px;
  align-items: stretch;
}
.cv-v3 .cv-pp-tier-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  padding: 26px;
  position: relative;
  display: flex;
  flex-direction: column;
  box-shadow: 0 1px 3px rgba(0,65,106,0.06);
}
.cv-v3 .cv-pp-tier-card--featured {
  border: 2px solid var(--cc-navy);
  box-shadow: 0 16px 40px rgba(0,65,106,0.14), 0 4px 12px rgba(0,0,0,0.06);
  transform: translateY(-4px);
  z-index: 1;
}
.cv-v3 .cv-pp-tier-card__tag {
  position: absolute;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--cc-navy);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 4px 10px;
  border-radius: 9999px;
  white-space: nowrap;
}
.cv-v3 .cv-pp-tier-card__tag--blue { background: var(--cc-blue); }
.cv-v3 .cv-pp-tier-card__tag--green { background: var(--cc-green); }
.cv-v3 .cv-pp-tier-card__name {
  font-family: var(--cc-font-display);
  font-size: 20px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.015em;
}
.cv-v3 .cv-pp-tier-card__billing {
  font-size: 12px;
  color: var(--cc-fg-4);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  margin-top: 4px;
}
.cv-v3 .cv-pp-tier-card__price-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-top: 14px;
  margin-bottom: 6px;
}
.cv-v3 .cv-pp-tier-card__price-big {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 52px;
  letter-spacing: -0.04em;
  color: var(--cc-navy);
  line-height: 1;
}
.cv-v3 .cv-pp-tier-card--featured .cv-pp-tier-card__price-big { color: var(--cc-navy); }
.cv-v3 .cv-pp-tier-card__per {
  color: var(--cc-fg-4);
  font-size: 14px;
  font-weight: 500;
}
.cv-v3 .cv-pp-tier-card__savings {
  font-size: 12px;
  font-weight: 700;
  color: var(--cc-green);
  background: #F0FDF4;
  border: 1px solid #00875322;
  padding: 4px 10px;
  border-radius: 9999px;
  margin-top: 8px;
  display: inline-block;
  letter-spacing: 0.02em;
}
.cv-v3 .cv-pp-tier-card__qty-row {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--cc-bg-soft);
  border-radius: 9px;
  padding: 6px 10px;
  width: fit-content;
  margin-top: 8px;
}
.cv-v3 .cv-pp-tier-card__qty-btn {
  width: 26px;
  height: 26px;
  border: 1px solid var(--cc-border);
  background: #fff;
  border-radius: 6px;
  cursor: pointer;
  font-size: 16px;
  font-weight: 600;
  color: var(--cc-navy);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.cv-v3 .cv-pp-tier-card__qty-btn:hover {
  background: var(--cc-navy-bg);
  border-color: var(--cc-navy);
}
.cv-v3 .cv-pp-tier-card__qty-value {
  font-weight: 600;
  min-width: 24px;
  text-align: center;
}
.cv-v3 .cv-pp-tier-card__qty-label {
  font-size: 12px;
  color: var(--cc-fg-4);
  margin-left: 6px;
}
.cv-v3 .cv-pp-tier-card__bullets {
  list-style: none;
  margin: 20px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex: 1;
}
.cv-v3 .cv-pp-tier-card__bullet {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 14px;
  color: var(--cc-fg-2);
  line-height: 1.45;
}
.cv-v3 .cv-pp-tier-card__check {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 9999px;
  background: var(--cc-green);
  color: #fff;
  flex-shrink: 0;
  margin-top: 2px;
}
.cv-v3 .cv-pp-tier-card__cta {
  width: 100%;
  background: #fff;
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy);
  padding: 12px;
  border-radius: 10px;
  margin-top: 18px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  transition: background 180ms, color 180ms;
}
.cv-v3 .cv-pp-tier-card__cta:hover {
  background: var(--cc-navy-bg);
}
.cv-v3 .cv-pp-tier-card--featured .cv-pp-tier-card__cta {
  background: var(--cc-navy);
  color: #fff;
  border: none;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.15), 0 4px 12px rgba(0,65,106,0.20);
}
.cv-v3 .cv-pp-tier-card--featured .cv-pp-tier-card__cta:hover {
  background: #003352;
}
.cv-v3 .cv-pp-tier-card__cta--disabled {
  background: var(--cc-bg-soft);
  color: var(--cc-fg-4);
  border-color: var(--cc-border);
  cursor: not-allowed;
}
.cv-v3 .cv-pp-tier-card__foot {
  text-align: center;
  font-size: 11px;
  color: var(--cc-fg-4);
  margin-top: 10px;
  font-weight: 500;
}

/* === 20.6 Billing toggle (ppStyles.billingToggle / billingToggleBtn / billingToggleActive / savePill) === */
.cv-v3 .cv-pp-billing-toggle {
  display: inline-flex;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  padding: 4px;
  position: relative;
}
.cv-v3 .cv-pp-billing-toggle__wrap {
  display: flex;
  justify-content: center;
  margin-bottom: 28px;
}
.cv-v3 .cv-pp-billing-toggle__btn {
  background: transparent;
  border: none;
  padding: 8px 18px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 13px;
  color: var(--cc-fg-3);
  cursor: pointer;
  border-radius: 9999px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.cv-v3 .cv-pp-billing-toggle__btn--active {
  background: #fff;
  color: var(--cc-navy);
  box-shadow: 0 1px 3px rgba(0,65,106,0.10), 0 1px 2px rgba(0,0,0,0.04);
}
.cv-v3 .cv-pp-billing-toggle__save-pill {
  background: var(--cc-green);
  color: #fff;
  padding: 2px 7px;
  border-radius: 9999px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.04em;
}

/* === 20.7 Contact panel (NEW — D-53; replaces bundle Dealer/API tier grids) === */
.cv-v3 .cv-pp-contact-panel {
  max-width: 760px;
  margin: 0 auto;
  text-align: center;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  padding: 40px 32px;
  box-shadow: 0 4px 16px rgba(0,65,106,0.06);
}
.cv-v3 .cv-pp-section--navy .cv-pp-contact-panel {
  background: #fff;
  border-color: var(--cc-border);
}
.cv-v3 .cv-pp-contact-panel__eyebrow {
  display: inline-block;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  font-weight: 600;
  margin-bottom: 8px;
}
.cv-v3 .cv-pp-contact-panel__h2 {
  font-family: var(--cc-font-display);
  font-size: 32px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.02em;
  margin: 0 0 12px;
}
.cv-v3 .cv-pp-contact-panel__lead {
  font-size: 16px;
  line-height: 1.6;
  color: var(--cc-fg-2);
  max-width: 560px;
  margin: 0 auto 20px;
}
.cv-v3 .cv-pp-contact-panel__points {
  list-style: none;
  margin: 0 auto 24px;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 8px 20px;
  justify-content: center;
  max-width: 560px;
}
.cv-v3 .cv-pp-contact-panel__point {
  font-size: 14px;
  color: var(--cc-fg-2);
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.cv-v3 .cv-pp-contact-panel__point-check {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  border-radius: 9999px;
  background: var(--cc-green);
  color: #fff;
  flex-shrink: 0;
}
.cv-v3 .cv-pp-contact-panel__cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 14px 28px;
  border-radius: 10px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 15px;
  text-decoration: none;
  transition: background 180ms, transform 180ms;
}
.cv-v3 .cv-pp-contact-panel__cta:hover {
  background: #003352;
  transform: translateY(-1px);
}
.cv-v3 .cv-pp-contact-panel__note {
  font-size: 13px;
  color: var(--cc-fg-4);
  margin: 12px 0 0;
}

/* === 20.8 Credits banner (ppStyles.creditsBanner) === */
.cv-v3 .cv-pp-credits-banner {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 14px;
  padding: 18px 22px;
  margin-bottom: 22px;
  box-shadow: 0 1px 3px rgba(0,65,106,0.05);
}
.cv-v3 .cv-pp-credits-banner__item {
  display: flex;
  align-items: center;
  gap: 10px;
}
.cv-v3 .cv-pp-credits-banner__icon {
  flex-shrink: 0;
}
.cv-v3 .cv-pp-credits-banner__title {
  font-weight: 700;
  font-size: 14px;
  color: var(--cc-fg-1);
}
.cv-v3 .cv-pp-credits-banner__sub {
  font-size: 12px;
  color: var(--cc-fg-3);
}

/* === 20.9 Savings strip (ppStyles.savingsGrid / savingsCard / savingsNow / savingsBadge) === */
.cv-v3 .cv-pp-savings-strip {
  display: block;
  padding: 0 24px 32px;
  background: #fff;
}
.cv-v3 .cv-pp-savings-strip__inner {
  max-width: 1200px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}
.cv-v3 .cv-pp-savings-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 14px;
  padding: 18px 20px;
  box-shadow: 0 1px 3px rgba(0,65,106,0.05);
}
.cv-v3 .cv-pp-savings-card--highlight {
  border-color: var(--cc-green);
  box-shadow: 0 8px 24px rgba(0,135,83,0.10);
}
.cv-v3 .cv-pp-savings-card__label {
  font-size: 12px;
  color: var(--cc-fg-4);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.cv-v3 .cv-pp-savings-card__prices {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin-top: 8px;
}
.cv-v3 .cv-pp-savings-card__before {
  font-size: 18px;
  color: var(--cc-fg-4);
  text-decoration: line-through;
  text-decoration-color: var(--cc-fg-5);
}
.cv-v3 .cv-pp-savings-card__arrow {
  color: var(--cc-green);
  display: inline-flex;
}
.cv-v3 .cv-pp-savings-card__now {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 32px;
  color: var(--cc-navy);
  letter-spacing: -0.03em;
  line-height: 1;
}
.cv-v3 .cv-pp-savings-card__footer {
  margin-top: 10px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.cv-v3 .cv-pp-savings-card__badge {
  background: var(--cc-green);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  padding: 3px 9px;
  border-radius: 9999px;
  letter-spacing: 0.04em;
}
.cv-v3 .cv-pp-savings-card__pct {
  font-size: 13px;
  color: var(--cc-green);
  font-weight: 700;
}
.cv-v3 .cv-pp-savings-card__competitor {
  font-size: 12px;
  color: var(--cc-fg-4);
  margin-top: 6px;
}

/* === 20.10 Compare table (ppStyles.compareSection / compareWrap / compareTable / compHead / compGroupCell / compCell / compCta) === */
.cv-v3 .cv-pp-compare-wrap {
  display: block;
  padding: 64px 24px;
  background: var(--cc-bg-soft);
}
.cv-v3 .cv-pp-compare-wrap__inner {
  max-width: 1200px;
  margin: 0 auto;
}
.cv-v3 .cv-pp-compare {
  overflow-x: auto;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  box-shadow: 0 8px 24px rgba(0,65,106,0.06);
}
.cv-v3 .cv-pp-compare__table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-family: var(--cc-font-body);
  font-size: 13px;
  min-width: 720px;
}
.cv-v3 .cv-pp-compare__head-cell {
  padding: 16px 14px;
  text-align: center;
  vertical-align: bottom;
  font-weight: 600;
  color: var(--cc-fg-3);
  border-bottom: 1px solid var(--cc-border);
  background: var(--cc-bg-soft);
}
.cv-v3 .cv-pp-compare__head-cell--feature {
  text-align: left;
  width: 32%;
}
.cv-v3 .cv-pp-compare__head-cell--featured {
  background: var(--cc-navy-bg);
}
.cv-v3 .cv-pp-compare__head-label {
  font-weight: 700;
  font-size: 14px;
}
.cv-v3 .cv-pp-compare__head-sub {
  color: var(--cc-fg-4);
  font-size: 11px;
  font-weight: 500;
  margin-top: 2px;
}
.cv-v3 .cv-pp-compare__group-cell {
  padding: 14px 14px 8px;
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-top: 1px solid var(--cc-border);
  background: var(--cc-bg-soft);
  text-align: left;
}
.cv-v3 .cv-pp-compare__cell {
  padding: 12px 14px;
  text-align: center;
  border-bottom: 1px solid var(--cc-border);
  color: var(--cc-fg-2);
  vertical-align: middle;
}
.cv-v3 .cv-pp-compare__cell--feature {
  text-align: left;
  color: var(--cc-fg-2);
  font-weight: 500;
}
.cv-v3 .cv-pp-compare__cell--featured {
  background: rgba(0,65,106,0.04);
}
.cv-v3 .cv-pp-compare__check {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 9999px;
  background: var(--cc-green);
  color: #fff;
}
.cv-v3 .cv-pp-compare__dash {
  color: var(--cc-fg-5);
  font-size: 16px;
}
.cv-v3 .cv-pp-compare__check-with-text {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--cc-green);
  font-weight: 600;
  font-size: 12px;
}
.cv-v3 .cv-pp-compare__check-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  border-radius: 9999px;
  background: var(--cc-green);
  color: #fff;
}
.cv-v3 .cv-pp-compare__text-value {
  color: var(--cc-fg-3);
  font-size: 12px;
  font-weight: 500;
}
.cv-v3 .cv-pp-compare__cta {
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 8px 16px;
  border-radius: 8px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 13px;
  text-decoration: none;
  display: inline-block;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.15), 0 2px 4px rgba(0,65,106,0.20);
}
.cv-v3 .cv-pp-compare__cta:hover {
  background: #003352;
}
.cv-v3 .cv-pp-compare__cta-row .cv-pp-compare__cell { padding: 16px 12px; }

/* === 20.11 Guarantee band (ppStyles.guaranteeGrid / guaranteeCard / guaranteeIcon / ...) === */
.cv-v3 .cv-pp-guarantee {
  display: block;
  padding: 56px 24px;
  background: #fff;
}
.cv-v3 .cv-pp-guarantee__inner {
  max-width: 1200px;
  margin: 0 auto;
}
.cv-v3 .cv-pp-guarantee-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}
.cv-v3 .cv-pp-guarantee-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 14px;
  padding: 22px 20px;
}
.cv-v3 .cv-pp-guarantee-card__icon {
  width: 42px;
  height: 42px;
  border-radius: 10px;
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 12px;
}
.cv-v3 .cv-pp-guarantee-card__title {
  font-family: var(--cc-font-display);
  font-size: 16px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.01em;
  margin-bottom: 6px;
}
.cv-v3 .cv-pp-guarantee-card__sub {
  font-size: 13px;
  color: var(--cc-fg-3);
  line-height: 1.55;
}

/* === 20.12 Pricing FAQ (REUSES cv-faq-item__ from Section 19) === */
.cv-v3 .cv-pp-faq {
  display: block;
  padding: 64px 24px;
  background: var(--cc-bg-soft);
}
.cv-v3 .cv-pp-faq__inner {
  max-width: 800px;
  margin: 0 auto;
}
.cv-v3 .cv-pp-faq__head {
  text-align: center;
  margin-bottom: 28px;
}
.cv-v3 .cv-pp-faq__eyebrow {
  display: inline-block;
  font-size: 12px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  font-weight: 600;
  margin-bottom: 8px;
}
.cv-v3 .cv-pp-faq__h2 {
  font-family: var(--cc-font-display);
  font-size: 40px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.02em;
  margin: 0;
}
.cv-v3 .cv-pp-faq__list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

/* === 20.13 Responsive === */
@media (max-width: 900px) {
  .cv-v3 .cv-pp-tier-grid,
  .cv-v3 .cv-pp-savings-strip__inner,
  .cv-v3 .cv-pp-credits-banner { grid-template-columns: 1fr; }
  .cv-v3 .cv-pp-guarantee-grid { grid-template-columns: repeat(2, 1fr); }
  .cv-v3 .cv-pp-recommender__card { grid-template-columns: 1fr; }
  .cv-v3 .cv-pp-hero__h1 { font-size: 36px; }
  .cv-v3 .cv-pp-section__h2 { font-size: 30px; }
  .cv-v3 .cv-pp-contact-panel__h2 { font-size: 26px; }
  .cv-v3 .cv-pp-faq__h2 { font-size: 30px; }
}
@media (max-width: 640px) {
  .cv-v3 .cv-pp-hero { padding: 40px 16px 24px; }
  .cv-v3 .cv-pp-section,
  .cv-v3 .cv-pp-compare-wrap,
  .cv-v3 .cv-pp-guarantee,
  .cv-v3 .cv-pp-faq { padding: 48px 16px; }
  .cv-v3 .cv-pp-guarantee-grid { grid-template-columns: 1fr; }
  .cv-v3 .cv-pp-contact-panel { padding: 32px 20px; }
  .cv-v3 .cv-pp-section__h2 { font-size: 26px; }
  .cv-v3 .cv-pp-recommender { padding: 16px; }
  .cv-v3 .cv-pp-recommender__left,
  .cv-v3 .cv-pp-recommender__right { padding: 20px; }
  .cv-v3 .cv-pp-tier-card { padding: 20px; }
  .cv-v3 .cv-pp-tier-card__price-big { font-size: 42px; }
}

/* ==================================================================
   Section 24: Cross-cutting depth modules — Wave F redo foundation
   (absorbed D-09 + D-12). Four reusable BEM blocks consumed by the
   per-page cluster plans 37-35..37-49. Every block uses the Phase 37
   Wave C 37-12 mandate: bare `.cv-X { display: none; }` default-hide +
   `.cv-v3 .cv-X` descendant-combinator activation (NO compound
   `.cv-v3.cv-X` selectors). Composes existing --cc-* tokens only
   (D-16 — zero new design-system.css tokens).
   ================================================================== */
/* === 24 Cross-cutting depth modules === */

/* === 24.1 cv-trust-strip (mirrored from HeroSection.jsx L180-L233; bundle window.TrustStrip = TrustStrip exposes reusability) === */
/* Rules MIGRATED verbatim from former §15.3 hero trust-strip selectors (moved, not duplicated, per absorbed D-11). */
.cv-trust-strip { display: none; }
.cv-v3 .cv-trust-strip {
  display: inline-flex;
  align-items: center;
  gap: 18px;
  flex-wrap: wrap;
  justify-content: center;
  padding: 8px 14px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  margin: 0 auto 18px;
}
.cv-v3 .cv-trust-strip__block {
  display: flex;
  align-items: center;
  gap: 10px;
}
.cv-v3 .cv-trust-strip__avatars {
  display: flex;
  align-items: center;
}
.cv-v3 .cv-trust-strip__avatar {
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  border: 2px solid #fff;
  display: inline-block;
}
.cv-v3 .cv-trust-strip__avatar + .cv-trust-strip__avatar { margin-left: -10px; }
.cv-v3 .cv-trust-strip__stars-block { text-align: left; }
.cv-v3 .cv-trust-strip__stars {
  color: #F59E0B;
  font-size: 14px;
  letter-spacing: 1px;
}
.cv-v3 .cv-trust-strip__count {
  font-size: 12px;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-trust-strip__sep {
  color: var(--cc-border);
  font-weight: 300;
}
.cv-v3 .cv-trust-strip__pill {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 13px;
  font-weight: 600;
}
.cv-v3 .cv-trust-strip__pill svg {
  display: inline-block;
  vertical-align: middle;
}
.cv-v3 .cv-trust-strip__pill--green { color: var(--cc-green); }
.cv-v3 .cv-trust-strip__pill--navy { color: var(--cc-navy); }
.cv-v3 .cv-trust-strip__pill--muted { color: var(--cc-fg-3); }
/* Responsive — migrated from former §15.8 @media (max-width:640px) hero trust-strip rule.
   NOTE (2026-06-09 UAT fix): a 37-34 migration extra (@media ≤768px flex-direction: column)
   was REMOVED — it stacked the pills inside the border-radius:9999px lozenge, rendering a
   giant oval on mobile. Bundle mkStyles.trustStrip has no column rule: row + wrap + center
   is the verbatim mobile behavior (matches the Wave E operator-approved hero). */
@media (max-width: 640px) {
  .cv-v3 .cv-trust-strip {
    gap: 10px;
    padding: 6px 10px;
  }
}

/* === 24.2 cv-gradient-h1 (gradient brand-keyword utility, mirrored from cv-hero__brand) === */
.cv-gradient-h1 { /* no defaults — class on the h1 element itself; grep hook + future styling slot */ }
.cv-v3 .cv-gradient-h1__brand {
  background: linear-gradient(135deg, var(--cc-blue) 0%, var(--cc-navy) 100%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  color: transparent;
}

/* === 24.3 cv-related-pages (3-card per-page internal linking, mirrored from FeaturesSection.jsx 3-card grid) === */
.cv-related-pages { display: none; }
.cv-v3 .cv-related-pages {
  display: block;
  padding: 64px 0;
  background: var(--cc-bg-soft);
}
.cv-v3 .cv-related-pages__inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
.cv-v3 .cv-related-pages__eyebrow {
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 1.5px;
  color: var(--cc-blue);
  margin-bottom: 8px;
}
.cv-v3 .cv-related-pages__h2 {
  font-family: var(--cc-font-display, 'Bricolage Grotesque');
  font-size: clamp(24px, 4vw, 32px);
  font-weight: 700;
  color: var(--cc-navy);
  margin-bottom: 32px;
}
.cv-v3 .cv-related-pages__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.cv-v3 .cv-related-pages__card {
  display: flex;
  gap: 12px;
  padding: 20px;
  background: #fff;
  border: 1px solid var(--cc-border-soft);
  border-radius: var(--cc-radius-md);
  text-decoration: none;
  color: inherit;
  box-shadow: var(--cc-shadow-md);
}
/* Hover-lift gated behind no-preference per absorbed D-33. Deeper shadow inline per D-19. */
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-related-pages__card {
    transition: box-shadow 0.2s ease, transform 0.2s ease;
  }
  .cv-v3 .cv-related-pages__card:hover {
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.10);
    transform: translateY(-2px);
  }
}
.cv-v3 .cv-related-pages__icon {
  flex-shrink: 0;
  color: var(--cc-blue);
}
.cv-v3 .cv-related-pages__icon svg { width: 24px; height: 24px; }
.cv-v3 .cv-related-pages__card-body { flex: 1; }
.cv-v3 .cv-related-pages__card-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--cc-navy);
  margin: 0 0 4px;
}
.cv-v3 .cv-related-pages__card-desc {
  font-size: 13px;
  color: var(--cc-fg-3);
  line-height: 1.4;
  margin: 0;
}
.cv-v3 .cv-related-pages__card-arrow {
  color: var(--cc-fg-4);
  flex-shrink: 0;
}
.cv-v3 .cv-related-pages__card-arrow svg { width: 16px; height: 16px; }
/* Focus-visible ring for keyboard nav (a11y per absorbed D-46). */
.cv-v3 .cv-related-pages__card:focus-visible {
  outline: 2px solid var(--cc-blue);
  outline-offset: 2px;
}
@media (max-width: 768px) {
  .cv-v3 .cv-related-pages { padding: 48px 0; }
  .cv-v3 .cv-related-pages__grid { grid-template-columns: 1fr; }
}

/* === 24.4 cv-breadcrumb (visible breadcrumb strip — guides + state pages only per absorbed D-40 + D-41) === */
.cv-breadcrumb { display: none; }
.cv-v3 .cv-breadcrumb {
  display: flex;
  padding: 12px 24px;
  background: var(--cc-bg-soft);
  border-bottom: 1px solid var(--cc-border-soft);
  font-size: 13px;
}
.cv-v3 .cv-breadcrumb__list {
  display: flex;
  align-items: center;
  gap: 8px;
  list-style: none;
  margin: 0;
  padding: 0;
  flex-wrap: wrap;
}
.cv-v3 .cv-breadcrumb__item {
  display: flex;
  align-items: center;
  gap: 8px;
}
.cv-v3 .cv-breadcrumb__link {
  color: var(--cc-fg-3);
  text-decoration: none;
}
.cv-v3 .cv-breadcrumb__link:hover { color: var(--cc-blue); }
.cv-v3 .cv-breadcrumb__link:focus-visible {
  outline: 2px solid var(--cc-blue);
  outline-offset: 2px;
}
/* __virtual = non-link parent segment (e.g. "Vehicle History Guides") per absorbed D-39. */
.cv-v3 .cv-breadcrumb__virtual {
  color: var(--cc-fg-3);
  cursor: default;
}
.cv-v3 .cv-breadcrumb__sep {
  color: var(--cc-fg-4);
  display: inline-flex;
}
.cv-v3 .cv-breadcrumb__current {
  color: var(--cc-navy);
  font-weight: 600;
}
/* Mobile: horizontal scroll + collapse to last 3 crumbs per absorbed D-41 truncation. */
@media (max-width: 768px) {
  .cv-v3 .cv-breadcrumb__list {
    overflow-x: auto;
    white-space: nowrap;
    -webkit-overflow-scrolling: touch;
    flex-wrap: nowrap;
  }
  .cv-v3 .cv-breadcrumb__item:not(:nth-last-child(-n + 3)) { display: none; }
}

/* =====================================================================
   Section 21: Tool pages (cv-tool-* family) — Phase 37 Wave F redo, v2.3 bundle
   ---------------------------------------------------------------------
   Canonical cv-tool-* family ported VERBATIM from design-system/v2.3-source
   (tools/vin-decoder.html + FreeToolsPage.jsx ftStyles). Established by plan
   37-35 (free-vin-decoder); reused by 37-36..37-41 (the next 5 tool pages add
   ONLY their per-tool result block §21.3..§21.7). Bare default-hide + `.cv-v3`
   descendant activation per Phase 37 Wave C 37-12 mandate — ZERO compound
   (cv-v3 AND cv-tool, no space) selectors. Composes existing --cc-* tokens ONLY (D-16).
   Hover/transition wrapped in @media (prefers-reduced-motion: no-preference)
   per D-33. NOTE: appended AFTER §24 (foundation 37-34) — planner discretion
   per Task 2 ("if §24 is already present append §21 before it OR after").
   ===================================================================== */

/* Pulse-dot animation — defined ONCE in §21 (referenced by 37-36 auction
   pulse-dot AND 37-41 hub heroBadgeDot per D-WF23 Deliverable 4).
   Source: tools/vin-decoder.html L61 (verbatim). */
@keyframes ftix-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(0, 135, 83, 0.55); }
  50%      { box-shadow: 0 0 0 6px rgba(0, 135, 83, 0); }
}

/* === 21 cv-tool-page (scaffold; vin-decoder.html L23-27 + L89-104) === */
.cv-tool-page { display: none; }
.cv-v3 .cv-tool-page { display: block; background: #fff; }

.cv-v3 .cv-tool-page__breadcrumb {
  max-width: 1080px;
  margin: 0 auto;
  padding: 16px 24px;
  font-size: 13px;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-tool-page__breadcrumb a {
  color: var(--cc-navy);
  text-decoration: none;
  font-weight: 600;
}
.cv-v3 .cv-tool-page__breadcrumb-sep {
  color: var(--cc-fg-5);
  margin: 0 8px;
}

.cv-v3 .cv-tool-page__hero { padding: 24px 24px 8px; }
.cv-v3 .cv-tool-page__hero-inner {
  max-width: 1080px;
  margin: 0 auto;
  text-align: center;
}

/* Eyebrow pill — default navy accent; --green/--amber/--blue modifiers for
   reuse by other tool plans (ACCENT palette, FreeToolsPage.jsx L38-45). */
.cv-v3 .cv-tool-page__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 12px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy-10);
}
.cv-v3 .cv-tool-page__eyebrow--green {
  background: #F0FDF4;
  color: var(--cc-green);
  border-color: #00875340;
}
.cv-v3 .cv-tool-page__eyebrow--amber {
  background: #FFFBEB;
  color: #B45309;
  border-color: #FCD34D80;
}
.cv-v3 .cv-tool-page__eyebrow--blue {
  background: #EFF6FF;
  color: var(--cc-blue);
  border-color: #BFDBFE;
}
.cv-v3 .cv-tool-page__eyebrow-dot {
  width: 6px;
  height: 6px;
  border-radius: 9999px;
  background: currentColor;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-page__eyebrow-dot { animation: ftix-pulse 1.8s ease-in-out infinite; }
}

.cv-v3 .cv-tool-page__h1 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(2rem, 4vw, 3.25rem);
  letter-spacing: -0.035em;
  line-height: 1.05;
  color: var(--cc-fg-1);
  margin: 8px 0 0;
}
.cv-v3 .cv-tool-page__sub {
  font-size: 17px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  max-width: 660px;
  margin: 14px auto 0;
}
.cv-v3 .cv-tool-page__body {
  max-width: 1080px;
  margin: 0 auto;
  padding: 24px 24px 32px;
}

/* === 21.1 cv-tool-frame (ftStyles.toolFrame + toolHead + inputs; freetools-styles.jsx L4-54) === */
.cv-tool-frame { display: none; }
.cv-v3 .cv-tool-frame {
  display: block;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  padding: 28px 30px;
  box-shadow: 0 1px 3px rgba(16, 24, 40, 0.05);
}
.cv-v3 .cv-tool-frame__head { margin-bottom: 24px; }
.cv-v3 .cv-tool-frame__head-row {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 6px;
}
.cv-v3 .cv-tool-frame__icon {
  width: 44px;
  height: 44px;
  border-radius: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy-10);
}
.cv-v3 .cv-tool-frame__icon--green {
  background: #F0FDF4;
  color: var(--cc-green);
  border-color: #00875340;
}
.cv-v3 .cv-tool-frame__icon--amber {
  background: #FFFBEB;
  color: #B45309;
  border-color: #FCD34D80;
}
.cv-v3 .cv-tool-frame__icon--blue {
  background: #EFF6FF;
  color: var(--cc-blue);
  border-color: #BFDBFE;
}
.cv-v3 .cv-tool-frame__icon--navy {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border-color: var(--cc-navy-10);
}
.cv-v3 .cv-tool-frame__pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 12px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy-10);
}
.cv-v3 .cv-tool-frame__pill--green {
  background: #F0FDF4;
  color: var(--cc-green);
  border-color: #00875340;
}
.cv-v3 .cv-tool-frame__pill--amber {
  background: #FFFBEB;
  color: #B45309;
  border-color: #FCD34D80;
}
.cv-v3 .cv-tool-frame__pill--blue {
  background: #EFF6FF;
  color: var(--cc-blue);
  border-color: #BFDBFE;
}
.cv-v3 .cv-tool-frame__pill--navy {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border-color: var(--cc-navy-10);
}
.cv-v3 .cv-tool-frame__pill-dot {
  width: 6px;
  height: 6px;
  border-radius: 9999px;
  background: currentColor;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-frame__pill-dot { animation: ftix-pulse 1.8s ease-in-out infinite; }
}
.cv-v3 .cv-tool-frame__title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 28px;
  letter-spacing: -0.025em;
  line-height: 1.15;
  color: var(--cc-fg-1);
  margin: 12px 0 6px;
}
.cv-v3 .cv-tool-frame__sub {
  font-size: 15px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  margin: 0;
  max-width: 640px;
}
.cv-v3 .cv-tool-frame__row {
  display: flex;
  gap: 10px;
  align-items: stretch;
  flex-wrap: wrap;
  margin-bottom: 22px;
}
/* [hidden] guard: the flex display above is author CSS, so it overrides the UA's
   [hidden]{display:none} (free-recall-lookup.php tab panels). Same pattern as
   .cv-v3 .vin-card__input-row[hidden] at ~L2361. */
.cv-v3 .cv-tool-frame__row[hidden] { display: none; }
.cv-v3 .cv-tool-result[hidden] { display: none; }

.cv-v3 .cv-tool-frame__input-wrap {
  flex: 1;
  min-width: 220px;
  display: flex;
  align-items: center;
  gap: 8px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 11px 14px;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-frame__input-wrap { transition: border-color 160ms ease, box-shadow 160ms ease; }
}
.cv-v3 .cv-tool-frame__input-wrap:focus-within {
  border-color: var(--cc-navy);
  box-shadow: 0 0 0 3px rgba(0, 65, 106, 0.08);
}
.cv-v3 .cv-tool-frame__input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: var(--cc-font-body);
  font-size: 14px;
  color: var(--cc-fg-1);
  min-width: 0;
  letter-spacing: 0.04em;
  font-weight: 500;
}
.cv-v3 .cv-tool-frame__count {
  font-family: var(--cc-font-mono);
  font-size: 12px;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-tool-frame__run-btn {
  display: inline-flex;
  align-items: center;
  color: #fff;
  border: none;
  padding: 11px 22px;
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 14px;
  cursor: pointer;
  white-space: nowrap;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18), 0 2px 6px rgba(0, 65, 106, 0.20);
  letter-spacing: -0.005em;
  background: var(--cc-navy);
}
.cv-v3 .cv-tool-frame__run-btn--green { background: var(--cc-green); }
.cv-v3 .cv-tool-frame__run-btn--blue  { background: var(--cc-blue); }
/* === 21.1 addendum (input-sizing sweep 2026-06-09): the legacy .tool-input/.tool-btn/
   .tool-select/.tool-field classes were purged from all tool-page form controls (they
   double-boxed inputs inside .cv-tool-frame__input-wrap — 48px bordered input inside the
   43px bordered wrap ≈ 72px). These rules replace the only things the legacy classes
   provided that §21.1 lacked: run-btn icon spacing, a block run-btn variant, and a
   labeled field column for multi-field forms (recall vehicle tab). === */
.cv-v3 .cv-tool-frame__run-btn svg { margin-right: 7px; }
.cv-v3 .cv-tool-frame__run-btn--block { display: flex; width: 100%; justify-content: center; }
.cv-v3 .cv-tool-frame__field { display: flex; flex-direction: column; gap: 8px; flex: 1 1 180px; }
.cv-v3 .cv-tool-frame__field-label { font-size: 12px; font-weight: 600; color: var(--cc-fg-3); }

.cv-v3 .cv-tool-frame__tiny-label {
  font-size: 10px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.10em;
  text-transform: uppercase;
}

/* §21.1 addendum (tool legacy-class purge) — selects composed into the cv-tool-frame__input
   primitive keep a pointer cursor. Legacy .tool-select (tools.css) provided this before the
   tool-select class was removed from tool-page markup (true-cost-of-ownership.php,
   car-payment-calculator.php). */
.cv-v3 select.cv-tool-frame__input { cursor: pointer; }

/* === 21.2 cv-tool-result--vin (ftStyles.resultBanner/successPill/resultGrid/resultRow; freetools-styles.jsx L74-90) === */
.cv-v3 .cv-tool-result__banner {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
  padding: 18px 22px;
  border-radius: 12px;
  margin-bottom: 16px;
  background: var(--cc-navy-bg);
  border: 1px solid var(--cc-navy-10);
}
.cv-v3 .cv-tool-result__success-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 12px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
  background: var(--cc-green);
  color: #fff;
}
.cv-v3 .cv-tool-result__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 10px;
}
.cv-v3 .cv-tool-result__row {
  padding: 12px 14px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 10px;
}
.cv-v3 .cv-tool-result__vehicle {
  font-family: var(--cc-font-display);
  font-size: 24px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.025em;
  margin-top: 4px;
}

/* §21.2 additions — VIN decoded banner main/sub + grid row values (FreeToolsPage.jsx
   L75-80 inline styles + ResultRow L467-477). Appended after .cv-v3 .cv-tool-result__vehicle.
   --vin modifier restores the 20px gap above the result that the removed legacy
   .tool-result wrapper used to provide (tools.css .tool-hint has no bottom margin). */
.cv-v3 .cv-tool-result--vin { margin-top: 20px; }
.cv-v3 .cv-tool-result__banner-main {
  flex: 1;
  min-width: 200px;
}
.cv-v3 .cv-tool-result__banner-sub {
  font-size: 13px;
  color: var(--cc-fg-3);
  margin-top: 4px;
}
.cv-v3 .cv-tool-result__row-value {
  font-size: 15px;
  font-weight: 600;
  color: var(--cc-fg-1);
  margin-top: 4px;
  font-family: var(--cc-font-body);
}
.cv-v3 .cv-tool-result__row-value--mono {
  font-family: var(--cc-font-mono);
}

/* === 21.3 cv-tool-result--recall (recall summary + cards; recall-lookup.php) === */
/* ftStyles.recallSummary/recallDivider/recallCard/openPill/resolvedPill (freetools-styles.jsx
   L92-117) + RecallStat (FreeToolsPage.jsx L134-167). Descendant-activated sub-blocks (live
   inside the already-hidden cv-tool-frame); ZERO compound selectors. Amber-tint summary band =
   bundle ACCENT('amber').bg/bd literals (#FFFBEB / #FCD34D80). Open pill = rose (#FEF2F2 /
   #B91C1C / #FECACA); resolved pill = green (#F0FDF4 / var(--cc-green) / #00875340) — bundle-
   verbatim (no rose token exists in this design system). */
.cv-v3 .cv-tool-result__recall-summary {
  display: flex;
  gap: 16px;
  align-items: center;
  padding: 20px 26px;
  border-radius: 14px;
  margin-bottom: 16px;
  flex-wrap: wrap;
  background: #FFFBEB;
  border: 1px solid #FCD34D80;
}
.cv-v3 .cv-tool-result__recall-stat {
  flex: 1;
}
.cv-v3 .cv-tool-result__recall-stat-n {
  font-family: var(--cc-font-display);
  font-size: 32px;
  font-weight: 700;
  letter-spacing: -0.03em;
  line-height: 1;
  color: var(--cc-fg-1);
}
.cv-v3 .cv-tool-result__recall-stat-n--rose {
  color: #B91C1C;
}
.cv-v3 .cv-tool-result__recall-stat-n--green {
  color: var(--cc-green);
}
.cv-v3 .cv-tool-result__recall-stat-label {
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-top: 6px;
}
.cv-v3 .cv-tool-result__recall-divider {
  width: 1px;
  height: 36px;
  background: rgba(0, 0, 0, 0.10);
  flex-shrink: 0;
}
.cv-v3 .cv-tool-result__recall-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.cv-v3 .cv-tool-result__recall-card {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  padding: 14px 18px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
}
.cv-v3 .cv-tool-result__recall-card--open {
  background: #FEF2F2;
  border-color: #FECACA;
}
.cv-v3 .cv-tool-result__open-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: #FEF2F2;
  color: #B91C1C;
  border: 1px solid #FECACA;
  padding: 5px 13px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
}
.cv-v3 .cv-tool-result__resolved-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
  padding: 5px 13px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
}
@media (max-width: 640px) {
  .cv-v3 .cv-tool-result__recall-summary { gap: 12px; }
  .cv-v3 .cv-tool-result__recall-divider { display: none; }
}

/* === 21.3b cv-tool-result--recall card internals + amber run-btn (free-recall-lookup.php redo) === */
/* Bundle sources: FreeToolsPage.jsx RecallLookup L142-167 (meta row / NHTSA mono chip / date /
   severity pill / 14.5px title) + SearchRow run button = ACCENT('amber').fg #B45309.
   __recall-desc / __recall-box / __recall-note / __recall-error are live-data + state
   extensions absent from the design — composed from bundle palettes only (amber
   #FFFBEB/#FCD34D80/#B45309, rose #FEF2F2/#FECACA/#B91C1C, neutral var(--cc-border)).
   Same descendant-activation pattern as §21.3; ZERO compound selectors. */
.cv-v3 .cv-tool-frame__run-btn--amber { background: #B45309; }
/* Guard: tools.css .tool-btn:hover:not([disabled]) is (0,3,0) and loads after carvins.min.css —
   without this it flips the amber button to legacy blue on hover. Design defines no hover shift. */
.cv-v3 .cv-tool-frame__run-btn--amber:hover:not([disabled]) { background: #B45309; }
.cv-v3 .cv-tool-result__recall-card-main {
  flex: 1;
  min-width: 0;
}
.cv-v3 .cv-tool-result__recall-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
  flex-wrap: wrap;
}
.cv-v3 .cv-tool-result__recall-id {
  font-family: var(--cc-font-mono);
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-4);
  background: #fff;
  padding: 2px 8px;
  border-radius: 5px;
  border: 1px solid var(--cc-border);
}
.cv-v3 .cv-tool-result__recall-date {
  font-size: 11px;
  font-weight: 500;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-tool-result__recall-flag {
  font-size: 9px;
  font-weight: 700;
  padding: 2px 8px;
  border-radius: 9999px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.cv-v3 .cv-tool-result__recall-flag--high {
  background: #FEF2F2;
  color: #B91C1C;
  border: 1px solid #FECACA;
}
.cv-v3 .cv-tool-result__recall-flag--low {
  background: #FFFBEB;
  color: #B45309;
  border: 1px solid #FCD34D80;
}
.cv-v3 .cv-tool-result__recall-title {
  font-size: 14.5px;
  font-weight: 600;
  color: var(--cc-fg-1);
  line-height: 1.4;
  margin: 0;
}
.cv-v3 .cv-tool-result__recall-desc {
  font-size: 13px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  margin: 8px 0 0;
}
.cv-v3 .cv-tool-result__recall-box {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 12px 14px;
  margin-top: 10px;
}
.cv-v3 .cv-tool-result__recall-box p {
  font-size: 13px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  margin: 4px 0 0;
}
.cv-v3 .cv-tool-result__recall-note {
  background: #FFFBEB;
  border: 1px solid #FCD34D80;
  border-radius: 10px;
  padding: 12px 16px;
  font-size: 13.5px;
  line-height: 1.55;
  color: #B45309;
  margin-bottom: 16px;
}
.cv-v3 .cv-tool-result__recall-error {
  background: #FEF2F2;
  border: 1px solid #FECACA;
  border-radius: 12px;
  padding: 16px 20px;
}
.cv-v3 .cv-tool-result__recall-error-title {
  font-family: var(--cc-font-display);
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #B91C1C;
  margin: 0 0 4px;
}
.cv-v3 .cv-tool-result__recall-error-msg {
  font-size: 14px;
  line-height: 1.55;
  color: var(--cc-fg-2);
  margin: 0;
}

/* === 21.4 cv-tool-result--plate (state select + plate badge; license-plate-lookup.php) === */
/* ftStyles.stateWrap/stateSelect/stateChev (freetools-styles.jsx L56-66) + plateResult/plateBadge
   (L119-128) + PlateLookup plate-band/badge-state/badge-num/vin (FreeToolsPage.jsx L221-229).
   Descendant-activated sub-blocks (live inside the already-hidden cv-tool-frame); ZERO compound
   selectors. Blue-tint plate band = bundle ACCENT('blue').bg/bd literals (#EFF6FF / #BFDBFE — matches
   the §21.1 cv-tool-frame__icon--blue / __pill--blue palette; no blue-bg/blue-10 token exists). */
.cv-v3 .cv-tool-result__state-wrap {
  position: relative;
  display: inline-flex;
}
.cv-v3 .cv-tool-result__state-select {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 11px 36px 11px 16px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 14px;
  color: var(--cc-fg-1);
  cursor: pointer;
  outline: none;
  letter-spacing: 0.04em;
}
.cv-v3 .cv-tool-result__state-select:focus {
  border-color: var(--cc-navy);
  box-shadow: 0 0 0 3px rgba(0, 65, 106, 0.08);
}
.cv-v3 .cv-tool-result__state-chev {
  position: absolute;
  right: 14px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--cc-fg-4);
  pointer-events: none;
}
.cv-v3 .cv-tool-result__plate-band {
  display: flex;
  align-items: center;
  gap: 20px;
  flex-wrap: wrap;
  padding: 20px 24px;
  border-radius: 14px;
  background: #EFF6FF;
  border: 1px solid #BFDBFE;
}
.cv-v3 .cv-tool-result__plate-badge {
  background: #fff;
  border: 3px solid var(--cc-fg-1);
  border-radius: 8px;
  padding: 10px 18px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.10);
}
.cv-v3 .cv-tool-result__plate-badge-state {
  font-size: 9px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.08em;
}
.cv-v3 .cv-tool-result__plate-badge-num {
  font-family: var(--cc-font-mono);
  font-weight: 700;
  font-size: 24px;
  letter-spacing: 0.10em;
  color: var(--cc-fg-1);
  margin-top: 2px;
}
.cv-v3 .cv-tool-result__plate-vin {
  font-family: var(--cc-font-mono);
  font-size: 17px;
  font-weight: 700;
  color: var(--cc-blue);
  letter-spacing: 0.04em;
  margin-top: 4px;
}
@media (max-width: 640px) {
  .cv-v3 .cv-tool-result__plate-band { gap: 14px; }
}

/* === 21.4 additions — plate result container + band internals (license-plate-lookup.php
   legacy-class removal, d0797e9 precedent). --plate carries the result's top spacing
   (replaces the removed legacy .tool-result margin-top; deliberately NOT a bare
   .cv-tool-result rule — recall-lookup compounds that marker). plate-main / plate-vehicle
   map FreeToolsPage.jsx PlateLookup L226-229 inline styles 1:1 (flex:1 min-width:200 /
   14px fg-2 600 mt6). plate-actions / plate-copy skin the contract-kept Copy VIN button
   (#plate-copy-btn — functional addition, not in the bundle) with cc tokens as a white
   secondary control that harmonizes with the #EFF6FF band + navy run-btn. === */
.cv-v3 .cv-tool-result--plate { margin-top: 16px; }
.cv-v3 .cv-tool-result__plate-main {
  flex: 1;
  min-width: 200px;
}
.cv-v3 .cv-tool-result__plate-vehicle {
  font-size: 14px;
  color: var(--cc-fg-2);
  font-weight: 600;
  margin-top: 6px;
}
.cv-v3 .cv-tool-result__plate-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.cv-v3 .cv-tool-result__plate-copy {
  display: inline-flex;
  align-items: center;
  padding: 10px 16px;
  background: #fff;
  color: var(--cc-navy);
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 13px;
  cursor: pointer;
  white-space: nowrap;
  box-shadow: 0 1px 2px rgba(16, 24, 40, 0.05);
}
.cv-v3 .cv-tool-result__plate-copy--copied {
  color: var(--cc-green);
  border-color: var(--cc-green);
}

/* === 21.5 cv-tool-result--calc (slider grid + gradient result panel; payment-calculator.php; TCO reuses) === */
/* ftStyles.calcGrid/sliderField/slider/calcResult/calcResultMain/calcResultSide/calcStatCard
   (freetools-styles.jsx L130-146) + range-thumb (vin-decoder.html L13-22, the shared calc-tool
   thumb). Descendant-activated sub-blocks (live inside the already-hidden cv-tool-frame); ZERO
   compound selectors; composes existing --cc-* tokens ONLY (D-16). The .cv-tool-result__slider
   + thumb rules are SHARED — 37-40 (true-cost-of-ownership) reuses calc-grid/slider with zero new
   CSS. On car-payment-calculator.php the inputs are numeric (D-34 contract), so the slider rules
   are inert there; the gradient calc-result panel applies verbatim. Slider/thumb transitions wrapped
   in @media (prefers-reduced-motion: no-preference) per D-33. */
.cv-v3 .cv-tool-result__calc-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
  margin-bottom: 24px;
}
.cv-v3 .cv-tool-result__slider-field {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.cv-v3 .cv-tool-result__slider-label {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  font-size: 12px;
  font-weight: 600;
  color: var(--cc-fg-3);
}
.cv-v3 .cv-tool-result__slider-value {
  font-family: var(--cc-font-display);
  font-size: 16px;
  font-weight: 700;
  color: var(--cc-navy);
  letter-spacing: -0.01em;
}
.cv-v3 .cv-tool-result__slider {
  height: 6px;
  border-radius: 9999px;
  background: var(--cc-border);
  appearance: none;
  -webkit-appearance: none;
  outline: none;
  cursor: pointer;
  accent-color: var(--cc-navy);
}
.cv-v3 .cv-tool-result__slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 20px;
  height: 20px;
  border-radius: 9999px;
  background: var(--cc-navy);
  border: 3px solid #fff;
  box-shadow: 0 2px 6px rgba(0, 65, 106, 0.30);
  cursor: pointer;
}
.cv-v3 .cv-tool-result__slider::-moz-range-thumb {
  width: 20px;
  height: 20px;
  border-radius: 9999px;
  background: var(--cc-navy);
  border: 3px solid #fff;
  box-shadow: 0 2px 6px rgba(0, 65, 106, 0.30);
  cursor: pointer;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-result__slider::-webkit-slider-thumb { transition: transform 120ms ease, box-shadow 120ms ease; }
  .cv-v3 .cv-tool-result__slider::-moz-range-thumb { transition: transform 120ms ease, box-shadow 120ms ease; }
}
.cv-v3 .cv-tool-result__calc-result {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  gap: 24px;
  padding: 28px 30px;
  border-radius: 16px;
  background: linear-gradient(135deg, var(--cc-navy-bg), #F0F7FA);
  border: 1px solid var(--cc-navy-10);
}
.cv-v3 .cv-tool-result__calc-result-main {
  display: flex;
  flex-direction: column;
}
.cv-v3 .cv-tool-result__calc-monthly {
  font-family: var(--cc-font-display);
  font-size: 56px;
  font-weight: 700;
  color: var(--cc-navy);
  letter-spacing: -0.035em;
  line-height: 1;
  margin-top: 8px;
}
.cv-v3 .cv-tool-result__calc-subline {
  font-size: 13px;
  color: var(--cc-fg-4);
  margin-top: 8px;
}
.cv-v3 .cv-tool-result__calc-result-side {
  display: flex;
  flex-direction: column;
  gap: 10px;
  justify-content: center;
}
.cv-v3 .cv-tool-result__calc-stat-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 12px 16px;
}
.cv-v3 .cv-tool-result__calc-stat-value {
  font-family: var(--cc-font-display);
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin-top: 4px;
  color: var(--cc-fg-1);
}
/* Amber stat value (bundle CalcStat accent="amber" — #B45309; total-interest emphasis). */
.cv-v3 .cv-tool-result__calc-stat-value--amber { color: #B45309; }
@media (max-width: 768px) {
  .cv-v3 .cv-tool-result__calc-grid { grid-template-columns: 1fr; }
  .cv-v3 .cv-tool-result__calc-result { grid-template-columns: 1fr; }
  .cv-v3 .cv-tool-result__calc-monthly { font-size: 44px; }
}

/* §21.5 addendum (37-39 fix): calc subline term emphasis — bundle PaymentCalc subline
   `for <strong style={{color:"var(--cc-fg-2)"}}>{term} months</strong> at {rate}% APR`
   (FreeToolsPage.jsx L280). */
.cv-v3 .cv-tool-result__calc-subline strong {
  color: var(--cc-fg-2);
}
/* §21.5 addendum (37-39 fix): tax checkbox row (D-34 numeric-input reconciliation —
   no bundle equivalent; replaces legacy .tool-calc__check layout with navy accent,
   --cc-* tokens only per D-16). */
.cv-v3 .cv-tool-result__calc-check {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
  font-size: 13px;
  color: var(--cc-fg-3);
  cursor: pointer;
}
.cv-v3 .cv-tool-result__calc-check input {
  accent-color: var(--cc-navy);
  cursor: pointer;
}

/* === 21.5b cv-tool-result__slider --green variant (true-cost-of-ownership.php; TcoCalc accent="green", FreeToolsPage.jsx L339-343 + Slider L479-490) === */
/* Mirrors the §21.5 navy slider/value rules with var(--cc-green) (#008753) and the
   matching rgba(0,135,83,0.30) thumb shadow. Modifier classes compose onto the shared
   .cv-tool-result__slider / __slider-value base — no base rules redefined; the §21.5
   reduced-motion thumb transitions already match these elements via the base class. */
.cv-v3 .cv-tool-result__slider-value--green {
  color: var(--cc-green);
}
.cv-v3 .cv-tool-result__slider--green {
  accent-color: var(--cc-green);
}
.cv-v3 .cv-tool-result__slider--green::-webkit-slider-thumb {
  background: var(--cc-green);
  box-shadow: 0 2px 6px rgba(0, 135, 83, 0.30);
}
.cv-v3 .cv-tool-result__slider--green::-moz-range-thumb {
  background: var(--cc-green);
  box-shadow: 0 2px 6px rgba(0, 135, 83, 0.30);
}

/* === 21.6 cv-tool-result--tco (stacked bar + legend; true-cost-of-ownership.php; reuses §21.5 calc-grid) === */
/* ftStyles.tcoResult/stackedBar/legendGrid/legendItem (freetools-styles.jsx L148-163) +
   tco-total/tco-per-year display numbers + legend swatch/label/value (FreeToolsPage.jsx L346-376).
   Descendant-activated sub-blocks (live inside the already-hidden cv-tool-frame); ZERO compound
   selectors; composes existing --cc-* tokens ONLY (D-16). REUSES §21.5 cv-tool-result__calc-grid +
   __slider-field + __slider-label from 37-39 for the input row (zero new CSS for the sliders). Adds
   ONLY this TCO result block. The stacked-bar is display:flex and each segment keeps its existing
   inline `flex:N` (the inline live-calc script sets el.style.flex, NOT width — D-34 byte-identical);
   so the seg rule adds only height:100% and a reduced-motion-gated flex transition. Green-tint result
   panel = bundle ACCENT('green').bg/bd literals (#F0FDF4 / #00875340 — no green-bg/green-10 token
   exists in this design system; bundle-verbatim, same precedent as §21.7 auction). */
.cv-v3 .cv-tool-result__tco-result {
  padding: 26px 28px;
  border-radius: 16px;
  background: linear-gradient(135deg, #F0FDF4, #F8FAFC);
  border: 1px solid #00875340;
}
.cv-v3 .cv-tool-result__tco-head {
  display: flex;
  align-items: baseline;
  gap: 14px;
  flex-wrap: wrap;
  margin-bottom: 22px;
}
.cv-v3 .cv-tool-result__tco-head-right {
  margin-left: auto;
  text-align: right;
}
.cv-v3 .cv-tool-result__tco-total {
  font-family: var(--cc-font-display);
  font-size: 52px;
  font-weight: 700;
  color: var(--cc-green);
  letter-spacing: -0.035em;
  line-height: 1;
  margin-top: 8px;
}
.cv-v3 .cv-tool-result__tco-per-year {
  font-family: var(--cc-font-display);
  font-size: 26px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.025em;
  margin-top: 8px;
}
.cv-v3 .cv-tool-result__stacked-bar {
  display: flex;
  height: 18px;
  border-radius: 9999px;
  overflow: hidden;
  margin-bottom: 22px;
  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.08);
}
.cv-v3 .cv-tool-result__stacked-bar-seg {
  height: 100%;
  min-width: 0;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-result__stacked-bar-seg { transition: flex 0.3s ease; }
}
.cv-v3 .cv-tool-result__legend-grid {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 10px;
}
.cv-v3 .cv-tool-result__legend-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
}
.cv-v3 .cv-tool-result__legend-swatch {
  width: 10px;
  height: 10px;
  border-radius: 3px;
  flex-shrink: 0;
}
.cv-v3 .cv-tool-result__legend-label {
  flex: 1;
  font-size: 13px;
  color: var(--cc-fg-2);
  font-weight: 500;
}
.cv-v3 .cv-tool-result__legend-value {
  font-family: var(--cc-font-display);
  font-size: 14px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.01em;
}
@media (max-width: 768px) {
  /* auto-fit collapses to a single column on phones. A fixed `1fr 1fr` floors
     each track at the item min-content (~197px: single-word labels like
     "Depreciation"/"Registration" + value can't wrap or shrink), so two columns
     demanded ~410px and overflowed narrow viewports — clipping the right column.
     minmax(min(200px,100%),1fr) keeps 2 columns on tablets, drops to 1 on phones,
     and never overflows (the min never exceeds the container via min(...,100%)). */
  .cv-v3 .cv-tool-result__legend-grid { grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr)); }
  .cv-v3 .cv-tool-result__tco-total { font-size: 40px; }
}

/* === 21.7 cv-tool-result--auction (auction lots grid; auction-history.php) === */
/* ftStyles.auctionSummary/lotsGrid/lotCard/lotImg/lotSource/lotDamage (freetools-styles.jsx L166-190).
   Descendant-activated sub-blocks (live inside the already-hidden cv-tool-frame); ZERO compound
   selectors. Green-tint summary band = bundle ACCENT('green').bg/bd literals (#F0FDF4 / #00875340 —
   no green-bg/green-10 token exists in this design system; bundle-verbatim). */
.cv-v3 .cv-tool-result__auction-summary {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
  padding: 14px 20px;
  border-radius: 12px;
  margin-bottom: 16px;
  background: #F0FDF4;
  border: 1px solid #00875340;
}
.cv-v3 .cv-tool-result__lots-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 14px;
}
.cv-v3 .cv-tool-result__lot-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.06);
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-result__lot-card {
    transition: transform 180ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 180ms;
  }
  .cv-v3 .cv-tool-result__lot-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 8px 20px rgba(0, 65, 106, 0.10);
  }
}
.cv-v3 .cv-tool-result__lot-img {
  position: relative;
  height: 150px;
  background: #1a1a2e;
}
.cv-v3 .cv-tool-result__lot-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.cv-v3 .cv-tool-result__lot-img-empty {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #5a6478, #7a6850);
  color: #fff;
  font-size: 11px;
  font-weight: 600;
}
.cv-v3 .cv-tool-result__lot-source {
  position: absolute;
  top: 8px;
  left: 8px;
  font-size: 10px;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 4px;
  letter-spacing: 0.06em;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.20);
  background: #fff;
  color: var(--cc-navy);
}
.cv-v3 .cv-tool-result__lot-source--copart {
  background: #0254A2;
  color: #fff;
}
.cv-v3 .cv-tool-result__lot-source--iaai {
  background: #C8102E;
  color: #fff;
}
.cv-v3 .cv-tool-result__lot-damage {
  position: absolute;
  bottom: 8px;
  left: 8px;
  background: #dc2626;
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 4px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.20);
}
.cv-v3 .cv-tool-result__lot-body {
  padding: 14px 16px;
}
.cv-v3 .cv-tool-result__lot-date {
  font-size: 11px;
  color: var(--cc-fg-4);
  font-weight: 600;
}
.cv-v3 .cv-tool-result__lot-meta {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-top: 4px;
}
.cv-v3 .cv-tool-result__lot-price {
  font-family: var(--cc-font-display);
  font-size: 24px;
  font-weight: 700;
  color: var(--cc-green);
  letter-spacing: -0.025em;
}
.cv-v3 .cv-tool-result__lot-miles {
  font-size: 11px;
  font-family: var(--cc-font-mono);
  color: var(--cc-fg-4);
}
.cv-v3 .cv-tool-result__lot-num {
  font-size: 10px;
  font-family: var(--cc-font-mono);
  color: var(--cc-fg-5);
  margin-top: 6px;
}
@media (max-width: 640px) {
  .cv-v3 .cv-tool-result__lots-grid { grid-template-columns: 1fr; }
}

/* === 21.8 cv-tool-upsell (ftStyles.upsell/upsellTitle/upsellSub/upsellBtn; freetools-styles.jsx L192-213) === */
.cv-tool-upsell { display: none; }
.cv-v3 .cv-tool-upsell {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 28px;
  flex-wrap: wrap;
  background: linear-gradient(135deg, var(--cc-navy) 0%, #002847 100%);
  border: 1px solid var(--cc-navy);
  border-radius: 16px;
  padding: 26px 32px;
  color: #fff;
  margin-top: 20px;
}
.cv-v3 .cv-tool-upsell__eyebrow {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #fff;
  opacity: 0.8;
}
.cv-v3 .cv-tool-upsell__title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 24px;
  letter-spacing: -0.02em;
  color: #fff;
  margin: 6px 0 4px;
}
.cv-v3 .cv-tool-upsell__sub {
  font-size: 14px;
  color: rgba(255, 255, 255, 0.78);
  margin: 0;
  max-width: 560px;
  line-height: 1.55;
}
.cv-v3 .cv-tool-upsell__btn {
  background: #FFD56B;
  color: var(--cc-navy);
  border: none;
  padding: 14px 26px;
  border-radius: 11px;
  font-family: var(--cc-font-body);
  font-weight: 800;
  font-size: 15px;
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
  display: inline-block;
  box-shadow: 0 6px 18px rgba(255, 213, 107, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.3);
}

/* === 21.9 cv-tool-related (ft-related; vin-decoder.html L28-60) === */
.cv-tool-related { display: none; }
.cv-v3 .cv-tool-related {
  display: block;
  background: var(--cc-bg-soft);
  padding: 56px 24px;
  margin-top: 32px;
}
.cv-v3 .cv-tool-related__inner {
  max-width: 1080px;
  margin: 0 auto;
}
.cv-v3 .cv-tool-related__h3 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 22px;
  letter-spacing: -0.02em;
  color: var(--cc-fg-1);
  margin: 0 0 16px;
}
.cv-v3 .cv-tool-related__grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 10px;
}
.cv-v3 .cv-tool-related__card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 14px;
  text-decoration: none;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-related__card { transition: border-color 160ms ease, transform 160ms ease; }
  .cv-v3 .cv-tool-related__card:hover {
    border-color: var(--cc-navy);
    transform: translateY(-2px);
  }
}
.cv-v3 .cv-tool-related__card:hover { border-color: var(--cc-navy); }
.cv-v3 .cv-tool-related__lab {
  font-weight: 700;
  font-size: 13px;
  color: var(--cc-fg-1);
}
.cv-v3 .cv-tool-related__sub {
  font-size: 11px;
  color: var(--cc-fg-4);
}
@media (max-width: 900px) {
  .cv-v3 .cv-tool-related__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .cv-v3 .cv-tool-related__grid { grid-template-columns: 1fr; }
}

/* === 21 responsive (cv-tool-page + cv-tool-frame + cv-tool-upsell) === */
@media (max-width: 768px) {
  .cv-v3 .cv-tool-page__body { padding: 24px 16px; }
  .cv-v3 .cv-tool-frame { padding: 20px; }
  .cv-v3 .cv-tool-frame__run-btn {
    width: 100%;
    justify-content: center;
  }
  .cv-v3 .cv-tool-upsell { padding: 22px; }
}

/* ============================================================
   Section 25: Tool hub page (cv-tool-hub — v2.3 FreeToolsIndex 6-card 3-col grid) — tools.php
   Ported VERBATIM from freetools-index-styles.jsx (ftIxStyles L2-128) +
   free-tools.html (hover/responsive L11-30). References the §21 ftix pulse animation
   (defined once in §21 — DO NOT redefine here). Composes existing --cc-* tokens only (D-16).
   Bare default-hide + .cv-v3 descendant activation; ZERO compound cv-v3/cv-tool-hub selectors.
   This is a FIXED 3-col card grid (NOT the §24 FeaturesSection 12-col grid) — D-WF23 Deliverable 8 correction.
   ============================================================ */

/* === 25 cv-tool-hub (scaffold) === */
.cv-tool-hub { display: none; }
.cv-v3 .cv-tool-hub { display: block; }

/* === 25.1 Hero gradient band (ftIxStyles.hero/heroInner/heroBadge/heroBadgeDot/h1/lead L4-33) === */
.cv-v3 .cv-tool-hub__hero {
  padding: 56px 24px 32px;
  background: linear-gradient(180deg, #fff 0%, var(--cc-bg-soft) 100%);
  border-bottom: 1px solid var(--cc-border);
}
.cv-v3 .cv-tool-hub__hero-inner {
  max-width: 1080px;
  margin: 0 auto;
  text-align: center;
}
.cv-v3 .cv-tool-hub__hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 7px 16px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  font-size: 13px;
  color: var(--cc-fg-3);
  font-weight: 500;
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.05);
  margin-bottom: 18px;
}
.cv-v3 .cv-tool-hub__hero-badge strong { color: var(--cc-fg-1); }
.cv-v3 .cv-tool-hub__hero-badge-dot {
  width: 7px;
  height: 7px;
  border-radius: 9999px;
  background: var(--cc-green);
  box-shadow: 0 0 0 0 rgba(0, 135, 83, 0.55);
  flex-shrink: 0;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-hub__hero-badge-dot {
    animation: ftix-pulse 1.8s ease-in-out infinite;
  }
}
.cv-v3 .cv-tool-hub__h1 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(2.25rem, 4.5vw, 3.5rem);
  letter-spacing: -0.035em;
  line-height: 1.05;
  color: var(--cc-fg-1);
  margin: 0;
}
.cv-v3 .cv-tool-hub__lead {
  font-size: 18px;
  line-height: 1.6;
  color: var(--cc-fg-3);
  max-width: 680px;
  margin: 16px auto 0;
}
.cv-v3 .cv-tool-hub__lead strong { color: var(--cc-fg-1); }

/* === 25.2 Grid section + 3-col grid (ftIxStyles.gridSection/grid L36-39) === */
.cv-v3 .cv-tool-hub__section {
  padding: 40px 24px 80px;
  background: var(--cc-bg-soft);
}
.cv-v3 .cv-tool-hub__inner {
  max-width: 1080px;
  margin: 0 auto;
}
.cv-v3 .cv-tool-hub__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

/* === 25.3 Card (ftIxStyles.card + cardIcon/cardPill/cardTitle/cardDesc/cardBullets/cardBullet/cardCheck/cardFooter/cardCta L42-90) === */
.cv-v3 .cv-tool-hub__card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  padding: 22px 24px 18px;
  text-decoration: none;
  display: flex;
  flex-direction: column;
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.05);
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-tool-hub__card {
    transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 200ms, border-color 200ms;
  }
  /* hover (free-tools.html L11-15) */
  .cv-v3 .cv-tool-hub__card:hover {
    transform: translateY(-4px);
    box-shadow: 0 16px 36px rgba(0, 65, 106, 0.12), 0 3px 8px rgba(0, 0, 0, 0.04);
    border-color: var(--cc-fg-5);
  }
  /* featured hover (free-tools.html L16-18) */
  .cv-v3 .cv-tool-hub__card--featured:hover {
    box-shadow: 0 18px 40px rgba(0, 135, 83, 0.18), 0 3px 10px rgba(0, 0, 0, 0.06);
  }
}
/* featured card — 2px green border + green shadow (FreeToolsIndex.jsx L140; auction accent = green) */
.cv-v3 .cv-tool-hub__card--featured {
  border-width: 2px;
  border-color: var(--cc-green);
  box-shadow: 0 8px 20px rgba(0, 135, 83, 0.10), 0 1px 3px rgba(0, 0, 0, 0.04);
}

.cv-v3 .cv-tool-hub__card-top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
}
.cv-v3 .cv-tool-hub__card-icon {
  width: 48px;
  height: 48px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.cv-v3 .cv-tool-hub__card-pill {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 10px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
  white-space: nowrap;
}
.cv-v3 .cv-tool-hub__card-pill-dot {
  width: 5px;
  height: 5px;
  border-radius: 9999px;
  background: currentColor;
  flex-shrink: 0;
}
.cv-v3 .cv-tool-hub__card-title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 21px;
  letter-spacing: -0.02em;
  line-height: 1.15;
  color: var(--cc-fg-1);
  margin: 18px 0 6px;
}
.cv-v3 .cv-tool-hub__card-desc {
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  margin: 0 0 14px;
}
.cv-v3 .cv-tool-hub__card-bullets {
  list-style: none;
  margin: 0 0 16px;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex: 1;
}
.cv-v3 .cv-tool-hub__card-bullet {
  display: flex;
  align-items: center;
  gap: 9px;
  font-size: 13px;
  color: var(--cc-fg-2);
}
.cv-v3 .cv-tool-hub__card-check {
  width: 18px;
  height: 18px;
  border-radius: 9999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.cv-v3 .cv-tool-hub__card-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 14px;
  margin-top: auto;
  border-top: 1px solid var(--cc-border);
}
.cv-v3 .cv-tool-hub__card-takes {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--cc-fg-4);
  font-size: 12px;
}
.cv-v3 .cv-tool-hub__card-cta {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.02em;
}

/* === 25.4 Card accent variants (icon + pill + check + footer-border + cta + featured border)
   Palette reuses §21 eyebrow values (D-16 token reuse):
   navy bg --cc-navy-bg / fg --cc-navy / bd --cc-navy-10
   blue #EFF6FF / --cc-blue / #BFDBFE
   green #F0FDF4 / --cc-green / #00875340
   amber #FFFBEB / #B45309 / #FCD34D80 === */
.cv-v3 .cv-tool-hub__card--navy .cv-tool-hub__card-icon,
.cv-v3 .cv-tool-hub__card--navy .cv-tool-hub__card-check {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy-10);
}
.cv-v3 .cv-tool-hub__card--navy .cv-tool-hub__card-pill {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy-10);
}
.cv-v3 .cv-tool-hub__card--navy .cv-tool-hub__card-footer { border-top-color: var(--cc-navy-10); }
.cv-v3 .cv-tool-hub__card--navy .cv-tool-hub__card-cta { color: var(--cc-navy); }

.cv-v3 .cv-tool-hub__card--blue .cv-tool-hub__card-icon,
.cv-v3 .cv-tool-hub__card--blue .cv-tool-hub__card-check {
  background: #EFF6FF;
  color: var(--cc-blue);
  border: 1px solid #BFDBFE;
}
.cv-v3 .cv-tool-hub__card--blue .cv-tool-hub__card-pill {
  background: #EFF6FF;
  color: var(--cc-blue);
  border: 1px solid #BFDBFE;
}
.cv-v3 .cv-tool-hub__card--blue .cv-tool-hub__card-footer { border-top-color: #BFDBFE; }
.cv-v3 .cv-tool-hub__card--blue .cv-tool-hub__card-cta { color: var(--cc-blue); }

.cv-v3 .cv-tool-hub__card--green .cv-tool-hub__card-icon,
.cv-v3 .cv-tool-hub__card--green .cv-tool-hub__card-check {
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
}
.cv-v3 .cv-tool-hub__card--green .cv-tool-hub__card-pill {
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
}
.cv-v3 .cv-tool-hub__card--green .cv-tool-hub__card-footer { border-top-color: #00875340; }
.cv-v3 .cv-tool-hub__card--green .cv-tool-hub__card-cta { color: var(--cc-green); }

.cv-v3 .cv-tool-hub__card--amber .cv-tool-hub__card-icon,
.cv-v3 .cv-tool-hub__card--amber .cv-tool-hub__card-check {
  background: #FFFBEB;
  color: #B45309;
  border: 1px solid #FCD34D80;
}
.cv-v3 .cv-tool-hub__card--amber .cv-tool-hub__card-pill {
  background: #FFFBEB;
  color: #B45309;
  border: 1px solid #FCD34D80;
}
.cv-v3 .cv-tool-hub__card--amber .cv-tool-hub__card-footer { border-top-color: #FCD34D80; }
.cv-v3 .cv-tool-hub__card--amber .cv-tool-hub__card-cta { color: #B45309; }

/* === 25.5 Bottom-CTA navy strip (ftIxStyles.bottomCta/bottomCtaTitle/bottomCtaSub/bottomCtaBullets/bottomCtaBullet/bottomCtaBtn L93-125) === */
.cv-v3 .cv-tool-hub__bottom-cta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  flex-wrap: wrap;
  background: linear-gradient(135deg, var(--cc-navy) 0%, #002847 100%);
  border: 1px solid var(--cc-navy);
  border-radius: 16px;
  padding: 32px 36px;
  margin-top: 36px;
  color: #fff;
  position: relative;
  overflow: hidden;
}
.cv-v3 .cv-tool-hub__bottom-cta-eyebrow {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #FFD56B;
}
.cv-v3 .cv-tool-hub__bottom-cta-title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 26px;
  letter-spacing: -0.025em;
  color: #fff;
  margin: 6px 0 6px;
}
.cv-v3 .cv-tool-hub__bottom-cta-sub {
  font-size: 14px;
  color: rgba(255, 255, 255, 0.78);
  margin: 0 0 12px;
  max-width: 580px;
  line-height: 1.55;
}
.cv-v3 .cv-tool-hub__bottom-cta-bullets {
  display: flex;
  gap: 18px;
  flex-wrap: wrap;
  font-size: 12px;
  color: rgba(255, 255, 255, 0.85);
  font-weight: 600;
}
.cv-v3 .cv-tool-hub__bottom-cta-bullet {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.cv-v3 .cv-tool-hub__bottom-cta-btn {
  display: inline-flex;
  align-items: center;
  background: #FFD56B;
  color: var(--cc-navy);
  border: none;
  padding: 14px 26px;
  border-radius: 11px;
  font-family: var(--cc-font-body);
  font-weight: 800;
  font-size: 15px;
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
  box-shadow: 0 6px 18px rgba(255, 213, 107, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.3);
  letter-spacing: -0.01em;
}

/* === 25.6 Responsive (free-tools.html L25-30) === */
@media (max-width: 1000px) {
  .cv-v3 .cv-tool-hub__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .cv-v3 .cv-tool-hub__grid { grid-template-columns: 1fr; }
  .cv-v3 .cv-tool-hub__bottom-cta { padding: 26px 22px; }
}

/* --- Section 26: Sample report page (cv-sample-report + cv-sample-card) — sample-report.php ---
   Card-based restyle per D-WF23 Deliverable 5 + D-04 + D-14. ReportViewer.jsx is REJECTED
   (a fictional single-report surface flagged for Wave G per D-WF23-04); sample-report.php stays
   the real preview page (live NHTSA vPIC + recall data, ?type routing). Two BEM blocks:
   cv-sample-report (wrapper: amber notice + ?type tabs) and cv-sample-card (the 6 re-skinned
   sections). The plain hero REUSES the Section 21 cv-tool-page__hero + __breadcrumb + __eyebrow
   scaffold (shipped by 37-35) — NOT duplicated here. Bare default-hide + .cv-v3 descendant
   activation (Wave C 37-12 mandate); zero compound cv-v3/cv-sample descendant selectors; composes existing
   --cc-* tokens ONLY (D-16); tab/card hover transitions wrapped in
   @media (prefers-reduced-motion: no-preference) per D-33. Tools-cluster cohesion (D-WF23-05):
   page OPTS OUT of cv-trust-strip / cv-gradient-h1 / cv-final-cta; conversion surface is the
   Section 21.8 cv-tool-upsell navy band. OPTIONAL enhancement cues borrowed from
   report-viewer-styles.jsx (rvStyles.section/sectionHead/sectionIcon — token-compatible, bundle
   authoritative), NOT a wholesale ReportViewer adoption.

   Bundle sources:
   - design-system/v2.3-source/project/ui_kits/marketing/report-viewer-styles.jsx (rvStyles
     section/sectionHead/sectionIcon/sectionPill enhancement cues for cv-sample-card__title)
   - 37-35-PLAN.md Section 21 cv-tool-page hero + 21.8 cv-tool-upsell + 21.9 cv-tool-related (reused)
   --- */

/* === 26 cv-sample-report (wrapper) === */
.cv-sample-report { display: none; }
.cv-v3 .cv-sample-report { display: block; padding: 0; }
.cv-v3 .cv-sample-report__inner {
  max-width: 980px;
  margin: 0 auto;
  padding: 0 24px 64px;
}

/* === 26.1 Amber demo notice (re-skins .sample-demo-banner) === */
.cv-v3 .cv-sample-report__notice {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 16px 20px;
  background: rgba(245, 158, 11, 0.10);
  border-left: 4px solid #F59E0B;
  border-radius: var(--cc-radius-md);
  margin-bottom: 32px;
}
.cv-v3 .cv-sample-report__notice svg {
  flex: none;
  color: #B45309;
  margin-top: 2px;
}
.cv-v3 .cv-sample-report__notice strong { color: var(--cc-fg-1); }
.cv-v3 .cv-sample-report__notice p {
  margin: 4px 0 0;
  font-size: 14px;
  line-height: 1.55;
  color: var(--cc-fg-3);
}
.cv-v3 .cv-sample-report__notice a {
  color: var(--cc-blue);
  text-decoration: underline;
  font-weight: 600;
}

/* === 26.2 ?type tabs (?type routing preserved server-side — D-34) === */
.cv-v3 .cv-sample-report__tabs {
  display: flex;
  gap: 4px;
  padding: 4px;
  background: #fff;
  border-radius: 9999px;
  max-width: fit-content;
  margin: 0 auto 32px;
  box-shadow: var(--cc-shadow-sm);
}
.cv-v3 .cv-sample-report__tab {
  padding: 8px 20px;
  border-radius: 9999px;
  color: var(--cc-fg-3);
  text-decoration: none;
  font-weight: 500;
  font-size: 14px;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-sample-report__tab { transition: background 140ms ease, color 140ms ease; }
}
.cv-v3 .cv-sample-report__tab--active {
  background: var(--cc-blue);
  color: #fff;
}

/* === 26.3 cv-sample-card (re-skins each of the 6 .sample-section blocks) ===
   Enhancement: __title borrows rvStyles.sectionHead/sectionIcon icon+title treatment
   (report-viewer-styles.jsx L96-112) — token-compatible navy icon + display-font title. */
.cv-sample-card { display: none; }
.cv-v3 .cv-sample-card {
  display: block;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 16px;
  padding: 24px;
  margin-bottom: 16px;
  box-shadow: 0 1px 3px rgba(16, 24, 40, 0.05);
}
.cv-v3 .cv-sample-card__title {
  display: flex;
  align-items: center;
  gap: 12px;
  font-family: var(--cc-font-display);
  font-size: 20px;
  font-weight: 700;
  color: var(--cc-fg-1);
  margin: 0 0 16px;
}
.cv-v3 .cv-sample-card__title svg { color: var(--cc-navy); flex: none; }
.cv-v3 .cv-sample-card__body {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.cv-v3 .cv-sample-card__placeholder {
  padding: 12px;
  background: var(--cc-bg-soft);
  border-radius: var(--cc-radius-md);
  color: var(--cc-fg-3);
  font-style: italic;
}

/* === 26.4 Responsive (free-tools/report-viewer mobile parity) === */
@media (max-width: 768px) {
  .cv-v3 .cv-sample-report__inner { padding: 0 16px 48px; }
  .cv-v3 .cv-sample-report__notice { flex-direction: column; gap: 8px; }
  .cv-v3 .cv-sample-card { padding: 16px; }
}

/* === 22 Pillar guide pages (cv-guide + cv-guide-toc + cv-guide-article + cv-guide__byline E-E-A-T) - cheap-carfax-guide.php + cheap-autocheck-guide.php + carfax-vs-autocheck-comparison.php + carfax-pricing-breakdown.php === */
/* Ported from the v2.2 bundle BlogPage.jsx article-detail layout + blog-styles.jsx (bgStyles
   L107-L188: breadcrumb / postH1 / postLead / articleLayout / tocSticky / tocLabel / tocList /
   tocLink / tocLinkActive / articleBody / h2 / h3 / p / a). The cv-guide__byline E-E-A-T block
   (NEW per absorbed D-30) mirrors bgStyles.authorRow (avatar + name + role + meta dot).
   CANONICAL guide layout — reused VERBATIM (zero new CSS) by 37-44 cheap-autocheck-guide.php +
   37-45 carfax-vs-autocheck-comparison.php + 37-46 carfax-pricing-breakdown.php.
   Scoping (Sections 15-21/24/25/26 precedent): bare default-hide on each module root via
   `.cv-X { display: none }`; activation via descendant combinator under .cv-v3 ONLY; no
   single-element-joined v3-prefixed module rules (Wave C 37-12 mandate). Composes existing
   --cc-* tokens only (D-16). */

/* === 22.1 cv-guide (banner + inner + hero + eyebrow + h1 + sub) === */
.cv-guide { display: none; }
.cv-v3 .cv-guide {
  display: block;
  padding: 48px 24px 64px;
  background: #fff;
}
.cv-v3 .cv-guide__inner {
  max-width: 1200px;
  margin: 0 auto;
}
.cv-v3 .cv-guide__hero {
  text-align: center;
  margin-bottom: 32px;
}
.cv-v3 .cv-guide__eyebrow {
  display: inline-block;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--cc-blue);
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  padding: 4px 12px;
  margin-bottom: 16px;
}
.cv-v3 .cv-guide__h1 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(2rem, 4vw, 3.25rem);
  letter-spacing: -0.035em;
  line-height: 1.05;
  color: var(--cc-fg-1);
  margin: 0 0 16px;
}
.cv-v3 .cv-guide__sub {
  font-family: var(--cc-font-body);
  font-size: 19px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  max-width: 720px;
  margin: 0 auto;
}

/* === 22.2 cv-guide__byline (D-30 E-E-A-T — avatar/initials + author + title + last-updated/read-time; mirrors bgStyles.authorRow) === */
.cv-v3 .cv-guide__byline {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 20px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: var(--cc-radius-md);
  margin: 24px auto 0;
  max-width: fit-content;
}
.cv-v3 .cv-guide__byline-avatar {
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  object-fit: cover;
  flex-shrink: 0;
}
.cv-v3 .cv-guide__byline-initials {
  width: 32px;
  height: 32px;
  border-radius: 9999px;
  background: var(--cc-navy);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 13px;
  flex-shrink: 0;
}
.cv-v3 .cv-guide__byline-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.cv-v3 .cv-guide__byline-text strong {
  font-size: 14px;
  font-weight: 600;
  color: var(--cc-navy);
}
.cv-v3 .cv-guide__byline-title {
  font-size: 12px;
  color: var(--cc-fg-3);
}
.cv-v3 .cv-guide__byline-meta {
  margin-left: auto;
  padding-left: 16px;
  font-size: 12px;
  color: var(--cc-fg-3);
}

/* === 22.1b cv-guide__layout (2-col grid: sticky TOC 280px + article 1fr; mirrors bgStyles.articleLayout) === */
.cv-v3 .cv-guide__layout {
  display: grid;
  grid-template-columns: 280px 1fr;
  gap: 48px;
  max-width: 1200px;
  margin: 0 auto;
  align-items: start;
}

/* === 22.3 cv-guide-toc (sticky aside — heading + list + link + link--active scroll-spy state; mirrors bgStyles.tocSticky/tocLabel/tocList/tocLink/tocLinkActive) === */
.cv-guide-toc { display: none; }
.cv-v3 .cv-guide-toc {
  display: block;
  position: sticky;
  top: 100px;
  max-height: calc(100vh - 120px);
  overflow-y: auto;
  padding: 24px;
  background: var(--cc-bg-soft);
  border-radius: var(--cc-radius-md);
}
.cv-v3 .cv-guide-toc__heading {
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--cc-fg-3);
  margin-bottom: 16px;
  font-weight: 600;
}
.cv-v3 .cv-guide-toc__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.cv-v3 .cv-guide-toc__link {
  display: block;
  padding: 8px 12px;
  font-size: 14px;
  color: var(--cc-fg-2);
  text-decoration: none;
  border-radius: var(--cc-radius-sm);
  border-left: 2px solid transparent;
}
.cv-v3 .cv-guide-toc__link:hover {
  background: rgba(0, 102, 255, 0.06);
  color: var(--cc-blue);
}
.cv-v3 .cv-guide-toc__link--active {
  border-left-color: var(--cc-blue);
  color: var(--cc-navy);
  font-weight: 600;
}
/* Focus-visible ring for keyboard nav of TOC anchor links (a11y per absorbed D-46). */
.cv-v3 .cv-guide-toc__link:focus-visible {
  outline: 2px solid var(--cc-blue);
  outline-offset: 2px;
}

/* === 22.4 cv-guide-article (article body reading column + h2/h3/p/a typography; mirrors bgStyles.articleBody/h2/h3/p/a) === */
.cv-guide-article { display: none; }
.cv-v3 .cv-guide-article {
  display: block;
  max-width: 720px;
  font-family: var(--cc-font-body);
  line-height: 1.7;
  font-size: 17px;
  color: var(--cc-fg-2);
}
.cv-v3 .cv-guide-article h2 {
  font-family: var(--cc-font-display);
  font-size: 30px;
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.15;
  color: var(--cc-navy);
  margin: 44px 0 16px;
  scroll-margin-top: 100px;
}
.cv-v3 .cv-guide-article h3 {
  font-family: var(--cc-font-display);
  font-size: 22px;
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.2;
  color: var(--cc-navy);
  margin: 32px 0 12px;
}
.cv-v3 .cv-guide-article p {
  margin: 0 0 18px;
}
.cv-v3 .cv-guide-article ul,
.cv-v3 .cv-guide-article ol {
  margin: 0 0 20px;
  padding-left: 22px;
}
.cv-v3 .cv-guide-article li {
  margin-bottom: 8px;
  line-height: 1.65;
}
.cv-v3 .cv-guide-article a {
  color: var(--cc-blue);
  text-decoration: underline;
}
.cv-v3 .cv-guide-article table {
  width: 100%;
  border-collapse: collapse;
  margin: 24px 0;
  font-size: 15px;
}
.cv-v3 .cv-guide-article th,
.cv-v3 .cv-guide-article td {
  text-align: left;
  padding: 12px 16px;
  border-bottom: 1px solid var(--cc-border-soft);
}
.cv-v3 .cv-guide-article th {
  font-weight: 600;
  color: var(--cc-navy);
}

/* === 22.5 Responsive (mobile: collapse to single column; TOC loses sticky, moves above article) === */
@media (max-width: 1024px) {
  .cv-v3 .cv-guide__layout {
    grid-template-columns: 1fr;
    gap: 24px;
  }
  .cv-v3 .cv-guide-toc {
    position: static;
    max-height: none;
    overflow-y: visible;
  }
}
@media (max-width: 768px) {
  .cv-v3 .cv-guide { padding: 32px 16px 48px; }
  .cv-v3 .cv-guide__byline {
    max-width: 100%;
    flex-wrap: wrap;
  }
  .cv-v3 .cv-guide__byline-meta {
    margin-left: 0;
    padding-left: 0;
    width: 100%;
  }
  .cv-v3 .cv-guide-article { font-size: 16px; }
  .cv-v3 .cv-guide-article h2 { font-size: 26px; }
  .cv-v3 .cv-guide-article h3 { font-size: 20px; }
}

/* === 23 State listing pages (cv-listing-state + cv-listing-rank) - state-page.php + salvage-title-rates-by-state.php === */
/* Ported from the v2.2 bundle BlogPage.jsx category/article layout + FeaturesSection.jsx
   card rhythm + HeroSection.jsx hero ordering (TrustStrip ABOVE h1). state-page.php serves
   100 per-state URLs (50 states x 2 report types) from a single template; the per-state
   unique first-100-words lede is preserved verbatim (Pitfall 8 Dec-2025 thin-content filter).
   cv-listing-state is the NEW canonical listing pattern established here (banner + hero + lede
   + state-prose reading column + neighboring-states pill strip + state-cta-banner); reused by
   37-48 salvage-title-rates-by-state.php which extends it with §23.2 cv-listing-rank.
   Scoping (Sections 15-22/24/25/26 precedent): bare default-hide on each module root via
   `.cv-X { display: none }`; activation via descendant combinator under .cv-v3 ONLY; no
   single-element-joined v3-prefixed module rules (Wave C 37-12 mandate; ZERO compound
   v3-joined cv-listing-state selectors). Composes existing --cc-* tokens only (D-16). */

/* === 23.1 cv-listing-state (banner + inner + hero + eyebrow + h1 + lede + prose + neighbors + cta-banner) === */
.cv-listing-state { display: none; }
.cv-v3 .cv-listing-state {
  display: block;
  padding: 48px 24px 64px;
  background: #fff;
}
.cv-v3 .cv-listing-state__inner {
  max-width: 980px;
  margin: 0 auto;
}

/* Hero — TrustStrip ABOVE h1 (HeroSection.jsx L41-43), centered, eyebrow pill -> gradient h1 -> lede. */
.cv-v3 .cv-listing-state__hero {
  text-align: center;
  margin-bottom: 32px;
}
.cv-v3 .cv-listing-state__eyebrow {
  display: inline-block;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--cc-blue);
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  padding: 4px 12px;
  margin: 16px 0;
}
.cv-v3 .cv-listing-state__h1 {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: clamp(2rem, 4vw, 3.25rem);
  letter-spacing: -0.035em;
  line-height: 1.05;
  color: var(--cc-fg-1);
  margin: 0 0 16px;
}
/* Per-state unique first-100-words lede (state-lede compound). PRESERVED copy per Pitfall 8. */
.cv-v3 .cv-listing-state__lede {
  font-family: var(--cc-font-body);
  font-size: 18px;
  line-height: 1.5;
  color: var(--cc-fg-2);
  margin: 16px auto 32px;
  max-width: 720px;
}
.cv-v3 .cv-listing-state__lede strong {
  color: var(--cc-navy);
  font-weight: 700;
}

/* State prose reading column (BlogPage.jsx articleBody rhythm) — h2/h3/p/list/table typography. */
.cv-listing-state__prose { display: none; }
.cv-v3 .cv-listing-state__prose {
  display: block;
  max-width: 720px;
  margin: 0 auto;
  font-family: var(--cc-font-body);
  line-height: 1.6;
  font-size: 16px;
  color: var(--cc-fg-2);
}
.cv-v3 .cv-listing-state__prose h2 {
  font-family: var(--cc-font-display);
  font-size: 24px;
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.15;
  color: var(--cc-navy);
  margin: 32px 0 12px;
  scroll-margin-top: 100px;
}
.cv-v3 .cv-listing-state__prose h3 {
  font-family: var(--cc-font-display);
  font-size: 19px;
  font-weight: 600;
  letter-spacing: -0.015em;
  line-height: 1.2;
  color: var(--cc-navy);
  margin: 24px 0 10px;
}
.cv-v3 .cv-listing-state__prose p {
  margin: 0 0 16px;
}
.cv-v3 .cv-listing-state__prose ul,
.cv-v3 .cv-listing-state__prose ol {
  margin: 0 0 18px;
  padding-left: 22px;
}
.cv-v3 .cv-listing-state__prose li {
  margin-bottom: 8px;
  line-height: 1.6;
}
.cv-v3 .cv-listing-state__prose a {
  color: var(--cc-blue);
  text-decoration: underline;
}
.cv-v3 .cv-listing-state__prose table {
  width: 100%;
  border-collapse: collapse;
  margin: 24px 0;
  font-size: 15px;
}
.cv-v3 .cv-listing-state__prose th,
.cv-v3 .cv-listing-state__prose td {
  text-align: left;
  padding: 12px 16px;
  border-bottom: 1px solid var(--cc-border-soft);
}
.cv-v3 .cv-listing-state__prose th {
  font-weight: 600;
  color: var(--cc-navy);
}
/* State-fact callout card inside prose (left-accent rail). */
.cv-v3 .cv-listing-state__fact {
  background: var(--cc-bg-soft);
  border-left: 4px solid var(--cc-green);
  border-radius: var(--cc-radius-md);
  padding: 16px 20px;
  margin: 24px 0;
}
.cv-v3 .cv-listing-state__fact-label {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--cc-fg-3);
  margin: 0 0 6px;
}
.cv-v3 .cv-listing-state__fact-value {
  font-size: 16px;
  color: var(--cc-navy);
  margin: 0;
  line-height: 1.5;
}

/* Neighboring-states pill strip (FeaturesSection.jsx L21-26 soft-card rhythm). */
.cv-listing-state__neighbors { display: none; }
.cv-v3 .cv-listing-state__neighbors {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding: 24px;
  background: var(--cc-bg-soft);
  border-radius: var(--cc-radius-md);
  margin: 32px auto;
  max-width: 720px;
}
.cv-v3 .cv-listing-state__neighbors-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--cc-fg-3);
  margin-right: 12px;
  flex-basis: 100%;
  margin-bottom: 8px;
}
.cv-v3 .cv-listing-state__neighbor-pill {
  padding: 6px 14px;
  background: #fff;
  border: 1px solid var(--cc-border-soft);
  border-radius: 9999px;
  font-size: 13px;
  color: var(--cc-navy);
  text-decoration: none;
}
/* Reduced-motion-gated hover (absorbed D-33). */
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-listing-state__neighbor-pill {
    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
  }
}
.cv-v3 .cv-listing-state__neighbor-pill:hover {
  background: var(--cc-blue);
  border-color: var(--cc-blue);
  color: #fff;
}
.cv-v3 .cv-listing-state__neighbor-pill:focus-visible {
  outline: 2px solid var(--cc-blue);
  outline-offset: 2px;
}

/* State CTA banner (left-accent rail; preserves legacy .state-cta-banner copy as compound). */
.cv-listing-state__cta-banner { display: none; }
.cv-v3 .cv-listing-state__cta-banner {
  display: flex;
  gap: 16px;
  align-items: center;
  flex-wrap: wrap;
  padding: 24px;
  background: var(--cc-bg-soft);
  border-left: 4px solid var(--cc-blue);
  border-radius: var(--cc-radius-md);
  margin: 32px auto;
  max-width: 720px;
}
.cv-v3 .cv-listing-state__cta-banner-text {
  flex: 1;
  min-width: 220px;
}
.cv-v3 .cv-listing-state__cta-banner-text h2 {
  font-family: var(--cc-font-display);
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--cc-navy);
  margin: 0 0 6px;
}
.cv-v3 .cv-listing-state__cta-banner-text p {
  font-size: 15px;
  color: var(--cc-fg-2);
  margin: 0;
  line-height: 1.5;
}
.cv-v3 .cv-listing-state__cta-banner-link {
  padding: 12px 20px;
  background: var(--cc-blue);
  color: #fff;
  border-radius: var(--cc-radius-md);
  text-decoration: none;
  font-weight: 600;
  white-space: nowrap;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-listing-state__cta-banner-link {
    transition: background 0.15s ease, transform 0.15s ease;
  }
}
.cv-v3 .cv-listing-state__cta-banner-link:hover {
  background: var(--cc-navy);
}
.cv-v3 .cv-listing-state__cta-banner-link:focus-visible {
  outline: 2px solid var(--cc-navy);
  outline-offset: 2px;
}

/* === 23.1 Responsive (mobile: neighbors + cta-banner stack to column; prose padding reduced) === */
@media (max-width: 768px) {
  .cv-v3 .cv-listing-state { padding: 32px 16px 48px; }
  .cv-v3 .cv-listing-state__h1 { font-size: clamp(1.6rem, 7vw, 2.25rem); }
  .cv-v3 .cv-listing-state__lede { font-size: 16px; }
  .cv-v3 .cv-listing-state__prose { font-size: 15px; }
  .cv-v3 .cv-listing-state__prose h2 { font-size: 21px; }
  .cv-v3 .cv-listing-state__prose h3 { font-size: 18px; }
  .cv-v3 .cv-listing-state__neighbors { flex-direction: column; }
  .cv-v3 .cv-listing-state__neighbor-pill { text-align: center; }
  .cv-v3 .cv-listing-state__cta-banner { flex-direction: column; align-items: stretch; }
  .cv-v3 .cv-listing-state__cta-banner-link { text-align: center; }
}

/* === 23.2 cv-listing-rank (50-state ranking table + chip-filter) - salvage-title-rates-by-state.php === */
/* Extends §23.1 cv-listing-state (37-47). Chip-filter pill row -> 50-state ranking table with
   sticky header, alternating row stripes, and an inline mini rate-bar visual (horizontal bar in
   each row whose fill width = state salvage rate as % of the dataset max). Mirrored from
   FeaturesSection.jsx card rhythm (soft-card surface + --cc-shadow-sm) + HeroSection trust-pill
   chip styling. Scoping per Wave C 37-12 mandate: bare default-hide root via `.cv-X { display: none }`;
   activation via descendant combinator under .cv-v3 ONLY; ZERO compound v3-joined cv-listing-rank
   selectors. Composes existing --cc-* tokens only (D-16). */
.cv-listing-rank { display: none; }
.cv-v3 .cv-listing-rank {
  display: block;
  max-width: 980px;
  margin: 0 auto;
}

/* Chip-filter pill row (rate-band buckets). */
.cv-v3 .cv-listing-rank__chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 24px 0;
}
.cv-v3 .cv-listing-rank__chip {
  padding: 6px 14px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border-soft);
  border-radius: 9999px;
  font-family: var(--cc-font-body);
  font-size: 13px;
  font-weight: 600;
  color: var(--cc-fg-2);
  cursor: pointer;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-listing-rank__chip { transition: all 0.2s ease; }
}
.cv-v3 .cv-listing-rank__chip:hover { border-color: var(--cc-blue); color: var(--cc-navy); }
.cv-v3 .cv-listing-rank__chip:focus-visible {
  outline: 2px solid var(--cc-blue);
  outline-offset: 2px;
}
.cv-v3 .cv-listing-rank__chip--active {
  background: var(--cc-blue);
  color: #fff;
  border-color: var(--cc-blue);
}

/* Ranking table — soft card surface, sticky header, alternating stripes. */
.cv-v3 .cv-listing-rank__table {
  width: 100%;
  border-collapse: collapse;
  margin: 24px 0;
  background: #fff;
  border-radius: var(--cc-radius-md);
  overflow: hidden;
  box-shadow: var(--cc-shadow-sm);
}
.cv-v3 .cv-listing-rank__th {
  background: var(--cc-bg-soft);
  padding: 12px 16px;
  text-align: left;
  font-family: var(--cc-font-body);
  font-weight: 600;
  color: var(--cc-navy);
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 1px;
  position: sticky;
  top: 0;
}
.cv-v3 .cv-listing-rank__tr { border-bottom: 1px solid var(--cc-border-soft); }
.cv-v3 .cv-listing-rank__tr:nth-child(even) { background: var(--cc-bg-soft); }
.cv-v3 .cv-listing-rank__td {
  padding: 12px 16px;
  font-family: var(--cc-font-body);
  color: var(--cc-fg-2);
  font-size: 14px;
  vertical-align: top;
}
.cv-v3 .cv-listing-rank__rank {
  font-family: var(--cc-font-display);
  font-size: 18px;
  font-weight: 700;
  color: var(--cc-navy);
  width: 56px;
}
.cv-v3 .cv-listing-rank__state-name { font-weight: 600; color: var(--cc-navy); }
.cv-v3 .cv-listing-rank__state-name a {
  color: var(--cc-navy);
  text-decoration: none;
  border-bottom: 1px dashed var(--cc-border);
}
.cv-v3 .cv-listing-rank__state-name a:hover { color: var(--cc-blue); border-bottom-color: var(--cc-blue); }
.cv-v3 .cv-listing-rank__state-name a:focus-visible {
  outline: 2px solid var(--cc-blue);
  outline-offset: 2px;
}

/* Inline rate-bar visual: mini horizontal bar whose fill width = salvage rate %. */
.cv-v3 .cv-listing-rank__rate-cell {
  display: flex;
  align-items: center;
  gap: 8px;
}
.cv-v3 .cv-listing-rank__rate-bar {
  flex: 1;
  height: 8px;
  background: var(--cc-bg-soft);
  border-radius: 4px;
  overflow: hidden;
  max-width: 200px;
}
.cv-v3 .cv-listing-rank__rate-fill {
  height: 100%;
  background: var(--cc-blue);
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-listing-rank__rate-fill { transition: width 0.3s ease; }
}
.cv-v3 .cv-listing-rank__rate-value {
  font-weight: 600;
  color: var(--cc-navy);
  white-space: nowrap;
  min-width: 64px;
  text-align: right;
}

/* === 23.2 Responsive (mobile: chips wrap; table font reduced; rate-bar hidden, value text-only) === */
@media (max-width: 768px) {
  .cv-v3 .cv-listing-rank__th { font-size: 12px; padding: 10px 12px; }
  .cv-v3 .cv-listing-rank__td { font-size: 13px; padding: 10px 12px; }
  .cv-v3 .cv-listing-rank__rank { font-size: 16px; width: 40px; }
  .cv-v3 .cv-listing-rank__rate-bar { display: none; }
  .cv-v3 .cv-listing-rank__rate-value { min-width: 48px; }
}

/* --- SECTION 27: WAVE G — Auth modals + Purchase modals + Report frame + Account dashboard
   (Phase 37 Wave G plan 37-50 — CSS foundation) ---
   CSS-first ordering: this section ships the complete CSS module for every Wave G surface so
   the downstream markup plans (37-51 .. 37-57) emit markup against classes that already exist
   and add ZERO new CSS. All selectors scoped under .cv-v3 (D-02 opt-in). Composes existing
   --cc-* tokens ONLY (D-16 — no new tokens). Breakpoints map to D-35 (375/768/1024/1440).
   design-system.css L1109-1192 ships legacy .modal/.modal__* rules that load BEFORE carvins.css
   — §27 fully redeclares every visual property so nothing bleeds through (Pitfall 1 / T-37G50-01),
   and design-system.css itself is NOT touched. Hover/transition micro-polish wrapped per
   prefers-reduced-motion where applicable.

   Bundle sources (verbatim port — JSX inline-style object key → CSS declaration; camelCase →
   kebab-case; px numbers + var(--cc-*) strings preserved):
   - design-system/v2.3-source/project/ui_kits/marketing/modal-styles.jsx  (mdStyles)
   - design-system/v2.3-source/project/ui_kits/marketing/modals.html       (md-fade-in / md-pop
     keyframes + focus-visible / hover micro-polish)
   - design-system/v2.3-source/project/ui_kits/marketing/dashboard-styles.jsx (dbStyles)
   - design-system/v2.3-source/project/ui_kits/marketing/dashboard.html     (mobile table→card
     .db-row td::before data-label responsive rule + breakpoints)

   Subsections:
   - §27.1 cv-modal       — backdrop + dialog (sm/md/lg widths) + close + cv-modal-fade-in/pop keyframes
   - §27.2 cv-auth        — hero/pill/title/sub + perks + form/field/field-wrap + input + primary + footer + success
   - §27.3 cv-auth__strength — the single-bar .password-strength-meter re-skin, scoped .cv-v3 ONLY
                                (colors the 0-5 score classes for the first time; no global fallback)
   - §27.4 [hidden] guards — cv-modal / cv-auth__success / cv-auth__form / cv-dashboard__panel toggles
   - §27.5 cv-dashboard / cv-account scaffold — SPA top-tabs + tab panels + stat tiles + history table
                                (incl. mobile card stack) + account cards + sub-hero band
   - §27.6 cv-buy          — purchase modal (BuyModal port, D-54): found-pill + head + report-type
                                switcher pills + tier cards + upsell band + primary CTA + trust row
                                (prices are RUNTIME from window.PRICING — never baked in CSS)
   - §27.8 cv-run          — run-with-credits modal (RunCreditsModal port, D-54): credits-vs-pay
                                method toggle + head/found-pill/vehicle/vin + credit-balance pill +
                                cost row + after-balance footer + run/checkout CTA + upsell
                                (credit COST is real 1/2; PRICE is RUNTIME from window.PRICING)
   - §27.7 Responsive      — §27.5 dashboard/account + §27.6 cv-buy + §27.8 cv-run breakpoints (D-35)

   §27.6 bundle sources (verbatim port — bmStyles object key → CSS declaration):
   - design-system/v2.3-source/project/ui_kits/marketing/buy-modal-styles.jsx (bmStyles)
   - design-system/v2.3-source/project/ui_kits/marketing/BuyModal.jsx          (markup structure)
   - design-system/v2.3-source/project/ui_kits/marketing/buy-modal.html        (bm-* / ftix-pulse keyframes;
     ftix-pulse already exists upstream of §27 — reused, not redefined)

   §27.8 bundle sources (verbatim port — rcStyles object key → CSS declaration):
   - design-system/v2.3-source/project/ui_kits/marketing/run-credits-modal-styles.jsx (rcStyles)
   - design-system/v2.3-source/project/ui_kits/marketing/RunCreditsModal.jsx           (markup structure)
     (rcStyles names bm-fade-in/bm-pop + ftix-pulse — all exist upstream; reused, not redefined.
      The deeper 0 32px 80px shadow + 520 max-width + 18 radius land on .cv-modal__dialog--run.)
   --- */

/* === 27.1 cv-modal — backdrop + dialog + close + keyframes (from mdStyles.backdrop/dialog/closeBtn) === */
.cv-v3 .cv-modal__backdrop {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(10, 20, 40, 0.55);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  animation: cv-modal-fade-in 200ms ease-out;
}
.cv-v3 .cv-modal__dialog {
  position: relative;
  background: #fff;
  border-radius: 16px;
  width: 100%;
  max-width: 440px;
  max-height: 92vh;
  overflow-y: auto;
  padding: 32px 32px 26px;
  box-shadow: 0 24px 64px rgba(0, 0, 0, 0.30), 0 4px 12px rgba(0, 0, 0, 0.10);
  border: 1px solid var(--cc-border);
  animation: cv-modal-pop 220ms cubic-bezier(0.16, 1, 0.3, 1);
}
/* Modifier widths (Pitfall 5): sm 440 (default), md 460, lg 680 */
.cv-v3 .cv-modal__dialog--sm { max-width: 440px; }
.cv-v3 .cv-modal__dialog--md { max-width: 460px; }
.cv-v3 .cv-modal__dialog--lg { max-width: 680px; }
.cv-v3 .cv-modal__close {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 32px;
  height: 32px;
  border-radius: 8px;
  background: #fff;
  border: 1px solid var(--cc-border);
  color: var(--cc-fg-3);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: all 160ms cubic-bezier(0.16, 1, 0.3, 1);
}
/* Close hover micro-polish (modals.html L65-73) */
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-modal__close:hover {
    background: #FEF2F2;
    border-color: #FECACA;
    color: #B91C1C;
    transform: rotate(90deg);
  }
}
/* Keyframes (modals.html L16-17, renamed md-* → cv-modal-*) */
@keyframes cv-modal-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes cv-modal-pop {
  from { opacity: 0; transform: translateY(8px) scale(0.98); }
  to { opacity: 1; transform: none; }
}

/* === 27.2 cv-auth — hero/pill/title/sub + perks + form/field + input + primary + footer + success === */
.cv-v3 .cv-auth__hero { margin-bottom: 22px; }
.cv-v3 .cv-auth__pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy-10);
  padding: 5px 12px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.cv-v3 .cv-auth__title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 26px;
  letter-spacing: -0.025em;
  line-height: 1.15;
  color: var(--cc-fg-1);
  margin: 12px 0 6px;
}
.cv-v3 .cv-auth__sub {
  font-size: 14px;
  line-height: 1.55;
  color: var(--cc-fg-3);
  margin: 0;
}
.cv-v3 .cv-auth__perks {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin-bottom: 18px;
}
.cv-v3 .cv-auth__perk-pill {
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
  padding: 4px 10px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
}
.cv-v3 .cv-auth__form {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.cv-v3 .cv-auth__field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  /* min-width:0 lets this flex item shrink below the input's intrinsic ~20-char
     width. Without it the First/Last name two-column row (display:flex;gap:12px)
     is floored at its min-content and overflows the dialog on mobile, clipping
     the Last name field off the right edge. The leaf .cv-auth__input already has
     min-width:0; the row's flex item (this label) needs it too. */
  min-width: 0;
}
.cv-v3 .cv-auth__field-label {
  font-size: 12px;
  font-weight: 600;
  color: var(--cc-fg-3);
}
.cv-v3 .cv-auth__field-hint {
  font-size: 11px;
  font-weight: 500;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-auth__field-wrap {
  display: flex;
  align-items: center;
  gap: 6px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 10px 14px;
  transition: border-color 160ms ease, box-shadow 160ms ease, background 160ms ease;
}
/* Focus ring (modals.html L18 — :focus → :focus-within on the wrap) */
.cv-v3 .cv-auth__field-wrap:focus-within {
  border-color: var(--cc-navy);
  box-shadow: 0 0 0 3px rgba(0, 65, 106, 0.08);
}
.cv-v3 .cv-auth__field--error,
.cv-v3 .cv-auth__field-wrap--error {
  border-color: #FECACA;
  background: #FEF2F2;
}
.cv-v3 .cv-auth__input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: var(--cc-font-body);
  font-size: 14px;
  color: var(--cc-fg-1);
  min-width: 0;
}
.cv-v3 .cv-auth__field-error {
  font-size: 12px;
  color: #B91C1C;
  margin-top: 2px;
}
.cv-v3 .cv-auth__eye {
  background: transparent;
  border: none;
  color: var(--cc-fg-4);
  cursor: pointer;
  width: 24px;
  height: 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.cv-v3 .cv-auth__primary {
  width: 100%;
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 13px 18px;
  border-radius: 11px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 15px;
  cursor: pointer;
  margin-top: 4px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 4px 12px rgba(0, 65, 106, 0.22);
  transition: transform 140ms cubic-bezier(0.16, 1, 0.3, 1), box-shadow 180ms ease, background 160ms ease;
}
/* Primary submit hover/active micro-polish (modals.html L74-80) */
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-auth__primary:not(:disabled):hover {
    transform: translateY(-1px);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18), 0 8px 20px rgba(0, 65, 106, 0.32);
  }
  .cv-v3 .cv-auth__primary:not(:disabled):active {
    transform: translateY(0);
  }
}
.cv-v3 .cv-auth__footer {
  text-align: center;
  margin-top: 22px;
  padding-top: 18px;
  border-top: 1px solid var(--cc-border);
  font-size: 13px;
  color: var(--cc-fg-3);
}
.cv-v3 .cv-auth__link {
  color: var(--cc-blue);
  font-weight: 600;
  text-decoration: none;
}
.cv-v3 .cv-auth__link:hover {
  text-decoration: underline;
  text-underline-offset: 2px;
}
.cv-v3 .cv-auth__success {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 8px;
}
.cv-v3 .cv-auth__success-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 9999px;
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
  margin: 8px auto 0;
}
/* Error variant of the success icon (red tint) — reset/verify invalid-token + verify-failed states */
.cv-v3 .cv-auth__success-icon--error {
  background: #FEF2F2;
  color: #B91C1C;
  border-color: #FECACA;
}

/* === 27.2b cv-auth__page — STANDALONE token-page wrapper (reset_password.php + verify.php, D-56) ===
   reset/verify are full-page, non-modal cv-auth surfaces reached from emailed token links
   (NOT dashboard tabs). cv-auth__page is the centered, navbar-offset column; cv-auth__page-card
   is the narrow card holding the cv-auth hero/form/success markup — mirroring the centered
   bundle reset modal shape, but as a standalone page rather than a cv-modal dialog. */
.cv-v3 .cv-auth__page {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  min-height: 60vh;
  padding: calc(var(--navbar-h, 64px) + 56px) 20px 80px;
  background: var(--cc-bg-soft);
  font-family: var(--cc-font-body);
}
.cv-v3 .cv-auth__page-card {
  width: 100%;
  max-width: 440px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 18px;
  padding: 32px 30px;
  box-shadow: 0 20px 48px rgba(15, 23, 42, 0.08);
}
/* cv-auth__primary on an <a> element (reset invalid-token / verify states) — anchor reset
   so the navy primary-button visual applies to links the same as <button type=submit>. */
.cv-v3 a.cv-auth__primary--link {
  display: inline-block;
  width: auto;
  text-decoration: none;
  text-align: center;
}

/* Dialog focus-visible (modals.html L81-85) */
.cv-v3 .cv-modal__dialog a:focus-visible,
.cv-v3 .cv-modal__dialog button:focus-visible {
  outline: 2px solid var(--cc-navy);
  outline-offset: 2px;
}

/* === 27.3 cv-auth__strength — re-skin the EXISTING single-bar strength meter ===
   The meter inner <div> receives one of the 0-5 score classes (.very-weak .. .very-strong) via
   password-strength.js / script.js `meter.className = result.strengthClass` (byte-identical —
   calculatePasswordStrength() untouched). The inner div WIDTH is set inline by JS (score * 25%);
   §27.3 supplies only the track + per-score color, which were never defined before (first color).
   SCOPED UNDER .cv-v3 ONLY — no unscoped/global meter fallback is shipped, so no legacy surface
   that still carries the meter class is recolored (T-37G50-01).
   reset_password.php is the only non-modal consumer; it GAINS the cv-v3 body class in plan 37-57,
   at which point its meter colors via these scoped rules. */
.cv-v3 .password-strength-meter {
  height: 6px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  overflow: hidden;
  margin-top: 6px;
}
.cv-v3 .password-strength-meter div {
  height: 100%;
  width: 0;
  border-radius: 9999px;
  background: var(--cc-bg-soft);
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .password-strength-meter div {
    transition: width 300ms ease, background 200ms ease;
  }
}
.cv-v3 .password-strength-meter .very-weak   { background: #B91C1C; }
.cv-v3 .password-strength-meter .weak        { background: #B45309; }
.cv-v3 .password-strength-meter .medium      { background: #0066FF; }
.cv-v3 .password-strength-meter .strong      { background: var(--cc-green); }
.cv-v3 .password-strength-meter .very-strong { background: var(--cc-green); }
.cv-v3 .password-strength-text {
  font-size: 12px;
  font-weight: 600;
  color: var(--cc-fg-4);
  margin-top: 4px;
}

/* === 27.4 [hidden] guards — modal + reset success/form toggles + dashboard tab panels === */
.cv-v3 .cv-modal[hidden] { display: none; }
.cv-v3 .cv-auth__success[hidden] { display: none; }
.cv-v3 .cv-auth__form[hidden] { display: none; }
/* SPA dashboard tab panels toggled via the hidden attribute (37-55/56) — scoped, NOT a broad .cv-v3 [hidden] */
.cv-v3 .cv-dashboard__panel[hidden] { display: none; }

/* === 27.5 cv-dashboard / cv-account scaffold (from dbStyles) ===
   SCAFFOLD ONLY — full per-page wiring lands in 37-55/56; this plan ships the complete CSS so
   those plans add zero new CSS (37-55 may finalize only). */
.cv-v3 .cv-dashboard__shell {
  min-height: 100vh;
  background: #fff;
  font-family: var(--cc-font-body);
}
/* Top nav (dbStyles.topNav/topNavInner) */
.cv-v3 .cv-dashboard__topnav {
  border-bottom: 1px solid var(--cc-border);
  background: #fff;
}
.cv-v3 .cv-dashboard__topnav-inner {
  max-width: 1080px;
  margin: 0 auto;
  padding: 18px 28px 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}
/* SPA top-tab bar (dbStyles.topTabs/topTab/topTabActive) */
.cv-v3 .cv-dashboard__tabs {
  display: flex;
  gap: 28px;
  flex-wrap: wrap;
}
.cv-v3 .cv-dashboard__tab {
  background: transparent;
  border: none;
  /* Plan 37-55: tab elements are now <a> anchors (hybrid tab contract) — reset
     anchor chrome so the topTab visual matches the original <button> scaffold. */
  display: inline-block;
  text-decoration: none;
  padding: 10px 0 16px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 15px;
  color: var(--cc-fg-4);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
}
.cv-v3 a.cv-dashboard__tab:hover { color: var(--cc-fg-2); }
.cv-v3 a.cv-dashboard__tab--active:hover { color: var(--cc-fg-1); }
.cv-v3 .cv-dashboard__tab--active {
  font-weight: 700;
  color: var(--cc-fg-1);
  border-bottom-color: var(--cc-navy);
}
/* Tab panel wrapper (toggled by §27.4) + page region */
.cv-v3 .cv-dashboard__panel {
  max-width: 1080px;
  margin: 0 auto;
  padding: 24px 28px 80px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}
.cv-v3 .cv-dashboard__title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 28px;
  letter-spacing: -0.025em;
  color: var(--cc-fg-1);
  margin: 0;
}
.cv-v3 .cv-dashboard__sub {
  font-size: 14px;
  color: var(--cc-fg-3);
  margin: 6px 0 0;
}
/* Search card (Dashboard.jsx L69-147 — 2026-06-10 modal 1:1 redesign item 2):
   dbStyles.searchCard / searchTabsRow / searchTab(Active) / freePill / searchBody /
   searchTitle / searchSub / modeToggleRow / modeToggle(Btn|Active) / inputRow /
   inputWrap / input / inputCount / stateSelectWrap / stateSelect / stateChevron /
   runBtn / searchFootHint, ported verbatim. Tab + CTA accents follow the active
   tab (Dashboard.jsx L34 ctaColor): Get Reports navy, Auction Lookup green. */
.cv-v3 .cv-dashboard__search-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 14px;
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
}
.cv-v3 .cv-dashboard__search-tabs {
  display: flex;
  gap: 24px;
  padding: 0 26px;
  border-bottom: 1px solid var(--cc-border);
  overflow-x: auto;
}
.cv-v3 .cv-dashboard__search-tab {
  background: transparent;
  border: none;
  padding: 16px 0;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  color: var(--cc-fg-4);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  white-space: nowrap;
}
.cv-v3 .cv-dashboard__search-tab--active { font-weight: 700; }
.cv-v3 .cv-dashboard__search-tab--report.cv-dashboard__search-tab--active {
  color: var(--cc-navy);
  border-bottom-color: var(--cc-navy);
}
.cv-v3 .cv-dashboard__search-tab--auction.cv-dashboard__search-tab--active {
  color: var(--cc-green);
  border-bottom-color: var(--cc-green);
}
.cv-v3 .cv-dashboard__free-pill {
  background: var(--cc-green);
  color: #fff;
  font-size: 9px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 9999px;
  letter-spacing: 0.06em;
}
.cv-v3 .cv-dashboard__search-body { padding: 22px 26px 24px; }
.cv-v3 .cv-dashboard__search-title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 18px;
  letter-spacing: -0.015em;
  color: var(--cc-fg-1);
  margin: 0;
}
.cv-v3 .cv-dashboard__search-sub {
  font-size: 13px;
  color: var(--cc-fg-4);
  margin: 4px 0 14px;
}
.cv-v3 .cv-dashboard__mode-toggle {
  display: inline-flex;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 9px;
  padding: 3px;
  margin-bottom: 14px;
}
.cv-v3 .cv-dashboard__mode-btn {
  background: transparent;
  border: none;
  padding: 6px 14px;
  border-radius: 7px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 13px;
  color: var(--cc-fg-4);
  cursor: pointer;
}
.cv-v3 .cv-dashboard__mode-btn--active {
  background: #fff;
  font-weight: 700;
  color: var(--cc-fg-1);
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.10), 0 1px 2px rgba(0, 0, 0, 0.04);
}
.cv-v3 .cv-dashboard__search-row {
  display: flex;
  gap: 10px;
  align-items: stretch;
  flex-wrap: wrap;
}
.cv-v3 .cv-dashboard__input-wrap {
  flex: 1;
  min-width: 240px;
  display: flex;
  align-items: center;
  gap: 8px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 10px 14px;
}
.cv-v3 .cv-dashboard__input-wrap:focus-within {
  border-color: var(--cc-navy);
  box-shadow: 0 0 0 3px rgba(0, 65, 106, 0.08);
}
.cv-v3 .cv-dashboard__search-input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: var(--cc-font-body);
  font-size: 14px;
  color: var(--cc-fg-1);
  min-width: 0;
}
.cv-v3 .cv-dashboard__input-count {
  font-family: var(--cc-font-mono);
  font-size: 12px;
  color: var(--cc-fg-4);
  flex-shrink: 0;
}
.cv-v3 .cv-dashboard__state-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
}
.cv-v3 .cv-dashboard__state-wrap[hidden] { display: none; }
.cv-v3 .cv-dashboard__state-select {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 10px 32px 10px 14px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  color: var(--cc-fg-1);
  cursor: pointer;
  outline: none;
  letter-spacing: 0.04em;
}
.cv-v3 .cv-dashboard__state-select:focus {
  border-color: var(--cc-navy);
  box-shadow: 0 0 0 3px rgba(0, 65, 106, 0.08);
}
.cv-v3 .cv-dashboard__state-chevron {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--cc-fg-4);
  pointer-events: none;
}
.cv-v3 .cv-dashboard__search-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: #fff;
  border: none;
  padding: 10px 22px;
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 14px;
  cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 6px rgba(0, 65, 106, 0.20);
}
.cv-v3 .cv-dashboard__search-btn--report { background: var(--cc-navy); }
.cv-v3 .cv-dashboard__search-btn--auction { background: var(--cc-green); }
.cv-v3 .cv-dashboard__search-btn:disabled { opacity: 0.6; cursor: wait; }
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-dashboard__search-btn:not(:disabled):hover {
    transform: translateY(-1px);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18), 0 6px 14px rgba(0, 65, 106, 0.26);
  }
}
.cv-v3 .cv-dashboard__search-hint {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 12px;
  font-size: 12px;
  color: var(--cc-fg-4);
  font-weight: 500;
}
.cv-v3 .cv-dashboard__hint-icon { color: var(--cc-navy); flex-shrink: 0; }
.cv-v3 .cv-dashboard__search-hint--auction .cv-dashboard__hint-icon { color: var(--cc-green); }
.cv-v3 .cv-dashboard__search-feedback {
  margin-top: 10px;
  font-size: 13px;
  font-weight: 600;
  color: #B91C1C;
  min-height: 1em;
}

/* Inline VIN results host (2026-06-10 dashboard polish): account.php's search card
   renders its own compact result cards into this section (see cv-dashboard__vr-*
   below) — only the reveal transition lives here (inline JS flips opacity 0 → 1). */
.cv-v3 .cv-dashboard__results {
  transition: opacity 300ms ease;
}

/* Dashboard-native VIN results (2026-06-10 v2 — operator request): THREE compact
   cards in the dashboard language (white card, cc-border, 14px radius, soft shadow —
   the stat-tile/search-card family) instead of the homepage's full cv-vr stack. No
   loading modal — the searching state lives on the Get Report button (btn-spin).
   Buy CTAs open the SAME purchase modal (window.purchaseReport). */
.cv-v3 .cv-dashboard__btn-spin {
  width: 14px;
  height: 14px;
  border-radius: 9999px;
  border: 2px solid rgba(255, 255, 255, 0.4);
  border-top-color: #fff;
  display: inline-block;
  margin-right: 7px;
  vertical-align: -2px;
  animation: cv-loading-spin 0.9s linear infinite;
}
.cv-v3 .cv-dashboard__vr-head { margin-bottom: 14px; }
.cv-v3 .cv-dashboard__vr-found {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--cc-green);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
.cv-v3 .cv-dashboard__vr-found-dot {
  width: 7px;
  height: 7px;
  border-radius: 9999px;
  background: var(--cc-green);
  box-shadow: 0 0 0 0 rgba(0, 135, 83, 0.55);
  animation: ftix-pulse 1.8s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) {
  .cv-v3 .cv-dashboard__vr-found-dot { animation: none; }
}
.cv-v3 .cv-dashboard__vr-vehicle {
  font-family: var(--cc-font-display);
  font-size: 20px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--cc-fg-1);
  margin: 6px 0 4px;
}
.cv-v3 .cv-dashboard__vr-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  font-size: 12.5px;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-dashboard__vr-vin { font-family: var(--cc-font-mono); letter-spacing: 0.03em; }
.cv-v3 .cv-dashboard__vr-metadot { color: var(--cc-fg-5); }
.cv-v3 .cv-dashboard__vr-auction {
  color: var(--cc-green);
  font-weight: 600;
  text-decoration: none;
}
.cv-v3 .cv-dashboard__vr-auction:hover { text-decoration: underline; text-underline-offset: 2px; }
.cv-v3 .cv-dashboard__vr-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}
.cv-v3 .cv-dashboard__vr-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 14px;
  padding: 16px;
  box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.cv-v3 .cv-dashboard__vr-type {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  font-size: 13px;
  font-weight: 700;
  color: var(--cc-fg-1);
}
.cv-v3 .cv-dashboard__vr-dot {
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  flex-shrink: 0;
}
.cv-v3 .cv-dashboard__vr-dot--navy { background: var(--cc-navy); }
.cv-v3 .cv-dashboard__vr-dot--blue { background: var(--cc-blue); }
.cv-v3 .cv-dashboard__vr-dot--green { background: var(--cc-green); }
.cv-v3 .cv-dashboard__vr-tag {
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
  font-size: 9px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 9999px;
  letter-spacing: 0.06em;
}
.cv-v3 .cv-dashboard__vr-owned {
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy-10);
  font-size: 9px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 9999px;
  letter-spacing: 0.06em;
}
.cv-v3 .cv-dashboard__vr-records {
  font-size: 12.5px;
  color: var(--cc-fg-3);
}
.cv-v3 .cv-dashboard__vr-records strong {
  font-family: var(--cc-font-display);
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--cc-fg-1);
  margin-right: 4px;
}
.cv-v3 .cv-dashboard__vr-cta {
  margin-top: auto;
  width: 100%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  color: #fff;
  border: none;
  padding: 10px 14px;
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 13.5px;
  cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 6px rgba(0, 65, 106, 0.18);
}
.cv-v3 .cv-dashboard__vr-cta--navy { background: var(--cc-navy); }
.cv-v3 .cv-dashboard__vr-cta--blue { background: var(--cc-blue); }
.cv-v3 .cv-dashboard__vr-cta--green { background: var(--cc-green); }
.cv-v3 .cv-dashboard__vr-cta--ghost {
  background: #fff;
  border: 1px solid var(--cc-border);
  color: var(--cc-navy);
  box-shadow: none;
}
.cv-v3 .cv-dashboard__vr-cta--ghost:hover {
  border-color: var(--cc-navy);
  background: var(--cc-navy-bg);
}
/* Owned-card secondary action: quiet link-style "Regenerate report" under View
   Report — re-opens the purchase modal for a fresh copy (buy-again-to-regenerate) */
.cv-v3 .cv-dashboard__vr-regen {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  width: 100%;
  background: transparent;
  border: none;
  padding: 2px 4px;
  font-family: var(--cc-font-body);
  font-size: 12px;
  font-weight: 600;
  color: var(--cc-fg-4);
  cursor: pointer;
}
.cv-v3 .cv-dashboard__vr-regen:hover {
  color: var(--cc-navy);
  text-decoration: underline;
  text-underline-offset: 2px;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-dashboard__vr-cta:not(.cv-dashboard__vr-cta--ghost):hover {
    transform: translateY(-1px);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18), 0 6px 14px rgba(0, 65, 106, 0.24);
  }
}
@media (max-width: 768px) {
  .cv-v3 .cv-dashboard__vr-grid { grid-template-columns: 1fr; }
}

/* Dashboard button color-match (2026-06-10 dashboard polish, operator request):
   the legacy GLOBAL red .btn--primary / .btn--danger and grey .btn--ghost inside
   the cv dashboard shell now wear the cv palette — navy primary (cv-auth__primary
   tone), cv-border ghost with navy hover, and a rose-tinted OUTLINE danger (the
   bundle chat moved "Cancel subscription" away from a screaming red block:
   "important but not screaming"). Scoped to .cv-dashboard__shell — blog/admin/
   auth surfaces keep the legacy red per Phase 33-06. */
.cv-v3 .cv-dashboard__shell .btn--primary {
  background: var(--cc-navy);
  border-color: var(--cc-navy);
  color: #fff;
  border-radius: 10px;
  font-weight: 700;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 6px rgba(0, 65, 106, 0.20);
}
.cv-v3 .cv-dashboard__shell .btn--primary:hover {
  background: var(--cc-navy);
  border-color: var(--cc-navy);
  color: #fff;
}
.cv-v3 .cv-dashboard__shell .btn--ghost {
  background: #fff;
  border: 1px solid var(--cc-border);
  color: var(--cc-navy);
  border-radius: 10px;
  font-weight: 600;
}
.cv-v3 .cv-dashboard__shell .btn--ghost:hover {
  border-color: var(--cc-navy);
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
}
.cv-v3 .cv-dashboard__shell .btn--danger {
  background: #fff;
  border: 1px solid #FECACA;
  color: #B91C1C;
  border-radius: 10px;
  font-weight: 600;
}
.cv-v3 .cv-dashboard__shell .btn--danger:hover {
  background: #FEF2F2;
  border-color: #B91C1C;
  color: #B91C1C;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-dashboard__shell .btn--primary:hover {
    transform: translateY(-1px);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18), 0 6px 14px rgba(0, 65, 106, 0.26);
  }
}

/* Rose-outline danger action inside cv modals (cancel-subscription confirm —
   the keep-action is the navy cv-auth__primary; cancelling is deliberately the
   quieter option per the bundle chat) */
.cv-v3 .cv-modal__danger {
  width: 100%;
  background: #fff;
  border: 1px solid #FECACA;
  color: #B91C1C;
  padding: 12px 18px;
  border-radius: 11px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 14px;
  cursor: pointer;
  margin-top: 10px;
  transition: all 160ms ease;
}
.cv-v3 .cv-modal__danger:hover:not(:disabled) {
  background: #FEF2F2;
  border-color: #B91C1C;
}
.cv-v3 .cv-modal__danger:disabled {
  opacity: 0.6;
  cursor: wait;
}
/* Stat tiles 4-up row (dbStyles.creditsRow/statTile/tileLabel/tileValue) */
.cv-v3 .cv-dashboard__stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
}
.cv-v3 .cv-dashboard__stat-tile {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  padding: 14px 16px;
  box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
}
.cv-v3 .cv-dashboard__tile-icon {
  width: 34px;
  height: 34px;
  border-radius: 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.cv-v3 .cv-dashboard__tile-label {
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.cv-v3 .cv-dashboard__tile-value {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 24px;
  letter-spacing: -0.025em;
  line-height: 1.1;
  color: var(--cc-fg-1);
  margin-top: 4px;
}
.cv-v3 .cv-dashboard__tile-hint {
  font-size: 11px;
  color: var(--cc-fg-4);
  margin-top: 2px;
}
/* History card + table (dbStyles.historyCard/table/th/td) */
.cv-v3 .cv-dashboard__history-card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  padding: 18px 20px 4px;
  box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
}
.cv-v3 .cv-dashboard__history-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  margin-bottom: 14px;
  flex-wrap: wrap;
}
.cv-v3 .cv-dashboard__history-title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 17px;
  letter-spacing: -0.015em;
  color: var(--cc-fg-1);
  margin: 0;
}
.cv-v3 .cv-dashboard__table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 13px;
}
.cv-v3 .cv-dashboard__table th {
  text-align: left;
  padding: 10px 12px;
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--cc-border);
}
.cv-v3 .cv-dashboard__table td {
  padding: 14px 12px;
  border-bottom: 1px solid var(--cc-border);
  vertical-align: middle;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-dashboard__table tbody tr:hover td { background: var(--cc-bg-soft); }
}
.cv-v3 .cv-dashboard__complete-pill {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
  padding: 3px 9px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
}
/* Top-nav credits pill (dbStyles.creditsPill — navy, NOT the green table status pill).
   RECHECK D-3: account.php previously reused __complete-pill here; this is the bundle rule. */
.cv-v3 .cv-dashboard__credits-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--cc-navy-bg);
  border: 1px solid var(--cc-navy-10);
  padding: 8px 14px;
  border-radius: 9999px;
  color: var(--cc-navy);
  font-weight: 600;
  font-size: 14px;
}
.cv-v3 .cv-dashboard__credits-pill strong { font-weight: 700; }
/* Account cards (dbStyles.accountCard/accountCardTitle) */
.cv-v3 .cv-account__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.cv-v3 .cv-account__card {
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  padding: 20px 22px;
  box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
}
.cv-v3 .cv-account__card-title {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 17px;
  letter-spacing: -0.015em;
  color: var(--cc-fg-1);
  margin: 0 0 14px;
}
/* Subscription hero band (dbStyles.subHero) */
.cv-v3 .cv-account__sub-hero {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding: 20px 22px;
  background: linear-gradient(135deg, var(--cc-navy-bg) 0%, #F0F7FA 100%);
  border: 1px solid var(--cc-navy-10);
  border-radius: 12px;
  margin-bottom: 14px;
}
/* Account-settings finalization (37-56): a full-width card (Danger Zone spans both
   columns of cv-account__grid), the current-email + muted helper text, and the
   re-skinned per-card alert (re-skins legacy .alert into the cv- system; the alert
   conditional logic stays in account_settings.php). dbStyles.cancelBtn supplies the
   danger color token. */
.cv-v3 .cv-account__card--wide { grid-column: 1 / -1; }
.cv-v3 .cv-account__card-title--danger { color: #B91C1C; }
.cv-v3 .cv-account__current {
  font-size: 13px;
  color: var(--cc-fg-3);
  margin: 0 0 14px;
}
.cv-v3 .cv-account__current strong { color: var(--cc-fg-1); }
.cv-v3 .cv-account__muted {
  font-size: 13px;
  color: var(--cc-fg-4);
  margin: 0;
}
.cv-v3 .cv-account__alert {
  font-size: 13px;
  font-weight: 600;
  border-radius: 10px;
  padding: 10px 14px;
  margin-bottom: 14px;
}
.cv-v3 .cv-account__alert--success {
  background: #F0FDF4;
  color: #047857;
  border: 1px solid #00875340;
}
.cv-v3 .cv-account__alert--error {
  background: #FEF2F2;
  color: #B91C1C;
  border: 1px solid #FECACA;
}

/* === 27.6 cv-buy — purchase modal (BuyModal port, D-54) ===
   Verbatim port of bmStyles (buy-modal-styles.jsx) → CSS, all selectors under .cv-v3.
   Reuses §27.1 cv-modal__backdrop / cv-modal__dialog / cv-modal__close primitives; this
   subsection adds only the BuyModal-specific chrome. The .cv-buy dialog width modifier
   matches bmStyles.dialog (max-width 560) — see .cv-modal__dialog--buy below.
   PRICES ARE RUNTIME: every price is rendered from window.PRICING in showBuyCredits()
   (script.js); no price literal appears in this CSS (D-36). === */

/* Dialog width modifier — bmStyles.dialog max-width 560 + 18px radius + 28/32/22 padding */
.cv-v3 .cv-modal__dialog--buy {
  max-width: 560px;
  border-radius: 18px;
  padding: 28px 32px 22px;
}

/* Head — bmStyles.head (centered, 18px bottom) */
.cv-v3 .cv-buy__head {
  margin-bottom: 18px;
  text-align: center;
}
/* "Vehicle Found" pill — bmStyles.foundPill + foundDot (green, pulsing dot) */
.cv-v3 .cv-buy__found-pill {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--cc-green);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.cv-v3 .cv-buy__found-dot {
  width: 7px;
  height: 7px;
  border-radius: 9999px;
  background: var(--cc-green);
  box-shadow: 0 0 0 0 rgba(0, 135, 83, 0.55);
  animation: ftix-pulse 1.8s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) {
  .cv-v3 .cv-buy__found-dot { animation: none; }
}
/* Vehicle name — bmStyles.vehicleName */
.cv-v3 .cv-buy__vehicle {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 26px;
  letter-spacing: -0.025em;
  line-height: 1.1;
  color: var(--cc-fg-1);
  margin: 10px 0 6px;
}
/* VIN line — bmStyles.vinLine / vinLabel / vinMono */
.cv-v3 .cv-buy__vin-line {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  justify-content: center;
}
.cv-v3 .cv-buy__vin-label {
  font-family: var(--cc-font-mono);
  font-size: 12px;
  color: var(--cc-fg-4);
  font-weight: 600;
  letter-spacing: 0.04em;
}
.cv-v3 .cv-buy__vin-mono {
  font-family: var(--cc-font-mono);
  font-size: 12px;
  color: var(--cc-fg-2);
  font-weight: 600;
  letter-spacing: 0.04em;
}

/* Report-type switcher — bmStyles.typeRow / typeBtn (3-col Carfax / AutoCheck / Both) */
.cv-v3 .cv-buy__type-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  margin-bottom: 16px;
}
.cv-v3 .cv-buy__type-pill {
  position: relative;
  padding: 10px 14px;
  background: #fff;
  border: 2px solid var(--cc-border);
  border-radius: 10px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 13px;
  color: var(--cc-fg-3);
  transition: all 160ms;
  text-align: center;
}
.cv-v3 .cv-buy__type-pill--active {
  border-color: var(--cc-navy);
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
}
.cv-v3 .cv-buy__type-price {
  display: block;
  font-size: 11px;
  font-weight: 600;
  color: var(--cc-fg-4);
  margin-top: 2px;
}
.cv-v3 .cv-buy__type-pill--active .cv-buy__type-price { color: var(--cc-navy); }

/* Report summary band — bmStyles.reportSummary (records-found row) */
.cv-v3 .cv-buy__summary {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border: 1px solid var(--cc-navy-10);
  background: var(--cc-navy-bg);
  border-radius: 11px;
  margin-bottom: 10px;
}
.cv-v3 .cv-buy__summary-title {
  font-family: var(--cc-font-display);
  font-size: 16px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.015em;
}
.cv-v3 .cv-buy__summary-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 12px;
  color: var(--cc-fg-3);
  margin-top: 4px;
}

/* Upsell band — bmStyles.upsell / upsellIcon / upsellCta (add-the-other-report nudge) */
.cv-v3 .cv-buy__upsell {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  background: transparent;
  border: none;
  border-radius: 8px;
  margin-bottom: 14px;
  width: 100%;
  cursor: pointer;
  transition: background 160ms;
  text-align: left;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-buy__upsell:hover { background: var(--cc-bg-soft); }
}
.cv-v3 .cv-buy__upsell-icon {
  width: 20px;
  height: 20px;
  border-radius: 9999px;
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.cv-v3 .cv-buy__upsell-text {
  flex: 1;
  text-align: left;
  font-size: 12.5px;
  color: var(--cc-fg-2);
}
.cv-v3 .cv-buy__upsell-cta {
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-green);
  background: #F0FDF4;
  border: 1px solid #00875340;
  padding: 3px 9px;
  border-radius: 9999px;
  letter-spacing: 0.02em;
}

/* Tier grid + cards — bmStyles.tierGrid / tierCard / topTag / tierLabel / tierPrice / tierPer
   STYLE ONLY — quantities/prices are data-driven from window.PRICING at render. */
.cv-v3 .cv-buy__tier-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}
.cv-v3 .cv-buy__tier-card {
  position: relative;
  background: #fff;
  border: 2px solid var(--cc-border);
  border-radius: 14px;
  padding: 20px 14px 16px;
  cursor: pointer;
  text-align: center;
  transition: all 200ms cubic-bezier(0.16, 1, 0.3, 1);
}
.cv-v3 .cv-buy__tier-card--featured {
  border-color: var(--cc-blue);
  background: #EFF6FF;
  box-shadow: 0 4px 12px rgba(0, 102, 255, 0.13);
  transform: translateY(-2px);
}
.cv-v3 .cv-buy__tier-card--best {
  border-color: var(--cc-green);
  background: #F0FDF4;
  box-shadow: 0 4px 12px rgba(0, 135, 83, 0.13);
  transform: translateY(-2px);
}
.cv-v3 .cv-buy__tier-tag {
  position: absolute;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);
  color: #fff;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.08em;
  padding: 3px 11px;
  border-radius: 9999px;
  white-space: nowrap;
  background: var(--cc-blue);
}
.cv-v3 .cv-buy__tier-card--best .cv-buy__tier-tag { background: var(--cc-green); }
.cv-v3 .cv-buy__tier-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--cc-fg-3);
  margin-bottom: 4px;
}
.cv-v3 .cv-buy__tier-price {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 30px;
  letter-spacing: -0.03em;
  line-height: 1.1;
  color: var(--cc-fg-1);
}
.cv-v3 .cv-buy__tier-card--featured .cv-buy__tier-price { color: var(--cc-blue); }
.cv-v3 .cv-buy__tier-card--best .cv-buy__tier-price { color: var(--cc-green); }
.cv-v3 .cv-buy__tier-per {
  font-size: 11px;
  color: var(--cc-fg-4);
  margin-top: 4px;
}

/* Footer — bmStyles.footer / tinyLabel / totalAmount + bmStyles.checkoutBtn → cv-buy__primary */
.cv-v3 .cv-buy__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-top: 22px;
  padding-top: 18px;
  border-top: 1px solid var(--cc-border);
}
.cv-v3 .cv-buy__tiny-label {
  font-size: 10px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.cv-v3 .cv-buy__total {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 28px;
  letter-spacing: -0.03em;
  color: var(--cc-navy);
  line-height: 1;
  margin-top: 4px;
}
.cv-v3 .cv-buy__primary {
  display: inline-flex;
  align-items: center;
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 13px 24px;
  border-radius: 11px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 15px;
  cursor: pointer;
  white-space: nowrap;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 4px 12px rgba(0, 65, 106, 0.26);
  transition: all 160ms cubic-bezier(0.16, 1, 0.3, 1);
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-buy__primary:hover { transform: translateY(-1px); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 6px 18px rgba(0, 65, 106, 0.32); }
}

/* Trust row — bmStyles.trustRow / trustItem / trustDot */
.cv-v3 .cv-buy__trust-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 14px;
  font-size: 11px;
  color: var(--cc-fg-4);
  font-weight: 500;
  flex-wrap: wrap;
}
.cv-v3 .cv-buy__trust-item { display: inline-flex; align-items: center; gap: 4px; }
.cv-v3 .cv-buy__trust-dot { color: var(--cc-fg-5); }

/* PayPal section reuse — keep the inline #creditPaypalSection host inside cv-buy chrome.
   The label/back-to-packs button are re-skinned to fit the cv-buy dialog. */
.cv-v3 .cv-buy__paypal {
  margin-top: 18px;
  padding-top: 18px;
  border-top: 1px solid var(--cc-border);
}
/* Checkout layout inside the credits modal: the navy Checkout button fills the
   slot the SDK smart buttons used to occupy; reassurance note centered to match. */
.cv-v3 .cv-buy__paypal .cv-run__primary {
  width: 100%;
  justify-content: center;
  margin-top: 4px;
}
.cv-v3 .cv-buy__paypal .cv-run__redirect-note {
  justify-content: center;
  margin-bottom: 12px;
}
.cv-v3 .cv-buy__paypal-label {
  display: block;
  text-align: center;
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 16px;
  color: var(--cc-fg-1);
  margin-bottom: 14px;
}
.cv-v3 .cv-buy__back {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  width: 100%;
  margin-top: 12px;
  padding: 10px 16px;
  background: #fff;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  color: var(--cc-fg-3);
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 13px;
  cursor: pointer;
  transition: all 160ms;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-buy__back:hover { border-color: var(--cc-navy); color: var(--cc-navy); }
}
/* RECHECK M-6: the back affordance reuses the iconSvg chevron-down glyph (the icon map
   has no chevron-left) — rotate it to point back/left so the arrow matches the action. */
.cv-v3 .cv-buy__back svg { transform: rotate(90deg); }

/* === 27.8 cv-run — run-with-credits modal (RunCreditsModal port, D-54) ===
   Verbatim port of rcStyles (run-credits-modal-styles.jsx) → CSS, all selectors under .cv-v3.
   Reuses §27.1 cv-modal__backdrop / cv-modal__dialog / cv-modal__close primitives; this is the
   "run with credits OR pay" decision surface (showPurchaseOptions in script.js). The dialog
   width modifier matches rcStyles.dialog (max-width 520, radius 18, the deeper 0 32px 80px shadow)
   — see .cv-modal__dialog--run below. PRICE is RUNTIME from window.PRICING in showPurchaseOptions();
   credit COST (1 or 2) is the real creditCost; no price/credit literal appears in this CSS (D-36). === */

/* Dialog width modifier — rcStyles.dialog max-width 520 + 18px radius + 28/32/22 padding + deeper shadow */
.cv-v3 .cv-modal__dialog--run {
  max-width: 520px;
  border-radius: 18px;
  padding: 28px 32px 22px;
  box-shadow: 0 32px 80px rgba(0, 0, 0, 0.32), 0 8px 20px rgba(0, 0, 0, 0.12);
}

/* Method toggle (credits vs pay) — rcStyles.methodToggle / methodBtn / methodBtnActive */
.cv-v3 .cv-run__method-toggle {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 4px;
  padding: 4px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 11px;
  margin-bottom: 18px;
  margin-top: 4px;
}
.cv-v3 .cv-run__method {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  padding: 9px 12px;
  background: transparent;
  border: none;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 13px;
  color: var(--cc-fg-4);
  border-radius: 8px;
  transition: all 160ms;
}
.cv-v3 .cv-run__method--active {
  background: #fff;
  font-weight: 700;
  color: var(--cc-navy);
  box-shadow: 0 1px 3px rgba(0, 65, 106, 0.10), 0 1px 2px rgba(0, 0, 0, 0.04);
}

/* Head — rcStyles.head (centered, 14px bottom) + foundPill/foundDot/vehicleName/vinLine */
.cv-v3 .cv-run__head {
  margin-bottom: 14px;
  text-align: center;
}
.cv-v3 .cv-run__found-pill {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--cc-green);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.cv-v3 .cv-run__found-dot {
  width: 7px;
  height: 7px;
  border-radius: 9999px;
  background: var(--cc-green);
  box-shadow: 0 0 0 0 rgba(0, 135, 83, 0.55);
  animation: ftix-pulse 1.8s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) {
  .cv-v3 .cv-run__found-dot { animation: none; }
}
.cv-v3 .cv-run__vehicle {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 24px;
  letter-spacing: -0.025em;
  line-height: 1.1;
  color: var(--cc-fg-1);
  margin: 10px 0 6px;
}
.cv-v3 .cv-run__vin-line {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  justify-content: center;
}
.cv-v3 .cv-run__vin-label {
  font-family: var(--cc-font-mono);
  font-size: 12px;
  color: var(--cc-fg-4);
  font-weight: 600;
  letter-spacing: 0.04em;
}
.cv-v3 .cv-run__vin-mono {
  font-family: var(--cc-font-mono);
  font-size: 12px;
  color: var(--cc-fg-2);
  font-weight: 600;
  letter-spacing: 0.04em;
}

/* Compact credit-balance pill — rcStyles.balanceCompact / coinDot / topUpLink */
.cv-v3 .cv-run__balance {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 12px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 9999px;
  font-size: 12px;
  color: var(--cc-fg-3);
  font-weight: 500;
  margin-bottom: 14px;
}
.cv-v3 .cv-run__balance strong { color: var(--cc-fg-1); }
/* "Top up →" credits-upsell link in the balance pill (rcStyles.topUpLink — RECHECK M-3) */
.cv-v3 .cv-run__topup {
  color: var(--cc-blue);
  font-weight: 600;
  font-size: 12px;
  text-decoration: none;
}
.cv-v3 .cv-run__topup:hover { text-decoration: underline; }
.cv-v3 .cv-run__coin-dot {
  width: 8px;
  height: 8px;
  border-radius: 9999px;
  background: var(--cc-green);
}

/* Report summary band — reuses the §27.6 navy summary band shape (rcStyles ReportSummary) */
.cv-v3 .cv-run__summary {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border: 1px solid var(--cc-navy-10);
  background: var(--cc-navy-bg);
  border-radius: 11px;
  margin-bottom: 10px;
}
.cv-v3 .cv-run__summary-title {
  font-family: var(--cc-font-display);
  font-size: 16px;
  font-weight: 700;
  color: var(--cc-fg-1);
  letter-spacing: -0.015em;
}
.cv-v3 .cv-run__summary-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 12px;
  color: var(--cc-fg-3);
  margin-top: 4px;
}

/* Cost row — the credit COST line (creditCost 1 or 2) shown above the footer */
.cv-v3 .cv-run__cost-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 14px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  margin-bottom: 14px;
  font-size: 13px;
  color: var(--cc-fg-2);
  font-weight: 600;
}
.cv-v3 .cv-run__cost-row strong { color: var(--cc-navy); }

/* Upsell band — reuses §27.6 upsell shape (rcStyles BothUpsell add-the-other-report nudge) */
.cv-v3 .cv-run__upsell {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  background: transparent;
  border: none;
  border-radius: 8px;
  margin-bottom: 14px;
  width: 100%;
  text-align: left;
  cursor: pointer;
  transition: background 160ms;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-run__upsell:hover { background: var(--cc-bg-soft); }
}
.cv-v3 .cv-run__upsell-text {
  flex: 1;
  text-align: left;
  font-size: 12.5px;
  color: var(--cc-fg-2);
}
.cv-v3 .cv-run__upsell-text strong { color: var(--cc-fg-1); }
/* BothUpsell plus-circle + cost chip (BuyModal.jsx bmStyles.upsellIcon/upsellCta);
   --remove variants carry the BothRemove red tint (RECHECK M-3) */
.cv-v3 .cv-run__upsell-icon {
  width: 20px;
  height: 20px;
  border-radius: 9999px;
  background: #F0FDF4;
  color: var(--cc-green);
  border: 1px solid #00875340;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.cv-v3 .cv-run__upsell-icon--remove {
  background: #FEF2F2;
  color: #B91C1C;
  border-color: #FECACA;
}
.cv-v3 .cv-run__upsell-cta {
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-green);
  background: #F0FDF4;
  border: 1px solid #00875340;
  padding: 3px 9px;
  border-radius: 9999px;
  letter-spacing: 0.02em;
  white-space: nowrap;
}
.cv-v3 .cv-run__upsell-cta--remove {
  background: #FEF2F2;
  color: #B91C1C;
  border-color: #FECACA;
}

/* Footer — rcStyles.footer / balanceAfter (after-balance "N credits left" or "Order total") */
.cv-v3 .cv-run__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-top: 20px;
  padding-top: 18px;
  border-top: 1px solid var(--cc-border);
}
.cv-v3 .cv-run__after {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.cv-v3 .cv-run__after-label {
  font-size: 12px;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-run__after-value {
  font-size: 14px;
  font-weight: 700;
  color: var(--cc-navy);
}
.cv-v3 .cv-run__after-total {
  font-family: var(--cc-font-display);
  font-size: 22px;
  font-weight: 700;
  color: var(--cc-navy);
  letter-spacing: -0.025em;
}

/* Run / Checkout primary CTA — rcStyles.runBtn / runBtnCost (navy, with cost chip) */
.cv-v3 .cv-run__primary {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 12px 22px;
  border-radius: 11px;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 14px;
  cursor: pointer;
  white-space: nowrap;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 4px 12px rgba(0, 65, 106, 0.24);
  /* RECHECK M-3 — bundle insufficient-credits disabled state (RunCreditsModal.jsx L108-109)
     applied via the :disabled rule below this block */
  transition: all 160ms cubic-bezier(0.16, 1, 0.3, 1);
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-run__primary:hover:not(:disabled) { transform: translateY(-1px); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 6px 18px rgba(0, 65, 106, 0.30); }
}
.cv-v3 .cv-run__primary:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
.cv-v3 .cv-run__primary-cost {
  background: rgba(255, 255, 255, 0.18);
  padding: 3px 9px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
}

/* Checkout reassurance note (one line under the footer — popup flow copy) */
.cv-v3 .cv-run__redirect-note {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 12px;
  font-size: 12px;
  color: var(--cc-fg-4);
  font-weight: 500;
}
.cv-v3 .cv-run__redirect-note .icon {
  color: var(--cc-green);
  flex-shrink: 0;
}

/* (cv-pp-host invisible-overlay rules removed 2026-06-10 v4: PayPal's smart-button
   clickjack protection rejects clicks through opacity-0 overlays — checkout now
   opens OUR OWN popup window from the real cv-run__primary Checkout buttons.) */

/* BuyModal tier grid inside the pay panel (2026-06-10 modal 1:1 redesign, item 3 —
   BuyModal.jsx tiers L22-26 + TierOption L140-159). Cards reuse the §27.6
   cv-buy__tier-* skin (the wrapper carries cv-buy__tier-grid for the grid + §27.7
   responsive collapse); .cv-run__tier--selected is the bmStyles TierOption selected
   state — accent border + tinted bg + lift, keyed to the card's own accent
   (single → navy, --featured → blue, --best → green). PRICES ARE RUNTIME from
   window.PRICING in showPurchaseOptions() — no literals here (D-36). */
.cv-v3 .cv-run__tiers {
  margin-bottom: 4px;
}
.cv-v3 .cv-run__tiers .cv-buy__tier-card.cv-run__tier--selected {
  border-color: var(--cc-navy);
  background: var(--cc-navy-bg);
  box-shadow: 0 4px 12px rgba(0, 65, 106, 0.13);
  transform: translateY(-2px);
}
.cv-v3 .cv-run__tiers .cv-buy__tier-card.cv-run__tier--selected .cv-buy__tier-price { color: var(--cc-navy); }
.cv-v3 .cv-run__tiers .cv-buy__tier-card--featured.cv-run__tier--selected {
  border-color: var(--cc-blue);
  background: #EFF6FF;
  box-shadow: 0 4px 12px rgba(0, 102, 255, 0.13);
}
.cv-v3 .cv-run__tiers .cv-buy__tier-card--featured.cv-run__tier--selected .cv-buy__tier-price { color: var(--cc-blue); }
.cv-v3 .cv-run__tiers .cv-buy__tier-card--best.cv-run__tier--selected {
  border-color: var(--cc-green);
  background: #F0FDF4;
  box-shadow: 0 4px 12px rgba(0, 135, 83, 0.13);
}
.cv-v3 .cv-run__tiers .cv-buy__tier-card--best.cv-run__tier--selected .cv-buy__tier-price { color: var(--cc-green); }

/* ReportSummary accent variants (BuyModal.jsx ReportSummary L94-109 + BM_ACCENT L162-168 —
   band bg/border + label color follow the report type: carfax navy (base band above),
   autocheck blue, both green) + the "View sample report →" link */
.cv-v3 .cv-run__summary--blue { background: #EFF6FF; border-color: #BFDBFE; }
.cv-v3 .cv-run__summary--green { background: #F0FDF4; border-color: #00875340; }
.cv-v3 .cv-run__summary-label--navy { color: var(--cc-navy); }
.cv-v3 .cv-run__summary-label--blue { color: var(--cc-blue); }
.cv-v3 .cv-run__summary-label--green { color: var(--cc-green); }
.cv-v3 .cv-run__summary-meta strong { color: var(--cc-fg-1); }
.cv-v3 .cv-run__sample-link {
  font-weight: 600;
  font-size: 12px;
  text-decoration: none;
}
.cv-v3 .cv-run__sample-link:hover { text-decoration: underline; text-underline-offset: 2px; }
.cv-v3 .cv-run__sample-link--navy { color: var(--cc-navy); }
.cv-v3 .cv-run__sample-link--blue { color: var(--cc-blue); }
.cv-v3 .cv-run__sample-link--green { color: var(--cc-green); }

/* BothUpsell "+N records" callout (BuyModal.jsx L119 — green emphasis) */
.cv-v3 .cv-run__upsell-extra { color: var(--cc-green); }

/* === 27.7 Responsive (D-35: 768 tablet / 700 mobile / 420 small — from dashboard.html + buy-modal.html) === */
@media (max-width: 1024px) {
  .cv-v3 .cv-dashboard__stats { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 768px) {
  .cv-v3 .cv-dashboard__topnav-inner { padding: 14px 14px 0; gap: 10px; }
  .cv-v3 .cv-dashboard__panel { padding: 16px 14px 80px; gap: 14px; }
  .cv-v3 .cv-dashboard__title { font-size: 22px; }
  .cv-v3 .cv-dashboard__tabs { gap: 18px; }
  .cv-v3 .cv-dashboard__stats { grid-template-columns: 1fr; }
  /* cv-buy — collapse the 3-col type switcher to single column; the tier grid
     STAYS 3-across with tighter gaps (compact-card mobile row, 2026-06-11 —
     supersedes the original buy-modal.html L27-29 single-column collapse) */
  .cv-v3 .cv-modal__dialog--buy { padding: 24px 20px 20px; }
  .cv-v3 .cv-buy__type-row { grid-template-columns: 1fr; }
  .cv-v3 .cv-buy__tier-grid { grid-template-columns: repeat(3, 1fr); gap: 8px; }
  .cv-v3 .cv-buy__vehicle { font-size: 22px; }
  .cv-v3 .cv-buy__footer { gap: 12px; }
  /* cv-run — reduce dialog padding + footer gap, keep 2-col method toggle (rcStyles 1fr 1fr fits @375) */
  .cv-v3 .cv-modal__dialog--run { padding: 24px 20px 20px; }
  .cv-v3 .cv-run__vehicle { font-size: 21px; }
  .cv-v3 .cv-run__footer { gap: 12px; }
  .cv-v3 .cv-account__grid { grid-template-columns: 1fr; }
  .cv-v3 .cv-account__sub-hero { flex-direction: column; align-items: flex-start; gap: 18px; }
  /* cv-auth__page (reset/verify standalone) — tighten the navbar offset + card padding on mobile */
  .cv-v3 .cv-auth__page { padding: calc(var(--navbar-h, 64px) + 28px) 14px 56px; }
  .cv-v3 .cv-auth__page-card { padding: 26px 20px; border-radius: 14px; }
  /* History table → stacked cards (dashboard.html .db-row td::before data-label pattern) */
  .cv-v3 .cv-dashboard__table thead { display: none; }
  .cv-v3 .cv-dashboard__table,
  .cv-v3 .cv-dashboard__table tbody,
  .cv-v3 .cv-dashboard__table tbody tr { display: block; }
  .cv-v3 .cv-dashboard__table tbody tr {
    padding: 14px 14px;
    border: 1px solid var(--cc-border);
    border-radius: 12px;
    margin-bottom: 10px;
    background: #fff;
  }
  .cv-v3 .cv-dashboard__table td {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 7px 0;
    border-bottom: 1px solid var(--cc-bg-soft);
    text-align: left;
    gap: 12px;
  }
  .cv-v3 .cv-dashboard__table td:last-child {
    border-bottom: none;
    padding-top: 12px;
  }
  .cv-v3 .cv-dashboard__table td::before {
    content: attr(data-label);
    font-size: 10px;
    font-weight: 700;
    color: var(--cc-fg-4);
    letter-spacing: 0.08em;
    text-transform: uppercase;
    flex-shrink: 0;
  }
}
@media (max-width: 420px) {
  .cv-v3 .cv-dashboard__title { font-size: 20px; }
}
/* cv-buy tier cards — compact 3-across mobile row (2026-06-11): keep the three
   pack tiers side-by-side on phones, shrinking padding + type scale so all
   three fit at 360-480px widths. */
@media (max-width: 480px) {
  .cv-v3 .cv-buy__tier-grid { gap: 7px; margin-top: 10px; }
  .cv-v3 .cv-buy__tier-card { padding: 15px 7px 12px; border-radius: 12px; }
  .cv-v3 .cv-buy__tier-label { font-size: 11px; margin-bottom: 3px; }
  .cv-v3 .cv-buy__tier-price { font-size: 21px; letter-spacing: -0.02em; }
  .cv-v3 .cv-buy__tier-per { font-size: 9.5px; margin-top: 3px; }
  .cv-v3 .cv-buy__tier-tag { font-size: 8px; padding: 2px 7px; top: -9px; }
}
@media (max-width: 360px) {
  .cv-v3 .cv-buy__tier-grid { gap: 6px; }
  .cv-v3 .cv-buy__tier-card { padding: 14px 5px 11px; }
  .cv-v3 .cv-buy__tier-price { font-size: 19px; }
  .cv-v3 .cv-buy__tier-tag { font-size: 7.5px; padding: 2px 6px; }
}
/* cv-run modal chrome — mobile compaction (2026-06-11, operator request): tighten
   the dialog padding, head, summary band, and footer so the purchase modal reads
   as one compact unit on phones (pairs with the 3-across tier row above). The
   vehicle title drops to 18px so typical year/make/model lines stop wrapping,
   and the summary meta + trust row fit on one line again. */
@media (max-width: 480px) {
  .cv-v3 .cv-modal__dialog--run { padding: 20px 14px 16px; }
  .cv-v3 .cv-run__method { padding: 7px 10px; }
  .cv-v3 .cv-run__head { margin-bottom: 10px; }
  .cv-v3 .cv-run__vehicle { font-size: 18px; }
  .cv-v3 .cv-run__vin-label, .cv-v3 .cv-run__vin-mono { font-size: 11px; }
  .cv-v3 .cv-run__summary { padding: 10px 12px; gap: 10px; }
  .cv-v3 .cv-run__summary-title { font-size: 13.5px; }
  .cv-v3 .cv-run__summary-meta { font-size: 11px; gap: 6px; margin-top: 2px; }
  .cv-v3 .cv-run__footer { margin-top: 12px; padding-top: 12px; gap: 10px; }
  .cv-v3 .cv-run__after-total { font-size: 20px; }
  .cv-v3 .cv-run__redirect-note { font-size: 11px; margin-top: 10px; }
  .cv-v3 .cv-buy__trust-row { font-size: 10.5px; gap: 6px; margin-top: 10px; }
}

/* === 27.9 cv-report-frame — report viewer chrome (ReportFrame port, D-55) ===

   Re-skins the existing showReportViewer() chrome (toolbar + frame container) to the
   v2.3 ReportFrame design. PORTED VERBATIM from rfStyles (report-frame-styles.jsx);
   loading/error/spinner re-skin the existing .report-loading/.report-error/.spinner states.

   IMPORTANT (D-55, no-regression): this is CHROME ONLY. The report iframe still loads
   third-party Carfax/AutoCheck HTML via /serve_report.php (NOT modified). The iframe src
   contract, normalizeReportUrl, and serve_report.php are untouched by §27.9.

   §27.9 numbering note: §27.8 was claimed by §27.8 cv-run (D-54, plan 37-53, a dependency
   of this plan). This section uses the next genuinely-free subsection number, §27.9. The
   class names (cv-report-frame__*) are unaffected.

   Bundle sources (verbatim port — rfStyles object key → CSS declaration; camelCase →
   kebab-case; px numbers + var(--cc-*) strings preserved):
   - design-system/v2.3-source/project/ui_kits/marketing/report-frame-styles.jsx (rfStyles)
   - design-system/v2.3-source/project/ui_kits/marketing/ReportFrame.jsx          (markup +
     RF_ACCENT navy/blue/green source-tab active accents)
   - design-system/v2.3-source/project/ui_kits/marketing/report-frame.html        (rf-fade-in /
     rf-pop keyframes + close-hover rotate-90)

   Subsection map:
   - cv-report-frame__shell        — rfStyles.frame (maxWidth 1180, radius 18, deep shadow)
   - cv-report-frame__topbar       — rfStyles.topBar (+ __left/__right/__vehicle/__vin)
   - cv-report-frame__toolbar      — rfStyles.utilBtn group (Print/Share/Fullscreen)
   - cv-report-frame__close        — rfStyles.closeBtn (red, rotate-90 on hover)
   - cv-report-frame__source-tabs  — rfStyles.tabsBar/tabsInner (+ --hidden for single-report)
   - cv-report-frame__source-tab   — rfStyles.tab (+ --active navy/blue/green RF_ACCENT)
   - cv-report-frame__iframe-wrap  — rfStyles.iframeWrap (+ __iframe sizing)
   - cv-report-frame__loading/__error/__spinner — re-skin of .report-loading/.report-error/.spinner
   --- */

/* @keyframes rf-fade-in / rf-pop (from report-frame.html — emitted once) */
@keyframes rf-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes rf-pop { from { opacity: 0; transform: translateY(12px) scale(0.98); } to { opacity: 1; transform: none; } }

/* ---- Shell (rfStyles.frame) ---- */
.cv-v3 .cv-report-frame__shell {
  position: relative;
  background: #fff;
  border-radius: 18px;
  width: 100%;
  max-width: 1180px;
  margin: 0 auto;
  max-height: calc(100vh - 48px);
  display: flex;
  flex-direction: column;
  box-shadow: 0 32px 80px rgba(0, 0, 0, 0.35), 0 8px 20px rgba(0, 0, 0, 0.15);
  border: 1px solid var(--cc-border);
  overflow: hidden;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-report-frame__shell { animation: rf-pop 240ms cubic-bezier(0.16, 1, 0.3, 1); }
}

/* ---- Top bar (rfStyles.topBar) ---- */
.cv-v3 .cv-report-frame__topbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 18px;
  background: #fff;
  border-bottom: 1px solid var(--cc-border);
  gap: 12px;
  flex-wrap: wrap;
  flex-shrink: 0;
}
.cv-v3 .cv-report-frame__topbar-left { display: flex; align-items: center; gap: 12px; min-width: 0; }
.cv-v3 .cv-report-frame__topbar-right { display: flex; align-items: center; gap: 4px; }
.cv-v3 .cv-report-frame__vehicle { min-width: 0; display: flex; align-items: center; gap: 10px; }
.cv-v3 .cv-report-frame__vehicle-name {
  font-family: var(--cc-font-display);
  font-weight: 700;
  font-size: 15px;
  letter-spacing: -0.02em;
  color: var(--cc-fg-1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cv-v3 .cv-report-frame__vin {
  font-family: var(--cc-font-mono);
  font-size: 11px;
  color: var(--cc-fg-4);
  letter-spacing: 0.04em;
  font-weight: 600;
  background: var(--cc-bg-soft);
  padding: 3px 8px;
  border-radius: 5px;
  border: 1px solid var(--cc-border);
}

/* ---- Toolbar buttons (rfStyles.utilBtn / divider) ---- */
.cv-v3 .cv-report-frame__toolbar { display: flex; align-items: center; gap: 4px; }
.cv-v3 .cv-report-frame__toolbar button:not(.cv-report-frame__close) {
  width: 30px;
  height: 30px;
  border-radius: 7px;
  background: var(--cc-bg-soft);
  color: var(--cc-fg-3);
  border: 1px solid var(--cc-border);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: all 140ms;
  padding: 0;
}
.cv-v3 .cv-report-frame__toolbar button:not(.cv-report-frame__close):hover {
  background: #fff;
  border-color: var(--cc-fg-4);
  color: var(--cc-fg-1);
}
.cv-v3 .cv-report-frame__divider { width: 1px; height: 18px; background: var(--cc-border); margin: 0 4px; }

/* ---- Close (rfStyles.closeBtn + report-frame.html rotate-90 hover) ---- */
.cv-v3 .cv-report-frame__close {
  width: 30px;
  height: 30px;
  border-radius: 7px;
  background: #FEF2F2;
  color: #B91C1C;
  border: 1px solid #FECACA;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: all 160ms cubic-bezier(0.16, 1, 0.3, 1);
  padding: 0;
  font-size: 18px;
  line-height: 1;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-report-frame__close:hover { transform: rotate(90deg); background: #FEE2E2; border-color: #FCA5A5; }
}

/* ---- Source switcher (rfStyles.tabsBar / tabsInner / tab) ---- */
.cv-v3 .cv-report-frame__source-tabs {
  background: var(--cc-bg-soft);
  border-bottom: 1px solid var(--cc-border);
  padding: 8px 18px;
  flex-shrink: 0;
}
.cv-v3 .cv-report-frame__source-tabs--hidden,
.cv-v3 .cv-report-frame__source-tabs[hidden] { display: none; }
.cv-v3 .cv-report-frame__source-tabs-inner { display: flex; gap: 6px; flex-wrap: wrap; }
.cv-v3 .cv-report-frame__source-tab {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 12px;
  background: #fff;
  border: 1.5px solid var(--cc-border);
  border-radius: 9px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  color: var(--cc-fg-2);
  font-weight: 700;
  font-size: 13px;
  transition: all 180ms cubic-bezier(0.16, 1, 0.3, 1);
}
/* RF_ACCENT navy (Carfax) — default active accent */
.cv-v3 .cv-report-frame__source-tab--active,
.cv-v3 .cv-report-frame__source-tab--active.cv-report-frame__source-tab--navy {
  background: var(--cc-navy-bg);
  border: 1.5px solid var(--cc-navy);
  color: var(--cc-navy);
  box-shadow: 0 2px 6px rgba(0, 65, 106, 0.15);
}
/* RF_ACCENT blue (AutoCheck) */
.cv-v3 .cv-report-frame__source-tab--active.cv-report-frame__source-tab--blue {
  background: #EFF6FF;
  border: 1.5px solid var(--cc-blue);
  color: var(--cc-blue);
  box-shadow: 0 2px 6px rgba(0, 102, 255, 0.15);
}
/* RF_ACCENT green (Auctions, reserved) */
.cv-v3 .cv-report-frame__source-tab--active.cv-report-frame__source-tab--green {
  background: #F0FDF4;
  border: 1.5px solid var(--cc-green);
  color: var(--cc-green);
  box-shadow: 0 2px 6px rgba(0, 135, 83, 0.15);
}
.cv-v3 .cv-report-frame__source-tab-sub { font-size: 10px; font-weight: 500; color: var(--cc-fg-4); opacity: 0.8; margin-left: 2px; }
.cv-v3 .cv-report-frame__source-tab--active .cv-report-frame__source-tab-sub { color: inherit; }

/* ---- Iframe wrap (rfStyles.iframeWrap / iframeInner) ---- */
.cv-v3 .cv-report-frame__iframe-wrap {
  flex: 1;
  /* Vertical scrolling only: the dual-report carousel inside (.reports-wrapper,
     200% wide, moved via translateX by setActiveReport) must NOT be user-pannable
     — overflow-x auto let trackpad/touch slide past the active report (operator
     bug 2026-06-10). translateX switching is unaffected by hidden overflow. */
  overflow-x: hidden;
  overflow-y: auto;
  background: var(--cc-bg-soft);
  min-height: 0;
}
.cv-v3 .cv-report-frame__iframe-wrap[hidden] { display: none; }
/* Dual-report slider rail (reuses existing #reportSlider behavior; v2.3 chrome) */
.cv-v3 .cv-report-frame__slider {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 8px 18px;
  background: #fff;
  border-bottom: 1px solid var(--cc-border);
  flex-shrink: 0;
}
.cv-v3 .cv-report-frame__slider-labels {
  display: flex;
  justify-content: space-between;
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-4);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
/* Iframe sizing — keep usable height (compatible with the old calc(80vh - 50px) sizing) */
.cv-v3 .cv-report-frame__iframe {
  display: block;
  width: 100%;
  height: calc(100vh - 200px);
  min-height: 60vh;
  border: 0;
  background: #fff;
}
.cv-v3 .cv-report-frame__reports {
  display: flex;
  width: 200%;
  transition: transform 220ms cubic-bezier(0.16, 1, 0.3, 1);
}
.cv-v3 .cv-report-frame__reports--single { width: 100%; }
.cv-v3 .cv-report-frame__report-div { width: 50%; flex-shrink: 0; }
.cv-v3 .cv-report-frame__reports--single .cv-report-frame__report-div { width: 100%; }

/* ---- Loading / error / spinner (re-skin of .report-loading / .report-error / .spinner) ---- */
.cv-v3 .cv-report-frame__loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  padding: 64px 24px;
  min-height: 40vh;
  flex: 1;
  background: var(--cc-bg-soft);
  color: var(--cc-fg-3);
  font-family: var(--cc-font-body);
  font-size: 14px;
}
.cv-v3 .cv-report-frame__loading p { margin: 0; }
.cv-v3 .cv-report-frame__spinner {
  width: 38px;
  height: 38px;
  border-radius: 9999px;
  border: 3px solid var(--cc-border);
  border-top-color: var(--cc-navy);
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-report-frame__spinner { animation: spin 800ms linear infinite; }
}
.cv-v3 .cv-report-frame__error {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 64px 24px;
  min-height: 40vh;
  flex: 1;
  background: var(--cc-bg-soft);
  color: var(--cc-fg-2);
  font-family: var(--cc-font-body);
  font-size: 14px;
  text-align: center;
}
.cv-v3 .cv-report-frame__error p { margin: 0; }
.cv-v3 .cv-report-frame__error-icon { font-size: 34px; line-height: 1; color: #B45309; }
.cv-v3 .cv-report-frame__retry {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--cc-navy);
  color: #fff;
  border: none;
  border-radius: 8px;
  padding: 9px 18px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 13px;
}
.cv-v3 .cv-report-frame__retry:hover { background: var(--cc-navy-90, #00335a); }
.cv-v3 .cv-report-frame__support-link {
  color: var(--cc-fg-4);
  font-size: 12px;
  font-weight: 600;
  text-decoration: underline;
}

/* ---- §27.9 Responsive (D-35: 768 tablet / 420 small) ---- */
@media (max-width: 768px) {
  .cv-v3 .cv-report-frame__shell { border-radius: 14px; max-height: calc(100vh - 24px); }
  .cv-v3 .cv-report-frame__topbar { padding: 10px 14px; }
  .cv-v3 .cv-report-frame__vehicle-name { font-size: 14px; }
  .cv-v3 .cv-report-frame__source-tabs { padding: 8px 14px; }
  .cv-v3 .cv-report-frame__iframe { height: calc(100vh - 220px); }
}
@media (max-width: 420px) {
  .cv-v3 .cv-report-frame__vehicle { flex-direction: column; align-items: flex-start; gap: 4px; }
  .cv-v3 .cv-report-frame__source-tab-sub { display: none; }
}

/* === 27.10 cv-myreports — My Reports modal (MyReportsModal, AuthModals.jsx L215 + mdStyles
   reportsSearch/reportsList/reportRow/rowGhostBtn/rowPrimaryBtn/reportsFooter, modal-styles.jsx
   L145-185 + TypePillMd L282). RECHECK MS-2 — 37-50 punted these classes to "37-53/54 if
   needed" and no plan picked them up. Hero reuses the §27.2 cv-auth pill/title/sub primitives;
   dialog uses the shipped --lg (680px ↔ bundle Modal width 680). === */
.cv-v3 .cv-myreports__head { margin-bottom: 18px; }
.cv-v3 .cv-myreports__search {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--cc-bg-soft);
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  padding: 10px 14px;
  margin-bottom: 12px;
}
.cv-v3 .cv-myreports__search svg { color: var(--cc-fg-4); flex-shrink: 0; }
.cv-v3 .cv-myreports__search-input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-family: var(--cc-font-body);
  font-size: 14px;
  color: var(--cc-fg-1);
  min-width: 0;
}
.cv-v3 .cv-myreports__list {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--cc-border);
  border-radius: 12px;
  overflow: hidden;
  max-height: 360px;
  overflow-y: auto;
}
.cv-v3 .cv-myreports__row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--cc-border);
  background: #fff;
}
.cv-v3 .cv-myreports__row:last-child { border-bottom: none; }
.cv-v3 .cv-myreports__row-main { flex: 1; min-width: 0; }
.cv-v3 .cv-myreports__row-title {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
  flex-wrap: wrap;
}
.cv-v3 .cv-myreports__vehicle {
  font-weight: 600;
  font-size: 14px;
  color: var(--cc-fg-1);
}
.cv-v3 .cv-myreports__row-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  color: var(--cc-fg-4);
  flex-wrap: wrap;
}
.cv-v3 .cv-myreports__vin { font-family: var(--cc-font-mono); }
/* TypePillMd — Carfax navy / AutoCheck blue / Both green */
.cv-v3 .cv-myreports__type-pill {
  font-size: 10px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 9999px;
  letter-spacing: 0.04em;
  border: 1px solid var(--cc-border);
}
.cv-v3 .cv-myreports__type-pill--carfax { background: var(--cc-navy-bg); color: var(--cc-navy); border-color: var(--cc-navy-10); }
.cv-v3 .cv-myreports__type-pill--autocheck { background: #EFF6FF; color: var(--cc-blue); border-color: #BFDBFE; }
.cv-v3 .cv-myreports__type-pill--both { background: #F0FDF4; color: var(--cc-green); border-color: #00875340; }
.cv-v3 .cv-myreports__row-actions { display: flex; gap: 6px; }
.cv-v3 .cv-myreports__ghost-btn {
  width: 32px;
  height: 32px;
  border-radius: 8px;
  background: #fff;
  border: 1px solid var(--cc-border);
  color: var(--cc-fg-3);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  transition: all 140ms;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-myreports__ghost-btn:hover { border-color: var(--cc-navy); color: var(--cc-navy); }
}
.cv-v3 .cv-myreports__view-btn {
  background: var(--cc-navy);
  color: #fff;
  border: none;
  padding: 7px 14px;
  border-radius: 8px;
  cursor: pointer;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 12px;
  white-space: nowrap;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 3px rgba(0, 65, 106, 0.20);
  transition: all 140ms;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-myreports__view-btn:hover { transform: translateY(-1px); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 3px 8px rgba(0, 65, 106, 0.28); }
}
.cv-v3 .cv-myreports__empty {
  text-align: center;
  padding: 36px;
  color: var(--cc-fg-4);
  font-size: 14px;
}
.cv-v3 .cv-myreports__empty strong { color: var(--cc-fg-1); }
.cv-v3 .cv-myreports__footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 18px;
  margin-top: 18px;
  border-top: 1px solid var(--cc-border);
  flex-wrap: wrap;
  gap: 12px;
}
.cv-v3 .cv-myreports__secondary {
  background: #fff;
  color: var(--cc-navy);
  border: 1px solid var(--cc-navy);
  padding: 10px 18px;
  border-radius: 10px;
  font-family: var(--cc-font-body);
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
}
@media (max-width: 560px) {
  .cv-v3 .cv-myreports__row { flex-wrap: wrap; }
  .cv-v3 .cv-myreports__row-actions { width: 100%; justify-content: flex-end; }
}

/* === 27.11 upsell-banner — post-purchase subscription upsell band (RECHECK MS-5).
   .upsell-banner/.upsell-cta/.upsell-dismiss lost their CSS in an earlier stylesheet
   rewrite — the live post-purchase path (script.js showUpsellBanner, rendered into the
   VIN-results container on cv-v3 pages) emitted completely unstyled markup. Restyled
   to cv conventions (navy-soft band + navy CTA pill + ghost dismiss). === */
.cv-v3 .upsell-banner {
  position: relative;
  background: var(--cc-navy-bg);
  border: 1px solid var(--cc-navy-10);
  border-radius: 12px;
  padding: 18px 44px 18px 20px;
  margin: 16px auto;
  max-width: 640px;
  text-align: left;
}
.cv-v3 .upsell-banner h4 {
  font-family: var(--cc-font-display);
  font-size: 16px;
  font-weight: 700;
  color: var(--cc-navy);
  margin: 0 0 6px;
}
.cv-v3 .upsell-banner p {
  font-family: var(--cc-font-body);
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--cc-fg-2);
  margin: 0 0 12px;
}
.cv-v3 .upsell-banner p strong { color: var(--cc-fg-1); }
.cv-v3 .upsell-cta {
  display: inline-block;
  background: var(--cc-navy);
  color: #fff;
  font-family: var(--cc-font-body);
  font-weight: 700;
  font-size: 13px;
  padding: 9px 16px;
  border-radius: 9px;
  text-decoration: none;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 6px rgba(0, 65, 106, 0.22);
  transition: transform 140ms;
}
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .upsell-cta:hover { transform: translateY(-1px); }
}
.cv-v3 .upsell-dismiss {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 26px;
  height: 26px;
  border-radius: 8px;
  background: transparent;
  border: none;
  color: var(--cc-fg-4);
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
}
.cv-v3 .upsell-dismiss:hover { color: var(--cc-fg-1); }

/* === 27.12 pending-report state (2026-06-10 async Vehicle History API migration).
   Amber Pending pills mark still-generating purchases in the dashboard history
   table + the My Reports modal until pending_reports_cron.php flips them. === */
.cv-v3 .cv-myreports__type-pill--pending {
  background: #FFF7ED;
  color: #B45309;
  border-color: #FDBA74;
}
.cv-v3 .cv-dashboard__pending-pill {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: #FFF7ED;
  color: #B45309;
  border: 1px solid #FDBA74;
  padding: 3px 9px;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 700;
  white-space: nowrap;
}
.cv-v3 .cv-myreports__view-btn:disabled {
  background: var(--cc-bg-soft);
  color: var(--cc-fg-4);
  box-shadow: none;
  cursor: not-allowed;
}
/* Pending-purchase modal body (renderReportPendingState): stacked layout so the
   primary action never collides with the copy. cv-auth__primary declares no
   display — as an <a> ("Go to dashboard") it rendered INLINE and its padding
   collapsed into the surrounding text (the operator-reported overlap). */
.cv-v3 .cv-pending__body {
  display: flex;
  flex-direction: column;
  gap: 14px;
  margin-top: 8px;
  text-align: center;
}
.cv-v3 .cv-pending__body .cv-auth__sub { margin: 0; }
.cv-v3 .cv-pending__body .cv-auth__primary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  text-decoration: none;
  margin-top: 4px;
}
.cv-v3 .cv-pending__body .cv-auth__footer { margin-top: 4px; }
@media (prefers-reduced-motion: no-preference) {
  .cv-v3 .cv-myreports__view-btn:disabled:hover { transform: none; box-shadow: none; }
}

/* === 27.13 cv-loading — VIN / plate "Finding Reports" search state (2026-06-10 modal
   1:1 redesign, 37-MODALS-1TO1-TODO item 5). No bundle source exists for a searching
   modal (checked chats + ui_kits/marketing); styled with the §27 cv-modal conventions
   instead: display-font title, cc-navy spinner, cv-token step rows — done green /
   active navy with a pulse halo. Markup: vinLoadingHTML() in script.js (processVIN +
   processPlate). Replaces the legacy landing.css .vin-loading-state skin. === */
.cv-v3 .cv-loading {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 8px 0 4px;
}
.cv-v3 .cv-loading__spinner {
  width: 44px;
  height: 44px;
  border-radius: 9999px;
  border: 3px solid var(--cc-navy-10);
  border-top-color: var(--cc-navy);
  animation: cv-loading-spin 0.9s linear infinite;
}
@keyframes cv-loading-spin {
  to { transform: rotate(360deg); }
}
.cv-v3 .cv-loading__title {
  font-family: var(--cc-font-display);
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--cc-fg-1);
  margin: 16px 0 4px;
}
.cv-v3 .cv-loading__sub {
  font-size: 13.5px;
  color: var(--cc-fg-3);
  margin: 0 0 18px;
}
.cv-v3 .cv-loading__steps {
  display: flex;
  flex-direction: column;
  gap: 8px;
  width: 100%;
  text-align: left;
}
.cv-v3 .cv-loading__step {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  border: 1px solid var(--cc-border);
  border-radius: 10px;
  background: var(--cc-bg-soft);
  font-size: 13px;
  font-weight: 600;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-loading__step-icon {
  width: 22px;
  height: 22px;
  border-radius: 9999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  background: #fff;
  border: 1px solid var(--cc-border);
  font-size: 11px;
  font-weight: 700;
  color: var(--cc-fg-4);
}
.cv-v3 .cv-loading__step-icon .icon {
  width: 12px;
  height: 12px;
}
.cv-v3 .cv-loading__step--done {
  border-color: #00875340;
  background: #F0FDF4;
  color: var(--cc-fg-2);
}
.cv-v3 .cv-loading__step--done .cv-loading__step-icon {
  background: var(--cc-green);
  border-color: var(--cc-green);
  color: #fff;
}
.cv-v3 .cv-loading__step--active {
  border-color: var(--cc-navy-10);
  background: var(--cc-navy-bg);
  color: var(--cc-navy);
}
.cv-v3 .cv-loading__step--active .cv-loading__step-icon {
  background: var(--cc-navy);
  border-color: var(--cc-navy);
  color: #fff;
  animation: cv-loading-pulse 1.8s ease-in-out infinite;
}
@keyframes cv-loading-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(0, 65, 106, 0.35); }
  50% { box-shadow: 0 0 0 6px rgba(0, 65, 106, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .cv-v3 .cv-loading__spinner { animation-duration: 1.8s; }
  .cv-v3 .cv-loading__step--active .cv-loading__step-icon { animation: none; }
}
