/*
Theme Name: Back Pain STL
Template: twentytwentyfive
Description: Back Pain STL — dark ground, Goudy display over Montserrat, single accent. Generated from the shared Padda site base; edit ~/Websites/_tools/brandtheme/base.css, not this file.
Version: 1.0.0
*/

/* ==== Back Pain STL — brand tokens =========================================
   The ONLY per-brand block in this stylesheet. Everything below is shared
   with the sibling sites and must not carry a literal brand color.
   Source of truth: 03-brand-assets/README.md

   The `prp-` class prefix is the shared design-system prefix across all
   four sites, not a reference to platelet-rich plasma. Renaming it would
   mean rewriting the block markup of every published page for no visible
   gain. Do not "correct" it.
   ------------------------------------------------------------------ */
:root {
  --bd-ink:       #0B0A0A;    /* page ground */
  --bd-masthead:  #0E0D0D;    /* header + footer band */
  --bd-paper:     #F2F0F0;    /* body text on the dark ground */
  --bd-ground:    #F3F2F2;    /* light surfaces */
  --bd-charcoal:  #444141;
  --bd-mist:      #D7D3D3;    /* rules and dividers */
  --bd-accent:    #FF563C;    /* links, eyebrow rules, primary button fill */
  --bd-accent-d:  #AE1800;    /* hover fill, Call button */
  --bd-accent-l:  #FF8D7A;    /* uncommon-tier marker */
  --bd-alert:     #EC3013;    /* alert tier only */
  --bd-ink-soft:  #252222;

  /* Channel tokens. Translucent tints are written rgb(var(--bd-X-rgb) / a)
     because rgba() cannot take a hex custom property. Without these the
     shared stylesheet silently rendered PRP STL's orange, paper, ink, ember
     and red on every sibling site -- 57 declarations of the wrong brand. */
  --bd-accent-rgb:   255 86 60;
  --bd-accent-d-rgb: 174 24 0;
  --bd-accent-l-rgb: 255 141 122;
  --bd-paper-rgb:    242 240 240;
  --bd-ink-rgb:      11 10 10;
  --bd-alert-rgb:    236 48 19;
  --bd-charcoal-rgb: 68 65 65;
}

