/*
Theme Name:  Resource Visa (Blocksy Child)
Theme URI:   https://resourcevisa.com.au
Description: Coded child theme for Resource Visa — Coverly-derived layout, logo palette (navy #1F3564 / blue #4071BE), Lora + Inter.
Author:      Adalytics
Template:    blocksy
Version:     0.1.0
Text Domain: resourcevisa
*/

/* =========================================================
   Tokens — Coverly scale, Resource Visa palette
   ========================================================= */
:root {
  --rv-navy: #1f3564;
  --rv-navy-700: #16264a;
  --rv-navy-800: #101c38;
  --rv-blue: #4071be;
  --rv-blue-600: #3562a8;
  --rv-blue-soft: #eaf0f9;
  --rv-blue-line: #c9d7ee;
  --rv-black: #0a0a0a;
  --rv-white: #fff;
  --rv-beige: #fbfbf9;
  --rv-beige-100: #ecece7;
  --rv-beige-200: #d9d8cf;
  --rv-grey: #474747;
  --rv-grey-100: #e0e0dc;
  --rv-grey-200: #bfbfbf;
  --rv-grey-250: #949494;
  --rv-white-50: rgba(255, 255, 255, 0.6);
  --rv-white-25: rgba(255, 255, 255, 0.18);

  --rv-font-primary: "Lora", Georgia, serif;
  --rv-font-secondary: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;

  --rv-h1: 3.5rem;
  --rv-h2: 3.5rem;
  --rv-h3: 2.25rem;
  --rv-container: 73.5rem;
  --rv-gutter: 2.5rem;
  --rv-section: 6rem;
  --rv-radius: 0.25rem;
  --rv-ease: cubic-bezier(0.165, 0.84, 0.44, 1);
  --rv-nav-h: 4.5rem;
}
@media (max-width: 991px) {
  :root { --rv-h1: 3rem; --rv-h2: 3rem; --rv-section: 4rem; }
}
@media (max-width: 767px) {
  /* 2026-09-25: phone headings one step smaller (44/40 to 40/36). Long H2s ran
   to four lines at 40px on a 343px measure. Applies to the homepage too. */
  :root { --rv-h1: 2.5rem; --rv-h2: 2.25rem; --rv-h3: 2rem; --rv-section: 3rem; --rv-gutter: 1rem; }
}

/* =========================================================
   Base (scoped to .rv-page so Blocksy defaults stay out)
   ========================================================= */
.rv-page,
.rv-page * { box-sizing: border-box; }
.rv-page {
  background: var(--rv-beige);
  color: var(--rv-black);
  font-family: var(--rv-font-secondary);
  font-size: 1rem;
  line-height: 1.5;
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.rv-page h1, .rv-page h2, .rv-page h3, .rv-page h4 {
  font-family: var(--rv-font-primary);
  font-weight: 400;
  margin: 0;
  color: inherit;
}
.rv-page h1 { font-size: var(--rv-h1); line-height: 1.14; letter-spacing: -0.05em; }
.rv-page h2 { font-size: var(--rv-h2); line-height: 1.15; letter-spacing: -0.05em; }
.rv-page h3, .rv-page .rv-h3 { font-size: var(--rv-h3); line-height: 1.11; letter-spacing: -0.03em; }
.rv-page p { margin: 0; }
:where(.rv-page) a { color: inherit; text-decoration: none; }
.rv-page img { max-width: 100%; display: block; }
.rv-page ul { list-style: none; margin: 0; padding: 0; }

.rv-container { width: 100%; max-width: var(--rv-container); margin-inline: auto; }
.rv-gutter { padding-inline: var(--rv-gutter); }
.rv-section { padding-block: var(--rv-section); }

.rv-tag {
  font-size: 0.875rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--rv-blue);
  font-weight: 500;
}
.rv-muted { color: var(--rv-grey); }
.rv-xl { font-family: var(--rv-font-primary); font-size: 1.25rem; letter-spacing: -0.03em; line-height: 1.4; }
.rv-sm { font-size: 0.875rem; line-height: 1.42; }
.rv-max-32 { max-width: 32rem; }
.rv-max-26 { max-width: 26rem; }
.rv-max-41 { max-width: 41rem; }
.rv-max-48 { max-width: 48.4375rem; }

.rv-sp-xs { padding-top: 0.25rem; }
.rv-sp-s { padding-top: 0.75rem; }
.rv-sp-m { padding-top: 1rem; }
.rv-sp-l { padding-top: 1.5rem; }
.rv-sp-xl { padding-top: 1.75rem; }
.rv-sp-h { padding-top: 2rem; }
.rv-sp-xh { padding-top: 3.25rem; }
.rv-sp-section { padding-top: 4rem; }
@media (max-width: 991px) { .rv-sp-section { padding-top: 3rem; } .rv-sp-xh { padding-top: 3rem; } }
@media (max-width: 767px) { .rv-sp-section { padding-top: 2rem; } .rv-sp-xh { padding-top: 2rem; } }

/* Buttons — kept black per brief */
.rv-btn,
.rv-page .rv-el-btn .elementor-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 3rem;
  padding: 0.5rem 1.25rem;
  border-radius: var(--rv-radius);
  background: var(--rv-blue);
  color: var(--rv-white);
  font-size: 1rem;
  font-weight: 500;
  line-height: 1.4;
  border: 1px solid var(--rv-blue);
  cursor: pointer;
  transition: background-color 0.32s var(--rv-ease), border-color 0.32s var(--rv-ease), color 0.32s var(--rv-ease), transform 0.35s var(--rv-ease);
}
.rv-btn:hover,
.rv-page .rv-el-btn .elementor-button:hover {
  background: var(--rv-navy);
  border-color: var(--rv-navy);
  color: var(--rv-white);
  transform: scale(0.98);
}
.rv-btn.is-secondary,
.rv-page .rv-el-btn.is-secondary .elementor-button { background: transparent; color: var(--rv-navy); border-color: var(--rv-blue-line); }
.rv-btn.is-secondary:hover,
.rv-page .rv-el-btn.is-secondary .elementor-button:hover { border-color: var(--rv-navy); background: var(--rv-blue-soft); }
.rv-btn.is-small,
.rv-page .rv-el-btn.is-small .elementor-button { min-height: 2.5rem; padding-block: 0.375rem; }
.rv-btn.is-white,
.rv-page .rv-el-btn.is-white .elementor-button { background: var(--rv-white); color: var(--rv-navy); border-color: var(--rv-white); }
.rv-btn-row { display: flex; flex-wrap: wrap; gap: 1rem; align-items: flex-start; }
@media (max-width: 479px) { .rv-btn-row { flex-direction: column; } .rv-btn-row .rv-btn { width: 100%; } }

/* "Learn more" link with underline bar */
.rv-more {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  font-size: 0.875rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  line-height: 1.2;
  gap: 0.35rem;
}
.rv-more::after {
  content: "";
  width: 100%;
  height: 1.5px;
  background: currentColor;
  transform-origin: left;
  transition: transform 0.4s var(--rv-ease);
}
.rv-card:hover .rv-more::after, .rv-more:hover::after { transform: scaleX(0.6); }

/* Image frames */
.rv-frame { position: relative; overflow: clip; width: 100%; border-radius: var(--rv-radius); }
.rv-frame > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }

/* Grids */
.rv-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: stretch; }
.rv-header-grid { display: grid; grid-template-columns: 1fr 2fr; gap: 0; }
@media (max-width: 991px) { .rv-grid-2 { gap: 2rem; } }
@media (max-width: 767px) { .rv-grid-2 { grid-template-columns: 1fr; } .rv-header-grid { grid-template-columns: 1fr; gap: 1rem; } }

/* =========================================================
   Header / navigation
   ========================================================= */
/* Header shares the page container so the logo lines up with body content. */
/* The header puts .rv-gutter ON the container, so its max-width must carry the
   gutter to land on the same 1176px content band the body and footer use. */
.rv-header .rv-container { max-width: calc(var(--rv-container) + (2 * var(--rv-gutter))); }
.rv-header {
  position: sticky;
  top: 0;
  z-index: 999;
  background: var(--rv-beige);
  border-bottom: 1px solid var(--rv-grey-100);
}
body.admin-bar .rv-header { top: 32px; }
@media (max-width: 782px) { body.admin-bar .rv-header { top: 46px; } }
.rv-header__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  height: var(--rv-nav-h);
}
.rv-logo { display: inline-flex; align-items: center; flex: none; }
.rv-logo img { height: 2rem; width: auto; }

.rv-nav { display: flex; align-items: center; gap: 0.125rem; flex: 1 1 auto; min-width: 0; justify-content: center; }
.rv-nav__item { position: static; }
.rv-nav__link {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.6rem 0.45rem;
  font-size: 0.875rem;
  font-weight: 500;
  white-space: nowrap;
  color: var(--rv-black);
  background: none;
  border: 0;
  cursor: pointer;
  font-family: inherit;
  border-radius: var(--rv-radius);
  transition: color 0.2s, background-color 0.2s;
}
.rv-nav__link svg { width: 0.85rem; height: 0.85rem; transition: transform 0.25s var(--rv-ease); }
.rv-nav__item.is-open > .rv-nav__link,
.rv-nav__link:hover { color: var(--rv-blue); }
.rv-nav__item.is-open > .rv-nav__link svg { transform: rotate(180deg); }

.rv-header__utility { display: flex; align-items: center; gap: 1rem; flex: none; }
.rv-phone { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.2; }
.rv-phone__number { font-weight: 600; font-size: 1rem; color: var(--rv-navy); white-space: nowrap; }
.rv-phone__number:hover { color: var(--rv-blue); }
.rv-phone__hours { font-size: 0.75rem; color: var(--rv-grey); white-space: nowrap; }

.rv-burger {
  display: none;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--rv-grey-100);
  border-radius: var(--rv-radius);
  background: var(--rv-white);
  cursor: pointer;
  align-items: center;
  justify-content: center;
  flex: none;
}
.rv-burger span { display: block; width: 1.1rem; height: 2px; background: var(--rv-black); position: relative; }
.rv-burger span::before, .rv-burger span::after { content: ""; position: absolute; left: 0; width: 100%; height: 2px; background: var(--rv-black); transition: transform 0.25s; }
.rv-burger span::before { top: -6px; }
.rv-burger span::after { top: 6px; }
.rv-header.is-menu-open .rv-burger span { background: transparent; }
.rv-header.is-menu-open .rv-burger span::before { transform: translateY(6px) rotate(45deg); }
.rv-header.is-menu-open .rv-burger span::after { transform: translateY(-6px) rotate(-45deg); }

/* Hover state: whole bar turns Resource Visa blue (Interstaff pattern, brand colour) */
.rv-header { transition: background-color 0.3s var(--rv-ease), border-color 0.3s var(--rv-ease); }
.rv-logo img { transition: opacity 0.25s var(--rv-ease); }
.rv-logo .is-white { display: none; }
.rv-header.is-hover,
.rv-header.is-open-mega {
  background: var(--rv-blue);
  border-bottom-color: var(--rv-blue-600);
}
.rv-header.is-hover .rv-logo .is-colour, .rv-header.is-open-mega .rv-logo .is-colour { display: none; }
.rv-header.is-hover .rv-logo .is-white, .rv-header.is-open-mega .rv-logo .is-white { display: block; }
.rv-header.is-hover .rv-nav__link, .rv-header.is-open-mega .rv-nav__link,
.rv-header.is-hover .rv-phone__number, .rv-header.is-open-mega .rv-phone__number { color: var(--rv-white); }
.rv-header.is-hover .rv-phone__hours, .rv-header.is-open-mega .rv-phone__hours { color: rgba(255, 255, 255, 0.75); }
.rv-header.is-hover .rv-nav__item.is-open > .rv-nav__link, .rv-header.is-open-mega .rv-nav__item.is-open > .rv-nav__link,
.rv-header.is-hover .rv-nav__link:hover, .rv-header.is-open-mega .rv-nav__link:hover { color: var(--rv-white); background: rgba(255, 255, 255, 0.14); }
.rv-header.is-hover .rv-burger, .rv-header.is-open-mega .rv-burger { background: transparent; border-color: rgba(255, 255, 255, 0.5); }
.rv-header.is-hover .rv-burger span, .rv-header.is-hover .rv-burger span::before, .rv-header.is-hover .rv-burger span::after { background: var(--rv-white); }
@media (hover: hover) and (min-width: 992px) {
  .rv-header:hover { background: var(--rv-blue); border-bottom-color: var(--rv-blue-600); }
  .rv-header:hover .rv-logo .is-colour { display: none; }
  .rv-header:hover .rv-logo .is-white { display: block; }
  .rv-header:hover .rv-nav__link, .rv-header:hover .rv-phone__number { color: var(--rv-white); }
  .rv-header:hover .rv-phone__hours { color: rgba(255, 255, 255, 0.75); }
  .rv-header:hover .rv-nav__item.is-open > .rv-nav__link, .rv-header:hover .rv-nav__link:hover { color: var(--rv-white); background: rgba(255, 255, 255, 0.14); }
}

