/* =========================================================================
   Helms Law Group — Redesign layer (PILOT)
   Loaded only on pages with <body class="rd"> and only after styles.css.
   Goal: keep the premium, trustworthy bones; make the site feel modern,
   bold, and alive — motion, depth, confident color, and interaction.
   Nothing here touches non-pilot pages.
   ========================================================================= */

/* ---- Bold, high-contrast palette (techy indigo) — cascades to all .rd kids --
   Overrides the base color tokens ONLY on pilot pages, so existing components
   recolor automatically. Deep blue headings, near-black text, crisp cool
   neutrals, and an electric-indigo accent that pops. */
body.rd {
  /* The firm's original locked palette (the one that worked): deep navy +
     antique gold + cream, balanced by COOL gray neutrals so it never reads
     warm/desert. White is the dominant field; cream is an accent panel. */
  --color-navy: #0D1F3C;      /* deep navy — headings, dark bands, footer, primary btn */
  --color-charcoal: #1A1A1A;  /* near-black body text */
  --color-ivory: #EAEDF2;     /* cool light gray panel (crisp, not desert) */
  --color-stone: #DAE0E7;     /* COOL gray hairline border (the anti-desert key) */
  --color-gold: #B8962E;      /* antique gold accent */
  --color-white: #FFFFFF;

  --grid-max: 1320px;         /* wider sections on desktop */

  --rd-accent: #B8962E;        /* antique gold — links, icons, accents */
  --rd-accent-bright: #D4B458; /* light gold (hover) */
  --rd-accent-deep: #08172E;   /* navy-dark — dark gradient ends / button hover */
  --rd-accent-soft: #EDEFF2;   /* cool light tint for fills/icon boxes / row hover */
  --rd-good: #2F7D52;          /* checkmarks / "yes" */
  --rd-good-soft: #E4F1E9;
  --rd-warn: #8B1A1A;          /* "watch out" / "no" (deep red) */
  --rd-warn-soft: #F3E4E2;

  --rd-shadow-sm: 0 2px 10px rgba(13, 31, 60, 0.08);
  --rd-shadow-md: 0 12px 30px rgba(13, 31, 60, 0.14);
  --rd-shadow-lg: 0 22px 50px rgba(13, 31, 60, 0.20);
  --rd-ring: 0 0 0 3px rgba(184, 150, 46, 0.40);

  --rd-ease: cubic-bezier(0.22, 0.61, 0.36, 1);

  /* White is the dominant field; cream is a deliberate accent panel only. */
  background-color: var(--color-white);
}

/* Primary CTAs in midnight navy with white text; oxblood on hover. */
.rd .btn--primary {
  background-color: var(--color-navy);
  color: #fff;
}
.rd .btn--primary:hover {
  background-color: var(--rd-accent-deep);
}

/* ---- Scroll reveal --------------------------------------------------------
   Elements tagged [data-reveal] start hidden and ease in once observed.
   redesign.js adds .is-revealed. Reduced-motion users get content instantly. */
.rd [data-reveal] {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.6s var(--rd-ease), transform 0.6s var(--rd-ease);
  will-change: opacity, transform;
}
.rd [data-reveal].is-revealed {
  opacity: 1;
  transform: none;
}
.rd [data-reveal][data-reveal-delay="1"] { transition-delay: 0.08s; }
.rd [data-reveal][data-reveal-delay="2"] { transition-delay: 0.16s; }
.rd [data-reveal][data-reveal-delay="3"] { transition-delay: 0.24s; }

@media (prefers-reduced-motion: reduce) {
  .rd [data-reveal] { opacity: 1; transform: none; transition: none; }
}

/* ---- Links & buttons: more confident feedback ---------------------------- */
.rd a:hover { opacity: 1; }

.rd .btn {
  transition: background-color var(--transition-base), color var(--transition-base),
    border-color var(--transition-base), transform var(--transition-fast),
    box-shadow var(--transition-base);
}
.rd .btn--primary:hover {
  opacity: 1;
  transform: translateY(-2px);
  box-shadow: var(--rd-shadow-md);
}
.rd .btn--secondary:hover { transform: translateY(-2px); }

/* Optional accent button for "techy" emphasis CTAs */
.rd .btn--accent {
  background-color: var(--rd-accent);
  color: #fff;
}
.rd .btn--accent:hover {
  background-color: var(--rd-accent-bright);
  transform: translateY(-2px);
  box-shadow: var(--rd-shadow-md);
}

.rd :focus-visible {
  outline: none;
  box-shadow: var(--rd-ring);
  border-radius: 6px;
}

/* ---- Cards: lift, shadow, and accent on hover ----------------------------
   Applied to the existing card components additively, so base layout is kept. */
.rd .feature-card,
.rd .tier-card,
.rd .nav-card,
.rd .tp-card,
.rd .article-card,
.rd .process-step,
.rd .inaction-card,
.rd .worry-card {
  border: 1px solid rgba(15, 26, 46, 0.08);
  box-shadow: var(--rd-shadow-sm);
  transition: transform 0.25s var(--rd-ease), box-shadow 0.25s var(--rd-ease),
    border-color 0.25s var(--rd-ease);
}
.rd .feature-card:hover,
.rd .tier-card:hover,
.rd .nav-card:hover,
.rd .tp-card:hover,
.rd .article-card:hover,
.rd .inaction-card:hover,
.rd .worry-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--rd-shadow-lg);
  border-color: var(--rd-accent);
}

/* Confident accent on the small category/range labels (color "pop") */
.rd .worry-card__title,
.rd .tier-card__range {
  color: var(--rd-accent);
  font-weight: 600;
}
/* Photo cards: zoom the image slightly on hover for life */
.rd .worry-card__media,
.rd .tier-card__media { overflow: hidden; }
.rd .worry-card__media img,
.rd .tier-card__media img { transition: transform 0.4s var(--rd-ease); }
.rd .worry-card:hover .worry-card__media img,
.rd .tier-card:hover .tier-card__media img { transform: scale(1.04); }

/* ---- Card icons: pop and shift color on hover ---------------------------- */
.rd .card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  border-radius: 14px;
  background: var(--rd-accent-soft);
  color: var(--color-navy);
  margin-bottom: 18px;
  transition: background-color 0.25s var(--rd-ease), color 0.25s var(--rd-ease),
    transform 0.25s var(--rd-ease);
}
.rd .card-icon svg { width: 26px; height: 26px; display: block; }

.rd .feature-card:hover .card-icon,
.rd .tier-card:hover .card-icon,
.rd .nav-card:hover .card-icon {
  background: var(--rd-accent);
  color: #fff;
  transform: scale(1.06) rotate(-3deg);
}

/* A gold variant for premium/credential cards */
.rd .card-icon--gold {
  background: rgba(199, 167, 108, 0.18);
  color: #9c7b3f;
}
.rd .feature-card:hover .card-icon--gold {
  background: var(--color-gold);
  color: var(--color-navy);
}

/* ---- Tables / comparison columns: checkmarks, color, row hover ----------- */
.rd .comparison-table table,
.rd table.comparison-table {
  border-collapse: separate;
  border-spacing: 0;
  width: 100%;
  overflow: hidden;
  border-radius: var(--radius-card);
  box-shadow: var(--rd-shadow-sm);
}
.rd .comparison-table th,
.rd .comparison-table td {
  transition: background-color 0.18s ease;
}
.rd .comparison-table tbody tr:hover td {
  background-color: var(--rd-accent-soft);
}

/* Two-column "what stays / what we handle" style comparisons */
.rd .insight-comparison__column {
  border: 1px solid rgba(15, 26, 46, 0.08);
  border-radius: var(--radius-card);
  box-shadow: var(--rd-shadow-sm);
  transition: transform 0.25s var(--rd-ease), box-shadow 0.25s var(--rd-ease),
    border-color 0.25s var(--rd-ease);
  padding: clamp(22px, 3vw, 34px);
  background: #fff;
}
.rd .insight-comparison__column:hover {
  transform: translateY(-4px);
  box-shadow: var(--rd-shadow-md);
}
/* Color-code the two columns when tagged */
.rd .insight-comparison__column--good { border-top: 4px solid var(--rd-good); }
.rd .insight-comparison__column--warn { border-top: 4px solid var(--rd-warn); }

/* List rows with check / cross markers */
.rd .check-list { list-style: none; margin: 0; padding: 0; }
.rd .check-list li {
  position: relative;
  padding: 10px 0 10px 38px;
  border-bottom: 1px solid rgba(15, 26, 46, 0.07);
  line-height: 1.5;
}
.rd .check-list li:last-child { border-bottom: 0; }
.rd .check-list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 12px;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 14px;
}
.rd .check-list li.is-yes::before {
  background-color: var(--rd-good-soft);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232F8F66' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
}
.rd .check-list li.is-no::before {
  background-color: var(--rd-warn-soft);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23C0473B' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3C/svg%3E");
}

/* ---- Inline "explain this" popover --------------------------------------- */
.rd .explainer {
  position: relative;
  display: inline;
}
.rd .explainer__term {
  font: inherit;
  color: var(--rd-accent);
  background: none;
  border: 0;
  padding: 0 1px;
  cursor: help;
  border-bottom: 2px dotted var(--rd-accent);
  transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease;
}
.rd .explainer__term::after {
  content: "?";
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 15px;
  height: 15px;
  margin-left: 4px;
  font-size: 0.62em;
  font-weight: 700;
  vertical-align: super;
  color: #fff;
  background: var(--rd-accent);
  border-radius: 50%;
  transition: background-color 0.2s ease;
}
.rd .explainer__term:hover {
  color: var(--rd-accent-bright);
  border-bottom-color: var(--rd-accent-bright);
}
.rd .explainer.is-open .explainer__term {
  background: var(--rd-accent-soft);
  border-radius: 4px 4px 0 0;
}

.rd .explainer__pop {
  position: absolute;
  left: 0;
  top: calc(100% + 12px);
  z-index: 60;
  width: min(340px, 86vw);
  background: #fff;
  color: var(--color-charcoal);
  border: 1px solid rgba(15, 26, 46, 0.12);
  border-top: 4px solid var(--rd-accent);
  border-radius: 12px;
  box-shadow: var(--rd-shadow-lg);
  padding: 18px 20px;
  font-family: var(--font-sans);
  font-size: 0.95rem;
  line-height: 1.6;
  text-align: left;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 0.2s var(--rd-ease), transform 0.2s var(--rd-ease), visibility 0.2s;
}
.rd .explainer.is-open .explainer__pop {
  opacity: 1;
  visibility: visible;
  transform: none;
}
.rd .explainer__pop::before {
  content: "";
  position: absolute;
  left: 18px;
  top: -8px;
  width: 14px;
  height: 14px;
  background: var(--rd-accent);
  border-radius: 2px;
  transform: rotate(45deg);
}
.rd .explainer__pop strong {
  display: block;
  font-family: var(--font-serif);
  font-size: 1.02rem;
  color: var(--color-navy);
  margin-bottom: 6px;
}
.rd .explainer__pop p { margin: 0; }
.rd .explainer__close {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 26px;
  height: 26px;
  border: 0;
  background: none;
  color: var(--color-charcoal);
  opacity: 0.5;
  cursor: pointer;
  font-size: 1.1rem;
  line-height: 1;
}
.rd .explainer__close:hover { opacity: 1; }

/* Right-align the popover near the end of a line so it doesn't overflow */
.rd .explainer--right .explainer__pop { left: auto; right: 0; }
.rd .explainer--right .explainer__pop::before { left: auto; right: 18px; }

@media (max-width: 600px) {
  .rd .explainer__pop { width: min(320px, 90vw); }
}

/* === Mobile explainer popup — portaled centered dialog (LOCKED, 2026-06-04)
   PROBLEM: The credential popups in the Meet Brent section (Former
   Special Probate Judge, etc.) were appearing at the top of the
   PAGE (not the viewport) on mobile. The popup was set to position:
   fixed, top: 50%, but transformed ancestors in the document (e.g.
   reveal-on-scroll sections that briefly translateY during animation)
   were creating a containing block that hijacked position:fixed —
   so the popup anchored to 50% of THE SECTION'S height, which sat
   far above the user's current scroll position. Brent: "I have to
   scroll up to it."

   FIX: redesign.js now portals the popup + a dim backdrop to
   document.body whenever .is-open fires on mobile. Direct child of
   body = no transformed ancestor in the chain, so position:fixed
   anchors to the viewport correctly. On close, the popup is moved
   back to its inline location so desktop reading order is preserved
   and a resize-to-desktop doesn't leave it stranded on body.

   The popup is marked with data-portaled="1" while it's on body —
   that's what these selectors hook into. The legacy
   `.explainer.is-open .explainer__pop` selectors still apply on
   desktop where no portaling happens.
   ============================================================ */
@media (max-width: 700px) {
  .rd .explainer__pop[data-portaled="1"] {
    position: fixed;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: min(360px, 92vw);
    max-height: 80vh;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    z-index: 9500;
    padding: 26px 24px 22px;
    /* Override the default explainer hidden state — when portaled, the
       popup is being shown right now. */
    opacity: 1;
    visibility: visible;
  }
  /* Arrow tab points at the term on desktop — meaningless when popup
     is viewport-centered. */
  .rd .explainer__pop[data-portaled="1"]::before { display: none; }

  /* Backdrop element appended to body alongside the popup. Tapping it
     closes the popup (wired in JS). */
  .rd .explainer__backdrop {
    position: fixed;
    inset: 0;
    background: rgba(15, 26, 46, 0.55);
    z-index: 9499;
    cursor: pointer;
  }

  /* Bump close button hit area on touch — easier to tap. */
  .rd .explainer__pop[data-portaled="1"] .explainer__close {
    width: 36px;
    height: 36px;
    font-size: 1.4rem;
    top: 6px;
    right: 6px;
    opacity: 0.7;
  }
}

/* ---- Background texture (alternating; keeps bands from feeling flat) -------
   Light panels get a fine dot grid; the dark footer gets a subtle diagonal
   weave. White sections are intentionally left plain so texture alternates. */
.rd .insight-section--ivory,
.rd .team-bio,
.rd .tier-router {
  background-image: radial-gradient(rgba(13, 31, 60, 0.05) 1.4px, transparent 1.5px);
  background-size: 22px 22px;
}
.rd .site-footer {
  background-image: repeating-linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.05) 0,
    rgba(255, 255, 255, 0.05) 1px,
    transparent 1px,
    transparent 10px
  );
}

/* =========================================================================
   BOLD PASS — big colored headings -> large subhead -> body; cards that pop
   ========================================================================= */

/* Headings: bigger and heavier, in the bold brand blue (deep navy var). */
.rd h1 { font-size: clamp(2.4rem, 4.4vw, 3.6rem); font-weight: 700; letter-spacing: -0.015em; line-height: 1.1; }
.rd h2 { font-size: clamp(1.9rem, 3.4vw, 2.7rem); font-weight: 700; letter-spacing: -0.01em; line-height: 1.15; }
.rd h3 { font-size: clamp(1.25rem, 1.9vw, 1.55rem); font-weight: 600; line-height: 1.25; }

/* Kicker / eyebrow labels in the electric accent, confident weight. */
.rd .eyebrow,
.rd .insight-section__eyebrow,
.rd .referral-meet__eyebrow,
.rd .tier-router__eyebrow {
  color: var(--rd-accent);
  font-weight: 700;
  letter-spacing: 0.16em;
  opacity: 1;
}

/* Large, readable subheads (the step between heading and body). */
.rd .insight-section__lede,
.rd .page-hero__sub {
  font-size: clamp(1.12rem, 1.7vw, 1.35rem);
  line-height: 1.6;
}

/* Cards: solid white so the textured background never bleeds through them,
   with a shadow strong enough to lift them off the band. */
.rd .feature-card,
.rd .tier-card,
.rd .nav-card,
.rd .tp-card,
.rd .article-card,
.rd .inaction-card,
.rd .worry-card {
  background-color: #fff;
  box-shadow: 0 6px 22px rgba(21, 29, 46, 0.10);
}

/* =========================================================================
   BOLD COLOR-BLOCK BAND — the "modern/bold" lever (texture over bold color)
   Demonstrated on the closing CTA: vivid indigo gradient, subtle white
   weave texture, big white headline, white button that pops.
   ========================================================================= */
/* Final CTA keeps the base navy + Office 2 photo treatment (the classic look
   you liked); the deep-navy token alone re-skins it. No override needed. */

/* =========================================================================
   STAT BAND — bold color-block of substance stats. Matches a competitor's
   trust-stats band and doubles as a mid-page "pop" moment. Big serif numbers
   on the vivid indigo gradient + subtle weave texture.
   ========================================================================= */
.rd .stat-band {
  background-color: #1B2A55;
  background-image:
    repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.06) 0, rgba(255, 255, 255, 0.06) 1px, transparent 1px, transparent 11px),
    linear-gradient(120deg, #3148F6 0%, #233A86 55%, #1B2A55 100%);
  color: #fff;
  padding-top: clamp(48px, 7vh, 84px);
  padding-bottom: clamp(48px, 7vh, 84px);
}
.rd .stat-band__grid {
  max-width: var(--grid-max);
  margin: 0 auto;
  padding: 0 28px;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(24px, 4vw, 56px);
  text-align: center;
}
.rd .stat-band__num {
  font-family: var(--font-serif);
  font-weight: 800;
  font-size: clamp(2.6rem, 5vw, 3.9rem);
  line-height: 1;
  letter-spacing: -0.02em;
  color: #fff;
}
.rd .stat-band__label {
  font-family: var(--font-sans);
  font-size: 0.84rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.82);
  margin-top: 12px;
}
.rd .stat-band__note {
  max-width: var(--grid-max);
  margin: clamp(26px, 4vw, 38px) auto 0;
  padding: 0 28px;
  text-align: center;
  font-family: var(--font-sans);
  font-size: 0.76rem;
  line-height: 1.5;
  color: rgba(255, 255, 255, 0.6);
}
@media (max-width: 680px) {
  .rd .stat-band__grid { grid-template-columns: 1fr; gap: 30px; }
}

/* =========================================================================
   WHY HELMS — pillar row with refined icons (the "Why choose us" answer).
   ========================================================================= */
.rd .why-helms { background-color: var(--color-ivory); }
.rd .why-helms__header { text-align: center; max-width: 760px; margin: 0 auto clamp(36px, 5vw, 56px); }
.rd .why-helms__grid {
  max-width: var(--grid-max);
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: clamp(26px, 3vw, 40px);
}
.rd .pillar h3 { font-size: clamp(1.3rem, 1.7vw, 1.55rem); }
.rd .pillar p { font-size: 0.95rem; }
.rd .pillar {
  text-align: left;
  background: var(--color-white);
  border: 1px solid var(--color-stone);
  border-radius: var(--radius-card);
  padding: clamp(24px, 2.6vw, 32px);
  box-shadow: var(--rd-shadow-sm);
  transition: transform 0.25s var(--rd-ease), box-shadow 0.25s var(--rd-ease), border-color 0.25s var(--rd-ease);
}
.rd .pillar:hover {
  transform: translateY(-6px);
  box-shadow: var(--rd-shadow-lg);
  border-color: var(--rd-accent);
}
.rd .pillar h3 { margin: 0 0 10px; }
.rd .pillar p { margin: 0; font-size: 1rem; line-height: 1.6; color: var(--color-charcoal); }
.rd .pillar .card-icon { cursor: default; }
.rd .pillar:hover .card-icon {
  background: var(--rd-accent);
  color: #fff;
  transform: scale(1.06) rotate(-3deg);
}
@media (max-width: 900px) { .rd .why-helms__grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .rd .why-helms__grid { grid-template-columns: 1fr; } }

/* =========================================================================
   SELF-IDENTIFICATION ROW — "this is for you" situation cards (skim + click).
   ========================================================================= */
.rd .self-id { background-color: var(--color-ivory); }
.rd .self-id__header { text-align: center; max-width: 720px; margin: 0 auto clamp(34px, 4vw, 52px); }
.rd .self-id__grid {
  max-width: var(--grid-max);
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(18px, 2.2vw, 28px);
}
.rd .self-id__card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
  background: #fff;
  border: 1px solid var(--color-stone);
  border-radius: var(--radius-card);
  padding: clamp(24px, 2.6vw, 32px);
  box-shadow: var(--rd-shadow-sm);
  transition: transform 0.25s var(--rd-ease), box-shadow 0.25s var(--rd-ease), border-color 0.25s var(--rd-ease);
}
.rd .self-id__card:hover {
  transform: translateY(-6px);
  box-shadow: var(--rd-shadow-lg);
  border-color: var(--rd-accent);
}
.rd .self-id__card .card-icon { margin-bottom: 0; }
.rd .self-id__card:hover .card-icon {
  background: var(--rd-accent);
  color: #fff;
  transform: scale(1.06) rotate(-3deg);
}
.rd .self-id__title {
  font-family: var(--font-serif);
  font-weight: 700;
  font-size: clamp(1.2rem, 1.6vw, 1.45rem);
  line-height: 1.2;
  color: var(--color-navy);
  margin: 0;
}
@media (max-width: 900px) { .rd .self-id__grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 520px) { .rd .self-id__grid { grid-template-columns: 1fr; } }

