/* =====================================================================
   LimeLight redesign (Studio revision 226) — scoped design system.
   Loaded ONLY on pages with `redesign: true`; every rule is scoped under
   `.rd` so retained pages are unaffected. Approved model: NAVY-default page
   with white + lime type, and warm-white rounded INSET PANELS (.rd-panel)
   for the Services grid and the Fleet + Loop group. No em/en dashes in copy.
   ===================================================================== */

@font-face {
  font-family: "Manrope";
  src: url("/assets/fonts/manrope-variable.ttf") format("truetype");
  font-weight: 100 900;
  font-display: swap;
}

.rd {
  --rd-navy: #11182E;
  --rd-blue: #263D60;
  --rd-lime: #6EC05C;
  --rd-paper: #F7F6F0;
  --rd-beige: #EBE8D6;
  --rd-green: #407732;   /* dark green eyebrow on light */
  --rd-onlight-body: #3a4a44;
  --rd-ondark-body: #d7dbe4;
  --rd-font: "Manrope", "Helvetica Neue", Arial, sans-serif;
  --rd-maxw: 1200px;
}

/* ---- base: DARK by default ---- */
.rd { background: var(--rd-navy); color: #fff; font-family: var(--rd-font); }
.rd main { background: var(--rd-navy); }
/* Inline padding only. The shorthand `padding: 0 24px` also set the BLOCK padding to zero, and
   at 0,2,0 it outranked `.rd-page section` at 0,1,1 - so every `section.rd-wrap` silently lost
   the page's vertical rhythm and sat flush against its neighbours. Several sections had a
   `padding-block` override added to win it back one at a time (home partners, home clients);
   those still win here on source order, so they keep the value they were tuned to. The ones that
   never got an override - the services testimonial among them - get the rhythm they always
   should have had. */
.rd .rd-wrap { max-width: var(--rd-maxw); margin: 0 auto; padding-inline: 24px; }
.rd main h1, .rd main h2, .rd main h3 { font-family: var(--rd-font); color: #fff; line-height: 1.08; letter-spacing: -0.01em; }
.rd main p { color: var(--rd-ondark-body); }
/* QA r4 (site-wide vertical rhythm): the heading/paragraph margin reset lives at ZERO specificity
   (:where) so every component's own margin rule wins and the relationship-based rhythm applies on
   ALL redesign routes, not just the homepage. Previously `.rd main h1..h3 / p { margin:0 }` (0,1,2)
   outranked the components' own (0,1,1)/(0,1,0) margin declarations and collapsed every stacked text
   pair to line-height leading. This keeps the non-margin resets (font/colour/leading) at their
   original specificity and only relaxes margins. Retained (non-.rd) templates like team-member are
   unaffected. Eyebrows keep their explicit .rd .rd-eyebrow margin (0,2,0). */
:where(.rd main h1, .rd main h2, .rd main h3, .rd main p) { margin: 0; }
.rd-page section { padding: clamp(56px, 8vw, 104px) 0; }

/* eyebrow: lime on dark (default), dark green on light panels */
.rd .rd-eyebrow { font-size: 12px; font-weight: 700; letter-spacing: 1.5px; line-height: 1.4; text-transform: uppercase; color: var(--rd-lime); margin: 0 0 14px; }

/* ---- header (navy on redesign pages) ---- */
/* At rest the bar takes the colour the page opens on, via --header-bg (set per page type in
   styles.css). This used to be a flat `transparent`, which sounds like the same thing but is not:
   the bar sits ABOVE the hero in flow, not over it, so transparent showed the body navy rather
   than the gradient below it. Reading the variable here keeps the override in place for the nav
   link colours while letting the page choose the ground. */
.rd .site-header { background: var(--header-bg, transparent); }
.rd .site-header.is-stuck { background: var(--rd-navy); }
.rd .site-header .nav__list > li > a,
.rd .site-header .nav__toggle-link { color: #fff; }
/* Current section, green. The base rule (.nav__list a.is-active) is 0,2,0 and loses to the
   white above it at 0,3,0, which is why the top-level items never turned green on redesign
   pages while the submenu entries - not matched by `> li > a` - did. --green is already the
   lime, which is the accent that holds up on the navy and the blue. */
.rd .site-header .nav__list > li > a.is-active,
.rd .site-header .nav__toggle-link.is-active { color: var(--rd-lime); }
/* The header CTA is text and an arrow now (styles.css), so this no longer forces a fill - it just
   keeps the redesign's lime and casing on redesign pages. The drawer's filled treatment at
   <=1024px is deliberately left alone. */
.rd .site-header .nav__cta { color: var(--rd-lime); text-transform: none; font-weight: 700; }
/* :not(.nav__cta) because the header CTA carries BOTH classes - without it this rule kept
   painting the fill back on at 0,3,0 over the text treatment at 0,1,1. */
.rd .site-header .btn--cta:not(.nav__cta) {
  background: var(--rd-lime); color: var(--rd-navy);
  text-transform: none; border-radius: 4px; font-weight: 700;
}

/* Footer is the explicit exception to the new Manrope type: the retained footer keeps its
   existing Montserrat. The redesign's .rd { font-family: Manrope } would otherwise cascade
   into it. Scope to the footer + its heading (whose own font-family: var(--sans) can be
   remapped to Manrope by body-level --sans overrides on some pages). Only the logo changed. */
.rd .site-footer,
.rd .site-footer__heading { font-family: "Montserrat", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }

/* ---- CTA link + solid button ---- */
.rd .rd-cta { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; text-decoration: none; color: var(--rd-lime); }
.rd .rd-cta .rd-arrow { text-decoration: none; display: inline-block; transition: transform .25s ease; }
/* Arrow CTAs bounce on hover, in the direction the arrow points. The trigger is always the
   parent link, button or card, so hovering the words or the arrow itself both fire it. Pointer
   devices only: on touch a tap would leave the arrow mid-animation.
   The glyph itself is the site's approved vocabulary: an up-right arrow means the link takes you
   somewhere else, a down arrow means it moves you down this page, and a form submit carries no
   arrow at all. */
@keyframes rd-arrow-bounce {
  0%, 100% { transform: translateY(0); }
  30%      { transform: translateY(-6px); }
  55%      { transform: translateY(0); }
  78%      { transform: translateY(-3px); }
}
@media (hover: hover) {
  .rd .rd-cta:hover .rd-arrow,
  .rd .rd-btn:hover .rd-arrow,
  .rd-work-card:hover .rd-arrow,
  .rd-service--link:hover .rd-cta .rd-arrow,
  .rd-team-card:hover .rd-arrow { animation: rd-arrow-bounce .6s ease; transform: none; }
  /* A down arrow bounces down, so the motion agrees with what the arrow is promising. */
  .rd .rd-cta:hover .rd-arrow--down,
  .rd .rd-btn:hover .rd-arrow--down { animation-name: rd-arrow-bounce-down; }
}
@keyframes rd-arrow-bounce-down {
  0%, 100% { transform: translateY(0); }
  30%      { transform: translateY(6px); }
  55%      { transform: translateY(0); }
  78%      { transform: translateY(3px); }
}
.rd .rd-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; background: var(--rd-lime); color: var(--rd-navy); font-family: var(--rd-font); font-weight: 700; font-size: 14px; text-decoration: none; padding: 12px 22px; border-radius: 4px; border: 0; cursor: pointer; transition: background-color .2s ease, transform .15s ease; }
.rd .rd-btn:hover { background: #85CA74; }
.rd .rd-btn:active { background: #5EAB4C; }
.rd .rd-btn:focus-visible { outline: 2px solid var(--rd-navy); outline-offset: 2px; box-shadow: 0 0 0 5px rgba(110, 192, 92, 0.85); }
.rd .rd-btn .rd-arrow { text-decoration: none; display: inline-block; }

/* closing CTA centered */
.rd .rd-cta-band { text-align: center; }
.rd .rd-cta-band .rd-btn, .rd .rd-cta-band .rd-cta { margin-inline: auto; }

/* ---- warm-white inset panel ---- */
.rd .rd-panel { background: var(--rd-paper); color: var(--rd-navy); border-radius: 44px; padding: clamp(40px, 6vw, 88px) clamp(24px, 5vw, 72px); }
.rd .rd-panel h1, .rd .rd-panel h2, .rd .rd-panel h3 { color: var(--rd-navy); }
.rd .rd-panel p { color: var(--rd-onlight-body); }
.rd .rd-panel .rd-eyebrow { color: var(--rd-green); }
.rd .rd-panel .rd-cta { color: var(--rd-green); }
.rd .rd-panel-section { padding-top: 0 !important; }

/* =====================================================================
   Approved LOOP animation component (option 1).
   ===================================================================== */
.ll-loop-figure { display: block; container-type: inline-size; width: 100%; margin: 0; background: transparent; color: var(--rd-navy); font-family: var(--rd-font); }
.ll-loop-figure svg { display: block; width: 100%; height: auto; max-width: 1000px; margin: auto; }
.ll-loop-mobile { display: none; }
/* Text legend is the COMPACT-mobile counterpart: hidden on desktop (the full SVG
   already carries the four stage descriptions), shown only with the compact mobile SVG. */
/* Desktop: the SVG is role=img, so the four stage explanations are kept in the accessibility
   tree as a visually-hidden long description (not display:none). Mobile shows them visibly. */
.ll-loop-copy { margin: 0; padding: 0; list-style: none; gap: 20px; position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0; }
.ll-loop-copy li { font-size: 16px; line-height: 1.55; color: var(--rd-navy); }
.ll-loop-copy strong { display: block; font-size: 18px; margin-bottom: 4px; }
/* The pause glyph is off the block visually (Brandee: "these 2 green lines are still on this
   block") but the mechanism stays. Reduced-motion users never see motion at all - the inline SVG
   stops all of its own animation under that query - and everyone else can still reach the control
   by keyboard, where :focus-within reveals it. Same pattern as a skip link. */
.ll-loop-controls { display: flex; justify-content: flex-end; height: 0; padding: 0; overflow: hidden; }
.ll-loop-controls:focus-within { height: auto; padding: 8px 0; overflow: visible; }
/* Pause control: lime on navy (default surface), dark green on a warm-white panel.
   #407732 on navy was only 3.27:1; lime clears AA. Keyboard/touch target unchanged. */
.ll-loop-controls button { display: inline-flex; align-items: center; justify-content: center; min-width: 44px; min-height: 44px; color: var(--rd-lime); border: 0; background: transparent; padding: 6px; cursor: pointer; }
/* Icon-only pause/play. The visible label was removed at Brandee's request; the control itself
   stays because the ring animates continuously, and its name is carried by aria-label, which
   main.js swaps between "Pause animation" and "Play animation". */
/* Needs .ll-loop-figure to outrank `.ll-loop-figure svg { width:100% }` above (0,1,1),
   which was stretching the control icon to the full figure width. */
.ll-loop-figure .ll-loop-ico { width: 16px; height: 16px; max-width: none; margin: 0; display: inline-block; fill: currentColor; }
.ll-loop-controls button .ll-loop-ico--play { display: none; }
.ll-loop-controls button[aria-pressed="true"] .ll-loop-ico--pause { display: none; }
.ll-loop-controls button[aria-pressed="true"] .ll-loop-ico--play { display: inline-block; }
.ll-loop-controls button:focus-visible { outline: 2px solid var(--rd-lime); outline-offset: 5px; }
.rd-panel .ll-loop-controls button { color: var(--rd-green); }
.rd-panel .ll-loop-controls button:focus-visible { outline-color: var(--rd-green); }
.ll-loop-figure[data-loop-paused] svg * { animation-play-state: paused !important; }
@container (max-width: 740px) { .ll-loop-desktop { display: none; } .ll-loop-mobile { display: block; } .ll-loop-copy { position: static; width: auto; height: auto; overflow: visible; clip: auto; clip-path: none; white-space: normal; margin: 20px 0 0; display: grid; } }
/* Mobile: Brandee asked not to show the stage copy under the animation. The cropped mobile
   ring renders none of the four stage descriptions, so this list is their only source on
   narrow screens - it therefore reverts to the same visually-hidden treatment desktop uses,
   off-screen but still announced, rather than display:none which would drop the content. */
@container (max-width: 740px) { .ll-loop-copy { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0; margin: 0; } }
@media (prefers-reduced-motion: reduce) { .ll-loop-controls { display: none; } }

/* =====================================================================
   HOME (r226)
   ===================================================================== */
/* hero: continuous blue -> navy gradient (also covers intro + clients) */
.rd-home .rd-hero,
.rd-home .rd-intro,
.rd-home .rd-clients { background: transparent; }
.rd-home .rd-topwrap { background: linear-gradient(180deg, #263D60, #11182E); }
.rd-hero { padding-top: clamp(56px, 8vw, 110px) !important; padding-bottom: clamp(28px, 4vw, 56px) !important; position: relative; }
.rd-hero__title { font-family: var(--rd-font); font-weight: 800; letter-spacing: -0.02em; line-height: 1.0; font-size: clamp(44px, 9vw, 104px); max-width: 14ch; color: #fff; }
.rd-hero__accent { color: var(--rd-lime); }
.rd-hero__lead { margin-top: 24px; font-size: 18px; line-height: 1.55; max-width: 48ch; color: var(--rd-ondark-body); }
.rd-hero__cta { margin-top: 32px; }

/* intro two-column, right copy aligns to first heading line */
.rd-intro { padding-top: clamp(28px,4vw,48px) !important; }
.rd-intro__kicker { font-weight: 700; color: #fff; }

/* clients: centered heading + one spaced row of white logos on navy */
.rd-clients { text-align: center; }
.rd-clients__title { font-size: clamp(24px, 3.4vw, 38px); margin-bottom: 40px; color: #fff; }
.rd-logo-row { list-style: none; margin: 0; padding: 0; }
/* Client logos: six equally-spaced slots that gently autoscroll (two identical tracks).
   Pause on hover/focus; reduced-motion falls back to a static single row of six. */
.rd-logo-marquee { display: flex; overflow: hidden; width: 100%; -webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent); mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent); }
.rd-logo-row--marquee { flex: 0 0 auto; display: flex; align-items: center; justify-content: flex-start; gap: clamp(48px, 7vw, 96px); padding-right: clamp(48px, 7vw, 96px); animation: rd-logo-scroll 40s linear infinite; will-change: transform; }
.rd-logo-row--marquee li { flex: 0 0 auto; display: flex; align-items: center; justify-content: center; }
.rd-logo-row--marquee img { height: 46px; width: auto; max-width: 100%; object-fit: contain; }
.rd-logo-marquee:hover .rd-logo-row--marquee, .rd-logo-marquee:focus-within .rd-logo-row--marquee { animation-play-state: paused; }
@keyframes rd-logo-scroll { from { transform: translateX(0); } to { transform: translateX(-100%); } }
@media (max-width: 760px) { .rd-logo-row--marquee img { height: 38px; } }
@media (prefers-reduced-motion: reduce) {
  /* Reduced motion: keep ONE horizontal row (the rejected two-row wrap is gone). Stop the
     animation, hide the duplicate track, and allow safe manual horizontal scroll within the
     band so there is no document-level overflow; logo sizing and spacing stay normal. */
  .rd-logo-marquee { overflow-x: auto; -webkit-mask-image: none; mask-image: none; }
  .rd-logo-row--marquee { animation: none; }
  .rd-logo-row--marquee[aria-hidden] { display: none; }
}
/* Tech-partners band (home): a deliberate 4-column x 2-row grid of the eight partner logos with
   consistent centred cells and a generous row gap (was 3/3/2, which left Google Partner + Microsoft
   reading as small outliers). The logos are OPTICALLY balanced, not height-normalised: the six wide
   wordmarks sit at ~38px, while the compact Google Partner badge and the Microsoft mark are sized
   taller so they carry similar visual weight. Aspect ratios are preserved (width:auto), nothing is
   cropped or distorted, and max-width keeps every mark inside its cell. Two columns on phones. */
.rd-logo-row--partners { display: grid; grid-template-columns: repeat(4, 1fr); column-gap: 44px; row-gap: 56px; align-items: center; justify-items: center; }
.rd-logo-row--partners > li { display: flex; align-items: center; justify-content: center; width: 100%; }
.rd-logo-row--partners img { height: 38px; width: auto; max-width: 100%; object-fit: contain; }
.rd-logo-row--partners a { display: inline-flex; align-items: center; max-width: 100%; }
.rd-logo-row--partners a:focus-visible { outline: 2px solid var(--rd-lime); outline-offset: 4px; }
/* Optically enlarge the two compact marks so they match the wordmarks' visual weight rather than
   reading as tiny outliers. Google Partner is a near-square badge; Microsoft is a squarer wordmark. */
.rd-logo-row--partners img[alt="Google Partner"] { height: 56px; }
.rd-logo-row--partners img[alt="Microsoft"] { height: 46px; }
@media (max-width: 900px) {
  .rd-logo-row--partners { grid-template-columns: repeat(2, 1fr); row-gap: 40px; }
}

/* featured trio: tall PORTRAIT photos, straight corners, on navy */
.rd-featured__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; }
/* Three cards, so the tablet step stays one-up rather than two-up: two columns would leave the
   third card alone on its own row. The column was capped at 460px though, which marooned it in
   the middle of a 720px container around 768px; it now uses the width it has. */
@media (max-width: 900px) { .rd-featured__grid { grid-template-columns: 1fr; max-width: 600px; margin: 0 auto; } }
/* Flex column at full row height so the "View case study" link sits on a common baseline
   across a row, however many lines each description runs to. Grid rows already stretch. */
.rd-work-card { display: flex; flex-direction: column; height: 100%; text-decoration: none; color: #fff; }
.rd-work-card__media { display: block; overflow: hidden; border-radius: 0; aspect-ratio: 3 / 4; }
.rd-work-card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.rd-work-card__body { display: flex; flex-direction: column; flex: 1 1 auto; padding-top: 18px; }
.rd-work-card .rd-cta { margin-top: auto; }
.rd-work-card__brand { display: block; font-weight: 600; font-size: 24px; line-height: 1.25; color: #fff; margin: 0; }
.rd-work-card__stat { display: block; margin: 6px 0 12px; color: var(--rd-ondark-body); }
.rd-work-card .rd-cta { color: var(--rd-lime); }
.rd-work-card .rd-arrow { transition: transform .25s ease; display: inline-block; }
@media (hover: hover) { .rd-work-card:hover .rd-work-card__media img { transform: scale(1.03); } }

/* services grid (inside warm-white panel) */
.rd-services__title { font-size: clamp(26px, 3.6vw, 42px); }
.rd-services__lead { margin-top: 12px; font-size: 18px; max-width: 52ch; }
.rd-services__grid { margin-top: 48px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 44px 40px; }
@media (max-width: 900px) { .rd-services__grid { grid-template-columns: 1fr; gap: 32px; } }
.rd-service { }
.rd-service__num { font-weight: 800; color: var(--rd-green); margin-bottom: 10px; font-size: 15px; }
.rd-service h3 { font-size: 21px; margin-bottom: 10px; color: var(--rd-navy); }
.rd-service p { color: var(--rd-onlight-body); line-height: 1.55; }
.rd-service__tags { margin-top: 10px; font-size: 14px; color: var(--rd-green); }

/* Homepage service cards link to their service page. Whole card is the hit area;
   aria-label gives the link the service name rather than the full card text. */
.rd-service--link { display: block; text-decoration: none; color: inherit; }
.rd-service--link h3 { transition: color .2s ease; }
@media (hover: hover) { .rd-service--link:hover h3 { color: var(--rd-green); } }
.rd-panel .rd-service--link:focus-visible { outline: 2px solid var(--rd-green); outline-offset: 6px; border-radius: 10px; }
@media (prefers-reduced-motion: reduce) { .rd-service--link h3 { transition: none; } }
/* "See service" affordance inside the card link. It is a span, not an anchor, because the
   whole card is already an <a> and anchors cannot nest. Same pattern as .rd-work-card,
   which carries a <span class="rd-cta"> inside its card anchor. The arrow's transition and
   its reduced-motion reset are already handled by the shared .rd-cta rules. */
.rd-service--link .rd-cta { margin-top: 16px; }
/* Brandee asked for the label and arrow to read as body copy rather than green, so this takes
   the same --rd-onlight-body as `.rd-service p` directly above it. Needs four classes to beat
   `.rd .rd-panel .rd-cta` (0,3,0) at line 84, which paints every other panel CTA green; that
   rule is left alone so CTAs elsewhere on light panels are unchanged. The arrow sets no colour
   of its own, so it follows currentColor from here. */
.rd .rd-panel .rd-service--link .rd-cta { color: var(--rd-onlight-body); }

/* detailed service cards (Services page) */
.rd-service--card { display: flex; flex-direction: column; }
.rd-service__icon { width: 40px; height: 40px; margin-bottom: 14px; }
.rd-service__list { margin: 12px 0 16px; padding-left: 18px; color: var(--rd-onlight-body); line-height: 1.5; }
.rd-service__list li { margin-bottom: 4px; }
.rd-service--card .rd-cta { margin-top: auto; }

/* Martin Dingman work band (navy, two columns) */
.rd-workband__inner { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: 48px; align-items: center; }
@media (max-width: 900px) { .rd-workband__inner { grid-template-columns: 1fr; gap: 28px; } }
.rd-workband__media img { width: 100%; height: 100%; object-fit: cover; border-radius: 0; aspect-ratio: 3 / 4; }
.rd-workband__body h2 { font-size: clamp(26px, 3.6vw, 42px); margin-bottom: 16px; }
.rd-workband__body p { color: var(--rd-ondark-body); line-height: 1.6; margin-bottom: 12px; }
.rd-workband__body p:last-child { margin-bottom: 0; }
.rd-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin: 28px 0; }
.rd-stats dt { font-size: clamp(26px, 3vw, 38px); font-weight: 800; color: var(--rd-lime); }
.rd-stats dd { margin: 4px 0 0; font-size: 14px; color: var(--rd-ondark-body); }
.rd-workband__note { font-size: 13px; color: rgba(255,255,255,.6); margin-top: 6px; }

/* single testimonial (navy, oversized white marks, no portrait/carousel) */
.rd-quote-single { max-width: 62ch; margin: 0 auto; text-align: center; }
.rd-quote-single blockquote { position: relative; margin: 0; }
.rd-quote-single p { position: relative; margin: 0; font-size: clamp(22px, 3vw, 34px); font-weight: 600; line-height: 1.4; color: #fff; padding: 56px 8px 52px; }
.rd-quote-single p::before, .rd-quote-single p::after { content: ""; position: absolute; width: 52px; height: 40px; background-repeat: no-repeat; background-size: contain; }
.rd-quote-single p::before { top: 0; left: 0; background-image: url("/assets/img/r226/quote-open.svg"); background-position: left top; }
.rd-quote-single p::after { right: 0; bottom: 0; background-image: url("/assets/img/r226/quote-close.svg"); background-position: right bottom; }
.rd-quote-single cite { display: block; margin-top: 8px; font-size: 15px; font-style: normal; font-weight: 700; color: var(--rd-ondark-body); }
@media (max-width: 640px) { .rd-quote-single p { padding: 48px 4px 44px; } .rd-quote-single p::before, .rd-quote-single p::after { width: 40px; height: 31px; } }

/* fleet + loop combined warm-white panel */
.rd-fleetloop .rd-panel { display: block; }
.rd-fleetloop__fleet { max-width: 68ch; }
.rd-fleetloop__fleet h2 { font-size: clamp(26px, 3.4vw, 40px); margin-bottom: 16px; }
.rd-fleetloop__fleet p { font-size: 18px; line-height: 1.6; margin-bottom: 24px; }
.rd-fleetloop__loop { margin-top: 56px; }
.rd-fleetloop__loop h3 { font-size: clamp(22px, 3vw, 32px); color: var(--rd-navy); margin-bottom: 24px; }

/* priorities / engagement: bordered cards on navy */
.rd-priorities__title { font-size: clamp(26px, 3.6vw, 42px); }
.rd-priorities__grid { margin-top: 44px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
@media (max-width: 900px) { .rd-priorities__grid { grid-template-columns: 1fr; } }
.rd-priority { border: 1px solid rgba(255,255,255,.22); border-radius: 0; padding: 28px 24px; }
.rd-priority h3 { font-size: 20px; margin: 8px 0 10px; color: #fff; }
.rd-priority p { color: var(--rd-ondark-body); line-height: 1.55; }
.rd-service__num, .rd-priority .rd-service__num { color: var(--rd-lime); }
.rd-panel .rd-service__num { color: var(--rd-green); }

/* closing / cta bands */
.rd-closing__title { font-size: clamp(26px, 3.6vw, 42px); margin: 12px auto 24px; }
.rd-closing__lead { max-width: 60ch; margin: 0 auto 24px; color: var(--rd-ondark-body); }
.rd-closing__actions { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; align-items: center; }
.rd-fleet__title, .rd-fleet__lead { }
.rd-fleet__lead { margin: 16px 0 24px; color: var(--rd-ondark-body); line-height: 1.6; font-size: 18px; max-width: 62ch; }
.rd-loop__title { margin-bottom: 28px; }

/* partners */
.rd-partners { text-align: center; }
.rd-partners__title { font-size: clamp(24px, 3.4vw, 38px); margin-bottom: 36px; }
/* Homepage tech-partners rhythm: .rd-wrap zeroes the section's vertical padding and
   .rd main h1..h3{margin:0} defeats the title's own margin, so the heading sat flush on the
   logo row (.rd-clients escapes this via its explicit padding-top + taller marquee). Restore
   the section padding and a real heading-to-logos gap using the same tokens as .rd-clients. */
.rd-home .rd-partners { padding-block: clamp(28px, 4vw, 48px); }
.rd-home .rd-partners__title { margin-bottom: 28px; }

/* Clients strip: separate it from the intro above and the work band below. The section
   previously carried padding-top only (and needed !important to beat `.rd .rd-wrap`s
   `padding: 0 24px`), so the logo row sat flush against the following section. Uses the
   same `.rd-home` + padding-block approach as .rd-partners above, which outranks
   `.rd .rd-wrap` on source order at equal specificity, so no !important is needed. */
/* More air above the eyebrow so the clients strip separates from the intro copy; the
   space beneath it is unchanged. */
.rd-home .rd-clients { padding-block: clamp(72px, 9vw, 128px) clamp(40px, 5vw, 72px); }

/* =====================================================================
   HOME vertical rhythm (r226 QA round 2)
   Root cause: `.rd main h1,h2,h3 { margin:0 }` and `.rd main p { margin:0 }`
   (specificity 0,1,2) zero every heading/paragraph margin a component declares
   with a single class (0,1,0) or a `.block el` rule (0,1,1). Grids are <div>s so
   they keep their margins; headings, body copy and CTAs lost theirs, so every
   stacked text relationship collapsed to line-height leading (~5-6px) with no
   hierarchy, and the partners heading physically touched the logos. Eyebrows are
   exempt because `.rd .rd-eyebrow` is already 0,2,0. The reset is shared by every
   redesign page, so rather than weaken it we reinstate the intended spacing BY
   RELATIONSHIP, scoped under `.rd-home` (0,2,x) so it outranks the reset, reusing
   the values the components already intended. Spacing only: no copy, colour,
   grid, font or layout change. `.rd-clients` already reads correctly and is left
   untouched; the partners rule above is part of the same system (section
   heading -> content block = largest gap). --}

/* number / kicker -> heading : tight, deliberate */
.rd-home .rd-service__num { margin-bottom: 10px; }

/* heading -> body copy : medium (varies by context, hero is the most generous) */
.rd-home .rd-services__lead { margin-top: 12px; }
.rd-home .rd-service h3,
.rd-home .rd-insight__title { margin-bottom: 10px; }
.rd-home .rd-priority h3 { margin: 8px 0 10px; }
.rd-home .rd-workband__body h2,
.rd-home .rd-fleetloop__fleet h2 { margin-bottom: 16px; }
.rd-home .rd-fleetloop__loop h3 { margin-bottom: 24px; }
.rd-home .rd-splithead__body p { margin-bottom: 14px; }
.rd-home .rd-splithead__body p:last-child { margin-bottom: 0; }

/* body copy -> CTA / solid button : generous (buttons carry their own fill) */
.rd-home .rd-hero__lead { margin-top: 24px; }
.rd-home .rd-hero__cta { margin-top: 32px; }
.rd-home .rd-fleetloop__fleet p { margin-bottom: 24px; }
.rd-home .rd-insight__desc { margin-bottom: 20px; }
.rd-home .rd-service__tags { margin-top: 10px; }

/* centered closing band: eyebrow -> title -> button */
.rd-home .rd-closing__title { margin: 12px auto 24px; }

/* insights: bordered TEXT cards with descriptions, no images */
.rd-insights__title { font-size: clamp(26px, 3.6vw, 42px); }
.rd-insights__grid { margin-top: 40px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
@media (max-width: 900px) { .rd-insights__grid { grid-template-columns: 1fr; } }
.rd-insight { border: 1px solid rgba(255,255,255,.22); padding: 28px 24px; display: flex; flex-direction: column; }
.rd-insight__title { font-size: 19px; margin-bottom: 10px; color: #fff; }
.rd-insight__desc { color: var(--rd-ondark-body); line-height: 1.5; margin-bottom: 16px; }
.rd-insight .rd-cta { margin-top: auto; }

/* =====================================================================
   Internal style-guide reference page
   ===================================================================== */
.rd-styleguide { background: var(--rd-paper); color: var(--rd-navy); }
.rd-styleguide main { background: var(--rd-paper); }
.rd-styleguide h1, .rd-styleguide h2, .rd-styleguide h3 { color: var(--rd-navy); }
.rd-styleguide p { color: var(--rd-onlight-body); }
.rd-styleguide .rd-eyebrow { color: var(--rd-green); }
.rd-styleguide .sg-hero { padding: 72px 0 24px; }
.rd-styleguide .sg-hero h1 { font-size: clamp(32px, 6vw, 56px); }
.rd-styleguide .sg-section { padding: 32px 0; border-top: 1px solid rgba(17,24,46,.12); }
.rd-styleguide h2.sg-h { font-size: 24px; margin-bottom: 18px; }
.rd-styleguide .sg-swatches { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 16px; }
.rd-styleguide .sg-swatch { border-radius: 12px; overflow: hidden; border: 1px solid rgba(17,24,46,.1); background: #fff; }
.rd-styleguide .sg-swatch .chip { height: 84px; }
.rd-styleguide .sg-swatch .meta { padding: 10px 12px; font-size: 13px; }
.rd-styleguide .sg-swatch .meta b { display: block; }
.rd-styleguide .sg-loop { max-width: 1000px; }

/* =====================================================================
   About / Services / SEO shared components (retain earlier structure;
   inherit the dark base. Light content sits inside .rd-panel where used).
   ===================================================================== */
/* The services hero closes straight into the services panel: the "Find you -> Choose you ->
   Come back" sequence was removed at Brandee's request, and the hero's tail is tightened with
   it so the CTA does not sit over a hole. Other .rd-hero users keep the standard tail. */
.rd-services .rd-hero { padding-bottom: clamp(20px, 2.6vw, 36px) !important; }
/* Breadcrumb. One line, because a path stacked over two lines reads as two separate labels
   rather than a trail. Real <nav>/<ol> markup so it is announced as a breadcrumb and can be
   picked up as one, with the separator drawn in CSS - it is punctuation, not content, and
   should not land in the accessible name.
   The current page is green and the ancestor is warm white, which inverts the usual breadcrumb
   emphasis on purpose: green already means "you are here" in the main nav, so the page reads
   consistently with it, and the white link still looks like the thing you can click. */
.rd-crumbs { margin: 0 0 14px; }
.rd-crumbs ol { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 8px;
  list-style: none; margin: 0; padding: 0; }
.rd-crumbs li { display: flex; align-items: baseline; gap: 8px;
  font-size: 12px; font-weight: 700; letter-spacing: 1.5px; line-height: 1.4; text-transform: uppercase; }
.rd-crumbs li + li::before { content: "/"; color: var(--rd-paper); opacity: .55; font-weight: 400; }
.rd-crumbs a { color: var(--rd-paper); text-decoration: none; }
.rd-crumbs a:hover { text-decoration: underline; text-underline-offset: 3px; }
.rd-crumbs [aria-current="page"] { color: var(--rd-lime); }

/* Retained: the case-study crumb still uses this, and it is the same warm white. */
.rd-crumb { color: var(--rd-paper); text-decoration: none; }
.rd-crumb:hover { text-decoration: underline; }

/* About: full-width cropped GIF band */
/* About team GIF: approved framing keeps the actual animated GIF but crops far less --
   16/9 with a top-biased crop (50% 25%) so the back row's heads are not chopped;
   taller 1.6 ratio on mobile. Height follows aspect-ratio (no fixed 420px band).
   The reduced-motion still uses the same framing. */
.rd-gifband { width: 100%; overflow: hidden; background: var(--rd-navy); }
.rd-gifband img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; object-position: 50% 25%; }
@media (max-width: 700px) { .rd-gifband img { aspect-ratio: 1 / 1.6; } }

/* About: expect cards */
.rd-expect__head { max-width: 60ch; }
.rd-expect__head h2 { font-size: clamp(26px, 3.6vw, 40px); margin: 8px 0 10px; }
.rd-expect__grid { margin-top: 40px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
@media (max-width: 900px) { .rd-expect__grid { grid-template-columns: 1fr; } }
.rd-expect__card { border: 1px solid rgba(255,255,255,.22); padding: 26px 22px; }
.rd-expect__card h3 { font-size: 20px; margin: 6px 0 8px; color: #fff; }
.rd-expect__card p { color: var(--rd-ondark-body); line-height: 1.55; }

/* About: team grid */
.rd-people__title { font-size: clamp(26px, 3.6vw, 42px); }
.rd-people__lead { margin: 10px 0 36px; color: var(--rd-ondark-body); max-width: 60ch; }
.rd-team-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; }
@media (max-width: 900px) { .rd-team-grid { grid-template-columns: repeat(2, 1fr); } }
.rd-team-card { display: block; text-decoration: none; color: #fff; }
.rd-team-card img { width: 100%; aspect-ratio: 1 / 1; object-fit: cover; border-radius: 0; background: var(--rd-blue); }
.rd-team-card__name { display: block; font-weight: 700; margin-top: 12px; color: #fff; }
.rd-team-card__role { display: block; font-size: 14px; color: var(--rd-ondark-body); margin-top: 2px; }
.rd-team-card .rd-arrow { color: var(--rd-lime); transition: transform .2s ease; display: inline-block; }


/* About: People + Fleet split */
.rd-peoplefleet__inner { display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; align-items: start; }
@media (max-width: 900px) { .rd-peoplefleet__inner { grid-template-columns: 1fr; gap: 24px; } }
.rd-peoplefleet__body h2 { font-size: clamp(26px, 3.4vw, 38px); margin-bottom: 16px; }
.rd-peoplefleet__body p { color: var(--rd-ondark-body); line-height: 1.6; margin-bottom: 12px; }
.rd-peoplefleet__panel { border: 1px solid rgba(255,255,255,.22); border-radius: 0; padding: 24px; }
.rd-peoplefleet__lead { font-weight: 700; margin: 4px 0 16px; color: #fff; }
.rd-peoplefleet__tags { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.rd-peoplefleet__tags li { color: var(--rd-ondark-body); border-left: 2px solid var(--rd-lime); padding-left: 12px; }
.rd-peoplefleet__loop { margin-top: 40px; background: var(--rd-paper); border-radius: 24px; padding: 24px; }
.rd-peoplefleet__loop .ll-loop-figure { max-width: 1000px; margin: 0 auto; }

/* About: Life at LimeLight two-col */
.rd-lifeat__inner { display: grid; grid-template-columns: 1fr 1fr; gap: 44px; align-items: center; }
@media (max-width: 900px) { .rd-lifeat__inner { grid-template-columns: 1fr; gap: 24px; } }
.rd-lifeat__media img { width: 100%; border-radius: 0; object-fit: cover; }
.rd-lifeat__body h2 { font-size: clamp(26px, 3.6vw, 40px); margin: 8px 0 14px; }
.rd-lifeat__body p { color: var(--rd-ondark-body); line-height: 1.6; margin-bottom: 12px; }

/* Services/SEO: featured head + pull quote */
.rd-featured__head { max-width: 60ch; margin-bottom: 32px; }
/* Breathing room where a three-up block runs straight into the Featured work section. */
.rd-priorities + .rd-featured { padding-top: clamp(48px, 6vw, 88px); }
/* Space under a standalone quote so it does not butt against the next section's eyebrow. */
.rd .rd-testimonials { padding-bottom: clamp(40px, 5vw, 72px); }
/* Breadcrumb eyebrow: the separator sits outside the link, so the whole line takes the
   warm white rather than inheriting the lime .rd-eyebrow colour. */
.rd .rd-eyebrow--crumb { color: var(--rd-paper); }
.rd-featured__head h2 { font-size: clamp(26px, 3.6vw, 42px); margin: 8px 0 12px; }
/* .rd-pullquote is retired. It was a second, quieter quote treatment used on one page - no
   quote marks and a 28px cap against .rd-quote-single's 34 - which is what made the services
   page's quote look like a different component from the one on the homepage. That page now uses
   .rd-quote-single like everything else.
   Case-study quote sections: the pages have no .rd of their own, so the block sits inside a local
   .rd wrapper and needs its own vertical rhythm, the same arrangement the closing CTA uses. */
.rd-cs-quote { padding-block: clamp(56px, 7vw, 104px); background: var(--rd-navy); }

/* SEO: WHAT WE IMPROVE grid (bordered cards on navy) */
.rd-improve__head { max-width: 60ch; }
.rd-improve__head h2 { font-size: clamp(26px, 3.6vw, 42px); margin: 8px 0 10px; }
.rd-improve__grid { margin-top: 40px; display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; }
@media (max-width: 800px) { .rd-improve__grid { grid-template-columns: 1fr; } }
.rd-improve__card { border: 1px solid rgba(255,255,255,.22); border-radius: 0; padding: 26px; }
.rd-improve__card h3 { font-size: 20px; margin: 6px 0 10px; color: #fff; }
.rd-improve__card p { color: var(--rd-ondark-body); line-height: 1.55; }
.rd-improve__get { margin-top: 12px; font-size: 14px; }
.rd-improve__get span { display: block; font-weight: 700; color: var(--rd-lime); text-transform: uppercase; letter-spacing: .08em; font-size: 12px; margin-bottom: 4px; }
.rd-improve__note { margin-top: 24px; color: var(--rd-ondark-body); font-style: italic; }

/* SEO: FAQ accordion */
.rd-faq__head { max-width: 60ch; margin-bottom: 24px; }
.rd-faq__head h2 { font-size: clamp(26px, 3.6vw, 42px); margin-top: 8px; }
.rd-faq__item { border-top: 1px solid rgba(255,255,255,.2); padding: 8px 0; }
.rd-faq__item summary { cursor: pointer; font-weight: 700; padding: 12px 0; list-style: none; display: flex; justify-content: space-between; align-items: center; min-height: 44px; color: #fff; }
.rd-faq__item summary::-webkit-details-marker { display: none; }
.rd-faq__item summary::after { content: "+"; color: var(--rd-lime); font-size: 22px; margin-left: 16px; }
.rd-faq__item[open] summary::after { content: "\2212"; }
.rd-faq__item summary:focus-visible { outline: 2px solid var(--rd-lime); outline-offset: 3px; }
.rd-faq__item p { color: var(--rd-ondark-body); line-height: 1.6; padding: 0 0 14px; max-width: 80ch; }

/* =====================================================================
   Two-column section header (split head). Eyebrow spans the top row; the
   heading (left) and the intro copy (right) sit in the SAME second row, so
   the right copy top-aligns with the first heading line, below the eyebrow.
   Stacks in source order on mobile. Used on every split section, all pages.
   ===================================================================== */
.rd-splithead { display: grid; grid-template-columns: 1fr 1fr; column-gap: 56px; align-items: start; }
.rd-splithead > .rd-eyebrow { grid-column: 1 / -1; grid-row: 1; }
.rd-splithead > .rd-splithead__title { grid-column: 1; grid-row: 2; font-size: clamp(28px, 4vw, 46px); }
.rd-splithead > .rd-splithead__body { grid-column: 2; grid-row: 2; }
.rd-splithead__body p { font-size: 18px; line-height: 1.6; max-width: 52ch; margin-bottom: 14px; }
.rd-splithead__body p:last-child { margin-bottom: 0; }
.rd-splithead__body .rd-intro__kicker { font-weight: 700; }
.rd-people__head { margin-bottom: 40px; }
.rd-expect .rd-panel .rd-expect__grid { margin-top: 44px; }
@media (max-width: 800px) {
  .rd-splithead { grid-template-columns: 1fr; row-gap: 14px; }
  .rd-splithead > .rd-eyebrow, .rd-splithead > .rd-splithead__title, .rd-splithead > .rd-splithead__body { grid-column: 1; grid-row: auto; }
}
/* light-panel variant */
.rd-panel .rd-splithead__title { color: var(--rd-navy); }
.rd-panel .rd-splithead__body p { color: var(--rd-onlight-body); }

/* Fleet hero: blue->navy gradient; lead LEFT, CTA to the RIGHT on desktop */
.rd-fleet-page .rd-hero { background: linear-gradient(180deg, #263D60, #11182E); }
.rd-fleet-page .rd-hero__row { display: grid; grid-template-columns: 1.35fr 1fr; column-gap: 40px; align-items: center; margin-top: 28px; }
.rd-fleet-page .rd-hero__row .rd-hero__lead { margin-top: 0; }
.rd-fleet-page .rd-hero__row .rd-hero__cta { margin-top: 0; justify-self: end; }
@media (max-width: 800px) { .rd-fleet-page .rd-hero__row { grid-template-columns: 1fr; row-gap: 22px; } .rd-fleet-page .rd-hero__row .rd-hero__cta { justify-self: start; } }

/* About: EXPECT + PEOPLE+FLEET are warm-white panels (match reference) */
.rd-about .rd-expect .rd-panel .rd-expect__card { border: 1px solid rgba(17,24,46,.12); }
.rd-about .rd-expect__card h3 { color: var(--rd-navy); }
.rd-about .rd-expect__card p { color: var(--rd-onlight-body); }
.rd-about .rd-peoplefleet .rd-panel .rd-peoplefleet__inner { }
.rd-about .rd-peoplefleet .rd-panel h2 { color: var(--rd-navy); }
.rd-about .rd-peoplefleet .rd-panel p { color: var(--rd-onlight-body); }
.rd-about .rd-peoplefleet .rd-panel .rd-eyebrow { color: var(--rd-green); }
.rd-about .rd-peoplefleet .rd-panel .rd-cta { color: var(--rd-green); }
.rd-about .rd-peoplefleet .rd-panel .rd-peoplefleet__panel { border: 1px solid rgba(17,24,46,.14); }
.rd-about .rd-peoplefleet .rd-panel .rd-peoplefleet__lead { color: var(--rd-navy); }
.rd-about .rd-peoplefleet .rd-panel .rd-peoplefleet__tags li { color: var(--rd-onlight-body); border-left-color: var(--rd-green); }
.rd-about .rd-peoplefleet .rd-panel .rd-peoplefleet__loop { background: transparent; padding: 0; }

/* =====================================================================
   Service DETAIL template (r226): gradient hero, warm-white capability panel,
   two-column People+Fleet+Loop panel, warm-white tech-partnerships panel.
   ===================================================================== */
/* Approved "opening" band: one full-bleed gradient covering BOTH the hero and the
   primary case study, with the content held in a 1200px inner container. The hero and
   case markup sit transparent inside it so the single gradient runs the whole band. */
.rd-svc-opening { background: linear-gradient(180deg, #263D60, #11182E); padding: 0 !important; }
.rd-svc-opening__inner { width: min(1200px, 100% - 48px); margin-inline: auto; }
.rd-svc-opening__case { padding-top: clamp(8px, 2vw, 24px); padding-bottom: clamp(56px, 8vw, 104px); }
/* Keep the primary photo at the approved height (662px at 1280) across all six, with
   proper cropping, independent of the wider container. */
.rd-svc-opening .rd-workband__media img { aspect-ratio: auto; height: clamp(360px, 51.75vw, 662px); }
/* Service hero headline fills the container (no ch clamp) so approved line breaks hold. */
.rd-service-page .rd-hero__title { max-width: none; }
/* Desktop: lead copy on the left, CTA to its right; stacks on narrow screens. */
.rd-service-page .rd-hero__row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; column-gap: clamp(32px, 5vw, 72px); margin-top: 28px; }
/* Category / author archives: same heading-left, CTA-far-right treatment the service and
   fleet heroes use, so "All articles" sits where every other hero CTA on the site sits. */
.rd-blog .rd-hero__row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; column-gap: clamp(32px, 5vw, 72px); margin-top: 20px; }
.rd-blog .rd-hero__row .rd-hero__lead { margin-top: 0; }
.rd-blog .rd-hero__row .rd-hero__cta { margin: 0; justify-self: end; }
@media (max-width: 820px) { .rd-blog .rd-hero__row { grid-template-columns: 1fr; row-gap: 16px; } .rd-blog .rd-hero__row .rd-hero__cta { justify-self: start; } }
.rd-service-page .rd-hero__row .rd-hero__lead { margin-top: 0; }
.rd-service-page .rd-hero__row .rd-hero__cta { margin-top: 0; justify-self: end; }
@media (max-width: 820px) { .rd-service-page .rd-hero__row { grid-template-columns: 1fr; row-gap: 22px; } .rd-service-page .rd-hero__row .rd-hero__cta { justify-self: start; } }

/* WHAT WE WORK ON: warm-white panel, 2-column capability list with hairlines */
.rd-capwork__head h2 { font-size: clamp(26px, 3.6vw, 42px); color: var(--rd-navy); }
.rd-capwork__grid { margin-top: 40px; display: grid; grid-template-columns: 1fr 1fr; column-gap: 56px; row-gap: 0; }
@media (max-width: 800px) { .rd-capwork__grid { grid-template-columns: 1fr; } }
.rd-capcard { border-top: 1px solid rgba(17,24,46,.18); padding: 22px 0; }
.rd-capcard h3 { font-size: 19px; color: var(--rd-navy); margin-bottom: 8px; }
.rd-capcard p { color: var(--rd-onlight-body); line-height: 1.55; }
/* Restored capability outcome line ("What you get"), dark-green label on the warm-white panel. */
.rd-capcard__get { margin-top: 12px; font-size: 14px; color: var(--rd-onlight-body); }
.rd-capcard__get span { display: block; font-weight: 700; color: var(--rd-green); text-transform: uppercase; letter-spacing: .08em; font-size: 12px; margin-bottom: 4px; }
.rd-capwork__note { margin-top: 32px; font-size: 15px; color: var(--rd-onlight-body); max-width: 70ch; }

/* People + Fleet + Loop (service pages): warm-white panel, two-col intro then Loop */
.rd-fleetloop .rd-panel .rd-splithead__body .rd-cta { color: var(--rd-green); }
.rd-fleetloop__loop h3 { color: var(--rd-navy); font-size: clamp(22px, 3vw, 30px); margin-bottom: 24px; }

/* TECH PARTNERSHIPS: warm-white panel, copy left, dark logos right */
.rd-techpartners__inner { display: grid; grid-template-columns: 1.1fr 1fr; gap: 40px; align-items: center; }
@media (max-width: 800px) { .rd-techpartners__inner { grid-template-columns: 1fr; gap: 28px; } }
.rd-techpartners__copy h2 { color: var(--rd-navy); font-size: clamp(24px, 3.2vw, 36px); margin: 8px 0 12px; }
.rd-techpartners__copy p { color: var(--rd-onlight-body); }
.rd-techpartners__logos { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 26px 40px; }
.rd-techpartners__logos img { height: 30px; width: auto; object-fit: contain; }
/* Optical sizing. Every one of these files is pure black ink on transparency, but each carries a
   different amount of baked-in empty margin, so a single 30px frame height rendered the marks at
   anywhere from 19px to 30px of actual ink - Meta and LinkedIn are cropped tight and so read much
   larger than the rest. Heights below are derived from each file's measured ink height so the
   wordmarks all land on ~21px of ink. The two certification badges (Google Partner, Microsoft
   Advertising) keep the 30px frame: a bordered badge is a box, not a wordmark, and matching its
   box to a cap height shrinks it out of legibility. */
.rd-techpartners__logos img[src*="partner-dark-scayle"]       { height: 28px; }
.rd-techpartners__logos img[src*="partner-dark-klaviyo"]      { height: 23px; }
.rd-techpartners__logos img[src*="partner-dark-shopify-plus"] { height: 33px; }
.rd-techpartners__logos img[src*="partner-dark-salsify"]      { height: 31px; }
.rd-techpartners__logos img[src*="partner-dark-meta"]         { height: 21px; }
.rd-techpartners__logos img[src*="partner-dark-linkedin"]     { height: 21px; }
@media (max-width: 800px) { .rd-techpartners__logos { justify-content: flex-start; } }
.rd-featured__grid--two { grid-template-columns: repeat(2, 1fr) !important; }
/* Two cards divide evenly, so this variant keeps both columns through the tablet range and only
   stacks once a single column is genuinely narrow. */
@media (max-width: 900px) { .rd-featured__grid--two { grid-template-columns: repeat(2, 1fr) !important; max-width: none; margin: 0; } }
@media (max-width: 620px) { .rd-featured__grid--two { grid-template-columns: 1fr !important; max-width: 460px; margin: 0 auto; } }

/* =====================================================================
   Content pages batch (r226): Careers, Contact, Client Support, Blog, Featured Work.
   ===================================================================== */
/* Full-bleed opening: the hero section spans the viewport and carries the gradient,
   while its content stays in a 1200px-centred column via padding (no inset rectangle
   with navy side borders, no 100vw scrollbar overflow). */
.rd-ghero .rd-hero { max-width: none; padding-inline: max(24px, calc(50% - 600px)); background: linear-gradient(180deg, #263D60, #11182E); }
.rd .rd-btn--dark { background: #1a2542; color: #fff; border: 1px solid rgba(255,255,255,.16); }
.rd .rd-btn--dark:hover { background: #223056; filter: none; }
.rd-hero__lead a, .rd-closing__lead a { color: #fff; text-decoration: underline; text-underline-offset: 3px; }

/* Careers */
.rd-careers-photos { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.rd-careers-photos img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; border-radius: 0; }
@media (max-width: 700px) { .rd-careers-photos { grid-template-columns: 1fr; } }
.rd-openings { list-style: none; margin: 36px 0 0; padding: 0; }
.rd-opening { border: 1px solid rgba(17,24,46,.16); }
.rd-opening a { display: flex; justify-content: space-between; align-items: center; gap: 20px; padding: 22px 24px; text-decoration: none; color: var(--rd-navy); }
.rd-opening__role { font-weight: 700; display: block; }
.rd-opening__meta { color: var(--rd-onlight-body); font-size: 14px; }
.rd-opening .rd-cta { color: var(--rd-green); }
.rd-values__grid { margin-top: 40px; display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
@media (max-width: 700px) { .rd-values__grid { grid-template-columns: 1fr; } }
.rd-value { background: var(--rd-beige); border-radius: 8px; padding: 26px 24px; }
.rd-value h3 { color: var(--rd-navy); margin-bottom: 8px; }
.rd-value p { color: var(--rd-onlight-body); line-height: 1.55; }
.rd-benefits__grid { margin-top: 40px; display: grid; grid-template-columns: 1fr 1fr; column-gap: 56px; row-gap: 0; }
@media (max-width: 700px) { .rd-benefits__grid { grid-template-columns: 1fr; } }
.rd-benefit { border-top: 1px solid rgba(255,255,255,.2); padding: 22px 0; }
.rd-benefit h3 { color: #fff; margin-bottom: 8px; }
.rd-benefit p { color: var(--rd-ondark-body); line-height: 1.55; }

/* Contact */
.rd-contact-hero__inner { display: grid; grid-template-columns: 1.05fr 1fr; gap: 48px; align-items: start; }
@media (max-width: 900px) { .rd-contact-hero__inner { grid-template-columns: 1fr; gap: 32px; } }
.rd-contact-hero__copy .rd-hero__lead { max-width: 34ch; }
.rd-contact-talk { margin-top: 32px; padding-top: 24px; border-top: 1px solid rgba(255,255,255,.18); }
.rd-contact-talk a { color: #fff; }
.rd-contact-talk__phone { font-size: 20px; font-weight: 700; margin-top: 6px; }
/* Source panel: single upper-right curve (64px tablet/desktop, 40px mobile), other corners
   square; 40px padding desktop, 24px horizontal / 32px vertical on mobile. */
.rd-form-panel { background: var(--rd-paper); border-radius: 0 64px 0 0; padding: 40px; }
@media (max-width: 700px) { .rd-form-panel { border-radius: 0 40px 0 0; padding: 32px 24px; } }
.rd-form-panel .rd-eyebrow { color: var(--rd-green); }
/* Light-surface heading guard: .rd main h1..h3 forces white for the navy hero, which
   outspecifies a single-class panel rule and turned this warm-white panel's H2 white.
   Scope with .rd + the panel class so nested light-surface headings stay navy. */
.rd .rd-form-panel h2 { color: var(--rd-navy); font-weight: 600; font-size: 36px; margin-bottom: 24px; }
@media (max-width: 1024px) { .rd .rd-form-panel h2 { font-size: 32px; } }
@media (max-width: 700px) { .rd .rd-form-panel h2 { font-size: 28px; } }
.rd .rd-form-panel h1, .rd .rd-form-panel h3, .rd .rd-form-panel legend { color: var(--rd-navy); }
.rd-form__field { margin-bottom: 16px; }
.rd-form__field label { display: block; font-size: 13px; font-weight: 600; color: var(--rd-navy); margin-bottom: 6px; }
.rd-form__field input, .rd-form__field textarea { width: 100%; border: 1px solid rgba(17,24,46,.25); border-radius: 4px; padding: 12px 14px; font: 400 15px var(--rd-font); background: #fff; color: var(--rd-navy); }
.rd-form__field textarea { min-height: 96px; resize: vertical; }
.rd-form__submit { width: 100%; background: var(--rd-navy); color: #fff; border: 0; border-radius: 4px; min-height: 52px; font: 700 16px var(--rd-font); cursor: pointer; margin-top: 8px; }
.rd-form__submit:hover { background: #0c1223; }
.rd-form__note { font-size: 12px; color: var(--rd-onlight-body); margin-bottom: 14px; }
.rd-steps__grid { margin-top: 44px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px; }
@media (max-width: 800px) { .rd-steps__grid { grid-template-columns: 1fr; gap: 24px; } }
.rd-step { border-top: 1px solid rgba(255,255,255,.2); padding-top: 18px; }
.rd-step__num { color: var(--rd-lime); font-weight: 800; margin-bottom: 8px; }
.rd-step h3 { color: #fff; font-size: 20px; margin-bottom: 8px; }
.rd-step p { color: var(--rd-ondark-body); line-height: 1.55; }
.rd-elsegrid { margin-top: 40px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px; }
@media (max-width: 800px) { .rd-elsegrid { grid-template-columns: 1fr; } }
.rd-elsecard { border-top: 1px solid rgba(17,24,46,.16); padding-top: 18px; }
.rd-elsecard h3 { color: var(--rd-navy); font-size: 19px; margin-bottom: 8px; }
.rd-elsecard p { color: var(--rd-onlight-body); line-height: 1.5; margin-bottom: 10px; }
.rd-locations { margin-top: 40px; display: grid; grid-template-columns: 1fr 1fr; gap: 40px; }
@media (max-width: 800px) { .rd-locations { grid-template-columns: 1fr; } }
.rd-loc { border-top: 1px solid rgba(255,255,255,.22); padding-top: 18px; display: grid; grid-template-columns: auto 1fr; gap: 20px; align-items: start; }
.rd-loc__tag { color: var(--rd-lime); font-weight: 800; font-size: 28px; }
.rd-loc__name { color: #fff; font-weight: 700; }
.rd-loc p { color: var(--rd-ondark-body); margin: 6px 0 10px; }

/* Blog + Featured Work listing controls */
/* Listing controls, quiet. These sat as two filled green buttons, a white select and a pill
   field above the first card - four filled shapes reading as loudly as the header's Contact Us,
   which is the page's actual call to action. They are now underlined fields on one hairline row:
   nothing is removed, it is just drawn at text weight. Shared by the blog, the work listing and
   the guides hub, so all three match. */
.rd-listing-controls { display: flex; flex-wrap: wrap; gap: 16px 32px; align-items: center; justify-content: space-between; margin-bottom: 40px; }
.rd-search { display: flex; align-items: center; gap: 10px; border-bottom: 1px solid rgba(255,255,255,.30); padding: 8px 2px; min-width: min(280px, 100%); transition: border-color .2s ease; }
.rd-search:focus-within { border-bottom-color: var(--rd-lime); }
.rd-search input { flex: 1; min-width: 0; width: auto; border: 0; border-radius: 0; padding: 0; background: transparent; color: #fff; font: 400 15px var(--rd-font); }
.rd-search input:focus { outline: none; }
.rd-search input::placeholder { color: var(--rd-ondark-quiet, rgba(255,255,255,.55)); }
/* Icon-only submit. The accessible name comes from aria-label on the button; pressing Enter in
   the field submits too, so the icon is a convenience rather than the only way through. */
.rd-search__btn { background: none; border: 0; padding: 2px; display: grid; place-items: center; cursor: pointer; }
.rd-search__btn svg { width: 18px; height: 18px; fill: none; stroke: var(--rd-ondark-body, #D7DBE4); stroke-width: 2; stroke-linecap: round; transition: stroke .2s ease; }
.rd-search__btn:hover svg { stroke: var(--rd-lime); }
.rd-search__btn:focus-visible { outline: 2px solid var(--rd-lime); outline-offset: 3px; border-radius: 3px; }

.rd-catselect { display: flex; align-items: center; gap: 12px; position: relative; border-bottom: 1px solid rgba(255,255,255,.30); padding: 8px 2px; }
/* The label is redundant beside a select that reads "All categories"; kept for screen readers. */
.rd-catselect label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.rd-catselect select { appearance: none; background: transparent; color: #fff; border: 0; border-radius: 0; padding: 0 20px 0 0; font: 400 15px var(--rd-font); cursor: pointer; }
.rd-catselect select:focus { outline: none; }
.rd-catselect:focus-within { border-bottom-color: var(--rd-lime); }
.rd-catselect option { background: var(--rd-navy); color: #fff; }
.rd-catselect::after { content: ""; position: absolute; right: 3px; top: 50%; width: 7px; height: 7px; border-right: 1.5px solid var(--rd-ondark-body, #D7DBE4); border-bottom: 1.5px solid var(--rd-ondark-body, #D7DBE4); transform: translateY(-70%) rotate(45deg); pointer-events: none; }
.rd-worklist { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px 24px; }
@media (max-width: 900px) { .rd-worklist { grid-template-columns: 1fr; max-width: 460px; margin: 0 auto; } }
.rd-worklist li[hidden] { display: none; }
/* Robust grid swap for the Blog search: an author display:grid otherwise overrides the
   [hidden] attribute, so the hidden grid stays visible and keyboard-focusable. */
.rd-worklist[hidden] { display: none !important; }
.rd-worklist .rd-work-card__media { aspect-ratio: 4 / 5; border-radius: 0; }
.rd-worklist .rd-work-card__desc { display: block; margin: 6px 0 12px; color: var(--rd-ondark-body); font-size: 15px; line-height: 1.45; }
.rd-blog-date { display: block; font-size: 13px; color: var(--rd-ondark-body); margin-bottom: 8px; }
.rd-subscribe-form { display: flex; flex-direction: column; gap: 12px; max-width: 420px; }
.rd-subscribe-form input { border: 1px solid rgba(17,24,46,.25); border-radius: 4px; padding: 12px 14px; font: 400 15px var(--rd-font); }
.rd-subscribe-form button { align-self: flex-start; background: var(--rd-lime); color: var(--rd-navy); border: 0; border-radius: 4px; padding: 12px 26px; font: 700 15px var(--rd-font); cursor: pointer; }
.rd-artcard__title { display: block; font-size: clamp(18px, 2vw, 22px); font-weight: 700; line-height: 1.2; color: #fff; margin: 0 0 12px; }
.rd-worklist .rd-work-card:hover .rd-artcard__title { color: var(--rd-lime); }
.rd-listing-empty { color: var(--rd-ondark-body); font-size: 16px; padding: 20px 0; }

/* =====================================================================
   Typography (r226) — exact desktop sizes/weights measured from the approved
   preview, with responsive scaling (clamp caps at the approved 1280px value).
   Weights: base 600; hero + tech-partnerships 700; top statement headings 500.
   Selectors use `.rd .class` (0,2,0) so they beat the base `.rd h1,h2,h3` weight.
   ===================================================================== */
.rd main h1, .rd main h2, .rd main h3 { font-weight: 600; line-height: 1.08; }

/* hero: 104 / 700 / 1.02 */
.rd .rd-hero__title { font-size: clamp(44px, 8.4vw, 104px); font-weight: 700; line-height: 1.02; letter-spacing: 0.5px; }

/* top statement headings: 52 / 500 (Home intro + clients) */
/* Home's 52/500 statement intro is a Home-only exception; other pages use the 48/600 base
   so it does not leak into Careers, Contact, About or Fleet. */
.rd-home .rd-intro .rd-splithead__title { font-size: clamp(32px, 4.2vw, 52px); font-weight: 500; }
.rd .rd-clients__title { font-size: clamp(32px, 4.2vw, 52px); font-weight: 500; }

/* section headings: 48 / 600 */
.rd .rd-services__title,
.rd .rd-workband__body h2,
.rd .rd-capwork__head h2,
.rd .rd-featured__head h2,
.rd .rd-improve__head h2,
.rd .rd-faq__head h2,
.rd .rd-expect__head h2,
.rd .rd-people__title,
.rd .rd-lifeat__body h2,
.rd .rd-peoplefleet__body h2,
.rd .rd-splithead__title { font-size: clamp(30px, 4vw, 48px); font-weight: 600; }

/* "More capacity" fleet headings: 56 / 600 */
.rd .rd-fleetloop__fleet h2,
.rd .rd-fleet__title,
.rd .rd-fleetloop .rd-splithead__title { font-size: clamp(34px, 4.6vw, 56px); font-weight: 600; }

/* 36 / 600 headings */
.rd .rd-fleetloop__loop h3,
.rd .rd-loop__title,
.rd .rd-priorities__title,
.rd .rd-closing__title,
.rd .rd-insights__title { font-size: clamp(26px, 3vw, 36px); font-weight: 600; }

/* 40 / 700 tech partnerships */
.rd .rd-partners__title,
.rd .rd-techpartners__copy h2 { font-size: clamp(28px, 3.3vw, 40px); font-weight: 700; }

/* 28 / 600 card titles */
.rd .rd-service h3,
.rd .rd-service--card h3,
.rd .rd-priority h3,
.rd .rd-expect__card h3,
.rd .rd-improve__card h3,
.rd .rd-capcard h3 { font-size: clamp(22px, 2.4vw, 28px); font-weight: 600; }

/* 26 / 600 article titles */
.rd .rd-insight__title { font-size: clamp(20px, 2.2vw, 26px); font-weight: 600; }

@media (prefers-reduced-motion: reduce) {
  .rd-work-card__media img, .rd-work-card .rd-arrow, .rd-cta .rd-arrow, .rd-team-card .rd-arrow { transition: none !important; }
  .rd-arrow { animation: none !important; }
  .rd-work-card:hover .rd-work-card__media img { transform: none; }
}

/* =====================================================================
   Technology partner pages (r226) — navy, partner logo chip, "what we do"
   eyebrow rows, shared Fleet panel + closing CTA. Scoped to .rd-partner so
   no undesigned page is affected. Measured from the approved preview:
   hero 104/700 warm-white (+partner lime), section title 44/600,
   row heading 26/600, closing 48/600, warm-white logo chip radius 4 pad 18/24.
   ===================================================================== */
.rd-partner .rd-phero { padding-bottom: 96px; }
.rd-partner .rd-phero__logo { display: inline-block; margin: 0 0 32px; }
.rd-partner .rd-phero__logo img { display: block; height: 64px; width: auto; max-width: 240px;
  /* Every partner mark in /assets/img/r226/partner-logos/ is a flat black silhouette on a real
     alpha channel, so this resolves to pure #fff at the original alpha - a reversed knockout,
     which is the treatment partner brand guidelines specify for dark grounds. It also means no
     second set of white files to keep in sync when a partner refreshes their mark. */
  filter: brightness(0) invert(1); }
.rd-partner .rd-phero__title { color: #F7F6F0; margin: 0; max-width: 15ch; }
.rd-partner .rd-phero__row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 32px 48px; margin-top: 28px; }
.rd-partner .rd-phero__row .rd-hero__lead { max-width: 620px; margin: 0; }
.rd-partner .rd-phero__cta { margin: 0; }
.rd-partner .rd-phero__cta--solo { margin-top: 32px; }

.rd-partner .rd-pwork { padding-top: 8px; padding-bottom: 40px; }
.rd-partner .rd-pwork__title { color: #F7F6F0; font-size: clamp(28px, 4vw, 44px); font-weight: 600; line-height: 1.1; margin: 0 0 20px; }
/* Eyebrow spans row 1; the heading (col 1) and body (col 2) share row 2 and are
   top-aligned, so the h3 first line aligns with the body first line (guide rule). */
.rd-partner .rd-pwork__row { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); column-gap: 48px; row-gap: 12px; padding: 28px 0; border-top: 1px solid rgba(255, 255, 255, 0.16); align-items: start; }
.rd-partner .rd-pwork__row > .rd-eyebrow { grid-column: 1 / -1; grid-row: 1; margin-bottom: 0; }
.rd-partner .rd-pwork__row > .rd-pwork__h { grid-column: 1; grid-row: 2; color: #F7F6F0; font-size: clamp(20px, 2.4vw, 26px); font-weight: 600; line-height: 1.2; margin: 0; }
.rd-partner .rd-pwork__row > .rd-pwork__body { grid-column: 2; grid-row: 2; }
.rd-partner .rd-pwork__body p { color: var(--rd-ondark-body); font-size: 16px; line-height: 1.62; margin: 0; }
@media (max-width: 820px) {
  .rd-partner .rd-pwork__row { grid-template-columns: 1fr; }
  .rd-partner .rd-pwork__row > .rd-pwork__h, .rd-partner .rd-pwork__row > .rd-pwork__body { grid-column: 1; grid-row: auto; }
}

/* Partner Fleet panel uses the plain .rd-panel splithead (48/600), not the
   home rd-fleetloop variant (56/600). Closing heading is 48 on these pages. */
.rd-partner .rd-fleet-sec { padding: 40px 0; }
.rd-partner .rd-closing__title { font-size: clamp(30px, 4.4vw, 48px); }

@media (max-width: 820px) {
  .rd-partner .rd-phero { padding-bottom: 64px; }
  .rd-partner .rd-phero__row { align-items: flex-start; }
  .rd-partner .rd-pwork__row { grid-template-columns: 1fr; gap: 12px; }
}

/* Subtle navy pointer glow (fine pointer only; the script also gates on device +
   reduced-motion, and never replaces the cursor). Screen-blends a soft light over
   the navy; over warm-white panels it is effectively invisible. */
.rd-pointer-glow { position: fixed; top: 0; left: 0; width: 480px; height: 480px; margin: -240px 0 0 -240px; border-radius: 50%; pointer-events: none; z-index: 1; opacity: 0; transition: opacity .35s ease; background: radial-gradient(circle, rgba(70, 108, 166, 0.18) 0%, rgba(38, 61, 96, 0.09) 38%, rgba(17, 24, 46, 0) 70%); mix-blend-mode: screen; }
@media (prefers-reduced-motion: reduce) { .rd-pointer-glow { display: none !important; } }
@media (hover: none), (pointer: coarse) { .rd-pointer-glow { display: none !important; } }

/* =====================================================================
   Approved r226 warm-white panel geometry (measured at 1280 against the Data and
   Home references). Each designed panel keeps ONE 96px corner and an intended width
   within the 1280 content frame; the tech-partner band stays a full-width square.
   Scoped per context so unrelated .rd-panel cards and rectangular bands are untouched.
   ===================================================================== */
.rd-service-page .rd-capwork .rd-wrap,
.rd-service-page .rd-fleetloop .rd-wrap,
.rd-service-page .rd-techpartners .rd-wrap,
.rd-home .rd-services-section .rd-wrap,
.rd-home .rd-fleetloop .rd-wrap { max-width: none; padding: 0; }

/* Service pages: capability inset — x24, w1232, top-right 96, vertical padding 96 */
.rd-service-page .rd-capwork .rd-panel { width: min(1232px, 100% - 48px); margin-inline: auto; border-radius: 0 96px 0 0; padding: 96px 40px; }
/* Service pages: Fleet + LOOP inset — x24, w1232, top-left 96 (LOOP continues square) */
.rd-service-page .rd-fleetloop .rd-panel { width: min(1232px, 100% - 48px); margin-inline: auto; border-radius: 96px 0 0 0; padding: 96px 40px; }
/* Fleet split columns at the approved 536/536 with an 80px gap (content width 1152 after 40px inset). */
.rd-service-page .rd-fleetloop .rd-splithead { column-gap: 80px; }
/* Service pages: technology partners — full-width x0, w1280, square, vertical padding 80 */
/* The warm surface runs the full page width; the content stays on the 1200px column via the
   inline padding, which is the same max(gutter, 50% - half-column) formula the careers
   openings panel uses. It was capped at 1280 and centred, which left a navy margin either
   side of the band on anything wider. */
.rd-service-page .rd-techpartners .rd-panel { width: 100%; max-width: none; margin-inline: 0; border-radius: 0; padding: 80px max(40px, calc(50% - 600px)); }
/* Full-width service sections: content at the 40px gutter, 1200px inner width (heading x40). */
.rd-service-page .rd-featured.rd-wrap { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
.rd-service-page .rd-featured__grid { column-gap: 24px; }
.rd-service-page .rd-techpartners__inner { max-width: 1200px; margin-inline: auto; }

/* ===== r226 work-card geometry (turn 26) =====================================
   Ordinary related / listing cards: portrait 4:5 photos, 24px column gaps, 1200px row at
   x40, semantic H3 client names 24/600. Home has its own wider 3:4 variant; the service
   PRIMARY highlight (rd-svc-opening) keeps its 662px photo height untouched. */
/* Work listing row at the approved 1200px width (x40 at 1280) -> three 384px cards. */
.rd-work .rd-worklist-sec.rd-wrap { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
/* Main Services related cards -> same 1200/x40 + 24px column gap as the detail pages. */
.rd-services .rd-featured.rd-wrap { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
.rd-services .rd-featured__grid { column-gap: 24px; }
/* Ordinary related cards (main Services + six detail pages): portrait 4:5. */
.rd-service-page .rd-featured .rd-work-card__media,
.rd-services .rd-featured .rd-work-card__media { aspect-ratio: 4 / 5; }

/* Home 3-card row. This was a full-bleed variant with 12px gutters; it now sits on the same
   1200px column as the 1x3 on the service pages and the Work listing, so the block lines up with
   everything above and below it. The gutter goes with the width - a 12px gap made sense edge to
   edge, but inside the column it reads as cramped next to every other three-card row, which uses
   24. The 3:4 photo crop and the 28px brand name are unchanged. */
.rd-home .rd-featured.rd-wrap { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding: clamp(40px, 5vw, 56px) 0; }
.rd-home .rd-featured__grid { column-gap: 24px; row-gap: 24px; }
/* Mobile only. The featured grid collapses to one column at 900px, so row-gap becomes the
   space between a card's "View case study" link and the next card's image - 12px was too
   tight to read as a break between cases. Desktop columns keep their 12px. */
@media (max-width: 900px) { .rd-home .rd-featured__grid { row-gap: 32px; } }
/* Mobile only. On narrow screens the partner logos wrap close under the "From our team"
   eyebrow; give the insights section its own top padding there so the two blocks separate. */
/* Air above the "From our team" eyebrow so the insights block separates from the partner
   logos. Replaces an earlier mobile-only rule; the clamp lands on the same 28px there. */
.rd-home .rd-insights { padding-top: clamp(28px, 4vw, 56px); }
.rd-home .rd-featured .rd-work-card__media { aspect-ratio: 3 / 4; }
.rd-home .rd-featured .rd-work-card__brand { font-size: 28px; }

/* Home Martin Dingman highlight. Was a full-width half-photo split with the photo running to the
   page edge and the copy carrying its own interior padding; it now sits on the same 1200px column
   as the equivalent band on the service and Fleet pages. With a real column gap between the photo
   and the copy, the body's interior padding is no longer doing anything but double-indenting the
   text, and the photo no longer needs to stretch to the row height - so both revert to the shared
   component. The 4:5 crop stays: it is shorter than the component's 3:4, which is what Brandee
   asked for on the wide-screen review. */
.rd-home .rd-workband .rd-wrap { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
.rd-home .rd-workband__media img { aspect-ratio: 4 / 5; }
/* Primary case grid: approved 459.2/660.8 split with an 80px gap inside the 1200px band. */
.rd-svc-opening__case { grid-template-columns: 459.2fr 660.8fr; column-gap: 80px; }
/* Mobile: the primary-case band must stack (this non-media rule was overriding the base
   .rd-workband__inner 1-column mobile rule and caused horizontal overflow on narrow widths). */
@media (max-width: 900px) { .rd-svc-opening__case { grid-template-columns: 1fr; column-gap: 0; } }

/* Home: services — full-width x0, w1280, top-right 96, padding 80/64 */
.rd-home .rd-services-section .rd-panel { width: min(1280px, 100%); margin-inline: auto; border-radius: 0 96px 0 0; padding: 80px 64px; }
/* Home: Fleet + LOOP group — x48, w1184, top-left 96 (LOOP is the square continuation) */
.rd-home .rd-fleetloop .rd-panel { width: min(1184px, 100% - 96px); margin-inline: auto; border-radius: 96px 0 0 0; padding: 80px 64px; }

/* Partner pages: apply the shared Fleet motif — x24, w1232, top-left 96 curve only,
   square other corners, 96px vertical padding, content inset 40px (heading x64). The
   partners' 44/26 heading sizes are intentional and left untouched. */
.rd-partner .rd-fleet-sec .rd-wrap { max-width: none; padding: 0; }
.rd-partner .rd-fleet-sec .rd-panel { width: min(1232px, 100% - 48px); margin-inline: auto; border-radius: 96px 0 0 0; padding: 96px 40px; }
@media (max-width: 760px) {
  .rd-partner .rd-fleet-sec .rd-panel { width: min(100% - 24px, 680px); border-radius: 40px 0 0 0; padding: 64px clamp(20px, 5vw, 30px); }
}

/* ===== r226 About / Careers / Fleet panel geometry (turn 29) =================
   These three templates still used the generic 44px-all-corner .rd-panel; apply the shared
   inset-96 motif (x24/w1232 or full-bleed, single-corner 96 curve, 96 vertical padding,
   40px inner inset so panel text sits at x64) and the x40/1200 outer content gutter. */

/* --- About --- */
.rd-about .rd-expect .rd-wrap, .rd-about .rd-peoplefleet .rd-wrap { max-width: none; padding: 0; }
.rd-about .rd-expect .rd-panel { width: min(1232px, 100% - 48px); margin-inline: auto; border-radius: 0 96px 0 0; padding: 96px 40px; }
.rd-about .rd-peoplefleet .rd-panel { width: min(1232px, 100% - 48px); margin-inline: auto; border-radius: 96px 0 0 0; padding: 96px 40px; }
.rd-about .rd-expect .rd-splithead { column-gap: 80px; }
.rd-about .rd-expect__grid { column-gap: 48px; }
/* About outer sections at the x40/1200 gutter (not the Home 64px prose gutter). */
.rd-about .rd-intro, .rd-about .rd-people, .rd-about .rd-lifeat { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
@media (max-width: 760px) {
  .rd-about .rd-expect .rd-panel, .rd-about .rd-peoplefleet .rd-panel { width: min(100% - 24px, 680px); padding: clamp(40px,7vw,64px) clamp(20px,5vw,30px); }
  .rd-about .rd-expect .rd-panel { border-radius: 0 40px 0 0; }
  .rd-about .rd-peoplefleet .rd-panel { border-radius: 40px 0 0 0; }
}

/* --- Careers --- */
.rd-careers .rd-careers-photos-sec.rd-wrap { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
.rd-careers .rd-careers-photos { grid-template-columns: 1fr 1fr; gap: 24px; }
.rd-careers .rd-careers-photos img { aspect-ratio: 4 / 3; }
.rd-careers .rd-openings-sec .rd-wrap, .rd-careers .rd-values-sec .rd-wrap { max-width: none; padding: 0; }
/* Current openings: full-bleed x0/w1280, upper-right 96 curve, content at x40. */
.rd-careers .rd-openings-sec .rd-panel { width: min(1280px, 100%); margin-inline: auto; border-radius: 0 96px 0 0; padding: 96px max(40px, calc(50% - 600px)); }
/* Values: x24/w1232, upper-left 96 curve, 40px inner. */
.rd-careers .rd-values-sec .rd-panel { width: min(1232px, 100% - 48px); margin-inline: auto; border-radius: 96px 0 0 0; padding: 96px 40px; }
.rd-careers .rd-intro, .rd-careers .rd-benefits-sec { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
@media (max-width: 760px) {
  .rd-careers .rd-openings-sec .rd-panel { width: min(100% - 24px, 680px); border-radius: 0 40px 0 0; padding: 64px clamp(20px,5vw,30px); }
  .rd-careers .rd-values-sec .rd-panel { width: min(100% - 24px, 680px); border-radius: 40px 0 0 0; padding: 64px clamp(20px,5vw,30px); }
  .rd-careers .rd-careers-photos { grid-template-columns: 1fr; }
}

/* --- Fleet: connected warm-white Fleet + LOOP panel (was rd-intro + dark rd-loop, no
   warm-white surface). Mirrors the service rd-fleetloop; scoped to the Fleet page. --- */
.rd-fleet-page .rd-fleetloop .rd-wrap { max-width: none; padding: 0; }
.rd-fleet-page .rd-fleetloop .rd-panel { width: min(1232px, 100% - 48px); margin-inline: auto; border-radius: 96px 0 0 0; padding: 96px 40px; display: block; }
.rd-fleet-page .rd-fleetloop .rd-splithead { column-gap: 80px; }
.rd-fleet-page .rd-fleetloop__loop { margin-top: 56px; padding-top: 48px; border-top: 1px solid rgba(17,24,46,.14); }
.rd-fleet-page .rd-fleetloop__loop h3 { color: var(--rd-navy); font-size: clamp(20px,2.2vw,24px); font-weight: 600; margin-bottom: 24px; }
.rd-fleet-page .rd-fleetloop .rd-splithead__title { font-size: clamp(30px,4vw,48px); font-weight: 600; }
/* Fleet MD highlight: page-specific case card -- photo 440x550 (4:5) at x40, copy in the other
   column (not one of the six service 662px primary exceptions). */
.rd-fleet-page .rd-workband .rd-wrap { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
.rd-fleet-page .rd-workband__inner { grid-template-columns: 440px minmax(0, 1fr); gap: clamp(32px, 4vw, 72px); align-items: center; }
.rd-fleet-page .rd-workband__media img { aspect-ratio: 4 / 5; height: auto; }
@media (max-width: 760px) {
  .rd-fleet-page .rd-fleetloop .rd-panel { width: min(100% - 24px, 680px); border-radius: 40px 0 0 0; padding: clamp(40px,7vw,64px) clamp(20px,5vw,30px); }
  .rd-fleet-page .rd-workband__inner { grid-template-columns: 1fr; gap: 28px; }
}

/* Mobile: shrink gutters, padding and corner so panels never overflow. */
@media (max-width: 760px) {
  .rd-service-page .rd-capwork .rd-panel,
  .rd-service-page .rd-fleetloop .rd-panel,
  .rd-service-page .rd-techpartners .rd-panel,
  .rd-home .rd-services-section .rd-panel,
  .rd-home .rd-fleetloop .rd-panel { width: min(100% - 24px, 680px); padding: clamp(32px, 7vw, 52px) clamp(20px, 5vw, 30px); }
  .rd-service-page .rd-capwork .rd-panel,
  .rd-home .rd-services-section .rd-panel { border-radius: 0 40px 0 0; }
  .rd-service-page .rd-fleetloop .rd-panel,
  .rd-home .rd-fleetloop .rd-panel { border-radius: 40px 0 0 0; }
}

/* =====================================================================
   About + Fleet page corrections (r226). The About hero opening reuses the full-bleed
   .rd-svc-opening band; these rules add the wide heading, CTA-right-of-lead and the
   approved per-page heading exceptions (About/Fleet intro 48/600, About principle
   card titles 24/600, About closing 48/600). Home statement intro stays 52/500.
   ===================================================================== */
.rd-about .rd-hero__title { max-width: none; }
.rd-about .rd-hero__row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; column-gap: clamp(32px, 5vw, 72px); margin-top: 28px; }
.rd-about .rd-hero__row .rd-hero__lead { margin-top: 0; }
.rd-about .rd-hero__row .rd-hero__cta { margin-top: 0; justify-self: end; }
@media (max-width: 820px) { .rd-about .rd-hero__row { grid-template-columns: 1fr; row-gap: 22px; } .rd-about .rd-hero__row .rd-hero__cta { justify-self: start; } }
/* About + Fleet intro statement: 48/600 (not the Home 52/500 exception). */
.rd-about .rd-intro .rd-splithead__title,
.rd-fleet-page .rd-intro .rd-splithead__title { font-size: clamp(30px, 4vw, 48px); font-weight: 600; }
/* About principle cards: 24/600. */
.rd-about .rd-expect__card h3 { font-size: clamp(20px, 2.2vw, 24px); font-weight: 600; }
/* About closing heading: 48/600. */
.rd-about .rd-closing__title { font-size: clamp(30px, 4.2vw, 48px); }

/* =====================================================================
   Cross-template heading sizes to the approved 1280 reference (r226).
   ===================================================================== */
/* Careers: value cards 28/600, benefit cards 24/600, closing 48/600.
   ("We show up to move the needle." is handled by the 48/600 intro base.) */
.rd-careers .rd-value h3 { font-size: clamp(22px, 2.4vw, 28px); font-weight: 600; }
.rd-careers .rd-benefit h3 { font-size: clamp(20px, 2.2vw, 24px); font-weight: 600; }
.rd-careers .rd-closing__title { font-size: clamp(30px, 4.2vw, 48px); font-weight: 600; }

/* Contact: two-column form hero H1 is 86.4/700 (not the generic 104); step and
   "else" card titles 24/600. ("A useful conversation." uses the 48/600 intro base.) */
.rd-contact .rd-hero__title { font-size: clamp(40px, 6.75vw, 86.4px); font-weight: 700; }
.rd-contact .rd-step h3 { font-size: clamp(20px, 2.2vw, 24px); font-weight: 600; }
.rd-contact .rd-elsecard h3 { font-size: clamp(20px, 2.2vw, 24px); font-weight: 600; }

/* Work listing closing heading: 48/600. */
.rd-worklist-page .rd-closing__title,
body.rd-work .rd-closing__title { font-size: clamp(30px, 4.2vw, 48px); font-weight: 600; }

/* Main Services page (rd-services) to the approved 82225e08 source at 1280. Scoped so the
   six detail service pages, which passed review, keep their own sizes. */
.rd-services .rd-service--card h3 { font-size: clamp(20px, 2.2vw, 24px); font-weight: 600; }
.rd-services .rd-fleetloop .rd-splithead__title { font-size: clamp(30px, 4vw, 48px); font-weight: 600; }
.rd-services .rd-fleetloop__loop h3 { font-size: clamp(20px, 2.2vw, 24px); font-weight: 600; }
.rd-services .rd-priorities__title { font-size: clamp(30px, 4.2vw, 48px); font-weight: 600; }
.rd-services .rd-priority h3 { font-size: clamp(24px, 2.6vw, 30px); font-weight: 700; }
.rd-services .rd-closing__title { font-size: clamp(30px, 4.2vw, 48px); font-weight: 600; }
.rd-services .rd-techpartners__copy h2 { font-size: clamp(30px, 4vw, 48px); font-weight: 600; }

/* Six service DETAIL pages (rd-service-page, not main Services) to their r226 references:
   Fleet H2 48/600, subordinate "Every change..." H3 24/600, smaller technology H2 36/600.
   Turn 21 scoped these to .rd-services only; :not(.rd-services) keeps main Services intact. */
.rd-service-page:not(.rd-services) .rd-fleetloop .rd-splithead__title { font-size: clamp(30px, 4vw, 48px); font-weight: 600; }
.rd-service-page:not(.rd-services) .rd-fleetloop__loop h3 { font-size: clamp(20px, 2.2vw, 24px); font-weight: 600; }
.rd-service-page:not(.rd-services) .rd-techpartners__copy h2 { font-size: clamp(28px, 3.2vw, 36px); font-weight: 600; }

/* Blog listing/archives to ref cd039757: 1200px row at x40, 4:3 landscape 384x288 photos,
   semantic 24/600 H3 titles. (Column gap is already 24 from the shared rd-worklist rule; the
   media had picked up the Work-listing 4:5 override, so restore 4:3 here.) */
.rd-blog .rd-bloglist-sec.rd-wrap,
.rd-category .rd-bloglist-sec.rd-wrap,
.rd-author .rd-bloglist-sec.rd-wrap { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }
.rd-worklist.rd-bloglist .rd-work-card__media { aspect-ratio: 4 / 3; }
.rd-worklist.rd-bloglist .rd-artcard__title { font-size: 24px; font-weight: 600; }

/* =====================================================================
   Article / Guide / Legal / Guides-hub finish (r226). These pages render
   through the shared guide-page / blog-post-page / guides-hub partials and
   an inline legal block, so the finish is applied purely by restyling the
   existing markup classes under .rd -- no per-page body is rewritten and the
   Table of Contents, prose and related-card structure are preserved. Bodies
   read on a warm-white panel; the head is the blue->navy gradient band.
   ===================================================================== */

/* --- gradient head band (article + guide) --- */
.rd-article .bp-head,
.rd-guide .bp-head {
  background: linear-gradient(180deg, var(--rd-blue), var(--rd-navy));
  padding: clamp(64px, 9vw, 120px) 0 clamp(36px, 5vw, 64px) !important;
}
.rd-article .bp-head .container,
.rd-guide .bp-head .container { max-width: var(--rd-maxw); }
.rd-article .bp-title,
.rd-guide .bp-title {
  font-family: var(--rd-font); font-weight: 700; color: #fff;
  letter-spacing: -0.02em; line-height: 1.04;
  font-size: clamp(40px, 6.08vw, 77.76px); max-width: 18ch;
}
.rd-guide .guide-eyebrow { margin: 0 0 16px; }
.rd-guide .guide-eyebrow a {
  font-size: 12px; font-weight: 700; letter-spacing: 1.5px; line-height: 1.4;
  text-transform: uppercase; color: var(--rd-lime); text-decoration: none;
}
.rd-guide .guide-eyebrow a:hover { text-decoration: underline; }

/* article meta row (cats / date / author) on the dark band */
/* Option A: one centred line. The base .bp-meta sets flex-direction:column, which is what
   stacked these onto three rows, so it is reset here rather than inherited. */
.rd-article .bp-meta { margin-top: 22px; display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: center; gap: 8px 12px; }
.rd-article .bp-meta__sep { color: #4A566E; font-size: 13px; }
.rd-article .bp-cats { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0; }
/* Quiet caps rather than filled pills: still a link to the category archive, but it no
   longer outshouts the title and date around it. */
.rd-article .bp-cat { background: none; border: 0; padding: 0; border-radius: 0;
  color: #9AA3B4; font-size: 11.5px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  text-decoration: none; transition: color .2s ease; }
.rd-article .bp-cat + .bp-cat::before { content: "\00B7"; margin: 0 8px; color: #4A566E; letter-spacing: 0; }
.rd-article .bp-cat:hover { color: var(--rd-lime); }
.rd-article .bp-date { color: var(--rd-ondark-body); font-size: 14px; margin: 0; }
.rd-article .bp-author { display: inline-flex; align-items: center; gap: 10px; margin: 0; }
.rd-article .bp-author__avatar { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; }
.rd-article .bp-author__name { color: #fff; font-weight: 600; font-size: 14px; }

/* featured image sits at the seam of gradient head and body */
.rd-article .bp-featured,
.rd-guide .bp-featured { max-width: var(--rd-maxw); margin: clamp(28px,4vw,44px) auto 0; }
.rd-article .bp-featured img,
.rd-guide .bp-featured img { width: 100%; height: auto; border-radius: 20px; display: block; }

/* --- warm-white reading panel --- */
.rd-article .bp-body-sec,
.rd-guide .bp-body-sec { padding-top: clamp(40px, 6vw, 72px) !important; }
.rd-guide .bp-layout {
  display: block;
  background: var(--rd-paper); color: var(--rd-navy);
  border-radius: 28px; padding: clamp(28px, 5vw, 56px);
  max-width: 952px;
}
/* Articles keep the redesign hero and typography but return to the original reading layout:
   a sticky table of contents in a left rail on a plain white page, rather than the centred
   warm panel with the TOC stacked on top. Guides above are unchanged. */
.rd-article .bp-body-sec { background: #fff; }
.rd-article .bp-layout {
  display: grid; grid-template-columns: 280px minmax(0, 1fr);
  gap: clamp(28px, 4vw, 64px); align-items: start;
  background: transparent; color: var(--rd-navy);
  border-radius: 0; padding: 0; max-width: 1140px;
}
@media (max-width: 900px) {
  .rd-article .bp-layout { grid-template-columns: 1fr; }
  .rd-article .bp-sidebar { position: static; }
}
/* Reading column at the approved usable 840px (panel 952 - 2x56 padding) with 18/1.75 leading;
   the TOC (when present) stacks above it rather than compressing the column into a side rail. */
.rd-guide .bp-prose { color: var(--rd-navy); font-size: 18px; line-height: 1.75; max-width: 840px; margin-inline: auto; }
.rd-article .bp-prose { color: var(--rd-navy); font-size: 18px; line-height: 1.75; max-width: 760px; margin-inline: 0; }
.rd-guide .bp-sidebar { max-width: 840px; margin: 0 auto clamp(24px, 4vw, 36px); }
.rd-article .bp-sidebar { position: sticky; top: 96px; max-width: none; margin: 0; }
.rd-article .bp-prose > *,
.rd-guide .bp-prose > * { margin: 0 0 1.1em; }
.rd-article .bp-prose h2,
.rd-guide .bp-prose h2 { color: var(--rd-navy); font-weight: 600; font-size: clamp(28px,3.4vw,40px); line-height: 1.2; margin: 1.6em 0 .5em; letter-spacing: -0.01em; }
.rd-article .bp-prose h3,
.rd-guide .bp-prose h3 { color: var(--rd-navy); font-weight: 700; font-size: clamp(20px,2.4vw,24px); line-height: 1.25; margin: 1.3em 0 .4em; }
.rd-article .bp-prose p,
.rd-article .bp-prose li,
.rd-guide .bp-prose p,
.rd-guide .bp-prose li { color: var(--rd-onlight-body); }
.rd-article .bp-prose a,
.rd-guide .bp-prose a { color: var(--rd-green); text-decoration: underline; text-underline-offset: 2px; }
.rd-article .bp-prose a:hover,
.rd-guide .bp-prose a:hover { color: var(--rd-navy); }
.rd-article .bp-prose img,
.rd-guide .bp-prose img { max-width: 100%; height: auto; border-radius: 16px; }
.rd-article .bp-prose blockquote,
.rd-guide .bp-prose blockquote {
  border-left: 4px solid var(--rd-lime); margin: 1.4em 0; padding: 4px 0 4px 22px;
  color: var(--rd-navy); font-size: 20px; font-weight: 600;
}
.rd-article .bp-prose ul,
.rd-article .bp-prose ol,
.rd-guide .bp-prose ul,
.rd-guide .bp-prose ol { padding-left: 1.3em; }
.rd-article .bp-prose li,
.rd-guide .bp-prose li { margin: 0 0 .5em; }

/* TOC sidebar as a light rail on the panel */
.rd-article .bp-sidebar .bp-toc,
.rd-guide .bp-sidebar .bp-toc {
  background: #fff; border: 1px solid var(--rd-beige); border-radius: 16px; padding: 22px 24px;
}
.rd-article .bp-toc__title,
.rd-guide .bp-toc__title { color: var(--rd-navy); font-size: 13px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; margin: 0 0 12px; }
.rd-article .bp-toc__list,
.rd-guide .bp-toc__list { list-style: none; margin: 0; padding: 0; }
.rd-article .bp-toc__item,
.rd-guide .bp-toc__item { margin: 0 0 8px; }
.rd-article .bp-toc__item--sub,
.rd-guide .bp-toc__item--sub { padding-left: 14px; }
.rd-article .bp-toc a,
.rd-guide .bp-toc a { color: var(--rd-green); text-decoration: none; font-size: 14px; line-height: 1.4; }
.rd-article .bp-toc a:hover,
.rd-guide .bp-toc a:hover { text-decoration: underline; }

/* guide download card */
.rd-guide .guide-download__card {
  background: var(--rd-paper); color: var(--rd-navy);
  border-radius: 28px; padding: clamp(28px,4vw,56px);
  display: grid; gap: clamp(20px,3vw,40px); align-items: center;
}
@media (min-width: 720px) { .rd-guide .guide-download__card { grid-template-columns: minmax(0,1fr) minmax(0,1.2fr); } }
.rd-guide .guide-download__media img { width: 100%; height: auto; border-radius: 16px; }
.rd-guide .guide-download__title { color: var(--rd-navy); font-weight: 700; font-size: clamp(24px,3vw,32px); margin: 0 0 .5em; }
.rd-guide .guide-download__body p { color: var(--rd-onlight-body); margin: 0 0 1em; }
.rd-guide .guide-download .btn--book { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; background: var(--rd-lime); color: var(--rd-navy); font-weight: 700; font-size: 14px; text-decoration: none; padding: 12px 22px; border-radius: 4px; border: 0; cursor: pointer; }
.rd-guide .guide-download .btn--book:hover { background: #85CA74; }

/* related / recent cards (article + guide) */
.rd-article .bp-recent__title,
.rd-guide .bp-recent__title { color: var(--rd-navy); font-weight: 700; font-size: clamp(24px,3vw,34px); margin: 0 0 24px; }
.rd-article .bp-recent__grid,
.rd-guide .bp-recent__grid { display: grid; gap: 24px; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
.rd-article .bp-recent__card,
.rd-guide .bp-recent__card { background: var(--rd-paper); color: var(--rd-navy); border-radius: 18px; overflow: hidden; text-decoration: none; display: flex; flex-direction: column; }
.rd-article .bp-recent__media img,
.rd-guide .bp-recent__media img { width: 100%; aspect-ratio: 16/10; object-fit: cover; display: block; }
.rd-article .bp-recent__body,
.rd-guide .bp-recent__body { padding: 20px 22px 24px; display: flex; flex-direction: column; gap: 8px; }
.rd-article .bp-recent__cat,
.rd-guide .bp-recent__cat { color: var(--rd-green); font-size: 12px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; }
.rd-article .bp-recent__heading,
.rd-guide .bp-recent__heading { color: var(--rd-navy); font-weight: 700; font-size: 19px; line-height: 1.3; }
.rd-article .bp-recent__more,
.rd-guide .bp-recent__more { color: var(--rd-green); font-weight: 700; font-size: 14px; margin-top: auto; }

/* closing CTA band -> warm-white panel with filled lime button */
.rd-article .pcta.section--navy,
.rd-guide .pcta.section--navy,
.rd-legal .pcta.section--navy { background: transparent; }
.rd-article .pcta .cta-panel,
.rd-guide .pcta .cta-panel,
.rd-legal .pcta .cta-panel {
  background: var(--rd-paper); color: var(--rd-navy);
  border-radius: 28px; padding: clamp(36px,5vw,64px); text-align: center;
}
.rd-article .pcta .cta-heading,
.rd-guide .pcta .cta-heading,
.rd-legal .pcta .cta-heading { color: var(--rd-navy); font-weight: 700; font-size: clamp(28px,3.6vw,42px); margin: 0 0 .4em; }
.rd-article .pcta .cta-sub,
.rd-guide .pcta .cta-sub,
.rd-legal .pcta .cta-sub { color: var(--rd-onlight-body); margin: 0 0 1.4em; }
.rd-article .pcta .btn--book,
.rd-guide .pcta .btn--book,
.rd-legal .pcta .btn--book {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px;
  background: var(--rd-lime); color: var(--rd-navy); font-weight: 700; font-size: 14px;
  text-decoration: none; padding: 12px 24px; border-radius: 4px; border: 0; cursor: pointer;
}
.rd-article .pcta .btn--book:hover,
.rd-guide .pcta .btn--book:hover,
.rd-legal .pcta .btn--book:hover { background: #85CA74; }

/* --- legal / privacy: gradient hero + warm-white reading area (navy prose, green links).
   The base .legal { background:#fff } previously left white headings/text on white; the
   reading surface is now warm-white with navy headings and dark prose, matching ref 20fc5285
   (H1 ~77.76/700 in 1200, H2 40/600 in an 840 column). All legal paragraphs are unchanged. --- */
.rd-legal .rd-legal-hero { background: linear-gradient(180deg, var(--rd-blue), var(--rd-navy)); padding: clamp(64px,9vw,120px) 0 clamp(40px,5vw,64px); }
.rd-legal .rd-legal-hero__inner { width: min(1200px, 100% - 48px); margin-inline: auto; }
.rd-legal .rd-legal-eyebrow { color: var(--rd-lime); font-size: 12px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; margin: 0 0 14px; }
.rd-legal .rd-legal-hero .legal-content__title { color: #fff; font-weight: 700; letter-spacing: -0.02em; line-height: 1.04; font-size: clamp(40px, 6.08vw, 77.76px); margin: 0; max-width: 18ch; }
.rd-legal .legal { background: var(--rd-paper); padding: clamp(48px,7vw,88px) 0; }
/* Usable 840px reading column (the .container 24px padding was making it 792); mobile keeps
   page gutters. Body + list copy at the approved 18px / 1.75 (31.5px) leading. */
.rd-legal .legal-content { max-width: 840px; padding-inline: 0; }
@media (max-width: 700px) { .rd-legal .legal-content { padding-inline: 24px; } }
.rd-legal .legal-content p, .rd-legal .legal-content li { color: var(--rd-onlight-body); font-size: 18px; line-height: 1.75; }
.rd-legal .legal-content strong { color: var(--rd-navy); }
.rd-legal .legal-content h2 { color: var(--rd-navy); font-weight: 600; font-size: clamp(28px,3.4vw,40px); line-height: 1.2; margin: 1.6em 0 .5em; }
.rd-legal .legal-content a { color: var(--rd-green); text-decoration: underline; text-underline-offset: 2px; }

/* --- guides & tools library listing (ref 782d95e2): navy treatment, 3 square landscape
   cards with semantic 24/600 H3 titles, left H1 104/700, closing contact CTA. --- */
.rd-guidehub .rd-guidehub__title { font-size: clamp(48px, 8.1vw, 104px); font-weight: 700; max-width: 15ch; letter-spacing: -0.02em; line-height: 1.03; }
.rd-guidehub .rd-guidehub-sec { padding-top: 0 !important; }
.rd-guidehub .rd-guidelist { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; list-style: none; margin: 24px 0 0; padding: 0; }
@media (max-width: 900px) { .rd-guidehub .rd-guidelist { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 620px) { .rd-guidehub .rd-guidelist { grid-template-columns: 1fr; } }
/* Full-height flex column so "Read the guide" sits on a common baseline across a row,
   matching the featured-work cards. The old display:block opted these out of it. */
.rd-guidehub .rd-guidelist .rd-work-card { display: flex; flex-direction: column; height: 100%; text-decoration: none; }
.rd-guidehub .rd-guidelist .rd-work-card__media { border-radius: 0; overflow: hidden; aspect-ratio: 16 / 10; }
.rd-guidehub .rd-guidelist .rd-work-card__media img { width: 100%; height: 100%; aspect-ratio: 16 / 10; object-fit: cover; display: block; border-radius: 0; }
.rd-guidehub .rd-guidelist .rd-work-card__body { padding-top: 16px; display: flex; flex-direction: column; gap: 8px; flex: 1 1 auto; }
.rd-guidehub .rd-guidelist .rd-work-card__cat { color: var(--rd-lime); font-size: 12px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; }
.rd-guidehub .rd-guidelist .rd-artcard__title { font-size: 24px; font-weight: 600; color: #fff; }
.rd-guidehub .rd-closing__title { font-size: clamp(30px,4.2vw,48px); font-weight: 600; }
/* Hub content at the approved 1200px width (x40 at 1280) so the three cards read 384px. */
.rd-guidehub .rd-wrap:not(.rd-hero) { max-width: none; width: min(1200px, 100% - 48px); padding-inline: 0; }
/* Reading heroes (article/guide) in the full 1200px band, matching the privacy hero. */
.rd-article .bp-head .container,
.rd-guide .bp-head .container { max-width: none; width: min(1200px, 100% - 48px); margin-inline: auto; padding-inline: 0; }

@media (max-width: 900px) {
  .rd-article .bp-layout,
  .rd-guide .bp-layout { display: block; }
  .rd-article .bp-sidebar,
  .rd-guide .bp-sidebar { margin-bottom: 28px; }
}


/* Case studies carry the redesign's related-work and closing sections inside a local
   .rd wrapper, because the page itself has no .rd class. That also means they miss the
   page-scoped vertical rhythm, so the closing eyebrow sat hard against the card links. */
.rd-case .rd-featured.rd-wrap { padding-block: clamp(48px, 6vw, 88px) 0; }
.rd-case .rd-closing.rd-cta-band { padding-block: clamp(56px, 7vw, 104px); }
/* Case-study related cards were on the base 3/4, which gets tall as the cards widen. 4/5 is
   the ratio the service pages and services index already use for this same component, so
   this makes them consistent rather than introducing a new one. */
.rd-case .rd-featured .rd-work-card__media { aspect-ratio: 4 / 5; }

/* Inset panels: the warm panel runs to the page edge on its straight side and keeps only a
   small navy sliver on the curved side, instead of floating in a wide navy margin on a large
   monitor. Which side bleeds follows the curve: a top-left curve bleeds right, a top-right
   curve bleeds left. Panel CONTENT is capped at 1200px and centred, so letting the surface run
   wide never stretches a line of text across an ultrawide display.
   The `> *` belongs on every selector in the content-cap list: written once at the end it bound
   only to the last one, so the other panels were matching the cap themselves and quietly
   cancelling their own bleed. */

/* Curve top-left -> bleed right. */
.rd-service-page .rd-fleetloop .rd-panel,
.rd-home .rd-fleetloop .rd-panel,
.rd-partner .rd-fleet-sec .rd-panel,
.rd-about .rd-peoplefleet .rd-panel,
.rd-careers .rd-values-sec .rd-panel,
.rd-fleet-page .rd-fleetloop .rd-panel { width: auto; max-width: none; margin-inline: clamp(24px, 3vw, 48px) 0; }

/* Curve top-right -> bleed left. The last two were authored as "full-bleed x0/w1280", which is
   only actually full width up to 1280px; past that they showed the same wide navy margin. */
.rd-service-page .rd-capwork .rd-panel,
.rd-about .rd-expect .rd-panel,
.rd-home .rd-services-section .rd-panel,
.rd-careers .rd-openings-sec .rd-panel { width: auto; max-width: none; margin-inline: 0 clamp(24px, 3vw, 48px); }

.rd-service-page .rd-fleetloop .rd-panel > *,
.rd-home .rd-fleetloop .rd-panel > *,
.rd-partner .rd-fleet-sec .rd-panel > *,
.rd-about .rd-peoplefleet .rd-panel > *,
.rd-careers .rd-values-sec .rd-panel > *,
.rd-fleet-page .rd-fleetloop .rd-panel > *,
.rd-service-page .rd-capwork .rd-panel > *,
.rd-about .rd-expect .rd-panel > *,
.rd-home .rd-services-section .rd-panel > * { max-width: 1200px; margin-inline: auto; }
/* Careers openings caps its content with its own padding formula, so it needs no child cap. */

@media (max-width: 760px) {
  .rd-home .rd-services-section .rd-panel,
  .rd-careers .rd-openings-sec .rd-panel { margin-inline: 0 clamp(12px, 3vw, 24px); }
  .rd-service-page .rd-fleetloop .rd-panel,
  .rd-home .rd-fleetloop .rd-panel,
  .rd-partner .rd-fleet-sec .rd-panel,
  .rd-about .rd-peoplefleet .rd-panel,
  .rd-careers .rd-values-sec .rd-panel,
  .rd-fleet-page .rd-fleetloop .rd-panel { margin-inline: clamp(12px, 3vw, 24px) 0; }
  .rd-service-page .rd-capwork .rd-panel,
  .rd-about .rd-expect .rd-panel { margin-inline: 0 clamp(12px, 3vw, 24px); }
}


/* Featured-work head: the "Explore our work" CTA moves to the far right of the row and sits on
   the heading's bottom edge, matching the hero rows on Fleet / Blog / About / the service pages
   where a section CTA is pushed right rather than stacked under the title. The heading keeps its
   60ch measure; only the CTA moves. Below 820px the row folds back to a single column and the
   CTA returns under the heading, left aligned. */
.rd-featured__head {
  max-width: none;
  display: grid;
  grid-template-columns: minmax(0, 60ch) auto;
  column-gap: clamp(24px, 4vw, 64px);
  align-items: end;
}
.rd-featured__head > .rd-eyebrow { grid-column: 1; grid-row: 1; }
.rd-featured__head > h2 { grid-column: 1; grid-row: 2; margin-bottom: 0; }
.rd-featured__head > p:last-child { grid-column: 2; grid-row: 2; justify-self: end; margin: 0; }
@media (max-width: 820px) {
  .rd-featured__head { grid-template-columns: minmax(0, 1fr); }
  .rd-featured__head > h2 { margin-bottom: 12px; }
  .rd-featured__head > p:last-child { grid-column: 1; grid-row: 3; justify-self: start; }
}

/* Hero left edge, normalised to the 1200px column. Most redesign heroes put their first line at
   the column edge (services, service details, about, careers, blog, work). The home and Fleet
   heroes used .rd-wrap, whose extra 24px inner padding pushed them one gutter further in, so the
   site had two different hero indents. Both now match, which is also what lets the header logo
   sit flush with the H1 on every page. Narrow screens are unchanged: the 1200px column already
   falls back to a 24px gutter, which is what the inner padding was providing. */
.rd-home .rd-hero.rd-wrap { padding-inline: 0; width: min(var(--rd-maxw), 100% - 48px); max-width: none; }
/* Fleet is the exception, and constraining it the same way was a mistake: its hero paints the
   gradient on ITSELF, where the home hero sits inside .rd-topwrap which paints it. Narrowing the
   element to the 1200px column therefore narrowed the gradient too, leaving navy either side of
   a floating band. Full width with the content held on the column by inline padding instead -
   same left edge, gradient edge to edge. */
.rd-fleet-page .rd-hero.rd-wrap { width: 100%; max-width: none; margin-inline: 0;
  padding-inline: max(24px, calc(50% - 600px)); }

/* Home: the warm panel's tail and the navy gap under it, matched. The panel ends 80px below its
   last line, but the navy run down to the featured photo was 208px (the section's own 104 plus
   the work band's 104), so the same break read as two different sizes. Brandee picked the
   panel's 80. The variable mirrors the panel's padding-bottom rather than restating it in a rule
   that would have to outrank the mobile override, so the two stay equal at both sizes. */


/* Service pages: navy under the opening case photo, matched to the warm panel's own top padding.
   It was 208px (the opening's 104 tail plus the capability section's 104 lead) against 96px of
   warm white above the eyebrow, so the same break read as two very different sizes. The gradient
   now ends at the photo and the whole gap is the section's lead, tied to the panel's padding so
   the two cannot drift apart. */

/* Home tech partnerships: a warm-white band rather than navy, per Brandee. The section runs the
   full page width and holds its content on the 1200px column; the marks swap to the dark artwork
   because the light set is white-on-navy and would vanish. Heights below are NOT the service
   pages' - that block sets its wordmarks at ~21px of ink and this one at ~37px, which is the 4x2
   arrangement Brandee approved. Each height is the approved optical size divided by that dark
   file's measured ink ratio, so every mark keeps the size it has today on navy. */
.rd-home .rd-partners { background: var(--rd-paper); max-width: none; width: 100%; margin-inline: 0;
  padding-inline: max(24px, calc(50% - 600px)); }
.rd-home .rd-partners__title { color: var(--rd-navy); }
.rd-home .rd-logo-row--partners a:focus-visible { outline-color: var(--rd-green); }
.rd-home .rd-logo-row--partners img[src*="partner-dark-scayle"]       { height: 49px; }
.rd-home .rd-logo-row--partners img[src*="partner-dark-wordpress"]    { height: 54px; }
.rd-home .rd-logo-row--partners img[src*="partner-dark-klaviyo"]      { height: 41px; }
.rd-home .rd-logo-row--partners img[src*="partner-dark-bigcommerce"]  { height: 54px; }
.rd-home .rd-logo-row--partners img[src*="partner-dark-shopify-plus"] { height: 59px; }
.rd-home .rd-logo-row--partners img[src*="partner-dark-salsify"]      { height: 46px; }
.rd-home .rd-logo-row--partners img[src*="partner-dark-google"]       { height: 56px; }
.rd-home .rd-logo-row--partners img[src*="partner-dark-microsoft"]    { height: 46px; }


/* =====================================================================
   COLOUR BREAKS - one rule for the whole redesign
   Every colour break on the site is the edge of a warm .rd-panel sitting on the navy ground, and
   the space either side of that edge was being set in two unrelated places: the panel's own
   padding on the inside, and the sum of two section paddings on the outside. They were never
   equal - a site-wide sweep found breaks from 8px to 96px apart, on the homepage, services,
   service details, careers and Fleet.

   One token now sets both sides:
     inside  = the panel's padding-block
     outside = the padding-top of the section carrying the panel, with its neighbour contributing
               nothing at that boundary, so the navy is exactly one break rather than two stacked
               section paddings.

   This replaces the per-page fixes for closing-CTA -> tech partners, home services -> work band,
   and the service opening -> capability panel, which were each solving one instance of it.
   Panels keep their own INLINE padding; only the block axis is normalised. Two adjacent panel
   sections still resolve to a single break, because the first one's bottom padding is zeroed by
   the same rule that zeroes any other neighbour's. */
.rd { --rd-break: 96px; }
@media (max-width: 760px) { .rd { --rd-break: clamp(40px, 7vw, 64px); } }

/* .rd and .rd-page both sit on <body>, so `.rd.rd-page` costs nothing structurally and lifts
   these to 0,3,0 - enough to beat the per-page section padding overrides (.rd-home .rd-featured
   .rd-wrap and friends), which would otherwise keep contributing their own padding at a break
   and leave the navy side twice the panel side.
   This covers the common band: a warm .rd-panel sitting inside a navy section. */
.rd-page section .rd-panel { padding-block: var(--rd-break); }
.rd.rd-page section:has(.rd-panel) { padding-block: var(--rd-break); }
/* !important only where it is answering !important: the hero rules set their padding that way
   (`.rd-hero`, `.rd-services .rd-hero`), so without it a hero sitting directly above a panel keeps
   adding its own tail and the navy side comes out 132-152 against the panel's 96. */
.rd.rd-page section:has(.rd-panel) + section { padding-top: 0 !important; }
.rd.rd-page section:has(+ section .rd-panel) { padding-bottom: 0 !important; }

/* A section that paints ITSELF is the other case, and grouping it with the panels above was
   wrong. When the colour is on the section, its own padding sits INSIDE the band, so the navy
   either side comes entirely from the neighbours - and zeroing them, as the panel rules do,
   left the break with no air above it at all. Here the neighbours keep the break instead.
   The home tech-partners band also reads better shorter than the page default, so it carries
   its own value and both sides read from that one number. */
body.rd-home { --rd-band: clamp(44px, 5vw, 64px); }
.rd.rd-page section.rd-partners { padding-block: var(--rd-band); }
.rd.rd-page section.rd-partners + section { padding-top: var(--rd-band) !important; }
.rd.rd-page section:has(+ section.rd-partners) { padding-bottom: var(--rd-band) !important; }

/* The service opening puts its tail padding on an inner element, not on the section, so the
   section rule above cannot reach it. */
.rd-service-page .rd-svc-opening__case { padding-bottom: 0; }

/* A panel's last element must not add its own margin on top of the panel's padding, or the inside
   of the break comes out larger than the 96 the outside is set to. Belt and braces for the common
   case where the last child is a wrapper around the real last element. */
.rd .rd-panel > *:last-child,
.rd .rd-panel > *:last-child > *:last-child { margin-bottom: 0; }


/* Blog: subscribe moved out of the hero to the end of the list, where someone has actually read
   something and might want more. In the hero it took half the headline's width and put a second
   green button on the screen; the footer already carries a subscribe form on every page, so this
   was also the second one on this page. */
.rd-blog-subscribe { display: flex; flex-wrap: wrap; gap: 16px 34px; align-items: center;
  border-top: 1px solid rgba(255,255,255,.12); margin-top: clamp(40px, 5vw, 64px); padding-top: clamp(26px, 3vw, 34px); }
.rd-blog-subscribe__lead { flex: 1 1 240px; margin: 0; color: var(--rd-ondark-body); font-size: 16px; }
.rd-blog-subscribe .rd-subscribe-form { flex-direction: row; align-items: center; gap: 10px; max-width: none; width: min(330px, 100%);
  border-bottom: 1px solid rgba(255,255,255,.30); padding: 8px 2px; }
.rd-blog-subscribe .rd-subscribe-form:focus-within { border-bottom-color: var(--rd-lime); }
.rd-blog-subscribe .rd-subscribe-form input[type="email"] { flex: 1; min-width: 0; background: transparent; border: 0; border-radius: 0; padding: 0; color: #fff; font: 400 15px var(--rd-font); }
.rd-blog-subscribe .rd-subscribe-form input[type="email"]:focus { outline: none; }
.rd-blog-subscribe .rd-subscribe-form input[type="email"]::placeholder { color: var(--rd-ondark-quiet, rgba(255,255,255,.55)); }
.rd-blog-subscribe .rd-subscribe-form button { align-self: center; background: none; border: 0; border-radius: 0; padding: 0; color: var(--rd-lime); font: 700 14px var(--rd-font); white-space: nowrap; cursor: pointer; }
.rd-blog-subscribe .rd-subscribe-form button:hover { color: #85CA74; }
.rd-blog-subscribe .rd-subscribe-form button:focus-visible { outline: 2px solid var(--rd-lime); outline-offset: 3px; }

/* Sits with the lead line rather than under the field, so the signup stays one object. */
.rd-blog-subscribe__privacy { color: var(--rd-lime); text-decoration: underline; text-underline-offset: 3px; }
.rd-blog-subscribe__privacy:hover { color: #85CA74; }

/* An archive has one control, not two, so it sits at the right where the blog's category select
   sits rather than stretched across by space-between. */
.rd-listing-controls--end { justify-content: flex-end; }

/* Guides hub: the card title stays white on hover. The shared rule is
   `.rd-worklist .rd-work-card:hover .rd-artcard__title` - 0,4,0 once the :hover is counted, which
   is why the guides hub's own 0,3,0 colour did not hold. Only the colour is overridden; the
   media zoom, the CTA and the arrow bounce are untouched. */
.rd-guidehub .rd-worklist .rd-work-card:hover .rd-artcard__title { color: #fff; }

/* Guides & Tools library. Sixteen title-only cards read as a wall of names, while every item
   already had a written description sitting unused in its own data. The card now carries that
   description, what kind of thing it is, and how long it takes; the row above filters by topic.
   Everything stays rendered and visible by default - the filter only hides, so the page is never
   empty and a crawler still sees all sixteen. */
/* The filters sit on the controls row itself - search left, filters right, one level - which is
   the arrangement the blog listing already uses. They previously ran full width above it in
   their own ruled band, which read as a second, louder row. The row provides the alignment, so
   the band's own rules and bottom margin go. */
.rd-topics { display: flex; flex-wrap: wrap; gap: 8px 22px; align-items: center; }
.rd-topics button { background: none; border: 0; padding: 2px 0; cursor: pointer;
  font: 400 14px var(--rd-font); color: var(--rd-ondark-body); transition: color .15s ease; }
.rd-topics button:hover { color: var(--rd-lime); }
.rd-topics button.is-on { color: var(--rd-lime); font-weight: 700; }
.rd-topics button:focus-visible { outline: 2px solid var(--rd-lime); outline-offset: 4px; border-radius: 3px; }
.rd-topics__n { color: var(--rd-ondark-quiet, rgba(255,255,255,.55)); font-size: 12px; margin-left: 3px; }
.rd-topics button.is-on .rd-topics__n { color: inherit; opacity: .75; }

.rd-guidemeta { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.rd-kind { font-size: 10px; font-weight: 800; letter-spacing: .13em; text-transform: uppercase;
  border: 1px solid rgba(255,255,255,.26); border-radius: 999px; padding: 3px 9px; color: var(--rd-ondark-body); }
/* A tool is used rather than read, and a report is not ours alone - both earn a different edge
   so the three formats are told apart before the title is read. */
.rd-kind--tool { border-color: var(--rd-lime); color: var(--rd-lime); }
.rd-kind--report { border-color: #9FB4D8; color: #9FB4D8; }
.rd-guidemeta__len { font-size: 11.5px; letter-spacing: .04em; color: var(--rd-ondark-quiet, rgba(255,255,255,.55)); }
/* Three lines, so a long description cannot make one card taller than its neighbours. */
.rd-guidedesc { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
  font-size: 14px; line-height: 1.55; color: var(--rd-ondark-body); margin: 0 0 14px; }
.rd-guidehub .rd-guidelist .rd-work-card__body { display: flex; flex-direction: column; }
.rd-guidehub .rd-guidelist .rd-cta { margin-top: auto; }

/* =====================================================================
   Webinars hub (r226). Text-led cards: the session posters are title cards, so pairing one
   with the title printed the name twice and the crop cut the artwork. Each card carries the
   title, a blurb from the session's own page, and who is presenting.
   Only two of the eight sessions have speaker data, so the speaker row is conditional and the
   card has to read properly without it - the CTA holds the bottom either way.
   ===================================================================== */
.rd-weblist { grid-template-columns: repeat(2, 1fr); gap: 20px; }
@media (max-width: 760px) { .rd-weblist { grid-template-columns: 1fr; } }

.rd-webcard { display: flex; flex-direction: column; height: 100%; text-decoration: none;
  background: rgba(255,255,255,.035); border: 1px solid rgba(255,255,255,.10); border-radius: 6px;
  padding: clamp(22px, 2.6vw, 30px); transition: background-color .2s ease, border-color .2s ease; }
.rd-webcard:hover { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.22); }

.rd-webcard__meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-bottom: 14px; }
.rd-webcard__date { font-size: 12.5px; letter-spacing: .03em; color: var(--rd-ondark-quiet, rgba(255,255,255,.55)); }
.rd-webcard__title { font-size: clamp(19px, 2vw, 22px); font-weight: 600; line-height: 1.28; color: #fff; margin: 0 0 10px; }
.rd-webcard:hover .rd-webcard__title { color: var(--rd-lime); }
.rd-webcard__blurb { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
  font-size: 14.5px; line-height: 1.55; color: var(--rd-ondark-body); margin: 0 0 20px; }

/* Pushed to the bottom so the CTA sits on one line across a row whatever the blurb runs to. */
.rd-webcard__foot { margin-top: auto; display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 12px 20px; }
.rd-webcard__by { display: flex; align-items: center; gap: 10px; min-width: 0; }
.rd-webcard__faces { display: flex; }
/* Overlap the second face, the way a small group of people is usually shown. */
/* 44px: the point where a headshot reads as a face rather than a credit mark, and the same
   measure the footer's social buttons use. Still clearly secondary to the title. */
.rd-webcard__faces img,
.rd-webcard__initials { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; flex: none;
  border: 2px solid var(--rd-navy); background: #33405C; }
/* Two of the presenters are external and have no headshot on file, so they carry initials
   rather than leaving a hole in the row. */
.rd-webcard__initials { display: grid; place-items: center; font-size: 14px; font-weight: 700;
  color: #C9D2E4; background: linear-gradient(135deg, #46587C, #2A3450); }
.rd-webcard__faces > * + * { margin-left: -14px; }
.rd-webcard__names { font-size: 14px; font-weight: 600; color: var(--rd-ondark-body);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* The next session gets the full width and a larger title; it is one item, and a single card in
   a two-column grid reads as a gap. */
.rd-weblist--next { grid-template-columns: 1fr; }
.rd-weblist--next .rd-webcard { border-color: rgba(110,192,92,.38); background: rgba(110,192,92,.05); }
.rd-weblist--next .rd-webcard:hover { border-color: rgba(110,192,92,.6); background: rgba(110,192,92,.09); }
.rd-weblist--next .rd-webcard__title { font-size: clamp(24px, 3vw, 34px); max-width: 24ch; }
.rd-weblist--next .rd-webcard__blurb { -webkit-line-clamp: 2; max-width: 68ch; font-size: 16px; }

.rd-webondemand__label, .rd-webondemand__count { margin: 0; }
.rd-webondemand__count { font-size: 13px; color: var(--rd-ondark-quiet, rgba(255,255,255,.55)); }
.rd-webnext__head .rd-eyebrow { margin-bottom: 18px; }
@media (prefers-reduced-motion: reduce) { .rd-webcard { transition: none; } }

/* =====================================================================
   Events hub - Women in Ecommerce Dinners (r226).
   ===================================================================== */
.rd-dnr-lead { max-width: 62ch; }
.rd-dnr-lead + .rd-dnr-lead { margin-top: 14px; }

/* Two upcoming dinners, so a two-column row rather than the three-up work grid. The poster is a
   photograph of the venue here, not a title card, so it stays. */
.rd-dnrlist { grid-template-columns: repeat(2, 1fr); gap: 28px 24px; }
@media (max-width: 760px) { .rd-dnrlist { grid-template-columns: 1fr; } }
.rd-dnrcard .rd-work-card__media { aspect-ratio: 3 / 2; }
/* The series name is the label and the conference is the headline, not the other way round.
   Set quiet and small so it names the thing without competing with where it is happening. */
.rd-dnrcard__series { display: block; font-size: 11px; font-weight: 800; letter-spacing: .16em;
  text-transform: uppercase; color: var(--rd-ondark-quiet, rgba(255,255,255,.55)); margin-bottom: 8px; }
.rd-dnrcard__conf { margin-bottom: 12px; }

.rd-dnrcard__facts { display: flex; flex-direction: column; gap: 7px; margin-bottom: 16px; }
.rd-dnrcard__fact { display: flex; align-items: flex-start; gap: 8px; font-size: 14.5px;
  line-height: 1.45; color: var(--rd-ondark-body); }
.rd-dnrcard__when { color: var(--rd-ondark-quiet, rgba(255,255,255,.62)); font-size: 14px; }
/* A pin says "place" without needing a colour to do it. The city had been sitting in a lime chip,
   which read as a category badge - it is not a category, and it made two green elements fight on
   one card. */
/* Pin and calendar share one treatment so the two facts read as a pair. */
.rd-dnrcard__pin, .rd-dnrcard__ico { width: 15px; height: 15px; flex: none; margin-top: 2px;
  fill: none; stroke: var(--rd-lime); stroke-width: 1.7; stroke-linejoin: round; stroke-linecap: round; }

/* What it is, how it works, why come: one warm panel instead of three separate navy bands, which
   is what made the page read as a long scroll of undifferentiated sections. */
.rd-dnr-about__intro { max-width: 68ch; }
.rd-dnr-about__lead { font-size: clamp(18px, 2.2vw, 22px); line-height: 1.5; color: var(--rd-navy); font-weight: 500; }
.rd-dnr-about__body { margin-top: 14px; color: var(--rd-onlight-body); line-height: 1.6; }
.rd-dnr-about__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 36px 56px; margin-top: clamp(32px, 4vw, 52px); }
@media (max-width: 760px) { .rd-dnr-about__grid { grid-template-columns: 1fr; } }
.rd-dnr-about__h { font-size: clamp(19px, 2vw, 22px); font-weight: 600; color: var(--rd-navy); margin-bottom: 16px; }
/* Hairline rows rather than ticks: these are facts about the format, not benefits being sold. */
.rd-dnr-list { list-style: none; margin: 0; padding: 0; }
.rd-dnr-list li { border-top: 1px solid rgba(17,24,46,.14); padding: 13px 0; font-size: 15px;
  line-height: 1.55; color: var(--rd-onlight-body); }
.rd-dnr-list li:last-child { border-bottom: 1px solid rgba(17,24,46,.14); }

.rd-dnr-gallery__grid { list-style: none; margin: 20px 0 0; padding: 0;
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
@media (max-width: 760px) { .rd-dnr-gallery__grid { grid-template-columns: repeat(2, 1fr); } }
.rd-dnr-gallery__grid img { width: 100%; aspect-ratio: 1 / 1; object-fit: cover; display: block; }

/* Past dinners carry no page and no photograph, so they are a list of where and when rather than
   cards that look clickable and are not. */
.rd-dnr-past__list { list-style: none; margin: 20px 0 0; padding: 0; }
.rd-dnr-past__list li { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;
  gap: 6px 24px; border-top: 1px solid rgba(255,255,255,.12); padding: 15px 0; }
.rd-dnr-past__list li:last-child { border-bottom: 1px solid rgba(255,255,255,.12); }
.rd-dnr-past__name { font-size: 16.5px; font-weight: 600; color: #fff; }
.rd-dnr-past__when { font-size: 13.5px; color: var(--rd-ondark-quiet, rgba(255,255,255,.55)); }

.rd-dnr-notify__inner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 20px 40px; border-top: 1px solid rgba(255,255,255,.12); padding-top: clamp(28px, 3vw, 40px); }
.rd-dnr-notify__h { font-size: clamp(22px, 2.6vw, 30px); font-weight: 600; color: #fff; }
.rd-dnr-notify__p { margin-top: 10px; max-width: 60ch; color: var(--rd-ondark-body); line-height: 1.6; }

/* Events hero (option B): the photograph is the page, with the words at the foot of it.
   An <img> rather than a background-image so it is a real element the browser can prioritise and
   size responsively, and so the alt text describing the room is available. */
.rd-dnr-hero { position: relative; display: flex; align-items: flex-end;
  min-height: clamp(420px, 58vh, 660px); overflow: clip; }
.rd-dnr-hero__media { position: absolute; inset: 0; }
/* 46% keeps the table itself in frame: the source is 4:3 and the hero is wider than that, so
   the crop is vertical, and biasing higher pushed the faces toward the bottom edge. */
.rd-dnr-hero__media img { width: 100%; height: 100%; object-fit: cover; object-position: center 46%; display: block; }
/* Starts nearly clear so the faces are not dimmed, and lands dark enough at the foot to carry
   white type over a busy restaurant shot. */
.rd-dnr-hero::after { content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, rgba(17,24,46,.30) 0%, rgba(17,24,46,.62) 46%, rgba(17,24,46,.94) 100%); }
.rd-dnr-hero__in { position: relative; z-index: 1; width: min(var(--rd-maxw), 100% - 48px);
  margin-inline: auto; padding-block: clamp(36px, 5vw, 64px); }
.rd-dnr-hero__title { max-width: 18ch; }
.rd-dnr-hero .rd-dnr-lead { color: #EDEFF4; }
/* The hero already ends on the page ground, so the band below it should not add a second gap. */
.rd-dinners .rd-dnr-hero + section { padding-top: clamp(40px, 5vw, 72px); }

/* Events page rhythm. Every band below the panel is navy on navy, so there is no colour break to
   justify the full 104px section padding on both sides - two of them meeting was producing 208px
   of empty ground between the gallery and the sign-up, and again before the past list.
   Each section owns its top space only, so the gap between any two is one value rather than two
   stacked. The warm panel is untouched: its break is set by the site-wide colour-break rule and
   still reads 96 inside and out. */
.rd-dinners .rd-dnr-gallery { padding-bottom: 0; }
.rd-dinners .rd-dnr-notify,
.rd-dinners .rd-dnr-past { padding-block: clamp(44px, 5vw, 72px) 0; }
.rd-dinners .rd-dnr-past { padding-bottom: clamp(44px, 5vw, 72px); }
/* The photo hero sets its own inner padding, so the page's section rhythm on top of it was
   adding 208px to the height of the image. */
.rd-dinners .rd-dnr-hero { padding-block: 0; }