/* Mega panel */
.rv-mega {
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  background: var(--rv-white);
  border-bottom: 1px solid var(--rv-grey-100);
  border-top: 1px solid var(--rv-blue-line);
  box-shadow: 0 24px 48px -24px rgba(16, 28, 56, 0.25);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 0.25s var(--rv-ease), transform 0.25s var(--rv-ease), visibility 0s linear 0.25s;
}
.rv-nav__item.is-open > .rv-mega { opacity: 1; visibility: visible; transform: translateY(0); transition-delay: 0s; }
.rv-mega .rv-container { max-width: var(--rv-container); }
.rv-mega__inner {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 3rem;
  padding-block: 2.25rem;
}
.rv-mega__inner.is-single { grid-template-columns: 1fr; }
.rv-mega__intro { font-size: 0.8125rem; color: var(--rv-grey); max-width: 30rem; }
.rv-mega__cols { display: grid; grid-template-columns: 1fr 1fr; gap: 0.25rem 2.5rem; }
.rv-mega__cols.is-narrow { max-width: 42rem; }
.rv-mega__colhead { font-size: 0.75rem; letter-spacing: 0.15em; text-transform: uppercase; color: var(--rv-blue); font-weight: 600; padding: 0.5rem 0 0.35rem; grid-column: span 1; }
.rv-mega__link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.55rem 0;
  border-bottom: 1px solid var(--rv-grey-100);
  font-size: 0.9375rem;
  color: var(--rv-black);
  transition: color 0.2s, padding-left 0.25s var(--rv-ease);
}
.rv-mega__link:hover { color: var(--rv-blue); padding-left: 0.25rem; }
.rv-mega__link.is-all { color: var(--rv-blue); font-weight: 500; border-bottom: 0; }
.rv-mega__link.is-all::after { content: "→"; }
.rv-feature {
  background: var(--rv-blue-soft);
  border: 1px solid var(--rv-blue-line);
  border-radius: var(--rv-radius);
  padding: 1.5rem;
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  align-self: start;
}
.rv-feature__label { font-size: 0.75rem; letter-spacing: 0.15em; text-transform: uppercase; color: var(--rv-blue); font-weight: 600; }
.rv-feature__title { font-family: var(--rv-font-primary); font-size: 1.25rem; line-height: 1.3; letter-spacing: -0.02em; color: var(--rv-navy); }
.rv-feature__link { font-size: 0.9375rem; color: var(--rv-navy); font-weight: 500; display: inline-flex; gap: 0.4rem; align-items: center; }
.rv-feature__link::after { content: "→"; transition: transform 0.25s var(--rv-ease); }
.rv-feature__link:hover::after { transform: translateX(3px); }

/* Mobile nav ≤1179 (measured: full nav needs ~1212px of bar width) */
@media (max-width: 1179px) {
  .rv-nav { display: none; }
  .rv-header__utility .rv-phone__hours { display: none; }
  .rv-burger { display: inline-flex; }
  .rv-header.is-menu-open .rv-nav {
    display: block;
    position: fixed;
    inset: var(--rv-nav-h) 0 0 0;
    background: var(--rv-beige);
    overflow-y: auto;
    padding: 1rem var(--rv-gutter) 3rem;
  }
  body.admin-bar .rv-header.is-menu-open .rv-nav { top: calc(var(--rv-nav-h) + 32px); }
  .rv-nav__item { position: relative; border-bottom: 1px solid var(--rv-grey-100); }
  .rv-nav__link { width: 100%; justify-content: space-between; padding: 1rem 0; font-size: 1.125rem; }
  .rv-mega {
    position: static;
    box-shadow: none;
    border: 0;
    background: transparent;
    display: none;
    opacity: 1;
    visibility: visible;
    transform: none;
  }
  .rv-nav__item.is-open > .rv-mega { display: block; }
  .rv-mega__inner { grid-template-columns: 1fr; gap: 1.25rem; padding: 0 0 1.25rem; }
  .rv-mega__cols { grid-template-columns: 1fr; }
  .rv-mega__intro { display: none; }
  .rv-nav__mobile-cta { padding-top: 1.5rem; display: flex; flex-direction: column; gap: 1rem; }
  .rv-nav__mobile-cta .rv-phone { align-items: flex-start; }
  .rv-nav__mobile-cta .rv-phone__number { font-size: 1.25rem; }
}
@media (min-width: 1180px) { .rv-nav__mobile-cta { display: none; } }

/* =========================================================
   Hero
   ========================================================= */
.rv-hero { padding-top: 6.25rem; padding-bottom: 4rem; }
/* Top aligned. Bottom alignment dropped the eyebrow and H1 below the first
   line of the paragraph opposite, which read as a broken grid. */
.rv-hero__layout { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; }
.rv-hero__note { font-weight: 500; color: var(--rv-navy); }
.rv-hero__img { width: 100%; height: 44.13rem; position: relative; overflow: clip; }
.rv-hero__img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 991px) {
  .rv-hero { padding-top: 6rem; padding-bottom: 3rem; }
  .rv-hero__layout { flex-direction: column; align-items: flex-start; }
  .rv-hero__img { height: auto; padding-top: 55%; }
}
@media (max-width: 767px) { .rv-hero { padding-top: 3rem; padding-bottom: 2rem; } }

/* =========================================================
   Authority / stats
   ========================================================= */
.rv-content { display: flex; flex-direction: column; justify-content: space-between; align-items: flex-start; gap: 3rem; }
.rv-portrait { padding-top: 115%; }
.rv-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem 0.75rem; width: 100%; }
.rv-stat { display: flex; flex-direction: column; gap: 1rem; }
.rv-stat__num { font-family: var(--rv-font-primary); font-size: 4rem; letter-spacing: -0.05em; line-height: 1; display: flex; align-items: baseline; gap: 0.5rem; }
.rv-stat__num small { font-family: var(--rv-font-primary); font-size: 1.5rem; letter-spacing: -0.03em; color: rgba(10, 10, 10, 0.5); }
.rv-stat__num.is-text { font-size: 2.25rem; line-height: 1.1; }
.rv-stat__label { color: var(--rv-grey); }
.rv-foot { font-size: 0.8125rem; color: var(--rv-grey-250); line-height: 1.5; }
@media (max-width: 767px) {
  .rv-content { gap: 2rem; }
  .rv-stat__num { font-size: 3rem; }
  .rv-stat__num.is-text { font-size: 1.75rem; }
}

/* =========================================================
   Services cards
   ========================================================= */
.rv-services { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 1rem; }
.rv-services__img { position: relative; overflow: clip; width: 100%; min-height: 24rem; border-radius: var(--rv-radius); }
.rv-services__img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.rv-card {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  width: 100%;
  height: 100%;
  padding: 1.5rem;
  border-radius: var(--rv-radius);
  background: var(--rv-beige-100);
  transition: background-color 0.2s;
}
.rv-card:hover { background: var(--rv-beige-200); }
.rv-card__icon {
  width: 3rem;
  height: 3rem;
  border-radius: var(--rv-radius);
  background: var(--rv-blue);
  color: var(--rv-white);
  display: flex;
  align-items: center;
  justify-content: center;
}
.rv-card__icon svg { width: 1.5rem; height: 1.5rem; }
.rv-card__gap { padding-top: 6rem; }
.rv-card__body { display: flex; flex-direction: column; gap: 1.5rem; align-items: flex-start; }
@media (max-width: 991px) { .rv-services { grid-template-columns: 1fr 1fr; } .rv-card__gap { padding-top: 3rem; } }
@media (max-width: 767px) { .rv-services { grid-template-columns: 1fr; } .rv-card__gap { padding-top: 2rem; } .rv-services__img { min-height: 18rem; } }

/* =========================================================
   Testimonial
   ========================================================= */
.rv-testimonial { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }
.rv-testimonial__card {
  background: var(--rv-blue);
  color: var(--rv-white);
  padding: 2.5rem;
  border-radius: var(--rv-radius);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 2rem;
  min-height: 30rem;
}
.rv-testimonial__card img { width: 1.5rem; height: 1.5rem; }
.rv-testimonial__quote { font-family: var(--rv-font-primary); font-size: 1.5rem; line-height: 1.4; letter-spacing: -0.02em; }
.rv-testimonial__quote.is-placeholder {
  font-family: var(--rv-font-secondary);
  font-size: 1rem;
  line-height: 1.6;
  padding: 1.25rem;
  border: 1px dashed rgba(255, 255, 255, 0.6);
  border-radius: var(--rv-radius);
  background: rgba(255, 255, 255, 0.08);
}
.rv-testimonial__quote.is-placeholder strong { display: block; font-size: 0.75rem; letter-spacing: 0.15em; text-transform: uppercase; margin-bottom: 0.5rem; }
.rv-testimonial__photo { position: relative; overflow: clip; border-radius: var(--rv-radius); min-height: 30rem; }
.rv-testimonial__photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 767px) { .rv-testimonial { grid-template-columns: 1fr; } .rv-testimonial__card, .rv-testimonial__photo { min-height: 22rem; } .rv-testimonial__card { padding: 1.5rem; } }

/* =========================================================
   Why Resource Visa
   ========================================================= */
.rv-list { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; width: 100%; }
.rv-list__item { display: flex; gap: 1rem; align-items: flex-start; }
.rv-list__item svg { width: 1.75rem; height: 1.75rem; flex: none; color: var(--rv-blue); }
@media (max-width: 991px) { .rv-list { grid-template-columns: 1fr; } }
@media (max-width: 767px) { .rv-why .rv-content { order: -1; } }

/* =========================================================
   Scenario selector (pill tabs + image panel)
   ========================================================= */
.rv-selector__head { text-align: center; max-width: 44rem; margin-inline: auto; }
.rv-accent { color: var(--rv-blue); }
.rv-pills { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.75rem; }
.rv-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  min-height: 2.75rem;
  padding: 0.5rem 1.1rem;
  border: 1px solid var(--rv-grey-200);
  border-radius: var(--rv-radius);
  background: var(--rv-white);
  color: var(--rv-grey);
  font-family: inherit;
  font-size: 0.9375rem;
  font-weight: 500;
  cursor: pointer;
  transition: background-color 0.2s, color 0.2s, border-color 0.2s;
}
.rv-pill svg { width: 1.1rem; height: 1.1rem; }
.rv-pill:hover { border-color: var(--rv-blue); color: var(--rv-navy); }
.rv-pill.is-active { background: var(--rv-blue); border-color: var(--rv-blue); color: var(--rv-white); }
.rv-scenarios { position: relative; }
.rv-scenario { display: none; grid-template-columns: 1.6fr 1fr; gap: 3rem; align-items: end; }
.rv-scenario.is-active { display: grid; }
.rv-scenario__img { position: relative; width: 100%; padding-top: 58.8%; border-radius: var(--rv-radius); overflow: clip; }
.rv-scenario__img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.rv-scenario__body { padding-bottom: 0.5rem; }
.rv-scenario__body h3 { font-size: 1.75rem; line-height: 1.2; letter-spacing: -0.03em; }
@media (max-width: 991px) { .rv-scenario { grid-template-columns: 1fr; gap: 1.5rem; align-items: start; } }
@media (max-width: 479px) { .rv-pill { flex: 1 1 calc(50% - 0.375rem); justify-content: center; } }

/* =========================================================
   Insights
   ========================================================= */
.rv-posts { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 0; }
.rv-post { padding-right: 0.75rem; display: flex; flex-direction: column; }
/* The three cards carry different title and description lengths, so the link
   landed wherever each card's copy happened to end. Stretch the card and push
   the link to the bottom so all three sit on one baseline. */
.rv-post > a { display: flex; flex-direction: column; flex: 1 1 auto; }
.rv-post__body { display: flex; flex-direction: column; flex: 1 1 auto; }
.rv-post__body .rv-more { margin-top: auto; align-self: flex-start; }
.rv-post__thumb { position: relative; width: 100%; padding-top: 91%; overflow: clip; border-radius: var(--rv-radius); }
.rv-post__thumb img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s var(--rv-ease); }
.rv-post:hover .rv-post__thumb img { transform: scale(1.08); }
.rv-post__body { padding: 0.5rem; }
.rv-badges { display: flex; gap: 0.5rem; align-items: center; }
.rv-badge { padding: 0.25rem 0.5rem; border-radius: var(--rv-radius); background: var(--rv-beige-100); font-size: 0.875rem; }
@media (max-width: 991px) { .rv-posts { grid-template-columns: 1fr 1fr; gap: 0.75rem; } .rv-post { padding-right: 0; } }
@media (max-width: 767px) { .rv-posts { grid-template-columns: 1fr; gap: 2rem; } }

/* =========================================================
   Final CTA
   ========================================================= */