/* =========================================================================
   ART DIRECTION (Brent's spec) — bold navy header, gold CTAs, cream hero,
   elevated cream Why-Helms cards. Appended last so these win.
   ========================================================================= */

/* ---- Header: deep navy bar ---- */
.rd .site-header { background-color: var(--color-navy); border-bottom: 1px solid rgba(255, 255, 255, 0.10); }

/* ---- Sticky breadcrumb — rd header is taller than the base 84px assumption.
   JS measures it live and sets --rd-header-height. Mobile breadcrumb stays
   relative (defined in base styles). ---- */
.rd .breadcrumb {
  position: sticky;
  top: var(--rd-header-height, 130px);
  z-index: 40;
  background-color: var(--color-ivory);
  border-bottom: 1px solid var(--color-stone);
}
@media (max-width: 768px) {
  .rd .breadcrumb { position: relative; top: auto; }
}
.rd .site-header__utility { background-color: var(--color-navy); border-bottom: 1px solid rgba(255, 255, 255, 0.12); }
.rd .site-header__utility-inner { height: 46px; }                 /* larger top line */
.rd .site-header__addr,
.rd .site-header__hours { color: var(--color-ivory); font-size: 0.92rem; opacity: 0.92; }
.rd .site-header__addr svg,
.rd .site-header__phone svg { color: var(--color-gold); }
.rd .site-header__util-sep { color: var(--color-gold); }
.rd .site-header__phone { color: var(--color-ivory); font-size: 1.02rem; }
.rd .brand__logo { filter: brightness(0) invert(1); }            /* navy wordmark -> white */
.rd .site-footer__logo { filter: brightness(0) invert(1); }
.rd .primary-nav__link,
.rd .mega-trigger,
.rd .dropdown-trigger { color: var(--color-ivory); }
.rd .nav-toggle__bar { background-color: var(--color-ivory); }

/* Header consultation CTA: antique gold that reacts on hover the same
   way as the homepage hero "Attend a Workshop" button. The original
   rule had `overflow: hidden` which can interact oddly with transforms
   in some browsers — removed. !important on hover values is belt-and-
   suspenders to win against any cached or competing rule. */
.rd .primary-nav__cta {
  background-color: var(--color-gold);
  color: var(--color-navy);
  position: relative;
  will-change: transform, box-shadow, background-color;
  transition: background-color .25s var(--rd-ease),
              box-shadow .25s var(--rd-ease),
              transform .2s var(--rd-ease) !important;
}
.rd .primary-nav__cta:hover,
.rd .primary-nav__cta:focus-visible {
  transform: translateY(-3px) !important;
  background-color: #D4B567 !important;
  box-shadow: 0 12px 28px rgba(0, 0, 0, 0.55) !important;
  opacity: 1 !important;
}
.rd .primary-nav__cta:active {
  transform: translateY(-1px) !important;
  box-shadow: 0 6px 14px rgba(0, 0, 0, 0.45) !important;
}

/* ---- Gold button system (fill + outline) with a shine sweep ---- */
.rd .btn--primary {
  background-color: var(--color-gold);
  color: var(--color-navy);
  position: relative;
  overflow: hidden;
}
.rd .btn--primary:hover {
  background-color: var(--rd-accent-bright);
  color: var(--color-navy);
  transform: translateY(-2px);
  box-shadow: 0 10px 24px rgba(184, 150, 46, 0.42);
  opacity: 1;
}
.rd .btn--primary::after {
  content: "";
  position: absolute;
  top: 0; left: -130%;
  width: 55%; height: 100%;
  background: linear-gradient(120deg, transparent, rgba(255, 255, 255, 0.6), transparent);
  transform: skewX(-20deg);
  transition: left .6s var(--rd-ease);
  pointer-events: none;
}
.rd .btn--primary:hover::after { left: 150%; }

.rd .btn--secondary {
  background-color: transparent;
  color: var(--color-gold);
  border-color: var(--color-gold);
}
.rd .btn--secondary:hover {
  background-color: var(--color-gold);
  color: var(--color-navy);
  transform: translateY(-2px);
  opacity: 1;
}

/* ---- Hero: cream veil, navy text, staggered fade-in ---- */
.rd .page-hero__veil {
  background: linear-gradient(
    180deg,
    rgba(13, 31, 60, 0.42) 0%,
    rgba(13, 31, 60, 0.66) 52%,
    rgba(13, 31, 60, 0.88) 100%
  );
}
.rd .page-hero__copy,
.rd .page-hero__headline,
.rd .page-hero__eyebrow { color: #FFFFFF; }
.rd .page-hero__sub { color: rgba(255, 255, 255, 0.90); }

@keyframes rdFadeUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
.rd .page-hero__copy > * { opacity: 0; animation: rdFadeUp .7s var(--rd-ease) forwards; }
.rd .page-hero__copy > .page-hero__eyebrow { animation-delay: .05s; }
.rd .page-hero__copy > .page-hero__headline { animation-delay: .15s; }
.rd .page-hero__copy > .page-hero__sub { animation-delay: .4s; }
.rd .page-hero__copy > .btn-row { animation-delay: 1s; }
@media (prefers-reduced-motion: reduce) {
  .rd .page-hero__copy > * { opacity: 1; animation: none; }
}

/* ---- Why Helms: white section + faint gold texture; elevated cream cards ---- */
.rd .why-helms {
  background-color: var(--color-ivory);          /* cool gray panel; white cards pop on it */
  background-image: radial-gradient(rgba(184, 150, 46, 0.07) 1.4px, transparent 1.5px);
  background-size: 24px 24px;
}
.rd .why-helms__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);       /* desktop/laptop: one wide row */
  gap: clamp(20px, 2vw, 32px);
}
@media (max-width: 1024px) { .rd .why-helms__grid { grid-template-columns: repeat(2, 1fr); } } /* tablet: 2x2 */
@media (max-width: 560px)  { .rd .why-helms__grid { grid-template-columns: 1fr; } }            /* phone: stacked */
.rd .pillar {
  text-align: center;
  background-color: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.06);    /* whisper hairline, not formal */
  border-radius: 20px;                          /* softer, modern radius */
  padding: clamp(32px, 3.2vw, 44px);            /* generous, airy */
  box-shadow: 0 8px 28px rgba(13, 31, 60, 0.07);
}
.rd .pillar:hover {
  transform: translateY(-12px);
  box-shadow: 0 24px 56px rgba(13, 31, 60, 0.14);
  border-color: rgba(184, 150, 46, 0.35);       /* faint gold whisper on hover */
}
.rd .pillar h3 {
  font-size: clamp(1.4rem, 1.95vw, 1.75rem);
  font-weight: 700;
  margin: 0;                                    /* no body text underneath */
}
.rd .pillar .card-icon {
  margin: 0 auto 18px;                          /* centered in the box */
  background-color: #D4B458;                    /* lighter gold circle */
  color: var(--color-navy);                    /* deep navy icon */
}
.rd .pillar:hover .card-icon {                 /* keep gold — the box does the moving */
  background-color: #D4B458;
  color: var(--color-navy);
  transform: none;
}
.rd .pillar h3 { color: var(--color-navy); }   /* bold headline color */
.rd .pillar p { color: var(--color-charcoal); }

/* ---- Footer: deep navy fading to a lighter blue ---- */
.rd .site-footer {
  background-color: #0D1F3C;
  background-image:
    repeating-linear-gradient(135deg, rgba(255, 255, 255, 0.045) 0, rgba(255, 255, 255, 0.045) 1px, transparent 1px, transparent 10px),
    linear-gradient(180deg, #0D1F3C 0%, #1E3559 100%);
}

/* "Why Helms Law Group" kicker — make it prominent, not tiny */
.rd .why-helms__eyebrow {
  font-size: clamp(0.95rem, 1.4vw, 1.15rem);
  letter-spacing: 0.18em;
}

/* Alternating section backgrounds for visual rhythm (gray ↔ white) */
.rd .worries     { background-color: var(--color-white); }
.rd .brent       { background-color: var(--color-ivory); }
.rd .tier-router { background-color: var(--color-white); }
.rd .workshops   { background-color: var(--color-ivory); }
.rd .inaction    { background-color: var(--color-white); }

/* Brent's photo + the workshop photo lift on hover (modern, premium) */
.rd .brent__media,
.rd .workshops__media {
  border-radius: 18px;
  overflow: hidden;
  transition: transform .35s var(--rd-ease), box-shadow .35s var(--rd-ease);
  box-shadow: 0 12px 36px rgba(13, 31, 60, 0.10);
}
.rd .brent__media:hover,
.rd .workshops__media:hover {
  transform: translateY(-10px);
  box-shadow: 0 28px 60px rgba(13, 31, 60, 0.18);
}

/* Scroll-reveal tuning for sections (slightly bigger movement than the
   default [data-reveal] used by smaller items) */
.rd main > section[data-reveal] {
  transform: translateY(28px);
  transition: opacity .85s var(--rd-ease), transform .85s var(--rd-ease);
}

/* =========================================================================
   CONCERN PAGE TREATMENTS
   ========================================================================= */

/* "What you should know" — each bullet is its own card; each lifts in isolation. */
.rd .concern-bullets__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 14px;
}
.rd .concern-bullets__list li {
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.06);
  border-radius: 14px;
  padding: 18px 22px 18px 56px;
  box-shadow: 0 4px 14px rgba(13, 31, 60, 0.05);
  position: relative;
  font-size: 1.02rem;
  line-height: 1.55;
  color: var(--color-charcoal);
  transition: transform .3s var(--rd-ease),
              box-shadow .3s var(--rd-ease),
              border-color .3s var(--rd-ease);
}
.rd .concern-bullets__list li::before {
  content: "";
  position: absolute;
  left: 18px;
  top: 22px;
  width: 24px;
  height: 24px;
  background: var(--color-gold);
  border-radius: 50%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 14px;
}
.rd .concern-bullets__list li:hover {
  transform: translateY(-4px);
  box-shadow: 0 18px 38px rgba(13, 31, 60, 0.12);
  border-color: rgba(184, 150, 46, 0.35);
}

/* The image in "What you should know" — lifts on hover */
.rd .concern-bullets__media {
  border-radius: 20px;
  overflow: hidden;
  transition: transform .35s var(--rd-ease), box-shadow .35s var(--rd-ease);
  box-shadow: 0 12px 36px rgba(13, 31, 60, 0.10);
}
.rd .concern-bullets__media:hover {
  transform: translateY(-8px) scale(1.015);
  box-shadow: 0 28px 60px rgba(13, 31, 60, 0.18);
}

/* Trust checklist — modern card-table with gold check circles */
.rd .trust-table {
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.06);
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 8px 28px rgba(13, 31, 60, 0.07);
  max-width: 960px;
  margin: 0 auto;
}
.rd .trust-checklist {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--font-sans);
}
.rd .trust-checklist thead th {
  background: var(--color-navy);
  color: #FFFFFF;
  padding: 20px 22px;
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: 1.05rem;
  letter-spacing: 0.01em;
  text-align: center;
}
.rd .trust-checklist thead th:first-child { text-align: left; }
.rd .trust-checklist tbody td {
  padding: 16px 22px;
  border-top: 1px solid rgba(13, 31, 60, 0.07);
  vertical-align: middle;
  transition: background-color .25s var(--rd-ease);
}
.rd .trust-checklist tbody td:first-child {
  font-size: 1rem;
  color: var(--color-charcoal);
  font-weight: 500;
  line-height: 1.45;
}
.rd .trust-checklist tbody td:not(:first-child) {
  text-align: center;
  width: 22%;
}
.rd .trust-checklist tbody td.is-yes::after {
  content: "";
  display: inline-block;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--color-gold);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 18px;
  transition: transform .25s var(--rd-ease), background-color .25s var(--rd-ease);
}
.rd .trust-checklist tbody tr:hover td { background-color: rgba(184, 150, 46, 0.06); }
.rd .trust-checklist tbody tr:hover td.is-yes::after {
  transform: scale(1.12);
  background-color: #D4B458;
}

@media (max-width: 680px) {
  .rd .trust-table { border-radius: 16px; }
  .rd .trust-checklist thead th { padding: 14px 10px; font-size: 0.9rem; }
  .rd .trust-checklist tbody td { padding: 12px 12px; }
  .rd .trust-checklist tbody td:first-child { font-size: 0.95rem; }
  .rd .trust-checklist tbody td.is-yes::after { width: 26px; height: 26px; background-size: 14px; }
}

/* ---- Quiz-compare ---- (interactive knowledge check on insight pages.
   3-column layout: statement | system A circle | system B circle. User
   reads each statement and clicks the circle under the system that
   actually has that feature. The truth side flips across rows so the
   user has to know, not just always tap one side. Each row carries
   data-correct="a" or "b" matching one of the circles' data-pick.
   Correct pick → gold check + green tint. Incorrect → red X + red
   tint. Same circle clicked again toggles off. Counter tallies correct
   picks; full-correct unlocks a completion message. */
.rd .quiz-compare {
  margin: 28px 0 0;
}
.rd .quiz-compare__intro {
  text-align: center;
  margin: 0 0 18px;
  font-family: var(--font-sans);
  color: var(--color-navy);
  font-size: 0.95rem;
  letter-spacing: 0.02em;
}
.rd .quiz-compare__intro strong {
  display: inline-block;
  background: var(--color-gold);
  color: var(--color-navy);
  padding: 4px 12px;
  border-radius: 999px;
  font-weight: 700;
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-right: 10px;
  vertical-align: 2px;
}
.rd .quiz-compare__table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  background: #FFFFFF;
  border-radius: 18px;
  overflow: hidden;
  box-shadow: 0 12px 36px rgba(13, 31, 60, 0.08);
}
.rd .quiz-compare__head {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: 1rem;
  color: #FFFFFF;
  padding: 18px 16px;
  text-align: center;
  background: var(--color-navy);
}
.rd .quiz-compare__head--label {
  text-align: left;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.72);
}
.rd .quiz-compare__head--a,
.rd .quiz-compare__head--b {
  border-left: 1px solid rgba(255, 255, 255, 0.18);
}
.rd .quiz-compare__row > td {
  padding: 18px;
  border-top: 1px solid rgba(13, 31, 60, 0.08);
  font-family: var(--font-sans);
  color: var(--color-navy);
  vertical-align: middle;
  transition: background-color .32s var(--rd-ease);
}
.rd .quiz-compare__statement {
  font-size: 0.98rem;
  line-height: 1.45;
  width: 50%;
}
.rd .quiz-compare__pick {
  width: 25%;
  text-align: center;
  border-left: 1px solid rgba(13, 31, 60, 0.06);
  transition: background-color .32s var(--rd-ease);
}
.rd .quiz-compare__circle {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 2px solid var(--color-navy);
  background: #FFFFFF;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 18px;
  cursor: pointer;
  padding: 0;
  display: inline-block;
  vertical-align: middle;
  transition: transform .2s var(--rd-ease), background-color .25s var(--rd-ease), border-color .25s var(--rd-ease);
}
.rd .quiz-compare__circle:hover {
  transform: scale(1.08);
  background-color: rgba(184, 150, 46, 0.10);
}
.rd .quiz-compare__circle:focus-visible {
  outline: 3px solid var(--color-gold);
  outline-offset: 2px;
}
/* Correct pick — gold check on green */
.rd .quiz-compare__row.is-correct-picked .quiz-compare__statement {
  background-color: #ECF3E8;
}
.rd .quiz-compare__row.is-correct-picked .quiz-compare__pick.is-picked {
  background-color: #D9E8D4;
}
.rd .quiz-compare__row.is-correct-picked .quiz-compare__circle.is-picked {
  background-color: var(--color-gold);
  border-color: var(--color-gold);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>");
}
/* Incorrect pick — red X on red */
.rd .quiz-compare__row.is-incorrect-picked .quiz-compare__statement {
  background-color: #FAEDEB;
}
.rd .quiz-compare__row.is-incorrect-picked .quiz-compare__pick.is-picked {
  background-color: #F4D7D4;
}
.rd .quiz-compare__row.is-incorrect-picked .quiz-compare__circle.is-picked {
  background-color: #B25344;
  border-color: #B25344;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><line x1='18' y1='6' x2='6' y2='18'/><line x1='6' y1='6' x2='18' y2='18'/></svg>");
}
.rd .quiz-compare__score {
  margin: 20px 0 0;
  padding: 18px 22px;
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.10);
  border-radius: 14px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  box-shadow: 0 6px 20px rgba(13, 31, 60, 0.05);
}
.rd .quiz-compare__score-label {
  font-family: var(--font-sans);
  color: var(--color-navy);
  font-size: 0.98rem;
  margin: 0;
}
.rd .quiz-compare__score-count {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: 1.15rem;
  color: var(--color-gold);
}
.rd .quiz-compare__success {
  margin: 0;
  padding: 14px 18px;
  background: #D9E8D4;
  border-radius: 10px;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 0.98rem;
  color: #2E5C2E;
  width: 100%;
  text-align: center;
  transition: opacity .35s var(--rd-ease);
}
.rd .quiz-compare__success[hidden] {
  display: none;
}

/* Anchor link row — centered wrapper for the deeplink below a quiz */
.rd .quiz-compare__deeplink-row {
  text-align: center;
  margin: 20px 0 0;
}
/* Anchor link to interactive quiz from a related section */
.rd .quiz-compare__deeplink {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 14px 0 22px;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 0.98rem;
  color: var(--color-navy);
  text-decoration: none;
  border-bottom: 2px solid var(--color-gold);
  padding-bottom: 2px;
  transition: color .2s var(--rd-ease), transform .2s var(--rd-ease);
}
.rd .quiz-compare__deeplink:hover {
  color: var(--color-gold);
  transform: translateX(2px);
}
.rd .quiz-compare__deeplink-arrow {
  font-size: 1.15em;
  line-height: 1;
}

@media (max-width: 680px) {
  .rd .quiz-compare__head { font-size: 0.95rem; padding: 14px 12px; }
  .rd .quiz-compare__row > td { padding: 12px 10px; }
  .rd .quiz-compare__statement { font-size: 0.92rem; width: 36%; }
  .rd .quiz-compare__pick { width: 52px; }
  .rd .quiz-compare__circle { width: 28px; height: 28px; background-size: 14px; }
  .rd .quiz-compare__score { padding: 14px 16px; }
}
@media (prefers-reduced-motion: reduce) {
  .rd .quiz-compare__row > td,
  .rd .quiz-compare__circle,
  .rd .quiz-compare__deeplink { transition: none; }
}

/* ---- Lineage visual ---- (CSS-Grid infographic for the Dynasty Trust
   page. Top row: Family Trust (big, spans left+wall cols) + Trustee
   (right col). Middle row: vertical beneficiary chain on the left
   (Child / Grandchild / Great-grandchild / Future Generations), a
   brick wall in the middle, and a vertical risk chain on the right
   (Divorce / Stepfamily Claims / Judgments / Bankruptcy). Statement
   spans below; Result banner with shield icon anchors the bottom.
   Inline SVG icons throughout — currentColor, scale crisply. */
.rd .lineage-visual {
  display: grid;
  grid-template-columns: 1.45fr 36px 1fr;
  grid-template-areas:
    "trust trust trustee"
    "benefs wall risks"
    "statement statement statement"
    "result result result";
  gap: 18px;
  margin: 36px 0 0;
  padding: 32px;
  background: #F4EFE5;
  border-radius: 22px;
  border: 1px solid rgba(13, 31, 60, 0.08);
}
.rd .lineage-card--trust { grid-area: trust; }
.rd .lineage-card--trustee { grid-area: trustee; }
.rd .lineage-visual__benefs { grid-area: benefs; }
.rd .lineage-visual__wall { grid-area: wall; }
.rd .lineage-visual__risks { grid-area: risks; }
.rd .lineage-visual__statement { grid-area: statement; }
.rd .lineage-visual__result { grid-area: result; }

/* Family Trust (top, big, spans left two cols) */
.rd .lineage-card--trust {
  background: var(--color-navy);
  color: #FFFFFF;
  border-radius: 18px;
  padding: 30px 36px;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  box-shadow: 0 12px 32px rgba(13, 31, 60, 0.22);
}
.rd .lineage-card--trust .lineage-card__icon { color: var(--color-gold); }
.rd .lineage-card--trust .lineage-card__icon svg { width: 38px; height: 38px; }
.rd .lineage-card--trust .lineage-card__title {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: 1.6rem;
  margin: 0;
  letter-spacing: 0.01em;
}
.rd .lineage-card--trust .lineage-card__sub {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 1rem;
  opacity: 0.9;
  max-width: 360px;
}

/* Trustee (top right) */
.rd .lineage-card--trustee {
  background: #1B3460;
  color: #FFFFFF;
  border-radius: 16px;
  padding: 22px 22px;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  box-shadow: 0 8px 20px rgba(13, 31, 60, 0.20);
  align-self: stretch;
  justify-content: center;
}
.rd .lineage-card--trustee .lineage-card__icon { color: var(--color-gold); }
.rd .lineage-card--trustee .lineage-card__icon svg { width: 30px; height: 30px; }
.rd .lineage-card--trustee .lineage-card__title {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: 1.15rem;
  margin: 0;
}
.rd .lineage-card--trustee .lineage-card__sub {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 0.88rem;
  opacity: 0.88;
}

