/* ============================================================================
   Resume Place design system ("orange whispers") — ported from the locked
   design north-star (docs/clients/resume-place/design-system/index.html).
   Darks are the GROUND, bright blue var(--rp-bright-blue) is the SIGNAL, tangelo is an ACCENT.
   Messina does the work: serif display, condensed labels, mono data, blue folios.
   Classes are rp- prefixed and used by the page-type templates (inc/*-pages.php).
   ============================================================================ */

/* Tokens (ramp, inks, type clamps, radii, shadows, motion, containers)
   come from assets/css/tokens.css — generated by scripts/build-tokens.mjs.
   Do not redeclare --rp-* at :root here. */

/* Button/link selectors are compounds (.rp-btn.rp-btn-primary, a.rp-link) so
   they beat the .rph a{color:inherit} scope rule when bands carry the
   homepage .rph class (lifted spine-landing bands). */
/* ---- layout ---- */
.rp-ds{font-family:var(--rp-sans);color:var(--rp-ink);-webkit-font-smoothing:antialiased}
.rp-ds *{box-sizing:border-box}
/* Sections are block-composed (native groups) so the client can edit copy in
   place; core's flow-layout blockGap must not add spacing here — the rp-*
   rules below own every margin. Keep this rule ABOVE all margin rules so any
   later equal-specificity rp-* declaration still wins. */
.rp-ds :where(.is-layout-flow) > *{margin-block-start:0;margin-block-end:0}
.rp-wrap{width:100%;max-width:var(--rp-c-max);margin-inline:auto;padding-inline:1.5rem}
/* Bleed-right wrap: left edge stays on the page container, content runs to the
   right viewport edge (gallery bleeds off-screen right). */
.rp-wrap--bleed{max-width:none;margin-inline:0;padding-right:0;padding-left:max(1.5rem,calc((100% - var(--rp-c-max))/2 + 1.5rem))}
/* Wide band aligned to the header/nav container (1280px) so content lines up
   with the logo on the left and gets symmetric breathing room on the right. */
.rp-wrap--wide{max-width:none;margin-inline:0;padding-inline:max(1.5rem,calc((100% - var(--rp-c-wide,1280px))/2))}
.rp-section{padding-block:clamp(2.75rem,5vw,4.5rem);margin-block:0}
.rp-section--paper{background:var(--rp-bg)}
.rp-section--surface{background:var(--rp-surface-2)}