.rv-cta {
  color: var(--rv-white);
  background-image: linear-gradient(rgba(16, 28, 56, 0.35), rgba(16, 28, 56, 0.35)), var(--rv-cta-bg);
  background-position: 50% 100%;
  background-repeat: no-repeat;
  background-size: cover;
  background-attachment: fixed;
  padding-block: 6.69rem;
}
.rv-cta__card {
  max-width: 25rem;
  background: var(--rv-blue);
  padding: 1.5rem;
  border-radius: var(--rv-radius);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.rv-cta__card img { height: 1.75rem; width: auto; }
.rv-cta__gap { padding-top: 8rem; }
.rv-cta__detail { font-size: 0.8125rem; color: var(--rv-white-50); line-height: 1.5; }
@media (max-width: 991px) { .rv-cta { background-attachment: scroll; } .rv-cta__gap { padding-top: 3rem; } }
@media (max-width: 767px) { .rv-cta { padding: 16rem 0 2rem; } .rv-cta__card { max-width: none; } .rv-cta__gap { padding-top: 2rem; } }

/* =========================================================
   Footer
   ========================================================= */
.rv-footer { background: var(--rv-navy); color: var(--rv-white-50); padding-block: 3.25rem; }
.rv-footer__grid { display: grid; grid-template-columns: 1fr 1.4fr; gap: 3rem; }
.rv-footer__brand { display: flex; flex-direction: column; justify-content: space-between; gap: 2rem; max-width: 23.5rem; }
.rv-footer__brand img { height: 2rem; width: auto; }
.rv-footer__contact { display: flex; flex-direction: column; gap: 0.35rem; }
.rv-footer__contact a { color: var(--rv-white); font-weight: 600; }
.rv-footer__cols { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem 1.5rem; }
.rv-footer__colhead { color: var(--rv-white); font-size: 0.75rem; letter-spacing: 0.15em; text-transform: uppercase; font-weight: 600; margin-bottom: 0.75rem; }
.rv-footer__cols a { display: block; padding: 0.35rem 0; font-size: 0.9375rem; color: var(--rv-white-50); transition: color 0.2s; }
.rv-footer__cols a:hover { color: var(--rv-white); }
.rv-footer__rule { height: 1px; background: var(--rv-white-25); width: 100%; }
.rv-footer__meta { display: flex; justify-content: space-between; align-items: center; gap: 2rem; font-size: 0.875rem; }
.rv-footer__meta-links { display: flex; gap: 2rem; }
.rv-footer__meta a:hover { color: var(--rv-white); }
.rv-footer__wordmark {
  font-family: var(--rv-font-primary);
  font-size: clamp(3rem, 12.5vw, 11.5rem);
  line-height: 0.95;
  letter-spacing: -0.05em;
  color: var(--rv-white);
  white-space: nowrap;
  opacity: 0.95;
}
@media (max-width: 991px) { .rv-footer__grid { grid-template-columns: 1fr; } .rv-footer__cols { grid-template-columns: 1fr 1fr; } }
@media (max-width: 767px) { .rv-footer { padding-block: 2rem; } .rv-footer__brand { max-width: none; } }
@media (max-width: 479px) { .rv-footer__meta { flex-direction: column; } }

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .rv-page *, .rv-page *::before, .rv-page *::after { transition: none !important; animation: none !important; }
  .rv-cta { background-attachment: scroll; }
}

/* =========================================================
   Elementor bridge
   Elementor puts a widget's custom classes on the WRAPPER, not on the element
   that actually renders, so rv- components need one hop to reach it. Button
   appearance is inherited from the .rv-btn rules above (selectors extended,
   declarations never duplicated); everything below resets Elementor chrome.
   ========================================================= */
.rv-page .rv-el-btn .elementor-button-content-wrapper { display: contents; }
.rv-page .rv-el-btn .elementor-button-text { font: inherit; color: inherit; }
.rv-page .rv-el-btn .elementor-widget-container { display: inline-flex; }

.rv-page .elementor-widget-text-editor p:last-child { margin-bottom: 0; }

/* Tick lists rendered by Elementor's icon-list widget. */
.rv-page .rv-list .elementor-icon-list-items { display: grid; gap: 0.875rem; }
.rv-page .rv-list .elementor-icon-list-item { display: flex; align-items: flex-start; gap: 0.75rem; }
.rv-page .rv-list .elementor-icon-list-icon { margin-top: 0.3rem; }
.rv-page .rv-list .elementor-icon-list-text { font-family: var(--rv-font-secondary); color: var(--rv-black); line-height: 1.5; }

/* FAQ accordion. */
.rv-page .rv-accordion .elementor-accordion-item { border: 0; border-top: 1px solid var(--rv-grey-100); }
.rv-page .rv-accordion .elementor-accordion-item:last-child { border-bottom: 1px solid var(--rv-grey-100); }
.rv-page .rv-accordion .elementor-tab-title { padding: 1.5rem 0; font-family: var(--rv-font-primary); font-size: 1.25rem; letter-spacing: -0.02em; color: var(--rv-navy); background: none; }
.rv-page .rv-accordion .elementor-tab-content { padding: 0 0 1.5rem; border: 0; color: var(--rv-grey); }

/* =========================================================
   Header fit (measured 2026-09-22)
   At 1512px the bar is 1232px wide and its children needed 1290px, so the
   phone + Contact button overflowed the container by 57px. Fixed above by
   letting .rv-nav shrink and tightening the spacing; these tiers stop the
   same overflow recurring at narrower widths.
   ========================================================= */

/* The phone leaves the header bar at every width: with the header aligned to the
   1176px page container the bar is 1096px, and logo + nav + phone + CTA needs
   1183px. It stays in the footer and in the open mobile menu.
   Scope this to __utility, NOT .rv-header, or it also hides the phone inside
   .rv-nav__mobile-cta, which lives inside the header. */
.rv-header__utility .rv-phone { display: none; }

/* Below the burger breakpoint the Contact CTA stays, so the primary action
   survives on tablet. It only drops on true phone widths, where it is in
   the menu instead. */
@media (max-width: 767px) {
  .rv-header__utility .rv-btn { display: none; }
  .rv-logo img { height: 1.75rem; }
}

/* Elementor two-column rows.
   Flex items default to min-width:auto, so a column whose content is wider than
   its percentage share pushes the row over 100% and the second column wraps
   underneath. min-width:0 lets them shrink instead, which is what keeps images
   beside their text rather than below it. */
.rv-page .rv-el-row > .e-con { min-width: 0; }
.rv-page .rv-el-row > .e-con > .e-con-inner { min-width: 0; }

/* Large imagery inside Elementor cards: fill the column, keep a stable ratio so
   nothing shifts while the image loads. */
.rv-page .rv-el-media img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: var(--rv-radius);
}
.rv-page .rv-el-media-4x3 img { aspect-ratio: 4 / 3; object-fit: cover; }
.rv-page .rv-el-media-3x2 img { aspect-ratio: 3 / 2; object-fit: cover; }
.rv-page .rv-el-media-4x5 img { aspect-ratio: 4 / 5; object-fit: cover; }

/* Scenario cards. */
.rv-page .rv-el-card {
  background: var(--rv-white);
  border: 1px solid var(--rv-grey-100);
  border-radius: var(--rv-radius);
  overflow: clip;
  transition: border-color 0.2s, transform 0.35s var(--rv-ease);
}
.rv-page .rv-el-card:hover { border-color: var(--rv-blue-line); }
.rv-page .rv-el-card .elementor-widget-image { margin-bottom: 0; }

/* =========================================================
   Page-level fixes (2026-09-22 review)
   ========================================================= */

/* Headline scale for Elementor-built pages. The 56px h2 forced "Decision-ready
   in 48 hours." onto two lines and orphaned "400." onto a third. One size for
   every h2 on the page, stepped down per breakpoint. h1 stays larger so the
   hero keeps its hierarchy. */
/* 2026-09-25: removed. Internal pages ran a 44px H2 against the homepage's
   56px, which made every inner page read as a smaller, older version of the
   site. RV-MASTER-BRIEF.md §1 locks H1 and H2 at 56px; the root tokens step
   them down to 48 / 40 per breakpoint. */

/* Tick lists. The theme's .rv-list is a two-column grid meant for the homepage,
   which squeezed these into a 295px column so every item wrapped early. These
   run the full width of their column and start on the same left edge as the
   paragraph above them. */
.rv-page .rv-el-ticks { width: 100%; }
.rv-page .rv-el-ticks .elementor-icon-list-items { display: grid; grid-template-columns: 1fr; gap: 0.875rem; width: 100%; }
.rv-page .rv-el-ticks .elementor-icon-list-item { display: grid; grid-template-columns: 1.75rem 1fr; align-items: start; gap: 0.75rem; width: 100%; }
.rv-page .rv-el-ticks .elementor-icon-list-icon { margin: 0; padding-top: 0.2rem; }
.rv-page .rv-el-ticks .elementor-icon-list-text { padding: 0; font-family: var(--rv-font-secondary); color: var(--rv-black); line-height: 1.5; }

/* Sections that sit on a dark image or navy fill. Headings inherit .rv-page's
   ink colour otherwise, which put black type over a photograph. */
.rv-page .rv-el-ondark h1,
.rv-page .rv-el-ondark h2,
.rv-page .rv-el-ondark h3 { color: var(--rv-white); }
.rv-page .rv-el-ondark p { color: rgba(255, 255, 255, 0.88); }
.rv-page .rv-el-ondark .rv-tag { color: var(--rv-white); }
.rv-page .rv-el-ondark .rv-el-btn.is-secondary .elementor-button {
  color: var(--rv-white);
  border-color: rgba(255, 255, 255, 0.55);
  background: transparent;
}
.rv-page .rv-el-ondark .rv-el-btn.is-secondary .elementor-button:hover {
  border-color: var(--rv-white);
  background: rgba(255, 255, 255, 0.14);
}

/* Footer contrast. Body and links were rgba(255,255,255,0.6) on navy, which
   composites to about 4.4:1 and fails AA for small text. */
.rv-footer { color: rgba(255, 255, 255, 0.92); }
.rv-footer__cols a,
.rv-footer__meta,
.rv-footer__meta a { color: rgba(255, 255, 255, 0.92); }
.rv-footer__cols a:hover,
.rv-footer__meta a:hover { color: var(--rv-white); }

/* =========================================================
   Build components (brief §0.9)
   One implementation each, used by every page, so the set reads as one system.
   ========================================================= */

/* Measured reading column. Long-form prose at full container width is unreadable. */
.rv-page .rv-el-prose { max-width: 46rem; }
.rv-page .rv-el-prose p { max-width: 42rem; }

/* C-PROCESS-4 */
.rv-page .rv-el-step { position: relative; padding-top: 1.5rem; border-top: 2px solid var(--rv-navy); }
.rv-page .rv-el-steps { align-items: stretch; }

/* C-DISQUALIFY. The trust device. Deliberately not buried: left rule in brand
   blue, tinted ground, so it reads as a deliberate aside rather than body copy. */
.rv-page .rv-el-disqualify {
  background: var(--rv-blue-soft);
  border-left: 3px solid var(--rv-blue);
  border-radius: var(--rv-radius);
}
.rv-page .rv-el-disqualify p { color: var(--rv-navy-700); max-width: 46rem; }

/* C-RELATED */
.rv-page .rv-el-related { background: var(--rv-white); }

/* Tables must be real tables so the text is crawlable (brief build note). */
.rv-page .rv-el-table { width: 100%; border-collapse: collapse; font-family: var(--rv-font-secondary); font-size: 0.9375rem; }
.rv-page .rv-el-table th {
  text-align: left; padding: 0.875rem 1rem; background: var(--rv-navy); color: var(--rv-white);
  font-weight: 600; font-size: 0.8125rem; letter-spacing: 0.06em; text-transform: uppercase;
}
.rv-page .rv-el-table td { padding: 0.875rem 1rem; border-bottom: 1px solid var(--rv-grey-100); color: var(--rv-grey); vertical-align: top; }
.rv-page .rv-el-table tr:last-child td { border-bottom: 0; }
.rv-page .rv-el-table tbody tr:nth-child(odd) { background: var(--rv-beige); }

/* Ordered lists */
.rv-page .rv-el-ol { counter-reset: rvol; display: grid; gap: 0.875rem; max-width: 42rem; }
.rv-page .rv-el-ol li { counter-increment: rvol; display: grid; grid-template-columns: 1.75rem 1fr; gap: 0.75rem; color: var(--rv-grey); line-height: 1.5; }
.rv-page .rv-el-ol li::before { content: counter(rvol); font-family: var(--rv-font-primary); color: var(--rv-blue); font-size: 1.125rem; line-height: 1.35; }

/* AWST hours line under a CTA */
.rv-page .rv-el-hours p { font-size: 0.875rem; color: rgba(255,255,255,0.72); }

/* Staging-only marker for facts only the client can supply (brief §0.6).
   Never filled with an invented figure; removed before publish. */
.rv-page .rv-el-clientinput {
  display: inline-block; padding: 0.5rem 0.875rem; border: 1px dashed var(--rv-grey-250);
  border-radius: var(--rv-radius); background: var(--rv-beige-100);
  font-size: 0.8125rem; letter-spacing: 0.04em; text-transform: uppercase; color: var(--rv-grey);
}

/* Breadcrumbs */
.rv-page .rv-crumbs { font-size: 0.875rem; color: var(--rv-grey); display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; }
.rv-page .rv-crumbs a { color: var(--rv-grey); }
.rv-page .rv-crumbs a:hover { color: var(--rv-blue); }
.rv-page .rv-crumbs span[aria-current] { color: var(--rv-black); }

@media (max-width: 767px) {
  .rv-page .rv-el-table { font-size: 0.875rem; }
  .rv-page .rv-el-table th, .rv-page .rv-el-table td { padding: 0.625rem 0.75rem; }
  .rv-page .rv-el-disqualify { padding: 1.5rem !important; }
}

/* Footer, brief §0.8. Four columns; "Who We Move" carries all ten roles and all
   six sectors, so it needs a second heading and tighter leading than the rest. */