/* Beneficiary chain — vertical stack of 4, left column */
.rd .lineage-visual__benefs {
  display: flex;
  flex-direction: column;
  gap: 22px;
  align-self: stretch;
  position: relative;
}
/* Column label (e.g. "Your beneficiaries") */
.rd .lineage-visual__col-label {
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 0.78rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-navy);
  margin: 0 0 -8px;
  opacity: 0.78;
}
.rd .lineage-visual__col-label--risk {
  color: #B25344;
}
.rd .lineage-benef {
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.14);
  border-radius: 12px;
  padding: 16px 22px;
  display: flex;
  align-items: center;
  gap: 14px;
  box-shadow: 0 3px 10px rgba(13, 31, 60, 0.06);
  flex: 1;
  position: relative;
  transition: transform .35s var(--rd-ease), box-shadow .35s var(--rd-ease), border-color .35s var(--rd-ease);
}
/* Dashed gold connector between beneficiary boxes (lineage arrows) */
.rd .lineage-benef:not(:last-child)::after {
  content: '';
  position: absolute;
  left: 32px;
  bottom: -22px;
  width: 0;
  height: 22px;
  border-left: 2px dashed rgba(184, 150, 46, 0.55);
  pointer-events: none;
  z-index: 1;
}
/* Continuous gold asset dot flowing down the chain — visualizes
   wealth passing generation to generation */
.rd .lineage-visual__benefs::after {
  content: '';
  position: absolute;
  left: 28px;
  top: 24px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--color-gold);
  box-shadow: 0 0 14px rgba(184, 150, 46, 0.7);
  pointer-events: none;
  animation: lineage-asset-flow 6s ease-in-out infinite;
  z-index: 2;
}
@keyframes lineage-asset-flow {
  0% { top: 24px; opacity: 0; transform: scale(0.6); }
  8% { opacity: 1; transform: scale(1); }
  92% { opacity: 1; transform: scale(1); }
  100% { top: calc(100% - 24px); opacity: 0; transform: scale(0.6); }
}
.rd .lineage-benef__icon {
  color: var(--color-navy);
  flex-shrink: 0;
  display: inline-flex;
}
.rd .lineage-benef__icon svg { width: 26px; height: 26px; }
.rd .lineage-benef__label {
  margin: 0;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 0.98rem;
  color: var(--color-navy);
}

/* The wall — inline SVG brick pattern column */
.rd .lineage-visual__wall {
  align-self: stretch;
  display: flex;
}
.rd .lineage-visual__wall svg {
  width: 100%;
  height: 100%;
  display: block;
  border-radius: 4px;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.12);
}

/* Risk chain — vertical stack of 4, right column */
.rd .lineage-visual__risks {
  display: flex;
  flex-direction: column;
  gap: 22px;
  align-self: stretch;
}
.rd .lineage-risk {
  background: #FFFFFF;
  border: 1px solid rgba(178, 83, 68, 0.25);
  border-radius: 12px;
  padding: 16px 18px;
  display: flex;
  align-items: center;
  gap: 12px;
  box-shadow: 0 3px 10px rgba(178, 83, 68, 0.08);
  flex: 1;
  transition: transform .35s var(--rd-ease), box-shadow .35s var(--rd-ease), border-color .35s var(--rd-ease);
  cursor: default;
}
/* Hover: risk shifts toward the wall, suggesting it tries to cross */
.rd .lineage-risk:hover {
  transform: translateX(-10px);
  border-color: #B25344;
  box-shadow: 0 8px 22px rgba(178, 83, 68, 0.25);
}
/* When any risk is being hovered, the visual enters "defending" state:
   the wall glows gold; the beneficiary boxes show a green protected
   ring. The JS toggles .is-defending on the .lineage-visual root. */
.rd .lineage-visual__wall svg {
  transition: box-shadow .35s ease;
}
.rd .lineage-visual.is-defending .lineage-visual__wall svg {
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.12), 0 0 28px rgba(184, 150, 46, 0.55);
}
.rd .lineage-visual.is-defending .lineage-benef {
  border-color: rgba(90, 138, 90, 0.45);
  box-shadow: 0 3px 10px rgba(90, 138, 90, 0.18), 0 0 0 2px rgba(90, 138, 90, 0.18);
}
@media (prefers-reduced-motion: reduce) {
  .rd .lineage-visual__benefs::after { animation: none; opacity: 0; }
  .rd .lineage-risk,
  .rd .lineage-benef,
  .rd .lineage-visual__wall svg { transition: none; }
}
.rd .lineage-risk__icon { color: #B25344; flex-shrink: 0; display: inline-flex; }
.rd .lineage-risk__icon svg { width: 26px; height: 26px; }
.rd .lineage-risk__label {
  margin: 0;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--color-navy);
}

/* Statement — full-width text band under the wall area */
.rd .lineage-visual__statement {
  margin: 8px 0 0;
  padding: 18px 24px;
  background: #EAE1D2;
  border-left: 4px solid var(--color-gold);
  border-radius: 12px;
  font-family: var(--font-sans);
  font-size: 0.97rem;
  line-height: 1.55;
  color: var(--color-navy);
  text-align: center;
}

/* Result — gold-bordered banner at the bottom */
.rd .lineage-visual__result {
  background: #FFFFFF;
  border: 2px solid var(--color-gold);
  border-radius: 14px;
  padding: 18px 24px;
  font-family: var(--font-serif);
  font-size: 1.08rem;
  color: var(--color-navy);
  text-align: center;
  margin-top: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
}
.rd .lineage-visual__result-icon {
  color: var(--color-gold);
  flex-shrink: 0;
  display: inline-flex;
}
.rd .lineage-visual__result-icon svg { width: 32px; height: 32px; }

@media (max-width: 880px) {
  .rd .lineage-visual {
    grid-template-columns: 1fr;
    grid-template-areas:
      "trust"
      "trustee"
      "benefs"
      "risks"
      "statement"
      "result";
    padding: 22px;
  }
  .rd .lineage-visual__wall { display: none; }
  .rd .lineage-card--trust { padding: 24px 22px; }
  .rd .lineage-card--trust .lineage-card__title { font-size: 1.35rem; }
}

/* =========================================================================
   INSIGHT PAGE TREATMENTS
   ========================================================================= */

/* "Questions answered on this page" → larger modern hover cards */
.rd .insight-questions__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
  gap: 24px;
}
.rd .insight-questions__chip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  min-height: 120px;
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.06);
  border-radius: 18px;
  padding: 30px 34px;
  box-shadow: 0 6px 18px rgba(13, 31, 60, 0.06);
  text-decoration: none;
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.22rem;
  line-height: 1.4;
  transition: transform .3s var(--rd-ease),
              box-shadow .3s var(--rd-ease),
              border-color .3s var(--rd-ease);
}
.rd .insight-questions__chip:hover {
  transform: translateY(-6px);
  box-shadow: 0 24px 48px rgba(13, 31, 60, 0.14);
  border-color: rgba(184, 150, 46, 0.4);
}
.rd .insight-questions__chip-arrow {
  color: var(--color-gold);
  font-size: 1.5rem;
  font-weight: 600;
  flex-shrink: 0;
  transition: transform .3s var(--rd-ease);
}
.rd .insight-questions__chip:hover .insight-questions__chip-arrow {
  transform: translateX(6px);
}

@media (max-width: 680px) {
  .rd .insight-questions__grid { gap: 16px; }
  .rd .insight-questions__chip {
    min-height: 0;
    padding: 22px 24px;
    border-radius: 14px;
    font-size: 1.08rem;
    gap: 16px;
  }
  .rd .insight-questions__chip-arrow { font-size: 1.25rem; }
}

/* The image inside insight photo-pair sections — lifts on hover */
.rd .insight-photo-pair__photo {
  border-radius: 20px;
  overflow: hidden;
  transition: transform .35s var(--rd-ease), box-shadow .35s var(--rd-ease);
  box-shadow: 0 12px 36px rgba(13, 31, 60, 0.10);
}
.rd .insight-photo-pair__photo:hover {
  transform: translateY(-8px) scale(1.015);
  box-shadow: 0 28px 60px rgba(13, 31, 60, 0.18);
}

/* Editorial numbered benefit list — big gold serif numerals, navy serif text,
   hairline rules between rows. No boxes. */
.rd .insight-numbered-list {
  list-style: none;
  padding: 0;
  margin: 0;
  border-top: 1px solid rgba(13, 31, 60, 0.12);
  max-width: 900px;
  margin-inline: auto;
}
.rd .insight-numbered-list__item {
  display: grid;
  grid-template-columns: 110px 1fr;
  align-items: baseline;
  gap: 32px;
  padding: 30px 8px;
  border-bottom: 1px solid rgba(13, 31, 60, 0.12);
  transition: padding-left .35s var(--rd-ease),
              background-color .35s var(--rd-ease);
}
.rd .insight-numbered-list__item:hover {
  padding-left: 16px;
  background-color: rgba(184, 150, 46, 0.04);
}
.rd .insight-numbered-list__num {
  color: var(--color-gold);
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 2.75rem;
  line-height: 1;
  letter-spacing: -0.02em;
  text-align: right;
  padding-right: 8px;
  transition: transform .35s var(--rd-ease);
}
.rd .insight-numbered-list__item:hover .insight-numbered-list__num {
  transform: translateX(-4px);
}
.rd .insight-numbered-list__text {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: 1.35rem;
  line-height: 1.42;
  letter-spacing: -0.005em;
}

@media (max-width: 680px) {
  .rd .insight-numbered-list__item {
    grid-template-columns: 64px 1fr;
    gap: 18px;
    padding: 22px 4px;
  }
  .rd .insight-numbered-list__item:hover { padding-left: 8px; }
  .rd .insight-numbered-list__num { font-size: 1.9rem; }
  .rd .insight-numbered-list__text { font-size: 1.1rem; }
}

/* =========================================================================
   TASK CHECKLIST — usable, resource-style list with checkbox markers.
   Used where the section is a useful reference (week-after-death, doc lists).
   ========================================================================= */
.rd .task-checklist {
  list-style: none;
  padding: 0;
  margin: 0;
  max-width: 880px;
  margin-inline: auto;
}
.rd .task-checklist__item {
  display: flex;
  align-items: flex-start;
  gap: 18px;
  padding: 16px 8px;
  border-bottom: 1px solid rgba(13, 31, 60, 0.10);
  transition: background-color .25s var(--rd-ease), padding-left .25s var(--rd-ease);
}
.rd .task-checklist__item:hover {
  background-color: rgba(184, 150, 46, 0.06);
  padding-left: 16px;
}
.rd .task-checklist__item:last-child { border-bottom: none; }

.rd .task-checklist__box {
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  border: 2px solid var(--color-navy);
  border-radius: 4px;
  margin-top: 4px;
  transition: border-color .25s var(--rd-ease);
}
.rd .task-checklist__item:hover .task-checklist__box {
  border-color: var(--color-gold);
}
.rd .task-checklist__text {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.12rem;
  line-height: 1.5;
}

/* "Other" row — text input lives in place of the canned label. */
.rd .task-checklist__item--other { cursor: default; }
.rd .task-checklist__item--other:hover { background: transparent; padding-left: 0; }
.rd .task-checklist__item--other .task-checklist__text {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex: 1;
  min-width: 0;
}
.rd .task-checklist__other-label {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.12rem;
  line-height: 1.5;
  white-space: nowrap;
}
.rd .task-checklist__other {
  flex: 1;
  min-width: 0;
  background: transparent;
  border: none;
  border-bottom: 1px dashed rgba(13, 31, 60, 0.25);
  padding: 4px 2px;
  font-family: var(--font-serif);
  font-size: 1.08rem;
  color: var(--color-navy);
  line-height: 1.5;
  outline: none;
  transition: border-color .2s var(--rd-ease);
}
.rd .task-checklist__other::placeholder {
  color: rgba(13, 31, 60, 0.45);
  font-style: italic;
}
.rd .task-checklist__other:focus {
  border-bottom-color: var(--color-gold);
  border-bottom-style: solid;
}

/* Group label for multi-stage checklists (First day / Next day or two / By end of week). */
.rd .task-checklist-group {
  margin-bottom: 44px;
  max-width: 880px;
  margin-inline: auto;
}
.rd .task-checklist-group:last-child { margin-bottom: 0; }
.rd .task-checklist-group__label {
  color: var(--color-gold);
  font-family: var(--font-sans);
  font-size: 0.85rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin: 0 0 14px;
  padding-bottom: 10px;
  border-bottom: 2px solid var(--color-gold);
}

@media (max-width: 680px) {
  .rd .task-checklist__item { gap: 14px; padding: 12px 4px; }
  .rd .task-checklist__item:hover { padding-left: 8px; }
  .rd .task-checklist__box { width: 20px; height: 20px; }
  .rd .task-checklist__text { font-size: 1rem; }
  .rd .task-checklist-group { margin-bottom: 32px; }
}

/* =========================================================================
   SCENARIO CARDS — a small grid of "if X, then Y" outcome cards.
   Used for the "who takes charge" breakdown (will/trust/no plan).
   ========================================================================= */
.rd .scenario-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 22px;
  max-width: 1100px;
  margin-inline: auto;
}
.rd .scenario-cards__card {
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.08);
  border-radius: 18px;
  padding: 32px 30px;
  box-shadow: 0 6px 18px rgba(13, 31, 60, 0.06);
  transition: transform .3s var(--rd-ease),
              box-shadow .3s var(--rd-ease),
              border-color .3s var(--rd-ease);
  display: flex;
  flex-direction: column;
}
.rd .scenario-cards__card:hover {
  transform: translateY(-6px);
  box-shadow: 0 24px 48px rgba(13, 31, 60, 0.14);
  border-color: rgba(184, 150, 46, 0.4);
}
.rd .scenario-cards__label {
  color: var(--color-gold);
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin: 0 0 10px;
}
.rd .scenario-cards__answer {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.4rem;
  font-weight: 500;
  line-height: 1.3;
  margin: 0 0 14px;
  letter-spacing: -0.005em;
}
.rd .scenario-cards__note {
  color: var(--color-navy);
  opacity: 0.78;
  font-family: var(--font-serif);
  font-size: 1.02rem;
  line-height: 1.45;
  margin: 0;
}

@media (max-width: 680px) {
  .rd .scenario-cards { gap: 16px; }
  .rd .scenario-cards__card { padding: 26px 24px; border-radius: 14px; }
  .rd .scenario-cards__answer { font-size: 1.22rem; }
  .rd .scenario-cards__note { font-size: 0.98rem; }
}

/* Closing paragraph that sits below a graphic block (e.g. scenario cards). */
.rd .insight-section__after {
  max-width: 780px;
  margin: 40px auto 0;
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.1rem;
  line-height: 1.55;
  text-align: center;
  opacity: 0.88;
}
@media (max-width: 680px) {
  .rd .insight-section__after { font-size: 1rem; margin-top: 28px; }
}

/* =========================================================================
   INTERACTIVE PLAN CHECKUP
   Adds clickable state to .task-checklist items inside [data-plan-checkup],
   plus a live score panel that updates as items are checked.
   ========================================================================= */
.rd .plan-checkup__list .task-checklist__item {
  cursor: pointer;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
}
.rd .plan-checkup__list .task-checklist__item:focus-visible {
  outline: 2px solid var(--color-gold);
  outline-offset: 2px;
  border-radius: 4px;
}
.rd .plan-checkup__list .task-checklist__item.is-checked .task-checklist__box {
  background-color: var(--color-gold);
  border-color: var(--color-gold);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 14px;
}
.rd .plan-checkup__list .task-checklist__item.is-checked .task-checklist__text {
  color: rgba(13, 31, 60, 0.72);
}

/* Result panel — sits below the list, updates live. */
.rd .plan-checkup__result {
  margin: 44px auto 0;
  max-width: 880px;
  padding: 32px 36px;
  border-radius: 18px;
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.08);
  box-shadow: 0 8px 24px rgba(13, 31, 60, 0.06);
  text-align: center;
  transition: border-color .4s var(--rd-ease),
              background-color .4s var(--rd-ease),
              box-shadow .4s var(--rd-ease);
}
.rd .plan-checkup__count {
  color: var(--color-gold);
  font-family: var(--font-sans);
  font-size: 0.85rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin: 0 0 14px;
}
.rd .plan-checkup__verdict {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.25rem;
  line-height: 1.45;
  margin: 0 0 24px;
  letter-spacing: -0.005em;
}
.rd .plan-checkup__cta {
  display: inline-block;
}

/* Bracket-driven color shifts on the result panel. */
.rd .plan-checkup__result[data-level="mid"] {
  border-color: rgba(184, 150, 46, 0.4);
  box-shadow: 0 12px 32px rgba(13, 31, 60, 0.10);
}
.rd .plan-checkup__result[data-level="high"] {
  border-color: rgba(184, 150, 46, 0.7);
  background-color: rgba(184, 150, 46, 0.06);
  box-shadow: 0 18px 44px rgba(13, 31, 60, 0.14);
}

@media (max-width: 680px) {
  .rd .plan-checkup__result {
    padding: 24px 22px;
    margin-top: 32px;
    border-radius: 14px;
  }
  .rd .plan-checkup__verdict { font-size: 1.08rem; }
}

/* =========================================================================
   TRUST FUNDED-STATUS CHECKUP
   Yes / No / I'm not sure radio per question. Drives the verdict +
   consultation CTA based on whether any No or Unknown appears.
   ========================================================================= */
.rd .funded-checkup { max-width: 880px; margin: 0 auto; }
.rd .funded-checkup__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.rd .funded-checkup__q {
  border-bottom: 1px solid rgba(13, 31, 60, 0.10);
  padding: 24px 0;
}
.rd .funded-checkup__q:first-child { padding-top: 0; }
.rd .funded-checkup__q:last-child { border-bottom: none; }
.rd .funded-checkup__prompt {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.18rem;
  font-weight: 500;
  line-height: 1.4;
  margin: 0 0 16px;
}
.rd .funded-checkup__options {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}
.rd .funded-checkup__opt {
  font-family: var(--font-sans);
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--color-navy);
  background: #FFFFFF;
  border: 1.5px solid rgba(13, 31, 60, 0.18);
  border-radius: 10px;
  padding: 10px 22px;
  cursor: pointer;
  transition: background-color .25s var(--rd-ease),
              color .25s var(--rd-ease),
              border-color .25s var(--rd-ease);
}
.rd .funded-checkup__opt:hover {
  border-color: var(--color-gold);
  color: var(--color-gold);
}
.rd .funded-checkup__opt.is-selected {
  background: var(--color-navy);
  color: #FFFFFF;
  border-color: var(--color-navy);
}
.rd .funded-checkup__opt:focus-visible {
  outline: 2px solid var(--color-gold);
  outline-offset: 2px;
}

.rd .funded-checkup__result {
  margin: 36px auto 0;
  max-width: 880px;
  padding: 30px 36px;
  border-radius: 18px;
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.08);
  box-shadow: 0 8px 24px rgba(13, 31, 60, 0.06);
  text-align: center;
  transition: border-color .4s var(--rd-ease),
              background-color .4s var(--rd-ease),
              box-shadow .4s var(--rd-ease);
}
.rd .funded-checkup__verdict {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.2rem;
  line-height: 1.5;
  margin: 0 0 24px;
}
.rd .funded-checkup__cta { display: inline-block; }
.rd .funded-checkup__result[data-level="low"] {
  border-color: rgba(184, 150, 46, 0.3);
}
.rd .funded-checkup__result[data-level="mid"] {
  border-color: rgba(184, 150, 46, 0.5);
}
.rd .funded-checkup__result[data-level="high"] {
  border-color: rgba(184, 150, 46, 0.7);
  background-color: rgba(184, 150, 46, 0.06);
  box-shadow: 0 18px 44px rgba(13, 31, 60, 0.14);
}

@media (max-width: 680px) {
  .rd .funded-checkup__prompt { font-size: 1.05rem; }
  .rd .funded-checkup__opt { padding: 9px 18px; font-size: 0.92rem; }
  .rd .funded-checkup__result { padding: 24px 22px; border-radius: 14px; }
  .rd .funded-checkup__verdict { font-size: 1.05rem; }
}

/* =========================================================================
   TRUST-TYPE MATCHER
   A/B priority pairs. Each side maps to a trust type. The visitor's
   pattern of picks drives a structure-specific verdict + CTA.
   ========================================================================= */
.rd .trust-matcher { max-width: 1000px; margin: 0 auto; }
.rd .trust-matcher__list {
  list-style: none;
  padding: 0;
  margin: 0 0 36px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.rd .trust-matcher__row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}