/* ---- ground -------------------------------------------------------- */
html { background: var(--bd-ink, #080807); }
body { background: var(--bd-ink, #080807); color: var(--bd-paper, #f2efea);
       font-family: Montserrat, "Helvetica Neue", Arial, sans-serif;
       -webkit-font-smoothing: antialiased; }

/* ---- display type -------------------------------------------------- */
h1, h2, .wp-block-post-title {
  font-family: "Sorts Mill Goudy", "Goudy Old Style", Georgia, serif;
  font-weight: 400; color: #FFFFFF; text-wrap: balance;
}
.wp-block-post-title, h1 { font-size: clamp(2.3rem, 1.4rem + 3.4vw, 3.5rem);
  line-height: 1.06; letter-spacing: -.013em; margin: 0 0 .6em; }
h2 { font-size: clamp(1.7rem, 1.2rem + 1.6vw, 2.15rem); line-height: 1.15;
     letter-spacing: -.008em; margin: 2.6em 0 .7em; padding-top: 1.5em;
     border-top: 1px solid rgba(255,255,255,.12); }
h2:first-of-type { border-top: 0; padding-top: 0; }
/* h3 was pinned at 1.18rem, which overrode the theme.json h3 token and left
   it 0.9px above body copy -- on the FAQ pages, where h3 carries the
   question, that is not a heading, it is a bold paragraph. Back to the
   token so the ramp is body 18 / h3 22 / h2 34. */
h3 { font-family: Montserrat, sans-serif; font-weight: 600;
     font-size: var(--wp--preset--font-size--h3, 1.38rem);
     color: #FFFFFF; margin: 2em 0 .4em; letter-spacing: -.004em; }

/* ---- body ---------------------------------------------------------- */
p { color: rgb(var(--bd-paper-rgb) / 0.74); line-height: 1.68; margin: 0 0 1.15em; max-width: 68ch; }
p strong, li strong { color: var(--bd-paper, #f2efea); font-weight: 600; }
p em { color: rgb(var(--bd-paper-rgb) / 0.86); }

/* lead paragraph — the first one after the title carries the hook.
   :not(.prp-eyebrow) matters: :first-of-type is a pseudo-class, so this
   selector outranks the eyebrow rule and would style the eyebrow as a lead. */
.entry-content > p:first-of-type:not(.prp-eyebrow),
.wp-block-post-content > p:first-of-type:not(.prp-eyebrow) {
  font-size: 1.18rem; line-height: 1.6; color: rgb(var(--bd-paper-rgb) / 0.86); max-width: 52ch;
}
/* the paragraph right after the opening eyebrow is the real lead */
.entry-content > .prp-eyebrow:first-child + p,
.wp-block-post-content > .prp-eyebrow:first-child + p {
  font-size: 1.18rem; line-height: 1.6; color: rgb(var(--bd-paper-rgb) / 0.86); max-width: 52ch;
}

/* ---- links --------------------------------------------------------- */
a { color: var(--bd-accent, #e2661a); text-decoration: none;
    border-bottom: 1px solid rgb(var(--bd-accent-rgb) / 0.32); transition: color .16s, border-color .16s; }
a:hover { color: #FFFFFF; border-bottom-color: rgba(255,255,255,.5); }

/* ---- lists: accent markers ----------------------------------------- */
ul.wp-block-list { list-style: none; padding-left: 0; margin: 0 0 1.6em; }
ul.wp-block-list li { position: relative; padding-left: 1.5em; margin-bottom: .8em;
  color: rgb(var(--bd-paper-rgb) / 0.74); line-height: 1.62; max-width: 68ch; }
ul.wp-block-list li::before { content: ""; position: absolute; left: 0; top: .62em;
  width: 7px; height: 7px; background: var(--bd-accent, #e2661a); }

/* ---- the call-to-action block -------------------------------------- */
.prp-cta { border: 1px solid rgb(var(--bd-accent-rgb) / 0.45); background: rgb(var(--bd-accent-rgb) / 0.05);
  padding: 2.2rem 2rem; margin: 3.5rem 0 1rem; }
.prp-cta h2 { border-top: 0; padding-top: 0; margin-top: 0; font-size: 1.6rem; }
.prp-cta p { max-width: 60ch; }
.prp-cta a { border-bottom: 0; font-weight: 600; }

/* ---- images -------------------------------------------------------- */
img, .wp-block-post-featured-image img { max-width: 100%; height: auto; }
.wp-block-post-featured-image { margin-bottom: 2.5rem; }
.wp-block-post-featured-image img { filter: saturate(.82) contrast(1.04); }

/* ---- masthead / nav ------------------------------------------------ */
.wp-block-site-title a { font-family: "Sorts Mill Goudy", Georgia, serif;
  color: #FFFFFF; border-bottom: 0; font-size: 1.42rem; }
.wp-block-navigation { font-size: .8rem; letter-spacing: .01em; }
.wp-block-navigation a { color: rgba(255,255,255,.72); border-bottom: 0; }
.wp-block-navigation a:hover { color: #FFFFFF; }
header.wp-block-template-part { background: var(--bd-masthead, #0b0b0a);
  border-bottom: 1px solid rgba(255,255,255,.12); }

/* ---- footer -------------------------------------------------------- */
footer.wp-block-template-part { background: var(--bd-masthead, #0b0b0a); margin-top: 5rem;
  border-top: 1px solid rgba(255,255,255,.12); }
footer.wp-block-template-part p:not([class]) { font-size: .95rem; color: rgba(255,255,255,.62); }
footer.wp-block-template-part a { color: rgba(255,255,255,.62); border-bottom: 0; }
footer.wp-block-template-part a:hover { color: var(--bd-accent, #e2661a); }

/* ---- separators ---------------------------------------------------- */
hr.wp-block-separator { border: 0; border-top: 1px solid rgba(255,255,255,.12); margin: 3rem 0; }

/* ---- reading measure ----------------------------------------------- */
.wp-block-post-content { max-width: 760px; margin-inline: auto; padding: 0 1.5rem; }

@media (max-width: 700px) {
  h2 { margin-top: 2em; padding-top: 1.2em; }
  .prp-cta { padding: 1.6rem 1.2rem; }
}

/* ---- eyebrow: the accent rule + tracked caps above a section -------- */
/* Eyebrow sized against the headline it introduces. At .625rem it was a
   fifth of the H1 and read as a caption rather than as a kicker; it now
   sits at roughly two fifths, on the same viewport curve as the H1 so the
   relationship holds at every width instead of only at one. Tracking
   comes down from .2em to .11em -- letter-spacing that reads as
   deliberate at 10px reads as broken at 20px. The rule before it is set
   in em so it grows with the type rather than shrinking against it. */
.prp-eyebrow { font-size: clamp(1.2rem, .78rem + 1.45vw, 1.75rem);
  letter-spacing: .085em; color: var(--bd-accent, #e2661a); line-height: 1.25;
  text-transform: none; margin: 0 0 1.1rem; display: flex; align-items: center; gap: .75em;
  max-width: none; font-weight: 600; }
.prp-eyebrow::before { content: ""; width: 1.7em; height: 2px; background: var(--bd-accent, #e2661a);
  flex: 0 0 1.7em; }

/* Card and callout eyebrows stay small -- inside a bordered tier box the
   label is chrome, not a kicker, and the section rule above would swamp it. */
.prp-tier .prp-eyebrow,
.prp-flag .prp-eyebrow { font-size: .82rem; letter-spacing: .15em; }
.prp-tier .prp-eyebrow::before,
.prp-flag .prp-eyebrow::before { width: 1.9em; flex: 0 0 1.9em; }

/* ---- FAQ: h3 rows read as an accordion list ------------------------ */
.wp-block-post-content h3 { border-top: 1px solid rgba(255,255,255,.12);
  padding-top: 1.1em; }
.wp-block-post-content h3 + p { color: rgb(var(--bd-paper-rgb) / 0.66); font-size: .96rem; }

/* ---- pull the stat figure out of the paragraph --------------------- */
.wp-block-post-content p > strong:first-child {
  font-family: "Sorts Mill Goudy", Georgia, serif; font-weight: 400; }

/* ---- link lists (the cross-link blocks) ---------------------------- */
ul.wp-block-list li a { border-bottom: 0; }
ul.wp-block-list li a:hover { border-bottom: 1px solid rgba(255,255,255,.5); }

/* ---- selection ----------------------------------------------------- */
::selection { background: var(--bd-accent, #e2661a); color: #FFFFFF; }

/* ---- focus, kept visible ------------------------------------------- */
a:focus-visible, button:focus-visible {
  outline: 2px solid var(--bd-accent, #e2661a); outline-offset: 3px; }

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; animation: none !important; }
}

/* ==== layout vocabulary from the approved artboards =================== */

/* hero: text left, image right, flush to the rule below */
.prp-hero { padding: 3.2rem 0 3rem; border-bottom: 1px solid rgba(255,255,255,.12); }
.prp-hero h1 { margin-top: 0; }
.prp-lead { font-size: 1.06rem; line-height: 1.6; color: rgb(var(--bd-paper-rgb) / 0.74); max-width: 44ch; }
.prp-hero-img { margin: 0; }
.prp-hero-img img { width: 100%; object-fit: cover;
  filter: saturate(.78) contrast(1.06) brightness(.92); }

/* two-column split used throughout */
.prp-split { gap: 3rem; align-items: flex-start; margin: 0 0 1rem; }
.prp-split > .wp-block-column > *:first-child { margin-top: 0; }

/* severity scale: four boxes across */
.prp-scale ul.wp-block-list { display: grid; grid-template-columns: repeat(4, 1fr);
  gap: .75rem; margin: 0 0 2.5rem; }
.prp-scale li { padding: .95rem 1rem; border: 1px solid rgba(255,255,255,.14);
  border-bottom: 2px solid var(--bd-accent, #e2661a); font-size: .82rem; color: rgb(var(--bd-paper-rgb) / 0.86); }
.prp-scale li::before { display: none; }

/* the flagged callout */
.prp-flag { border: 1px solid rgb(var(--bd-accent-rgb) / 0.45); padding: 1.4rem 1.5rem; }
.prp-flag p { margin-bottom: 0; font-size: .92rem; }

/* the statistic panel */
.prp-stat { border-left: 1px solid rgba(255,255,255,.12); padding-left: 2rem; }
.prp-stat p { font-size: .93rem; }
/* after .prp-stat p, and matched at equal-or-higher specificity, or the
   body size wins and the figure renders at 15px. */
.prp-stat p.prp-fig, p.prp-fig {
  font-family: "Sorts Mill Goudy", Georgia, serif;
  font-size: clamp(2.8rem, 2rem + 2.6vw, 3.9rem);
  line-height: .98; color: var(--bd-accent, #e2661a); margin: 0 0 .6rem; max-width: none;
  letter-spacing: -.02em; }

/* numbered steps */
.prp-steps ol.wp-block-list { list-style: none; counter-reset: s; padding-left: 0; }
.prp-steps li { counter-increment: s; position: relative; padding-left: 2.6rem;
  margin-bottom: 1.25rem; color: rgb(var(--bd-paper-rgb) / 0.74); }
.prp-steps li::before { content: "0" counter(s); position: absolute; left: 0; top: .1em;
  font-size: .72rem; letter-spacing: .12em; color: var(--bd-accent, #e2661a); font-weight: 600;
  background: none; width: auto; height: auto; }

/* the pull quote */
.prp-quote { border-left: 2px solid var(--bd-accent, #e2661a); padding-left: 1.6rem; margin: 0 0 1.4rem; }
.prp-q { font-family: "Sorts Mill Goudy", Georgia, serif; font-size: 1.42rem;
  line-height: 1.34; color: #FFFFFF; font-style: italic; margin-bottom: .5rem; }
.prp-attrib { font-size: .78rem; letter-spacing: .1em; color: rgba(255,255,255,.42); }

/* drive-time row */
.prp-access ul.wp-block-list { display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 0; border-top: 1px solid rgba(255,255,255,.12);
  border-bottom: 1px solid rgba(255,255,255,.12); margin: 0 0 1.2rem; }
.prp-access li { padding: 1.3rem 1.2rem; border-right: 1px solid rgba(255,255,255,.12); }
.prp-access li:last-child { border-right: 0; }
.prp-access li::before { display: none; }
.prp-access a { border-bottom: 0; display: block; }
.prp-from { display: block; font-size: .62rem; letter-spacing: .18em;
  color: rgba(255,255,255,.42); margin-bottom: .45rem; }
.prp-min { font-family: "Sorts Mill Goudy", Georgia, serif; font-size: 1.7rem; color: #FFFFFF; }
.prp-access a:hover .prp-min { color: var(--bd-accent, #e2661a); }

/* wide sections escape the reading measure */
/* NOTE on full-bleed: margin-inline: calc(50% - 50vw) is the common idiom
   and it failed here twice, for two different reasons. Its 50% resolves
   against the PARENT's content box, which on this theme is neither full
   width nor always centered; and TT5 sets margin-left/right: auto
   !important on constrained children, which silently discards the
   negative margin while leaving width:100vw in place -- the element then
   overflows by exactly the offset it should have been pulled back by.
   left/translateX depends on neither, so it is the house pattern. */
.wp-block-post-content > .prp-hero,
.wp-block-post-content > .wp-block-columns,
.wp-block-post-content > .prp-scale,
.wp-block-post-content > .prp-access { position: relative; left: 50%; transform: translateX(-50%);
  width: 100vw; max-width: 100vw;
  margin-left: 0 !important; margin-right: 0 !important;
  padding-inline: max(1.5rem, calc(50vw - 620px)); }

@media (max-width: 860px) {
  .prp-split { gap: 1.6rem; }
  .prp-scale ul.wp-block-list { grid-template-columns: repeat(2, 1fr); }
  .prp-access ul.wp-block-list { grid-template-columns: repeat(2, 1fr); }
  .prp-access li:nth-child(2) { border-right: 0; }
  .prp-stat { border-left: 0; border-top: 1px solid rgba(255,255,255,.12);
              padding-left: 0; padding-top: 1.5rem; }
  .prp-fig { font-size: 2.8rem; }
}

/* The front page carries its H1 inside the hero, so the template title would
   duplicate it. Every other page still uses the template title as its H1. */
body.home .wp-block-post-title,
body.page-template-home .wp-block-post-title { display: none; }

/* Child pages: give the template title the same hero framing as the front page
   so the look is one system rather than two. */
body:not(.home) .wp-block-post-title {
  position: relative; left: 50%; transform: translateX(-50%);
  width: 100vw; max-width: 100vw;
  margin-left: 0 !important; margin-right: 0 !important;
  padding: 3.2rem max(1.5rem, calc(50vw - 620px)) 2.4rem;
  border-bottom: 1px solid rgba(255,255,255,.12); margin-bottom: 3rem;
}
body:not(.home) .wp-block-post-featured-image {
  position: relative; left: 50%; transform: translateX(-50%);
  width: 100vw; max-width: 100vw;
  /* The parent theme's border-box reset does not reach <figure>, so this
     element alone computed content-box: width:100vw PLUS 48px of padding
     measured 828px in a 780px viewport and gave every non-home page a
     24px horizontal scroll. The sibling .wp-block-post-title uses the
     same full-bleed idiom and was fine only because it inherits
     border-box. Set it here rather than adding a global reset, which
     would silently resize every other block that has been sized against
     the current behavior. */
  box-sizing: border-box;
  margin-left: 0 !important; margin-right: 0 !important;
  padding-inline: max(1.5rem, calc(50vw - 620px)); margin-bottom: 3rem;
}
body:not(.home) .wp-block-post-featured-image img {
  width: 100%; max-height: 340px; object-fit: cover;
}

/* The parent template emits the featured image before the title. The approved
   layout leads with the hook, so reorder the wrapper rather than fork the template. */
body:not(.home) .wp-block-group:has(> .wp-block-post-title) {
  display: flex; flex-direction: column;
}
body:not(.home) .wp-block-post-title          { order: 1; }
body:not(.home) .wp-block-post-featured-image { order: 2; }
body:not(.home) .entry-content,
body:not(.home) .wp-block-post-content        { order: 3; }

body:not(.home) .wp-block-post-title { border-bottom: 0; margin-bottom: 0;
  padding-bottom: 1.1rem; }
body:not(.home) .wp-block-post-featured-image { margin-top: 0; margin-bottom: 2.6rem; }
body:not(.home) .wp-block-post-content > .prp-eyebrow:first-child { margin-bottom: 2.2rem; }

/* Editorial treatment for the photography: the design's images are desaturated
   and slightly crushed so a full-color stock frame never fights the type. */
.wp-block-post-featured-image img,
.prp-hero-img img {
  filter: saturate(.68) contrast(1.08) brightness(.86);
}
body:not(.home) .wp-block-post-featured-image { position: relative; }
body:not(.home) .wp-block-post-featured-image::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, rgb(var(--bd-ink-rgb) / 0.10) 0%, rgb(var(--bd-ink-rgb) / 0.62) 100%);
}

/* ---- severity tiers (SideEffects artboard) --------------------------
   Expected = accent, Uncommon = ember, Call us if = alert. Color is a
   second channel on top of the wording, never the only one. */
.prp-tier { border: 1px solid rgba(255,255,255,.14); padding: 1.5rem 1.6rem;
  margin: 0 0 1.2rem; }
.prp-tier .prp-eyebrow { margin-bottom: .9rem; }
.prp-tier ul.wp-block-list li::before { background: currentColor; }

.prp-tier-expected { border-color: rgb(var(--bd-accent-rgb) / 0.42); background: rgb(var(--bd-accent-rgb) / 0.04); }
.prp-tier-expected .prp-eyebrow { color: var(--bd-accent, #e2661a); }
.prp-tier-expected .prp-eyebrow::before { background: var(--bd-accent, #e2661a); }
.prp-tier-expected ul.wp-block-list li::before { background: var(--bd-accent, #e2661a); }

.prp-tier-uncommon { border-color: rgb(var(--bd-accent-l-rgb) / 0.42); background: rgb(var(--bd-accent-l-rgb) / 0.04); }
.prp-tier-uncommon .prp-eyebrow { color: var(--bd-accent, #e2661a); }
.prp-tier-uncommon .prp-eyebrow::before { background: var(--bd-accent, #e2661a); }
.prp-tier-uncommon ul.wp-block-list li::before { background: var(--bd-accent, #e2661a); }

.prp-tier-alert { border-color: rgb(var(--bd-alert-rgb) / 0.55); background: rgb(var(--bd-alert-rgb) / 0.05); }
.prp-tier-alert .prp-eyebrow { color: var(--bd-alert, #ff1d25); }
.prp-tier-alert .prp-eyebrow::before { background: var(--bd-alert, #ff1d25); }
.prp-tier-alert ul.wp-block-list li::before { background: var(--bd-alert, #ff1d25); }
.prp-tier-alert p strong { color: #FFFFFF; }

/* ---- eyebrows are section markers, not captions --------------------
   They were 10px and butted against the paragraph above, so they read as
   small print instead of announcing a new section. Larger, and with real
   air plus a rule above. */
.wp-block-post-content > .prp-eyebrow,
.entry-content > .prp-eyebrow {
  font-weight: 700;
  margin-top: 4.5rem;
  padding-top: 1.8rem;
  border-top: 1px solid rgba(255,255,255,.12);
  margin-bottom: 1.1rem;
}
.wp-block-post-content > .prp-eyebrow::before,
.entry-content > .prp-eyebrow::before { width: 1.9em; flex-basis: 1.9em; height: 2px; }

/* an eyebrow immediately followed by its heading owns the rule; the
   heading must not draw a second one right underneath it */
.wp-block-post-content > .prp-eyebrow + h2,
.entry-content > .prp-eyebrow + h2 {
  border-top: 0; padding-top: 0; margin-top: .1rem;
}

/* the eyebrow that opens a page sits under the title, so no rule or gap */
.wp-block-post-content > .prp-eyebrow:first-child,
.entry-content > .prp-eyebrow:first-child {
  margin-top: 0; padding-top: 0; border-top: 0; margin-bottom: 2.4rem;
}

/* Nested eyebrows: reset the section chrome only. Size is NOT set here --
   it was, at .72rem, and with `.wp-block-column` in the selector it caught
   the hero eyebrow and pinned it small. Size belongs to .prp-eyebrow and
   to the card variants, nowhere else. */
.prp-tier .prp-eyebrow, .prp-flag .prp-eyebrow {
  margin-top: 0; padding-top: 0; border-top: 0;
}

/* headings need the same breathing room the artboards give them */
.wp-block-post-content h2, .entry-content h2 { margin-top: 4.5rem; padding-top: 1.8rem; }
.wp-block-post-content h2:first-child, .entry-content h2:first-child {
  margin-top: 0; padding-top: 0; border-top: 0; }
.wp-block-post-content h3, .entry-content h3 { margin-top: 2.6rem; padding-top: 1.4rem; }

/* Size and tracking for eyebrows live on .prp-eyebrow alone. They used to
   be set again here at (0,2,0) and again on the card variants, so raising
   the base size silently did nothing on inner pages -- the descendant rule
   won on specificity. Contextual variants below set size ONLY where the
   context genuinely differs (inside a card), never as a restatement. */
/* Card variants only. `.wp-block-column .prp-eyebrow` used to be in this
   list, which silently caught the HERO eyebrow -- the hero's text column
   is a plain wp-block-column -- and held it at .85rem while every other
   eyebrow on the page scaled. A layout wrapper is not a context; only the
   actual card components are. */


/* A promoted tier label is an <h3> carrying the eyebrow treatment: it keeps the
   tracked-caps look while giving the page a real heading outline, so color is
   never the only thing conveying structure. */
h3.prp-eyebrow {
  font-family: Montserrat, "Helvetica Neue", Arial, sans-serif;
  font-size: .85rem; letter-spacing: .15em; font-weight: 700;
  border-top: 0; padding-top: 0; margin: 0 0 .9rem;
  display: flex; align-items: center; gap: .7rem;
}
h3.prp-eyebrow::before { content: ""; width: 1.9em; flex: 0 0 1.9em; height: 2px;
  background: currentColor; }
.prp-tier-expected h3.prp-eyebrow { color: var(--bd-accent, #e2661a); }
.prp-tier-uncommon h3.prp-eyebrow { color: var(--bd-accent, #e2661a); }
.prp-tier-alert    h3.prp-eyebrow { color: var(--bd-alert, #ff1d25); }

/* An eyebrow that now sits directly above its own heading owns the spacing;
   the heading must not add a second rule or a second gap. */
.wp-block-post-content > .prp-eyebrow + h2,
.entry-content > .prp-eyebrow + h2,
.wp-block-column > .prp-eyebrow + h3 {
  border-top: 0; padding-top: 0; margin-top: .1rem;
}

/* ==== graphic vertical timeline ======================================
   Staged recovery lists render as a real timeline: a spine running down
   the left, a node per stage, and the interval promoted out of the
   sentence into a display label. The spine fades as it descends, because
   the far end of a recovery is the least certain part of it. */
ul.prp-timeline {
  list-style: none;
  padding-left: 2.5rem;
  margin: 2rem 0 2.6rem;
  position: relative;
}
ul.prp-timeline::before {
  content: "";
  position: absolute;
  left: 6px; top: .7rem; bottom: 1.1rem;
  width: 1px;
  background: linear-gradient(180deg,
    var(--bd-accent, #e2661a) 0%, rgb(var(--bd-accent-rgb) / 0.55) 45%, rgba(255,255,255,.14) 100%);
}
ul.prp-timeline > li {
  position: relative;
  padding-left: 0;
  margin-bottom: 1.9rem;
  color: rgb(var(--bd-paper-rgb) / 0.74);
  line-height: 1.62;
  max-width: 62ch;
}
ul.prp-timeline > li:last-child { margin-bottom: 0; }

/* the node sits on the spine, punched out of the page ground */
ul.prp-timeline > li::before {
  content: "";
  position: absolute;
  left: -2.5rem; top: .34em;
  width: 13px; height: 13px;
  border-radius: 50%;
  background: var(--bd-ink, #080807);
  border: 2px solid var(--bd-accent, #e2661a);
  box-shadow: 0 0 0 4px var(--bd-ink, #080807);
}
ul.prp-timeline > li:last-child::before {
  border-color: rgba(255,255,255,.30);
}

/* the interval becomes the stage label rather than a bold run-in */
ul.prp-timeline > li > strong:first-child {
  display: block;
  font-family: "Sorts Mill Goudy", "Goudy Old Style", Georgia, serif;
  font-weight: 400;
  font-size: 1.24rem;
  line-height: 1.2;
  color: #FFFFFF;
  letter-spacing: -.006em;
  margin-bottom: .3rem;
}
ul.prp-timeline > li:last-child > strong:first-child { color: rgb(var(--bd-paper-rgb) / 0.82); }

@media (max-width: 700px) {
  ul.prp-timeline { padding-left: 2rem; }
  ul.prp-timeline::before { left: 5px; }
  ul.prp-timeline > li::before { left: -2rem; width: 11px; height: 11px; }
  ul.prp-timeline > li > strong:first-child { font-size: 1.12rem; }
}

/* The footer part renders as <footer> once its area term is set, but match the
   div form too so styling never silently detaches from the markup again. */
footer.wp-block-template-part,
.wp-site-blocks > .wp-block-template-part:last-child {
  background: var(--bd-masthead, #0b0b0a); margin-top: 3.25rem;
  border-top: 1px solid rgba(255,255,255,.12);
  /* No vertical padding here. .prp-foot inside pads the content; when both
     did it the footer carried 216px of padding around 271px of content.
     One place owns this gap. */
  padding: 0;
}
/* Scoped to UNCLASSED paragraphs. As a bare `footer ... p` this sat at
   (0,2,2) and beat every .prp-foot-* class at (0,1,0), so the footer NAP,
   the column headings and the disclaimer all rendered at .86rem no matter
   what their own rule said -- that is the 13.76px whose source was
   previously "not identified" and answered with !important. */
footer.wp-block-template-part p:not([class]),
.wp-site-blocks > .wp-block-template-part:last-child p:not([class]) {
  font-size: .86rem; color: rgba(255,255,255,.46); max-width: 62ch; }
footer.wp-block-template-part a,
.wp-site-blocks > .wp-block-template-part:last-child a {
  color: rgba(255,255,255,.66); border-bottom: 0; }
footer.wp-block-template-part a:hover,
.wp-site-blocks > .wp-block-template-part:last-child a:hover { color: var(--bd-accent, #e2661a); }

/* ==== PRP STL brand ==================================================
   charcoal #2d2b2b · orange #e2661a · ground #f3f2f2 · Archivo wordmark.
   The editorial ground stays near-black; brand charcoal becomes the
   raised surface, so panels read as a step up rather than a color clash. */
:root {
  --prp-orange:   var(--bd-accent, #e2661a);
  --prp-orange-d: var(--bd-accent-d, #b04a0c);
  --prp-charcoal: var(--bd-charcoal, #2d2b2b);
  --prp-ground:   var(--bd-ground, #f3f2f2);
  --prp-ink:      var(--bd-ink-soft, #201e1d);
}

/* raised surfaces take the brand charcoal */
.prp-flag, .prp-tier, .prp-stat { background: rgb(var(--bd-charcoal-rgb) / 0.55); }
.prp-scale li { background: rgb(var(--bd-charcoal-rgb) / 0.45); }
header.wp-block-template-part { background: var(--prp-ink); }
footer.wp-block-template-part,
.wp-site-blocks > .wp-block-template-part:last-child { background: var(--prp-ink); }

/* the severity scale keeps three distinguishable steps now that the
   accent itself is orange: brand orange, deepened orange, alert red */
.prp-tier-expected { border-color: rgb(var(--bd-accent-rgb) / 0.45); background: rgb(var(--bd-accent-rgb) / 0.05); }
.prp-tier-expected h3.prp-eyebrow { color: var(--prp-orange); }
.prp-tier-uncommon { border-color: rgb(var(--bd-accent-d-rgb) / 0.55);  background: rgb(var(--bd-accent-d-rgb) / 0.06); }
.prp-tier-uncommon h3.prp-eyebrow { color: var(--bd-accent-l, #d8863f); }
.prp-tier-alert    { border-color: rgb(var(--bd-alert-rgb) / 0.55);  background: rgb(var(--bd-alert-rgb) / 0.05); }
.prp-tier-alert    h3.prp-eyebrow { color: var(--bd-alert, #ff1d25); }

/* ---- the masthead lockup ------------------------------------------- */
.prp-lockup { display: inline-flex; align-items: center; gap: .7rem; text-decoration: none;
  border-bottom: 0; }
.prp-lockup svg { width: 30px; height: 30px; flex: 0 0 30px; display: block; }
/* Some brand marks ship as a file rather than as inline geometry -- Headache
   Clinic Near Me's is a drawn mark, not four rectangles. Height-locked with
   width:auto so a portrait mark is not squashed into the square slot the
   spine marks use. */
.prp-lockup img.prp-mark-img { height: 34px; width: auto; flex: 0 0 auto; display: block; }
img.prp-foot-mark { width: auto; height: 2.4em; }
.prp-wordmark { font-family: Archivo, "Helvetica Neue", Arial, sans-serif; font-weight: 400;
  font-size: 1.32rem; letter-spacing: .06em; line-height: 1; }
.prp-wordmark .p { color: var(--prp-orange); }
.prp-wordmark .s { color: var(--prp-ground); }
.prp-lockup:hover .prp-wordmark .s { color: #FFFFFF; }

/* Stacked wordmark variant. Listed for BOTH the header (.prp-wordmark) and the
   footer (.prp-foot-word) wordmarks -- separate components with separate base
   classes, and styling only the header one silently leaves the footer lockup
   running the two words together as "NECK PAINSTL".
   PRP STL sets its two words inline (PRP + STL);
   Neck/Back Pain STL stack them -- name on top, "STL" beneath in wide
   tracking -- and invert the color roles: the name is light and "STL"
   carries the accent, the reverse of PRP's. Opt-in by class so both
   treatments live in one shared stylesheet.

   Selectors are doubled (.prp-wordmark.prp-wordmark--stack) to reach (0,3,0)
   and clear the base .prp-wordmark .p rules above regardless of source order.
   This stylesheet has lost five separate specificity fights already; being
   explicit here costs nothing. */
.prp-wordmark.prp-wordmark--stack,
.prp-foot-word.prp-wordmark--stack {
  display: inline-flex; flex-direction: column; align-items: flex-start;
  line-height: 1; letter-spacing: normal;
}
.prp-wordmark.prp-wordmark--stack .p,
.prp-foot-word.prp-wordmark--stack .p {
  font-weight: 700; font-size: 1.24rem; letter-spacing: -.025em;
  color: var(--bd-ground, #f3f2f2);
}
.prp-wordmark.prp-wordmark--stack .s,
.prp-foot-word.prp-wordmark--stack .s {
  font-weight: 500; font-size: .64rem; letter-spacing: .42em;
  white-space: nowrap;
  color: var(--bd-accent, #e2661a); margin-top: .3em;
  /* .42em of tracking is added AFTER the last glyph too, so the block would
     sit optically right of the name it is meant to align under. */
  margin-right: -.42em;
}
.prp-lockup:hover .prp-wordmark.prp-wordmark--stack .p,
.prp-foot-home:hover .prp-foot-word.prp-wordmark--stack .p { color: #FFFFFF; }

/* ---- E-E-A-T: reviewer byline and sources -------------------------- */
/* Byline is credential chrome, not copy. At .88rem it sat above the
   theme's own `small` token (.84rem) and at 85% of body, so it read as a
   paragraph and competed with the headline it sits above. The artboard
   has no byline in the hero at all -- it runs eyebrow, H1, lead -- so the
   job here is to keep the E-E-A-T attribution while getting it out of the
   headline's way. */
.prp-byline { border-left: 2px solid var(--prp-orange);
  padding: .55rem 0 .55rem 1rem; margin: 0 0 1.6rem; }
.prp-byline p { font-size: .78rem; line-height: 1.5; color: rgb(var(--bd-paper-rgb) / 0.52);
  margin: 0; max-width: 62ch; }
.prp-byline strong { color: rgb(var(--bd-paper-rgb) / 0.78); font-weight: 600; }
.prp-byline a { border-bottom: 0; }
.prp-reviewed { display: inline-block; margin-top: .25rem; font-size: .7rem;
  letter-spacing: .05em; color: rgba(255,255,255,.34); }

/* In the hero the byline is compressed further still: the headline is the
   reason the page exists and should not be pushed down the fold by a
   reviewer credit. */

.prp-sources { border-top: 1px solid rgba(255,255,255,.12); margin-top: 4rem; padding-top: 1.6rem; }
.prp-sources h2 { border-top: 0; padding-top: 0; margin-top: 0; font-size: 1.4rem; }
.prp-sources ul.wp-block-list li { font-size: .84rem; line-height: 1.5;
  color: rgb(var(--bd-paper-rgb) / 0.6); margin-bottom: .7rem; }
.prp-sources ul.wp-block-list li::before { background: rgba(255,255,255,.3); top: .55em;
  width: 5px; height: 5px; }
.prp-sources em { color: rgb(var(--bd-paper-rgb) / 0.8); font-style: normal; }
.prp-sources a { font-size: inherit; }

/* ---- footer: four columns, legal given its own band ----------------- */
.prp-foot { padding: 4rem 0 3rem; }
.prp-foot-cols { gap: 2.5rem; margin-bottom: 2.5rem; }
.prp-foot-brand { font-family: Archivo, sans-serif; font-size: 1.24rem; letter-spacing: .06em;
  margin: 0 0 1rem; }
.prp-foot-brand .p { color: var(--prp-orange); }
.prp-foot-brand .s { color: var(--prp-ground); }
.prp-foot-nap { font-size: 1.05rem; line-height: 1.62; color: rgba(255,255,255,.62);
  margin: 0 0 1rem; max-width: 34ch; }
.prp-foot-nap strong { color: rgba(255,255,255,.8); }
.prp-foot-nap a { border-bottom: 0; color: var(--prp-orange); }
.prp-foot-h { font-size: .7rem; letter-spacing: .18em; text-transform: none;
  color: rgba(255,255,255,.42); font-weight: 700; margin: 0 0 .9rem; }
ul.prp-foot-list { list-style: none; padding: 0; margin: 0; }
ul.prp-foot-list li { padding-left: 0; margin-bottom: .55rem; }
ul.prp-foot-list li::before { display: none; }
ul.prp-foot-list a { font-size: inherit; color: rgba(255,255,255,.66); border-bottom: 0; }
ul.prp-foot-list a:hover { color: var(--prp-orange); }
hr.prp-foot-rule { border: 0; border-top: 1px solid rgba(255,255,255,.14); margin: 0 0 1.8rem; }
.prp-foot-legal { }
.prp-foot-links { font-size: .84rem; margin: 0 0 1.2rem; display: flex; flex-wrap: wrap;
  gap: 0 1.4rem; align-items: baseline; }
.prp-foot-links strong { font-size: .7rem; letter-spacing: .18em; color: rgba(255,255,255,.42); }
.prp-foot-links a { color: rgba(255,255,255,.72); border-bottom: 1px solid rgba(255,255,255,.16); }
.prp-foot-links a:hover { color: var(--prp-orange); border-bottom-color: var(--prp-orange); }
.prp-foot-small { font-size: .78rem; line-height: 1.6; color: rgba(255,255,255,.4);
  max-width: 90ch; margin: 0 0 .7rem; }
.prp-foot-small strong { color: rgba(255,255,255,.66); }
@media (max-width: 780px) {
  .prp-foot-cols { gap: 1.8rem; }
  .prp-foot-links { gap: .4rem 1rem; }
}

/* ---- hero image: fill the column, as the approved artboard specifies ---
   The artboard defines the image column as `min-height: 520px; overflow:
   hidden` with the image absolutely filling it under object-fit: cover.
   Earlier attempts here used aspect-ratio instead, which is a different
   thing: it sizes the image to a shape rather than to the column, so a
   3:2 source rendered as a short inset with dead space beneath it and
   stopped reading as a hero at all.
   Filling the column crops, unavoidably -- but far less than the 4:5
   frame did. In a ~600px column at 520px tall a 1800x1200 source keeps
   about 77% of its width, against 53% under the old portrait crop. The
   gradient is the artboard's, and it is what lets the eyebrow and byline
   sit legibly over the image edge on narrow screens. */
.prp-split > .wp-block-column:has(> .prp-hero-img) {
  display: flex; flex-direction: column; justify-content: stretch;
}
.prp-hero-img {
  position: relative;
  min-height: 520px;
  overflow: hidden;
  flex: 1 1 auto;
}
.prp-hero-img img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}
.prp-hero-img::after {
  content: "";
  position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(90deg, rgb(var(--bd-ink-rgb) / 0.55) 0%, rgb(var(--bd-ink-rgb) / 0.06) 42%, rgb(var(--bd-ink-rgb) / 0.38) 100%);
}
@media (max-width: 860px) {
  /* stacked: a shorter band reads better above the fold than a tall one */
  .prp-hero-img { min-height: 300px; margin-top: 2rem; }
  .prp-hero-img::after {
    background: linear-gradient(180deg, rgb(var(--bd-ink-rgb) / 0.10) 0%, rgb(var(--bd-ink-rgb) / 0.45) 100%);
  }
}

/* ---------------------------------------------------------------
   Data tables. Used where a claim is better shown as an itemised
   ledger than asserted as a single aggregate figure -- the
   arthroplasty outcome table on /prp-vs-surgery/ is the case this
   was written for. Figures are set in tabular numerals so the
   percentage column reads down as a column. The wrapper scrolls
   rather than letting the page body scroll sideways.
   --------------------------------------------------------------- */
.wp-block-table.prp-table { margin: 2.4rem 0; overflow-x: auto; }
.prp-table table {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--wp--preset--font-family--montserrat), system-ui, sans-serif;
  font-size: 0.94rem;
  line-height: 1.45;
}
.prp-table thead th {
  text-align: left;
  padding: 0.75rem 1rem;
  background: var(--wp--preset--color--charcoal, var(--bd-charcoal, #2d2b2b));
  color: #fff;
  font-weight: 600;
  font-size: 0.8rem;
  letter-spacing: 0.06em;
  text-transform: none;   /* author text is never transformed */
  border: 0;
}
.prp-table tbody td {
  padding: 0.7rem 1rem;
  border-bottom: 1px solid rgb(var(--bd-charcoal-rgb) / 0.14);
  vertical-align: top;
}
/* The zebra stripe was the `ground` token (#f3f2f2) -- a LIGHT surface --
   under paper-colored text, i.e. near-white on near-white at about 1.0:1.
   Every other row of this table was blank. On a dark ground the stripe has
   to be a light tint of the ground, not a light surface. */
.prp-table tbody tr:nth-child(odd) td { background: rgba(255, 255, 255, 0.045); }
.prp-table tbody td:first-child { width: 46%; }
.prp-table tbody td:not(:first-child) {
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  color: var(--wp--preset--color--ember, var(--bd-accent-d, #b04a0c));
  white-space: nowrap;
}
/* Captions were charcoal (#2d2b2b) on the ink ground (#080807) -- 1.42:1,
   below anything readable. They were written as if the page were light.
   Paper at 78% measures 10.6:1, which keeps them clearly secondary to body
   copy without making the reader work for them. */
.prp-table figcaption {
  margin-top: 0.7rem;
  font-size: 0.82rem;
  line-height: 1.5;
  color: rgb(var(--bd-paper-rgb) / 0.74);
}
@media (max-width: 600px) {
  .prp-table table { font-size: 0.87rem; }
  .prp-table thead th, .prp-table tbody td { padding: 0.55rem 0.7rem; }
}

/* ---- close the void above the hero ----------------------------------
   The hero is the first block on the page and carries its own top
   padding. The theme stacks two more spacers above it -- a 72px top
   margin on <main> and 72px of padding on the full-width content
   wrapper -- so 195px of dark ground sat between the masthead and the
   eyebrow before anything was read. Collapse the theme's two where the
   hero leads the page; the hero's own padding is the intended gap.
   Scoped by :has() so inner pages, which open with a featured image,
   keep the theme spacing they were designed with.
   The two spacers are INLINE style attributes emitted by the block
   template (margin-top / padding-top: var(--wp--preset--spacing--60)),
   so no stylesheet selector can outrank them -- !important is required
   rather than lazy. The template is shared with inner pages, which do
   want that spacing, so this is scoped to the hero rather than fixed in
   the template itself. */
main:has(> .wp-block-group > .entry-content > .prp-hero:first-child) {
  margin-top: 0 !important;
}
main > .wp-block-group:has(> .entry-content > .prp-hero:first-child) {
  padding-top: 0 !important;
}

/* ---- inline editorial figures ---------------------------------------
   Photography placed inside an article, as distinct from the hero.
   Same desaturated treatment so a full-color stock frame never fights
   the type, same 3:2 as the source files so nothing is cropped, and a
   caption that carries a claim rather than describing the picture. */
.wp-block-image.prp-figure { margin: 2.8rem 0 2.4rem; }
.prp-figure img {
  width: 100%;
  aspect-ratio: 3 / 2;
  object-fit: cover;
  display: block;
  filter: saturate(.68) contrast(1.08) brightness(.86);
}
.prp-figure figcaption {
  margin-top: 0.8rem;
  font-family: var(--wp--preset--font-family--montserrat), system-ui, sans-serif;
  font-size: 0.86rem;
  line-height: 1.55;
  color: rgb(var(--bd-paper-rgb) / 0.78);
  border-left: 3px solid var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  padding-left: 0.9rem;
}

/* ---- clinical plates -------------------------------------------------
   First-party fluoroscopy and ultrasound captures, as distinct from the
   editorial photography above. Two deliberate differences: they are NOT
   put through the desaturation filter, because they are already
   greyscale and crushing them costs diagnostic legibility for no
   stylistic gain; and they keep their own aspect ratio rather than
   being forced to 3:2, because a fluoro field is round and cropping it
   to a letterbox cuts the anatomy. Held to a readable column width so a
   tall plate cannot dominate the article. */
.wp-block-image.prp-plate { margin: 2.6rem 0 2.2rem; }
.prp-plate img {
  display: block;
  width: 100%;
  max-width: 30rem;
  height: auto;
  filter: none;
  background: #000;
}
.prp-plate figcaption {
  max-width: 30rem;
  margin-top: 0.8rem;
  font-family: var(--wp--preset--font-family--montserrat), system-ui, sans-serif;
  font-size: 0.86rem;
  line-height: 1.55;
  color: rgb(var(--bd-paper-rgb) / 0.78);
  border-left: 3px solid var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  padding-left: 0.9rem;
}

/* ---- action buttons: call / text / connect ---------------------------
   Required on every page. Three deliberate choices: the call button is
   the accent because a phone call is the action this practice actually
   wants; text is the same weight but outlined, because it is a real
   alternative rather than a lesser one; connect is quiet. They wrap and
   go full width on a phone, where they matter most -- a tel: or sms:
   link on a handset is one tap, and the text number used to be plain
   text that could not be tapped at all. */

.prp-actions .wp-block-button__link {
  font-family: var(--wp--preset--font-family--montserrat), system-ui, sans-serif;
  font-size: 0.92rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  line-height: 1.2;
  padding: 0.85rem 1.35rem;
  border-radius: 2px;
  border: 2px solid var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  text-decoration: none;
  transition: background-color .15s ease, color .15s ease;
}
.prp-actions .prp-btn-book .wp-block-button__link {
  background: var(--wp--preset--color--accent, var(--bd-accent, #e2661a)); color: #fff;
}
.prp-actions .prp-btn-book .wp-block-button__link:hover,
.prp-actions .prp-btn-book .wp-block-button__link:focus-visible {
  background: var(--wp--preset--color--ember, var(--bd-accent-d, #b04a0c));
  border-color: var(--wp--preset--color--ember, var(--bd-accent-d, #b04a0c));
}
/* Call stays prominent -- ember fill rather than an outline -- because booking being the
   primary action must not read as "do not phone us". Two fills, ranked by hue. */
.prp-actions .prp-btn-call .wp-block-button__link {
  background: var(--wp--preset--color--ember, var(--bd-accent-d, #b04a0c)); color: #fff;
  border-color: var(--wp--preset--color--ember, var(--bd-accent-d, #b04a0c));
}
.prp-actions .prp-btn-call .wp-block-button__link:hover,
.prp-actions .prp-btn-call .wp-block-button__link:focus-visible {
  background: var(--wp--preset--color--ink, var(--bd-ink, #080807));
  border-color: var(--wp--preset--color--ink, var(--bd-ink, #080807));
}
.prp-actions .prp-btn-text .wp-block-button__link,
.prp-actions .prp-btn-connect .wp-block-button__link {
  background: transparent; color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
}
.prp-actions .prp-btn-connect .wp-block-button__link {
  border-color: rgb(var(--bd-accent-rgb) / 0.45);
}
.prp-actions .prp-btn-text .wp-block-button__link:hover,
.prp-actions .prp-btn-text .wp-block-button__link:focus-visible,
.prp-actions .prp-btn-connect .wp-block-button__link:hover,
.prp-actions .prp-btn-connect .wp-block-button__link:focus-visible {
  background: var(--wp--preset--color--accent, var(--bd-accent, #e2661a)); color: #fff;
  border-color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
}
/* inside the dark CTA panel the outlined buttons need a light edge */
.prp-cta .prp-actions .prp-btn-text .wp-block-button__link,
.prp-cta .prp-actions .prp-btn-connect .wp-block-button__link { color: var(--bd-paper, #f2efea); }
.prp-fineprint { font-size: .86em; color: rgb(var(--bd-paper-rgb) / 0.62); }


/* ---- header booking button ------------------------------------------
   The site navigation is overlayMenu:"always", so it is a hamburger at
   every breakpoint -- a booking link placed inside the menu would be one
   tap hidden on every device. This button therefore sits in the header
   itself, beside the hamburger, visible at all widths. It is smaller and
   tighter than the in-page action buttons so it reads as chrome rather
   than competing with the page's own call to action. */
.prp-header-actions { gap: 0.9rem; }
.wp-block-buttons.prp-header-book { margin: 0; }
.prp-header-book .wp-block-button__link {
  display: inline-block;
  font-family: var(--wp--preset--font-family--montserrat), system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  line-height: 1;
  padding: 0.6rem 1rem;
  border-radius: 2px;
  border: 1px solid var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  background: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  color: #fff;
  text-decoration: none;
  transition: background-color .15s ease, border-color .15s ease;
}
.prp-header-book .wp-block-button__link:hover,
.prp-header-book .wp-block-button__link:focus-visible {
  background: var(--wp--preset--color--ember, var(--bd-accent-d, #b04a0c));
  border-color: var(--wp--preset--color--ember, var(--bd-accent-d, #b04a0c));
}
/* inside the opened overlay, the same link reads as an accented menu item */
.prp-nav .prp-nav-book a { color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a)) !important; }
/* Gutenberg's buttons block wraps by default. With three buttons in the
   header that produced a second row on a handset and a 73px-tall masthead,
   so the row is pinned to one line and the buttons are allowed to shrink. */
.wp-block-buttons.prp-header-book { flex-wrap: nowrap; }
.prp-header-actions { flex-wrap: nowrap; }

@media (max-width: 480px) {
  .prp-header-book .wp-block-button__link { padding: 0.5rem 0.55rem; }
  .prp-header-book .wp-block-button__link::before { width: 1.05em; height: 1.05em; }
  .prp-header-actions { gap: 0.55rem; }
  .wp-block-buttons.prp-header-book { gap: 0.3rem; }
  .prp-header-inner .wp-block-site-title { font-size: 1.15rem; }
}


/* ---- center the content column ---------------------------------------
   .entry-content carries max-width from theme.json contentSize but the
   alignfull negative margins leave it with no auto margins, so it pins
   to the left edge and every wide screen shows a column of dead space
   down the right. This also broke full-bleed math: a 50%-based offset
   measured from a container that is not centerd lands off-screen. */
main .wp-block-post-content.entry-content {
  margin-left: auto !important;
  margin-right: auto !important;
}

/* ---- hero: full-bleed, as the artboard draws it -----------------------
   The artboard's hero spans the whole 1240px canvas: a ~1.06fr text
   column beside a ~1fr image column. Ours was inside the theme's
   constrained content width, which squeezed the row to 760px and the
   image column to a 313px strip -- and filling a strip that narrow
   cropped the photograph to 28% of its width. Full-bleed restores the
   artboard proportions, and at ~600px wide the same image keeps about
   77%. The padding replaces the container gutter the group no longer
   inherits. */
.prp-hero.alignfull {
  /* calc(50% - 50vw) is the usual full-bleed trick, but its 50% resolves
     against the PARENT's content box -- and this parent is itself offset,
     so it landed 216px off the left edge. left/translateX is independent
     of whatever the parent is doing, which is the point. */
  position: relative;
  left: 50%;
  transform: translateX(-50%);
  width: 100vw;
  max-width: 100vw;
  margin-left: 0 !important;
  margin-right: 0 !important;
  padding-left: 0;
  padding-right: 0;
}
.prp-hero.alignfull > .prp-split {
  max-width: none;
  margin: 0;
  gap: 0;
  align-items: stretch;
}
.prp-hero.alignfull > .prp-split > .wp-block-column:first-child {
  padding: 0 3.2rem 0 max(2rem, calc((100vw - 1240px) / 2 + 3.2rem));
  display: flex; flex-direction: column; justify-content: center; gap: 1.4rem;
}
@media (max-width: 860px) {
  .prp-hero.alignfull > .prp-split { flex-direction: column; }
  .prp-hero.alignfull > .prp-split > .wp-block-column:first-child {
    padding: 0 1.5rem;
  }
}

/* ---- header action icons ---------------------------------------------
   One icon = one action = one label, per the house icon rule: calendar
   for Book, handset for Call, speech bubble for Text. Drawn as CSS masks
   from inline data URIs rather than <svg> inside the button block --
   Gutenberg validates button inner markup, and a mask inherits the
   button's own color, so the icon follows every hover and focus state
   without a second rule. */
.prp-header-book .wp-block-button__link { display: inline-flex; align-items: center; gap: 0.42rem; }
.prp-header-book .wp-block-button__link::before {
  content: "";
  width: 1em; height: 1em;
  flex: 0 0 auto;
  background-color: currentColor;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center;  mask-position: center;
  -webkit-mask-size: contain;     mask-size: contain;
}
.prp-header-book .hdr-book .wp-block-button__link::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%224.5%22%20width%3D%2218%22%20height%3D%2216%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%209.5h18M8%202.5v4M16%202.5v4%22%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%224.5%22%20width%3D%2218%22%20height%3D%2216%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%209.5h18M8%202.5v4M16%202.5v4%22%2F%3E%3C%2Fsvg%3E"); }
.prp-header-book .hdr-call .wp-block-button__link::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21.5%2016.9v2.6a1.8%201.8%200%200%201-2%201.8%2017.6%2017.6%200%200%201-7.7-2.7%2017.3%2017.3%200%200%201-5.3-5.3A17.6%2017.6%200%200%201%203.8%205.5a1.8%201.8%200%200%201%201.8-2h2.6a1.8%201.8%200%200%201%201.8%201.6c.1.9.3%201.8.6%202.6a1.8%201.8%200%200%201-.4%201.9l-1.1%201.1a14%2014%200%200%200%205.3%205.3l1.1-1.1a1.8%201.8%200%200%201%201.9-.4c.8.3%201.7.5%202.6.6a1.8%201.8%200%200%201%201.5%201.8z%22%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21.5%2016.9v2.6a1.8%201.8%200%200%201-2%201.8%2017.6%2017.6%200%200%201-7.7-2.7%2017.3%2017.3%200%200%201-5.3-5.3A17.6%2017.6%200%200%201%203.8%205.5a1.8%201.8%200%200%201%201.8-2h2.6a1.8%201.8%200%200%201%201.8%201.6c.1.9.3%201.8.6%202.6a1.8%201.8%200%200%201-.4%201.9l-1.1%201.1a14%2014%200%200%200%205.3%205.3l1.1-1.1a1.8%201.8%200%200%201%201.9-.4c.8.3%201.7.5%202.6.6a1.8%201.8%200%200%201%201.5%201.8z%22%2F%3E%3C%2Fsvg%3E"); }
.prp-header-book .hdr-text .wp-block-button__link::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21%2011.5a8.4%208.4%200%200%201-9%208.4%208.9%208.9%200%200%201-3.8-.9L3%2020.5l1.5-4.2A8.9%208.9%200%200%201%203.6%2012a8.4%208.4%200%200%201%208.4-9%208.4%208.4%200%200%201%209%208.5z%22%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21%2011.5a8.4%208.4%200%200%201-9%208.4%208.9%208.9%200%200%201-3.8-.9L3%2020.5l1.5-4.2A8.9%208.9%200%200%201%203.6%2012a8.4%208.4%200%200%201%208.4-9%208.4%208.4%200%200%201%209%208.5z%22%2F%3E%3C%2Fsvg%3E"); }
.prp-header-book .hdr-contact .wp-block-button__link::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%222.5%22%20y%3D%224.5%22%20width%3D%2219%22%20height%3D%2215%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%206l9%206.5L21%206%22%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%222.5%22%20y%3D%224.5%22%20width%3D%2219%22%20height%3D%2215%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%206l9%206.5L21%206%22%2F%3E%3C%2Fsvg%3E"); }

/* Book, where a site carries it, stays the filled primary; Call, Text and
   Contact sit beside it as outlines
   so the trio reads as one control group rather than three competing
   claims on the eye. */
.prp-header-book .hdr-call .wp-block-button__link,
.prp-header-book .hdr-text .wp-block-button__link,
.prp-header-book .hdr-contact .wp-block-button__link {
  background: transparent;
  color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  border-color: rgb(var(--bd-accent-rgb) / 0.55);
}
.prp-header-book .hdr-call .wp-block-button__link:hover,
.prp-header-book .hdr-call .wp-block-button__link:focus-visible,
.prp-header-book .hdr-text .wp-block-button__link:hover,
.prp-header-book .hdr-text .wp-block-button__link:focus-visible,
.prp-header-book .hdr-contact .wp-block-button__link:hover,
.prp-header-book .hdr-contact .wp-block-button__link:focus-visible {
  background: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  border-color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  color: #fff;
}
.wp-block-buttons.prp-header-book { gap: 0.45rem; }

@media (max-width: 720px) {
  /* wordmark + three labeled buttons + the menu will not fit. Drop to
     icons only, but CLIP the label rather than removing it, so it is
     still announced -- an icon-only control with no accessible name is a
     button that says nothing to a screen reader. */
  .prp-header-book .hdr-label {
    position: absolute; width: 1px; height: 1px;
    padding: 0; margin: -1px; overflow: hidden;
    clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
  }
  .prp-header-book .wp-block-button__link { padding: 0.55rem 0.7rem; gap: 0; }
  .prp-header-book .wp-block-button__link::before { width: 1.15em; height: 1.15em; }
}

/* ---- standard hover state for boxed items -----------------------------
   One treatment for every bordered box on the site so a rollover means
   the same thing everywhere: border comes up to accent, a faint accent
   wash appears behind it, 160ms. Rules:
   - Wrapped in @media (hover: hover) so a touch device does not get a
     hover state stuck on after a tap.
   - No cursor:pointer on boxes that are not links. The severity scale is
     a set of labels, not controls, and a pointer cursor there would
     promise a click that does nothing.
   - :focus-within mirrors the hover wherever a box does contain a link,
     so keyboard users get the same feedback as mouse users. */
.prp-scale li,
.prp-access li,
.prp-steps li,
.prp-timeline li,
.prp-table tbody tr {
  transition: background-color .16s ease, border-color .16s ease, color .16s ease;
}

@media (hover: hover) {
  .prp-scale li:hover {
    border-color: rgb(var(--bd-accent-rgb) / 0.8);
    background: rgb(var(--bd-accent-rgb) / 0.12);
    color: var(--wp--preset--color--paper, var(--bd-paper, #f2efea));
  }
  .prp-access li:hover,
  .prp-steps li:hover,
  .prp-timeline li:hover {
    background: rgb(var(--bd-accent-rgb) / 0.09);
  }
  .prp-table tbody tr:hover td {
    background: rgb(var(--bd-accent-rgb) / 0.10);
  }
  .prp-table tbody tr:hover td:not(:first-child) {
    color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  }
}

/* keyboard parity for the boxes that hold links */
.prp-access li:focus-within,
.prp-steps li:focus-within,
.prp-timeline li:focus-within {
  background: rgb(var(--bd-accent-rgb) / 0.09);
}
.prp-access li:focus-within { outline: 2px solid var(--wp--preset--color--accent, var(--bd-accent, #e2661a)); outline-offset: 2px; }

/* ---- vertical rhythm: stop the theme spacers stacking ------------------
   Measured on an inner page at 1440: 144px of empty ground above the
   title (main's 72px margin plus the content wrapper's 72px padding),
   152px between the last block and the footer (that wrapper's 72px
   bottom padding plus the footer's 80px top margin), and 216px of
   padding around 271px of footer content, because the footer element
   and .prp-foot inside it were each padding independently.
   The template emits the main/wrapper values as inline styles, so
   !important is required to reach them. Each gap is now set in one
   place instead of two. */
main { margin-top: 0 !important; }
main > .wp-block-group { padding-top: 0 !important; padding-bottom: 0 !important; }

/* the page's own opening gap, set once on the title band */
body:not(.home) .wp-block-post-title { padding-top: 2.6rem; padding-bottom: 1rem; }

/* one gap before the footer, not two */
/* The horizontal gutter was lost when the footer's double vertical padding
   was removed -- `padding: 0` on the wrapper killed left/right as well as
   top/bottom, and the footer went flush to the viewport edge while body
   copy kept its gutter. Vertical spacing stays owned here; the inline
   padding matches the other full-width blocks so the footer lines up with
   the hero and the severity scale rather than with nothing. */
.prp-foot {
  padding: 2.6rem max(1.5rem, calc(50vw - 620px)) 2.2rem;
  max-width: 1240px;
  margin-inline: auto;
}
.prp-foot-cols { margin-bottom: 1.8rem; }

/* ---- footer lockup ----------------------------------------------------
   The full horizontal lockup, mark plus wordmark, matching the header.
   Built as inline SVG for the mark and live text for the wordmark rather
   than using lockup-horizontal-reverse.svg as an <img>: those masters set
   the wordmark in <text font-family="Archivo">, and an SVG loaded via
   <img> cannot pull a webfont, so it would silently fall back to a
   generic sans. Same reason the header lockup is built this way. */
.prp-foot-lockup { display: flex; align-items: center; gap: .7rem; }
.prp-foot-mark { width: 2.05em; height: 2.05em; flex: 0 0 auto; display: block; }
.prp-foot-word { font-family: Archivo, "Helvetica Neue", Arial, sans-serif;
  letter-spacing: .06em; line-height: 1; }

/* ---- in-page action buttons: 2 x 2, equal, iconed ---------------------
   Four buttons sized to their own text wrapped 3-then-1 and read as four
   different weights of thing. A two-column grid makes every button the
   same width and height regardless of label length, so the group reads as
   one control set. Same icon vocabulary as the header -- calendar, handset,
   speech bubble -- plus an envelope for Connect, which goes to the contact
   form rather than opening a messaging app. */
.wp-block-buttons.prp-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: .7rem;
  max-width: 34rem;
  margin: 1.6rem 0 1.4rem;
  align-items: stretch;
}
.prp-actions .wp-block-button { width: 100%; display: flex; }
.prp-actions .wp-block-button__link {
  display: inline-flex; align-items: center; justify-content: center; gap: .55em;
  width: 100%; text-align: center; line-height: 1.25;
  font-size: 1rem;
}
.prp-actions .wp-block-button__link::before {
  content: "";
  width: 1.05em; height: 1.05em;
  flex: 0 0 auto;
  background-color: currentColor;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center;  mask-position: center;
  -webkit-mask-size: contain;     mask-size: contain;
}
.prp-actions .prp-btn-book .wp-block-button__link::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%224.5%22%20width%3D%2218%22%20height%3D%2216%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%209.5h18M8%202.5v4M16%202.5v4%22%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%224.5%22%20width%3D%2218%22%20height%3D%2216%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%209.5h18M8%202.5v4M16%202.5v4%22%2F%3E%3C%2Fsvg%3E"); }
.prp-actions .prp-btn-call .wp-block-button__link::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21.5%2016.9v2.6a1.8%201.8%200%200%201-2%201.8%2017.6%2017.6%200%200%201-7.7-2.7%2017.3%2017.3%200%200%201-5.3-5.3A17.6%2017.6%200%200%201%203.8%205.5a1.8%201.8%200%200%201%201.8-2h2.6a1.8%201.8%200%200%201%201.8%201.6c.1.9.3%201.8.6%202.6a1.8%201.8%200%200%201-.4%201.9l-1.1%201.1a14%2014%200%200%200%205.3%205.3l1.1-1.1a1.8%201.8%200%200%201%201.9-.4c.8.3%201.7.5%202.6.6a1.8%201.8%200%200%201%201.5%201.8z%22%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21.5%2016.9v2.6a1.8%201.8%200%200%201-2%201.8%2017.6%2017.6%200%200%201-7.7-2.7%2017.3%2017.3%200%200%201-5.3-5.3A17.6%2017.6%200%200%201%203.8%205.5a1.8%201.8%200%200%201%201.8-2h2.6a1.8%201.8%200%200%201%201.8%201.6c.1.9.3%201.8.6%202.6a1.8%201.8%200%200%201-.4%201.9l-1.1%201.1a14%2014%200%200%200%205.3%205.3l1.1-1.1a1.8%201.8%200%200%201%201.9-.4c.8.3%201.7.5%202.6.6a1.8%201.8%200%200%201%201.5%201.8z%22%2F%3E%3C%2Fsvg%3E"); }
.prp-actions .prp-btn-text .wp-block-button__link::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21%2011.5a8.4%208.4%200%200%201-9%208.4%208.9%208.9%200%200%201-3.8-.9L3%2020.5l1.5-4.2A8.9%208.9%200%200%201%203.6%2012a8.4%208.4%200%200%201%208.4-9%208.4%208.4%200%200%201%209%208.5z%22%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21%2011.5a8.4%208.4%200%200%201-9%208.4%208.9%208.9%200%200%201-3.8-.9L3%2020.5l1.5-4.2A8.9%208.9%200%200%201%203.6%2012a8.4%208.4%200%200%201%208.4-9%208.4%208.4%200%200%201%209%208.5z%22%2F%3E%3C%2Fsvg%3E"); }
.prp-actions .prp-btn-connect .wp-block-button__link::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%222.5%22%20y%3D%224.5%22%20width%3D%2219%22%20height%3D%2215%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22m3%206%209%206.5L21%206%22%2F%3E%3C%2Fsvg%3E"); mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%222.5%22%20y%3D%224.5%22%20width%3D%2219%22%20height%3D%2215%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22m3%206%209%206.5L21%206%22%2F%3E%3C%2Fsvg%3E"); }

@media (max-width: 520px) {
  /* two columns cannot hold "Text (314) 886-5902" on a small handset
     without shrinking the type below the tap-target comfort zone */
  .wp-block-buttons.prp-actions { grid-template-columns: 1fr; }
}

/* ---- linked headings --------------------------------------------------
   A section title that is also a link has to look like one without turning
   the page into a wall of underlines. It keeps the heading color at rest,
   carries a faint accent rule beneath it so it is distinguishable from a
   plain heading, and goes full accent with a solid rule on hover or focus.
   The rule is drawn with background-image rather than border-bottom so it
   sits tight under the glyphs rather than under the whole line box. */
h2 > a, h3 > a {
  color: inherit;
  text-decoration: none;
  border-bottom: 0;
  background-image: linear-gradient(rgb(var(--bd-accent-rgb) / 0.35), rgb(var(--bd-accent-rgb) / 0.35));
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 100% 1px;
  transition: color .16s ease, background-size .16s ease, background-image .16s ease;
}
@media (hover: hover) {
  h2 > a:hover, h3 > a:hover {
    color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
    background-image: linear-gradient(var(--bd-accent, #e2661a), var(--bd-accent, #e2661a));
    background-size: 100% 2px;
  }
}
h2 > a:focus-visible, h3 > a:focus-visible {
  color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  outline: 2px solid var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  outline-offset: 4px;
  background-image: linear-gradient(var(--bd-accent, #e2661a), var(--bd-accent, #e2661a));
  background-size: 100% 2px;
}
/* ---- contrast corrections (measured, not eyeballed) -------------------
   White on the brand orange #E2661A is 3.42:1 -- below AA for body text.
   Ink on that same orange is 5.87:1, so the brand color is kept exactly
   and the LABEL changes instead of the button. Call keeps white on ember
   #B04A0C, which already measures 5.48:1. The table's figure column was
   ember on near-black at 3.65:1; the accent is 5.87:1 on the same ground.
   The reviewed-date line was white at 34% (2.99:1) and is now 55% (6.26:1). */
.prp-actions .prp-btn-book .wp-block-button__link,
.prp-header-book .hdr-book .wp-block-button__link {
  color: var(--wp--preset--color--ink, var(--bd-ink, #080807));
}
.prp-actions .prp-btn-book .wp-block-button__link:hover,
.prp-actions .prp-btn-book .wp-block-button__link:focus-visible,
.prp-header-book .hdr-book .wp-block-button__link:hover,
.prp-header-book .hdr-book .wp-block-button__link:focus-visible {
  color: #fff;
}
.prp-table tbody td:not(:first-child) { color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a)); }
.prp-reviewed { color: rgba(255, 255, 255, 0.55); }

/* ---- type floor for a presbyopic audience -----------------------------
   Measured before this: body 16.1px, byline 11.5px, severity boxes 13.1px,
   sources 13.4px, footer 13.8px, drive-time labels 10px. The premise of
   this site is that the reader is in their fifties or sixties, where
   near-vision accommodation has already gone -- so nothing functional sits
   below 14px, and body copy is 18px rather than the 16px web default.
   Line height stays at 1.6-1.7, which matters more than size for tired
   eyes, and measure stays near 50-65 characters. */
.prp-lead { font-size: 1.28rem; line-height: 1.62; }
.prp-byline p { font-size: .9rem; line-height: 1.55; }
.prp-reviewed { font-size: .8rem; }
.prp-scale li { font-size: .95rem; }
.prp-sources ul.wp-block-list li { font-size: .98rem; line-height: 1.55; }
.prp-foot-nap { font-size: 1.05rem; line-height: 1.62; }
ul.prp-foot-list li { font-size: .95rem; }
.prp-foot-h { font-size: .9rem; }
.prp-table table { font-size: 1rem; }
.prp-figure figcaption, .prp-plate figcaption { font-size: .92rem; }
.prp-table figcaption { font-size: .88rem; }
.wp-block-post-content h3 + p { font-size: 1.06rem; }
/* the drive-time label was 10px AND measured 4.03:1 -- under size and
   under contrast at once */
.prp-from { font-size: .78rem; letter-spacing: .14em; color: rgba(255,255,255,.62); }

/* ---- readable chrome ---------------------------------------------------
   Menu items and footer links were 12.8-13.8px, inherited rather than set,
   so raising the component classes did nothing -- `footer ... p` is (0,1,2)
   and beat `.prp-foot-nap` at (0,1,0). Sizes are raised at the level that
   actually owns them. Navigation is the one thing a presbyopic reader must
   not have to squint at, so it goes to 16px. */
.wp-block-navigation .wp-block-navigation-item__content { font-size: 1rem; }
.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content { font-size: .95rem; }
footer.wp-block-template-part ul.prp-foot-list li { font-size: .95rem; }
footer.wp-block-template-part p.prp-foot-nap { font-size: 1.05rem; line-height: 1.62; }
.prp-from { font-size: .85rem; }
.prp-sources ul.wp-block-list li a { font-size: inherit; }
.prp-reviewed { font-size: .82rem; }
.prp-tier .prp-eyebrow, .prp-flag .prp-eyebrow { font-size: .9rem; }

/* ---- byline as a sign-off ---------------------------------------------
   The reviewer credit moved from above the headline to the foot of the
   page, after the sources. It is attribution, not a preamble -- and at the
   top it pushed the hook down the fold on every page. Given a little more
   air now that it closes the article rather than interrupting it. */
.prp-byline { margin: 2.6rem 0 1.4rem; padding: .8rem 0 .8rem 1.1rem; }
.prp-byline p { font-size: .95rem; line-height: 1.6; color: rgb(var(--bd-paper-rgb) / 0.62); }
.prp-reviewed { font-size: .95rem; color: rgba(255,255,255,.5); }

/* the footer lockup is a link home; it must not inherit the footer's
   underlined link treatment, and it needs a visible focus ring */
.prp-foot-home { display: inline-flex; align-items: center; gap: .7rem;
  border-bottom: 0; text-decoration: none; color: inherit; }
.prp-foot-home:hover .prp-foot-word .s { color: var(--wp--preset--color--accent, var(--bd-accent, #e2661a)); }
.prp-foot-home:focus-visible { outline: 2px solid var(--wp--preset--color--accent, var(--bd-accent, #e2661a));
  outline-offset: 5px; }

/* ---- footer: two adjacent columns on narrow screens -------------------
   Core stacks every .wp-block-column to full width at <=781px, so the
   footer became three tall blocks and "Legal" sat far below the fold.
   Contact and Legal are both short lists and read better side by side.

   Switching the container to grid rather than fighting the flex rule:
   core's mobile override is `flex-basis: 100% !important` at (0,2,0), and
   the columns also carry inline `style="flex-basis:46%"`. Under grid both
   are inert -- grid items ignore flex-basis -- so no !important and no
   inline-style battle. minmax(0,1fr) lets the cells shrink below their
   content width instead of overflowing at 320px. */
@media (max-width: 781px) {
  .prp-foot-cols.wp-block-columns {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.9rem 1.3rem;
    align-items: start;
  }
  /* brand, address and directions keep the full width above the pair */
  .prp-foot-cols.wp-block-columns > .wp-block-column:first-child {
    grid-column: 1 / -1;
  }
  /* a phone number that breaks after the area code reads as two numbers */
  .prp-foot-nap a[href^="tel:"] { white-space: nowrap; }
  /* .18em tracking pushed "Talk to someone" onto a second line in a 153px
     cell, so its list started lower than Legal's and the pair read as
     misaligned. Tightened only at this width; the desktop heading keeps
     the wider tracking it was designed with. */
  .prp-foot-h { letter-spacing: .1em; }
}

/* Stacked wordmark: keep the second line on one line. A brand whose second line
   is a phrase rather than three letters ("CLINIC NEAR ME") wraps at phone width
   and breaks the header row; the tracking is what makes it wide, so that is what
   comes off. Siblings whose second line is "STL" never reach this width and are
   unaffected. */
@media (max-width: 560px) {
  .prp-wordmark.prp-wordmark--stack .s,
  .prp-foot-word.prp-wordmark--stack .s {
    letter-spacing: .18em; margin-right: -.18em; font-size: .58rem;
  }
}

/* ---- credential seal row -------------------------------------------
   The seals are full-color marks drawn for white stationery. Dropped
   straight onto the near-black ground they lose their outlines, so the row
   sits on a light panel instead of being recolored -- a seal is somebody
   else's trademark and must not be restyled.

   Built from plain image blocks rather than a gallery ON PURPOSE. The core
   gallery stylesheet sets `figure.wp-block-image img { width:100%;height:auto }`
   and is printed after the theme sheet, so it wins on source order and the
   marks blow up to column width. Plain images leave the sizing here.
   ------------------------------------------------------------------ */
.prp-seals { background: var(--bd-ground, #f3f2f2); padding: 2rem 1.75rem 1.6rem;
  margin: 3rem 0 1rem; }
.prp-seals .prp-seals-h { font-family: Montserrat, sans-serif; font-size: .72rem;
  letter-spacing: .16em; color: #4a4746; margin: 0 0 1.5rem; font-weight: 600;
  max-width: none; }
.prp-seals .prp-seals-row { display: flex; flex-wrap: wrap; gap: 1.5rem 2rem;
  align-items: center; justify-content: flex-start; }
.prp-seals .prp-seals-row figure.wp-block-image { margin: 0; flex: 0 0 auto; }
/* Doubled class to clear the core image/gallery rules regardless of order. */
.prp-seals .prp-seals-row figure.wp-block-image img,
.prp-seals .prp-seals-row .wp-block-image img {
  height: 58px; width: auto; max-width: 132px; object-fit: contain;
  display: block; margin: 0; }

@media (max-width: 700px) {
  .prp-seals { padding: 1.5rem 1.2rem 1.2rem; }
  .prp-seals .prp-seals-row { gap: 1.1rem 1.4rem; }
  .prp-seals .prp-seals-row figure.wp-block-image img,
  .prp-seals .prp-seals-row .wp-block-image img { height: 44px; max-width: 104px; }
}

/* ---- Kajabi contact form -------------------------------------------
   The embed ships its own <style> with a #a04d50 button marked
   !important, so the brand color has to outrank it: class + id + class
   beats the embed's id + class. Token-driven rather than per-site, so any
   sibling can carry the same wrapper.

   Fill is the DEEP accent, not the accent. White on the raw accent is
   3.20:1 and fails AA for button text; white on --bd-accent-d measures
   5.14:1. Same correction every other site in the network made.
   ------------------------------------------------------------------ */
.prp-kajabi-form { margin: 1.5rem 0 2rem; }
.prp-kajabi-form #kajabi-form .kajabi-form__btn {
  background: var(--bd-accent-d, #b04a0c) !important;
  border-color: var(--bd-accent-d, #b04a0c) !important;
  color: #FFFFFF !important; }
.prp-kajabi-form #kajabi-form .kajabi-form__btn:hover,
.prp-kajabi-form #kajabi-form .kajabi-form__btn:focus {
  background: var(--bd-accent, #e2661a) !important;
  border-color: var(--bd-accent, #e2661a) !important; }
/* The embed renders on the light form card, so labels and inputs keep
   their own dark-on-light treatment -- do not inherit the page's paper
   color into them or the fields go invisible. */
.prp-kajabi-form #kajabi-form label,
.prp-kajabi-form #kajabi-form .kajabi-form__title { color: #2b2929; }

/* ---- header actions: Call, Text, Contact + hamburger ---------------
   marker: prp-header-actions-trio
   The menu is a hamburger at EVERY width by design; the only things that
   stay visible in the bar are the three ways to reach a human. Three
   buttons plus the lockup is tighter than two, so the labels must not be
   treated as shrinkable or "Call" breaks one letter per line.
   ------------------------------------------------------------------ */
.prp-header-inner .wp-block-site-title { flex: 0 0 auto; }
.prp-header-actions { flex: 0 0 auto; }
.prp-header-book .wp-block-button,
.prp-header-book .wp-block-button__link { flex: 0 0 auto; white-space: nowrap; }

@media (max-width: 600px) {
  /* All three actions stay on a phone -- that is the whole point of the bar.
     Three LABELLED buttons do not fit (measured: 332px of content in a 279px
     bar at 380px viewport), so the labels go visually and the icons carry the
     meaning. Clipped rather than display:none so the text is still read out:
     an icon-only button with no accessible name is just a mystery square. */
  .prp-header-book .hdr-label {
    position: absolute; width: 1px; height: 1px; margin: -1px;
    padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap;
    border: 0;
  }
  .prp-header-book .wp-block-button__link { gap: 0; padding: 0.5rem 0.6rem; }
  .prp-header-book .wp-block-button__link::before { width: 1.15em; height: 1.15em; }
}

/* ---- mobile header: real touch targets, and stop clipping the menu ----
   Found 2026-08-29 by measuring the live header on a handset.

   Root cause of the clipping: .prp-header carries theme.json's GLOBAL
   padding, 48px a side. On a 375px screen that is 96px — a quarter of the
   viewport — spent on gutter, which pushed the hamburger past the right
   edge. Below 361px it went off-screen entirely, so the menu could not be
   opened at all on a 320px phone. Global padding is right for body copy and
   wrong for a control bar; the header opts out.

   Target sizes: the buttons were 39x34 and the hamburger 24x24. That last
   one sat exactly on the WCAG 2.2 AA 2.5.8 floor with zero spacing margin,
   and well under the 44x44 both Apple HIG and Material ask for. All four
   are now 44x44 with 6-10px between them — Call and Text sit side by side
   and one of them dials, so a mis-tap is not a cheap mistake. */
@media (max-width: 720px) {
  .prp-header.has-global-padding { padding-left: 14px; padding-right: 14px; }
  .prp-header-book .wp-block-button__link {
    min-width: 44px; min-height: 44px; padding: 0; justify-content: center;
  }
  .wp-block-buttons.prp-header-book { gap: 6px; }
  .prp-header-actions { gap: 10px; flex: 0 0 auto; }
  /* the lockup, not the controls, is what yields when space runs out */
  .prp-header-inner .prp-lockup { min-width: 0; overflow: hidden; }
  .prp-nav .wp-block-navigation__responsive-container-open {
    min-width: 44px; min-height: 44px;
    display: inline-flex; align-items: center; justify-content: center;
  }
}

/* The wordmark is the only flexible element left. Shrinking it slightly
   keeps the brand visible at 360px — the width a large share of Android
   reports — rather than dropping to the mark alone there. It is hidden only
   below 340px, where three 44px targets plus the menu leave no room for it. */
@media (max-width: 420px) {
  /* Selector is doubled on the stacked variant to clear the (0,3,0) rule that
     sets its size — headacheclinicnearme.com has the longest name in the set
     and was still overflowing by 3px because the single-class rule lost. */
  .prp-header-inner .prp-wordmark { font-size: .95rem; }
  /* The stacked variant sets two words on two lines, so its longest line —
     "HEADACHE CLINIC" — drives the lockup width. It needs to go smaller than
     the inline wordmarks to leave room for four 44px targets. */
  .prp-header-inner .prp-wordmark.prp-wordmark--stack { font-size: .76rem; }
  /* Hard guarantee: the controls always get their width, whatever the brand
     name is. 240px = three 44px targets + the menu + gaps + the 14px gutters,
     plus slack. headacheclinicnearme.com has the longest name in the set and
     was putting the hamburger 1px past the viewport edge without this. */
  .prp-header-inner .prp-lockup { max-width: calc(100vw - 240px); }
  .prp-header-inner .prp-lockup { gap: .5rem; }
  /* Sites carry the mark as either an inline <svg> or an <img>; size both. */
  .prp-header-inner .prp-lockup svg,
  .prp-header-inner .prp-lockup .prp-mark-img {
    width: 26px; height: 26px; flex: 0 0 26px;
  }
}
@media (max-width: 339px) {
  .prp-header-inner .prp-wordmark,
  .prp-header-inner .prp-wordmark.prp-wordmark--stack { display: none; }
}

/* ---- article archive ---------------------------------------------------
   The blog index shipped rendering FULL post content — the first entry alone
   measured 4,813px, so all eight articles printed end to end with their CTA,
   sources and byline repeated eight times. This is the card grid that replaces
   it. Classes are generic so the sibling sites can use the same template.

   Card titles inherit the existing `h2 > a` gradient underline rather than
   inventing a second link treatment, and hover and focus produce the SAME
   result — focus parity is the accessibility item these grids fail most. */
.prp-archive-items {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr));
  gap: 2.6rem 2rem;
  margin: 2.6rem 0 3rem;
}
.prp-card {
  border-top: 1px solid rgba(255, 255, 255, .14);
  padding-top: 1.15rem;
  /* capped at 170ms / 3px: this audience includes vestibular disorders */
  transition: transform .16s ease, border-color .16s ease;
}
@media (hover: hover) {
  .prp-card:hover { transform: translateY(-3px); border-top-color: var(--bd-accent, #e2661a); }
}
.prp-card:focus-within { transform: translateY(-3px); border-top-color: var(--bd-accent, #e2661a); }
.prp-card .prp-card-img { margin: 0 0 1rem; }
.prp-card .prp-card-img img {
  width: 100%; height: 12.5rem; object-fit: cover; display: block;
  filter: saturate(.68) contrast(1.08) brightness(.86);
}
.prp-card .prp-card-title { font-size: 1.34rem; line-height: 1.28; margin: 0 0 .6rem; }
.prp-card .prp-card-ex p { font-size: 1.02rem; line-height: 1.6; color: rgb(var(--bd-paper-rgb) / 0.78); }
/* the "read" affordance is interactive, so it carries the accent */
.prp-card .prp-card-ex .wp-block-post-excerpt__more-link {
  display: inline-block; margin-top: .5rem; color: var(--bd-accent, #e2661a);
  font-weight: 600; border-bottom: 1px solid transparent;
}
.prp-card .prp-card-ex .wp-block-post-excerpt__more-link:hover,
.prp-card .prp-card-ex .wp-block-post-excerpt__more-link:focus-visible {
  border-bottom-color: var(--bd-accent, #e2661a); color: #FFFFFF;
}
.prp-archive .prp-lead { margin-bottom: .4rem; }
@media (prefers-reduced-motion: reduce) {
  .prp-card, .prp-card:hover, .prp-card:focus-within { transition: none; transform: none; }
}

/* ---- archive cards must escape the SINGLE-PAGE hero rules --------------
   `body:not(.home) .wp-block-post-featured-image` makes the featured image
   full-bleed (left:50%; width:100vw) and a sibling rule flex-reorders the
   post-title/featured-image/content group so the title comes first. Both are
   correct on a single page and catastrophic in a card grid: each card image
   went 100vw wide, titles overflowed the viewport, the excerpt rendered above
   the title, and one card measured 1,345px tall.

   Specificity arithmetic, because this stylesheet has lost five of these:
   the hero rule is `body:not(.home) .wp-block-post-featured-image` = (0,2,1).
   A bare `.prp-archive .wp-block-post-featured-image` is (0,2,0) and LOSES.
   Leading with body:not(.home) again takes it to (0,3,1), which wins. */
body:not(.home) .prp-archive .wp-block-post-featured-image {
  position: static; left: auto; transform: none;
  width: auto; max-width: 100%;
  margin: 0 0 1rem; padding-inline: 0;
}
body:not(.home) .prp-archive .wp-block-post-featured-image::after { display: none; }
body:not(.home) .prp-archive .wp-block-group:has(> .wp-block-post-title) { display: block; }
body:not(.home) .prp-archive .wp-block-post-title,
body:not(.home) .prp-archive .wp-block-post-featured-image,
body:not(.home) .prp-archive .wp-block-post-excerpt { order: 0; }
body:not(.home) .prp-archive .wp-block-post-title {
  position: static; left: auto; transform: none; width: auto; max-width: 100%;
  padding: 0; border-bottom: 0; margin: 0 0 .6rem;
}