.rv-page .rv-footer__colhead.is-second { margin-top: 1.5rem; }
.rv-footer__cols { grid-template-columns: repeat(4, 1fr); gap: 0.25rem 1.5rem; align-items: start; }
.rv-footer__cols a { font-size: 0.875rem; line-height: 1.35; padding: 0.3rem 0; }
.rv-footer__legal p {
  font-size: 0.8125rem;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.78);
  max-width: 62rem;
}
.rv-footer__legal a { color: var(--rv-white); text-decoration: underline; }
@media (max-width: 991px) {
  .rv-footer__cols { grid-template-columns: 1fr 1fr; gap: 0.25rem 1.5rem; }
}
@media (max-width: 560px) {
  .rv-footer__cols { grid-template-columns: 1fr; }
  .rv-footer__colhead.is-second { margin-top: 1.25rem; }
}

/* Inline CTAs written into the brief copy as "[Button: Label] -> /url". */
.rv-page .rv-el-inline-cta {
  display: inline-flex; align-items: center; min-height: 2.5rem;
  padding: 0.4rem 1.125rem; border-radius: var(--rv-radius);
  background: var(--rv-navy); color: var(--rv-white);
  border: 1px solid var(--rv-navy);
  font-family: var(--rv-font-secondary); font-size: 0.9375rem; font-weight: 500;
  transition: transform 0.35s var(--rv-ease), background-color 0.2s;
}
.rv-page .rv-el-inline-cta:hover { background: var(--rv-blue-600); border-color: var(--rv-blue-600); transform: scale(0.98); }
.rv-page .rv-el-prose a:not(.rv-el-inline-cta) { color: var(--rv-blue); text-decoration: underline; text-underline-offset: 0.2em; }
.rv-page .rv-el-prose a:not(.rv-el-inline-cta):hover { color: var(--rv-navy); }

/* =========================================================
   D1 - vertical rhythm owned by CSS, not spacer widgets
   Measured gaps on /about/ were 51,0,51,0,0,0,51px because zero-height spacer
   widgets were carrying the spacing. The prose column owns its own flow now.
   ========================================================= */
.rv-page .rv-el-prose > .elementor-widget { margin-bottom: 0; }
.rv-page .rv-el-prose > .elementor-widget + .elementor-widget { margin-top: 1.25rem; }

/* space BEFORE a heading is what creates section rhythm */
.rv-page .rv-el-prose > .elementor-widget-heading + .elementor-widget { margin-top: 1.25rem; }
.rv-page .rv-el-prose > .elementor-widget + .elementor-widget-heading { margin-top: 3.5rem; }
.rv-page .rv-el-prose > .elementor-widget + .elementor-widget-heading:has(h3) { margin-top: 2.25rem; }
.rv-page .rv-el-prose > .elementor-widget + .elementor-widget-icon-list,
.rv-page .rv-el-prose > .elementor-widget-icon-list + .elementor-widget { margin-top: 1.75rem; }
.rv-page .rv-el-prose > .elementor-widget:first-child { margin-top: 0; }

@media (max-width: 767px) {
  .rv-page .rv-el-prose > .elementor-widget + .elementor-widget-heading { margin-top: 2.5rem; }
  .rv-page .rv-el-prose > .elementor-widget + .elementor-widget { margin-top: 1rem; }
}

/* =========================================================
   D3 - the standard content section: framed image + content,
   lifted from the homepage's why.php / authority.php pattern
   ========================================================= */
.rv-page .rv-el-feature__media img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  border-radius: var(--rv-radius);
  aspect-ratio: 3 / 2;
}
.rv-page .rv-el-feature__body > .elementor-widget + .elementor-widget { margin-top: 1.25rem; }
.rv-page .rv-el-feature__body > .elementor-widget-heading + .elementor-widget { margin-top: 1.25rem; }
.rv-page .rv-el-feature__body p { max-width: 34rem; }

/* D6 - section padding steps down across breakpoints */
@media (max-width: 991px) {
  .rv-page .rv-el-feature__media img { aspect-ratio: 16 / 9; }
}
@media (max-width: 767px) {
  .rv-page .rv-el-feature__media img { aspect-ratio: 4 / 3; }
  .rv-page .rv-el-feature__body p { max-width: none; }
}

/* =========================================================
   D7 - the full-bleed hero band holds its height on small screens
   A 2400x876 band at 390px wide renders 142px tall, which reads as a strip
   rather than a hero image. Aspect ratio is enforced per breakpoint and the
   art direction is preserved with object-position.
   ========================================================= */
.rv-page .rv-el-herostrip img {
  width: 100%;
  display: block;
  aspect-ratio: 24 / 9;
  object-fit: cover;
  object-position: center 40%;
}
@media (max-width: 991px) {
  .rv-page .rv-el-herostrip img { aspect-ratio: 16 / 9; }
}
@media (max-width: 767px) {
  .rv-page .rv-el-herostrip img { aspect-ratio: 3 / 2; }
}

/* D7b - breathing room when a full-bleed band is followed immediately by a
   stacked section image, so two photographs never butt together on mobile. */
@media (max-width: 991px) {
  .rv-page .rv-el-herostrip + .e-con .rv-el-feature__media { margin-top: 1rem; }
  .rv-page .rv-el-herostrip + .e-con { padding-top: 4rem !important; }
}

/* =========================================================
   D8 - tall variant of the content section
   When the content column carries several sub-headings, a 3:2 image leaves a
   short picture beside a long column. The tall variant stretches the media to
   the row height so both sides finish together.
   ========================================================= */
.rv-page .rv-el-feature.is-tall { align-items: stretch; }
.rv-page .rv-el-feature.is-tall > .e-con { align-self: stretch; }
/* height:100% resolves against a parent with no definite height, so it fell
   back to auto and the image was sized by its min-height alone, sitting well
   short of the copy beside it. Each level flexes instead. */
.rv-page .rv-el-feature.is-tall .rv-el-feature__media,
.rv-page .rv-el-feature.is-tall .rv-el-feature__media > .e-con-inner,
.rv-page .rv-el-feature.is-tall .rv-el-feature__media .elementor-widget-image,
.rv-page .rv-el-feature.is-tall .rv-el-feature__media .elementor-widget-container {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  min-height: 0;
  height: auto;
}
.rv-page .rv-el-feature.is-tall .rv-el-feature__media { align-self: stretch; }
.rv-page .rv-el-feature.is-tall .rv-el-feature__media img {
  flex: 1 1 auto;
  height: 100%;
  width: 100%;
  min-height: 22rem;
  aspect-ratio: auto;
  object-fit: cover;
  object-position: center;
}
/* sub-headings inside a content column need air above them, not beside them */
.rv-page .rv-el-feature__body .elementor-widget + .elementor-widget-heading:has(h3) { margin-top: 2rem; }

@media (max-width: 991px) {
  .rv-page .rv-el-feature.is-tall { align-items: flex-start; }
  .rv-page .rv-el-feature.is-tall .rv-el-feature__media img {
    flex: 0 0 auto;
    min-height: 0;
    aspect-ratio: 16 / 9;
  }
}
@media (max-width: 767px) {
  .rv-page .rv-el-feature.is-tall .rv-el-feature__media img { aspect-ratio: 4 / 3; }
}

/* =========================================================
   D10 - a button row following body copy gets real clearance
   The prose rhythm rules target .elementor-widget siblings, but a button row is
   an .e-con container, so it inherited zero margin and sat on the paragraph
   above it. Containers need the same treatment as widgets.
   ========================================================= */
.rv-page .rv-el-prose > .elementor-widget + .e-con,
.rv-page .rv-el-feature__body > .elementor-widget + .e-con,
.rv-page .rv-el-prose > .e-con + .elementor-widget,
.rv-page .rv-el-feature__body > .e-con + .elementor-widget { margin-top: 2.5rem; }

.rv-page .rv-el-prose > .e-con + .e-con,
.rv-page .rv-el-feature__body > .e-con + .e-con { margin-top: 1rem; }

@media (max-width: 767px) {
  .rv-page .rv-el-prose > .elementor-widget + .e-con,
  .rv-page .rv-el-feature__body > .elementor-widget + .e-con { margin-top: 2rem; }
}

/* D11 - on dark sections the blue primary would fight the navy scrim, so the
   white variant keeps its inverse and animates to brand blue instead. */
.rv-page .rv-el-ondark .rv-el-btn.is-white .elementor-button:hover {
  background: var(--rv-blue);
  border-color: var(--rv-blue);
  color: var(--rv-white);
}

@media (prefers-reduced-motion: reduce) {
  .rv-btn, .rv-page .rv-el-btn .elementor-button { transition: background-color 0.01ms, color 0.01ms; }
  .rv-btn:hover, .rv-page .rv-el-btn .elementor-button:hover { transform: none; }
}

/* =========================================================
   D13 - the CTA band owns its rhythm too
   Measured every gap inside the band at 0px: heading, paragraph, buttons and
   the hours line were all flush. The band was still relying on the zero-height
   spacer widgets D1 removed elsewhere, and the D1/D10 rules only covered
   .rv-el-prose and .rv-el-feature__body.
   ========================================================= */
.rv-page .rv-el-ondark > .elementor-widget + .elementor-widget,
.rv-page .rv-el-ondark > .elementor-widget + .e-con,
.rv-page .rv-el-ondark > .e-con + .elementor-widget { margin-top: 1.5rem; }

/* the action row is the moment of the band, so it gets more air than the rest */
.rv-page .rv-el-ondark > .elementor-widget-text-editor + .e-con { margin-top: 2.5rem; }
/* the hours line belongs to the buttons above it, so it sits closer */
.rv-page .rv-el-ondark > .e-con + .elementor-widget-text-editor { margin-top: 1.25rem; }
.rv-page .rv-el-ondark > .elementor-widget-heading + .elementor-widget { margin-top: 1.25rem; }

@media (max-width: 767px) {
  .rv-page .rv-el-ondark > .elementor-widget-text-editor + .e-con { margin-top: 2rem; }
  .rv-page .rv-el-ondark > .elementor-widget + .elementor-widget { margin-top: 1.25rem; }
}

/* =========================================================
   D14 - footer column headings fit on one line
   Link columns were 147px while "Sponsorship & Compliance" needed about 216px,
   so it wrapped and knocked that column out of alignment with the other three.
   The brand column gives width back, and the heading tracking tightens.
   ========================================================= */
.rv-footer__grid { grid-template-columns: 0.85fr 2.15fr; gap: 2.5rem; }
.rv-footer__colhead {
  letter-spacing: 0.08em;
  font-size: 0.6875rem;
  white-space: nowrap;
}
@media (max-width: 991px) {
  .rv-footer__grid { grid-template-columns: 1fr; }
  .rv-footer__colhead { white-space: normal; }
}

/* =========================================================
   D16 - the hero band matches the homepage exactly
   Homepage measures 1512x706 at desktop and switches to a 55% padding-top box
   below 991px. Inner pages were running a 24/9 ratio, so the band read taller
   and the two pages did not line up.
   ========================================================= */
.rv-page .rv-el-herostrip img {
  aspect-ratio: auto;
  height: 44.13rem;
  object-fit: cover;
  object-position: center 40%;
}
@media (max-width: 991px) {
  .rv-page .rv-el-herostrip img { height: auto; aspect-ratio: 20 / 11; }
}
@media (max-width: 767px) {
  .rv-page .rv-el-herostrip img { aspect-ratio: 3 / 2; }
}

/* =========================================================
   D17 - related pages read as cards, not as three stacked buttons
   The old treatment repeated the page title inside a button under the title,
   which is the same word twice and a weak affordance. Card now carries an
   image, the title, one line, and an underlined "Visit page" link.
   ========================================================= */
.rv-page .rv-el-related {
  background: var(--rv-white);
  border: 1px solid var(--rv-grey-100);
  border-radius: var(--rv-radius);
  overflow: clip;
  padding: 0 !important;
  transition: border-color 0.25s var(--rv-ease), transform 0.35s var(--rv-ease);
}
.rv-page .rv-el-related:hover { border-color: var(--rv-blue-line); transform: translateY(-3px); }
.rv-page .rv-el-related .rv-el-media img { aspect-ratio: 3 / 2; object-fit: cover; border-radius: 0; }
.rv-page .rv-el-related__body { padding: 1.5rem 1.5rem 1.75rem; }
.rv-page .rv-el-related__body > .elementor-widget + .elementor-widget { margin-top: 0.75rem; }

.rv-page .rv-el-visit {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-family: var(--rv-font-secondary);
  font-size: 0.9375rem;
  font-weight: 500;
  color: var(--rv-navy);
  text-decoration: none;
  padding-bottom: 0.25rem;
  border-bottom: 1px solid var(--rv-navy);
  transition: color 0.25s var(--rv-ease), border-color 0.25s var(--rv-ease), gap 0.25s var(--rv-ease);
}
.rv-page .rv-el-visit::after { content: "\2192"; transition: transform 0.25s var(--rv-ease); }
.rv-page .rv-el-related:hover .rv-el-visit { color: var(--rv-blue); border-color: var(--rv-blue); }
.rv-page .rv-el-related:hover .rv-el-visit::after { transform: translateX(3px); }

/* =========================================================
   D18 - dead space. Sections were 96px top and bottom, and a 72% prose column
   left a 440px empty gutter beside every paragraph. Padding tightens and the
   editorial layouts fill the width instead of leaving it blank.
   ========================================================= */
.rv-page .rv-el-prose { max-width: 44rem; }

/* highlighted evidence blocks, used where a list of claims would otherwise run
   as four more paragraphs */
.rv-page .rv-el-point {
  background: var(--rv-white);
  border: 1px solid var(--rv-grey-100);
  border-left: 3px solid var(--rv-blue);
  border-radius: var(--rv-radius);
  padding: 1.5rem 1.625rem !important;
}
.rv-page .rv-el-point h3 { font-size: 1.125rem; line-height: 1.3; }
.rv-page .rv-el-point p { color: var(--rv-grey); }
.rv-page .rv-el-point > .elementor-widget + .elementor-widget { margin-top: 0.625rem; }