.rd .trust-matcher__row--three {
  grid-template-columns: repeat(3, 1fr);
}
.rd .trust-matcher__row--four {
  grid-template-columns: repeat(4, 1fr);
}
@media (max-width: 880px) {
  .rd .trust-matcher__row--three { grid-template-columns: 1fr; }
  .rd .trust-matcher__row--four { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 520px) {
  .rd .trust-matcher__row--four { grid-template-columns: 1fr; }
}
.rd .trust-matcher__opt {
  background: #FFFFFF;
  border: 1.5px solid rgba(13, 31, 60, 0.10);
  border-radius: 14px;
  padding: 22px 24px;
  font-family: var(--font-serif);
  font-size: 1.06rem;
  line-height: 1.42;
  color: var(--color-navy);
  cursor: pointer;
  text-align: left;
  box-shadow: 0 4px 12px rgba(13, 31, 60, 0.04);
  transition: border-color .25s var(--rd-ease),
              background-color .25s var(--rd-ease),
              box-shadow .25s var(--rd-ease),
              transform .25s var(--rd-ease);
}
.rd .trust-matcher__opt:hover {
  border-color: rgba(184, 150, 46, 0.4);
  transform: translateY(-2px);
  box-shadow: 0 10px 24px rgba(13, 31, 60, 0.08);
}
.rd .trust-matcher__opt.is-selected {
  border-color: var(--color-gold);
  background: rgba(184, 150, 46, 0.07);
  box-shadow: 0 12px 28px rgba(184, 150, 46, 0.18);
}
.rd .trust-matcher__opt:focus-visible {
  outline: 2px solid var(--color-gold);
  outline-offset: 2px;
}

.rd .trust-matcher__result {
  max-width: 880px;
  margin: 0 auto;
  padding: 30px 36px;
  border-radius: 18px;
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.08);
  box-shadow: 0 8px 24px rgba(13, 31, 60, 0.06);
  text-align: center;
  transition: border-color .4s var(--rd-ease),
              background-color .4s var(--rd-ease),
              box-shadow .4s var(--rd-ease);
}
.rd .trust-matcher__count {
  color: var(--color-gold);
  font-family: var(--font-sans);
  font-size: 0.85rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin: 0 0 14px;
}
.rd .trust-matcher__verdict {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.2rem;
  line-height: 1.5;
  margin: 0 0 24px;
}
.rd .trust-matcher__cta { display: inline-block; }
.rd .trust-matcher__result[data-level="mid"] {
  border-color: rgba(184, 150, 46, 0.45);
}
.rd .trust-matcher__result[data-level="high"] {
  border-color: rgba(184, 150, 46, 0.7);
  background-color: rgba(184, 150, 46, 0.06);
  box-shadow: 0 18px 44px rgba(13, 31, 60, 0.14);
}

@media (max-width: 680px) {
  .rd .trust-matcher__row { grid-template-columns: 1fr; }
  .rd .trust-matcher__opt { padding: 18px 20px; font-size: 1rem; }
  .rd .trust-matcher__result { padding: 24px 22px; border-radius: 14px; }
  .rd .trust-matcher__verdict { font-size: 1.08rem; }
}

/* =========================================================================
   GUIDED QUIZ — one question at a time, premium card-style options,
   progress bar, smooth transitions. Reusable across the site.
   ========================================================================= */
.rd .guided-quiz {
  max-width: 720px;
  margin: 0 auto;
  background: #FFFFFF;
  border-radius: 24px;
  border: 1px solid rgba(13, 31, 60, 0.06);
  box-shadow: 0 16px 48px rgba(13, 31, 60, 0.10);
  padding: 52px 56px;
  position: relative;
  /* Flex column so we can re-order children with CSS order (Back button
     visually below the choices instead of above, per Brent). */
  display: flex;
  flex-direction: column;
}
.rd .guided-quiz__progress { order: 1; }
.rd .guided-quiz__steps    { order: 2; }
.rd .guided-quiz__back-row { order: 3; }
.rd .guided-quiz__result   { order: 4; }

/* Progress */
.rd .guided-quiz__progress { margin-bottom: 44px; }
.rd .guided-quiz__progress-track {
  height: 4px;
  background: rgba(13, 31, 60, 0.08);
  border-radius: 4px;
  overflow: hidden;
}
.rd .guided-quiz__progress-bar {
  display: block;
  height: 100%;
  background: var(--color-gold);
  border-radius: 4px;
  width: 0%;
  transition: width .5s var(--rd-ease);
}
.rd .guided-quiz__progress-label {
  color: var(--color-gold);
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  margin: 16px 0 0;
}

/* Steps */
.rd .guided-quiz__steps { position: relative; }
.rd .guided-quiz__step {
  opacity: 0;
  visibility: hidden;
  transform: translateY(8px);
  transition: opacity .4s var(--rd-ease),
              transform .4s var(--rd-ease),
              visibility 0s linear .4s;
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.rd .guided-quiz__step.is-active {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition: opacity .45s var(--rd-ease) .08s,
              transform .45s var(--rd-ease) .08s,
              visibility 0s linear 0s;
  position: relative;
  pointer-events: auto;
}
.rd .guided-quiz__eyebrow {
  color: var(--color-gold);
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  margin: 0 0 14px;
}
.rd .guided-quiz__prompt {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.7rem;
  font-weight: 500;
  line-height: 1.25;
  margin: 0 0 36px;
  letter-spacing: -0.012em;
}

/* Option cards */
.rd .guided-quiz__options {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.rd .guided-quiz__option {
  text-align: left;
  background: #FFFFFF;
  border: 1.5px solid rgba(13, 31, 60, 0.10);
  border-radius: 16px;
  padding: 24px 28px;
  cursor: pointer;
  display: block;
  width: 100%;
  font-family: inherit;
  transition: border-color .25s var(--rd-ease),
              transform .25s var(--rd-ease),
              box-shadow .25s var(--rd-ease),
              background-color .25s var(--rd-ease);
}
.rd .guided-quiz__option:hover {
  border-color: var(--color-gold);
  transform: translateX(6px);
  box-shadow: 0 12px 28px rgba(13, 31, 60, 0.10);
  background-color: rgba(184, 150, 46, 0.03);
}
.rd .guided-quiz__option:focus-visible {
  outline: 2px solid var(--color-gold);
  outline-offset: 3px;
}
.rd .guided-quiz__option-label {
  display: block;
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.22rem;
  font-weight: 500;
  margin-bottom: 6px;
  letter-spacing: -0.005em;
  line-height: 1.3;
}
.rd .guided-quiz__option-desc {
  display: block;
  color: var(--color-navy);
  opacity: 0.7;
  font-family: var(--font-serif);
  font-size: 1.02rem;
  line-height: 1.4;
}

/* Result */
.rd .guided-quiz__result {
  opacity: 0;
  visibility: hidden;
  transform: translateY(8px);
  text-align: center;
  position: absolute;
  inset: 0;
  pointer-events: none;
  display: flex;
  flex-direction: column;
  justify-content: center;
  transition: opacity .5s var(--rd-ease),
              transform .5s var(--rd-ease),
              visibility 0s linear .5s;
}
.rd .guided-quiz__result.is-visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  position: relative;
  pointer-events: auto;
  transition: opacity .55s var(--rd-ease) .15s,
              transform .55s var(--rd-ease) .15s,
              visibility 0s linear 0s;
}
.rd .guided-quiz__result-eyebrow {
  color: var(--color-gold);
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  margin: 0 0 16px;
}
.rd .guided-quiz__verdict {
  color: var(--color-navy);
  font-family: var(--font-serif);
  font-size: 1.36rem;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: -0.005em;
  margin: 0 0 32px;
}
.rd .guided-quiz__cta { display: inline-block; }

.rd .guided-quiz.is-complete .guided-quiz__steps { display: none; }
.rd .guided-quiz.is-complete .guided-quiz__progress { margin-bottom: 36px; }

@media (max-width: 680px) {
  .rd .guided-quiz {
    padding: 36px 26px;
    border-radius: 18px;
  }
  .rd .guided-quiz__prompt { font-size: 1.4rem; margin-bottom: 26px; }
  .rd .guided-quiz__option { padding: 20px 22px; }
  .rd .guided-quiz__option-label { font-size: 1.1rem; }
  .rd .guided-quiz__option-desc { font-size: 0.95rem; }
  .rd .guided-quiz__verdict { font-size: 1.2rem; }
  .rd .guided-quiz__progress { margin-bottom: 32px; }
}

/* =========================================================================
   QUIZ MODAL — wraps a guided-quiz in a centered modal overlay. Triggered
   by a button [data-quiz-open="modal-id"]. Closed by [data-quiz-close],
   backdrop click, or Escape.
   ========================================================================= */
.rd .quiz-cta {
  text-align: center;
  /* Sitewide standard space above + below the big quiz trigger button,
     so every quiz CTA has the same rhythm no matter what surrounds it. */
  margin: 36px auto 56px;
  max-width: 760px;
  /* The whole box is clickable (JS delegates the click to the inner
     button), so signal that visually with a pointer cursor. */
  cursor: pointer;
}
.rd .quiz-cta:not(.quiz-cta--complete):hover .quiz-trigger {
  transform: translateY(-4px);
  box-shadow: 0 22px 48px rgba(13, 31, 60, 0.28);
}
.rd .quiz-cta--complete { cursor: default; }
@media (max-width: 680px) {
  .rd .quiz-cta { margin: 28px auto 40px; }
}

/* After the modal closes, populatePageVerdictFromModal injects the verdict
   into the same .quiz-cta box. It morphs from "big button + caption" into
   "what you chose + next-step CTAs + retake link." */
.rd .quiz-cta--complete {
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.1);
  border-radius: 18px;
  padding: 36px 40px 30px;
  box-shadow: 0 12px 32px rgba(13, 31, 60, 0.06);
  text-align: center;
}
.rd .quiz-cta__result-eyebrow {
  font-family: var(--font-sans);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0 0 12px;
}
.rd .quiz-cta__result-verdict {
  font-family: var(--font-serif);
  font-size: 1.25rem;
  line-height: 1.42;
  color: var(--color-navy);
  margin: 0 0 26px;
  letter-spacing: -0.005em;
}
.rd .quiz-cta__result-actions {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 14px;
  margin-bottom: 18px;
}
.rd .quiz-cta__result-actions .btn {
  font-size: 1.02rem;
  padding: 16px 32px;
  border-radius: 10px;
}
.rd .quiz-cta__retake {
  display: inline-block;
  background: none;
  border: none;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: 0.92rem;
  color: var(--color-navy);
  opacity: 0.62;
  text-decoration: underline;
  text-underline-offset: 3px;
  padding: 6px 8px;
  transition: opacity .2s var(--rd-ease);
}
.rd .quiz-cta__retake:hover { opacity: 1; }

@media (max-width: 680px) {
  .rd .quiz-cta--complete { padding: 28px 22px 22px; }
  .rd .quiz-cta__result-verdict { font-size: 1.08rem; }
}
.rd .quiz-trigger {
  display: inline-flex;
  align-items: center;
  gap: 22px;
  font-size: 1.55rem;
  font-weight: 500;
  letter-spacing: -0.01em;
  padding: 30px 64px;
  border-radius: 14px;
  transition: background-color .3s var(--rd-ease),
              transform .3s var(--rd-ease),
              box-shadow .3s var(--rd-ease),
              color .3s var(--rd-ease);
  box-shadow: 0 10px 28px rgba(13, 31, 60, 0.18);
}
.rd .quiz-trigger:hover {
  transform: translateY(-4px);
  box-shadow: 0 22px 48px rgba(13, 31, 60, 0.28);
}
.rd .quiz-trigger__arrow {
  font-size: 1.75rem;
  transition: transform .3s var(--rd-ease);
}
.rd .quiz-trigger:hover .quiz-trigger__arrow {
  transform: translateX(8px);
}
@media (max-width: 680px) {
  .rd .quiz-trigger {
    font-size: 1.2rem;
    padding: 22px 36px;
    gap: 14px;
  }
  .rd .quiz-trigger__arrow { font-size: 1.35rem; }
}
.rd .quiz-cta__note {
  /* Match the breathing room above the button (the lede→button gap is ~36px,
     so the button→note gap should match). */
  margin: 32px 0 0;
  color: var(--color-navy);
  opacity: 0.7;
  font-family: var(--font-serif);
  font-size: 0.98rem;
}
@media (max-width: 680px) {
  .rd .quiz-cta__note { margin-top: 24px; }
}

.rd .quiz-modal {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 32px 16px;
  opacity: 0;
  visibility: hidden;
  /* While closing, immediately stop swallowing clicks — otherwise the
     invisible backdrop blocks the consultation button on the page below
     for the duration of the fade. */
  pointer-events: none;
  transition: opacity .18s var(--rd-ease), visibility 0s linear .18s;
}
/* CRITICAL: when the modal is closed, force every descendant (including
   .guided-quiz__result.is-visible which has its own pointer-events: auto)
   to be non-interactive. Without this !important override, the result
   subtree keeps catching clicks at the center of the viewport — directly
   over where the page-side verdict box gets injected — and the page-side
   Start Tour / Schedule Consultation buttons appear broken. */
.rd .quiz-modal:not(.is-open) * { pointer-events: none !important; }
.rd .quiz-modal.is-open {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition: opacity .25s var(--rd-ease), visibility 0s linear 0s;
}
.rd .quiz-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(13, 31, 60, 0.68);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.rd .quiz-modal__card {
  position: relative;
  background: #FFFFFF;
  max-width: 720px;
  width: 100%;
  max-height: calc(100vh - 64px);
  overflow-y: auto;
  border-radius: 24px;
  box-shadow: 0 32px 80px rgba(0, 0, 0, 0.4);
  transform: translateY(24px) scale(0.97);
  transition: transform .28s var(--rd-ease);
}
.rd .quiz-modal.is-open .quiz-modal__card {
  transform: translateY(0) scale(1);
}
.rd .quiz-modal__close {
  position: absolute;
  top: 18px;
  right: 18px;
  background: rgba(13, 31, 60, 0.05);
  border: none;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  font-size: 1.6rem;
  line-height: 1;
  cursor: pointer;
  color: var(--color-navy);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10;
  transition: background-color .25s var(--rd-ease);
  font-family: inherit;
}
.rd .quiz-modal__close:hover {
  background: rgba(13, 31, 60, 0.12);
}

/* Inside the modal, the guided-quiz drops its outer chrome */
.rd .quiz-modal__card .guided-quiz {
  box-shadow: none;
  border: none;
  border-radius: 24px;
  margin: 0;
  padding: 44px 56px 32px;
  max-width: none;
}
/* On viewports shorter than ~780px (most laptops with browser chrome), shrink
   internal padding and progress margins so Q1 + 4 options fit without scroll. */
@media (max-height: 780px) {
  .rd .quiz-modal__card .guided-quiz { padding: 34px 56px 26px; }
  .rd .quiz-modal__card .guided-quiz__progress { margin-bottom: 26px; }
  .rd .quiz-modal__card .guided-quiz__prompt { margin-bottom: 24px; }
  .rd .quiz-modal__card .guided-quiz__option { padding: 18px 22px; }
}

.rd .quiz-modal__actions {
  display: none;
  padding: 0 56px 40px;
  text-align: center;
}
.rd .guided-quiz.is-complete ~ .quiz-modal__actions {
  display: block;
}
.rd .quiz-modal__actions-hint {
  color: var(--color-navy);
  opacity: 0.6;
  font-family: var(--font-serif);
  font-size: 0.92rem;
  margin: 14px 0 0;
}

@media (max-width: 680px) {
  /* Mobile quiz = full-screen takeover. Brent: "can the quiz take up
     my entire screen and can I have the X in the upper righthand
     corner of the screen?" Plus a scroll-chaining fix so swipes inside
     the quiz don't bleed through to the page underneath. */
  .rd .quiz-modal { padding: 0; }
  .rd .quiz-modal__card {
    border-radius: 0;
    width: 100%;
    max-width: none;
    max-height: 100vh;
    max-height: 100dvh;
    min-height: 100vh;
    min-height: 100dvh;
    /* Override the open-state translate(0)/scale(1) so position:fixed
       on the close button can escape to the viewport — a non-none
       transform on the card would otherwise hijack it. */
    transform: none;
    /* Contain touch scrolls inside the card so reaching top/bottom
       doesn't chain to the body — the iOS root cause of "the page
       behind the quiz keeps scrolling." */
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
  }
  .rd .quiz-modal.is-open .quiz-modal__card { transform: none; }
  /* Extra top padding so the first question/title doesn't sit under
     the now-floating close button. */
  .rd .quiz-modal__card .guided-quiz { padding: 64px 22px 24px; }
  .rd .quiz-modal__actions { padding: 0 22px 28px; }
  /* Close button: pin to the top-right corner of the viewport, not the
     card. Bigger hit area for thumb taps. Darker chip so it reads over
     any color content scrolling underneath. */
  .rd .quiz-modal__close {
    position: fixed;
    top: 14px;
    right: 14px;
    z-index: 10000;
    width: 44px;
    height: 44px;
    background: rgba(13, 31, 60, 0.85);
    color: #FFFFFF;
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
  }
  .rd .quiz-modal__close:hover,
  .rd .quiz-modal__close:focus-visible,
  .rd .quiz-modal__close:active {
    background: rgba(13, 31, 60, 1);
    color: #FFFFFF;
  }
}

/* Back button (sits above the quiz step) */
.rd .guided-quiz__back-row {
  /* Sits below the options now (via flex order), so the gap moves to the
     top of the row instead of the bottom. */
  margin: 28px 0 0;
  text-align: center;
}
.rd .guided-quiz__back {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: none;
  border: none;
  color: var(--color-navy);
  opacity: 0.55;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: 0.88rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  padding: 4px 0;
  transition: opacity .2s var(--rd-ease), transform .2s var(--rd-ease);
}
.rd .guided-quiz__back:hover {
  opacity: 1;
  transform: translateX(-3px);
}
.rd .guided-quiz__back-arrow {
  font-size: 1rem;
  line-height: 1;
}
.rd .guided-quiz__back[hidden] { display: none; }

/* Print-only content (answer summary, branding, Brent note). Hidden on screen. */
.rd .guided-quiz__print-only { display: none; }
.rd .print-only__brand {
  text-align: center;
  padding-bottom: 20px;
  margin-bottom: 28px;
  border-bottom: 1px solid rgba(13, 31, 60, 0.18);
}
.rd .print-only__brand-name {
  font-family: var(--font-sans);
  font-weight: 600;
  letter-spacing: 0.18em;
  color: var(--color-gold);
  font-size: 0.85rem;
  margin: 0 0 6px;
  text-transform: uppercase;
}
.rd .print-only__quiz-title {
  font-family: var(--font-serif);
  font-size: 1.3rem;
  font-weight: 500;
  color: var(--color-navy);
  margin: 0;
}
.rd .guided-quiz__summary {
  margin-top: 12px;
}
.rd .guided-quiz__summary-heading {
  font-family: var(--font-sans);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  color: var(--color-gold);
  text-transform: uppercase;
  margin: 0 0 14px;
}
.rd .guided-quiz__summary-item {
  margin-bottom: 14px;
  padding-bottom: 14px;
  border-bottom: 1px dashed rgba(13, 31, 60, 0.18);
}
.rd .guided-quiz__summary-item:last-child {
  border-bottom: none;
  margin-bottom: 0;
}
.rd .guided-quiz__summary-q {
  font-family: var(--font-serif);
  font-size: 0.92rem;
  color: var(--color-navy);
  opacity: 0.7;
  margin: 0 0 4px;
}
.rd .guided-quiz__summary-a {
  font-family: var(--font-serif);
  font-size: 1.02rem;
  font-weight: 500;
  color: var(--color-navy);
  margin: 0;
  line-height: 1.4;
}
.rd .print-only__brent {
  margin-top: 32px;
  padding: 18px 22px;
  background: rgba(184, 150, 46, 0.06);
  border-left: 4px solid var(--color-gold);
}
.rd .print-only__brent-heading {
  font-family: var(--font-sans);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0 0 8px;
}
.rd .print-only__brent-body {
  font-family: var(--font-serif);
  font-size: 1.02rem;
  color: var(--color-navy);
  margin: 0;
  line-height: 1.5;
}
.rd .print-only__footer {
  margin-top: 32px;
  padding-top: 18px;
  border-top: 1px solid rgba(13, 31, 60, 0.18);
  text-align: center;
}
.rd .print-only__footer p {
  font-family: var(--font-sans);
  font-size: 0.78rem;
  color: var(--color-navy);
  opacity: 0.65;
  margin: 0;
  letter-spacing: 0.04em;
}

/* Playlist — personalized reading list shown in the homepage quiz result.
   Browser-native :visited gives the strikethrough Brent asked for. */
.rd .playlist {
  margin: 28px auto 24px;
  text-align: left;
  max-width: 560px;
}
.rd .playlist__heading {
  color: var(--color-gold);
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  margin: 0 0 20px;
  text-align: center;
}
.rd .playlist__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.rd .playlist__item {
  display: flex;
  gap: 18px;
  padding: 16px 0;
  border-bottom: 1px solid rgba(13, 31, 60, 0.10);
}
.rd .playlist__item:last-child { border-bottom: none; }
.rd .playlist__number {
  flex-shrink: 0;
  font-family: var(--font-serif);
  font-size: 1.5rem;
  font-weight: 500;
  color: var(--color-gold);
  line-height: 1;
  width: 36px;
  text-align: right;
  letter-spacing: -0.02em;
}
.rd .playlist__body { flex: 1; min-width: 0; }
.rd .playlist__title {
  font-family: var(--font-serif);
  font-size: 1.05rem;
  font-weight: 500;
  margin: 0 0 4px;
  line-height: 1.3;
  letter-spacing: -0.005em;
}
.rd .playlist__title a {
  color: var(--color-navy);
  text-decoration: none;
  transition: color .25s var(--rd-ease);
}
.rd .playlist__title a:hover { color: var(--color-gold); }
.rd .playlist__title a:visited {
  color: rgba(13, 31, 60, 0.45);
  text-decoration: line-through;
}
.rd .playlist__desc {
  font-family: var(--font-serif);
  font-size: 0.9rem;
  color: var(--color-navy);
  opacity: 0.7;
  margin: 0;
  line-height: 1.4;
}
.rd .playlist[data-show-on][hidden] { display: none; }