/* ---- editorial type primitives ---- */
.rp-kick{font-family:var(--rp-sans);font-size:.9375rem;font-weight:600;letter-spacing:-.01em;color:var(--rp-blue,#2F62C4);margin:0}
.rp-kick .hot{color:var(--rp-tangelo)}
.rp-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--rp-tangelo);vertical-align:middle;margin-right:.5em}
.rp-filed{font-family:var(--rp-cond);font-weight:600;font-size:.8rem;letter-spacing:.16em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-folio{font-family:var(--rp-serif);font-weight:200;font-size:clamp(2.4rem,5vw,3.8rem);line-height:.8;letter-spacing:-.02em;color:var(--rp-blue-bright)}
.rp-display{font-family:var(--rp-serif);font-weight:300;line-height:1.02;letter-spacing:-.02em}
.rp-h1{font-family:var(--rp-serif);font-weight:400;font-size:var(--rp-h1);line-height:1.04;letter-spacing:-.02em;margin:0}
.rp-h2{font-family:var(--rp-serif);font-weight:400;font-size:var(--rp-h2);line-height:1.08;letter-spacing:-.016em;margin:0}
.rp-h1 em,.rp-h2 em,.rp-display em{font-style:italic;font-weight:300;color:var(--rp-tangelo)}
.rp-lead{font-size:var(--rp-lead);line-height:1.62;color:var(--rp-ink-2);font-weight:400;margin:0}

/* ---- pills ---- */
.rp-pill{display:inline-flex;align-items:center;gap:.45em;font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;padding:.35em .7em;border-radius:var(--rp-r-tag);line-height:1.1}
.rp-pill-blue{background:var(--rp-blue-50);color:var(--rp-blue-800)}
.rp-pill-orange{background:var(--rp-tangelo-50);color:var(--rp-tangelo-700)}

/* ---- buttons ---- */
/* WP core global styles underline every non-.wp-element-button anchor on hover;
   rp-ds buttons and block-level card anchors opt out (prose links keep it). */
.rp-btn,.rp-btn:hover,.rp-card--link:hover,.rp-video:hover,.rp-sample:hover,.rp-shelf-card:hover,.rp-reserve-bar:hover{text-decoration:none}
.rp-btn,.rp-ds .rp-cta-row .wp-block-button__link{text-decoration:none}
.rp-btn,.rp-ds .rp-cta-row .wp-block-button__link{display:inline-flex;align-items:center;justify-content:center;gap:.5em;font-family:var(--rp-sans);font-weight:600;font-size:var(--rp-small);line-height:1;cursor:pointer;border:1px solid transparent;padding:.86em 1.3em;border-radius:var(--rp-r-btn);transition:background .16s,color .16s,border-color .16s,box-shadow .16s,transform .16s var(--rp-e)}
/* The primary button is a tangelo outline: white ground, 2px tangelo border (3.45:1, over the 3:1 a boundary needs), text in tangelo-700 (5.28:1). Filled tangelo failed under white text and read wrong under navy. Hover tints the ground. */
.rp-btn.rp-btn-primary,.rp-ds .rp-cta-row .rp-btn-primary .wp-block-button__link{background:var(--rp-white,#FFFFFF);color:var(--rp-tangelo-700,#C04000);border:2px solid var(--rp-tangelo);box-shadow:none}
.rp-btn-tangelo-outline{background:var(--rp-white,#FFFFFF);color:var(--rp-tangelo-700,#C04000);border:2px solid var(--rp-tangelo)}
.rp-btn-tangelo-outline:hover{background:var(--rp-tangelo-50,#FFF3ED)}
.rp-btn.rp-btn-primary:hover,.rp-ds .rp-cta-row .rp-btn-primary .wp-block-button__link:hover{background:var(--rp-tangelo-50,#FFF3ED);color:var(--rp-tangelo-700,#C04000);transform:translateY(-1px);box-shadow:var(--rp-sh-md)}
.rp-btn.rp-btn-quiet,.rp-ds .rp-cta-row .rp-btn-quiet .wp-block-button__link{background:var(--rp-surface);color:var(--rp-ink);border-color:var(--rp-line-2);box-shadow:var(--rp-sh-sm)}
.rp-btn.rp-btn-quiet:hover,.rp-ds .rp-cta-row .rp-btn-quiet .wp-block-button__link:hover{border-color:var(--rp-ink-3);background:var(--rp-surface-2)}
/* Signal tier: the action a repeated row or card offers. Blue is the signal
   colour, so this carries button weight without spending tangelo, which stays
   the one primary on the page. */
.rp-btn.rp-btn-signal{background:var(--rp-surface);color:var(--rp-blue-bright);border-color:var(--rp-blue-bright);box-shadow:var(--rp-sh-sm)}
.rp-btn.rp-btn-signal:hover{background:var(--rp-blue-bright);color:#fff;border-color:var(--rp-blue-bright)}
.rp-btn.rp-btn-ondark{background:rgba(234,240,248,.08);color:#fff;border-color:rgba(159,177,204,.3)}
.rp-btn.rp-btn-ondark:hover{background:rgba(234,240,248,.16)}
a.rp-link,.rp-link{font-family:var(--rp-sans);color:var(--rp-mahogany);font-weight:600;font-size:var(--rp-small);display:inline-flex;align-items:center;gap:.4em}
a.rp-link:hover,.rp-link:hover{color:var(--rp-tangelo)}

/* ---- hero ---- */
/* Main sits flush under the header: the site-blocks flow gap would otherwise open a strip of page ground between the header rule and the first band. The full-bleed templates were covered; the contained ones (every page whose first band is a hero, e.g. /senior-executive-service/ecqs/) still showed 24px of white under the sticky header on a phone. The header owns the spacing beneath it. */
.wp-site-blocks > main.alignfull,
.wp-site-blocks > header.wp-block-template-part + main{margin-block-start:0}
.rp-hero{background:var(--rp-bg);padding-block:clamp(2.75rem,5vw,4.25rem);position:relative;overflow:hidden}
.rp-hero::before{content:"";position:absolute;inset:0;background:radial-gradient(58% 50% at 72% 38%,var(--rp-blue-50),transparent 70%);pointer-events:none}
.rp-hero .rp-wrap{position:relative;text-align:left}
.rp-hero .rp-h1{max-width:24ch;margin:.6rem 0 0}
.rp-hero .rp-lead{max-width:52ch;margin:1.5rem 0 0}
.rp-cta-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:1rem 1.5rem;margin-top:2.5rem}
.rp-hero .rp-cta-row{justify-content:flex-start}
/* Index-page hero: the list below it is the point, so the hero states the
   offer and gets out of the way rather than filling a screen on its own. */
.rp-hero--compact{padding-block:clamp(2.25rem,3.6vw,3.1rem)}
.rp-hero--compact .rp-lead{margin-top:1.05rem;max-width:46ch}
.rp-hero--compact .rp-cta-row{margin-top:1.5rem;gap:.75rem 1rem}
.rp-hero__note{margin:1.4rem 0 0;max-width:60ch;font-size:var(--rp-small);line-height:1.55;color:var(--rp-ink-2);padding-left:.9rem;border-left:2px solid var(--rp-tangelo)}
/* Quicklinks: the same filters the catalog offers, for a reader who already
   knows which program they came for. Text links, not another row of pills. */
.rp-quicklinks{display:flex;flex-wrap:wrap;align-items:baseline;gap:.4rem 1.15rem;margin-top:1.6rem;padding-top:1.1rem;border-top:1px solid var(--rp-line)}
/* The quicklinks row already hands the reader down the page, so the band that
   follows a compact hero does not need a full section's worth of air above it. */
.rp-hero--compact+.rph-section,.rp-hero--compact+.rp-section{padding-top:clamp(1.9rem,3vw,2.75rem)}
.rp-quicklinks__label{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-ds .rp-quicklinks a{font-size:var(--rp-small);font-weight:600;color:var(--rp-ink-2);text-decoration:none;border-bottom:1px solid transparent;transition:color .15s,border-color .15s}
.rp-ds .rp-quicklinks a:hover{color:var(--rp-blue-bright);border-bottom-color:var(--rp-blue-bright)}

/* ---- section head with folio ---- */
.rp-sec-head{display:flex;align-items:baseline;gap:1rem;margin-bottom:2.25rem}
.rp-sec-head .rp-folio{flex:none}

/* ---- value cards ---- */
.rp-cards{display:grid;grid-template-columns:repeat(1,1fr);gap:1.25rem}
@media(min-width:640px){.rp-cards{grid-template-columns:repeat(2,1fr)}}
@media(min-width:980px){.rp-cards{grid-template-columns:repeat(3,1fr)}
/* Four-card sets square up 2x2 instead of orphaning the fourth card. */
.rp-cards--four{grid-template-columns:repeat(2,1fr)}}
.rp-card{background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:var(--rp-r-card);padding:1.5rem 1.5rem 1.6rem;box-shadow:var(--rp-sh-sm);transition:border-color .16s,box-shadow .16s,transform .16s var(--rp-e)}
.rp-card:hover{border-color:var(--rp-blue-200);box-shadow:var(--rp-sh-md);transform:translateY(-2px)}
.rp-card h3{font-family:var(--rp-serif);font-weight:400;font-size:1.3rem;line-height:1.18;letter-spacing:-.01em;color:var(--rp-ink);margin:0}
.rp-card p{color:var(--rp-ink-2);font-size:1rem;line-height:1.6;margin:.6rem 0 0}
.rp-card .rp-cnum{font-family:var(--rp-serif);font-weight:200;font-size:1.7rem;line-height:1;color:var(--rp-blue-bright);letter-spacing:-.02em;display:block;margin-bottom:.6rem}
.rp-card-face{width:88px;height:88px;border-radius:50%;object-fit:cover;display:block;margin-bottom:.9rem;border:1px solid var(--rp-line)}
.rp-card-ico{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:12px;background:var(--rp-blue-50);color:var(--rp-blue-bright);margin-bottom:.9rem}
.rp-card-ico svg{width:22px;height:22px}
.rp-card--link{display:block;text-decoration:none}
.rp-card--link:hover{border-color:var(--rp-blue-bright)}
.rp-card-more{display:inline-block;margin-top:1.1rem;font-family:var(--rp-sans);font-weight:600;font-size:var(--rp-small);color:var(--rp-mahogany)}
.rp-card--link:hover .rp-card-more{color:var(--rp-tangelo)}

/* ---- agencies credibility strip ---- */
.rp-agencies .rp-filed{display:block;margin-bottom:1rem}
.rp-chips{display:flex;flex-wrap:wrap;gap:.5rem}
.rp-chip{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;color:var(--rp-ink-2);background:var(--rp-surface);border:1px solid var(--rp-line-2);border-radius:999px;padding:.4em .85em}

/* ---- dark CTA band (navy ground, tangelo accent) ---- */
.rp-dark{background:var(--rp-evening);color:var(--rp-d-fg)}
.rp-dark .rp-kick{color:var(--rp-lifted-blue,#6490E2)}
.rp-dark .rp-kick .hot{color:var(--rp-tangelo-400)}
.rp-dark .rp-h2{color:#fff}
.rp-dark .rp-lead{color:var(--rp-d-fg-2)}
.rp-dark .rp-body{color:var(--rp-d-fg-2)}
/* theme.json colors prose links with primary (tangelo), an accent, not a link color; on navy they take the lifted blue (4.73:1 on evening) */
.rp-dark p a:where(:not(.wp-element-button)){color:var(--rp-lifted-blue,#6490E2);text-decoration:underline;text-underline-offset:.18em}
.rp-dark p a:where(:not(.wp-element-button)):hover{color:#fff}
.rp-cta{padding-block:clamp(3.5rem,7vw,5.5rem);text-align:center}
/* Over the photo/video ground the lifted blue muddies; the CTA eyebrow runs
   white and a step larger so it holds against the scrim. */
.rp-cta .rp-kick{font-size:1.0625rem;color:#fff}
/* The eyebrow was given light ink for the scrim and the two elements that
   carry the message were not, so the heading and the lede sat in body ink on
   a dark navy photo (1.2:1, effectively unreadable). Only the --photo variant
   has a dark ground; the plain CTA keeps page ink. */
.rp-cta--photo .rp-h2{color:var(--rp-d-fg)}
.rp-cta--photo .rp-lead,
.rp-cta--photo .rp-cta-note{color:var(--rp-d-fg-2)}
.rp-cta .rp-h2{max-width:20ch;margin-inline:auto}
.rp-cta .rp-lead{max-width:44ch;margin:1.1rem auto 0}
.rp-cta .rp-cta-row{margin-top:2rem}

/* ---- media-aware bands: photo hero, photo split band, photo CTA ----
   Photography comes from the brand DAM (assets/img/rp/…). Treatments keep the
   rp-ds grammar: navy ground, hairline borders, serif display; the photo is
   content, not decoration, so it always ships with alt text. */
.rp-hero--photo .rp-wrap{text-align:left}
.rp-hero--photo .rp-h1,.rp-hero--photo .rp-lead{margin-inline:0}
.rp-hero--photo .rp-cta-row{justify-content:flex-start}
.rp-hero-fig{margin:2rem 0 0;position:relative}
.rp-hero-fig img,.rp-hero-fig video{display:block;width:100%;height:100%;object-fit:cover;border-radius:var(--rp-r-card);border:1px solid var(--rp-line);box-shadow:var(--rp-sh-md)}
/* Video hero: the clip has no intrinsic box until it loads, so hold the frame
   with an aspect ratio to stop the hero reflowing on slow connections. */
.rp-hero-fig--video{aspect-ratio:3/2}
@media(min-width:900px){
  .rp-hero--photo .rp-wrap{display:grid;grid-template-columns:1.05fr .95fr;gap:3.5rem;align-items:center}
  .rp-hero-fig{margin:0;height:100%;min-height:340px}
  .rp-hero-fig img,.rp-hero-fig video{position:absolute;inset:0}
  .rp-hero-fig--video{aspect-ratio:auto}
}
/* The still is the reduced-motion stand-in; the clip wins by default. */
.rp-hero-fig--video .rp-hero-video-still{display:none}
@media(prefers-reduced-motion:reduce){
  .rp-hero-fig--video .rp-hero-video{display:none}
  .rp-hero-fig--video .rp-hero-video-still{display:block}
}
/* Hero with the book as its object (About): text left, 3D mockup right.
   Calmer register than the homepage stage — small tilt, quiet caption. */
.rp-hero--book .rp-wrap{text-align:left}
.rp-hero--book .rp-h1,.rp-hero--book .rp-lead{margin-inline:0}
.rp-hero--book .rp-cta-row{justify-content:flex-start}
.rp-hero__bookobj{display:flex;flex-direction:column;align-items:center;gap:.9rem;margin:2.25rem auto 0;text-decoration:none;max-width:240px}
.rp-hero__bookobj img{display:block;width:100%;height:auto;border-radius:2px 5px 5px 2px;box-shadow:0 1px 2px rgba(11,29,58,.18),0 10px 22px -8px rgba(11,29,58,.28),0 30px 48px -18px rgba(11,29,58,.34);transition:transform .24s ease,box-shadow .24s ease}
.rp-hero__bookobj:hover img{transform:translateY(-4px);box-shadow:0 2px 3px rgba(11,29,58,.16),0 16px 28px -10px rgba(11,29,58,.28),0 40px 60px -20px rgba(11,29,58,.38)}
.rp-hero__bookcap{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3);text-align:center}
.rp-hero__bookobj:hover .rp-hero__bookcap{color:var(--rp-blue)}
@media(min-width:900px){
  .rp-hero__bookgrid{display:grid;grid-template-columns:1.1fr .9fr;gap:3.5rem;align-items:center}
  .rp-hero__bookobj{margin:0 auto}
}
@media(prefers-reduced-motion:reduce){.rp-hero__bookobj img{transition:none}}
/* Rail hero (About sub-pages): copy left, aside card right, breadcrumb strip
   above. Glow shifts left so the asymmetry reads intentional. */
.rp-hero--rail::before{background:radial-gradient(52% 55% at 26% 32%,var(--rp-blue-50),transparent 70%)}
.rp-hero--rail .rp-wrap{text-align:left}
.rp-hero--rail .rp-h1{max-width:16ch;margin:.6rem 0 0}
.rp-hero--rail .rp-lead{max-width:52ch;margin:1.35rem 0 0}
.rp-hero--rail .rp-cta-row{justify-content:flex-start}
.rp-hero__aside{margin:2.25rem 0 0;border:1px solid var(--rp-line);border-radius:var(--rp-r-card);background:var(--rp-surface);box-shadow:var(--rp-sh-sm);overflow:hidden}
.rp-hero__aside-label{display:block;font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.14em;text-transform:uppercase;color:var(--rp-ink-3);padding:.9rem 1.25rem;border-bottom:1px solid var(--rp-line)}
.rp-hero__facts{list-style:none;margin:0;padding:.4rem 0}
.rp-hero__facts li{display:flex;align-items:baseline;gap:1rem;padding:.7rem 1.25rem}
.rp-hero__facts li+li{border-top:1px solid var(--rp-line)}
.rp-hero__facts b{font-family:var(--rp-serif);font-weight:400;font-size:1.35rem;color:var(--rp-ink);min-width:4.5ch}
.rp-hero__facts span{font-size:.85rem;color:var(--rp-ink-2);line-height:1.4}
.rp-hero__links{list-style:none;margin:0;padding:.4rem 0}
.rp-hero__links li{display:flex;flex-direction:column;gap:.3rem;padding:.8rem 1.25rem}
.rp-hero__links li+li{border-top:1px solid var(--rp-line)}
.rp-hero__links-meta{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-hero__links a{font-family:var(--rp-serif);font-size:1rem;line-height:1.35;color:var(--rp-ink);text-decoration:none}
.rp-hero__links a:hover{color:var(--rp-blue,#2F62C4)}
.rp-hero__aside figure{margin:0}
.rp-hero__aside img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;object-position:top}
.rp-hero__aside figcaption{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3);padding:.8rem 1.25rem;border-top:1px solid var(--rp-line)}
@media(min-width:900px){
  .rp-hero--rail .rp-wrap{display:grid;grid-template-columns:1.15fr .85fr;gap:4rem;align-items:center}
  .rp-hero__aside{margin:0}
}
/* Breadcrumb strip: prepended to page content by rp_breadcrumbs_prepend(),
   so it renders just above the pattern's alignfull group. Shares the hero's
   paper ground and eats into its top padding so the two read as one surface. */
.rp-crumbs{background:var(--rp-bg);padding-block:1.1rem 0}
.rp-crumbs__wrap{width:100%;max-width:var(--rp-c-max);margin-inline:auto;padding-inline:1.5rem;display:flex;flex-wrap:wrap;align-items:baseline;gap:.65rem;font-family:var(--rp-sans);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase}
.rp-crumbs__link{color:var(--rp-ink-3);text-decoration:none}
.rp-crumbs__link:hover{color:var(--rp-blue,#2F62C4)}
.rp-crumbs__sep{color:var(--rp-line-2)}
.rp-crumbs__here{color:var(--rp-ink-2)}
.rp-crumbs+.wp-block-group .rp-hero{padding-block-start:clamp(1.5rem,3vw,2.25rem)}
/* Inline variant: sits in the hero's eyebrow slot, echoing the .rp-kick
   grammar (tangelo dot, no band of its own). */
.rp-crumbs--inline{background:none;padding:0;margin:0 0 .1rem}
.rp-crumbs--inline .rp-crumbs__wrap{max-width:none;padding:0;font-size:.68rem}
.rp-crumbs--inline .rp-crumbs__wrap::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--rp-tangelo);align-self:center;margin-right:.15rem}
/* Dark-ground heroes: the trail's light-ground inks would vanish on navy. */
.rp-dark .rp-crumbs__link{color:rgba(255,255,255,.62)}
.rp-dark .rp-crumbs__link:hover{color:#fff}
.rp-dark .rp-crumbs__sep{color:rgba(255,255,255,.35)}
.rp-media{display:grid;gap:2.25rem}
.rp-media__fig{margin:0}
.rp-media__fig img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;border-radius:var(--rp-r-card);border:1px solid var(--rp-line);box-shadow:var(--rp-sh-md)}
/* A mark in the media slot (the CCAR builder logo on interview prep): contained, on paper, never cropped. */
.rp-media__fig--mark img{object-fit:contain;padding:clamp(1.5rem,6%,3rem);background:var(--rp-paper);box-shadow:none}
.rp-media__cap{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink-3);margin-top:.65rem}
@media(min-width:900px){
  .rp-media{grid-template-columns:1.05fr .95fr;gap:3.5rem;align-items:stretch}
  .rp-media--flip .rp-media__fig{order:-1}
  /* The figure matches the copy column height, so the photo's top and bottom
     edges align with the text block instead of floating beside it. */
  .rp-media__fig{display:flex;flex-direction:column}
  .rp-media__fig img{flex:1;min-height:340px;aspect-ratio:auto}
}

/* ---- type pacing: kicker → headline → lead → body → list ----
   rp-h2 / rp-lead / rp-kick are margin:0 primitives; the rhythm between them
   is set here, once, by adjacency, so every band paces the same. */
.rp-kick+.rp-h2{margin-top:.85rem}
.rp-h2+.rp-lead,.rp-h2+.rp-body{margin-top:1.15rem}
.rp-lead+.rp-lead,.rp-lead+.rp-body,.rp-body+.rp-body{margin-top:1rem}
.rp-body{font-size:1rem;line-height:1.7;color:var(--rp-ink-2);margin:0}
.rp-band__head .rp-ticks{margin-top:1.4rem;gap:.7rem}
/* ---- featured testimonial: one voice, given the whole band ---- */
.rp-quote-feat{max-width:880px;margin-inline:auto;text-align:center}
.rp-quote-feat .rp-kick{display:flex;align-items:center;justify-content:center;gap:.5rem}
.rp-quote-feat blockquote{font-family:var(--rp-serif);font-weight:300;font-size:clamp(1.45rem,2.8vw,2.1rem);line-height:1.4;letter-spacing:-.012em;color:#fff;margin:1.4rem 0 0}
.rp-quote-feat blockquote::before{content:"\201C";display:block;font-family:var(--rp-serif);font-weight:400;font-size:5rem;line-height:.55;color:var(--rp-tangelo-400);margin:1.4rem auto .35rem}
.rp-quote-feat blockquote em{font-style:italic;color:var(--rp-tangelo-400)}
.rp-quote-feat figcaption{margin-top:2rem;font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.12em;text-transform:uppercase;color:var(--rp-d-fg-3);line-height:1.7;max-width:56ch;margin-inline:auto}

.rp-cta--photo{position:relative;overflow:hidden}
.rp-cta--photo .rp-cta-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.rp-cta--photo::after{content:"";position:absolute;inset:0;background:linear-gradient(rgba(15,38,76,.78),rgba(15,38,76,.88))}
.rp-cta--photo .rp-wrap{position:relative;z-index:1}
@media (prefers-reduced-motion: reduce){video.rp-cta-bg{display:none}}

/* ============================================================================
   Consultation page ($210 conversion centerpiece) — mirrors the platform
   /resume-place/consultation north-star. Used by inc/consultation-page.php.
   ============================================================================ */
.rp-measure{max-width:52ch}

/* The consultation hero is rendered by rp_render_hero() using the shared
   `rph-hero` markup (styles in rp-bands.css), so the old `.rp-hero--split`
   /`.rp-facts` block lived here previously and has been removed. */

/* Hero proof rail (founder portrait + $210 sticker) is shared with the homepage
   hero; its styles live in rp-bands.css (.rph-proof__* / .rph-pricetag). */

/* ---- trust strip (authority proof under the hero) ---- */
.rp-trust{background:var(--rp-bg);border-bottom:1px solid var(--rp-line)}
.rp-trust-grid{width:100%;max-width:var(--rp-c-max);margin-inline:auto;display:grid;grid-template-columns:repeat(2,1fr)}
@media(min-width:760px){.rp-trust-grid{grid-template-columns:repeat(4,1fr)}}
.rp-trust-cell{display:flex;flex-direction:column;gap:.45rem;padding:1.6rem 2rem;border-top:1px solid var(--rp-line)}
.rp-trust-cell:nth-child(n+2){border-left:1px solid var(--rp-line)}
@media(min-width:760px){.rp-trust-cell{border-top:0}.rp-trust-cell:first-child{border-left:0}}
.rp-trust-lead{font-family:var(--rp-serif);font-weight:400;font-size:1.45rem;line-height:1;letter-spacing:-.015em;color:var(--rp-ink)}
.rp-trust-sub{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;line-height:1.4;color:var(--rp-ink-3)}
.rp-trust-rule{width:22px;height:2px;background:var(--rp-blue-bright);margin-top:.25rem}

/* ---- resume samples (specimen shelf + handoff) ---- */
.rp-samples-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1.5rem;flex-wrap:wrap;margin-bottom:2.5rem}
.rp-samples-intro{max-width:54ch}
.rp-samples-intro .rp-h2{margin:.8rem 0 0}
.rp-samples-intro .rp-lead{margin-top:1.1rem}
.rp-samples-head .rp-link{white-space:nowrap;padding-bottom:.4rem}
.rp-samples-shelf{display:grid;grid-template-columns:repeat(2,1fr);gap:1.1rem}
@media(min-width:900px){.rp-samples-shelf{grid-template-columns:repeat(4,1fr)}}
.rp-sample{margin:0;display:flex;flex-direction:column}
.rp-sample-frame{position:relative;background:var(--rp-surface);border:1px solid var(--rp-line-2);border-radius:10px;overflow:hidden;box-shadow:var(--rp-sh-sm);aspect-ratio:17/22}
.rp-sample-frame img{display:block;width:100%;height:100%;object-fit:cover;object-position:top center}
.rp-sample-tag{position:absolute;left:10px;top:10px;font-family:var(--rp-cond);font-weight:700;font-size:.625rem;letter-spacing:.1em;text-transform:uppercase;color:#fff;background:var(--rp-blue-bright);padding:.35em .6em;border-radius:5px}
.rp-sample-tag.is-accent{background:var(--rp-tangelo)}
.rp-sample-caption{font-family:var(--rp-serif);font-weight:500;font-size:1rem;color:var(--rp-ink);letter-spacing:-.01em;margin-top:.9rem}
.rp-sample-note{font-size:.8rem;line-height:1.5;color:var(--rp-ink-2);margin:.4rem 0 0}
.rp-samples-handoff{display:grid;grid-template-columns:1fr;gap:1.25rem;align-items:center;margin-top:2.5rem;background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:14px;padding:1.5rem 1.75rem;box-shadow:var(--rp-sh-sm)}
@media(min-width:820px){.rp-samples-handoff{grid-template-columns:1fr auto;gap:1.75rem}}
.rp-samples-handoff .rp-kick{color:var(--rp-tangelo)}
.rp-samples-handoff-copy{font-family:var(--rp-serif);font-weight:400;font-size:1.2rem;line-height:1.5;color:var(--rp-ink);margin:.5rem 0 0;max-width:60ch}
.rp-samples-handoff .rp-cta-row{margin-top:0;justify-content:flex-start}
.rp-samples-foot{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink-3);margin:1rem 0 0}

/* ---- the stakes ---- */
.rp-stakes-grid{display:grid;grid-template-columns:1fr;gap:2.5rem}
@media(min-width:900px){.rp-stakes-grid{grid-template-columns:.92fr 1.08fr;gap:3.5rem;align-items:start}}
.rp-stakes-intro .rp-h2{margin:.8rem 0 0;max-width:16ch}
.rp-stakes-intro .rp-lead{margin-top:1.2rem;max-width:40ch}
.rp-forces{display:flex;flex-direction:column}
.rp-force{display:grid;grid-template-columns:auto 1fr;column-gap:1.25rem;padding-block:1.5rem;border-top:1px solid var(--rp-line)}
.rp-force:first-child{border-top:0}
.rp-force-no{font-family:var(--rp-mono);font-size:.78rem;font-weight:600;letter-spacing:.12em;color:var(--rp-blue-bright);padding-top:.35rem}
.rp-force h3{font-family:var(--rp-serif);font-weight:600;font-size:1.2rem;margin:0;color:var(--rp-ink)}
.rp-force p{font-size:1rem;line-height:1.6;color:var(--rp-ink-2);margin:.5rem 0 0;max-width:46ch}

/* ---- stat row (child-page 'stats' section kind) ---- */
.rp-statrow{display:grid;grid-template-columns:repeat(2,1fr);gap:2rem 3rem;margin-top:2rem}
@media(min-width:720px){.rp-statrow{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:2.5rem 3.5rem}}
.rp-band__head+.rp-statrow{margin-top:2.5rem}
.rp-stat{display:flex;flex-direction:column;gap:.5rem}
.rp-stat__n{font-family:var(--rp-serif);font-weight:300;font-size:clamp(2.4rem,4vw,3.2rem);line-height:.9;letter-spacing:-.02em;color:var(--rp-blue-bright)}
.rp-stat__l{font-family:var(--rp-sans);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--rp-ink-2);max-width:22ch}
/* Dark stat band: numerals go paper-white on the navy ground at display scale,
   labels dim mono. The dark full-bleed treatment is a pacing beat, so the
   numerals carry more size than the in-flow light stat row. */
.rp-dark .rp-stat__n{color:#fff;font-size:clamp(3rem,5.5vw,4.5rem)}
.rp-dark .rp-stat__l{color:var(--rp-d-fg-3)}

/* ---- accomplishment coaching add-on ---- */
.rp-coaching{display:grid;grid-template-columns:1fr;gap:2.5rem}
@media(min-width:900px){.rp-coaching{grid-template-columns:.92fr 1.08fr;gap:3.5rem;align-items:start}}
.rp-coaching-intro .rp-h2{margin:.8rem 0 0;max-width:18ch}
.rp-coaching-intro .rp-lead{margin-top:1.2rem;max-width:42ch}
.rp-coaching-intro .rp-cta-row{margin-top:2rem;justify-content:flex-start}
.rp-coaching-includes{font-size:var(--rp-small);line-height:1.58;color:var(--rp-ink-2);margin:1.5rem 0 0;max-width:50ch}

/* ---- "what we review" keyword panel ---- */
.rp-review{display:grid;grid-template-columns:1fr;gap:1.25rem;margin-top:2rem}
@media(min-width:760px){.rp-review{grid-template-columns:1fr 1fr}}
.rp-review-col{background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:var(--rp-r-card);padding:1.5rem;box-shadow:var(--rp-sh-sm)}
.rp-review-title{font-family:var(--rp-serif);font-weight:400;font-size:1.5rem;margin:.7rem 0 0;color:var(--rp-ink)}
.rp-review-meta{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.08em;color:var(--rp-ink-3);margin:.3rem 0 0}
.rp-chips--key{margin-top:1.2rem}
.rp-match{list-style:none;margin:1.2rem 0 0;padding:0;display:flex;flex-direction:column;gap:.55rem}
.rp-match li{display:flex;align-items:center;gap:.6rem;font-size:var(--rp-small);color:var(--rp-ink)}
.rp-match-mark{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;border-radius:6px;font-size:.72rem;font-weight:700;flex:none}
.rp-match .is-hit .rp-match-mark,.rp-match li.is-hit .rp-match-mark{background:var(--rp-blue-50);color:var(--rp-blue-bright)}
.rp-match .is-miss .rp-match-mark,.rp-match li.is-miss .rp-match-mark{background:var(--rp-tangelo-50);color:var(--rp-tangelo-700)}
.rp-match-tag{margin-left:auto;font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-match li.is-miss .rp-match-tag{color:var(--rp-tangelo-700)}

/* ---- the offer (steps + sticky price card) ---- */
.rp-offer-grid{display:grid;grid-template-columns:1fr;gap:2.5rem}
@media(min-width:900px){.rp-offer-grid{grid-template-columns:1.05fr .95fr;gap:3.5rem;align-items:start}}
.rp-offer-step{display:grid;grid-template-columns:auto 1fr;column-gap:1.25rem;padding-block:1.5rem;border-top:1px solid var(--rp-line)}
.rp-offer-step:first-child{border-top:0;padding-top:0}
.rp-offer-no{font-family:var(--rp-serif);font-weight:200;font-size:2rem;line-height:1;color:var(--rp-blue-bright);letter-spacing:-.02em}
.rp-offer-head{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem}
.rp-offer-head h3{font-family:var(--rp-serif);font-weight:600;font-size:1.25rem;margin:0;color:var(--rp-ink)}
.rp-offer-price{font-family:var(--rp-cond);font-weight:600;font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--rp-ink-3);white-space:nowrap}
.rp-ticks{list-style:none;margin:.9rem 0 0;padding:0;display:flex;flex-direction:column;gap:.55rem}
.rp-ticks li{position:relative;padding-left:1.1rem;font-size:var(--rp-small);line-height:1.5;color:var(--rp-ink-2)}
.rp-ticks li::before{content:"";position:absolute;left:0;top:.55em;width:.4rem;height:.4rem;border-radius:50%;background:var(--rp-tangelo)}
.rp-table-scroll{margin-top:1.6rem;overflow-x:auto;border:1px solid var(--rp-line);border-radius:var(--rp-r-card);background:var(--rp-surface)}
.rp-table{width:100%;border-collapse:collapse;font-size:var(--rp-small)}
.rp-table th,.rp-table td{padding:.65rem .9rem;text-align:right;border-bottom:1px solid var(--rp-line);white-space:nowrap}
.rp-table thead th{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3);background:var(--rp-surface-2)}
.rp-table th[scope=row],.rp-table thead th:first-child{text-align:left}
.rp-table th[scope=row]{font-weight:600;color:var(--rp-ink)}
.rp-table td{font-family:var(--rp-sans);color:var(--rp-ink-2)}
.rp-table tbody tr:last-child th,.rp-table tbody tr:last-child td{border-bottom:0}
.rp-table tr.rp-table-total th,.rp-table tr.rp-table-total td{border-top:2px solid var(--rp-line-2);font-weight:600;color:var(--rp-ink)}
.rp-price-card{background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:18px;padding:2rem 1.85rem;box-shadow:0 26px 56px -28px rgba(11,29,58,.42),0 10px 22px -14px rgba(11,29,58,.22)}
@media(min-width:900px){.rp-price-card{position:sticky;top:6rem}}
.rp-price-title{font-family:var(--rp-serif);font-weight:400;font-size:1.65rem;line-height:1.1;color:var(--rp-ink);margin:.7rem 0 .4rem;letter-spacing:-.015em}
.rp-price-note{color:var(--rp-ink-2);font-size:var(--rp-small);line-height:1.55;margin:0}
.rp-price-figure{display:flex;align-items:baseline;gap:.5rem;margin-top:1.25rem;padding-block:1.1rem;border-block:1px solid var(--rp-line)}
.rp-price-from{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-price-num{font-family:var(--rp-serif);font-weight:300;font-size:2.6rem;line-height:1;color:var(--rp-blue-bright);letter-spacing:-.02em}
.rp-price-unit{font-size:var(--rp-small);color:var(--rp-ink-3)}
.rp-price-card .rp-ticks{margin-top:1.25rem}
/* Two rates shown plainly, equal weight (both GS bands, no hidden step-up). */
.rp-price-rates{margin-top:1.25rem;border-block:1px solid var(--rp-line)}
.rp-price-rate{display:flex;align-items:baseline;gap:.5rem;padding-block:.9rem}
.rp-price-rate + .rp-price-rate{border-top:1px solid var(--rp-line)}
.rp-price-rate-num{font-family:var(--rp-serif);font-weight:300;font-size:2rem;line-height:1;color:var(--rp-blue-bright);letter-spacing:-.02em}
.rp-price-rate-unit{font-size:var(--rp-small);color:var(--rp-ink-3)}
.rp-price-rate-who{margin-left:auto;text-align:right;font-size:var(--rp-small);color:var(--rp-ink-2);max-width:18ch;line-height:1.35}
.rp-price-cta{margin-top:1.5rem;display:flex;flex-direction:column;gap:.65rem}
.rp-price-cta .rp-btn{width:100%}
.rp-price-foot{margin-top:1rem;font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink-3);text-align:center}

/* Offer tiers — the three ways to work, as a calm 3-up of cards. The intake
   is no longer crammed in beside them; it gets its own reserve band below. */
.rp-offer-tiers{display:grid;grid-template-columns:1fr;gap:1.25rem;margin-top:2.5rem}
@media(min-width:760px){.rp-offer-tiers{grid-template-columns:repeat(3,1fr);gap:1.5rem}}
.rp-tier{background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:14px;padding:1.6rem 1.5rem;display:flex;flex-direction:column;box-shadow:var(--rp-sh-md)}
.rp-tier-top{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem}
.rp-tier-no{font-family:var(--rp-serif);font-weight:200;font-size:2.2rem;line-height:1;color:var(--rp-blue-bright);letter-spacing:-.02em}
.rp-tier-price{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--rp-ink-3);text-align:right}
.rp-tier-title{font-family:var(--rp-serif);font-weight:600;font-size:1.2rem;margin:.7rem 0 0;color:var(--rp-ink)}
.rp-tier .rp-ticks{margin-top:.85rem}
.rp-tier p{font-size:var(--rp-small);color:var(--rp-ink-2);line-height:1.5;margin:.4rem 0 0}
/* Two side-by-side rate cards (Pricing "What it costs"). */
.rp-rate-cards{display:grid;grid-template-columns:1fr;gap:1rem;margin-top:.5rem}
@media(min-width:520px){.rp-rate-cards{grid-template-columns:1fr 1fr}}

/* Reserve band — the intake gets room to breathe: a centered intro over a
   wide, calm form card on the paper surface. Not squished, not pinned. */
#order{scroll-margin-top:5.5rem}
.rp-reserve{max-width:880px;margin-inline:auto}
.rp-reserve-head{text-align:center;max-width:640px;margin:0 auto 2.75rem}
.rp-reserve-head .rp-kick{display:flex;align-items:center;justify-content:center;gap:.5rem}
.rp-reserve-head .rp-h2{margin:.9rem 0 0}
.rp-reserve-head .rp-lead{margin:1rem auto 0;max-width:54ch}
.rp-reserve-meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:1.25rem 2.25rem;margin-top:1.85rem;padding-top:1.85rem;border-top:1px solid var(--rp-line)}
.rp-reserve-stamp{display:flex;align-items:baseline;gap:.4rem}
.rp-reserve-stamp .from{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-reserve-stamp .num{font-family:var(--rp-serif);font-weight:300;font-size:2.4rem;line-height:1;color:var(--rp-blue-bright);letter-spacing:-.02em}
.rp-reserve-stamp .unit{font-size:var(--rp-small);color:var(--rp-ink-3)}
.rp-reserve-assurances{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.32rem;text-align:left}
.rp-reserve-assurances li{position:relative;padding-left:1.1rem;font-size:var(--rp-small);color:var(--rp-ink-2);line-height:1.45}
.rp-reserve-assurances li::before{content:"";position:absolute;left:0;top:.5em;width:.4rem;height:.4rem;border-radius:50%;background:var(--rp-tangelo)}
.rp-reserve-help{text-align:center;margin-top:1.35rem;font-size:var(--rp-small);color:var(--rp-ink-2)}
.rp-reserve-help a{color:var(--rp-mahogany);font-weight:600}
.rp-reserve-form{max-width:760px;margin-inline:auto}

/* ---- four moves ---- */
.rp-moves{display:grid;grid-template-columns:1fr;gap:1.5rem 2rem}
@media(min-width:600px){.rp-moves{grid-template-columns:repeat(2,1fr)}}
@media(min-width:980px){.rp-moves{grid-template-columns:repeat(4,1fr)}}
.rp-move{border-top:2px solid var(--rp-line-2);padding-top:1.1rem}
.rp-move-no{font-family:var(--rp-serif);font-weight:200;font-size:2rem;line-height:1;color:var(--rp-blue-bright)}
.rp-move h3{font-family:var(--rp-serif);font-weight:600;font-size:1.15rem;margin:.6rem 0 0;color:var(--rp-ink)}
.rp-move p{font-size:var(--rp-small);line-height:1.55;color:var(--rp-ink-2);margin:.5rem 0 0}

/* ---- testimonials ---- */
.rp-words-top{margin:0 0 3rem}
@media(min-width:1000px){.rp-words-top{display:grid;grid-template-columns:minmax(300px,360px) 1fr;gap:clamp(2.5rem,4vw,4.5rem);align-items:start}}
.rp-words-lead{position:sticky;top:6rem}
@media(max-width:999px){.rp-words-lead{position:static}}
.rp-quote-lead{margin:0;max-width:46ch}
/* Featured testimonial: lead with the outcome as serif display (the proof),
   demote the quote to supporting prose. Tangelo hairline divides the two. */
.rp-quote-stat{font-family:var(--rp-serif);font-weight:300;font-size:clamp(2.1rem,3.4vw,3rem);line-height:1.04;letter-spacing:-.024em;color:var(--rp-ink);margin:0;text-wrap:balance}
.rp-quote-stat::after{content:"";display:block;width:2.75rem;height:2px;border-radius:2px;background:var(--rp-tangelo);margin:1.5rem 0 0}
.rp-quote-body,.rp-quote.wp-block-quote > p{font-family:var(--rp-serif);font-weight:300;font-size:clamp(1.08rem,1.2vw,1.28rem);line-height:1.62;letter-spacing:-.006em;color:var(--rp-ink-2);margin:1.5rem 0 0}
.rp-quote-cite,.rp-quote.wp-block-quote cite{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3);margin-top:1.75rem}

/* Volume / success stat stack: serif display value over a mono label, each on a
   hairline rule. Carries the "people, places, scale" message the photos imply. */
.rp-words-stats{margin:2.25rem 0 0;border-top:1px solid var(--rp-line);display:flex;flex-direction:column}
.rp-words-stat{padding:1rem 0;border-bottom:1px solid var(--rp-line);display:flex;align-items:baseline;gap:1rem}
.rp-words-stat dt{font-family:var(--rp-serif);font-weight:300;font-size:clamp(1.6rem,2.4vw,2rem);line-height:1;letter-spacing:-.02em;color:var(--rp-tangelo);flex:0 0 5.5rem}
.rp-words-stat dd{margin:0;font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.04em;text-transform:uppercase;line-height:1.5;color:var(--rp-ink-3)}

/* Cohort mosaic: a hand-tiled asymmetric wall of real class photos that conveys
   the volume of people, the spread of places, and the success on every face.
   Three 2x2 anchors (a, f, plus the bleed) set the rhythm; the rest are wide
   2x1 tiles. Tiles fill perfectly so the wall reads as composed, not scattered.
   It bleeds off the right edge inside .rp-wrap--bleed. */
.rp-collage{margin:2rem 0 0;display:grid;grid-template-columns:repeat(2,1fr);gap:.6rem}
.rp-collage-item{position:relative;margin:0;aspect-ratio:4/3;border-radius:var(--rp-r-card);overflow:hidden;box-shadow:var(--rp-sh-sm);background:var(--rp-surface-2)}
.rp-collage-item img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .5s var(--rp-e)}
.rp-collage-item:hover img{transform:scale(1.05)}
/* Place chip: legible over photos via a navy scrim, hidden until the eye lands. */
.rp-collage-loc{position:absolute;left:0;right:0;bottom:0;margin:0;padding:1.6rem .85rem .7rem;font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:#fff;
  background:linear-gradient(to top,rgba(16,36,58,.78),rgba(16,36,58,0));
  opacity:0;transform:translateY(4px);transition:opacity .2s,transform .2s var(--rp-e)}
.rp-collage-loc::before{content:"";display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--rp-tangelo-400);margin-right:.5em;vertical-align:middle}
.rp-collage-item:hover .rp-collage-loc,.rp-collage-item:focus-within .rp-collage-loc{opacity:1;transform:none}
@media(min-width:760px){
  .rp-collage{grid-template-columns:repeat(6,1fr);grid-template-rows:repeat(4,1fr);gap:.7rem;
    aspect-ratio:6/4;
    grid-template-areas:"a a b b c c" "a a b b d d" "e e f f g g" "h h f f i i"}
  .rp-collage-item{aspect-ratio:auto;height:100%}
  .rp-collage-item--a{grid-area:a}.rp-collage-item--b{grid-area:b}.rp-collage-item--c{grid-area:c}
  .rp-collage-item--d{grid-area:d}.rp-collage-item--e{grid-area:e}.rp-collage-item--f{grid-area:f}
  .rp-collage-item--g{grid-area:g}.rp-collage-item--h{grid-area:h}.rp-collage-item--i{grid-area:i}
}
@media(min-width:1000px){.rp-collage{margin:0}}
.rp-quote-outcome{font-family:var(--rp-serif);font-weight:500;font-size:1.05rem;color:var(--rp-tangelo);margin:0 0 .6rem}
.rp-quote-lead blockquote{font-family:var(--rp-serif);font-weight:300;font-size:clamp(1.25rem,2.2vw,1.6rem);line-height:1.4;letter-spacing:-.01em;color:var(--rp-ink);margin:0}
.rp-quote-lead figcaption,.rp-quote figcaption{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3);margin-top:1rem}
.rp-quotes{display:grid;grid-template-columns:1fr;gap:1.5rem}
@media(min-width:760px){.rp-quotes{grid-template-columns:repeat(3,1fr)}}
.rp-quote{background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:var(--rp-r-card);padding:1.5rem;box-shadow:var(--rp-sh-sm);margin:0}
.rp-quote blockquote{font-size:var(--rp-small);line-height:1.6;color:var(--rp-ink-2);margin:0}
.rp-quote .rp-quote-outcome{font-size:.95rem}

/* ---- book band ---- */
.rp-book{display:grid;grid-template-columns:1fr;gap:2.5rem;align-items:center;padding-block:clamp(3.5rem,7vw,5.5rem)}
@media(min-width:820px){.rp-book{grid-template-columns:1.2fr .8fr}}
.rp-book-copy .rp-h2{margin:.7rem 0 0}
.rp-book-copy .rp-lead{margin-top:1.1rem;max-width:48ch}
.rp-book-shot{justify-self:center;margin:0;width:15rem;max-width:100%}
.rp-book-shot img{display:block;width:100%;height:auto;border-radius:4px;filter:drop-shadow(0 30px 50px rgba(0,0,0,.5))}

/* ---- book shelf (featured titles, ahead of the samples) ----
   Mirrors the React Bookshelf: a faint blue-wash ground, product cards with a
   serif title, mono category stamp, and a "from" price. Hover lifts the cover. */
.rp-shelf-sec{background:var(--rp-blue-50);padding-block:clamp(3.5rem,7vw,6rem);border-bottom:1px solid var(--rp-line)}
.rp-shelf-grid{display:grid;grid-template-columns:1fr;gap:1.75rem}
@media(min-width:560px){.rp-shelf-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:980px){.rp-shelf-grid{grid-template-columns:repeat(4,1fr)}}
.rp-shelf-card{display:flex;flex-direction:column;text-decoration:none;color:inherit}
.rp-shelf-frame{background:var(--rp-surface);border:1px solid var(--rp-line-2);border-radius:14px;padding:.5rem;box-shadow:var(--rp-sh-sm);display:flex;align-items:center;justify-content:center;aspect-ratio:3/4;overflow:hidden}
.rp-shelf-cover{width:100%;height:100%;object-fit:cover;border-radius:9px;filter:drop-shadow(0 14px 26px rgba(11,29,58,.22));transition:transform .2s var(--rp-e)}
.rp-shelf-card:hover .rp-shelf-cover{transform:translateY(-4px)}
.rp-shelf-tag{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.14em;text-transform:uppercase;color:var(--rp-blue-bright);margin-top:1.1rem}
.rp-shelf-title{font-family:var(--rp-serif);font-weight:500;font-size:1.12rem;line-height:1.2;letter-spacing:-.01em;color:var(--rp-ink);margin:.5rem 0 0}
.rp-shelf-blurb{font-size:.84rem;line-height:1.5;color:var(--rp-ink-2);margin:.5rem 0 0;flex:1}
.rp-shelf-price{font-family:var(--rp-serif);font-weight:300;font-size:1.2rem;color:var(--rp-ink);margin-top:.9rem}
.rp-shelf-from{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.12em;text-transform:uppercase;color:var(--rp-ink-3);margin-right:.4rem}

/* ---- mobile reserve bar (form one tap away once the rail scrolls off) ---- */
.rp-reserve-bar{position:fixed;left:0;right:0;bottom:0;z-index:60;display:none;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 1.15rem calc(.75rem + env(safe-area-inset-bottom));background:var(--rp-white,#FFFFFF);color:var(--rp-tangelo-700,#C04000);border-top:2px solid var(--rp-tangelo);text-decoration:none;box-shadow:0 -8px 24px -12px rgba(11,29,58,.5)}
@media(max-width:980px){.rp-reserve-bar{display:flex}}
.rp-reserve-bar-copy{display:flex;flex-direction:column;line-height:1.2}
.rp-reserve-bar-lead{font-family:var(--rp-sans);font-weight:600;font-size:.95rem}
.rp-reserve-bar-sub{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;opacity:.85}
.rp-reserve-bar-arrow{font-family:var(--rp-sans);font-weight:700;font-size:1.15rem}

/* ---- section rhythm: hairline dividers between grounds ---- */
.rp-section--surface,.rp-section--paper{border-bottom:1px solid var(--rp-line)}

/* When the page closes on a full-bleed navy CTA, the theme's main
   bottom-padding + footer top-margin let the cream body background
   show as a stray stripe before the (also navy) footer. Collapse it
   so the CTA meets the footer seamlessly. Scoped via :has() to pages
   that actually end on the CTA. */
body:has(.rp-cta) main{padding-bottom:0}
body:has(.rp-cta) footer.wp-block-template-part{margin-top:0}

/* ---- prose block ---- */
.rp-prose{max-width:56ch}
.rp-prose .rp-h2{margin:.7rem 0 0}
.rp-prose .rp-lead{margin-top:1.1rem}
.rp-prose .rp-lead+.rp-lead{margin-top:1rem}

/* ---- FAQ ---- */
.rp-faq{max-width:50rem}
.rp-faq-list{border-top:1px solid var(--rp-line)}
.rp-faq-item{border-bottom:1px solid var(--rp-line)}
.rp-faq-item summary{list-style:none;cursor:pointer;padding:1.15rem 2rem 1.15rem 0;position:relative;font-family:var(--rp-serif);font-weight:400;font-size:1.15rem;color:var(--rp-ink)}
.rp-faq-item summary::-webkit-details-marker{display:none}
.rp-faq-item summary::after{content:"+";position:absolute;right:.2rem;top:1rem;font-family:var(--rp-sans);font-weight:400;font-size:1.4rem;color:var(--rp-blue-bright);transition:transform .18s var(--rp-e)}
.rp-faq-item[open] summary::after{content:"–"}
.rp-faq-item p{margin:0 0 1.2rem;font-size:var(--rp-small);line-height:1.62;color:var(--rp-ink-2);max-width:62ch}

.rp-dark .rp-book-copy .rp-lead{color:var(--rp-d-fg-2)}
.rp-dark .rp-book-copy .rp-h2{color:#fff}

/* ---- embedded order form ----
   A focused, single-column booking layout: the intro reads as a
   header above a wide form card, so the fields get real width
   instead of being squeezed into a column beside a sidebar. */
.rp-order{max-width:880px;margin-inline:auto}
.rp-order-intro{margin-bottom:2.25rem}
.rp-order-intro .rp-h2{margin:0}
.rp-order-intro .rp-lead{margin-top:1.1rem;max-width:60ch}
/* the three facts read as a horizontal row under the heading */
.rp-order-ticks{margin-top:1.4rem;flex-direction:row;flex-wrap:wrap;gap:.55rem 1.6rem}
.rp-order-ticks li{margin:0}
.rp-order-help{margin-top:1.2rem;font-size:var(--rp-small);color:var(--rp-ink-2)}
.rp-order-help a{color:var(--rp-mahogany);font-weight:600}
.rp-order-form{background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:18px;padding:clamp(1.5rem,3.5vw,2.75rem);box-shadow:var(--rp-sh-md)}

/* ---- self-contained multi-step consultation form ---- */
/* progress rail: a thin track that fills as the visitor advances, plus a step label */
.rp-mstep-head{margin:0 0 1.6rem}
.rp-mstep-meta{display:flex;align-items:baseline;justify-content:flex-start;gap:.9rem;margin-bottom:.7rem}
/* count and name read as one statement: "STEP 1 / 2 · About you" */
.rp-mstep-name::before{content:"·";margin-right:.9rem;color:var(--rp-ink-3)}
.rp-mstep-count{font-family:var(--rp-mono);font-size:var(--rp-xs);font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-mstep-count b{color:var(--rp-blue-bright)}
.rp-mstep-name{font-family:var(--rp-cond);font-weight:600;font-size:.92rem;letter-spacing:.02em;color:var(--rp-ink)}
.rp-mstep-track{height:4px;border-radius:999px;background:var(--rp-blue-50);overflow:hidden}
.rp-mstep-fill{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--rp-blue-bright),var(--rp-blue-bright-2));width:20%;transition:width .42s var(--rp-e)}

/* The multi-step form keeps ONE progress indicator: the numbered timeline
   (ol.rp-form-steps restyled below — number + title per step, connected by
   rules that ink in as steps complete). The old "Step n / total" meta row +
   bar stays in the DOM (the form JS still updates it) but never displays. */
.rp-mform .rp-mstep-head{display:none}
.rp-mform .rp-form-steps{display:flex;flex-wrap:nowrap;justify-content:space-between;gap:.4rem;margin:0 0 1.8rem;position:relative}
/* the timeline: one hairline behind the pills, pills sit on top of it */
.rp-mform .rp-form-steps::before{content:"";position:absolute;left:.6rem;right:.6rem;top:50%;height:1px;background:var(--rp-line)}
.rp-mform .rp-form-steps li{position:relative;flex:0 0 auto;white-space:nowrap}
/* Narrow screens: five nowrap titles can't fit — only the current step keeps
   its title; the rest collapse to numbered dots (font-size:0 hides the text
   node, the number span sets its own size). */
@media(max-width:560px){
  .rp-mform .rp-form-steps li:not(.is-current){font-size:0;gap:0}
}
/* compact step pills (also reused by the legacy fallback ol.rp-form-steps) */
.rp-form-steps{list-style:none;margin:0 0 1.6rem;padding:0;display:flex;flex-wrap:wrap;gap:.4rem .5rem}
.rp-form-steps li{display:flex;align-items:center;gap:.45rem;font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.03em;text-transform:uppercase;color:var(--rp-ink-3);padding:.32em .68em;border-radius:999px;border:1px solid var(--rp-line);background:var(--rp-surface);transition:color .16s,border-color .16s,background .16s}
.rp-form-steps li span{display:inline-flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;border-radius:50%;background:var(--rp-bg);color:var(--rp-ink-3);font-size:.68rem}
.rp-form-steps li.is-current{color:var(--rp-blue-800);border-color:var(--rp-blue-200);background:var(--rp-blue-50)}
.rp-form-steps li.is-current span{background:var(--rp-blue-bright);color:#fff}
.rp-form-steps li.is-done{color:var(--rp-ink-2);border-color:var(--rp-blue-100)}
.rp-form-steps li.is-done span{background:var(--rp-blue-bright);color:#fff}
.rp-form-steps li.is-clickable{cursor:pointer}

/* panels — one shown at a time */
.rp-mform-panel{display:none;animation:rp-mform-in .34s var(--rp-e) both}
.rp-mform-panel.is-active{display:block}
@keyframes rp-mform-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.rp-mform-panel-head{margin:0 0 1.25rem}
.rp-mform-panel-head h3{font-family:var(--rp-serif);font-weight:400;font-size:1.45rem;line-height:1.12;letter-spacing:-.01em;color:var(--rp-ink);margin:0}
.rp-mform-panel-head p{font-size:var(--rp-small);line-height:1.55;color:var(--rp-ink-2);margin:.5rem 0 0}

/* fields */
.rp-fields{display:flex;flex-direction:column;gap:1.1rem}
.rp-grid-2{display:grid;grid-template-columns:1fr;gap:1.1rem}
@media(min-width:560px){.rp-grid-2{grid-template-columns:1fr 1fr}}
.rp-field{display:flex;flex-direction:column;gap:.4rem;min-width:0}
.rp-field>label,.rp-fieldset-label{font-family:var(--rp-sans);font-weight:600;font-size:var(--rp-small);color:var(--rp-ink)}
.rp-field .req{color:var(--rp-tangelo);margin-left:.15em}
.rp-field .hint{font-size:var(--rp-xs);color:var(--rp-ink-3);line-height:1.45;font-weight:400}
.rp-input,.rp-select,.rp-textarea{width:100%;font-family:var(--rp-sans);font-size:.95rem;color:var(--rp-ink);background:var(--rp-surface);border:1px solid var(--rp-line-2);border-radius:var(--rp-r-btn);padding:.7em .85em;line-height:1.4;transition:border-color .16s,box-shadow .16s}
.rp-textarea{min-height:6.5em;resize:vertical}
.rp-select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='%23727A82' stroke-width='1.4'%3E%3Cpath d='M3 4.5 6 7.5 9 4.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .85em center;background-size:.85em;padding-right:2.2em}
.rp-input::placeholder,.rp-textarea::placeholder{color:var(--rp-ink-3)}
.rp-input:focus,.rp-select:focus,.rp-textarea:focus{outline:none;border-color:var(--rp-blue-bright);box-shadow:0 0 0 3px var(--rp-blue-50)}
.rp-field.has-error .rp-input,.rp-field.has-error .rp-select,.rp-field.has-error .rp-textarea,.rp-field.has-error .rp-choice-grid{border-color:var(--rp-tangelo);box-shadow:0 0 0 3px var(--rp-tangelo-50)}
.rp-field-error{font-size:var(--rp-xs);color:var(--rp-mahogany);font-weight:600;display:none}
.rp-field.has-error .rp-field-error{display:block}

/* choice cards (radio / checkbox) */
.rp-choice-grid{display:grid;grid-template-columns:1fr;gap:.6rem}
.rp-choice{position:relative;display:flex;gap:.7rem;align-items:flex-start;padding:.85em .95em;border:1px solid var(--rp-line-2);border-radius:var(--rp-r-btn);background:var(--rp-surface);cursor:pointer;transition:border-color .16s,box-shadow .16s,background .16s}
.rp-choice:hover{border-color:var(--rp-blue-200)}
.rp-choice input{position:absolute;opacity:0;inset:0;cursor:pointer}
.rp-choice-mark{flex:none;width:1.2rem;height:1.2rem;margin-top:.1rem;border:1.5px solid var(--rp-line-2);border-radius:50%;display:grid;place-items:center;transition:border-color .16s,background .16s}
.rp-choice input[type=checkbox]+.rp-choice-mark{border-radius:5px}
.rp-choice-mark::after{content:"";width:.55rem;height:.55rem;border-radius:50%;background:#fff;transform:scale(0);transition:transform .16s var(--rp-e)}
.rp-choice input[type=checkbox]+.rp-choice-mark::after{border-radius:2px;width:.6rem;height:.6rem}
.rp-choice-body{display:flex;flex-direction:column;gap:.1rem;min-width:0}
.rp-choice-body strong{font-family:var(--rp-sans);font-weight:600;font-size:.92rem;color:var(--rp-ink)}
.rp-choice-body span{font-size:var(--rp-xs);color:var(--rp-ink-3);line-height:1.45}
.rp-choice:has(input:checked){border-color:var(--rp-blue-bright);background:var(--rp-blue-50);box-shadow:0 0 0 1px var(--rp-blue-bright)}
.rp-choice:has(input:checked) .rp-choice-mark{border-color:var(--rp-blue-bright);background:var(--rp-blue-bright)}
.rp-choice:has(input:checked) .rp-choice-mark::after{transform:scale(1)}
.rp-choice:focus-within{box-shadow:0 0 0 3px var(--rp-blue-50)}

/* file upload (dropzone) */
.rp-drop{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.4rem;text-align:center;padding:1.6rem 1rem;border:1.5px dashed var(--rp-line-2);border-radius:var(--rp-r-card);background:var(--rp-surface-2);color:var(--rp-ink-2);cursor:pointer;transition:border-color .16s,background .16s}
.rp-drop:hover,.rp-drop.is-drag{border-color:var(--rp-blue-bright);background:var(--rp-blue-50)}
.rp-drop input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer}
.rp-drop-ico{width:1.6rem;height:1.6rem;color:var(--rp-blue-bright)}
.rp-drop-title{font-family:var(--rp-sans);font-weight:600;font-size:.92rem;color:var(--rp-ink)}
.rp-drop-title b{color:var(--rp-mahogany)}
.rp-drop-sub{font-size:var(--rp-xs);color:var(--rp-ink-3)}
.rp-drop.has-file{border-style:solid;border-color:var(--rp-blue-bright);background:var(--rp-blue-50)}
.rp-drop.has-file .rp-drop-title{color:var(--rp-blue-800)}
/* compact upload: a second, optional file on a step that already has the drop zone */
.rp-file{display:block;width:100%;padding:.55rem .7rem;border:1.5px dashed var(--rp-line-2);border-radius:var(--rp-r-card);background:var(--rp-surface-2);font-family:var(--rp-sans);font-size:var(--rp-small);color:var(--rp-ink-2);cursor:pointer;transition:border-color .16s,background .16s}
.rp-file:hover,.rp-file:focus-visible{border-color:var(--rp-blue-bright);background:var(--rp-blue-50)}
.rp-file::file-selector-button{margin-right:.75rem;padding:.4rem .85rem;border:1px solid var(--rp-line-2);border-radius:var(--rp-r-card);background:var(--rp-surface);font:inherit;font-weight:600;color:var(--rp-ink);cursor:pointer}

/* review (final step) */
.rp-review-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.rp-review-list li{display:flex;justify-content:space-between;gap:1.5rem;padding:.7rem 0;border-bottom:1px solid var(--rp-line);font-size:var(--rp-small)}
.rp-review-list dt,.rp-review-list .k{color:var(--rp-ink-3);flex:none}
.rp-review-list .v{color:var(--rp-ink);text-align:right;font-weight:500;word-break:break-word}
.rp-review-pay{margin-top:1.25rem;padding:1.1rem 1.15rem;border-radius:var(--rp-r-card);background:var(--rp-blue-50);border:1px solid var(--rp-blue-100);display:flex;align-items:center;gap:1rem}
.rp-review-pay .rp-review-pay-fig{font-family:var(--rp-serif);font-weight:300;font-size:1.9rem;line-height:1;color:var(--rp-blue-800);letter-spacing:-.02em}
.rp-review-pay p{margin:0;font-size:var(--rp-xs);line-height:1.5;color:var(--rp-ink-2)}
.rp-pay-choice{margin-top:1rem;display:flex;flex-direction:column;gap:.6rem}
.rp-pay-opt{display:flex;align-items:flex-start;gap:.65rem;padding:.85rem 1rem;border:1px solid var(--rp-line,#d6d6d4);border-radius:var(--rp-r-card);cursor:pointer;transition:border-color .15s ease,background .15s ease}
.rp-pay-opt:hover{border-color:var(--rp-blue-300,#9db4e0)}
.rp-pay-opt:has(input:checked){border-color:var(--rp-blue-600,#2f62c4);background:var(--rp-blue-50)}
.rp-pay-opt input{margin-top:.2rem;flex:none;accent-color:var(--rp-blue-600,#2f62c4)}
.rp-pay-opt-body{font-size:var(--rp-xs);line-height:1.5;color:var(--rp-ink-2)}
.rp-pay-opt-body b{color:var(--rp-ink-1,#16243a);font-weight:600}

/* footer nav */
.rp-mform-foot{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:1.75rem;padding-top:1.5rem;border-top:1px solid var(--rp-line)}
.rp-mform-foot .rp-btn-back{visibility:hidden}
.rp-mform-foot.has-back .rp-btn-back{visibility:visible}
.rp-btn-back{background:none;border:none;font-family:var(--rp-sans);font-weight:600;font-size:var(--rp-small);color:var(--rp-ink-2);cursor:pointer;display:inline-flex;align-items:center;gap:.4em;padding:.4em .2em}
.rp-btn-back:hover{color:var(--rp-ink)}
.rp-mform-foot .rp-btn[aria-busy=true]{opacity:.7;pointer-events:none}

/* success + error states */
.rp-mform-done{text-align:center;padding:1rem 0 .5rem;animation:rp-mform-in .4s var(--rp-e) both}
.rp-mform-done .rp-done-ico{width:3rem;height:3rem;margin:0 auto 1rem;border-radius:50%;background:var(--rp-blue-bright);color:#fff;display:grid;place-items:center}
.rp-mform-done h3{font-family:var(--rp-serif);font-weight:400;font-size:1.6rem;color:var(--rp-ink);margin:0 0 .6rem}
.rp-mform-done p{font-size:var(--rp-small);line-height:1.6;color:var(--rp-ink-2);margin:0 auto;max-width:42ch}
.rp-mform-alert{display:none;margin-bottom:1.25rem;padding:.8em 1em;border-radius:var(--rp-r-btn);background:var(--rp-tangelo-50);border:1px solid var(--rp-tangelo-100);color:var(--rp-mahogany);font-size:var(--rp-small);line-height:1.5}
.rp-mform-alert.is-shown{display:block}
.rp-form-note{font-size:var(--rp-xs);line-height:1.55;color:var(--rp-ink-3);margin:1.1rem 0 0;text-align:center}

/* ---- FAQ list: hairline-divided question/answer pairs ---- */
.rp-faq{max-width:52rem;margin-inline:auto}
.rp-faq-item{padding:1.6rem 0;border-top:1px solid var(--rp-line)}
.rp-faq-item:first-child{border-top:0;padding-top:0}
.rp-faq-item h3{font-family:var(--rp-serif);font-weight:400;font-size:1.35rem;line-height:1.2;letter-spacing:-.01em;color:var(--rp-ink);margin:0 0 .55rem}
.rp-faq-item p{margin:0;color:var(--rp-ink-2);font-size:1.05rem;line-height:1.62}
.rp-faq-item a{color:var(--rp-blue);text-decoration:underline;text-underline-offset:.15em}

/* ---- Samples gallery: resume-scan cards linking to the PDF ---- */
.rp-samples-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1.4rem}
/* Solo variant: one large, legible scan instead of a small grid cell
   (KT feedback 2026-07: the announcement screenshot was "WAY too small"). */
.rp-samples-grid--solo{grid-template-columns:minmax(0,560px);justify-content:center}
.rp-samples-grid--solo .rp-sample-thumb img{width:100%;height:auto}
.rp-sample{display:flex;flex-direction:column;text-decoration:none;background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:12px;overflow:hidden;transition:box-shadow .16s,transform .16s,border-color .16s}
.rp-sample:hover{border-color:var(--rp-ink-3);box-shadow:var(--rp-sh-md);transform:translateY(-2px)}
.rp-sample-thumb{aspect-ratio:17/22;overflow:hidden;background:var(--rp-surface-2);border-bottom:1px solid var(--rp-line)}
.rp-sample-thumb img{width:100%;height:100%;object-fit:cover;object-position:top center;display:block;border:0;border-radius:0;margin:0}
.rp-sample-meta{display:flex;flex-direction:column;gap:.35rem;padding:.85rem .95rem 1rem}
.rp-sample-label{font-family:var(--rp-sans);font-weight:600;font-size:1rem;line-height:1.3;color:var(--rp-ink)}
.rp-sample-view{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-tangelo)}
.rp-sample-pages{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-sample-stack{display:flex;flex-direction:column}
.rp-sample-pdf{display:inline-block;align-self:flex-start;font-family:var(--rp-sans);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--rp-ink-2);text-decoration:underline;text-underline-offset:3px;margin:.6rem 0 0 .95rem;padding-bottom:.2rem}
.rp-sample-pdf:hover{color:var(--rp-tangelo)}
.rp-sample-stack .rp-sample{flex:1}

/* Program mark above a child-page hero (e.g. CCAR Builder). Every hero variant
   is text-align:left, so the mark aligns with the copy it heads; centring it
   left it floating above a left-aligned breadcrumb and H1. */
.rp-hero-mark{display:block;height:56px;width:auto;max-width:min(100%,320px);margin:0 0 1.25rem}
/* A landscape lockup (the three-logo strip) gets the width; the height follows. */
.rp-hero-mark--wide{height:auto;max-width:min(100%,440px)}
.rp-hero-mark--below{margin:1.5rem 0 0}

/* The same mark closing a CTA band, where a page hands off to the tool it belongs to. */
.rp-cta-mark{display:block;height:48px;width:auto;max-width:min(100%,280px);margin:0 auto 1.5rem}

/* Credential ribbon inside an rp-card (e.g. CFRW on Writer Certification). */
.rp-card-ribbon{display:block;height:72px;width:auto;max-width:100%;margin:0 0 1rem}

/* ---- chip bands: a set of names, not a set of ideas ---- */
.rp-chipband .rp-lead{margin-bottom:1.1rem}
.rp-chips--band{list-style:none;margin:1.5rem 0 0;padding:0;gap:.6rem}
.rp-chipband .rp-chips--band{margin-top:0}
.rp-chips--band .rp-keychip{font-size:1rem;line-height:1.4;padding:.5em .85em}
/* A rail closing on the set its rules point at. */
.rp-rail--plain .rp-force{grid-template-columns:1fr;padding-block:1rem}
.rp-rail--plain .rp-force h3{font-size:1.05rem}
.rp-rail--plain .rp-force p{margin-top:.25rem}
.rp-rail-chips{margin-top:2rem;padding-top:1.75rem;border-top:1px solid var(--rp-line)}
.rp-rail-chips__kick{margin:0 0 .9rem;font-size:1rem;font-weight:600;line-height:1.45;color:var(--rp-ink)}
.rp-rail-chips .rp-chips--band{margin-top:0}

/* ---- joa: the target announcement drawn the way USAJOBS draws one (navy band, tab strip, Summary and Overview cards) ---- */
.rp-joa{border:1px solid var(--rp-line);border-radius:var(--rp-r-card);overflow:hidden;background:var(--rp-paper-muted);font-family:var(--rp-sans)}
.rp-joa__bar{background:var(--rp-evening);padding:1.6rem 1.75rem 1.5rem;display:flex;justify-content:space-between;align-items:flex-start;gap:1.5rem}
.rp-joa__kick{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--rp-d-fg-3);margin:0 0 .55rem}
.rp-joa__title{font-weight:700;font-size:clamp(1.6rem,1.2rem + 1.3vw,2.15rem);line-height:1.1;letter-spacing:-.02em;color:var(--rp-d-fg);margin:0}
.rp-joa__org,.rp-joa__unit{display:block;font-size:1rem;line-height:1.45;color:var(--rp-d-fg-2)}
.rp-joa__org{margin-top:.6rem}
.rp-joa__pdf{flex:none;align-self:flex-start;background:var(--rp-surface);color:var(--rp-evening);font-weight:600;font-size:.95rem;padding:.8rem 1.2rem;border-radius:4px;text-decoration:none;white-space:nowrap}
.rp-joa__pdf:hover{background:var(--rp-d-fg-2)}
.rp-joa__tabs{display:flex;overflow-x:auto;background:var(--rp-surface);border-bottom:1px solid var(--rp-line);padding:0 .75rem;scrollbar-width:none}
.rp-joa__tab{padding:.95rem 1rem .8rem;font-size:.95rem;color:var(--rp-blue-bright);white-space:nowrap;border-bottom:3px solid transparent}
.rp-joa__tab--on{color:var(--rp-ink);font-weight:700;border-bottom-color:var(--rp-ink)}
.rp-joa__body{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:1rem;padding:1rem;align-items:start}
.rp-joa__main{display:grid;gap:1rem}
@media (max-width:760px){.rp-joa__body{grid-template-columns:minmax(0,1fr)}.rp-joa__bar{flex-direction:column}}
.rp-joa__card{background:var(--rp-surface);border-radius:6px;padding:1.3rem 1.45rem 1.45rem}
.rp-joa__h{font-weight:700;font-size:1.35rem;line-height:1.2;color:var(--rp-ink);margin:0 0 .8rem}
.rp-joa__text{font-size:1rem;line-height:1.6;color:var(--rp-ink-2);margin:0}
.rp-joa__row{margin:0 0 .85rem;padding-bottom:.85rem;border-bottom:1px solid var(--rp-line)}
.rp-joa__row:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}
.rp-joa__k{display:block;font-weight:700;font-size:.95rem;line-height:1.4;color:var(--rp-ink)}
.rp-joa__v{display:block;font-size:.95rem;line-height:1.45;color:var(--rp-ink-2);margin-top:.15rem}
.rp-joa__v--data{font-family:var(--rp-sans);font-size:.9rem;letter-spacing:.02em}
.rp-joa__note{font-size:.9rem;line-height:1.45;color:var(--rp-ink-3);margin:.2rem 0 .7rem}
.rp-joa .rp-keychips{gap:.4rem}

/* ---- decks: a presentation as a slide, the book's flat cover on the night ground ---- */
.rp-decks{display:grid;grid-template-columns:1fr;gap:1.5rem;margin-top:2rem}
@media (min-width:760px){.rp-decks{grid-template-columns:1fr 1fr}}
.rp-deck{display:flex;flex-direction:column;background:var(--rp-surface);border:1px solid var(--rp-line);border-radius:var(--rp-r-card);overflow:hidden;color:inherit;text-decoration:none}
.rp-deck--link:hover .rp-deck__slide{background:var(--rp-evening)}
.rp-deck__slide{aspect-ratio:16/9;overflow:hidden;background:var(--rp-night);display:flex;align-items:center;gap:clamp(1rem,3vw,2rem);padding:clamp(1rem,3vw,1.75rem) clamp(1.25rem,3.6vw,2.25rem);transition:background .2s ease}
/* The cover is a share of the slide's width, so its height (a 1:1.29 book) always clears the 16:9 frame. */
.rp-deck__cover{flex:none;width:31%;height:auto;border-radius:2px;box-shadow:0 1px 2px rgba(0,0,0,.35),0 6px 16px rgba(0,0,0,.35),0 18px 36px rgba(0,0,0,.3)}
.rp-deck__meta{flex:1}
.rp-deck__meta{display:flex;flex-direction:column;gap:.35rem;min-width:0;flex:1}
.rp-deck__kick{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-lifted-blue,#6490E2)}
.rp-deck__title{font-family:var(--rp-serif);font-weight:400;font-size:clamp(1.15rem,1.9vw,1.6rem);line-height:1.15;letter-spacing:-.01em;color:var(--rp-d-fg)}
.rp-deck__ed{font-size:var(--rp-small);line-height:1.45;color:var(--rp-d-fg-2)}
.rp-deck__body{padding:1.1rem 1.25rem 1.3rem}
.rp-deck__body h3{margin:0 0 .35rem;font-family:var(--rp-serif);font-weight:400;font-size:1.2rem;line-height:1.25;color:var(--rp-ink)}
.rp-deck__body p{margin:0;font-size:var(--rp-small);line-height:1.55;color:var(--rp-ink-2)}
.rp-deck__body .rp-card-more{display:inline-block;margin-top:.75rem}

/* ---- sample reader overlay (sample-reader.js) ---- */
.rp-reader{position:fixed;inset:0;z-index:1200;display:none}
.rp-reader.is-open{display:block}
.rp-reader-lock,.rp-reader-lock body{overflow:hidden}
.rp-reader-backdrop{position:absolute;inset:0;background:rgba(15,23,32,.72)}
.rp-reader-panel{position:absolute;inset:0;margin:auto;display:flex;flex-direction:column;width:min(92vw,900px);height:min(94vh,1200px);background:var(--rp-surface);border-radius:14px;overflow:hidden;box-shadow:var(--rp-sh-md)}
.rp-reader-bar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem 1.25rem;border-bottom:1px solid var(--rp-line);background:var(--rp-surface)}
.rp-reader-title{font-family:var(--rp-sans);font-weight:600;font-size:1.05rem;color:var(--rp-ink);line-height:1.3}
.rp-reader-actions{display:flex;align-items:center;gap:.75rem;flex-shrink:0}
.rp-reader-dl{font-family:var(--rp-sans);font-weight:600;font-size:.95rem;color:var(--rp-tangelo-700,#C04000);background:var(--rp-white,#FFFFFF);border:2px solid var(--rp-tangelo);border-radius:8px;padding:.6rem 1rem;text-decoration:none;min-height:44px;display:inline-flex;align-items:center}
.rp-reader-dl:hover{background:var(--rp-tangelo-50,#FFF3ED);color:var(--rp-tangelo-700,#C04000)}
.rp-reader-close{font-family:var(--rp-sans);font-weight:600;font-size:.95rem;color:var(--rp-ink);background:var(--rp-surface-2);border:1px solid var(--rp-line);border-radius:8px;padding:.6rem 1rem;min-height:44px;cursor:pointer}
.rp-reader-close:hover{border-color:var(--rp-ink-3)}
.rp-reader-pages{flex:1;overflow-y:auto;padding:1.25rem;background:var(--rp-surface-2)}
.rp-reader-page{margin:0 auto 1.25rem;max-width:820px}
.rp-reader-page img{display:block;width:100%;height:auto;border:1px solid var(--rp-line);border-radius:6px;background:#fff;box-shadow:var(--rp-sh-sm)}
.rp-reader-page figcaption{font-family:var(--rp-sans);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3);text-align:center;margin-top:.5rem}
@media(prefers-reduced-motion:no-preference){.rp-reader.is-open .rp-reader-panel{animation:rp-reader-in .18s ease-out}}
@keyframes rp-reader-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media(max-width:640px){.rp-reader-panel{width:100vw;height:100vh;border-radius:0}.rp-reader-title{font-size:.95rem}}

/* ---- sample dossiers: annotated case-study steps (samples page) -----------
   Five levels, one register each, so the reader always knows what they are
   looking at: page (rp-hero/rp-h1), case (folio + kick + rp-h2), step
   (rp-step-n + rp-step-title), brief (a document, deliberately not a
   heading), micro (mono notes and captions). The scans stay LARGE and
   uncropped (KT: "WAY too small"), the notes rail stacks under 900px, and
   the pages grid is still one anchor carrying the reader payload. */

/* ONE SPINE. The samples sections use .rp-wrap--wide, so their left edge
   lands on the site logo (the nav's 1280 container) instead of 70px inside
   it on the 1140 one. Every structural element starts on that spine: the
   dateline, the kicker, the folio, the step labels, the panels and the scan
   grid. Indents mean something now, because the only things indented are
   things inside a panel.

   GROUND ENCODES KIND, so a reader can tell what they are looking at
   before reading a word:
     paper  (--rp-paper)        the narrative: the case studies themselves
     muted  (--rp-paper-muted)  reference: the index, and the briefs the
                                cases work FROM
     white  (--rp-surface)      the documents: the resume scans

   RULES ENCODE DEPTH:
     2px ink    a track, the biggest division inside a case
     1px line   a step, and the case dateline
   Both cases stay on paper so they read as two of one thing; the folio,
   the kicker and the dateline are what separate them. */
.rp-section--reference{background:var(--rp-paper-muted)}
.rp-section--dossier{border-top:1px solid var(--rp-line)}

/* Anchor clearance: every destination the page nav can send you to has to
   clear the site header AND the nav pinned under it, or the heading you
   asked for arrives underneath the thing you clicked. Both heights are
   measured at runtime by app.js; the fallbacks are the desktop rest state. */
.rp-section--dossier,
.rp-pagenav-anchor{scroll-margin-top:calc(var(--header-height,105px) + var(--rp-pagenav-h,3.25rem) + 1.5rem)}

/* Case lockup: kicker over a baseline-shared folio and name. */
.rp-kick--dossier{margin-bottom:.9rem}
.rp-sec-head--dossier{align-items:baseline;gap:1.1rem;margin-bottom:0}

/* Subject bar: the case's dateline. It used to pin under the header, which
   made it a caption wearing a nav's position: it followed you down the page
   and could not be used, and it overlapped the head it was introducing.
   The page nav (.rp-pagenav) does the pinning now and this stands still,
   which is what a dateline does. It keeps the target job, the one fact the
   nav has no room for. No tint and no inline padding: it reads as a line
   over a rule, not a box with its label jammed against the edge. */
.rp-dossier-bar{margin:0 0 2.25rem;padding-block:0 .9rem;
  border-bottom:1px solid var(--rp-line);
  font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-sec-head--dossier+.rp-lead{margin-top:1.5rem}

/* ---- page nav (blocks/section-pagenav) ------------------------------------
   A running head that knows where you are. Not a toolbar: no pills, no
   fills, no card. Paper ground so the document ghosts through it, hairlines
   top and bottom, condensed caps for the labels and mono for the folios,
   which is the same lockup the case heads use one size up.

   It pins to the header's bottom edge. --header-height is measured at
   runtime by app.js because the header rewraps from 105px to 173px as the
   viewport narrows. No admin-bar term: the header itself pins at top:0 and
   lets the admin bar cover its first 32px, so adding the bar's height here
   would open a 32px strip of paper between the two for logged-in editors.
   z-index sits above page content (2) and below the header (50), so the nav
   slides under the header, never over it.

   Motion is one moving part: the rule slides between items. Four labels
   cross-fading reads as noise; one rule travelling reads as a pointer.

   THREE SLOTS. The trail sits at the left edge as context and the sections
   run down the middle, optically centred on the viewport rather than on
   whatever the trail happens to be. That needs 1fr auto 1fr with the third
   column left empty: centring by margin would let a long trail shove the
   sections off centre, and the trail's length is a function of how deep the
   page sits in the site, which is not something the sections should feel. */
.rp-pagenav{position:sticky;top:var(--header-height,105px);z-index:20;
  background:color-mix(in srgb,var(--rp-paper) 88%,transparent);
  backdrop-filter:blur(10px) saturate(1.4);
  -webkit-backdrop-filter:blur(10px) saturate(1.4);
  border-top:1px solid var(--rp-line);border-bottom:1px solid var(--rp-line)}
/* No backdrop-filter support: the ground has to go fully opaque or the
   resume scans read straight through the nav that is pinned over them. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .rp-pagenav{background:var(--rp-paper)}
}
.rp-pagenav-inner{position:relative;display:grid;grid-template-columns:1fr auto 1fr;
  align-items:center;gap:1.5rem}
.rp-pagenav-trail{grid-column:1;min-width:0}
.rp-pagenav-list{grid-column:2}

/* The trail reuses rp_breadcrumbs() markup, so its band styling has to be
   undone: inside the bar it is a line, not a strip with its own ground. */
.rp-pagenav-trail .rp-crumbs{background:none;padding:0;margin:0}
.rp-pagenav-trail .rp-crumbs__wrap{max-width:none;padding-inline:0;flex-wrap:nowrap;
  font-size:.66rem;letter-spacing:.1em;gap:.5rem}
.rp-pagenav-trail .rp-crumbs__link{white-space:nowrap;transition:color var(--rp-t-normal) var(--rp-e)}
.rp-pagenav-trail .rp-crumbs__link:hover{color:var(--rp-bright-blue)}

.rp-pagenav-list{position:relative;display:flex;align-items:stretch;gap:2rem;
  list-style:none;margin:0;padding:0}
.rp-pagenav-item{margin:0;padding:0}
.rp-pagenav-link{display:flex;align-items:baseline;gap:.5rem;
  padding-block:.95rem;text-decoration:none;color:var(--rp-ink-3);
  transition:color var(--rp-t-normal) var(--rp-e)}
.rp-pagenav-link:hover{color:var(--rp-ink-2)}
.rp-pagenav-link:focus-visible{outline:2px solid var(--rp-bright-blue);outline-offset:3px;border-radius:2px}
/* Active: the label comes up to full ink and the folio takes the signal
   blue, the same move the case head makes with its serif folio. */
.rp-pagenav-link[aria-current]{color:var(--rp-ink)}
.rp-pagenav-link[aria-current] .rp-pagenav-folio{color:var(--rp-bright-blue)}
.rp-pagenav-folio{font-family:var(--rp-mono);font-size:.66rem;letter-spacing:.06em;
  color:var(--rp-ink-3);transition:color var(--rp-t-normal) var(--rp-e)}
.rp-pagenav-label{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;
  letter-spacing:.12em;text-transform:uppercase;white-space:nowrap}
.rp-pagenav-label--short{display:none}

/* The sliding rule. Parked at the list's bottom edge so it overwrites the
   nav's own hairline under the active item: the divider becomes the
   pointer. Width and offset are written by app.js from the active link's
   box; both are 0 until then, so no-JS shows no stray mark. */
.rp-pagenav-rule{position:absolute;left:0;bottom:-1px;height:2px;width:1px;
  background:var(--rp-bright-blue);border-radius:1px;
  transform:translateX(0) scaleX(0);transform-origin:left center;
  transition:transform var(--rp-t-normal) var(--rp-e);pointer-events:none}

/* Scroll progress: a hairline across the top edge, scaled by how far down
   the page you are. Sub-perceptual until you look for it. Tangelo stays
   out of this: it is an accent, and this is chrome. */
.rp-pagenav-progress{position:absolute;left:0;top:0;height:1px;width:100%;
  background:var(--rp-bright-blue);opacity:.45;
  transform:scaleX(var(--rp-pagenav-progress,0));transform-origin:left center;
  pointer-events:none}

/* Middle widths: four full names will not sit on one line, so the labels
   fall back to surnames and the folios keep the counting. */
@media(max-width:900px){
  .rp-pagenav-inner{gap:1rem}
  .rp-pagenav-list{gap:1.5rem}
  .rp-pagenav-link--short .rp-pagenav-label{display:none}
  .rp-pagenav-link--short .rp-pagenav-label--short{display:inline}
}

/* ---- phone: the sections move to the thumb -------------------------------
   The two halves split. The trail stays pinned at the top, where address
   belongs and where it costs one line. The sections drop to a bar anchored
   at the bottom of the viewport, which is where thumbs are: on a page this
   long, "take me to a part of this" is a reach the reader makes constantly
   and a top bar makes them stretch for every time.

   The bar is fixed, not sticky, so it holds its place while the document
   runs under it, and it is the only fixed thing this page adds. Its ground
   goes fully opaque: over a resume scan a translucent bar reads as a smear.

   --rp-pagenav-bottom lets a page that already owns the bottom edge stack
   this above it (see .rp-reserve-bar, the mobile conversion CTA, which
   outranks a nav and keeps z-index 60). The safe-area inset is added on top
   so the row clears a home indicator. */
@media(max-width:640px){
  /* The blur has to go, and not for taste: backdrop-filter makes an element
     a containing block for its position:fixed descendants, so with it on the
     bar below would anchor to this strip instead of the viewport and hang in
     the middle of the page. The top strip only carries the trail here, so an
     opaque ground costs nothing. */
  .rp-pagenav{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--rp-paper)}
  .rp-pagenav-inner{display:block}
  .rp-pagenav-trail{text-align:center}
  .rp-pagenav-trail .rp-crumbs__wrap{justify-content:center}

  .rp-pagenav-list{position:fixed;z-index:55;
    left:0;right:0;bottom:calc(var(--rp-pagenav-bottom,0px) + env(safe-area-inset-bottom,0px));
    display:flex;justify-content:space-around;gap:0;
    padding:0 .5rem;
    background:var(--rp-paper);border-top:1px solid var(--rp-line);
    box-shadow:0 -6px 20px -14px var(--rp-ink)}
  .rp-pagenav-item{flex:1 1 0;min-width:0}
  /* Column, not row: the folio sits over its label the way a tab bar sets an
     icon over its caption, and every target fills its share of the width so
     the whole strip is tappable rather than just the words. */
  /* width:100% + min-width:0 are load-bearing, not belt and braces: without
     them the link sizes to its text, pushes past its 1fr share, and the last
     item runs off the screen taking the whole document into horizontal
     overflow. The ellipsis below cannot fire until the box is allowed to be
     narrower than its content. */
  .rp-pagenav-link{flex-direction:column;align-items:center;justify-content:center;
    gap:.2rem;padding:.55rem 0 .7rem;text-align:center;min-height:3rem;
    width:100%;min-width:0;box-sizing:border-box}
  /* Folios are optional, so a row can be mixed: an item carrying one is two
     lines tall, its neighbour without one is a single line, and centring
     each independently drops the plain labels half a line below the rest.
     When any item in the row has a folio, bottom-align them all so every
     label shares a baseline and the folios hang above. With no folios at
     all the rule never fires and the labels simply centre. */
  .rp-pagenav-list:has(.rp-pagenav-folio) .rp-pagenav-link{justify-content:flex-end}
  .rp-pagenav-folio{font-size:.62rem}
  .rp-pagenav-label{font-size:.62rem;letter-spacing:.08em;
    max-width:100%;overflow:hidden;text-overflow:ellipsis}
  /* Pointing down from the bar's top edge, since the bar sits below the
     content it refers to rather than above it. */
  .rp-pagenav-rule{top:-1px;bottom:auto}

  /* The progress hairline goes. On desktop it runs the width of a bar that
     is plainly a bar; here it would draw a part-width blue line along the
     top edge of a 19px trail strip, where it reads as a rendering artifact
     rather than as progress. The tab bar already says where you are. */
  .rp-pagenav-progress{display:none}
}

/* Reserve the bottom bar's height. It is fixed, so it takes no space and
   would otherwise stand on the footer. app.js sets the flag and the height
   only while the bar is actually fixed, so this costs nothing on desktop. */
body.rp-has-pagenav-bar .wp-site-blocks{
  padding-bottom:calc(var(--rp-pagenav-bar-h,0px) + env(safe-area-inset-bottom,0px))}

/* Reduced motion: the rule still marks the active item, it just stops
   travelling to get there. The progress hairline is state, not motion,
   so it keeps working. */
@media(prefers-reduced-motion:reduce){
  .rp-pagenav-rule{transition:none}
  .rp-pagenav-link,.rp-pagenav-folio{transition:none}
}

/* Track: only when one case carries more than one target. */
.rp-track{font-family:var(--rp-cond);font-weight:600;font-size:.8rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--rp-ink);margin:3.75rem 0 0;padding-top:1rem;
  border-top:2px solid var(--rp-ink)}

/* Step head: counter over title over rule, actions on their own row. The
   title no longer shares a baseline with two mono links, so it reads as a
   heading and stays the loudest thing inside a case. */
/* The rule opens the step rather than underlining its title. A short serif
   headline with a full-column rule beneath it read as a stray underline and
   crowded the actions; as a top rule it divides one step from the last and
   the whole head reads as one block. A brief and the step that answers it
   sit close together, so they group; steps are pushed apart. */
/* A step is a new artifact, and the reader has just come off a full panel of
   analysis, so the turn has to be audible: a dark rule and a blue eyebrow
   above a title set a full step over the announcement's. A hairline rule and
   a 1.5rem title were not enough of a beat to say "this is the resume now". */
.rp-step{margin-top:4rem;border-top:1px solid var(--rp-ink);padding-top:1.6rem}
.rp-brief+.rp-step{margin-top:2rem}
.rp-track+.rp-brief{margin-top:2rem}
.rp-track+.rp-step{margin-top:2rem}
.rp-step-head{margin-bottom:1.5rem}
.rp-step-n{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--rp-blue-bright);margin:0 0 .55rem}
/* Sans, like the announcement title: a step head names what the reader is
   looking at, and the serif belongs to the documents themselves, which start
   a few lines below with a serif name of their own. Two serif headlines that
   close together made the label and the artifact read as one thing. */
.rp-step-title{font-family:var(--rp-sans);font-weight:650;font-size:clamp(1.6rem,1.25rem + 1.2vw,1.95rem);line-height:1.1;letter-spacing:-.02em;color:var(--rp-ink);margin:0;max-width:26ch;text-wrap:balance}
/* The actions are chrome, not data, so they take the condensed caps the rest
   of the wayfinding uses rather than mono. */
.rp-step-actions{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem 1.4rem;margin-top:1.15rem}
.rp-step-actions a{font-family:var(--rp-cond);font-weight:600;font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;text-decoration:none}
.rp-step-open{color:var(--rp-tangelo)}
.rp-step-open:hover{text-decoration:underline;text-underline-offset:3px}
.rp-step-dl{color:var(--rp-ink-2);text-decoration:underline;text-underline-offset:3px}
.rp-step-dl:hover{color:var(--rp-tangelo)}
.rp-dossier-body{display:grid;grid-template-columns:minmax(0,1fr) 17rem;gap:2rem 2.75rem;align-items:start}
.rp-dossier-body--full{grid-template-columns:minmax(0,1fr)}
.rp-dossier-pages{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;text-decoration:none}
.rp-dossier-pages--single{grid-template-columns:minmax(0,34rem)}
.rp-dossier-pages figure{margin:0}
.rp-dossier-pages img{display:block;width:100%;height:auto;background:#fff;border:1px solid var(--rp-line);border-radius:6px;box-shadow:var(--rp-sh-sm);transition:box-shadow .16s,border-color .16s}
.rp-dossier-pages:hover img{border-color:var(--rp-ink-3);box-shadow:var(--rp-sh-md)}
.rp-dossier-pages figcaption{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3);text-align:center;margin-top:.55rem}
.rp-step-more{font-family:var(--rp-sans);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--rp-ink-3);margin:.9rem 0 0}
.rp-dossier-notes{border-top:2px solid var(--rp-ink)}
.rp-notes-kick{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink);margin:.85rem 0 .35rem}
.rp-dossier-notes ol{list-style:none;margin:0;padding:0}
.rp-note{display:flex;gap:.8rem;padding:.95rem 0;border-top:1px solid var(--rp-line)}
.rp-note:first-child{border-top:0}
.rp-note-chip{flex:none;width:1.45rem;height:1.45rem;border-radius:50%;background:var(--rp-blue-bright);color:#fff;font-family:var(--rp-sans);font-size:.7rem;display:inline-flex;align-items:center;justify-content:center;margin-top:.1rem}
.rp-note-loc{display:block;font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-3);margin-bottom:.3rem}
.rp-note p{margin:0;font-size:.92rem;line-height:1.55;color:var(--rp-ink-2)}
/* The brief: what the case is working FROM. The panel is the containment
   that keeps it from competing with the documents; inside it, the
   announcement leads, because what the job is and who is hiring for it is
   the fact every keyword and every resume line answers to. */
/* The brief is a panel on the spine. Its ground says "reference" and its
   padding is the only indent in the section, which is what makes the indent
   legible: content is inset because it is inside something. The old blue
   left rule was a lone decoration doing that job badly. */
.rp-brief{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2.5rem 4rem;
  background:var(--rp-paper-muted);padding:2.5rem 2.75rem 2.75rem;margin-top:2.5rem}
.rp-brief--solo{grid-template-columns:minmax(0,1fr);max-width:44rem}
/* Inside the panel: kicker, the job title at display size, the employer as
   prose, then the analysis below a rule as the smaller, secondary voice.
   The title used to be serif at 1.2rem over a mono all-caps dateline, which
   left the two facts a reader needs, what the job is and who is hiring,
   weighing less than the body copy under them. Sans here also parts the
   source artifact from the serif documents we produce. */
.rp-brief-kick{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--rp-blue-bright);margin:0 0 .7rem}
.rp-brief-title{font-family:var(--rp-sans);font-weight:650;font-size:clamp(1.5rem,1.15rem + 1.1vw,1.8rem);line-height:1.1;letter-spacing:-.02em;color:var(--rp-ink);margin:0}
.rp-brief-meta{font-size:1rem;line-height:1.5;color:var(--rp-ink-2);margin:.6rem 0 0}
.rp-brief-org{font-weight:600;color:var(--rp-ink)}
.rp-brief-sep{color:var(--rp-ink-3);margin:0 .4em}
/* Mono, because a pay plan and a salary range are data. .85em put it at 13.6px
   beside 16px sans, and mono runs optically smaller again, so the salary was
   the least readable thing in the panel. .95em lands it at parity, and it takes
   ink-2 rather than ink-3: this is a number the reader came for. */
.rp-brief-datum{font-family:var(--rp-sans);font-size:.95em;letter-spacing:.02em;color:var(--rp-ink-2)}
/* Prose, at the size the homepage sets prose: 1.1875rem / 1.62. That is what
   .rph-agency__p, .rph-hero__lede and .rph-media__body all use, and matching it
   is the whole point, because a paragraph three steps smaller than the same
   paragraph on the homepage reads as fine print.

   History, because it took two passes: this started at .9rem in --rp-ink-3, the
   MUTED tier meant for labels and figcaptions. That measured 5.6:1, which
   clears WCAG AA, so a contrast check would have called it done. It was still
   hard to read, because the problem was size and tier, not just ratio. The ink
   tokens carry the standing reason (KT 2026-07, "too light, barely readable",
   audience skews ~55) and it applies to size as much as to colour. */
.rp-brief-body{margin:1.4rem 0 0;padding-top:1.4rem;border-top:1px solid var(--rp-line);
  font-size:1.1875rem;line-height:1.62;color:var(--rp-ink-2);max-width:52ch}
/* The ledger's own kicker is a column label, not the panel's opener, so it
   stays quiet where the panel kicker is the blue one. */
.rp-brief-keys .rp-brief-kick{color:var(--rp-ink-3)}
.rp-keyled{list-style:none;margin:0;padding:0}
.rp-keyled li{display:flex;gap:.85rem;padding:.7rem 0;border-top:1px solid var(--rp-line)}
.rp-keyled li:first-child{border-top:0;padding-top:0}
.rp-keyled-n{flex:none;width:1.45rem;font-family:var(--rp-mono);font-size:.72rem;color:var(--rp-blue-bright);padding-top:.15rem}
.rp-keyled strong{display:block;font-family:var(--rp-sans);font-weight:600;font-size:.95rem;line-height:1.35;color:var(--rp-ink)}
.rp-keyled p{margin:.15rem 0 0;font-size:.85rem;line-height:1.5;color:var(--rp-ink-3)}

/* Keyword chips. The annotated .rp-keyled above carried a sentence per keyword
   explaining what it would do in the resume, and the resume sits directly below
   showing exactly that in red, so the apparatus ran taller than the evidence.
   Chips keep the list scannable and let the document do the demonstrating.
   Blue is the signal colour here because these phrases ARE the signal: they are
   what the announcement asked for and what the resume answers. */
.rp-keychips{list-style:none;display:flex;flex-wrap:wrap;gap:.45rem;margin:0;padding:0}
/* Neutral, not blue. These were --rp-blue-50 on --rp-blue-100, and ten of them
   stacked in a column turned the whole right half of the panel blue. The blue
   was doing no work either: these phrases are not links or state, they are the
   announcement's own words. White on the grey panel separates them by value
   alone, which is all a chip needs. */
.rp-keychip{font-family:var(--rp-sans);font-weight:400;font-size:.875rem;line-height:1.3;
  color:var(--rp-ink);background:var(--rp-surface,#fff);
  border:1px solid var(--rp-line);border-radius:var(--rp-r-tag,4px);
  padding:.34em .62em}

.rp-transcript{margin-top:1.4rem;border:1px solid var(--rp-line);border-radius:10px;background:var(--rp-surface)}
.rp-transcript summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:.7rem;padding:.9rem 1.4rem;font-family:var(--rp-sans);font-size:.7rem;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-2)}
.rp-transcript summary::-webkit-details-marker{display:none}
.rp-transcript summary::before{content:"+";font-family:var(--rp-mono);font-size:.9rem;line-height:1;color:var(--rp-tangelo)}
.rp-transcript[open] summary{border-bottom:1px solid var(--rp-line);color:var(--rp-ink)}
.rp-transcript[open] summary::before{content:"\2212"}
.rp-transcript summary:hover{color:var(--rp-ink)}
.rp-doc{padding:1.75rem 2rem 2.25rem;max-width:72ch}
.rp-doc p{margin:.85rem 0 0;font-size:.95rem;line-height:1.6;color:var(--rp-ink-2)}
.rp-doc ul{margin:.7rem 0 0;padding-left:1.2rem}
.rp-doc li{margin:.4rem 0 0;font-size:.95rem;line-height:1.55;color:var(--rp-ink-2)}
.rp-doc-name{font-family:var(--rp-serif);font-size:1.35rem;line-height:1.15;letter-spacing:-.01em;color:var(--rp-ink)!important;margin:0!important}
/* The resume document has to look like the document it is teaching people to
   write, and a federal resume's contact line is plain text, not spaced-out
   uppercase mono. This line carries the address, email, phone and preference
   claim: real information, at length, that a reader has to be able to read.
   Kathryn Troutman screenshotted exactly this on 2026-08-17. */
.rp-doc-meta{font-family:var(--rp-sans);font-size:.8rem!important;line-height:1.5;letter-spacing:0;text-transform:none;color:var(--rp-ink-2)!important;margin:.4rem 0 0!important}
.rp-doc-h{font-family:var(--rp-cond,var(--rp-sans));font-weight:700;font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;color:var(--rp-ink);margin:1.9rem 0 0;padding-top:1rem;border-top:1px solid var(--rp-line)}
.rp-doc-h2{font-family:var(--rp-sans);font-weight:600;font-size:.82rem!important;line-height:1.45;letter-spacing:0;text-transform:none;color:var(--rp-ink)!important;margin-top:1.1rem!important}
.rp-doc-role{font-weight:600;color:var(--rp-ink)!important;margin-top:1.5rem!important}
.rp-doc-org{font-family:var(--rp-sans);font-size:.85rem!important;line-height:1.5;letter-spacing:0;color:var(--rp-ink-2)!important;margin-top:.25rem!important}
/* Keywords carry the one color in the document, and it is red because that is
   what the books and the copy call it. Not a highlight fill: a fill photocopies
   as a grey box over the text, and these resumes get photocopied. */
.rp-doc mark.rp-kw,.rp-kw{background:transparent;color:var(--rp-keyword-red);font-weight:600}

/* ---- sample documents (blocks/sample-document) ---------------------------
   The resume itself, rendered from the platform's ResumeDoc model into
   theme/samples/ and echoed by the block. The .rp-doc* vocabulary above is
   shared with the platform reader and with its print stylesheet
   (tools/public/resume-print.css), so a document looks the same in all three
   places; these rules cover the parts the old hand-typed transcripts never had.
   Documents used to be shown as JPG exports with a transcript hidden in a
   <details>; now the text IS the artifact, so it leads the layout. */

/* Role head: title and org left, dates and hours right on shared baselines,
   so a reviewer reads the timeline down one edge instead of hunting for it
   inside a prose line. */
.rp-doc-entry{margin-top:1.5rem}
.rp-doc-entry-head{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:1.5rem}
.rp-doc .rp-doc-entry-head .rp-doc-role{margin-top:0!important}
.rp-doc .rp-doc-entry-head .rp-doc-org{margin-top:.2rem!important}
/* Location and supervisor have no right-hand counterpart, so they run the full
   measure rather than leaving a ragged hole in the second column. */
.rp-doc-org--wide{grid-column:1/-1}
.rp-doc-when{font-family:var(--rp-sans);font-size:.7rem!important;letter-spacing:.04em;
  color:var(--rp-ink-3)!important;margin:0!important;text-align:right;white-space:nowrap}

/* A run of postings at one employer, e.g. a military career. Set one step down
   from the section head so the hierarchy reads section > employer > role
   without introducing a fourth type size. */
.rp-doc-employer{margin-top:1.75rem}
.rp-doc-employer-head{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:1.5rem}
.rp-doc-employer-name{font-family:var(--rp-cond,var(--rp-sans));font-weight:700;font-size:.78rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink)!important;margin:0!important}
.rp-doc-employer .rp-doc-entry{padding-left:1rem;border-left:1px solid var(--rp-line);margin-top:1.1rem}

/* Duty bullets. Restated because the theme reset strips markers from ul, and on
   a federal resume the bullets are the specialized experience a reviewer scans
   for, so they have to read as a list. */
.rp-doc ul{list-style:disc}

/* An anchored note flashes its target, so clicking chip 3 shows what chip 3 is
   about. Opacity-led, no scale jump. */
.rp-doc [data-rp-anchor]:target{animation:rp-doc-flash 1.6s ease-out}
@keyframes rp-doc-flash{0%,30%{background:rgba(249,77,0,.12)}100%{background:transparent}}
@media(prefers-reduced-motion:reduce){
  .rp-doc [data-rp-anchor]:target{animation:none;outline:2px solid var(--rp-tangelo);outline-offset:4px}
}

/* The note chip is a real link now that it has somewhere to go. */
a.rp-note-chip{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;
  transition:opacity .16s}
a.rp-note-chip:hover{opacity:.78}

/* Step actions. The plain-text link is what a client pastes into USAJOBS; it
   comes off the same document as the PDF. */
.rp-step-txt{color:var(--rp-ink-3);text-decoration:none;border-bottom:1px solid var(--rp-line)}
.rp-step-txt:hover{color:var(--rp-ink)}

/* The one step that only ever existed as a working scan, never a PDF. */
.rp-step-scan{margin:0 0 1.5rem}
.rp-step-scan img{width:100%;height:auto;border:1px solid var(--rp-line);border-radius:6px}

/* Editor-only, when the generated bundle is missing. */
.rp-doc-missing{font-family:var(--rp-sans);font-size:.75rem;color:var(--rp-tangelo);
  border:1px dashed var(--rp-tangelo);padding:1rem;border-radius:6px}

@media(max-width:640px){
  /* Stack the date column rather than squeezing it; the dates stay with their
     role because the head is a grid, not a float. */
  .rp-doc-entry-head,.rp-doc-employer-head{grid-template-columns:1fr;column-gap:0}
  .rp-doc-when{text-align:left}
  .rp-doc-employer .rp-doc-entry{padding-left:.75rem}
}
@media(max-width:900px){.rp-dossier-body{grid-template-columns:1fr}.rp-dossier-notes{max-width:44rem}.rp-brief{grid-template-columns:1fr;gap:2rem;padding:1.5rem 1.35rem 1.75rem}.rp-doc{padding:1.4rem 1.25rem 1.75rem}}
@media(max-width:640px){.rp-dossier-pages{grid-template-columns:1fr}.rp-sec-head--dossier{gap:1rem}}

/* ---- landing content bands (velocity_render_section_landing bands) --------
   Composed rhythm for the hub sales bands: measured header stack, aired
   two-column tick grid, roomy quote, and a left-set aside note. The base
   primitives are margin:0 by design; this wrapper owns the spacing. */
.rp-band__head{max-width:none}
/* The head block itself runs the full grid so headings and figures can, but the
   prose inside it keeps a measure. Uncapped it ran ~110 characters at 1280. */
.rp-band__head .rp-lead{max-width:68ch}
.rp-band__head .rp-body{max-width:68ch}
.rp-band .rp-h2{margin:.7rem 0 0}
.rp-band .rp-lead{margin-top:1.25rem;max-width:56ch}
.rp-band .rp-lead+.rp-lead{margin-top:1rem}
.rp-band .rp-ticks{margin-top:2.25rem;max-width:76ch;display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1rem 3rem}
.rp-band .rp-ticks li{font-size:var(--rp-base,1rem);line-height:1.55;padding-left:1.25rem}
.rp-band .rp-ticks li::before{top:.6em}
.rp-band .rp-quote{margin-top:2.5rem;max-width:62ch;padding:1.85rem 2.1rem}
.rp-band .rp-quote blockquote{font-family:var(--rp-serif);font-weight:300;font-size:1.12rem;line-height:1.62;color:var(--rp-ink-2)}
.rp-band__note{margin-top:1.75rem;max-width:52ch;font-size:var(--rp-small);line-height:1.6;color:var(--rp-ink-3);border-left:2px solid var(--rp-tangelo);padding-left:1.1rem}
.rp-band .rp-cta-row{justify-content:flex-start;margin-top:2.5rem}

/* Featured testimonial (service-page quote section): serif voice, not a card whisper. */
.rp-quote--feature{max-width:70ch;padding:2.25rem 2.5rem}
.rp-quote--feature blockquote{font-family:var(--rp-serif);font-weight:300;font-size:clamp(1.12rem,1.5vw,1.38rem);line-height:1.6;letter-spacing:-.006em;color:var(--rp-ink)}

/* Balanced band headlines: no single-word orphan lines in the lockup. */
.rp-band .rp-h2{text-wrap:balance;max-width:26ch}

/* ---- agency logo bar (official seals; US-gov works, public domain) --------
   Validation section: full-color official seals at credential size, on an
   even grid (2 rows of 6 at desktop). Mono caption carries the program name
   so the seal never has to work alone. */
.rp-logobar{list-style:none;margin:3rem 0 0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:2.75rem 1.5rem}
@media(min-width:700px){.rp-logobar{grid-template-columns:repeat(4,1fr)}}
@media(min-width:1020px){.rp-logobar{grid-template-columns:repeat(6,1fr)}}
.rp-logobar li{display:flex;flex-direction:column;align-items:center;gap:.9rem;text-align:center}
.rp-logobar img{height:92px;width:auto;filter:saturate(.9);transition:filter .18s ease}
.rp-logobar li:hover img{filter:none}
@media (prefers-reduced-motion: reduce){.rp-logobar img{transition:none}}
.rp-logobar li span{font-family:var(--rp-sans);font-size:.6875rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-2);line-height:1.45;max-width:17ch}
.rp-logobar-note{margin:2.5rem 0 0;font-size:var(--rp-small);line-height:1.6;color:var(--rp-ink-3);max-width:52ch}
.rp-logobar-creds{margin-top:3rem}

/* Section leads: hug the heading they belong to, break before the content
   they introduce. Fixes baked pages that put a lead between rp-sec-head and
   rp-cards, which otherwise renders with zero gap above the grid. */
.rp-sec-head:has(+ .rp-lead){margin-bottom:1.25rem}
.rp-lead + .rp-cards{margin-top:2.5rem}
.rp-lead + .rp-forces{margin-top:2.5rem}
/* Ledger: the showcase index for a canonical set (the five ECQs). Each entry
   is a full-width row: display-scale serif numeral in cover blue with a
   tangelo period, serif title column, description column, hairline rules. */
.rp-ledger{margin-top:3rem;border-top:1px solid var(--rp-line)}
.rp-ledger-row{display:grid;grid-template-columns:auto 1fr;column-gap:1.5rem;row-gap:.75rem;padding-block:2.25rem;border-bottom:1px solid var(--rp-line)}
@media(min-width:900px){.rp-ledger-row{grid-template-columns:8rem 1.05fr .95fr;column-gap:3.5rem;align-items:start}}
.rp-ledger-no{font-family:var(--rp-serif);font-weight:300;font-size:clamp(2.8rem,5.5vw,4.5rem);line-height:.8;letter-spacing:-.02em;color:var(--rp-blue-bright)}
.rp-ledger-no::after{content:".";color:var(--rp-tangelo)}
.rp-ledger-row h3{font-family:var(--rp-serif);font-weight:600;font-size:clamp(1.3rem,2.1vw,1.7rem);line-height:1.28;letter-spacing:-.012em;margin:0;color:var(--rp-ink);max-width:24ch}
/* Ledger as an index: the whole row is the link to the section it names. */
a.rp-ledger-row--link{text-decoration:none;padding-inline:1rem;margin-inline:-1rem;transition:background .16s}
a.rp-ledger-row--link:hover{background:var(--rp-surface-2)}
a.rp-ledger-row--link:hover h3{color:var(--rp-blue-bright)}
.rp-ledger-target{display:block;margin-top:.5rem;font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-ledger-row p{margin:0;font-size:1rem;line-height:1.62;color:var(--rp-ink-2);max-width:52ch}
@media(max-width:899px){.rp-ledger-row p{grid-column:1/-1}}
/* Rail: the full-width numbered rule list (rp-force entries flowing in two
   columns), the wide counterpart to the steps split. On the dark ground the
   numeral goes tangelo as the signal. */
.rp-rail{display:grid;grid-template-columns:1fr;column-gap:4rem;margin-top:2.5rem}
@media(min-width:900px){.rp-rail{grid-template-columns:1fr 1fr}.rp-rail .rp-force:nth-child(2){border-top:0}
/* Three rules read as three columns; in a two-column grid the third strands itself beside an empty half. */
.rp-rail--three{grid-template-columns:repeat(3,1fr);column-gap:2.5rem}.rp-rail--three .rp-force:nth-child(-n+3){border-top:0}}
.rp-rail .rp-force p{max-width:52ch}
.rp-dark .rp-force{border-color:rgba(255,255,255,.14)}
.rp-dark .rp-force-no{color:var(--rp-tangelo-400)}
.rp-dark .rp-force h3{color:#fff}
.rp-dark .rp-force p{color:var(--rp-d-fg-2)}

/* Quiet buttons keep their ink on navy bands: .rp-dark's on-dark link color
   otherwise bleeds into the surface-colored button and washes the label out. */
.rp-dark .rp-btn-quiet{color:var(--rp-ink)}
.rp-dark .rp-btn-quiet:hover{color:var(--rp-ink)}

/* ---- video library (rp-videos) --------------------------------------------
   Card grid of lesson videos: 16:9 thumbnail, serif title, outbound link.
   Thumbnails come from YouTube's image CDN; the play disc marks them as
   video without needing JS. */
.rp-videos{display:grid;grid-template-columns:1fr;gap:2rem 1.5rem;margin-top:2.5rem}
@media(min-width:640px){.rp-videos{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1020px){.rp-videos{grid-template-columns:repeat(3,1fr)}}
.rp-video{display:flex;flex-direction:column;gap:.8rem;text-decoration:none;color:var(--rp-ink)}
.rp-video__frame{position:relative;display:block;aspect-ratio:16/9;overflow:hidden;border-radius:10px;background:var(--rp-navy,#1e2a44);box-shadow:0 10px 26px -16px rgba(11,29,58,.45)}
.rp-video__frame img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .25s ease}
.rp-video:hover .rp-video__frame img{transform:scale(1.03)}
@media (prefers-reduced-motion: reduce){.rp-video__frame img{transition:none}.rp-video:hover .rp-video__frame img{transform:none}}
.rp-video__play{position:absolute;inset:0;display:grid;place-items:center}
.rp-video__play::before{content:"";width:52px;height:52px;border-radius:50%;background:rgba(11,29,58,.72);box-shadow:0 4px 14px rgba(0,0,0,.3)}
.rp-video__play::after{content:"";position:absolute;width:0;height:0;border-style:solid;border-width:9px 0 9px 15px;border-color:transparent transparent transparent #fff;transform:translateX(3px)}
.rp-video:hover .rp-video__play::before{background:var(--rp-tangelo,#f94d00)}
.rp-video__title{font-family:var(--rp-serif);font-weight:600;font-size:1.05rem;line-height:1.35}
.rp-video__note{font-family:var(--rp-sans);font-size:.6875rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-3)}

/* ---- download rows (instructor resource library) ---- */
.rp-dl{margin-top:2rem;border-top:1px solid var(--rp-line);display:flex;flex-direction:column}
.rp-dl-row{display:grid;grid-template-columns:1fr;gap:.6rem 2.5rem;padding-block:1.2rem;border-bottom:1px solid var(--rp-line)}
@media(min-width:760px){.rp-dl-row{grid-template-columns:1fr auto;align-items:center}}
.rp-dl-title{font-family:var(--rp-sans);font-weight:600;font-size:1rem;line-height:1.4;color:var(--rp-ink);margin:0}
.rp-dl-sub{margin:.3rem 0 0;font-size:var(--rp-small);line-height:1.55;color:var(--rp-ink-2);max-width:62ch}
.rp-dl-meta{display:block;margin-top:.45rem;font-family:var(--rp-sans);font-size:.6875rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-dl-act{display:flex;gap:.5rem;flex-wrap:wrap}
.rp-dl-act .rp-btn{padding:.62em 1.05em;font-size:.8rem}

/* Program sessions (dates page + class archive) */
.rp-sessions{margin-top:1.2rem}
.rp-sessions .rp-h2{margin-top:2.4rem}
.rp-session-year{margin-top:1.8rem;font-family:var(--rp-sans);letter-spacing:.06em;color:var(--rp-ink-3)}
/* Upcoming list across two years: the year is a real heading (KT 23640, "in big letters"), the note under it names the zone. */
.rp-session-yearhead{margin:2.2rem 0 0;font-family:var(--rp-serif);font-weight:400;font-size:var(--rp-h2,2rem);letter-spacing:-.01em;color:var(--rp-ink)}
.rp-session-yearnote{margin:.25rem 0 .5rem;color:var(--rp-ink-2)}
.rp-session{padding:1.4rem 0 1.5rem;border-bottom:1px solid var(--rp-line)}
.rp-session-head{margin:0;font-size:1rem;display:flex;align-items:center;flex-wrap:wrap;gap:.3rem .6rem}
.rp-session-badge{display:inline-block;margin-right:.35rem;padding:.1rem .55rem;border:1px solid var(--rp-line);border-radius:999px;font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-2)}
.rp-session-badge--live{border-color:var(--rp-tangelo,#F94D00);color:var(--rp-tangelo,#F94D00)}
/* Session state. A cancelled class stays in the list and says so; hiding it is
   how a cancelled 2020 class ended up keeping its own page for six years. */
.rp-session-badge--cancelled{border-color:var(--rp-warn,#B26A14);color:var(--rp-warn,#B26A14)}
.rp-session-badge--full,.rp-session-badge--waitlist{border-color:var(--rp-ink-2);color:var(--rp-ink-2)}
.rp-session--cancelled .rp-session-head strong,.rp-session--cancelled .rp-session-meta{opacity:.6}
.rp-session-meta{margin:.45rem 0 0;font-size:var(--rp-small);color:var(--rp-ink-2)}
.rp-mono{font-family:var(--rp-sans)}
/* The when-line is half prose ("1:00 pm to 2:00 pm", "one hour"), so it
   speaks sans, weighted a touch so the date carries. Mono stays for pure
   figures like tuition. */
.rp-session-when{font-weight:500;color:var(--rp-ink-2)}
.rp-session-meta.rp-mono{font-size:var(--rp-xs);letter-spacing:.02em;color:var(--rp-ink-3)}
.rp-session-variant,.rp-session-venue,.rp-session-notes{margin:.3rem 0 0;font-size:var(--rp-small);color:var(--rp-ink-2)}
.rp-session-notes{color:var(--rp-ink-3);font-style:italic}
.rp-session-cta{margin:1rem 0 0}
.rp-session .rp-btn{padding:.62em 1.05em;font-size:.8rem}
.rp-session-detail{margin:1.5rem 0 .5rem;border:1px solid var(--rp-line);border-radius:var(--rp-r-card);background:var(--rp-surface);box-shadow:var(--rp-sh-sm);padding:1rem 2rem 1.5rem}
.rp-session-detail .rp-session{border-bottom:0}
.rp-session-title{margin:.6rem 0 .8rem}
.rp-session-back{margin:0;font-size:var(--rp-small)}
.rp-session-back a{color:var(--rp-ink-2);text-decoration:none}
.rp-session-back a:hover{color:var(--rp-ink)}

/* ---- session catalog (/webinars/) ----
   Chip-filtered index over rp_session records. Chips are links carrying GET
   params. Blue is the signal colour, so it marks a filter the reader chose;
   the resting "All programs" state is ink, not blue, or the rail lights up
   three pills before anyone has touched it. */
.rp-catalog{margin-top:1.4rem}
.rp-ico{flex:none;width:1em;height:1em;vertical-align:-.125em}

/* Toolbar: where am I (segment), what am I after (search), how is it ordered
   and shaped (sort, view). One row, four jobs, left to right. */
.rp-catalog-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem .9rem;padding-bottom:1rem;border-bottom:1px solid var(--rp-line);margin:0 0 1.1rem}
.rp-seg{display:inline-flex;padding:3px;gap:2px;border:1px solid var(--rp-line-2);border-radius:999px;background:var(--rp-bg)}
.rp-seg a.rp-catalog-chip{border-color:transparent;background:transparent;box-shadow:none}
.rp-seg a.rp-catalog-chip:hover{color:var(--rp-ink);border-color:transparent}
.rp-seg a.rp-catalog-chip--rest,.rp-seg a.rp-catalog-chip--active{background:var(--rp-surface);border-color:var(--rp-line-2);color:var(--rp-ink);box-shadow:var(--rp-sh-sm)}
.rp-seg a.rp-catalog-chip--active:hover{color:var(--rp-ink)}
.rp-catalog--js .rp-seg a.rp-catalog-chip--active .rp-catalog-chip__n{color:var(--rp-ink-3);opacity:1}

.rp-catalog-search{display:flex;gap:.5rem;flex:1;min-width:15rem;max-width:24rem;margin:0}
.rp-catalog-search__field{position:relative;display:flex;flex:1;align-items:center}
.rp-catalog-search__field .rp-ico{position:absolute;left:.85em;color:var(--rp-ink-3);pointer-events:none}
.rp-catalog-search input[type=search]{flex:1;padding:.55em .9em .55em 2.4em;border:1px solid var(--rp-line-2);border-radius:999px;background:var(--rp-surface);font-size:var(--rp-small);color:var(--rp-ink)}
.rp-catalog-search input[type=search]::placeholder{color:var(--rp-ink-3)}
.rp-catalog-search input[type=search]:focus{outline:2px solid var(--rp-blue-bright);outline-offset:1px}
.rp-catalog--js .rp-catalog-search__go{display:none} /* search-as-you-type makes the button noise */

.rp-catalog-sort{margin-left:auto;display:flex;align-items:center;gap:.45rem;font-size:var(--rp-small);color:var(--rp-ink-2)}
.rp-catalog-sort__label{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-catalog-sort select{padding:.4em 1.9em .4em .8em;border:1px solid var(--rp-line-2);border-radius:999px;background:var(--rp-surface);font-size:var(--rp-small);color:var(--rp-ink);appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23666' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .7em center}
.rp-catalog-view{display:inline-flex;padding:3px;gap:2px;border:1px solid var(--rp-line-2);border-radius:999px;background:var(--rp-bg)}
.rp-catalog-view__btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:1.85rem;border:1px solid transparent;border-radius:999px;background:transparent;color:var(--rp-ink-3);cursor:pointer;padding:0}
.rp-catalog-view__btn:hover{color:var(--rp-ink)}
.rp-catalog-view__btn[aria-pressed=true]{background:var(--rp-surface);border-color:var(--rp-line-2);color:var(--rp-ink);box-shadow:var(--rp-sh-sm)}

/* Filter rails: each one a named question, so nine pills stop reading as one
   undifferentiated row. */
.rp-catalog-filters{display:flex;flex-direction:column;gap:.6rem;margin:0 0 1rem}
.rp-catalog-rail{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap}
.rp-catalog-rail__label{flex:none;min-width:4.4rem;font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-catalog-rail .rp-catalog-chips{flex:1;align-items:center}
a.rp-catalog-chip{text-decoration:none;transition:border-color .15s,color .15s,background .15s}
a.rp-catalog-chip:hover{border-color:var(--rp-ink-3);color:var(--rp-ink)}
a.rp-catalog-chip--rest{background:var(--rp-bg);border-color:var(--rp-ink-3);color:var(--rp-ink)}
a.rp-catalog-chip--active{background:var(--rp-blue-bright);border-color:var(--rp-blue-bright);color:#fff}
a.rp-catalog-chip--active:hover{color:#fff;border-color:var(--rp-blue-bright)}
/* Chip match counts, filled by the script; meaningless without it. */
.rp-catalog-chip__n{display:none}
.rp-catalog--js .rp-catalog-chip__n{display:inline-block;margin-left:.45em;font-family:var(--rp-mono);font-size:.62rem;letter-spacing:0;color:var(--rp-ink-3)}
.rp-catalog--js a.rp-catalog-chip--active .rp-catalog-chip__n{color:#fff;opacity:.75}
.rp-catalog--js a.rp-catalog-chip--none{opacity:.45}

.rp-catalog-status{margin:0 0 1.3rem;font-size:var(--rp-small);color:var(--rp-ink-2);display:flex;align-items:baseline;gap:.8rem}
.rp-catalog-status .rp-mono{font-size:var(--rp-xs);letter-spacing:.02em;color:var(--rp-ink-3)}
.rp-catalog-clear{color:var(--rp-blue-bright);text-decoration:none;font-size:var(--rp-small)}
.rp-catalog-clear:hover{text-decoration:underline}

/* ---- catalog cards ----
   Title first: the program is the thing being chosen, so it is the headline
   and the session id rides above it as a kicker. Facts below each carry the
   icon that names them, and the card closes on one primary action. */
.rp-catalog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(20rem,1fr));gap:1rem;margin:0 0 1.4rem}
.rp-catalog-card{position:relative;border:1px solid var(--rp-line);border-radius:var(--rp-r-card);background:var(--rp-surface);box-shadow:var(--rp-sh-sm);padding:1.15rem 1.3rem 1.25rem;display:flex;gap:1rem;transition:border-color .16s,box-shadow .16s}
.rp-catalog-card:hover{border-color:var(--rp-blue-200);box-shadow:var(--rp-sh-md)}
.rp-catalog-card__body{display:flex;flex-direction:column;flex:1;min-width:0}
.rp-catalog-card__leaf{flex:none;display:flex;flex-direction:column;align-items:center;align-self:flex-start;min-width:3.1rem;padding:.45rem .5rem;border:1px solid var(--rp-line);border-radius:var(--rp-r-btn);background:var(--rp-bg)}
.rp-catalog-card__month{font-family:var(--rp-cond);font-weight:600;font-size:.66rem;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-catalog-card__day{font-family:var(--rp-mono);font-size:1.25rem;line-height:1.25;color:var(--rp-ink)}
.rp-catalog-card__year{font-family:var(--rp-mono);font-size:.62rem;color:var(--rp-ink-3)}
/* The kicker used to be louder than the title it introduced. It is a label. */
.rp-catalog-card__kicker{margin:0 0 .2rem;font-family:var(--rp-cond);font-weight:600;font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-catalog-card__title{margin:0 0 .55rem;font-family:var(--rp-serif);font-weight:400;font-size:1.24rem;line-height:1.2;letter-spacing:-.01em}
.rp-catalog-card__title a{color:var(--rp-ink);text-decoration:none}
/* Stretched link: the whole card is the target, the title stays the label. */
.rp-catalog-card__link::after{content:"";position:absolute;inset:0}
.rp-catalog-card:hover .rp-catalog-card__title a{color:var(--rp-blue-bright)}
.rp-catalog-card__tags{margin:0 0 .7rem}
.rp-catalog-card__tags .rp-session-badge{display:inline-flex;align-items:center;gap:.35em;margin-right:0}
.rp-catalog-card__facts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem;font-size:var(--rp-small);line-height:1.45;color:var(--rp-ink-2)}
.rp-catalog-card__facts li{display:flex;gap:.55rem;align-items:flex-start;margin:0}
.rp-catalog-card__facts .rp-ico{margin-top:.18em;color:var(--rp-ink-3)}
.rp-catalog-card__fee{color:var(--rp-ink)}
.rp-catalog-card__fee-label{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-catalog-card__fee .rp-mono{font-size:var(--rp-xs);letter-spacing:.01em}
.rp-catalog-card__act{margin:auto 0 0;padding-top:1.05rem;display:flex;flex-wrap:wrap;align-items:center;gap:.6rem 1rem}
/* Actions sit above the stretched link so the secondary one stays clickable. */
.rp-catalog-card__act>*{position:relative;z-index:1}
.rp-catalog-card .rp-btn{padding:.62em 1.05em;font-size:.8rem}
.rp-catalog-card__go .rp-ico{transition:transform .16s var(--rp-e)}
.rp-catalog-card:hover .rp-catalog-card__go .rp-ico{transform:translateX(2px)}
.rp-catalog-card__aux{display:inline-flex;align-items:center;gap:.4em;font-size:var(--rp-small);font-weight:600;color:var(--rp-ink-2);text-decoration:none}
.rp-catalog-card__aux:hover{color:var(--rp-blue-bright)}
@media (prefers-reduced-motion:reduce){.rp-catalog-card,.rp-catalog-card__go .rp-ico{transition:none}.rp-catalog-card:hover .rp-catalog-card__go .rp-ico{transform:none}}

/* List view: the past archive runs to fifty rows, and fifty cards is a wall. */
.rp-catalog--list .rp-catalog-grid{display:flex;flex-direction:column;gap:0;border-top:1px solid var(--rp-line)}
.rp-catalog--list .rp-catalog-card{border:0;border-bottom:1px solid var(--rp-line);border-radius:0;background:transparent;box-shadow:none;padding:.95rem .4rem;align-items:center}
.rp-catalog--list .rp-catalog-card:hover{background:var(--rp-bg)}
.rp-catalog--list .rp-catalog-card__leaf{align-self:center}
.rp-catalog--list .rp-catalog-card__title{font-size:1.06rem;margin-bottom:.35rem}
.rp-catalog--list .rp-catalog-card__facts{flex-direction:row;flex-wrap:wrap;gap:.25rem 1.1rem}
.rp-catalog--list .rp-catalog-card__act{padding-top:.55rem}
@media(min-width:900px){
  .rp-catalog--list .rp-catalog-card__body{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:1.5rem}
  .rp-catalog--list .rp-catalog-card__kicker,
  .rp-catalog--list .rp-catalog-card__title,
  .rp-catalog--list .rp-catalog-card__tags,
  .rp-catalog--list .rp-catalog-card__facts{grid-column:1}
  .rp-catalog--list .rp-catalog-card__tags{margin-bottom:.4rem}
  .rp-catalog--list .rp-catalog-card__act{grid-column:2;grid-row:1/-1;margin:0;padding-top:0;justify-content:flex-end}
}

/* RSVP band: a ruled break so the form reads as its own section rather than
   as something the last filter result produced. */
.rp-rsvp-band{border-top:1px solid var(--rp-line);padding-top:clamp(2.2rem,4vw,3.2rem)}
/* Core's constrained layout centres any child narrower than the content size,
   with !important, so a narrow lede or form drifts off the section head's left
   edge. The band puts them in a flow-layout group instead: the group takes the
   content width and core leaves its children alone, so a measure cap in here
   reads as a left-aligned column. */
.rp-rsvp__body>*{margin-block:0}
.rp-rsvp__lede{max-width:58ch;margin:0 0 1.9rem}
/* rp-forms.css centres .rp-regform for standalone form pages; in the band it
   is a column under a left-aligned head. */
.rp-rsvp__body .rp-regform{max-width:46rem;margin-inline:0}

/* ---- member state: already on the list ----
   No fields. What they hold, then the ways to change it. Reads as a receipt,
   which is why it sits on surface with a hairline rather than in a form's
   chrome. */
.rp-member{max-width:46rem;border:1px solid var(--rp-line);border-radius:var(--rp-r-card);background:var(--rp-surface);box-shadow:var(--rp-sh-sm);padding:1.5rem 1.6rem 1.6rem}
.rp-member__lede{margin:0;font-size:1rem;line-height:1.6;color:var(--rp-ink-2)}
.rp-member__email{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.01em;color:var(--rp-ink);background:var(--rp-bg);border:1px solid var(--rp-line);border-radius:var(--rp-r-tag);padding:.1em .5em;white-space:nowrap}
.rp-member__seats{list-style:none;margin:1.2rem 0 0;padding:0;border-top:1px solid var(--rp-line)}
.rp-member__seats li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem 1rem;padding:.85rem 0;border-bottom:1px solid var(--rp-line)}
.rp-member__seat{display:flex;gap:.6rem;align-items:flex-start;min-width:0}
/* The tick is the one place a confirmed state earns a colour of its own. */
.rp-member__seat .rp-ico{margin-top:.2em;color:var(--rp-blue-bright)}
.rp-ds .rp-member__seat a{font-weight:600;color:var(--rp-ink);text-decoration:none}
.rp-ds .rp-member__seat a:hover{color:var(--rp-blue-bright)}
.rp-member__when{display:block;margin-top:.15rem;font-size:var(--rp-small);color:var(--rp-ink-3)}
.rp-member__act{margin-top:1.4rem;display:flex;flex-wrap:wrap;align-items:center;gap:.7rem 1.4rem}
.rp-member__act .rp-btn{padding:.62em 1.05em;font-size:.8rem}

/* Card state for a seat this visitor already holds. */
.rp-catalog-card__held{display:inline-flex;align-items:center;gap:.4em;font-size:var(--rp-small);font-weight:600;color:var(--rp-blue-bright)}

/* A radio group is a fieldset now; strip the UA chrome it brings with it. */
.rp-regform__fieldset{border:0;margin:0;padding:0;min-width:0}

/* "Reserving as …": the collapsed stand-in for name and email. Reads as a
   stated fact with a correction beside it, not as a field. */
.rp-regform__you{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .6rem;padding:.85rem 1rem;border:1px solid var(--rp-line);border-radius:var(--rp-r-btn);background:var(--rp-bg);font-size:var(--rp-small);color:var(--rp-ink-2)}
.rp-regform__you-label{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-regform__you-name{font-weight:600;color:var(--rp-ink)}
.rp-ds .rp-regform__you-edit{margin-left:auto;font-weight:600;color:var(--rp-blue-bright);text-decoration:none;white-space:nowrap}
.rp-ds .rp-regform__you-edit:hover{text-decoration:underline}
/* A choice already taken reads as settled, not as broken. */
.rp-regform__choice:has(input:disabled){opacity:.55;cursor:default}

/* Empty state: a panel with the three real ways out, not a loose sentence. */
.rp-catalog-empty{margin:.4rem 0 1.6rem;padding:1.6rem 1.7rem 1.7rem;border:1px dashed var(--rp-line-2);border-radius:var(--rp-r-card);background:var(--rp-surface);color:var(--rp-ink-2)}
.rp-catalog-empty__title{margin:0;font-family:var(--rp-serif);font-weight:400;font-size:1.24rem;line-height:1.2;letter-spacing:-.01em;color:var(--rp-ink)}
.rp-catalog-empty__note{margin:.5rem 0 0;max-width:56ch;font-size:var(--rp-small);line-height:1.55}
.rp-catalog-empty__act{margin-top:1.2rem;display:flex;flex-wrap:wrap;align-items:center;gap:.7rem 1.4rem}
.rp-catalog-empty__act .rp-btn{padding:.62em 1.05em;font-size:.8rem}
.rp-catalog .rp-session-year{margin:1.8rem 0 .8rem}

/* ---- literal red keyword emphasis (client request, consultation samples) ----
   Depicts how keywords are highlighted in red in the actual sample resumes.
   Content, not chrome: use only where copy describes the red keyword mark-up. */
.rp-ds .rp-red{color:var(--rp-keyword-red);font-weight:600}

/* ---- consultation tier cards (formcard head, /consultation) ---- */
.rph-formcard__tier{margin-top:1rem}
.rph-formcard__tier .rph-tier-grid{grid-template-columns:1fr 1fr}
@media (max-width:480px){.rph-formcard__tier .rph-tier-grid{grid-template-columns:1fr}}
.rph-formcard__tier-help{margin:.5rem 0 0;font-size:.85rem;line-height:1.5;color:var(--rp-ink-2)}

/* ---- journey continue card ("pick up where you left off") ---- */
.rp-continue{padding:1.5rem 1.6rem;margin-bottom:2rem}
.rp-continue__title{font-family:var(--rp-serif,inherit);font-weight:400;font-size:1.3rem;line-height:1.2;margin:.5rem 0 0}
.rp-continue__sub{margin:.5rem 0 0;color:var(--rp-ink-2);line-height:1.55}
.rp-continue__progress{margin:1rem 0 0}
.rp-continue__actions{display:flex;flex-wrap:wrap;align-items:center;gap:1rem;margin-top:1.25rem}
.rp-continue__reset{font-size:.88rem;color:var(--rp-ink-2)}

/* Document shelf (rp-shots) --------------------------------------------------
   Pages of a source document, shown with the same atoms as the resume samples
   shelf (.rp-sample-frame / -tag / -caption / -note) so evidence on a content
   page reads in one visual language with the sample dossiers. The grid sizes to
   the item count rather than the samples shelf's fixed 4, so three memo pages
   fill the row instead of leaving a hole. */
.rp-shots{display:grid;gap:1.5rem;margin-top:2.25rem;grid-template-columns:repeat(2,1fr)}
@media(min-width:900px){
  .rp-shots--1{grid-template-columns:minmax(0,340px)}
  .rp-shots--2{grid-template-columns:repeat(2,minmax(0,1fr));max-width:760px}
  .rp-shots--3{grid-template-columns:repeat(3,minmax(0,1fr));max-width:1060px}
}

/* ---- program marks (inc/marks.php) ----
   Composed from a motif + Messina, not shipped as flat artwork, so one mark
   serves every size, colourway, and orientation. Scale runs off one custom
   property: --rp-mark-size is the emblem height and the type sizes from it,
   so the lockup stays in proportion at any size.

   Note: do NOT put container-type on .rp-mark. inline-size containment makes
   the element size independent of its contents, which collapses the lockup to
   its narrowest column and wraps the name one word per line. Reflow is done
   with flex-wrap instead, which needs no containment. */
.rp-mark{--rp-mark-size:56px;display:inline-flex;flex-wrap:wrap;align-items:center;
  gap:calc(var(--rp-mark-size) * .24);max-width:100%}
.rp-mark__motif{flex:none;display:block}
/* aspect-ratio, not width:auto: an SVG carrying only a viewBox resolves
   width:auto to zero, so the emblem renders but measures nothing. */
.rp-mark__svg{display:block;height:var(--rp-mark-size);width:calc(var(--rp-mark-size) * 1.481)}
/* The flag sizes off the same custom property. Its star and check are
   tokenised so a dark ground can flip them: the star is navy, which
   disappears on navy, so on reverse the star takes the paper colour and the
   check inside it goes navy. The banner and its lettering are unchanged. */
.rp-mark__flag{display:block;height:var(--rp-mark-size);width:auto;max-width:100%}
.rp-flag__star{fill:var(--rp-flag-star,#12274c)}
.rp-flag__check{fill:var(--rp-flag-check,#fff)}
.rp-mark__ground{fill:var(--rp-mark-ground,#12284b)}
.rp-mark__signal{fill:var(--rp-mark-signal,#f05123)}
.rp-mark__type{display:flex;flex-direction:column;gap:calc(var(--rp-mark-size) * .05)}

/* A band of program lockups in a row: the responsive answer to "the 3 logo
   graphic". Each lockup keeps its own reflow; the row wraps on narrow
   viewports instead of shrinking the marks. */
.rp-marks-band{display:flex;flex-wrap:wrap;align-items:center;gap:1.5rem 2.5rem;margin-top:1.5rem}
/* Delivered full-name artwork sizes off the same cap-height property; a touch
   taller than a bare emblem since the name lives inside the art. */
.rp-mark__art{display:block;height:calc(var(--rp-mark-size) * 1.5);width:auto;max-width:100%}
.rp-marks-band__item{flex:0 1 auto;min-width:0}
.rp-band--marks .rp-h2{margin:.7rem 0 0}

/* The qualifier is chrome: condensed caps, the wayfinding register. */
.rp-mark__qualifier{font-family:var(--rp-cond);font-weight:700;
  font-size:calc(var(--rp-mark-size) * .15);letter-spacing:.08em;text-transform:uppercase;
  line-height:1;color:var(--rp-mark-ground,#12284b);opacity:.62}

/* The name is the mark: Messina Serif, tight, and it holds its line. */
/* Weights match the delivered lockup: the program name is Messina Serif Bold,
   and the joiner ("to a") is upright and lighter, NOT italic. */
.rp-mark__name{font-family:var(--rp-serif,'Messina Serif',Georgia,serif);font-weight:700;
  font-size:calc(var(--rp-mark-size) * .52);line-height:.98;letter-spacing:-.025em;
  color:var(--rp-mark-ground,#12284b);text-wrap:balance}
.rp-mark__joiner{font-weight:400;letter-spacing:0}
.rp-mark__reg{font-weight:400;font-size:.42em;vertical-align:.95em;margin-left:.1em;letter-spacing:0}

/* Colourways. One mark, three grounds, no extra files. */
.rp-mark--tone-paper{--rp-mark-ground:#12284b;--rp-mark-signal:#f05123}
/* On a dark ground the navy star would disappear into it, so the star takes
   the paper colour and the check inside it goes navy. */
.rp-mark--tone-reverse{--rp-mark-ground:#fff;--rp-mark-signal:#f05123;--rp-flag-star:#faf6f0;--rp-flag-check:#12274c}
.rp-mark--tone-one-color{--rp-mark-ground:currentColor;--rp-mark-signal:currentColor}

/* Stacked puts the motif over the type; auto gets there on its own by
   wrapping when the lockup runs out of room. */
.rp-mark--stacked{flex-direction:column;align-items:flex-start;
  gap:calc(var(--rp-mark-size) * .14)}

/* The site guide at /docs has its own stylesheet, assets/css/rp-docs.css,
   loaded only on that tree by rp_docs_enqueue(). It used to live here as a
   set of marketing-register step cards; it is a documentation shell now, and
   nothing outside /docs consumes it. */

/* Homepage band wrapper for the continue card: breathing room between
   full-bleed sections; the card itself keeps its own internal spacing. */
.rph-continue-band{padding:2rem 0 0}
.rph-continue-band .rp-continue{margin-bottom:0}

/* Reserve-step price stamp: the chosen rate class over the figure, and the
   shared "not sure" quiz escape hatch under embed intros and the formcard. */
.rp-review-pay-price{display:flex;flex-direction:column;gap:.2rem}
.rp-review-pay-class{font-family:var(--rp-sans);font-size:var(--rp-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-ink-3);white-space:nowrap}
.rp-embed-quiz{margin:.75rem 0 0;font-size:var(--rp-small)}
.rp-embed-quiz a{color:var(--rp-ink-2);text-decoration:underline;text-underline-offset:2px}
.rp-continue-band{padding:2rem 0 0}
.rp-continue-band .rp-continue{margin-bottom:0}

/* ---- sample documents: the real client files, shown as paper --------------
   NAMESPACE, and it matters: this is .rp-sampledoc, NOT .rp-sample. A
   .rp-sample component already exists above (the specimen shelf card used by
   the consultation page and child-pages), and it paints background, border,
   border-radius:12px and overflow:hidden. Naming this one .rp-sample wrapped
   every resume in that card chrome with no horizontal padding, so the document
   sat flush against a rounded box, and .rp-sample-note leaked onto the
   consultation rail's captions. Two components cannot share a name.
   The page's whole argument is the two-page format, so both pages sit side by
   side at true letter proportion (1275x1650). Production hides page two in a
   one-at-a-time carousel, which is exactly the wrong place to hide it.

   The sheet reads as paper and nothing else: white, a hairline edge, a lifted
   shadow, no card chrome, no tint, no rounded-off corners past 3px. The frame
   must never compete with the document, because the document is the product.
   KT's standing note is that scans read "WAY too small", so a sheet is never
   a thumbnail: two-up it holds ~420px wide, one-up it holds 34rem, and every
   sheet opens the 150dpi original in a new tab. */

.rp-sampledoc{margin-top:3.5rem;padding-top:1.5rem;border-top:1px solid var(--rp-ink)}
.rp-brief+.rp-sampledoc,.rp-track+.rp-sampledoc{margin-top:2rem}

.rp-sampledoc-head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.75rem 2rem;
  align-items:end;margin-bottom:1.5rem}
/* Type follows the 2026-08 ruling: labels are sans, sentence case, slightly
   tight, never condensed caps at wide tracking and never mono. Mono is data
   only, and none of the chrome here is data. */
.rp-sampledoc-eyebrow{font-family:var(--rp-sans);font-weight:600;font-size:.9375rem;
  letter-spacing:-.01em;text-transform:none;color:var(--rp-blue-bright);margin:0 0 .5rem}
.rp-sampledoc[data-kind="private"] .rp-sampledoc-eyebrow{color:var(--rp-tangelo)}
.rp-sampledoc[data-kind="announcement"] .rp-sampledoc-eyebrow{color:var(--rp-ink-3)}
/* 600, not 650: Messina Sans ships 400/600 only, so 650 silently falls back. */
.rp-sampledoc-title{font-family:var(--rp-sans);font-weight:600;
  font-size:clamp(1.5rem,1.2rem + 1.1vw,1.85rem);line-height:1.12;letter-spacing:-.02em;
  color:var(--rp-ink);margin:0;max-width:26ch;text-wrap:balance}
/* Prose, so it takes the house prose register like .rp-brief-body. .95rem put
   it at 15.2px, the in-between size that looks fine in isolation and reads as
   small print the moment it sits beside real body copy. */
.rp-sampledoc-note{margin:.7rem 0 0;max-width:52ch;font-size:1.1875rem;line-height:1.62;color:var(--rp-ink-2)}

/* The download is a quiet second read, not a button: the sheets are the offer. */
.rp-sampledoc-dl{display:inline-flex;flex-direction:column;gap:.15rem;text-align:right;
  text-decoration:none;white-space:nowrap}
.rp-sampledoc-dl-label{font-family:var(--rp-sans);font-weight:600;font-size:.9375rem;
  letter-spacing:-.01em;text-transform:none;color:var(--rp-ink-2);
  text-decoration:underline;text-underline-offset:3px}
.rp-sampledoc-dl-meta{font-family:var(--rp-sans);font-weight:400;font-size:.875rem;
  line-height:1.5;letter-spacing:0;text-transform:none;color:var(--rp-ink-3)}
.rp-sampledoc-dl:hover .rp-sampledoc-dl-label{color:var(--rp-tangelo)}

.rp-sampledoc-sheets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem;
  align-items:start}
.rp-sampledoc-sheets[data-count="1"]{grid-template-columns:minmax(0,34rem)}

.rp-sheet{margin:0}
.rp-sheet-link{display:block;position:relative;text-decoration:none;
  border-radius:3px;outline-offset:4px}
.rp-sheet-img{display:block;width:100%;height:auto;aspect-ratio:1275/1650;background:#fff;
  border:1px solid var(--rp-line);border-radius:3px;box-shadow:var(--rp-sh-sm);
  transition:box-shadow var(--rp-t-fast,.16s),border-color var(--rp-t-fast,.16s)}
.rp-sheet-link:hover .rp-sheet-img,.rp-sheet-link:focus-visible .rp-sheet-img{
  border-color:var(--rp-ink-3);box-shadow:var(--rp-sh-md)}

/* "View full size" is an affordance, not a label: it appears on the sheet only
   on hover, and it is aria-hidden because the link itself already says where it
   goes to a screen reader. */
.rp-sheet-zoom{position:absolute;right:.6rem;bottom:.6rem;
  font-family:var(--rp-sans);font-weight:600;font-size:.875rem;letter-spacing:-.01em;
  text-transform:none;color:#fff;background:var(--rp-evening,rgba(16,36,44,.92));
  padding:.35em .6em;border-radius:var(--rp-r-tag,4px);
  opacity:0;transition:opacity var(--rp-t-fast,.16s);pointer-events:none}
.rp-sheet-link:hover .rp-sheet-zoom,.rp-sheet-link:focus-visible .rp-sheet-zoom{opacity:1}

/* "Page 1" is a locator, which is chrome, not data. Sans, sentence case. */
.rp-sheet-n{font-family:var(--rp-sans);font-weight:400;font-size:.875rem;line-height:1.5;
  letter-spacing:0;text-transform:none;color:var(--rp-ink-3);text-align:center;margin-top:.6rem}

/* Where a client PDF carries working material behind the resume, we say so in
   one line rather than putting it on the page. Sans meta register: it is a
   sentence about the file, and mono is for data only. */
.rp-sampledoc-pdfnote{font-family:var(--rp-sans);font-weight:400;font-size:.875rem;
  line-height:1.5;letter-spacing:0;color:var(--rp-ink-3);margin:1.1rem 0 0;max-width:56ch}

@media(max-width:900px){
  .rp-sampledoc-head{grid-template-columns:minmax(0,1fr)}
  .rp-sampledoc-dl{text-align:left;align-items:flex-start}
}
@media(max-width:640px){
  .rp-sampledoc-sheets{grid-template-columns:minmax(0,1fr)}
  /* Touch has no hover, so the affordance would never show. Pin it visible. */
  .rp-sheet-zoom{opacity:1}
}
@media(prefers-reduced-motion:reduce){
  .rp-sheet-img,.rp-sheet-zoom{transition:none}
}

/* ===========================================================================
   THE TYPE RULING, ROLLED OUT SITE-WIDE                          2026-08-19
   ===========================================================================
   Kathryn, 2026-08-17: "throughout the website you throw in this weird, small,
   grayish, all cap, spaced out type font... This is not cute or readable. It is
   washed out."

   The homepage answered that in rp-bands.css (096cd3d, c34865d): the eyebrow
   left the caps register, and mono left chrome entirely. Those commits fixed
   the .rph-* classes, which only the homepage uses. Everything else on the site
   still carried the old treatment: 60 mono declarations, 63 uppercase rules and
   22 condensed-caps rules in this file alone. This block finishes the job.

   TWO REGISTERS, and they are the homepage's, restated for the .rp-* library so
   the two cannot drift:
     label  sans 600, .9375rem, -.01em, sentence case   (was condensed caps)
     meta   sans 400, .875rem,  0,      sentence case   (was mono caps)
     ident  sans 400, .9375rem, 0,      sentence case   (breadcrumbs, datelines)

   IDENT is the third register and it exists because the first cut of this block
   did not have it. Breadcrumbs and case datelines were filed under meta, which
   is the register for captions, and they are not captions: they are what you
   read to work out where you are. They take the label SIZE at body weight.

   Meta is .875rem, not .8125rem. 13px is fine print, and almost nothing in this
   library is fine print; the genuine cases (a logo-bar note, a signup
   reassurance) set .8125rem for themselves.

   The label size is .9375rem because that is exactly what .rp-kick and
   .rph-kicker already are. The first cut of this block used .875rem, copied
   from the homepage's secondary TAG family, which quietly made every eyebrow
   outside the homepage a step smaller than the homepage's own. One eyebrow,
   one size.

   Sizes go UP, which is the point: the complaint was that this type was small
   AND washed out, so recolouring alone would have missed half of it. The old
   rules ran .6rem to .72rem with .08em to .18em of tracking.

   WHY A GROUPED BLOCK rather than 70 edits in place. It is the pattern
   rp-bands.css already uses for its own meta register, it states the ruling in
   one reviewable place, and it leaves each component's colour, spacing and
   layout untouched: only family, size, weight, tracking and case are claimed
   here. Anything needing to opt out should say so with a comment, not by
   quietly predating this block.

   AUTHORED CAPS ARE NOT COVERED. Strings typed in caps in PHP or in the
   database still render in caps; text-transform cannot reach them. Those are
   content edits, tracked separately.

   WHAT DELIBERATELY KEEPS MONO. Mono is data, and only data: .rp-table td,
   .rp-mono, code in .rp-docs-*, the catalog date numerals, .rp-session-year,
   .rp-keyled-n and .rp-note-chip counters, .rp-member__email,
   .gf_step_number, .rp-brief-datum (a pay plan or salary), and .rp-doc-when
   (dates inside a rendered resume). .rp-mark__qualifier is also untouched: it
   is part of a credential mark lockup, which is brand artwork, not chrome. */

.rp-filed,
.rp-pill,
.rp-chip,
.rp-quicklinks__label,
.rp-hero__aside-label,
.rp-sample-tag,
.rp-match-tag,
.rp-shelf-tag,
.rp-session-badge,
.rp-mstep-name,
.rp-form-steps li,
.rp-order-form .gf_step,
.rp-pagenav-label,
.rp-track,
.rp-step-n,
.rp-step-actions a,
.rp-notes-kick,
.rp-brief-kick,
.rp-transcript summary,
.rp-doc-h,
.rp-doc-employer-name,
.rp-logobar li span,
.rp-table thead th,
.rp-catalog-sort__label,
.rp-catalog-rail__label,
.rp-catalog-card__month,
.rp-catalog-card__kicker,
.rp-catalog-card__fee-label,
.rp-regform__you-label,
.rp-docs-commands th,
.rpnav__trigger,
.rpnav__colhead,
.rpnav__link--hub .rpnav__link-label,
.rpnav__link--card .rpnav__link-label,
.rpnav__cta,
.rpnav__account,
.rpnav__signin{
  font-family:var(--rp-sans);font-weight:600;font-size:.9375rem;
  letter-spacing:-.01em;text-transform:none}

/* The header joined the ruling on 2026-09-07 (navigation-styles.css carries
   the same values itself, because this sheet is enqueued conditionally). The
   utility bar and the panel notes take meta; panel links take ident. */
.rph-utilbar .rph-wrap,
.rpnav__note{
  font-family:var(--rp-sans);font-weight:400;font-size:.875rem;line-height:1.5;
  letter-spacing:0;text-transform:none}
.rpnav__link{
  font-family:var(--rp-sans);font-weight:400;font-size:.9375rem;
  letter-spacing:0;text-transform:none}

.rp-hero__bookcap,
.rp-hero__links-meta,
.rp-hero__aside figcaption,
.rp-media__cap,
.rp-quote-feat figcaption,
.rp-quote-lead figcaption,
.rp-quote figcaption,
.rp-quote-cite,
.rp-trust-sub,
.rp-samples-foot,
.rp-stat__l,
.rp-words-stat dd,
.rp-collage-loc,
.rp-review-meta,
.rp-review-pay-class,
.rp-offer-price,
.rp-price-from,
.rp-price-foot,
.rp-tier-price,
.rp-reserve-stamp .from,
.rp-reserve-bar-sub,
.rp-shelf-from,
.rp-mstep-count,
.rp-sample-view,
.rp-sample-pages,
.rp-sample-pdf,
.rp-reader-page figcaption,
.rp-dossier-pages figcaption,
.rp-step-more,
.rp-note-loc,
.rp-video__note,
.rp-dl-meta,
.rp-ledger-target,
.rp-force-no,
.rp-pagenav-folio,
.rp-docs-chip{
  font-family:var(--rp-sans);font-weight:400;font-size:.875rem;line-height:1.5;
  letter-spacing:0;text-transform:none}

/* Sizes above are stated flat because every rule they replace was flat too. The
   two that carried !important in their original declaration keep it here, or
   the old rule wins. */
.rp-doc-h{font-size:.875rem}
.rp-stat__l{font-size:.8125rem;margin-top:4px}

/* IDENT: breadcrumbs and case datelines. Not captions, so not the meta size.
   These are how a reader works out where they are, and they were the smallest
   type on the page at .68rem / 10.9px.

   .rp-crumbs--inline needs the two-class selector to win: the inline variant
   sets its own .68rem at (0,2,0), which outranks a bare .rp-crumbs__wrap and
   is why the breadcrumb stayed tiny through the whole first sweep. Matching
   its specificity is the fix, not !important. */
.rp-crumbs__wrap,
.rp-crumbs--inline .rp-crumbs__wrap,
.rp-dossier-bar{
  font-family:var(--rp-sans);font-weight:400;font-size:.9375rem;line-height:1.5;
  letter-spacing:0;text-transform:none}

/* ---- Logo bar: centre the orphan row ------------------------------------ 2026-08-19
   Same fix as .rph-logobar in rp-bands.css, for the .rp-* library: a partial
   final row cannot be centred by grid, so the column count (3 / 4 / 6 here,
   with a 1.5rem gutter) moves into the flex-basis. */
.rp-logobar{
  display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-start;
  gap:2.75rem 1.5rem}
.rp-logobar li{flex:0 0 calc((100% - 3rem) / 3)}
@media (min-width:700px){
  .rp-logobar li{flex-basis:calc((100% - 4.5rem) / 4)}
}
@media (min-width:1020px){
  .rp-logobar li{flex-basis:calc((100% - 7.5rem) / 6)}
}

/* -- Session event-card artwork (catalog covers + detail hero) ------------- */
.rp-catalog-card--art{flex-wrap:wrap}
.rp-catalog-card__cover{flex:none;width:calc(100% + 2.6rem);margin:-1.15rem -1.3rem .95rem;display:block;line-height:0;border-radius:var(--rp-r-card) var(--rp-r-card) 0 0;overflow:hidden;border-bottom:1px solid var(--rp-line)}
.rp-catalog-card__cover img{width:100%;height:auto;display:block}
.rp-session-detail__art{margin:-1rem -2rem 1.4rem;line-height:0;border-radius:var(--rp-r-card) var(--rp-r-card) 0 0;overflow:hidden;border-bottom:1px solid var(--rp-line)}
.rp-session-detail__art img{width:100%;height:auto;display:block}
@media (max-width:720px){.rp-session-detail__art{margin:-1rem -1rem 1.1rem}}
.single-rp_session .wp-block-post-title{font-family:var(--rp-serif);font-weight:400;font-size:2.1rem;line-height:1.18;letter-spacing:-.01em;margin:0 0 .4rem;max-width:26ch}
.rp-session-badge--ended{background:var(--rp-ink-3);border-color:var(--rp-ink-3);color:#fff}
.rp-session-ended{margin:0 0 1rem;font-size:var(--rp-small);color:var(--rp-ink-2)}
.rp-catalog-card--past{background:var(--rp-bg);box-shadow:none}
.rp-catalog-card--past:hover{box-shadow:none;border-color:var(--rp-line)}
.rp-catalog-card--past .rp-catalog-card__title a{color:var(--rp-ink-2)}
.rp-catalog-card--past .rp-catalog-card__leaf{background:transparent}
.rp-catalog-card--past .rp-catalog-card__day{color:var(--rp-ink-2)}

/* -- Single session page (/training/<slug>/) --------------------------------
   The page opens on the session itself: night ground, the artwork as a flat
   card on the right, one primary action. Facts follow as ruled rows (labels
   condensed, values mono where they are data), then the action in place and
   a short rail of other upcoming sessions. */
.rp-wrap--narrow{max-width:860px}
.rp-session-hero{background:var(--rp-night);color:var(--rp-d-fg,#E8EDF6);padding-block:clamp(2.5rem,5vw,4.25rem);position:relative;overflow:hidden}
.rp-session-hero::before{content:"";position:absolute;inset:0;background:radial-gradient(55% 60% at 78% 30%,rgba(47,98,196,.28),transparent 70%);pointer-events:none}
.rp-session-hero .rp-wrap{position:relative;display:grid;gap:2.5rem}
@media(min-width:900px){.rp-session-hero .rp-wrap{grid-template-columns:1.05fr .95fr;gap:4rem;align-items:center}}
.rp-session-hero .rp-session-back{margin:0 0 1.4rem}
.rp-session-hero .rp-session-back a{color:rgba(255,255,255,.62);text-decoration:none}
.rp-session-hero .rp-session-back a:hover{color:#fff}
.rp-session-hero .rp-kick{color:var(--rp-lifted-blue,#6490E2)}
.rp-session-hero .rp-h1{color:#fff;max-width:20ch;margin:.6rem 0 0}
.rp-session-hero__meta{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem .7rem;margin:1.2rem 0 0;color:rgba(255,255,255,.78)}
.rp-session-hero__meta .rp-session-badge{border-color:rgba(255,255,255,.3);color:rgba(255,255,255,.85)}
.rp-session-hero__meta .rp-mono{font-size:var(--rp-small);letter-spacing:.02em}
.rp-session-hero__lead{color:var(--rp-d-fg-2,rgba(232,237,246,.8));max-width:48ch;margin:1.2rem 0 0}
.rp-session-hero__cta{justify-content:flex-start;margin-top:1.9rem}
.rp-session-hero .rp-btn-quiet{background:transparent;color:rgba(255,255,255,.85);border-color:rgba(255,255,255,.28);box-shadow:none}
.rp-session-hero .rp-btn-quiet:hover{color:#fff;border-color:rgba(255,255,255,.5)}
.rp-session-hero__art{margin:0;line-height:0}
.rp-session-hero__art img{width:100%;height:auto;display:block;border-radius:var(--rp-r-card);box-shadow:0 18px 44px rgba(4,10,24,.5)}
.rp-session-page,.rp-session-rsvp,.rp-session-more{padding-block:clamp(1.9rem,3.5vw,2.9rem)}
.rp-session-page__head{margin:0 0 .4rem;font-family:var(--rp-cond);font-weight:600;font-size:.78rem;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-session-facts{margin:0}
.rp-session-fact{display:grid;grid-template-columns:9.5rem 1fr;gap:1.5rem;padding:.8rem 0;border-bottom:1px solid var(--rp-line)}
.rp-session-fact dt{font-family:var(--rp-cond);font-weight:600;font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:var(--rp-ink-3);padding-top:.15rem}
.rp-session-fact dd{margin:0;color:var(--rp-ink)}
.rp-session-fact dd.rp-mono{font-size:var(--rp-small);letter-spacing:.02em}
@media(max-width:600px){.rp-session-fact{grid-template-columns:1fr;gap:.2rem}}
.rp-session-rsvp{border-top:1px solid var(--rp-line);background:var(--rp-bg)}
.rp-session-rsvp .rp-h2{margin:0 0 .6rem}
.rp-session-more{border-top:1px solid var(--rp-line)}
.rp-session-more__row{display:flex;align-items:baseline;justify-content:space-between;gap:1.5rem;margin:0;padding:.75rem 0;border-bottom:1px solid var(--rp-line)}
.rp-session-more__row a{font-weight:600;color:var(--rp-ink);text-decoration:none}
.rp-session-more__row a:hover{color:var(--rp-blue,#2F62C4)}
.rp-session-more__row .rp-mono{font-size:var(--rp-xs);letter-spacing:.02em;color:var(--rp-ink-3);white-space:nowrap}
.rp-session-more__all{margin:1rem 0 0;font-size:var(--rp-small)}
.rp-session-more__all a{color:var(--rp-blue,#2F62C4);font-weight:600;text-decoration:none}
.rp-session-more__all a:hover{text-decoration:underline}
.rp-session-crossing{margin:1.6rem 0 0;padding-top:1.1rem;border-top:1px solid var(--rp-line);font-size:var(--rp-small);color:var(--rp-ink-2)}
.rp-session-crossing a{color:var(--rp-blue,#2F62C4);font-weight:600;text-decoration:none}
.rp-session-crossing a:hover{text-decoration:underline}
.rp-ds .rp-cta-row.wp-block-buttons{gap:.75rem;margin-top:1.5rem}
.rp-ticks.wp-block-list{margin-top:16px}
.rp-lead.rp-lead--intro{max-width:56ch;margin-bottom:2rem}

/* Product cards and rates — the price is data, so it is set in mono like every
   other number on this site, and a per-person suffix reads as a label beside it
   rather than as part of the figure. */
.rp-product-card__price,.rp-rate__price{white-space:nowrap}
.rp-product-card__suffix,.rp-rate__suffix{font-family:var(--rp-sans);font-size:.6875rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rp-ink-3)}
.rp-product-card--missing{border-color:var(--rp-tangelo)}
.rp-product-card--missing code{font-family:var(--rp-mono)}