/* a two-column text block, for two short related sections side by side */
.rv-page .rv-el-twoup > .e-con { }
.rv-page .rv-el-twoup h2 { font-size: 2rem; }
@media (max-width: 767px) {
  .rv-page .rv-el-twoup h2 { font-size: 1.75rem; }
  .rv-page .rv-el-point { padding: 1.25rem 1.25rem !important; }
}

/* =========================================================
   Why Resource Visa, shared component (role brief section 3A)
   Image column left, content right, four check cards two by two. Identical
   wording on every page; only the image changes.
   ========================================================= */
.rv-page .rv-el-feature.is-tall.rv-el-why .rv-el-feature__media img { min-height: 30rem; }
/* Two by two. Percentage widths plus the flex gap overflowed the column by a
   few pixels and dropped every card onto its own row, so the grid owns the
   track sizing and the Elementor inline widths are neutralised. */
.rv-page .rv-el-whycards {
  margin-top: 0.5rem;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 2rem 1.75rem;
}
.rv-page .rv-el-whycards > .e-con,
.rv-page .rv-el-whycards > .elementor-element { width: auto; max-width: none; }
.rv-page .rv-el-whycard__head {
  display: grid;
  grid-template-columns: 1.75rem 1fr;
  gap: 0.75rem;
  align-items: start;
  font-family: var(--rv-font-primary);
  font-size: 1.1875rem;
  line-height: 1.25;
  letter-spacing: -0.02em;
  color: var(--rv-navy);
}
.rv-page .rv-el-whycard__head svg { width: 1.5rem; height: 1.5rem; color: var(--rv-blue); margin-top: 0.05rem; }
.rv-page .rv-el-whycard p { padding-left: 2.5rem; font-size: 0.9375rem; line-height: 1.55; }
.rv-page .rv-el-whycard > .elementor-widget + .elementor-widget { margin-top: 0.5rem; }
.rv-page .rv-el-why .rv-foot { margin-top: 0.5rem; }

/* Three occupations ship without a photograph clear of third-party branding.
   With no image column the body runs full width, so cap the prose and keep the
   four cards two-up rather than letting them stretch to the container. */
.rv-page .rv-el-why-noimg > .elementor-widget-heading,
.rv-page .rv-el-why-noimg > .elementor-widget-text-editor { max-width: 44rem; }
.rv-page .rv-el-why-noimg .rv-el-whycards { max-width: 62rem; }

@media (max-width: 991px) {
  /* Every Why photograph is portrait. Stacking it into a 16:9 band cropped a
     standing figure to a strip across the chest, so the stacked image goes
     square, which is close enough to the source to keep the subject whole. */
  .rv-page .rv-el-feature.is-tall.rv-el-why .rv-el-feature__media img {
    min-height: 0;
    aspect-ratio: 1 / 1;
  }
}
@media (max-width: 767px) {
  .rv-page .rv-el-feature.is-tall.rv-el-why .rv-el-feature__media img { aspect-ratio: 1 / 1; }
  .rv-page .rv-el-whycard p { padding-left: 0; }
  .rv-page .rv-el-whycards { grid-template-columns: minmax(0, 1fr); gap: 1.75rem; }
}

/* =========================================================
   Internal service pages, 2026-09-24 review.
   Grid owns the track sizing everywhere a row used percentage
   widths plus a pixel gap, because those rows overflow by one
   or two pixels and silently wrap.
   ========================================================= */

/* Body lists. The global reset at the top of this file strips markers from
   every ul so the brand components can draw their own. A plain list inside
   prose got nothing at all and rendered as bare lines with no indent. */
.rv-page .elementor-widget-text-editor ul,
.rv-page .rv-el-prose ul:not([class]) {
  display: grid;
  gap: 0.625rem;
  margin: 0;
  padding: 0;
}
.rv-page .elementor-widget-text-editor li,
.rv-page .rv-el-prose ul:not([class]) li {
  position: relative;
  padding-left: 1.6rem;
}
.rv-page .elementor-widget-text-editor li::before,
.rv-page .rv-el-prose ul:not([class]) li::before {
  content: "";
  position: absolute;
  left: 0.3rem;
  top: 0.66em;
  width: 0.375rem;
  height: 0.375rem;
  border-radius: 50%;
  background: var(--rv-blue);
}

/* Process steps: four across, two up on tablet, stacked on mobile. */
.rv-page .rv-el-steps {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 2.5rem 2rem;
}
.rv-page .rv-el-steps > .e-con,
.rv-page .rv-el-steps > .elementor-element { width: auto; max-width: none; }

/* Related cards: equal height, links on one baseline. */
.rv-page .rv-el-relatedgrid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1.75rem;
  align-items: stretch;
}
.rv-page .rv-el-relatedgrid > .e-con,
.rv-page .rv-el-relatedgrid > .elementor-element { width: auto; max-width: none; }
.rv-page .rv-el-relatedgrid > .e-con { display: flex; flex-direction: column; }
.rv-page .rv-el-related .rv-el-related__body { flex: 1 1 auto; }
.rv-page .rv-el-related .rv-el-related__body > .elementor-widget-html { margin-top: auto; }

/* The honest section. It owns its rhythm; no spacer widgets. */
.rv-page .rv-el-disqualify .elementor-widget + .elementor-widget { margin-top: 1.25rem; }
.rv-page .rv-el-disqualify .rv-el-row > .e-con > .elementor-widget:first-child { margin-top: 0; }
.rv-page .rv-el-disqualify p { max-width: 42rem; }
.rv-page .rv-el-disqualify h2 { position: sticky; top: 7rem; }
@media (max-width: 991px) {
  .rv-page .rv-el-disqualify h2 { position: static; }
}
.rv-page .rv-el-readnext {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 2rem;
  max-width: none;
}
.rv-page .rv-el-readnext a {
  color: var(--rv-blue);
  text-decoration: underline;
  text-underline-offset: 0.2em;
  font-weight: 500;
}
.rv-page .rv-el-readnext a:hover { color: var(--rv-navy); }
.rv-page .rv-el-readnext a::after { content: " \2192"; text-decoration: none; }

/* Two-column body list, for lists that would otherwise run down one side of
   a wide section leaving the other half empty. */
.rv-page .rv-el-cols2 .elementor-icon-list-items,
.rv-page .rv-el-cols2 ul {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1.5rem 2.5rem;
  align-items: start;
}
/* Grid rows stretch by default and the list item centres its own contents, so
   a three line item beside a two line one pushed both out of alignment. */
.rv-page .rv-el-cols2 .elementor-icon-list-item,
.rv-page .rv-el-cols3 .elementor-icon-list-item {
  align-items: flex-start;
}
/* Elementor's icon list puts margin-top on every item except the first, to
   space a single column. In a grid that margin lands on the first item of the
   second column and pushes it below its neighbour by the space-between value.
   The grid gap does the spacing instead, so the widget margin is removed. It
   needs !important because the widget's own generated rule is id-scoped. */
.rv-page .rv-el-cols2 .elementor-icon-list-item,
.rv-page .rv-el-cols3 .elementor-icon-list-item {
  margin-top: 0 !important;
  margin-bottom: 0 !important;
}
.rv-page .rv-el-cols2 .elementor-icon-list-icon,
.rv-page .rv-el-cols3 .elementor-icon-list-icon { margin-top: 0.2em; }

/* Facts panel beside the answer paragraph. */
.rv-page .rv-el-facts {
  border: 1px solid var(--rv-line, rgba(31,53,100,0.14));
  border-radius: 14px;
  background: #fff;
}
.rv-page .rv-el-fact + .rv-el-fact { border-top: 1px solid rgba(31,53,100,0.12); }
.rv-page .rv-el-fact__k {
  font-family: var(--rv-font-primary);
  font-size: 2rem;
  line-height: 1.05;
  color: var(--rv-navy);
  letter-spacing: -0.02em;
}
.rv-page .rv-el-fact__v { color: var(--rv-grey); font-size: 0.9375rem; line-height: 1.5; }

/* Highlight panel for a single important change or caveat. */
.rv-page .rv-el-note {
  border-left: 3px solid var(--rv-blue);
  background: var(--rv-beige-100, #f4f3ef);
  border-radius: 0 14px 14px 0;
}
.rv-page .rv-el-note > .elementor-widget + .elementor-widget { margin-top: 1.125rem; }
.rv-page .rv-el-note p { max-width: 46rem; }

.rv-page .rv-el-cols3 .elementor-icon-list-items,
.rv-page .rv-el-cols3 ul {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1.5rem 2.5rem;
  align-items: start;
}

@media (max-width: 991px) {
  .rv-page .rv-el-cols3 .elementor-icon-list-items,
  .rv-page .rv-el-cols3 ul { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rv-page .rv-el-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rv-page .rv-el-relatedgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 767px) {
  .rv-page .rv-el-steps,
  .rv-page .rv-el-relatedgrid { grid-template-columns: minmax(0, 1fr); gap: 1.75rem; }
  .rv-page .rv-el-cols2 .elementor-icon-list-items,
  .rv-page .rv-el-cols2 ul,
  .rv-page .rv-el-cols3 .elementor-icon-list-items,
  .rv-page .rv-el-cols3 ul { grid-template-columns: minmax(0, 1fr); }
  .rv-page .rv-el-readnext { gap: 0.75rem; flex-direction: column; }
}

/* Retell assistant widget. It renders into a shadow root, so its interior is
   styled through the data-theme-color / data-component-color attributes in
   functions.php, not from here. Only the host is reachable. */
@media print {
  #retell-widget-root { display: none !important; }
}


/* =========================================================
   Final UX pass, 2026-09-25 (D28-D35)
   Brings every internal page onto the homepage's measured system and adds the
   components the section composer (build-scripts/rv_compose.py) emits.
   ========================================================= */

/* D28 - card and panel titles. `.rv-page h3` (0,1,1) outranked every class
   put on an Elementor heading wrapper, so card titles rendered at 36px and ran
   to three and four lines. Scoped rules below win on specificity. The homepage
   insight cards had the same fault: their markup asks for .rv-xl (20px). */
.rv-page .rv-post h3.rv-xl { font-size: 1.25rem; line-height: 1.4; letter-spacing: -0.02em; }

/* D29 - editorial header, brief 2A. 392px mini-headline, 784px headline and
   copy, no gap. Grid, not percentages, so the columns cannot wrap (D25). */
.rv-page .rv-el-edhead {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
  gap: 0;
  align-items: start;
}
.rv-page .rv-el-edhead > .e-con { width: auto !important; max-width: none; min-width: 0; }
.rv-page .rv-el-edhead__tag .rv-tag { padding-top: 0.35rem; padding-right: 1.5rem; }
.rv-page .rv-el-edhead__body p,
.rv-page .rv-el-edhead__body .elementor-accordion { max-width: 41rem; }
.rv-page .rv-el-edhead__body .rv-el-cols2 .elementor-icon-list-items { max-width: none; }
.rv-page .rv-el-edhead__body .elementor-accordion { max-width: none; }
@media (max-width: 767px) {
  .rv-page .rv-el-edhead { grid-template-columns: minmax(0, 1fr); gap: 1rem; }
  .rv-page .rv-el-edhead__tag .rv-tag { padding-top: 0; }
}

/* Vertical rhythm for any composed column (D1 scale, D10 clearances). Covers
   widgets and containers alike, per the D13 standing instruction. */
.rv-page .rv-el-flow > .elementor-widget,
.rv-page .rv-el-flow > .e-con { margin-top: 0; margin-bottom: 0; }
.rv-page .rv-el-flow > .elementor-widget + .elementor-widget,
.rv-page .rv-el-flow > .elementor-widget + .e-con,
.rv-page .rv-el-flow > .e-con + .elementor-widget { margin-top: 1.25rem; }
.rv-page .rv-el-flow > .elementor-widget-heading + .elementor-widget { margin-top: 1.25rem; }
.rv-page .rv-el-flow > .elementor-widget-text-editor.rv-tag + .elementor-widget-heading { margin-top: 1rem; }
.rv-page .rv-el-flow > .elementor-widget + .elementor-widget-heading:has(h3) { margin-top: 2rem; }
.rv-page .rv-el-flow > .elementor-widget + .elementor-widget-icon-list,
.rv-page .rv-el-flow > .elementor-widget + .e-con.rv-el-cols2,
.rv-page .rv-el-flow > .elementor-widget + .elementor-widget-html { margin-top: 1.75rem; }
.rv-page .rv-el-flow > .elementor-widget + .e-con.rv-btn-row { margin-top: 2.5rem; }
.rv-page .rv-el-flow .rv-el-row > .e-con > .elementor-widget + .elementor-widget { margin-top: 1.25rem; }
.rv-page .rv-el-flow .rv-el-row > .e-con > .rv-tag + .elementor-widget-heading { margin-top: 1rem; }
@media (max-width: 767px) {
  .rv-page .rv-el-flow > .elementor-widget + .elementor-widget { margin-top: 1rem; }
  .rv-page .rv-el-flow > .elementor-widget + .e-con.rv-btn-row { margin-top: 2rem; }
}
.rv-page .rv-el-subhead h3 { font-size: 1.5rem; line-height: 1.3; letter-spacing: -0.02em; color: var(--rv-black); }

/* Content under an editorial header: the homepage's 4rem (rv-sp-section). */
.rv-page .rv-el-below { margin-top: 4rem; }
@media (max-width: 991px) { .rv-page .rv-el-below { margin-top: 3rem; } }
@media (max-width: 767px) { .rv-page .rv-el-below { margin-top: 2rem; } }

/* D30 - cards, brief 2E. Equal height in a set, CTA on one baseline, title
   20px Lora like the homepage's service cards and never more than two lines. */
.rv-page .rv-el-cardgrid { display: grid; gap: 1.75rem; align-items: stretch; }
.rv-page .rv-el-cardgrid.cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.rv-page .rv-el-cardgrid.cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.rv-page .rv-el-cardgrid.cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1.25rem; }
.rv-page .rv-el-cardgrid > .e-con { width: auto !important; max-width: none; min-width: 0; }
.rv-page .rv-el-card2 {
  display: flex;
  flex-direction: column;
  background: var(--rv-white);
  border: 1px solid var(--rv-grey-100);
  border-radius: var(--rv-radius);
  overflow: clip;
  transition: border-color 0.25s var(--rv-ease), transform 0.35s var(--rv-ease);
}
.rv-page .rv-el-card2.is-link:hover { border-color: var(--rv-blue-line); transform: translateY(-3px); }
.rv-page .rv-el-card2 .rv-el-card2__media img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; border-radius: 0; display: block; }
/* flex-grow and the link's auto margin need !important: Elementor writes
   --flex-grow and widget margins in id-scoped rules that outrank a class. */