/* Print stylesheet — uses visibility (not display) so the quiz subtree
   is visible regardless of how deeply it's nested in the page. */
@media print {
  body * { visibility: hidden; }
  .quiz-modal.is-open,
  .quiz-modal.is-open * { visibility: visible; }
  @page { margin: 0.5in; }
  .quiz-modal.is-open {
    position: static !important;
    padding: 0 !important;
    background: white !important;
    opacity: 1 !important;
    display: block !important;
  }
  .quiz-modal__backdrop,
  .quiz-modal__close,
  .quiz-modal__actions,
  .guided-quiz__progress,
  .guided-quiz__steps,
  .guided-quiz__back-row,
  .guided-quiz__cta,
  .guided-quiz__cta-row,
  .quiz-tour-start,
  .guided-quiz__cta-alt,
  .playlist,
  .tour-widget { display: none !important; }
  .quiz-modal__card {
    position: static !important;
    box-shadow: none !important;
    max-width: 100% !important;
    transform: none !important;
    overflow: visible !important;
    max-height: none !important;
    border: none !important;
    border-radius: 0 !important;
    width: 100% !important;
  }
  .guided-quiz {
    box-shadow: none !important;
    padding: 0 !important;
    border: none !important;
    border-radius: 0 !important;
    max-width: 100% !important;
  }
  .guided-quiz__result {
    position: static !important;
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
    pointer-events: auto !important;
    display: block !important;
    text-align: left !important;
  }
  .guided-quiz__result-eyebrow,
  .guided-quiz__verdict { text-align: left !important; }
  .guided-quiz__verdict { font-size: 1.15rem !important; margin-bottom: 28px !important; }
  .guided-quiz__print-only { display: block !important; }
}

/* =====================================================================
   WHY HELMS HEADLINE — cinematic. ~80% larger than the prior version so
   it reads like a movie title under the hero. The final word cycles via
   the typewriter, then settles back to "life" — at which point the four
   pillar cards fade in left-to-right (handled in JS + .pillar styles).
   ===================================================================== */
.rd .why-helms__headline {
  font-size: clamp(2.8rem, 6vw, 4.6rem);
  line-height: 1.06;
  letter-spacing: -0.018em;
  max-width: 1100px;
  margin-left: auto;
  margin-right: auto;
}
/* Three-line cinematic layout: "Personal attention," / "built around your" /
   [rotating word]. Each span gets its own row so the typewriter sits
   directly under the rest of the headline rather than wrapping inline. */
.rd .why-helms__headline-line {
  display: block;
}
/* Third line — the rotating word — is the visual punch line. Sized larger
   than the static lines above it so it lands as the section's headline
   payoff. */
.rd .why-helms__headline-line:last-child {
  font-size: clamp(3.8rem, 8.4vw, 6.2rem);
  line-height: 1.04;
  margin-top: 0.08em;
}
@media (max-width: 560px) {
  .rd .why-helms__headline {
    font-size: clamp(2.1rem, 8.5vw, 3rem);
    line-height: 1.1;
  }
  .rd .why-helms__headline-line:last-child {
    font-size: clamp(2.7rem, 11vw, 3.8rem);
  }
}

/* Staged pillar reveal — pillars start hidden while the typewriter cycles
   above. After the typewriter settles on "life", JS adds .is-revealed-staged
   one at a time, left-to-right, 220 ms apart. */
.rd .why-helms__grid .pillar {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .65s var(--rd-ease), transform .65s var(--rd-ease);
  will-change: opacity, transform;
}
.rd .why-helms__grid .pillar.is-revealed-staged {
  opacity: 1;
  transform: none;
}
@media (prefers-reduced-motion: reduce) {
  .rd .why-helms__grid .pillar {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
.rd .typewriter {
  display: inline-block;
  position: relative;
  color: var(--color-gold);          /* the rotating word stands out */
  white-space: nowrap;
}
.rd .typewriter__word {
  display: inline;
  font-style: italic;
}
.rd .typewriter__caret {
  display: inline-block;
  width: 3px;
  height: 0.95em;
  vertical-align: -0.12em;
  margin-left: 4px;
  background: var(--color-gold);
  animation: rdTypewriterBlink 1s steps(2) infinite;
}
@keyframes rdTypewriterBlink {
  0%, 50%   { opacity: 1; }
  50.01%, 100% { opacity: 0; }
}
/* When the typewriter is paused (out of view or finished), hide the caret
   so it doesn't keep flashing forever. */
.rd .typewriter.is-idle .typewriter__caret { animation: none; opacity: 0; }
@media (prefers-reduced-motion: reduce) {
  .rd .typewriter__caret { animation: none; opacity: 0; }
}

/* =====================================================================
   MEMORABLE-SITE SWEEP — design moves that set the site apart while
   staying inside the calm, concierge lane:
     • Photo flip in the "You deserve" bio section (left-right rhythm)
     • Paper-texture overlay on ivory sections (tactile letterhead feel)
     • Neumorphism — subtle inset highlight on key cards
     • Magnetic primary buttons (subtle pull toward cursor on hover)
   ===================================================================== */

/* --- Photo flip in You Deserve section ---
   Default Brent section is photo-left. The .brent--photo-right modifier
   reverses the columns so the portrait sits on the right edge instead.
   Creates left-right rhythm with the invite card just above (photo-left). */
.rd .brent.brent--photo-right .brent__grid {
  direction: rtl;
}
.rd .brent.brent--photo-right .brent__grid > * {
  direction: ltr;
}

/* --- Paper texture on ivory sections ---
   Applied to Why Helms and Meet Brent only (per Brent). Worries stays
   smooth ivory between them. Hard edges at section boundaries — no
   mask-image fade between sections (per Brent: distinct sections,
   not soft transitions). */
.rd .why-helms,
.rd .brent {
  position: relative;
}
.rd .why-helms::before,
.rd .brent::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  opacity: 0.32;
  background-image: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.05 0 0 0 0 0.12 0 0 0 0 0.24 0 0 0 0.6 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  mix-blend-mode: multiply;
}
.rd .why-helms > *,
.rd .brent > * {
  position: relative;
  z-index: 1;
}

/* Worries section — smooth ivory, no texture. The Why Helms texture
   above and the Brent texture below fade gently into this band so the
   transitions read as natural lighting changes, not section borders. */
.rd .worries {
  background: var(--color-ivory);
  position: relative;
}

/* Meet Brent — same ivory base + texture as Why Helms. The card-style
   wrapping below boxes Brent's photo + description like the invite
   card in the worries section above. */
.rd .brent {
  background: var(--color-ivory);
}
.rd .brent .brent__grid {
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.08);
  border-radius: 28px;
  padding: clamp(36px, 5vw, 64px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    inset 0 0 0 1px rgba(13, 31, 60, 0.04),
    0 28px 72px rgba(13, 31, 60, 0.10);
  max-width: 1140px;
  margin: 0 auto;
  transition: transform .35s var(--rd-ease),
              box-shadow .35s var(--rd-ease);
  will-change: transform;
}
.rd .brent .brent__grid:hover {
  transform: translateY(-6px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    inset 0 0 0 1px rgba(13, 31, 60, 0.05),
    0 36px 96px rgba(13, 31, 60, 0.16);
}

/* --- Neumorphism — soft inset highlight on key cards ---
   Adds a barely-perceptible inner highlight at the top of cards so they
   read as physical, dimensional objects (like printed calling cards)
   rather than flat rectangles. Pairs with the existing drop shadow. */
.rd .worry-invite,
.rd .pillar,
.rd .quiz-cta--complete,
.rd .tour-widget__panel {
  /* Existing drop shadow is preserved; the inset highlight stacks before it. */
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    inset 0 0 0 1px rgba(13, 31, 60, 0.04),
    0 28px 72px rgba(13, 31, 60, 0.10);
  transition: transform .35s var(--rd-ease),
              box-shadow .35s var(--rd-ease);
  will-change: transform;
}
/* Hover lift — the cards rise toward the cursor. The shadow grows to
   sell the height change. Subtle but every visitor feels it. */
.rd .pillar:hover {
  transform: translateY(-8px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    inset 0 0 0 1px rgba(13, 31, 60, 0.04),
    0 40px 90px rgba(13, 31, 60, 0.16);
}
.rd .worry-invite:hover {
  transform: translateY(-6px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    inset 0 0 0 1px rgba(13, 31, 60, 0.05),
    0 36px 96px rgba(13, 31, 60, 0.18);
}
@media (prefers-reduced-motion: reduce) {
  .rd .pillar,
  .rd .worry-invite { transition: none; }
  .rd .pillar:hover,
  .rd .worry-invite:hover { transform: none; }
}

/* =====================================================================
   TIER STACK + OVERLAY — homepage planning section. Each strip is a
   simple, full-width clickable row (number + monetary label + arrow).
   Click triggers a full-viewport overlay with the tier's photo as the
   background, a bottom-left title block with the real name + lede, and
   right-side action rows linking to 4 specific articles for that stage.
   Inspired by thepush.com.au — perfected for a concierge law-firm feel.
   ===================================================================== */
.rd .tier-stack {
  background: #FFFFFF;
  padding: clamp(64px, 8vw, 112px) 0;
}
.rd .tier-stack__head {
  text-align: center;
  max-width: 820px;
  margin: 0 auto 56px;
}
.rd .tier-stack__head h2 {
  font-size: clamp(2.2rem, 4.6vw, 3.4rem);
  line-height: 1.12;
  letter-spacing: -0.015em;
  margin: 12px 0 18px;
}
.rd .tier-stack__lede {
  font-family: var(--font-serif);
  font-size: clamp(1.05rem, 1.6vw, 1.18rem);
  color: var(--color-navy);
  opacity: 0.78;
  margin: 0;
}

.rd .tier-stack__list {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* Specialized-situations break — a quiet rule with text label between the
   wealth tiers and the business-owner / blended-families strips. */
.rd .tier-stack__divider {
  display: flex;
  align-items: center;
  gap: 18px;
  margin: 18px 0 4px;
  font-family: var(--font-sans);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-gold);
}
.rd .tier-stack__divider::before,
.rd .tier-stack__divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: rgba(184, 150, 46, 0.35);
}

/* --- Strip — a clean editorial row, no inline expand. Click opens
   the overlay (handled in JS). --- */
.rd .tier-strip {
  display: flex;
  align-items: center;
  gap: clamp(20px, 3vw, 40px);
  width: 100%;
  padding: clamp(24px, 3vw, 36px) clamp(26px, 3.5vw, 44px);
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.10);
  border-radius: 14px;
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  transition: transform .25s var(--rd-ease),
              border-color .25s var(--rd-ease),
              box-shadow .25s var(--rd-ease);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    0 2px 0 rgba(13, 31, 60, 0.02);
}
.rd .tier-strip:hover {
  border-color: rgba(13, 31, 60, 0.24);
  transform: translateY(-3px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    0 20px 44px rgba(13, 31, 60, 0.14);
}
.rd .tier-strip__num {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.4rem, 2vw, 1.85rem);
  color: var(--color-gold);
  letter-spacing: 0.02em;
  flex-shrink: 0;
  min-width: 2.5em;
}
.rd .tier-strip__label {
  flex: 1;
  min-width: 0;
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.6rem, 3vw, 2.4rem);
  letter-spacing: -0.012em;
  color: var(--color-navy);
  line-height: 1.15;
}
.rd .tier-strip__arrow {
  font-family: var(--font-sans);
  font-size: clamp(1.4rem, 2vw, 1.8rem);
  color: var(--color-gold);
  transition: transform .3s var(--rd-ease);
  flex-shrink: 0;
}
.rd .tier-strip:hover .tier-strip__arrow {
  transform: translateX(8px);
}

@media (max-width: 640px) {
  .rd .tier-strip { padding: 22px 22px; gap: 16px; }
  .rd .tier-strip__num { min-width: 2em; font-size: 1.1rem; }
  .rd .tier-strip__label { font-size: 1.32rem; }
}

/* --- Tier overlay — full-screen takeover triggered by a strip click.
   The tier's photo fills the screen. A title block sits bottom-left
   (solid color, paper texture). Right-side action rows abut the right
   edge. A minimize button top-right closes back to the stack. --- */
.rd .tier-overlay {
  position: fixed;
  inset: 0;
  z-index: 9500;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity .35s var(--rd-ease),
              visibility 0s linear .35s;
}
.rd .tier-overlay.is-open {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition: opacity .35s var(--rd-ease),
              visibility 0s linear 0s;
}
.rd .tier-overlay__image {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
}
.rd .tier-overlay__veil {
  position: absolute;
  inset: 0;
  /* Bottom-left dark gradient so the title block reads cleanly over any
     photo. The opposite (top-right) corner stays cleaner so the
     minimize button has contrast. */
  background:
    linear-gradient(to right, rgba(13, 31, 60, 0.82) 0%, rgba(13, 31, 60, 0.35) 55%, rgba(13, 31, 60, 0.12) 100%),
    linear-gradient(to top, rgba(13, 31, 60, 0.45) 0%, rgba(13, 31, 60, 0) 60%);
}

.rd .tier-overlay__close {
  position: absolute;
  top: clamp(20px, 3vw, 32px);
  right: clamp(20px, 3vw, 32px);
  width: 56px;
  height: 56px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.5);
  background: rgba(255, 255, 255, 0.10);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background-color .25s var(--rd-ease),
              border-color .25s var(--rd-ease),
              transform .25s var(--rd-ease);
  z-index: 2;
}
.rd .tier-overlay__close:hover {
  background: rgba(255, 255, 255, 0.22);
  border-color: rgba(255, 255, 255, 0.85);
  transform: rotate(-6deg);
}
/* Custom minimize mark — not a standard X. A horizontal bar with a small
   bracket beneath, suggesting "collapse this window down to a strip." */
.rd .tier-overlay__close-mark {
  display: block;
  position: relative;
  width: 22px;
  height: 4px;
  background: #FFFFFF;
  border-radius: 2px;
}
.rd .tier-overlay__close-mark::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 10px;
  transform: translateX(-50%);
  width: 10px;
  height: 2px;
  background: var(--color-gold);
  border-radius: 1px;
}

/* Content layout: bottom-left title block + right-side rows.
   On desktop the rows abut the right edge mid-height. On mobile the
   layout stacks: title block first, rows below. */
.rd .tier-overlay__content {
  position: relative;
  z-index: 1;
  height: 100%;
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(280px, 0.9fr);
  align-items: end;
  padding: clamp(40px, 6vw, 84px);
  gap: clamp(32px, 5vw, 80px);
  color: #FFFFFF;
}

.rd .tier-overlay__title-block {
  background: var(--color-navy);
  padding: clamp(28px, 4vw, 44px) clamp(32px, 4vw, 52px);
  border-radius: 6px;
  max-width: 620px;
  position: relative;
  overflow: hidden;
}
/* Paper-texture overlay on the title block so it reads as a printed
   nameplate, not a flat solid. */
.rd .tier-overlay__title-block::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.16;
  background-image: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='nt'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.92 0 0 0 0 0.85 0 0 0 0 0.72 0 0 0 0.6 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23nt)'/%3E%3C/svg%3E");
  mix-blend-mode: screen;
}
.rd .tier-overlay__title-block > * {
  position: relative;
  z-index: 1;
}
.rd .tier-overlay__eyebrow {
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0 0 14px;
}
.rd .tier-overlay__title {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(2.4rem, 5vw, 3.8rem);
  line-height: 1.06;
  letter-spacing: -0.018em;
  color: #FFFFFF;
  margin: 0 0 14px;
}
.rd .tier-overlay__range {
  font-family: var(--font-sans);
  font-size: 1.02rem;
  font-weight: 500;
  color: rgba(255, 255, 255, 0.78);
  margin: 0 0 18px;
}
.rd .tier-overlay__lede {
  font-family: var(--font-serif);
  font-size: clamp(1.05rem, 1.6vw, 1.2rem);
  line-height: 1.55;
  color: rgba(255, 255, 255, 0.92);
  margin: 0;
}

/* Right-side action rows — wrapped in a semi-opaque navy backdrop so the
   text reads cleanly even on busy photo areas. Text bumped larger per
   Brent. The card-like backdrop with blur gives the rows their own
   "stage" inside the overlay. */
.rd .tier-overlay__rows {
  list-style: none;
  margin: 0;
  padding: clamp(18px, 2vw, 28px) clamp(20px, 2.5vw, 32px);
  align-self: end;
  justify-self: end;
  width: 100%;
  max-width: 540px;
  background: rgba(13, 31, 60, 0.55);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-radius: 8px;
  border: 1px solid rgba(255, 255, 255, 0.12);
}
.rd .tier-overlay__rows li {
  border-bottom: 1px solid rgba(255, 255, 255, 0.18);
}
.rd .tier-overlay__rows li:last-child {
  border-bottom: none;
}
.rd .tier-overlay__rows a {
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 18px 4px;
  text-decoration: none;
  color: #FFFFFF;
  transition: padding .25s var(--rd-ease),
              color .25s var(--rd-ease);
}
.rd .tier-overlay__rows a:hover {
  padding-left: 12px;
  color: var(--color-gold);
}
.rd .tier-overlay__row-label {
  flex: 1;
  font-family: var(--font-serif);
  /* Bigger per Brent — was clamp(1.05, 1.55vw, 1.3rem) */
  font-size: clamp(1.2rem, 1.9vw, 1.55rem);
  line-height: 1.32;
  letter-spacing: -0.005em;
  font-weight: 500;
}
.rd .tier-overlay__row-arrow {
  font-family: var(--font-sans);
  font-size: 1.4rem;
  color: var(--color-gold);
  transition: transform .25s var(--rd-ease);
}
.rd .tier-overlay__rows a:hover .tier-overlay__row-arrow {
  transform: translateX(6px);
}

/* Tablet + mobile — stack the content vertically. Title block first,
   rows below, both flow upward from the bottom of the screen. */
@media (max-width: 900px) {
  .rd .tier-overlay__content {
    grid-template-columns: 1fr;
    gap: 28px;
    padding: clamp(28px, 5vw, 48px);
    padding-top: 100px;
  }
  .rd .tier-overlay__title-block {
    max-width: none;
  }
  .rd .tier-overlay__rows {
    max-width: none;
    justify-self: stretch;
  }
  .rd .tier-overlay__close {
    width: 48px;
    height: 48px;
  }
}

/* ---- Ribbon-overlay variant ---- (Concerns + Insights hub on
   /explore.html. Same tier-overlay scaffold, but the right column
   is replaced with a big centered Quiz CTA, and the bottom-right
   has a compact "alternates" panel — 2 concerns + 2 insights for
   readers who don't want to take the quiz. The title block stays
   bottom-left as on tier-overlays. */
.rd .tier-overlay--ribbon .tier-overlay__content {
  grid-template-columns: minmax(0, 1fr) minmax(280px, 0.7fr);
  grid-template-rows: 1fr auto;
  grid-template-areas:
    "centerquiz centerquiz"
    "title alternates";
  align-items: end;
}
.rd .tier-overlay--ribbon .tier-overlay__title-block { grid-area: title; }
.rd .tier-overlay__center-quiz {
  grid-area: centerquiz;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  gap: 18px;
}
.rd .tier-overlay__center-quiz-eyebrow {
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 0.82rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0;
  text-shadow: 0 2px 12px rgba(0, 0, 0, 0.45);
}
.rd .tier-overlay__center-quiz-cta {
  appearance: none;
  background: var(--color-gold);
  color: var(--color-navy);
  border: none;
  border-radius: 999px;
  padding: 22px 44px;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: clamp(1.05rem, 1.8vw, 1.35rem);
  letter-spacing: 0.01em;
  cursor: pointer;
  box-shadow: 0 16px 36px rgba(0, 0, 0, 0.32), inset 0 1px 0 rgba(255, 255, 255, 0.4);
  transition: transform .25s var(--rd-ease), box-shadow .25s var(--rd-ease);
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.rd .tier-overlay__center-quiz-cta:hover {
  transform: translateY(-2px);
  box-shadow: 0 22px 46px rgba(0, 0, 0, 0.42), inset 0 1px 0 rgba(255, 255, 255, 0.5);
}
.rd .tier-overlay__center-quiz-cta-arrow {
  font-size: 1.15em;
  line-height: 1;
}
.rd .tier-overlay__center-quiz-note {
  font-family: var(--font-sans);
  font-size: 0.9rem;
  color: rgba(255, 255, 255, 0.85);
  margin: 0;
  max-width: 420px;
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.55);
}

.rd .tier-overlay__alternates {
  grid-area: alternates;
  background: rgba(13, 31, 60, 0.65);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-radius: 12px;
  padding: 22px 26px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  max-width: 380px;
  justify-self: end;
}
.rd .tier-overlay__alternates-header {
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 0.74rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0;
}
.rd .tier-overlay__alternates-group { margin: 0; }
.rd .tier-overlay__alternates-group-title {
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 0.78rem;
  color: rgba(255, 255, 255, 0.7);
  margin: 0 0 6px;
  letter-spacing: 0.04em;
}
.rd .tier-overlay__alternates-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.rd .tier-overlay__alternates-list a {
  color: #FFFFFF;
  text-decoration: none;
  font-family: var(--font-sans);
  font-size: 0.95rem;
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  transition: color .2s var(--rd-ease), border-color .2s var(--rd-ease);
}
.rd .tier-overlay__alternates-list a:last-child { border-bottom: none; }
.rd .tier-overlay__alternates-list a:hover {
  color: var(--color-gold);
  border-color: rgba(184, 150, 46, 0.5);
}
.rd .tier-overlay__alternates-arrow {
  margin-left: auto;
  opacity: 0.6;
  transition: transform .2s var(--rd-ease);
}
.rd .tier-overlay__alternates-list a:hover .tier-overlay__alternates-arrow {
  transform: translateX(3px);
  opacity: 1;
}

@media (max-width: 900px) {
  .rd .tier-overlay--ribbon .tier-overlay__content {
    grid-template-columns: 1fr;
    grid-template-rows: auto auto auto;
    grid-template-areas:
      "centerquiz"
      "title"
      "alternates";
    padding-top: 80px;
  }
  .rd .tier-overlay__alternates {
    max-width: none;
    justify-self: stretch;
  }
  .rd .tier-overlay__center-quiz-cta {
    padding: 18px 32px;
    font-size: 1.05rem;
  }
}

/* === Mobile tier-overlay horizontal pan lock (LOCKED, 2026-06-04)
   Brent: on the "I want a focused, fixed-cost plan" ribbon (and the
   "My situation is layered" ribbon), section boxes could be swiped
   sideways off the screen on mobile. Cause: the overlay allowed
   horizontal touch panning when any descendant exceeded viewport
   width (e.g., a long title-block heading or the alternates list).

   FIX: lock horizontal pan on the overlay and its content. touch-action:
   pan-y means the browser only honors vertical swipes — horizontal
   gestures are ignored. overflow-x: hidden caps any rogue overflow
   from a descendant. max-width: 100% on each inner block stops a
   long word or nowrap text from forcing a wider line. Combined,
   nothing can slide off the X axis anymore.
   ============================================================ */
@media (max-width: 900px) {
  .rd .tier-overlay {
    overflow-x: hidden;
    touch-action: pan-y;
  }
  .rd .tier-overlay__content,
  .rd .tier-overlay--ribbon .tier-overlay__content {
    overflow-x: hidden;
    max-width: 100vw;
  }
  .rd .tier-overlay__title-block,
  .rd .tier-overlay__center-steps,
  .rd .tier-overlay__center-quiz,
  .rd .tier-overlay__alternates,
  .rd .tier-overlay__rows {
    max-width: 100%;
    box-sizing: border-box;
  }
  /* Prevent the step list items from forcing a wider line — long
     "what it looks like" titles wrap inside the box rather than
     pushing the box off the right edge. */
  .rd .tier-overlay__center-steps-title,
  .rd .tier-overlay__center-steps .explainer,
  .rd .tier-overlay__center-steps .explainer__term {
    max-width: 100%;
    white-space: normal;
    overflow-wrap: anywhere;
  }
}

/* === Mobile tier-overlay scroll fix (LOCKED, 2026-06-04)
   PROBLEM: On mobile, opening a planning ribbon or hub ribbon showed
   only the part that fit on-screen. Title block, lede, CTA, and the
   "Or jump straight in" alternates section were cut off below the
   fold with no way to scroll — because:
   1. .tier-overlay has no overflow rule (default: visible)
   2. .tier-overlay__content has height: 100% which traps content to
      the viewport box
   3. document.body has overflow:hidden while overlay is open, so the
      body can't scroll either — the user is stuck

   FIX: Make the overlay itself the scroll container. Pin the photo,
   veil, and close button to the viewport with position:fixed so they
   stay as backdrop/affordance while the content scrolls naturally.
   Use 100dvh where supported so the layout breathes correctly when
   the mobile URL bar shows/hides.

   Applies to both .tier-overlay (plain) and .tier-overlay--ribbon
   variants, so all ribbons across planning.html, explore.html, and
   the homepage are fixed at once.
   ============================================================ */
@media (max-width: 900px) {
  .rd .tier-overlay {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
  }
  /* Pin the photo + veil to the viewport — without this, position:absolute
     stretches them to the full scrollHeight, so as you scroll down the
     photo subject scrolls out of frame and a blank dark band appears at
     the bottom. */
  .rd .tier-overlay__image,
  .rd .tier-overlay__veil {
    position: fixed;
    inset: 0;
    width: 100vw;
    height: 100vh;
    height: 100dvh;
  }
  /* Close button always reachable in the top-right corner of the viewport,
     no matter how far the user has scrolled. */
  .rd .tier-overlay__close {
    position: fixed;
    z-index: 3;
  }
  /* Let content take its natural height inside the scrolling overlay. The
     min-height keeps short content visually centered on tall phones. */
  .rd .tier-overlay__content {
    height: auto;
    min-height: 100vh;
    min-height: 100dvh;
    align-items: stretch;
    padding-bottom: 72px;
  }
  /* Same treatment for the ribbon variant — its content block also collapses
     to height:auto so the centerquiz + title + alternates can stack and
     scroll together. */
  .rd .tier-overlay--ribbon .tier-overlay__content {
    height: auto;
    min-height: 100vh;
    min-height: 100dvh;
    align-items: stretch;
    padding-bottom: 72px;
  }
}

/* Hub ribbons — alias the tier-strip pattern with subhead support so
   each ribbon can show a one-line you-centered statement under the
   category title (e.g. "I'm worried about protecting the people I love"). */
.rd .tier-strip--ribbon {
  align-items: flex-start;
  padding-top: 24px;
  padding-bottom: 24px;
  flex-direction: column;
  text-align: left;
}
.rd .tier-strip--ribbon .tier-strip__num {
  color: var(--color-gold);
  font-size: 1.1rem;
  margin-bottom: 6px;
}
.rd .tier-strip--ribbon .tier-strip__label {
  display: block;
  font-size: clamp(1.5rem, 2.6vw, 2.1rem);
  margin-bottom: 4px;
}
.rd .tier-strip__substatement {
  font-family: var(--font-sans);
  font-size: 0.98rem;
  color: rgba(13, 31, 60, 0.7);
  font-style: italic;
  margin: 0;
}
.rd .tier-strip--ribbon .tier-strip__arrow {
  position: absolute;
  right: clamp(24px, 4vw, 48px);
  top: 50%;
  transform: translateY(-50%);
}
.rd .tier-strip--ribbon:hover .tier-strip__arrow {
  transform: translateY(-50%) translateX(6px);
}

/* --- Editorial section numerals (E) ---
   Small "01" / "02" / "03" markers in gold serif italic, set inline before
   the eyebrow text on key sections. Magazine convention — signals "this
   site has a deliberate chapter sequence." Applied to 5 homepage sections:
   01 Why Helms, 02 Your reading list, 03 Meet Brent, 04 Planning, 05 Workshops. */
.rd .section-num {
  display: inline-block;
  margin-right: 12px;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: 1.15em;
  color: var(--color-gold);
  letter-spacing: 0.03em;
  vertical-align: baseline;
  /* Subtle gold "." separator visual via a pseudo so the numeral feels
     "set" rather than just typed inline. */
}
.rd .section-num::after {
  content: " ·";
  margin-left: 6px;
  font-style: normal;
  color: var(--color-gold);
  opacity: 0.55;
}

/* --- Footer paper texture (light grain on dark navy) ---
   Same letterhead pattern as the ivory sections, but tuned for a dark
   background — light-colored noise at low opacity layered over the navy
   so the footer reads as the back of the same printed page. */
.rd .site-footer {
  position: relative;
}
.rd .site-footer::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  opacity: 0.18;
  background-image: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='nf'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.92 0 0 0 0 0.85 0 0 0 0 0.72 0 0 0 0.6 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23nf)'/%3E%3C/svg%3E");
  mix-blend-mode: screen;
}
.rd .site-footer > * {
  position: relative;
  z-index: 1;
}

/* --- Section divider — letterhead-style break ---
   A thin band between major sections so adjacent ivory backgrounds never
   touch. Cream/ivory with the same paper-texture grain, plus a centered
   gold horizontal rule like the chapter break in a printed book. */
.rd .section-divider {
  position: relative;
  background: var(--color-ivory);
  padding: 64px 0;
  text-align: center;
}
.rd .section-divider::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.32;
  background-image: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='n2'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.05 0 0 0 0 0.12 0 0 0 0 0.24 0 0 0 0.6 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n2)'/%3E%3C/svg%3E");
  mix-blend-mode: multiply;
}
.rd .section-divider__rule {
  position: relative;
  display: inline-block;
  width: 96px;
  height: 1px;
  background: var(--color-gold);
  vertical-align: middle;
  z-index: 1;
}
@media (max-width: 680px) {
  .rd .section-divider { padding: 44px 0; }
  .rd .section-divider__rule { width: 64px; }
}

/* --- Magnetic button motion ---
   The primary CTAs (Begin in invite card, Get my answers in modal, Start
   tour, Schedule a Consultation) gain a tiny translate toward the cursor
   on hover. JS reads cursor position and sets --mx / --my CSS variables. */
.rd [data-magnetic] {
  --mx: 0;
  --my: 0;
  transform: translate(calc(var(--mx) * 1px), calc(var(--my) * 1px));
  transition: transform .25s cubic-bezier(.22, 1, .36, 1);
  will-change: transform;
}
.rd [data-magnetic]:active {
  transition: transform .08s ease-out;
}
@media (prefers-reduced-motion: reduce) {
  .rd [data-magnetic] {
    --mx: 0; --my: 0;
    transition: none;
  }
}

/* Mega menu footer — a single "Browse all worries by category" link spans
   the full width of the dropdown below the 4 concern columns, giving users
   a way to reach the concerns landing page from any page on the site. */
.rd .mega-menu__footer {
  grid-column: 1 / -1;
  padding-top: 18px;
  margin-top: 4px;
  border-top: 1px solid rgba(13, 31, 60, 0.08);
  text-align: center;
}
.rd .mega-menu__footer a {
  font-family: var(--font-sans);
  font-size: 0.94rem;
  font-weight: 500;
  color: var(--color-navy);
  text-decoration: none;
  letter-spacing: 0.01em;
  transition: color .2s var(--rd-ease);
}
.rd .mega-menu__footer a:hover { color: var(--color-gold); }

/* Quiet "Or browse all worries by category" link below the invite card —
   for users who don't want a guided experience and would rather see all
   four categories visually on the concerns landing page. */
.rd .worries__browse-link {
  text-align: center;
  margin: 0 0 24px;
  font-family: var(--font-sans);
  font-size: 0.98rem;
}
.rd .worries__browse-link a {
  color: var(--color-navy);
  opacity: 0.72;
  text-decoration: underline;
  text-underline-offset: 4px;
  transition: opacity .2s var(--rd-ease);
}
.rd .worries__browse-link a:hover { opacity: 1; }

/* =====================================================================
   WHAT KEEPS YOU UP AT NIGHT — conversion-focused invite. Big personal
   note from Brent + oversized Begin button. The whole block is built to
   pull the reader into the quiz: section title sets the emotional hook,
   the card carries Brent's voice, and the button dominates the card.
   ===================================================================== */
.rd .worries__headline {
  font-size: clamp(2rem, 4.2vw, 3.2rem);
  line-height: 1.12;
  letter-spacing: -0.015em;
  margin-bottom: 56px;
}

.rd .worry-invite {
  display: grid;
  grid-template-columns: minmax(0, 360px) minmax(0, 1fr);
  gap: clamp(40px, 5vw, 72px);
  align-items: center;
  max-width: 1140px;
  margin: 0 auto 72px;
  padding: clamp(40px, 5vw, 64px);
  background: #FFFFFF;
  border: 1px solid rgba(13, 31, 60, 0.08);
  border-radius: 28px;
  box-shadow: 0 28px 72px rgba(13, 31, 60, 0.10);
}
.rd .worry-invite__media {
  position: relative;
}
.rd .worry-invite__media img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 16px;
  box-shadow: 0 12px 36px rgba(13, 31, 60, 0.22);
  object-fit: cover;
  aspect-ratio: 4 / 5;
}
.rd .worry-invite__copy { min-width: 0; }
.rd .worry-invite__eyebrow {
  font-family: var(--font-sans);
  font-size: 0.84rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0 0 22px;
}
.rd .worry-invite__note {
  position: relative;
  margin: 0;
  padding: 0;
  border: none;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  /* Significantly bigger so it reads as a personal note, not body copy. */
  font-size: clamp(1.45rem, 2.4vw, 1.95rem);
  line-height: 1.4;
  color: var(--color-navy);
  letter-spacing: -0.005em;
}
.rd .worry-invite__note p { margin: 0; }
.rd .worry-invite__signature {
  margin: 22px 0 0;
  line-height: 0;
}
.rd .worry-invite__signature-img {
  display: inline-block;
  width: clamp(160px, 22vw, 220px);
  height: auto;
  /* The signature scan has white pixels around the ink — multiply blend
     drops them so the ink reads as if it were written directly on the
     ivory card background, not pasted on white. */
  mix-blend-mode: multiply;
  opacity: 0.92;
}
@media (max-width: 880px) {
  .rd .worry-invite__signature { text-align: center; }
}
.rd .worry-invite__cta {
  /* Override the sitewide .quiz-cta vertical rhythm — the card supplies
     its own. */
  margin: 36px 0 0;
  max-width: none;
  text-align: left;
}
/* The Begin button DOMINATES the invite card — it's the primary
   conversion driver. Larger than the default .quiz-trigger because this
   is the moment we want every visitor to act on. */
.rd .worry-invite__cta .quiz-trigger {
  padding: 28px 64px;
  font-size: 1.45rem;
  gap: 22px;
  box-shadow: 0 14px 36px rgba(13, 31, 60, 0.24);
}
.rd .worry-invite__cta .quiz-trigger:hover {
  transform: translateY(-3px);
  box-shadow: 0 22px 52px rgba(13, 31, 60, 0.32);
}
.rd .worry-invite__cta .quiz-trigger__arrow { font-size: 1.65rem; }
.rd .worry-invite__cta .quiz-cta__note {
  margin-top: 18px;
  text-align: left;
  font-size: 0.98rem;
}

@media (max-width: 880px) {
  .rd .worry-invite {
    grid-template-columns: 1fr;
    text-align: center;
    padding: 32px 26px;
    gap: 30px;
  }
  .rd .worry-invite__media {
    max-width: 260px;
    margin: 0 auto;
  }
  .rd .worry-invite__cta { text-align: center; }
  .rd .worry-invite__cta .quiz-cta__note { text-align: center; }
  .rd .worry-invite__signature { text-align: center; }
  .rd .worry-invite__cta .quiz-trigger {
    padding: 22px 44px;
    font-size: 1.18rem;
  }
}

/* =====================================================================
   GUIDED TOUR — replaces the inline playlist in the modal with a single
   primary CTA ("Start your guided tour"), then mounts a persistent
   floating widget on every page so the client can navigate Brent's
   curated reading list as they scroll, with consultation + workshop
   CTAs always one click away.
   ===================================================================== */

/* Hide the playlist (it's now a hidden data source — its items become
   the tour widget's items after Start tour is clicked). */
.rd .quiz-modal__card .playlist { display: none !important; }

/* End-of-quiz CTA row inside the modal — center horizontally, generous
   vertical space above so it sits as its own block under the verdict. */
.rd .guided-quiz__cta-row {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  margin-top: 32px;
  margin-bottom: 8px;
}
/* Secondary "Schedule a Consultation" link inside the verdict screen —
   styled like the existing .btn--secondary but sized to match the primary
   tour-start button. */
.rd .quiz-result-consult {
  font-family: var(--font-sans);
  font-size: 1.02rem;
  font-weight: 500;
  letter-spacing: 0.005em;
  padding: 16px 36px;
  border-radius: 11px;
  text-decoration: none;
  border: 1px solid var(--color-navy);
  color: var(--color-navy);
  background: transparent;
  transition: background-color .25s var(--rd-ease),
              color .25s var(--rd-ease);
}
.rd .quiz-result-consult:hover {
  background: var(--color-navy);
  color: #FFFFFF;
}
/* Tertiary Retake link — quietest of the three so it doesn't pull focus
   from the primary action. */
.rd .quiz-result-retake {
  background: none;
  border: none;
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: 0.92rem;
  color: var(--color-navy);
  opacity: 0.62;
  text-decoration: underline;
  text-underline-offset: 3px;
  padding: 6px 8px;
  margin-top: 4px;
  transition: opacity .2s var(--rd-ease);
}
.rd .quiz-result-retake:hover { opacity: 1; }
.rd .quiz-tour-start {
  display: inline-flex;
  align-items: center;
  gap: 16px;
  font-family: var(--font-sans);
  font-size: 1.18rem;
  font-weight: 500;
  letter-spacing: -0.005em;
  padding: 22px 44px;
  border-radius: 12px;
  box-shadow: 0 10px 28px rgba(13, 31, 60, 0.2);
  transition: background-color .25s var(--rd-ease),
              transform .25s var(--rd-ease),
              box-shadow .25s var(--rd-ease);
}
.rd .quiz-tour-start:hover {
  transform: translateY(-2px);
  box-shadow: 0 18px 40px rgba(13, 31, 60, 0.28);
}
.rd .quiz-tour-start__arrow {
  font-size: 1.35rem;
  transition: transform .25s var(--rd-ease);
}
.rd .quiz-tour-start:hover .quiz-tour-start__arrow {
  transform: translateX(6px);
}
.rd .guided-quiz__cta-alt {
  display: inline-block;
  margin-top: 22px;
  font-family: var(--font-serif);
  font-size: 0.98rem;
  color: var(--color-navy);
  opacity: 0.68;
  text-decoration: underline;
  text-underline-offset: 3px;
  transition: opacity .2s var(--rd-ease);
}
.rd .guided-quiz__cta-alt:hover { opacity: 1; }

@media (max-width: 680px) {
  .rd .quiz-tour-start { font-size: 1.02rem; padding: 18px 30px; gap: 12px; }
  .rd .quiz-tour-start__arrow { font-size: 1.15rem; }
}

/* ----------------------------------------------------------------------
   Floating widget — collapsed handle on the right edge of the viewport,
   expanded panel that slides in from the right.
   ---------------------------------------------------------------------- */
.rd .tour-widget {
  position: fixed;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  z-index: 9000;
  font-family: var(--font-sans);
}
/* When the panel is open we MUST dissolve the widget's transform — that
   transform creates a CSS containing block for any position:fixed child,
   trapping the panel's top:0/bottom:0 to the tiny handle box (~150px) and
   making overflow:hidden clip everything below the eyebrow. With transform
   removed and top forced to 0, the panel positions against the viewport
   and fills the full screen height as designed. The handle is display:none
   in this state so the widget's repositioning is invisible. */
.rd .tour-widget.is-open {
  top: 0;
  transform: none;
}

/* HANDLE — big enough to be noticed without effort. Wider, deeper, with a
   gold accent strip and a settle-and-pulse entrance animation on first
   appearance so the user sees the widget arrive. */
.rd .tour-widget__handle {
  background: var(--color-navy);
  color: #FFFFFF;
  border: none;
  border-radius: 18px 0 0 18px;
  padding: 26px 22px 24px;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  font-family: var(--font-sans);
  font-size: 0.95rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  box-shadow: -14px 0 36px rgba(13, 31, 60, 0.32);
  transition: background-color .25s var(--rd-ease),
              padding .25s var(--rd-ease),
              transform .25s var(--rd-ease);
  min-width: 108px;
  /* Gold accent strip on the leading edge so the eye catches it. */
  border-left: 4px solid var(--color-gold);
}
.rd .tour-widget__handle:hover {
  background: #1a2d52;
  padding-right: 30px;
  transform: translateX(-2px);
}
.rd .tour-widget__handle-icon {
  font-size: 1.85rem;
  line-height: 1;
}
.rd .tour-widget__handle-label {
  display: block;
}
.rd .tour-widget__count {
  background: var(--color-gold);
  color: var(--color-navy);
  border-radius: 50%;
  width: 34px;
  height: 34px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: 0;
  font-family: var(--font-sans);
}

/* ARRIVAL ANIMATION — when the widget mounts on the landing page after the
   user clicks Start Tour, it slides in from off-screen right, settles, and
   pulses gold once so the user can't miss where it landed. */