.rv-page .rv-el-card2__body { flex: 1 1 auto !important; padding: 1.75rem 1.75rem 2rem; }
.rv-page .rv-el-card2:not(.has-media) .rv-el-card2__body { border-top: 2px solid var(--rv-navy); }
.rv-page .rv-el-card2 h3 {
  font-size: 1.25rem;
  line-height: 1.4;
  letter-spacing: -0.02em;
  color: var(--rv-black);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.rv-page .rv-el-card2__body > .elementor-widget + .elementor-widget { margin-top: 0.75rem; }
.rv-page .rv-el-card2__body p + p { margin-top: 0.75rem; }
.rv-page .rv-el-card2__body ul { margin-top: 0.75rem; }
.rv-page .rv-el-card2__body > .elementor-widget + .elementor-widget { margin-top: 0.75rem !important; }
.rv-page .rv-el-card2__body > .elementor-widget-html:last-child { margin-top: auto !important; padding-top: 1.25rem; }
.rv-page .rv-el-card2 a:not(.rv-el-visit) { color: var(--rv-blue); text-decoration: underline; text-underline-offset: 0.2em; }
.rv-page .rv-el-card2.is-link:hover .rv-el-visit { color: var(--rv-blue); border-color: var(--rv-blue); }
.rv-page .rv-el-card2.is-link:hover .rv-el-visit::after { transform: translateX(3px); }
.rv-page .rv-el-card2__body > .elementor-widget-html:last-child .elementor-widget-container { line-height: 1; }
@media (max-width: 991px) {
  .rv-page .rv-el-cardgrid.cols-3,
  .rv-page .rv-el-cardgrid.cols-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 767px) {
  .rv-page .rv-el-cardgrid.cols-2,
  .rv-page .rv-el-cardgrid.cols-3,
  .rv-page .rv-el-cardgrid.cols-4 { grid-template-columns: minmax(0, 1fr); gap: 1.25rem; }
  .rv-page .rv-el-card2__body { padding: 1.5rem; }
}

/* Process strip titles stay 36px (brief §3) but in a quarter track they must
   hold two lines; 30px at tablet where the tracks are half width anyway. */
.rv-page .rv-el-step > .elementor-widget + .elementor-widget { margin-top: 0.75rem; }
.rv-page .rv-el-step h3 { color: var(--rv-navy); }

/* D31 - the honest panel, brief §3. Heading 44px Lora navy, left column 394px,
   blue rule, argument right. */
.rv-page .rv-el-disqualify h2 { font-size: 2.75rem; line-height: 1.12; color: var(--rv-navy); }
@media (max-width: 991px) { .rv-page .rv-el-disqualify h2 { font-size: 2.25rem; } }
@media (max-width: 767px) { .rv-page .rv-el-disqualify h2 { font-size: 2rem; } }
.rv-page .rv-el-disqualify ul { display: grid; gap: 0.625rem; }
.rv-page .rv-el-disqualify li { position: relative; padding-left: 1.6rem; color: var(--rv-navy-700); }
.rv-page .rv-el-disqualify li::before {
  content: ""; position: absolute; left: 0.3rem; top: 0.66em;
  width: 0.375rem; height: 0.375rem; border-radius: 50%; background: var(--rv-blue);
}
.rv-page .rv-el-disqualify a { color: var(--rv-blue); text-decoration: underline; text-underline-offset: 0.2em; }

/* Callout panel, brief 2F: one caveat, blue rule, beside what it qualifies. */
.rv-page .rv-el-callout p {
  max-width: 41rem;
  padding: 1.25rem 1.5rem;
  background: var(--rv-blue-soft);
  border-left: 3px solid var(--rv-blue);
  border-radius: 0 var(--rv-radius) var(--rv-radius) 0;
  color: var(--rv-navy-700);
  font-weight: 500;
}

/* Read-next rows inside composed columns: one link per line (brief §3). */
.rv-page .rv-el-flow .rv-el-readnext { flex-direction: column; gap: 0.625rem; }
.rv-page .rv-el-flow .rv-el-readnext a { font-weight: 500; }

/* Prose links inside composed copy. */
.rv-page .rv-el-flow p a:not(.rv-el-inline-cta):not(.rv-el-visit),
.rv-page .rv-el-flow li a { color: var(--rv-blue); text-decoration: underline; text-underline-offset: 0.2em; }

/* Split rows: the portrait slot keeps a portrait-friendly minimum so a deep
   column does not squeeze the photograph into a strip. */
.rv-page .rv-el-split .rv-el-feature__body p { max-width: 36rem; }
.rv-page .rv-el-feature.is-tall .rv-el-feature__media.is-portrait img { min-height: 30rem; }
@media (max-width: 991px) {
  .rv-page .rv-el-feature.is-tall .rv-el-feature__media.is-portrait img { min-height: 0; aspect-ratio: 4 / 3; }
}

/* Tables: horizontally scrollable on phones instead of overflowing the page. */
.rv-page .rv-el-tablewrap { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid var(--rv-grey-100); border-radius: var(--rv-radius); background: var(--rv-white); }
.rv-page .rv-el-tablewrap .rv-el-table { min-width: 40rem; }
.rv-page .rv-el-table tbody th {
  background: transparent; text-transform: none; letter-spacing: -0.01em;
  text-align: left; vertical-align: top; padding: 0.875rem 1rem;
  font-family: var(--rv-font-primary); font-weight: 400; font-size: 1.0625rem;
  color: var(--rv-navy); border-bottom: 1px solid var(--rv-grey-100); white-space: nowrap;
}
.rv-page .rv-el-table tbody tr:last-child th { border-bottom: 0; }
.rv-page .rv-el-table td strong, .rv-page .rv-el-table th strong { font-weight: 600; }

/* Facts panel figures that are words rather than numbers. */
.rv-page .rv-el-facts .rv-el-fact__k p { margin: 0; }

/* D32 - contact page and the booking form (WPForms). */
.rv-page .rv-el-contact > .e-con:last-child {
  background: var(--rv-white);
  border: 1px solid var(--rv-grey-100);
  border-radius: var(--rv-radius);
  padding: 2.5rem !important;
}
.rv-page .rv-el-contactmeta p { color: var(--rv-grey); line-height: 1.7; }
.rv-page .rv-el-contactmeta a { color: var(--rv-blue); text-decoration: underline; text-underline-offset: 0.2em; }
.rv-page .rv-el-form .wpforms-container { margin: 0; }
.rv-page .rv-el-form .wpforms-field { padding: 0 0 1.25rem; }
.rv-page .rv-el-form .wpforms-field-label {
  font-family: var(--rv-font-secondary); font-size: 0.875rem; font-weight: 500;
  color: var(--rv-black); margin-bottom: 0.4rem;
}
.rv-page .rv-el-form input[type=text],
.rv-page .rv-el-form input[type=email],
.rv-page .rv-el-form input[type=tel],
.rv-page .rv-el-form select,
.rv-page .rv-el-form textarea {
  width: 100% !important; max-width: none !important;
  min-height: 3rem; padding: 0.625rem 0.875rem;
  font-family: var(--rv-font-secondary); font-size: 1rem; color: var(--rv-black);
  background: var(--rv-beige); border: 1px solid var(--rv-grey-200); border-radius: var(--rv-radius);
  box-shadow: none;
}
.rv-page .rv-el-form textarea { min-height: 8rem; }
.rv-page .rv-el-form input:focus, .rv-page .rv-el-form select:focus, .rv-page .rv-el-form textarea:focus {
  outline: 2px solid var(--rv-blue); outline-offset: 1px; border-color: var(--rv-blue);
}
.rv-page .rv-el-form .wpforms-submit {
  display: inline-flex; align-items: center; justify-content: center; min-height: 3rem;
  padding: 0.5rem 1.25rem; border-radius: var(--rv-radius);
  background: var(--rv-blue) !important; color: var(--rv-white) !important;
  border: 1px solid var(--rv-blue) !important; font-family: var(--rv-font-secondary);
  font-size: 1rem; font-weight: 500;
  transition: background-color 0.32s var(--rv-ease), border-color 0.32s var(--rv-ease), transform 0.35s var(--rv-ease);
}
.rv-page .rv-el-form .wpforms-submit:hover { background: var(--rv-navy) !important; border-color: var(--rv-navy) !important; transform: scale(0.98); }
.rv-page .rv-el-form .wpforms-field-row { display: flex; gap: 1rem; max-width: none; }
.rv-page .rv-el-form .wpforms-field-description { font-size: 0.8125rem; color: var(--rv-grey); }
@media (max-width: 767px) {
  .rv-page .rv-el-contact > .e-con:last-child { padding: 1.5rem !important; }
}

/* D33 - homepage splits at tablet. At 900px the two 394px columns left the
   Why photograph a 394x1268 sliver (37% of the frame) beside a four-line 48px
   headline. Below 991 the homepage splits stack like every internal page, image
   first, the portrait frame cropped to 4:3. */
@media (max-width: 991px) {
  .rv-grid-2 { grid-template-columns: minmax(0, 1fr); gap: 2rem; }
  .rv-grid-2 > .rv-frame { order: -1; }
  .rv-portrait { padding-top: 75%; }
  .rv-why .rv-content { order: 0; }
}

/* Hero and in-page action rows stack full width on phones so the two buttons
   read as one set rather than two ragged widths. */
@media (max-width: 479px) {
  .rv-page .rv-btn-row > .elementor-widget,
  .rv-page .rv-btn-row .elementor-widget-container,
  .rv-page .rv-btn-row .elementor-button { width: 100%; }
  .rv-page .rv-btn-row .rv-btn { width: 100%; }
}

/* Tables on phones: each row becomes a small card, the row heading on top and
   every cell labelled with its column, instead of a sideways-scrolling grid. */
@media (max-width: 767px) {
  .rv-page .rv-el-tablewrap { overflow: visible; border: 0; background: none; }
  .rv-page .rv-el-tablewrap .rv-el-table { min-width: 0; }
  .rv-page .rv-el-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .rv-page .rv-el-table, .rv-page .rv-el-table tbody, .rv-page .rv-el-table tr,
  .rv-page .rv-el-table th, .rv-page .rv-el-table td { display: block; width: 100%; }
  .rv-page .rv-el-table tr {
    background: var(--rv-white) !important; border: 1px solid var(--rv-grey-100);
    border-radius: var(--rv-radius); margin-bottom: 0.75rem; padding: 0.25rem 0;
  }
  .rv-page .rv-el-table tbody th { white-space: normal; border-bottom: 1px solid var(--rv-grey-100); padding: 0.75rem 1rem; }
  .rv-page .rv-el-table td { border: 0; padding: 0.5rem 1rem; }
  .rv-page .rv-el-table td[data-label]:not([data-label=""])::before {
    content: attr(data-label); display: block; font-size: 0.75rem; letter-spacing: 0.08em;
    text-transform: uppercase; color: var(--rv-blue); margin-bottom: 0.125rem;
  }
}

/* D33b - stacked homepage portraits crop to 4:3 on tablet and phone. Bias the
   crop upward so faces stay in frame rather than centring on a torso. */
@media (max-width: 991px) {
  .rv-grid-2 > .rv-frame > img { object-position: center 22%; }
}

/* D36 - numbered lists. The li was a two-column grid (number | text), so any
   <strong> inside an item became its own grid cell and the rest of the text
   fell into the 28px number column one word per line: the "obligations most
   often missed" list rendered 2,600px tall. The number is positioned instead
   and the text flows as normal inline content. */
.rv-page .rv-el-ol { display: grid; gap: 0.875rem; list-style: none; margin: 0; padding: 0; }
.rv-page .rv-el-ol li {
  display: block;
  position: relative;
  padding-left: 2.25rem;
  color: var(--rv-grey);
  line-height: 1.5;
}
.rv-page .rv-el-ol li::before {
  position: absolute;
  left: 0;
  top: -0.1em;
  width: 1.75rem;
  content: counter(rvol);
  font-family: var(--rv-font-primary);
  font-size: 1.25rem;
  color: var(--rv-blue);
}
.rv-page .rv-el-ol li strong { color: var(--rv-black); font-weight: 600; }

/* =========================================================
   Homepage video, 2026-09-25
   Hero loop, its play/pause control, the brand video play button and modal.
   Colours are the site tokens; nothing new is introduced.
   ========================================================= */

/* Hero: the video takes the still's place in the same fixed-height frame, so
   there is no layout shift. Cover crop, biased up to keep faces in frame. */
.rv-hero__img .rv-hero__video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 35%;
  background: var(--rv-navy-800);
  pointer-events: none;
}

/* Play/pause: small, translucent, bottom right, aligned to the content edge. */
.rv-hero__toggle {
  position: absolute;
  right: max(var(--rv-gutter), calc((100% - var(--rv-container)) / 2));
  bottom: 1.5rem;
  z-index: 2;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  padding: 0;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.28);
  background: rgba(16, 28, 56, 0.38);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  color: var(--rv-white);
  cursor: pointer;
  opacity: 0.82;
  transition: opacity 0.25s var(--rv-ease), background-color 0.25s var(--rv-ease), transform 0.35s var(--rv-ease);
}
.rv-hero__toggle svg { width: 0.875rem; height: 0.875rem; fill: currentColor; }
.rv-hero__toggle .rv-icon-play { display: none; margin-left: 2px; }
.rv-hero__toggle.is-paused .rv-icon-play { display: block; }
.rv-hero__toggle.is-paused .rv-icon-pause { display: none; }
.rv-hero__toggle:hover { opacity: 1; background: rgba(16, 28, 56, 0.58); }
.rv-hero__toggle:active { transform: scale(0.94); }
.rv-hero__toggle:focus-visible { outline: 2px solid var(--rv-white); outline-offset: 3px; opacity: 1; }
@media (max-width: 767px) {
  .rv-hero__toggle { bottom: 0.875rem; right: 0.875rem; width: 2.5rem; height: 2.5rem; }
}

/* Brand video trigger: soft translucent disc centred over the unchanged image.
   84px visual, the full disc is the tap target. */
.rv-playbtn {
  position: absolute;
  left: 50%;
  top: 50%;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 5.25rem;
  height: 5.25rem;
  margin: -2.625rem 0 0 -2.625rem;
  padding: 0;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.45);
  background: rgba(236, 236, 231, 0.32);
  -webkit-backdrop-filter: blur(10px) saturate(1.1);
  backdrop-filter: blur(10px) saturate(1.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35), 0 10px 30px -12px rgba(16, 28, 56, 0.45);
  color: var(--rv-white);
  cursor: pointer;
  transition: transform 0.35s var(--rv-ease), background-color 0.3s var(--rv-ease), border-color 0.3s var(--rv-ease);
}
.rv-playbtn svg { width: 1.625rem; height: 1.625rem; margin-left: 3px; fill: currentColor; }
.rv-playbtn:hover { transform: scale(1.06); background: rgba(236, 236, 231, 0.44); border-color: rgba(255, 255, 255, 0.7); }
.rv-playbtn:active { transform: scale(0.97); }
.rv-playbtn:focus-visible { outline: 2px solid var(--rv-white); outline-offset: 4px; }
@media (max-width: 767px) {
  .rv-playbtn { width: 4.5rem; height: 4.5rem; margin: -2.25rem 0 0 -2.25rem; }
  .rv-playbtn svg { width: 1.375rem; height: 1.375rem; }
}

/* Modal. Dark backdrop with a faint vignette, fade only. */
.rv-vmodal {
  position: fixed;
  inset: 0;
  z-index: 100000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 4.5rem 2.5rem 2.5rem;
  background:
    radial-gradient(ellipse at center, rgba(16, 28, 56, 0.55) 0%, rgba(10, 10, 10, 0.92) 75%),
    rgba(10, 10, 10, 0.82);
  opacity: 0;
  transition: opacity 0.28s var(--rv-ease);
}
.rv-vmodal[hidden] { display: none; }
.rv-vmodal.is-open { opacity: 1; }
.rv-vmodal__dialog {
  position: relative;
  width: min(100%, 72rem, calc((100dvh - 7rem) * 16 / 9));
  transform: translateY(8px);
  transition: transform 0.35s var(--rv-ease);
}
.rv-vmodal.is-open .rv-vmodal__dialog { transform: none; }
.rv-vmodal__video {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  background: var(--rv-black);
  border-radius: var(--rv-radius);
  box-shadow: 0 30px 80px -20px rgba(0, 0, 0, 0.6);
}
.rv-vmodal__close {
  position: absolute;
  top: -3.25rem;
  right: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.5rem;
  height: 2.5rem;
  padding: 0;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.25);
  background: rgba(255, 255, 255, 0.08);
  color: var(--rv-white);
  cursor: pointer;
  transition: background-color 0.25s var(--rv-ease), border-color 0.25s var(--rv-ease);
}
.rv-vmodal__close svg { width: 1.125rem; height: 1.125rem; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; }
.rv-vmodal__close:hover { background: rgba(255, 255, 255, 0.18); border-color: rgba(255, 255, 255, 0.5); }
.rv-vmodal__close:focus-visible { outline: 2px solid var(--rv-white); outline-offset: 3px; }
html.rv-modal-open { overflow: hidden; }
@media (max-width: 767px) {
  .rv-vmodal { padding: 4rem 1rem 1.5rem; }
}
@media (prefers-reduced-motion: reduce) {
  .rv-vmodal, .rv-vmodal__dialog, .rv-playbtn, .rv-hero__toggle { transition: none; }
}
/* The chat launcher renders above everything; keep it out of the way while
   the brand video is open. */
html.rv-modal-open #retell-widget-root { visibility: hidden; }

/* Brand video button over the credentials image on inner pages. The html
   widget covers the image column; only the button takes pointer events. */
.rv-page .rv-el-authmedia { position: relative; }
.rv-page .rv-el-authmedia > .elementor-widget-html,
.rv-page .rv-el-authmedia > .elementor-widget-html > .elementor-widget-container {
  position: absolute !important;
  inset: 0;
  margin: 0 !important;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.rv-page .rv-el-authmedia .rv-playbtn { pointer-events: auto; }

/* =========================================================
   Motion, 2026-09-25 (D39)
   One vocabulary site-wide: text rises from a mask, content fades up 18px,
   photographs unmask from the bottom while settling from a 6% zoom. Only
   transform, opacity and clip-path animate. Everything plays once.
   Classes come from assets/js/rv-motion.js, which only prepares elements that
   are below the fold when it runs, so nothing on screen ever flashes.
   ========================================================= */
:root {
  --rv-ease-out: cubic-bezier(0.23, 1, 0.32, 1);
  --rv-ease-io: cubic-bezier(0.77, 0, 0.175, 1);
}

/* Content blocks and cards */
.rv-r.rv-up {
  opacity: 0;
  transform: translate3d(0, 18px, 0);
  transition: opacity 0.7s var(--rv-ease-out), transform 0.8s var(--rv-ease-out);
  transition-delay: var(--rv-d, 0ms);
}
.rv-r.rv-up.rv-in { opacity: 1; transform: none; }

/* Photographs */
.rv-r.rv-img {
  clip-path: inset(0 0 100% 0);
  transform: scale(1.06);
  transition: clip-path 1s var(--rv-ease-io), transform 1.1s var(--rv-ease-out);
  transition-delay: var(--rv-d, 0ms);
}
.rv-r.rv-img.rv-in { clip-path: inset(0 0 0 0); transform: none; }

/* Headings: each word rises from under its own mask. The padding and
   negative margin keep descenders inside the mask without moving the line. */
.rv-w {
  display: inline-block;
  overflow: hidden;
  vertical-align: top;
  padding-bottom: 0.14em;
  margin-bottom: -0.14em;
}
.rv-wi { display: inline-block; }
.rv-words:not(.rv-in) .rv-wi { transform: translate3d(0, 108%, 0); }
.rv-words .rv-wi {
  transition: transform 0.85s var(--rv-ease-out);
  transition-delay: calc(var(--i, 0) * 26ms + var(--rv-d, 0ms));
}

/* Hero, first paint. Pure CSS, no dependency on the script, so it plays the
   moment the page renders and never flickers. */
@media (prefers-reduced-motion: no-preference) {
  @keyframes rv-fade-up {
    from { opacity: 0; transform: translate3d(0, 14px, 0); }
    to { opacity: 1; transform: none; }
  }
  @keyframes rv-rise {
    from { opacity: 0; transform: translate3d(0, 22px, 0); filter: blur(6px); }
    to { opacity: 1; transform: none; filter: blur(0); }
  }
  @keyframes rv-settle {
    from { opacity: 0; transform: scale(1.06); }
    to { opacity: 1; transform: none; }
  }
  @keyframes rv-fade { from { opacity: 0; } to { opacity: 1; } }

  .rv-crumbs { animation: rv-fade 0.6s var(--rv-ease-out) both; }

  /* homepage hero */
  .rv-hero-section .rv-tag { animation: rv-fade-up 0.7s var(--rv-ease-out) both; }
  .rv-hero-section h1 { animation: rv-rise 1s var(--rv-ease-out) 0.08s both; }
  .rv-hero-section .rv-max-26 > * { animation: rv-fade-up 0.8s var(--rv-ease-out) both; }
  .rv-hero-section .rv-max-26 > :nth-child(1) { animation-delay: 0.22s; }
  .rv-hero-section .rv-max-26 > :nth-child(3) { animation-delay: 0.3s; }
  .rv-hero-section .rv-max-26 > :nth-child(5) { animation-delay: 0.4s; }
  .rv-hero__img > img, .rv-hero__video { animation: rv-settle 1.4s var(--rv-ease-out) 0.15s both; }
  .rv-hero__toggle { animation: rv-fade 0.6s ease 1.1s both; }

  /* inner-page hero (Elementor) */
  .rv-page .rv-el-hero > .e-con:first-child > .elementor-widget { animation: rv-fade-up 0.7s var(--rv-ease-out) both; }
  .rv-page .rv-el-hero .elementor-widget-heading { animation-name: rv-rise !important; animation-duration: 1s !important; animation-delay: 0.08s !important; }
  .rv-page .rv-el-hero > .e-con:first-child > .rv-btn-row { animation: rv-fade-up 0.8s var(--rv-ease-out) 0.4s both; }
  .rv-page .rv-el-hero > .e-con:last-child > * { animation: rv-fade-up 0.8s var(--rv-ease-out) 0.22s both; }
  .rv-page .rv-el-hero > .e-con:last-child > * + * { animation-delay: 0.32s; }
  .rv-page .rv-el-herostrip img { animation: rv-settle 1.4s var(--rv-ease-out) 0.15s both; }
}

/* Card hovers only where a real pointer exists, so a tap on a phone does not
   leave a card stuck in its lifted state. */
@media (hover: none) {
  .rv-page .rv-el-card2.is-link:hover,
  .rv-page .rv-el-related:hover { transform: none; }
}
/* Zoom-settle stays inside its frame (a scaled image widened the page by 12px
   on phones while the hero animated). */
.rv-page .rv-el-herostrip, .rv-page .rv-el-herostrip .elementor-widget-container, .rv-clip { overflow: clip; }
.rv-clip { border-radius: var(--rv-radius); }
.rv-el-herostrip .rv-clip, .rv-page .rv-el-herostrip .elementor-widget-container { border-radius: 0; }

/* =========================================================
   Client review 2026-10-09 (D40). Existing components only;
   these rules fit the approved wording into them.
   ========================================================= */

/* Homepage: service standard [★3] under the hero, with one MARN tile. */
.rv-speedline { padding: 0 0 4rem; }
.rv-speedline__grid { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 2rem 3rem; align-items: center; padding-top: 2.5rem; border-top: 1px solid var(--rv-grey-100); }
.rv-speedline__text .rv-xl { font-size: 1.5rem; line-height: 1.35; color: var(--rv-navy); }
.rv-speedline__text .rv-foot + .rv-foot { margin-top: 0.25rem; }
.rv-speedline__tile { padding: 1.5rem; gap: 0.5rem; border-radius: var(--rv-radius); background: var(--rv-beige-100); color: inherit; text-decoration: none; transition: background-color 0.2s; }
.rv-speedline__tile:hover { background: var(--rv-beige-200); }
.rv-speedline__tile .rv-stat__num.is-text { font-size: 1.75rem; }
@media (max-width: 767px) {
  .rv-speedline { padding-bottom: 3rem; }
  .rv-speedline__grid { grid-template-columns: minmax(0, 1fr); }
  .rv-speedline__text .rv-xl { font-size: 1.25rem; }
}

/* Homepage "What we do.": the Sponsor Compliance Check card keeps its full
   approved text [★4], so it spans two tracks. */
.rv-card.is-wide { grid-column: span 2; }
@media (max-width: 767px) { .rv-card.is-wide { grid-column: auto; } }

/* Homepage closing band: the urgent call link sits beside the button. */
.rv-cta__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 1.5rem; }
.rv-cta__call { color: var(--rv-white); font-weight: 500; text-decoration: underline; text-underline-offset: 0.2em; }
.rv-cta__call:hover { color: var(--rv-white); opacity: 0.85; }

/* Card titles now carry the full visa names (S00a). They wrap; they are
   never cut off. */