@keyframes rdTourArrive {
  0%   { transform: translate(120%, -50%); opacity: 0; }
  70%  { transform: translate(-8px, -50%); opacity: 1; }
  100% { transform: translate(0, -50%); opacity: 1; }
}
@keyframes rdTourPulse {
  0%   { box-shadow: -14px 0 36px rgba(13, 31, 60, 0.32),
                     0 0 0 0 rgba(184, 150, 46, 0.55); }
  50%  { box-shadow: -14px 0 36px rgba(13, 31, 60, 0.32),
                     0 0 0 14px rgba(184, 150, 46, 0); }
  100% { box-shadow: -14px 0 36px rgba(13, 31, 60, 0.32),
                     0 0 0 0 rgba(184, 150, 46, 0); }
}
.rd .tour-widget.is-arriving {
  animation: rdTourArrive .55s var(--rd-ease) forwards;
}
.rd .tour-widget.is-arriving .tour-widget__handle {
  animation: rdTourPulse 1.6s var(--rd-ease) .55s 2;
}
@media (prefers-reduced-motion: reduce) {
  .rd .tour-widget.is-arriving,
  .rd .tour-widget.is-arriving .tour-widget__handle { animation: none; }
}

/* LAUNCH ANIMATION on the source page — when the user clicks Start Tour,
   the verdict box visibly flies toward the right edge of the screen before
   the navigation kicks in. Creates the "this is moving to your hamburger"
   visual continuity Brent asked for. */
@keyframes rdTourLaunch {
  0%   { transform: translateX(0) scale(1); opacity: 1; }
  100% { transform: translate(60vw, 0) scale(0.55); opacity: 0; }
}
.rd .quiz-cta--launching {
  animation: rdTourLaunch .45s var(--rd-ease) forwards;
  pointer-events: none;
}
@media (prefers-reduced-motion: reduce) {
  .rd .quiz-cta--launching { animation: none; opacity: 0; }
}

/* PANEL — simple list, no scroll, easy to read. Wider, generous padding,
   descriptions stripped (the title alone is enough — Brent's "guide with
   simplicity"). */
.rd .tour-widget__panel {
  position: fixed;
  right: 0;
  top: 0;
  bottom: 0;
  width: min(480px, 100vw);
  background: #FFFFFF;
  box-shadow: -18px 0 50px rgba(13, 31, 60, 0.28);
  padding: 56px 40px 32px;
  /* No scroll — content must fit. We strip descriptions and tighten line
     heights so 5 items + header + CTAs land comfortably under 800px. */
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transform: translateX(105%);
  transition: transform .42s var(--rd-ease);
  z-index: 9100;
}
.rd .tour-widget.is-open .tour-widget__panel {
  transform: translateX(0);
}
.rd .tour-widget.is-open .tour-widget__handle {
  display: none;
}

.rd .tour-widget__close {
  position: absolute;
  top: 18px;
  right: 18px;
  background: rgba(13, 31, 60, 0.06);
  border: none;
  font-size: 1.75rem;
  cursor: pointer;
  color: var(--color-navy);
  width: 44px;
  height: 44px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  font-family: inherit;
  transition: background-color .2s var(--rd-ease);
}
.rd .tour-widget__close:hover {
  background: rgba(13, 31, 60, 0.14);
}

.rd .tour-widget__eyebrow {
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0 0 10px;
}
.rd .tour-widget__title {
  font-family: var(--font-serif);
  font-size: 1.7rem;
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--color-navy);
  margin: 0 0 28px;
  line-height: 1.18;
}
.rd .tour-widget__list {
  list-style: none;
  margin: 0 0 24px;
  padding: 0;
  /* No flex:1 — we don't want the list stretching and pushing CTAs off. */
}
.rd .tour-widget__item {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 14px 0;
  border-bottom: 1px solid rgba(13, 31, 60, 0.08);
}
.rd .tour-widget__item:last-child { border-bottom: none; }
.rd .tour-widget__num {
  font-family: var(--font-serif);
  font-size: 1.02rem;
  color: var(--color-gold);
  font-weight: 500;
  letter-spacing: 0.04em;
  min-width: 28px;
}
.rd .tour-widget__body { flex: 1; min-width: 0; }
.rd .tour-widget__title-link {
  font-family: var(--font-serif);
  font-size: 1.12rem;
  color: var(--color-navy);
  text-decoration: none;
  line-height: 1.3;
  display: block;
  transition: color .2s var(--rd-ease);
}
.rd .tour-widget__title-link:hover { color: var(--color-gold); }
/* Descriptions hidden — keep simple. The title is enough. */
.rd .tour-widget__desc { display: none; }

/* Current page */
.rd .tour-widget__item--current {
  background: rgba(184, 150, 46, 0.12);
  margin: 0 -16px;
  padding: 14px 16px;
  border-radius: 10px;
  border-bottom: 1px solid rgba(13, 31, 60, 0.08);
}
.rd .tour-widget__item--current .tour-widget__title-link {
  color: var(--color-navy);
  font-weight: 600;
}
.rd .tour-widget__current-tag {
  display: inline-block;
  background: var(--color-gold);
  color: var(--color-navy);
  font-family: var(--font-sans);
  font-size: 0.64rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 3px 8px;
  border-radius: 4px;
  margin-left: 10px;
  vertical-align: middle;
}

/* Visited page (not current) */
.rd .tour-widget__item--visited .tour-widget__title-link {
  color: var(--color-navy);
  opacity: 0.5;
  text-decoration: line-through;
  text-decoration-color: rgba(13, 31, 60, 0.5);
}

/* Router — question-framed next-step prompts that sit below the reading
   list. Always visible (#4 pattern) so curious mid-tour users can break
   out anytime, and the primary row promotes to extra-large weight on
   completion (#1 pattern). */
.rd .tour-widget__router {
  margin-top: auto;
  padding-top: 22px;
  border-top: 1px solid rgba(13, 31, 60, 0.1);
}
.rd .tour-widget__router-heading {
  font-family: var(--font-sans);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0 0 14px;
}
.rd .tour-widget__router-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 14px 18px;
  margin: 0 0 8px;
  border-radius: 10px;
  text-decoration: none;
  border: 1px solid rgba(13, 31, 60, 0.10);
  font-family: var(--font-serif);
  font-size: 1.06rem;
  color: var(--color-navy);
  background: #FFFFFF;
  transition: background-color .2s var(--rd-ease),
              color .2s var(--rd-ease),
              border-color .2s var(--rd-ease),
              transform .2s var(--rd-ease);
}
.rd .tour-widget__router-item:hover {
  background: rgba(13, 31, 60, 0.04);
  transform: translateX(2px);
}
.rd .tour-widget__router-q { flex: 1; }
.rd .tour-widget__router-arrow {
  color: var(--color-gold);
  font-size: 1.15rem;
  flex-shrink: 0;
  transition: transform .2s var(--rd-ease);
}
.rd .tour-widget__router-item:hover .tour-widget__router-arrow {
  transform: translateX(4px);
}

/* Primary row — consultation. Navy bg, white text, drives the eye. */
.rd .tour-widget__router-item--primary {
  background: var(--color-navy);
  color: #FFFFFF;
  border-color: var(--color-navy);
}
.rd .tour-widget__router-item--primary:hover {
  background: #1a2d52;
  color: #FFFFFF;
  transform: translateX(2px) translateY(-1px);
}
.rd .tour-widget__router-item--primary .tour-widget__router-arrow {
  color: var(--color-gold);
}

/* XL primary — applied on completion. The consultation row gets bigger
   so it's the visible answer to "what's next?" */
.rd .tour-widget__router-item--xl {
  padding: 20px 22px;
  font-size: 1.18rem;
  font-weight: 500;
  margin-bottom: 12px;
  box-shadow: 0 8px 22px rgba(13, 31, 60, 0.22);
}

/* Completion state — subtle accent on the title so the user knows the
   tour ended and the focus shifts. */
.rd .tour-widget.is-complete .tour-widget__eyebrow { color: #2a8754; /* warm green nod */ }
.rd .tour-widget__end {
  display: block;
  margin: 18px auto 0;
  background: none;
  border: none;
  color: var(--color-navy);
  opacity: 0.55;
  font-family: var(--font-sans);
  font-size: 0.85rem;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 3px;
  padding: 8px 12px;
  transition: opacity .2s var(--rd-ease);
}
.rd .tour-widget__end:hover { opacity: 1; }

/* On viewports shorter than 700px (mobile, short laptop), tighten further
   so the panel never needs a scrollbar even with 5 items + CTAs. */
@media (max-height: 720px) {
  .rd .tour-widget__panel { padding: 40px 32px 22px; }
  .rd .tour-widget__title { font-size: 1.45rem; margin-bottom: 20px; }
  .rd .tour-widget__item { padding: 11px 0; }
  .rd .tour-widget__title-link { font-size: 1.04rem; }
  .rd .tour-widget__ctas { padding-top: 14px; gap: 8px; }
  .rd .tour-widget__cta { padding: 12px 18px; font-size: 0.92rem; }
}

@media (max-width: 680px) {
  .rd .tour-widget__handle {
    padding: 18px 16px;
    min-width: 84px;
    font-size: 0.82rem;
    gap: 10px;
  }
  .rd .tour-widget__handle-icon { font-size: 1.45rem; }
  .rd .tour-widget__count { width: 28px; height: 28px; font-size: 0.85rem; }
  .rd .tour-widget__panel {
    width: 100vw;
    padding: 50px 24px 22px;
  }
  .rd .tour-widget__close { top: 12px; right: 12px; }
  .rd .tour-widget__title { font-size: 1.45rem; margin-bottom: 22px; }
  .rd .tour-widget__item { padding: 11px 0; gap: 12px; }
  .rd .tour-widget__title-link { font-size: 1.04rem; }
}

/* ============================================================
   SECTION BACKGROUND STANDARD (LOCKED, 2026-06-03)
   ============================================================
   Two and only two backgrounds are used on <section> elements
   inside <main> anywhere on the site, other than:
     - .page-hero  (dark photo + veil)
     - .final-cta  (navy + Office 2 overlay)
     - .site-header / .site-footer

   A = paper      = solid white, no overlay
   B = ivory-dot  = ivory background + subtle navy radial dot grid

   Testimonials get their own third background:
   T = parchment  = warm cream + thin gold hairlines top/bottom

   These rules live at the END of redesign.css so they override
   any earlier per-class background declarations across the site.
   Alternation (B-A-B-A...) is enforced per-page by ordering the
   matching section classes, not by nth-child selectors.
   ============================================================ */

.rd {
  --section-bg-a: var(--color-white);
  --section-bg-b: var(--color-ivory);
  --testimonial-bg: #EEE7D8;
}

/* === B sections (ivory + dot grid) =========================== */
.rd .why-helms,
.rd .self-id,
.rd .workshops,
.rd .tier-stack,
.rd .insight-section--ivory,
.rd .legal-body--ivory,
.rd .team-bio,
.rd .about-behavior,
.rd .about-bio,
.rd .workshops-expectations,
.rd .workshops-environment,
.rd .referral-share,
.rd .concern-visual,
.rd .consult-options,
.rd .section--ivory {
  background-color: var(--section-bg-b);
  background-image:
    radial-gradient(rgba(13, 31, 60, 0.05) 1.4px, transparent 1.5px);
  background-size: 22px 22px;
}

/* === A sections (paper white, plain) ========================= */
.rd .worries,
.rd .tier-router,
.rd .inaction,
.rd .brent,
.rd .team,
.rd .legal-body,
.rd .insight-section,
.rd .insight-section--white,
.rd .about-experience,
.rd .workshops-confidence,
.rd .workshops-speaking,
.rd .how-it-works,
.rd .referral-note,
.rd .referral-make,
.rd .referral-meet,
.rd .concern-bullets,
.rd .concern-related,
.rd .insight-questions,
.rd .consult-contact,
.rd .consult-property,
.rd .section--paper {
  background-color: var(--section-bg-a);
  background-image: none;
}

/* A rule above lists .insight-section (bare) so that any insight-section
   without a --ivory or --white modifier defaults to white. The --ivory
   modifier wins because both selectors are equal specificity and the
   B block comes first; ordering them so --ivory is later guarantees it. */
.rd .insight-section--ivory {
  background-color: var(--section-bg-b);
  background-image:
    radial-gradient(rgba(13, 31, 60, 0.05) 1.4px, transparent 1.5px);
  background-size: 22px 22px;
}

/* === Testimonial — parchment + gold hairlines ================ */
.rd .inline-testimonial,
.rd .inline-testimonial--white {
  background-color: var(--testimonial-bg);
  background-image: none;
  border-top: 1px solid var(--color-gold);
  border-bottom: 1px solid var(--color-gold);
}

/* === Header / footer parity (LOCKED, 2026-06-03) =============
   The footer mirrors the header: same navy token, same 1px
   rgba-white hairline, no gradient, no diagonal weave, no
   noise overlay. The hairline sits at the top of the footer
   (mirror of the header's bottom hairline) to separate the
   footer cleanly from the final-cta block above.
   ============================================================ */
.rd .site-footer {
  background-color: var(--color-navy);
  background-image: none;
  border-top: 1px solid rgba(255, 255, 255, 0.10);
}
.rd .site-footer::before {
  display: none;
}

/* === Disable bespoke ::before noise overlays on Why Helms + Meet Brent ===
   These were a previous-design-pass holdover that painted a fractal-noise
   texture over the section. The section background standard above is the
   single source of truth across the site — no per-section noise overlays.
   ============================================================ */
.rd .why-helms::before,
.rd .brent::before {
  display: none;
}

/* === Meet Brent inner card — ivory panel on the white A section so the
   card defines itself against the new background without relying on the
   removed texture overlay. Uses the existing --color-ivory token; no
   new color introduced. */
.rd .brent .brent__grid {
  background-color: var(--color-ivory);
}

/* === Header logo — match footer logo size on desktop (LOCKED, 2026-06-03)
   The footer logo is sized by width (260px). The header logo now matches
   that constraint on desktop. Mobile keeps its existing 50px-height cap
   so the header band stays a reasonable size on small screens.
   The JS in redesign.js measures the header live and writes
   --rd-header-height; the sticky breadcrumb and any anchor scroll uses
   that variable, so the layout adapts automatically when this grows.
   ============================================================ */
.rd .brand__logo {
  width: 260px;
  height: auto;
  max-width: none;
}
@media (max-width: 768px) {
  .rd .brand__logo {
    width: auto;
    height: 50px;
  }
}

/* === Primary nav text — larger on desktop (LOCKED, 2026-06-03)
   Bumps the header nav links, dropdown triggers, mega-trigger, and the
   "Schedule a Consultation" CTA from 0.94rem (~15px) to 1.08rem (~17px)
   so the nav reads at a comfortable size next to the larger logo.
   .primary-nav only renders on desktop (mobile uses .mobile-nav with its
   own typography), so no media query needed.
   ============================================================ */
.rd .primary-nav__link,
.rd .dropdown-trigger,
.rd .mega-trigger,
.rd .primary-nav__cta {
  font-size: 1.08rem;
}

/* === How We Work — engagement ribbon overlays (LOCKED, 2026-06-04)
   Standard and Bespoke overlays use the same .tier-overlay--ribbon
   layout as planning.html, but they carry MORE TEXT in the center
   (5 numbered steps) and that text has to sell the visitor on the
   personal nature of the engagement. So this variant runs noticeably
   LARGER type, a wider/heavier center panel, a denser veil over the
   photo for legibility, and a bigger "Best for" panel on the right.

   Scoped under .tier-overlay--engagement so the planning + get-clarity
   overlays are not affected.
   ============================================================ */

/* Stronger veil over the photo so the larger center text remains
   readable regardless of how busy the photo is. */
.rd .tier-overlay--engagement .tier-overlay__veil {
  background: linear-gradient(180deg,
    rgba(13, 31, 60, 0.55) 0%,
    rgba(13, 31, 60, 0.72) 55%,
    rgba(13, 31, 60, 0.88) 100%);
}

/* Center-steps panel — placed in the ribbon grid's "centerquiz" area
   so it sits in the TOP-spanning row, then centered both horizontally
   and vertically within that area via align-self / justify-self. The
   ribbon grid template defines centerquiz as the full-width top row;
   we use that area, NOT align-self: end (which would sink the box to
   the bottom of the area). */
.rd .tier-overlay__center-steps {
  grid-area: centerquiz;
  align-self: center;
  justify-self: center;
  text-align: center;
  color: #FFFFFF;
}
.rd .tier-overlay--engagement .tier-overlay__center-steps {
  max-width: 560px;
  width: 100%;
  padding: clamp(28px, 3vw, 40px) clamp(28px, 3vw, 40px);
  background: rgba(13, 31, 60, 0.78);
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: 10px;
  backdrop-filter: blur(3px);
}

.rd .tier-overlay__center-steps-eyebrow {
  font-family: var(--font-sans);
  font-size: 0.95rem;
  font-weight: 700;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0 0 22px;
  text-align: center;
}

.rd .tier-overlay__center-steps-list {
  list-style: none;
  padding: 0;
  margin: 0 0 28px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* List items: centered baseline alignment for the bigger numeral + title pairing */
.rd .tier-overlay__center-steps-list li {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 18px;
  padding: 12px 18px;
  background: rgba(13, 31, 60, 0.45);
  border: 1px solid rgba(255, 255, 255, 0.10);
  border-radius: 6px;
}

.rd .tier-overlay__center-steps-num {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 500;
  font-size: clamp(1.4rem, 2vw, 1.85rem);
  color: var(--color-gold);
  line-height: 1;
  flex-shrink: 0;
}

.rd .tier-overlay__center-steps-title {
  font-family: var(--font-serif);
  font-size: clamp(1.18rem, 1.7vw, 1.45rem);
  font-weight: 500;
  line-height: 1.25;
  color: #FFFFFF;
  text-align: left;
}

.rd .tier-overlay__center-steps-cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-sans);
  font-size: 1.05rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--color-gold);
  text-decoration: none;
  padding: 10px 4px;
  border-bottom: 1px solid rgba(184, 150, 46, 0.40);
  transition: border-color .25s var(--rd-ease), color .25s var(--rd-ease), gap .25s var(--rd-ease);
}
.rd .tier-overlay__center-steps-cta:hover {
  color: #FFFFFF;
  border-bottom-color: rgba(255, 255, 255, 0.8);
  gap: 14px;
}
.rd .tier-overlay__center-steps-cta-arrow {
  display: inline-flex;
  font-family: var(--font-sans);
  font-size: 1.15rem;
}

/* "Best for" bullet variant of the alternates list — flat bullet list
   with bigger type than the planning alternates list. */
.rd .tier-overlay__alternates-list--bullets {
  list-style: none;
  padding: 0;
  margin: 0;
}
.rd .tier-overlay--engagement .tier-overlay__alternates {
  padding: clamp(30px, 3.4vw, 44px) clamp(28px, 3vw, 38px);
  min-width: clamp(320px, 32vw, 420px);
  background: rgba(13, 31, 60, 0.78);
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: 10px;
}
.rd .tier-overlay--engagement .tier-overlay__alternates-header {
  font-size: 1.05rem;
  letter-spacing: 0.20em;
  margin-bottom: 22px;
  color: var(--color-gold);
}
.rd .tier-overlay__alternates-list--bullets li {
  position: relative;
  padding: 10px 0 10px 24px;
  font-family: var(--font-sans);
  font-size: 1.18rem;
  line-height: 1.5;
  color: rgba(255, 255, 255, 0.95);
}
.rd .tier-overlay__alternates-list--bullets li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 19px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--color-gold);
}

/* === Explainer "?" inside the center-steps list ============== */
/* The step titles are wrapped in .explainer with a clickable button + popup.
   On the dark step rows, the title text needs to stay white (the default
   .explainer__term color is gold), and the "?" indicator needs its own
   compact circular treatment so it doesn't crowd the title. */
.rd .tier-overlay__center-steps .explainer {
  display: inline-flex;
  align-items: baseline;
  position: relative;
}
.rd .tier-overlay__center-steps .explainer__term {
  color: #FFFFFF !important;
  border-bottom: none !important;
  padding: 0 !important;
  font-family: var(--font-serif) !important;
  text-align: left;
}
.rd .tier-overlay__center-steps .explainer__term::after {
  content: "?";
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  margin-left: 10px;
  font-size: 0.62em;
  font-weight: 700;
  font-style: normal;
  color: var(--color-gold);
  background: rgba(255, 255, 255, 0.14);
  border: 1px solid rgba(184, 150, 46, 0.55);
  border-radius: 50%;
  vertical-align: middle;
  transition: background-color .2s var(--rd-ease), color .2s var(--rd-ease);
}
.rd .tier-overlay__center-steps .explainer__term:hover::after,
.rd .tier-overlay__center-steps .explainer__term:focus-visible::after {
  background: var(--color-gold);
  color: var(--color-navy);
}
/* Popup positioning inside the dark overlay: place above the term and
   keep the existing .explainer__pop styling for the popup itself. */
.rd .tier-overlay__center-steps .explainer__pop {
  text-align: left;
}

/* Mobile: center-steps collapses to full width; box stays for legibility */
@media (max-width: 900px) {
  .rd .tier-overlay--engagement .tier-overlay__center-steps {
    max-width: none;
    background: rgba(13, 31, 60, 0.82);
  }
  .rd .tier-overlay--engagement .tier-overlay__center-steps-list li {
    background: rgba(13, 31, 60, 0.55);
  }
}

/* === Quiz-fallback button below the engagement ribbons ====== */
.rd .tier-stack__quiz-fallback {
  text-align: center;
  margin-top: clamp(28px, 4vw, 44px);
}

/* === Why Helms pillars — static, visible by default (LOCKED, 2026-06-03)
   Previous behavior: the four pillars started invisible (opacity 0) and
   were only revealed when the why-helms typewriter finished, by JS adding
   .is-revealed-staged. The typewriter was moved to the homepage hero, so
   there's nothing left to trigger the staged reveal — without this override
   the pillars would never appear. Hover lift still works (separate rule).
   ============================================================ */
.rd .why-helms__grid .pillar {
  opacity: 1;
  transform: none;
}

/* === Mobile sticky action bar (LOCKED, 2026-06-04)
   Bottom-anchored bar with three quick actions: Directions to the
   office (Google Maps), Call (tel: link), and Consultation (links
   to consultation.html). Mobile-only — hidden above 992px so it
   doesn't compete with the desktop header CTA. Background matches
   the nav header (navy + thin white hairline at the top edge).

   Bar is injected by redesign.js so we don't have to edit 70+ HTML
   files. Body gets a padding-bottom equal to the bar's height so
   footer content isn't hidden under it. env(safe-area-inset-bottom)
   keeps the bar above the iPhone home-indicator gesture area.

   z-index sits below the tour-widget (9000), the tour-widget panel
   (9100), and the tier-overlays (9500), so any of those that open
   over the bar correctly cover it.
   ============================================================ */
.rd .mobile-actions { display: none; }

@media (max-width: 992px) {
  .rd .mobile-actions {
    /* !important on the positional properties so nothing else can knock
       the bar off the bottom. Brent saw the bar "floating" mid-page with
       text above and below it on his phone — symptom of position:fixed
       being overridden or not applied. */
    display: flex !important;
    position: fixed !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    top: auto !important;
    width: 100% !important;
    background: var(--color-navy);
    border-top: 1px solid rgba(255, 255, 255, 0.10);
    box-shadow: 0 -8px 22px rgba(13, 31, 60, 0.18);
    z-index: 8000;
    padding-bottom: env(safe-area-inset-bottom);
    font-family: var(--font-sans);
    /* Promote to its own GPU composite layer so iOS Safari's
       compositor doesn't shift the bar around during URL-bar
       transitions or momentum scrolling. */
    transform: translateZ(0);
    -webkit-transform: translateZ(0);
    will-change: transform;
    /* Reset margin in case a UA stylesheet or generic rule adds any. */
    margin: 0 !important;
  }
  .rd .mobile-actions__item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    padding: 10px 6px;
    color: #FFFFFF;
    text-decoration: none;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.10em;
    text-transform: uppercase;
    border-right: 1px solid rgba(255, 255, 255, 0.10);
    transition: background-color .18s ease;
    min-height: 62px;
  }
  .rd .mobile-actions__item:last-child { border-right: none; }
  .rd .mobile-actions__item:hover,
  .rd .mobile-actions__item:active,
  .rd .mobile-actions__item:focus-visible {
    background: rgba(255, 255, 255, 0.08);
    outline: none;
  }
  .rd .mobile-actions__icon {
    width: 22px;
    height: 22px;
    color: var(--color-gold);
    flex-shrink: 0;
  }
  .rd .mobile-actions__label {
    line-height: 1;
  }

  /* CTA column — gold background to make the consultation action the
     obvious primary among the three. Icon + label flip to navy. */
  .rd .mobile-actions__item--cta {
    background: var(--color-gold);
    color: var(--color-navy);
  }
  .rd .mobile-actions__item--cta .mobile-actions__icon {
    color: var(--color-navy);
  }
  .rd .mobile-actions__item--cta:hover,
  .rd .mobile-actions__item--cta:active,
  .rd .mobile-actions__item--cta:focus-visible {
    background: #d8b878;
  }

  /* Push body content up so the footer (or last section) isn't
     hidden behind the fixed bar. .rd is the body class. */
  .rd {
    padding-bottom: calc(62px + env(safe-area-inset-bottom));
  }
}

/* Hide bar in print — these are interactive-only actions. */
@media print {
  .rd .mobile-actions { display: none !important; }
}

/* === Mobile action-bar minimize affordance (LOCKED, 2026-06-04)
   Same pattern as the hamburger minimize: a gold minus circle on the
   bar's top-left corner slides the whole bar off the right edge of
   the screen. A small navy tab on the right edge restores it. State
   persists in sessionStorage. Body class shrinks padding-bottom
   while minimized so the user reclaims the bottom 62px of viewport.
   ============================================================ */
.rd .mobile-actions__min { display: none; }
.rd .mobile-actions-stub { display: none; }

@media (max-width: 992px) {
  /* Minus circle floats on the top-left corner of the bar, half
     overlapping with page content above. Mirrors the hamburger
     widget's gold minus button. */
  .rd .mobile-actions__min {
    position: absolute;
    top: -14px;
    left: 12px;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--color-gold);
    color: var(--color-navy);
    border: 2px solid #FFFFFF;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-family: var(--font-sans);
    font-size: 1.4rem;
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
    padding: 0;
    box-shadow: 0 3px 10px rgba(13, 31, 60, 0.35);
    z-index: 8001;
    transition: transform .2s var(--rd-ease),
                background-color .2s var(--rd-ease);
  }
  .rd .mobile-actions__min:hover,
  .rd .mobile-actions__min:active,
  .rd .mobile-actions__min:focus-visible {
    background: #d8b878;
    transform: scale(1.08);
    outline: none;
  }
  /* When the bar is already minimized, the minus button slid off with
     the bar — hide so it doesn't render anywhere weird. */
  .rd .mobile-actions.is-minimized .mobile-actions__min { display: none; }

  /* Slide the whole bar off the right edge with a 3D transform so it
     keeps its own composite layer (no jitter). !important needed to
     beat the bar's own bulletproofed transform: translateZ(0). */
  .rd .mobile-actions.is-minimized {
    transform: translate3d(105%, 0, 0) !important;
    pointer-events: none;
    transition: transform .35s var(--rd-ease);
  }
  /* Smooth slide-back animation when restoring. */
  .rd .mobile-actions {
    transition: transform .35s var(--rd-ease);
  }

  /* Restore stub — small navy tab on the right edge, sitting above
     the home indicator. Visible only when the bar is minimized. */
  .rd .mobile-actions-stub {
    position: fixed;
    right: 0;
    bottom: calc(20px + env(safe-area-inset-bottom));
    z-index: 8000;
    width: 38px;
    height: 58px;
    background: var(--color-navy);
    color: #FFFFFF;
    border: none;
    border-left: 3px solid var(--color-gold);
    border-radius: 12px 0 0 12px;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    box-shadow: -10px 0 22px rgba(13, 31, 60, 0.30);
    padding: 0;
    font-family: var(--font-sans);
    font-size: 1.5rem;
    line-height: 1;
  }
  .rd .mobile-actions-stub.is-visible {
    display: inline-flex;
  }
  .rd .mobile-actions-stub:hover,
  .rd .mobile-actions-stub:active,
  .rd .mobile-actions-stub:focus-visible {
    background: #1a2d52;
    outline: none;
  }

  /* When minimized, drop body padding-bottom so the user gets the
     bottom 62px of viewport back. Only safe-area-inset-bottom is
     retained so content doesn't hide under the iPhone home indicator. */
  .rd.is-actions-minimized {
    padding-bottom: env(safe-area-inset-bottom) !important;
    transition: padding-bottom .35s var(--rd-ease);
  }
}

/* === Mobile hero typewriter — dedicated line (LOCKED, 2026-06-04)
   PROBLEM: The homepage hero headline ends with "...and you start [WORD]."
   The cycling word changes length ("living" = 6 chars, "breathing easier"
   = 16 chars), and on mobile the headline wraps differently each tick:
   sometimes the word fits at the end of the prior line, sometimes it
   drops to a new line, sometimes the trailing period jumps alone. The
   text appeared to bounce between two layouts each second.

   FIX: Wrap the typewriter span + trailing period in a new line container,
   .page-hero__typewriter-line. On mobile, force display: block so the
   word + period always sit on their own row underneath the static
   intro text. The static text never reflows; only the dedicated line
   changes content.

   On desktop, the wrapper is still display: inline so the original
   flowing headline is preserved.
   ============================================================ */
@media (max-width: 700px) {
  .rd .page-hero__typewriter-line {
    display: block;
    margin-top: 6px;
  }
}

/* === Mobile consultation-hero crop fix (LOCKED, 2026-06-04)
   PROBLEM: The consultation page hero uses Brent in Home.png — Brent is
   seated on the LEFT side of the kitchen table, with two clients to the
   right. The inline style on the <img> sets object-position: center 25%,
   which works on desktop's wide landscape crop but on mobile's 4/5
   portrait crop, the center-X anchor crops Brent out of frame — leaving
   only the two clients visible.

   FIX: On mobile, anchor the X position to ~20% so Brent stays visible
   in the cropped portrait frame. Selector targets only the consultation
   hero (via its unique aria-labelledby) so no other page is affected.
   !important is required to overcome the inline style on the <img>.
   ============================================================ */
@media (max-width: 992px) {
  [aria-labelledby="consult-hero-headline"] .page-hero__image {
    object-position: 22% 28% !important;
  }
}

/* === Concerns + Insights hero — pattern match homepage (LOCKED, 2026-06-04)
   Brent: "Pattern the hero section on the concerns and insights pages
   after the hero section on the homepage. That should make it work."

   The fix is NEGATIVE space: previously this block held an override
   that gave these two pages an ivory veil with navy text, which fought
   against the global .rd .page-hero__veil rule (navy gradient + white
   text — the homepage pattern). Deleting the override lets these two
   pages inherit the canonical homepage hero treatment naturally:
   - Dark navy gradient veil over the photo (visible photo behind)
   - White headline + sub text on the dark wash
   - Same animation cascade as the homepage hero copy

   If a future page needs a different hero treatment, scope it with a
   page-specific aria-labelledby selector but be sure white text on
   the veil still reads. Don't break the inheritance.
   ============================================================ */

/* === Referral one-pager share section (LOCKED, 2026-06-04)
   Sits between Make a Referral and the Lunch Invitation on
   referral-partners.html. Three buttons let the referring professional
   download, email-from-their-own-inbox, or auto-print the firm-
   introduction one-pager. Quiet ivory backdrop keeps it visually
   distinct from the white Make a Referral above without competing.
   ============================================================ */
.rd .referral-share {
  /* Background-color/image are inherited from the B-section block at the
     end of redesign.css (added .referral-share to that selector list so
     it adopts the canonical ivory + navy-dot-grid pattern). Only layout
     properties live here. */
  padding: clamp(56px, 8vw, 88px) clamp(20px, 5vw, 48px);
}
.rd .referral-share__inner {
  max-width: 720px;
  margin: 0 auto;
  text-align: center;
}
.rd .referral-share__eyebrow {
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.20em;
  text-transform: uppercase;
  color: var(--color-gold);
  margin: 0 0 14px;
}
.rd .referral-share__headline {
  font-family: var(--font-serif);
  font-size: clamp(1.7rem, 3vw, 2.3rem);
  font-weight: 500;
  line-height: 1.18;
  color: var(--color-navy);
  margin: 0 0 18px;
  letter-spacing: -0.005em;
}
.rd .referral-share__body {
  font-family: var(--font-serif);
  font-size: clamp(1.02rem, 1.4vw, 1.16rem);
  line-height: 1.6;
  color: var(--color-charcoal);
  margin: 0 auto 32px;
  max-width: 580px;
}
.rd .referral-share__actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 14px;
}
@media (max-width: 600px) {
  .rd .referral-share__actions {
    flex-direction: column;
    align-items: stretch;
    gap: 12px;
  }
  .rd .referral-share__actions .btn {
    width: 100%;
  }
}

/* === Mobile print-result button removal (LOCKED, 2026-06-04)
   Brent: "on your path, take out 'print my result' button for mobile."
   The Find-Your-Path quiz on planning.html and the matching quiz on
   how-we-work.html end with a "Print My Result" button + its hint
   paragraph ("Print your answers and bring them to your consultation").
   Printing from a phone isn't useful, so hide the button, the hint, and
   the wrapper container on mobile.

   Surgical: every other page also uses .quiz-modal__actions (for a
   "Schedule a Consultation" CTA on the concern/insight quiz results),
   so we only hide the container when it actually contains a
   [data-quiz-print] button. The child-selector rules are the broad-
   browser fallback for environments without :has() support — those
   leave the empty wrapper visible but at least no print button.
   ============================================================ */
@media (max-width: 992px) {
  .rd .quiz-modal__actions [data-quiz-print] { display: none !important; }
  .rd .quiz-modal__actions-hint { display: none !important; }
  /* Modern browsers (Safari 15.4+, Chrome 105+, Firefox 121+) — collapse
     the now-empty actions container so no padding band remains. */
  .rd .quiz-modal__actions:has([data-quiz-print]) { display: none !important; }
}

/* === Mobile tour-widget panel scroll fix (LOCKED, 2026-06-04)
   PROBLEM: When the hamburger panel opens on a phone, the reading list +
   router (Want to talk it through? / Want to sit in on a workshop? /
   End my guided tour, etc.) overflows the viewport. The panel had
   `overflow: hidden` and the comment "No scroll — content must fit" —
   true on desktop, false on phones. Worse, trying to swipe inside the
   panel scrolled the PAGE underneath instead, because body scroll
   wasn't locked when the panel opened.

   FIX: Make the panel itself the scroll container on mobile, keep the
   close button anchored to the corner of the panel even while content
   scrolls, and lock body scroll via JS so swipes inside the panel
   never bubble to the page. `overscroll-behavior: contain` provides
   defense-in-depth even on browsers where the JS lock fails.

   Body-scroll lock is in redesign.js — see the [data-tour-toggle]
   handler. Restored on minimize, End Tour, Restart, and Escape.
   ============================================================ */
@media (max-width: 992px) {
  .rd .tour-widget__panel {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
  }
  /* Close button: switch from absolute (scrolls with content) to fixed
     so it always sits in the top-right corner of the viewport while the
     panel is open. The panel covers the full viewport width on mobile
     (width: min(480px, 100vw) -> 100vw), so viewport top-right === panel
     top-right. .tour-widget.is-open dissolves the widget's transform
     (see the .is-open rule above), so position:fixed escapes correctly
     to the viewport rather than being trapped to the widget. */
  .rd .tour-widget.is-open .tour-widget__close {
    position: fixed;
    top: 18px;
    right: 18px;
    z-index: 9101;
  }
}

/* === Mobile tour-widget minimize affordance (LOCKED, 2026-06-04)
   PROBLEM: On mobile, the floating tour widget sits over body text,
   making it hard to read or interact with the page.

   FIX: A small gold minus-circle on the corner of the handle that
   slides the entire widget off-screen to the right when tapped. A tiny
   navy stub remains anchored to the right edge — tapping it slides the
   widget back into view. State persists in sessionStorage so the
   minimize choice survives page-to-page navigation during a tour.

   Desktop-safe: minimize button is display:none above 992px, the stub
   is display:none above 992px, and the slide-off transform is only
   applied inside the mobile media query — so even if `is-minimized`
   leaks to desktop, the widget remains visible.
   ============================================================ */
.rd .tour-widget__min {
  position: absolute;
  top: -10px;
  left: -12px;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: var(--color-gold);
  color: var(--color-navy);
  border: 2px solid #FFFFFF;
  /* Desktop: hidden. Mobile media query below flips this to inline-flex. */
  display: none;
  align-items: center;
  justify-content: center;
  font-family: var(--font-sans);
  font-size: 1.4rem;
  font-weight: 700;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  box-shadow: 0 3px 10px rgba(13, 31, 60, 0.35);
  z-index: 9050;
  transition: transform .2s var(--rd-ease), background-color .2s var(--rd-ease);
}
.rd .tour-widget__min:hover,
.rd .tour-widget__min:focus-visible {
  background: #d8b878;
  transform: scale(1.08);
  outline: none;
}
/* When the panel is open, the close button (×) inside the panel handles
   close — hide the minimize affordance so they don't compete. */
.rd .tour-widget.is-open .tour-widget__min { display: none !important; }

/* Restore stub — tiny tab fixed to the right edge of the viewport,
   only visible when the widget is minimized. */
.rd .tour-widget-stub {
  position: fixed;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  z-index: 9000;
  width: 40px;
  height: 72px;
  background: var(--color-navy);
  color: #FFFFFF;
  border: none;
  border-left: 3px solid var(--color-gold);
  border-radius: 14px 0 0 14px;
  font-size: 1.4rem;
  /* Desktop: hidden. Mobile + .is-visible flips this on. */
  display: none;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: -10px 0 24px rgba(13, 31, 60, 0.30);
  padding: 0;
  font-family: var(--font-sans);
}
.rd .tour-widget-stub:hover,
.rd .tour-widget-stub:focus-visible {
  background: #1a2d52;
  outline: none;
}

@media (max-width: 992px) {
  /* Show the minus circle on mobile (unless panel is open or widget minimized). */
  .rd .tour-widget__min {
    display: inline-flex;
  }
  .rd .tour-widget.is-minimized .tour-widget__min { display: none; }

  /* Slide the whole widget off the right edge when minimized. */
  .rd .tour-widget.is-minimized {
    transform: translate(120%, -50%);
    pointer-events: none;
    transition: transform .35s var(--rd-ease);
  }

  /* Show the stub only when the widget is minimized. */
  .rd .tour-widget-stub.is-visible {
    display: inline-flex;
  }
}

/* === Mobile hero — navy backdrop so white text reads (LOCKED, 2026-06-04)
   BUG: On mobile (≤992px), styles.css collapses .page-hero so the photo
   becomes a small banner at the top, the veil is display:none, and the
   text block sits below on the body's ivory background. The .rd text
   colors are WHITE, which means white-on-ivory = invisible.

   FIX: Force a navy backdrop on the mobile .page-hero, restore a dark
   veil sitting over the photo, and ensure all text inside the mobile
   hero is white. Also fix the .btn--secondary which uses navy borders
   by default — on the new navy backdrop those would disappear.
   ============================================================ */
@media (max-width: 992px) {
  .rd .page-hero {
    background-color: var(--color-navy);
    border-bottom: none;
  }
  /* Bring the veil back on mobile so the photo banner above keeps a
     consistent darkened tone that matches the text-block below. */
  .rd .page-hero__veil {
    display: block;
    background: linear-gradient(
      180deg,
      rgba(13, 31, 60, 0.30) 0%,
      rgba(13, 31, 60, 0.55) 100%
    );
  }
  .rd .page-hero__inner {
    background-color: var(--color-navy);
    padding-top: 48px;
    padding-bottom: 64px;
  }
  .rd .page-hero__headline,
  .rd .page-hero__copy h1 {
    color: #FFFFFF;
  }
  .rd .page-hero__sub {
    color: rgba(255, 255, 255, 0.92);
  }
  /* Secondary buttons default to navy-on-transparent — invisible on the
     navy backdrop. Flip to white-on-transparent for mobile hero. */
  .rd .page-hero .btn--secondary {
    color: #FFFFFF;
    border-color: rgba(255, 255, 255, 0.65);
    background-color: transparent;
  }
  .rd .page-hero .btn--secondary:hover,
  .rd .page-hero .btn--secondary:focus-visible {
    background-color: rgba(255, 255, 255, 0.10);
    border-color: #FFFFFF;
    color: #FFFFFF;
  }
}

/* === Meet Brent credentials + closing line (LOCKED, 2026-06-03)
   Every credential in the .brent__list is wrapped in an explainer
   button, so each role gets its own gold "?" indicator. The benefit
   description sits inside the popup (not in the visible flow), so the
   list stays a tight roster of credentials at a glance. A short
   you-centered closing line sits between the list and the
   "Read more about Brent" CTA.
   ============================================================ */
.rd .brent__close {
  margin: 18px 0 22px;
  font-style: italic;
  color: var(--color-charcoal);
}

/* === Footer — 4-column grid mirroring the nav (LOCKED, 2026-06-03)
   Was a 3-column grid (Brand / Explore / Areas We Serve). The footer
   now mirrors the primary nav + dropdowns:
     1. Brand      — logo, address, phone, hours, social
     2. Plan With Brent — Get Clarity, Planning, How We Work, Insights,
                          Workshops, Schedule a Consultation
     3. About      — About Brent, Our Team, Areas We Serve
     4. For Professionals — Referral Partners, Working With Advisors

   Responsive collapse: 4 across on desktop, 2 across on tablet
   (≤1024px), 1 column on mobile (≤600px).
   ============================================================ */
.rd .site-footer__grid {
  grid-template-columns: 1.5fr 1fr 1fr 1fr;
}
@media (max-width: 1024px) {
  .rd .site-footer__grid {
    grid-template-columns: 1fr 1fr;
    gap: 40px;
  }
}
@media (max-width: 600px) {
  .rd .site-footer__grid {
    grid-template-columns: 1fr;
    gap: 36px;
  }
}