.rv-page .rv-el-card2 h3 { display: block; -webkit-line-clamp: unset; overflow: visible; }

/* Process block, S25/S26/S28: the step titles are the approved service
   standard, so they run longer than the old one-word titles. Steps without
   a label keep their titles level with the labelled fourth step. */
.rv-page .rv-el-step h3 { font-size: 1.625rem; line-height: 1.2; }
.rv-page .rv-el-steps.cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.rv-page .rv-el-step .rv-muted p + p { margin-top: 0.75rem; }
.rv-page .rv-el-steps-after { margin-top: 2rem; }
.rv-page .rv-el-steps > .rv-el-step:not(:has(.rv-tag))::before { content: ""; display: block; height: 2.125rem; }
@media (max-width: 991px) {
  .rv-page .rv-el-steps.cols-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rv-page .rv-el-step h3 { font-size: 1.5rem; }
}
@media (max-width: 767px) {
  .rv-page .rv-el-steps.cols-3 { grid-template-columns: minmax(0, 1fr); }
  .rv-page .rv-el-steps > .rv-el-step:not(:has(.rv-tag))::before { display: none; }
}

/* Reviewed-by line [F2]: a quiet row above Related pages. */
.rv-page .rv-el-reviewedrow { border-top: 1px solid var(--rv-grey-100); }
.rv-page .rv-el-reviewed p { font-size: 0.875rem; line-height: 1.5; color: var(--rv-grey); }
.rv-page .rv-el-reviewed a { color: var(--rv-navy); text-decoration: underline; text-underline-offset: 0.2em; }
.rv-page .rv-el-reviewed a:hover { color: var(--rv-blue); }

/* One-off lines the review adds outside a section's flow (urgent call lines,
   "Also see" links): a slim band in the content column. */
.rv-page .e-con.rv-el-callout { --padding-top: 3rem; --padding-bottom: 3rem; }
.rv-page .rv-el-callout p:first-child { font-family: var(--rv-font-primary); font-size: 1.375rem; line-height: 1.35; color: var(--rv-navy); }
.rv-page .rv-el-callout p + p { margin-top: 0.5rem; font-size: 0.9375rem; color: var(--rv-grey); }
.rv-page .rv-el-callout a { color: var(--rv-blue); text-decoration: underline; text-underline-offset: 0.2em; }
@media (max-width: 767px) {
  .rv-page .e-con.rv-el-callout { --padding-top: 2rem; --padding-bottom: 2rem; }
  .rv-page .rv-el-callout p:first-child { font-size: 1.1875rem; }
}

/* Footer, S19: five link columns. The brand block sits above them so five
   columns get the full content band. */
.rv-footer__grid:has(.rv-footer__cols.is-five) { grid-template-columns: 1fr; gap: 2.5rem; }
.rv-footer__grid:has(.rv-footer__cols.is-five) .rv-footer__brand p { max-width: 40rem; }
.rv-footer__cols.is-five { grid-template-columns: 1fr 1.25fr 0.9fr 1.15fr 0.9fr; }
.rv-footer__colhead a { display: inline; padding: 0; font-size: inherit; color: inherit; }
.rv-footer__colhead a:hover { color: var(--rv-white); text-decoration: underline; }
.rv-footer__legal p + p { margin-top: 0.5rem; }
@media (max-width: 991px) { .rv-footer__cols.is-five { grid-template-columns: 1fr 1fr; } }
@media (max-width: 600px) { .rv-footer__cols.is-five { grid-template-columns: 1fr; } }

/* 404 template (client review page 50). */
.rv-notfound .rv-muted a { color: var(--rv-blue); text-decoration: underline; text-underline-offset: 0.2em; }

/* Enquiry form: the Monitor consent box (48.22) is a WPForms checkbox list;
   no bullet, box and label on one line. */
.rv-page .wpforms-field-checkbox ul { list-style: none; margin: 0; padding: 0; }
.rv-page .wpforms-field-checkbox li { display: flex; align-items: flex-start; gap: 0.5rem; }
.rv-page .wpforms-field-checkbox li::before { content: none; display: none; }

/* Long H1s (visa names in full): a step down in scale so the title holds to
   about three lines, with a Lora sub-headline under it. The answer-first
   paragraphs on the right get real paragraph spacing and a looser measure. */
.rv-page .rv-h1-long .elementor-heading-title { font-size: 3.25rem; line-height: 1.08; }
.rv-page .rv-el-herosub { margin-top: 1rem; }
.rv-page .rv-el-herosub p { font-family: var(--rv-font-primary); font-size: 1.625rem; line-height: 1.3; letter-spacing: -0.02em; color: var(--rv-navy); }
.rv-page .rv-el-hero .rv-xl p { line-height: 1.5; }
.rv-page .rv-el-hero .rv-xl p + p { margin-top: 1.125rem; }
@media (max-width: 991px) {
  .rv-page .rv-h1-long .elementor-heading-title { font-size: 2.75rem; }
  .rv-page .rv-el-herosub p { font-size: 1.375rem; }
}
@media (max-width: 767px) {
  .rv-page .rv-h1-long .elementor-heading-title { font-size: 2.25rem; }
  .rv-page .rv-el-herosub p { font-size: 1.1875rem; }
}

/* =========================================================
   Two-row header (approved by Gino 2026-10-13, client review S12)
   Row 1: logo, phone and hours, briefing button. Row 2: five links with
   descriptors under the two visas. On scroll, row 1 slides up behind the
   viewport edge (sticky top goes negative, so nothing below reflows) and a
   short "Book a briefing" button appears at the end of the link row.
   ========================================================= */
.rv-header--two { top: 0; transition: top 0.3s var(--rv-ease), background-color 0.3s var(--rv-ease); }
.rv-header--two:hover { background: var(--rv-beige); border-bottom-color: var(--rv-grey-100); }
.rv-header--two:hover .rv-logo .is-colour { display: block; }
.rv-header--two:hover .rv-logo .is-white { display: none; }
.rv-header--two:hover .rv-phone__number { color: var(--rv-navy); }
.rv-header--two:hover .rv-phone__hours { color: var(--rv-grey); }
.rv-header--two .rv-header__utility .rv-phone { display: flex; }
.rv-header__navrow { border-top: 1px solid var(--rv-grey-100); }
.rv-nav--flat { justify-content: space-between; align-items: center; gap: 1.5rem; min-height: 3.5rem; }
.rv-navlinks { display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; flex: 1 1 auto; min-width: 0; }
.rv-navlink { display: flex; flex-direction: column; justify-content: center; gap: 0.125rem; padding: 0.625rem 0; color: var(--rv-black); font-size: 0.875rem; font-weight: 500; line-height: 1.25; white-space: nowrap; box-shadow: inset 0 -2px 0 transparent; transition: color 0.2s, box-shadow 0.2s; }
.rv-navlink__sub { font-size: 0.75rem; font-weight: 400; color: var(--rv-grey); }
.rv-navlink:hover { color: var(--rv-blue); }
.rv-navlink.is-current { box-shadow: inset 0 -2px 0 var(--rv-blue); }
.rv-navlinks__cta { display: none; flex: none; }
.rv-header--two.is-condensed { top: calc(-1 * var(--rv-nav-h)); }
body.admin-bar .rv-header--two.is-condensed { top: calc(32px - var(--rv-nav-h)); }
.rv-header--two.is-condensed .rv-navlinks__cta { display: inline-flex; }
.rv-header--two.is-condensed .rv-navlinks { gap: 1rem; }
.rv-header--two.is-condensed .rv-navlink { font-size: 0.84375rem; }
.rv-header-sentinel { position: absolute; top: 8rem; left: 0; width: 1px; height: 1px; pointer-events: none; }
@media (min-width: 1180px) {
  .rv-header--two .rv-burger { display: none; }
  .rv-nav--flat .rv-nav__mobile-cta { display: none; }
}
@media (max-width: 1179px) {
  /* Phones and tablets: one bar with the burger; the links live in the drawer.
     Row 2 collapses, so the condensed state does nothing here. */
  .rv-header--two.is-condensed, body.admin-bar .rv-header--two.is-condensed { top: 0; }
  body.admin-bar .rv-header--two.is-condensed { top: 32px; }
  .rv-header__navrow { border-top: 0; }
  .rv-header__navrow > .rv-container { padding: 0; }
  .rv-header--two .rv-header__utility .rv-phone__hours { display: none; }
  .rv-navlinks__cta { display: none !important; }
  .rv-header--two.is-menu-open .rv-nav--flat { display: block; }
  .rv-nav--flat .rv-navlinks { display: block; }
  .rv-nav--flat .rv-navlink { white-space: normal; padding: 1rem 0; font-size: 1.0625rem; border-bottom: 1px solid var(--rv-grey-100); box-shadow: none; }
  .rv-nav--flat .rv-navlink.is-current { color: var(--rv-blue); }
  .rv-nav--flat .rv-navlink__sub { font-size: 0.875rem; margin-top: 0.125rem; }
}
@media (max-width: 782px) { body.admin-bar .rv-header--two.is-condensed { top: 46px; } }
@media (max-width: 767px) {
  /* Client review S16 / B4: the number stays visible on phones as a tel: link. */
  .rv-header--two .rv-header__utility .rv-phone { display: flex; }
  .rv-header--two .rv-header__utility .rv-phone__number { font-size: 0.875rem; }
}
@media (max-width: 359px) { .rv-header--two .rv-header__utility .rv-phone { display: none; } }
@media (prefers-reduced-motion: reduce) { .rv-header--two { transition: none; } }

/* Gino 2026-10-13 (B8, review 10.41): read-next links inside an honest panel
   run one per line, so long page names read as separate choices. */
.rv-page .rv-el-disqualify .rv-el-readnext { flex-direction: column; gap: 0.625rem; }
@media (max-width: 767px) {
  /* Logo, number and burger must share 343px at 375 wide. */
  .rv-header--two .rv-logo img { height: 1.5rem; }
  .rv-header--two .rv-header__bar { gap: 0.5rem; }
  .rv-header--two .rv-header__utility { gap: 0.625rem; }
  .rv-header--two .rv-header__utility .rv-phone__number { font-size: 0.8125rem; }
}
@media (max-width: 1179px) { .rv-nav--flat .rv-navlinks { margin-top: 0.75rem; } }

/* Gino 2026-10-14: menu items fill blue with white text on hover. Each link
   gets a padded, rounded hit area so the fill reads as a deliberate block;
   gaps shrink by the same amount so the row still fits the 1176px band. */
@media (min-width: 1180px) {
  .rv-navlinks { gap: 0.5rem; }
  .rv-navlink { padding: 0.5rem 0.75rem; border-radius: var(--rv-radius); transition: color 0.2s, background-color 0.2s, box-shadow 0.2s; }
  .rv-navlink:hover, .rv-navlink:focus-visible { background: var(--rv-blue); color: var(--rv-white); box-shadow: none; }
  .rv-navlink:hover .rv-navlink__sub, .rv-navlink:focus-visible .rv-navlink__sub { color: rgba(255, 255, 255, 0.82); }
  .rv-navlink.is-current:hover { box-shadow: none; }
  .rv-header--two.is-condensed .rv-navlinks { gap: 0.125rem; }
  .rv-header--two.is-condensed .rv-navlink { padding: 0.375rem 0.5rem; }
}

/* Gino 2026-10-14: Why Resource Visa (home). Highlights are short lines, so
   the list sits tighter than the old four-card version; the frame keeps the
   video poster cropped to the same portrait ratio as the 2024 section. */
.rv-why2__list { list-style: none; margin: 0; padding: 0; gap: 1rem 1.5rem; }
.rv-why2__list .rv-list__item { align-items: center; }
.rv-why2__list .rv-xl { font-size: 1.125rem; line-height: 1.35; }
.rv-why2 .rv-frame img { object-fit: cover; }

/* Gino 2026-10-14: the closing-band button is white on the blue card, for contrast. */
.rv-cta .rv-btn.is-white:hover, .rv-cta .rv-btn.is-white:focus-visible { background: var(--rv-beige-100); color: var(--rv-navy); border-color: var(--rv-beige-100); }


/* =========================================================
   UI corrections 2026-10-19
   1. Nav: every link fills the full height of the nav row, so items with
      and without a subtitle show the same blue hover block. Only background
      and colour change on hover, so nothing shifts.
   2. Footer description: wider measure and 15px so it sits on two lines.
   3. Footer column headings: one step larger and bolder than the links,
      bottom-aligned so every column's first link starts on the same line.
   ========================================================= */
@media (min-width: 1180px) {
  .rv-navlinks { align-items: stretch; }
  .rv-navlink { justify-content: center; align-self: stretch; min-height: 100%; }
}

.rv-footer__grid:has(.rv-footer__cols.is-five) .rv-footer__brand { max-width: none; }
.rv-footer__grid:has(.rv-footer__cols.is-five) .rv-footer__brand p {
  max-width: 44rem;
  font-size: 0.9375rem;
  line-height: 1.6;
}

.rv-footer__cols .rv-footer__colhead {
  font-size: 0.9375rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  line-height: 1.3;
  white-space: normal;
  margin-bottom: 0.875rem;
}
.rv-footer__cols .rv-footer__colhead a { line-height: inherit; }
@media (min-width: 992px) {
  .rv-footer__cols.is-five > div > .rv-footer__colhead:first-child {
    display: flex;
    align-items: flex-end;
    min-height: calc(3 * 1.3em);
  }
}
