:root{--brand:#a05c39;--brand-ink:#6e3d21;--brand-tint:#efe6da;--accent:#264653;--ink:#264653;--ink-muted:#264653d9;--ink-inverse:#faf6f1;--surface:#faf6f1;--surface-alt:#efe6da;--surface-dark:#264653;--line:#2646532e;--line-inverse:#faf6f138;--font-display:"Fraunces", Georgia, "Times New Roman", serif;--font-body:"Archivo", system-ui, -apple-system, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, monospace;--step-display:clamp(56px, 10vw, 148px);--step-h1:clamp(38px, 4.3vw, 66px);--step-h2:clamp(30px, 3.4vw, 46px);--step-h3:clamp(24px, 2.2vw, 30px);--step-lede:clamp(19px, 1.35vw, 21px);--step-body:18px;--step-body-sm:16px;--step-small:13px;--step-ordinal:40px;--leading-tight:.96;--leading-body:1.55;--tracking-display:-.035em;--tracking-label:.1em;--space-1:8px;--space-2:12px;--space-3:20px;--space-4:32px;--space-5:56px;--space-6:92px;--section-y:92px;--radius:0;--container:1200px;--gutter:40px;--tap:46px;--focus-ring:2px solid var(--brand);--focus-offset:3px;--dur:.34s;--ease:cubic-bezier(.22, .61, .36, 1)}.psp-root{background:var(--surface);color:var(--ink);font-family:var(--font-body);font-size:var(--step-body);line-height:var(--leading-body);-webkit-font-smoothing:antialiased}.psp-root *,.psp-root :before,.psp-root :after{box-sizing:border-box}.psp-root :focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}@media (width<=1000px){:root{--gutter:24px;--section-y:72px}}.psp-container{width:100%;max-width:var(--container);padding-inline:var(--gutter);margin-inline:auto}.psp-container--prose{max-width:68ch}.psp-band{width:100%;padding-block:var(--section-y);background:var(--surface)}.psp-band--alt{background:var(--surface-alt)}.psp-band--dark{background:var(--surface-dark);color:var(--ink-inverse)}.psp-band--brand{background:var(--brand);color:var(--ink-inverse)}.psp-band--pad-none{padding-block:0}.psp-band--pad-tight{padding-block:calc(var(--section-y) * .45)}.psp-band--pad-loose{padding-block:calc(var(--section-y) * 1.4)}.psp-band--edge-top{border-top:1px solid var(--line)}.psp-band--edge-bottom{border-bottom:1px solid var(--line)}.psp-band--edge-both{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.psp-band--dark.psp-band--edge-top,.psp-band--brand.psp-band--edge-top{border-top-color:var(--line-inverse)}.psp-band--dark.psp-band--edge-bottom,.psp-band--brand.psp-band--edge-bottom{border-bottom-color:var(--line-inverse)}.psp-band--dark.psp-band--edge-both,.psp-band--brand.psp-band--edge-both{border-color:var(--line-inverse)}.psp-stack{flex-direction:column;display:flex}.psp-stack--1{gap:var(--space-1)}.psp-stack--2{gap:var(--space-2)}.psp-stack--3{gap:var(--space-3)}.psp-stack--4{gap:var(--space-4)}.psp-stack--5{gap:var(--space-5)}.psp-stack--6{gap:var(--space-6)}.psp-stack--start{align-items:flex-start}.psp-stack--center{align-items:center}.psp-stack--stretch{align-items:stretch}.psp-split{grid-template-columns:var(--psp-ratio,1fr 1fr);display:grid}.psp-split--1{gap:var(--space-1)}.psp-split--2{gap:var(--space-2)}.psp-split--3{gap:var(--space-3)}.psp-split--4{gap:var(--space-4)}.psp-split--5{gap:var(--space-5)}.psp-split--6{gap:var(--space-6)}.psp-split--start{align-items:start}.psp-split--center{align-items:center}.psp-split--end{align-items:end}.psp-split--reverse>:first-child{order:2}.psp-split--reverse>:nth-child(2){order:1}@media (width<=640px){.psp-split--stack-sm{grid-template-columns:1fr}.psp-split--stack-sm.psp-split--reverse>*{order:0}}@media (width<=900px){.psp-split--stack-md{grid-template-columns:1fr}.psp-split--stack-md.psp-split--reverse>*{order:0}}@media (width<=1100px){.psp-split--stack-lg{grid-template-columns:1fr}.psp-split--stack-lg.psp-split--reverse>*{order:0}}.psp-rule{border:0;border-top:1px solid var(--line);margin:0}.psp-rule--ink{border-top-color:var(--ink)}.psp-rule--inverse{border-top-color:var(--line-inverse)}.psp-heading{font-family:var(--font-display);font-weight:400;line-height:var(--leading-tight);letter-spacing:var(--tracking-display);color:inherit;margin:0}.psp-heading--display{font-size:var(--step-display);line-height:.9}.psp-heading--lg{font-size:var(--step-h1)}.psp-heading--md{font-size:var(--step-h2);line-height:1.02}.psp-heading--sm{font-size:var(--step-h3);letter-spacing:-.02em;line-height:1.14}.psp-heading--balance{text-wrap:balance}.psp-body{font-size:var(--step-body);line-height:var(--leading-body);color:inherit;margin:0}.psp-body--lede{font-size:var(--step-lede)}.psp-body--small{font-size:var(--step-body-sm)}.psp-body--muted{color:var(--ink-muted)}.psp-body--inverse{color:var(--ink-inverse)}.psp-eyebrow{font-family:var(--font-mono);font-size:var(--step-small);letter-spacing:var(--tracking-label);text-transform:uppercase;color:inherit;margin:0;line-height:1.2}.psp-eyebrow--muted{color:var(--ink-muted)}.psp-eyebrow--inverse{color:var(--ink-inverse)}.psp-eyebrow--brand{color:var(--brand)}.psp-ordinal{font-family:var(--font-mono);font-size:var(--step-ordinal);color:var(--ink-muted);line-height:1;display:block}.psp-ordinal--brand{color:var(--brand)}.psp-ordinal--default{color:inherit}.psp-button{min-height:var(--tap);padding:var(--space-2) var(--space-4);border-radius:var(--radius);font-family:var(--font-body);font-size:var(--step-body);white-space:nowrap;background:var(--brand);color:var(--ink-inverse);transition:background var(--dur) var(--ease), color var(--dur) var(--ease);justify-content:center;align-items:center;font-weight:500;text-decoration:none;display:inline-flex}.psp-button:hover{background:var(--accent);color:var(--ink-inverse)}.psp-button--invert{background:var(--surface);color:var(--ink)}.psp-button--invert:hover{background:var(--accent);color:var(--ink-inverse)}.psp-button--ghost{color:inherit;background:0 0;border:1px solid}.psp-button--ghost:hover{background:var(--brand);border-color:var(--brand);color:var(--ink-inverse)}.psp-band--brand .psp-button--ghost:hover{background:var(--ink-inverse);border-color:var(--ink-inverse);color:var(--brand-ink)}.psp-button--full{width:100%}.psp-linkarrow{font-size:var(--step-body);color:var(--brand);border-bottom:1px solid;padding-bottom:2px;font-weight:500;text-decoration:none;display:inline-block;position:relative}.psp-linkarrow:after{content:"";height:var(--tap);position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.psp-linkarrow:hover{color:var(--brand-ink)}.psp-linkarrow--inverse{color:var(--ink-inverse)}a[href^=tel\:]{white-space:nowrap}.psp-figure{margin:0}.psp-figure__img{object-fit:cover;border-radius:var(--radius);background:var(--surface-alt);width:100%;height:100%;display:block}.psp-figure__caption{font-family:var(--font-mono);font-size:var(--step-small);letter-spacing:.05em;color:var(--ink-muted);padding-top:var(--space-1)}.psp-indexrow{gap:var(--space-3);padding-block:var(--space-3);border-bottom:1px solid var(--line);color:inherit;grid-template-columns:auto 118px 1.1fr 1.4fr auto;align-items:center;text-decoration:none;display:grid}.psp-indexrow:hover{background:var(--surface-alt)}.psp-indexrow__index{font-family:var(--font-mono);font-size:var(--step-small);letter-spacing:.06em;color:var(--ink-muted)}.psp-indexrow__thumb{height:80px}.psp-indexrow__title{font-family:var(--font-display);font-size:var(--step-h3);letter-spacing:-.02em;line-height:1.08}.psp-indexrow__desc{font-size:var(--step-body);color:var(--ink-muted);line-height:1.5}.psp-indexrow__action{font-size:var(--step-body);color:var(--brand);white-space:nowrap;font-weight:500}@media (width<=1000px){.psp-indexrow{row-gap:var(--space-2);grid-template-columns:1fr}.psp-indexrow__thumb{height:180px}}.psp-ledgerrow{gap:var(--space-3);padding-block:var(--space-3);border-top:1px solid var(--line);grid-template-columns:88px 1fr;align-items:start;display:grid}.psp-ledgerrow__index{font-family:var(--font-mono);font-size:var(--step-small);letter-spacing:.06em;color:var(--ink-muted);padding-top:6px}.psp-ledgerrow__title{font-family:var(--font-display);font-size:var(--step-h3);letter-spacing:-.015em;margin:0;line-height:1.12}.psp-ledgerrow__desc{font-size:var(--step-body);color:var(--ink-muted);margin-top:var(--space-1);line-height:1.5}@media (width<=1000px){.psp-ledgerrow{row-gap:var(--space-1);grid-template-columns:1fr}}.psp-disclosure{border-bottom:1px solid var(--line)}.psp-disclosure__summary{justify-content:space-between;align-items:baseline;gap:var(--space-3);min-height:var(--tap);padding-block:var(--space-3);cursor:pointer;font-family:var(--font-display);font-size:var(--step-h3);letter-spacing:-.02em;color:inherit;list-style:none;display:flex}.psp-disclosure__summary::-webkit-details-marker{display:none}.psp-disclosure__sign{font-family:var(--font-mono);color:var(--brand);flex:none}.psp-disclosure__sign:after{content:"+"}.psp-disclosure[open] .psp-disclosure__sign:after{content:"–"}.psp-disclosure__body{padding-bottom:var(--space-3);font-size:var(--step-body);color:var(--ink-muted);max-width:60ch;line-height:1.6}.psp-band--dark .psp-ledgerrow,.psp-band--brand .psp-ledgerrow,.psp-band--dark .psp-indexrow,.psp-band--brand .psp-indexrow,.psp-band--dark .psp-disclosure,.psp-band--brand .psp-disclosure{border-color:var(--line-inverse)}.psp-band--dark .psp-ledgerrow__index,.psp-band--brand .psp-ledgerrow__index,.psp-band--dark .psp-ledgerrow__desc,.psp-band--brand .psp-ledgerrow__desc,.psp-band--dark .psp-indexrow__index,.psp-band--brand .psp-indexrow__index,.psp-band--dark .psp-indexrow__desc,.psp-band--brand .psp-indexrow__desc,.psp-band--dark .psp-disclosure__body,.psp-band--brand .psp-disclosure__body,.psp-band--dark .psp-figure__caption,.psp-band--brand .psp-figure__caption{color:var(--ink-inverse);opacity:.78}.psp-band--dark .psp-indexrow:hover,.psp-band--brand .psp-indexrow:hover{background:#ffffff0f}.psp-band--dark .psp-indexrow__action,.psp-band--brand .psp-indexrow__action,.psp-band--dark .psp-disclosure__sign,.psp-band--brand .psp-disclosure__sign{color:var(--ink-inverse)}.psp-drawer__trigger{min-height:var(--tap);padding-inline:var(--space-3);border:0;border-left:1px solid var(--line);font-family:var(--font-body);font-size:var(--step-body-sm);color:inherit;cursor:pointer;background:0 0;align-items:center;display:inline-flex}.psp-drawer__panel{border-top:1px solid var(--ink);background:var(--surface);flex-direction:column;max-height:80vh;display:none;overflow:auto}.psp-drawer__panel[data-open=true]{display:flex}.psp-stickybar{inset-inline:0;z-index:200;background:var(--surface-dark);border-top:1px solid var(--line-inverse);display:none;position:fixed;bottom:0}.psp-stickybar__item{min-height:var(--tap);padding:var(--space-2) var(--space-1);font-family:var(--font-body);font-size:var(--step-small);color:var(--ink-inverse);flex-direction:column;justify-content:center;align-items:center;gap:2px;font-weight:500;text-decoration:none;display:flex}.psp-stickybar__item--emphasis{background:var(--brand)}.psp-stickybar__sub{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;opacity:.75;font-size:10px}@media (width<=1000px){.psp-stickybar{display:grid}}.psp-reveal{opacity:.01;transition:opacity var(--dur) var(--ease), transform var(--dur) var(--ease);transform:translateY(18px)}.psp-reveal[data-seen=true]{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.psp-reveal{opacity:1;transition:none;transform:none}}.psp-visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.psp-skiplink{z-index:999;padding:var(--space-2) var(--space-3);background:var(--surface-dark);color:var(--ink-inverse);text-decoration:none;position:absolute;left:-9999px}.psp-skiplink:focus{left:var(--gutter);top:var(--space-2)}
/* NOTE, 2026-08-12: a `.psp-split>*,.psp-stack>*{min-width:0}` rule lived here
   briefly and was removed. It fixed contact.html but regressed privacy.html and
   free-consult.html: letting those containers shrink exposed grandchildren that
   still could not, so the overflow moved rather than went away. min-width:0 is a
   per-case fix, not a system-wide default. It now lives in contact.html only. */
/* .psp-linkarrow carries its underline as a border, and as a grid or flex item
   it stretches to the full column, so the rule ran the whole width instead of
   sitting under the words. Inside a card that reads as a deliberate footer rule
   and stays. Standing on its own under a paragraph it reads as a stray line,
   so those links opt in to shrinking. */
.psp-linkarrow--tight{justify-self:start;align-self:start;width:fit-content}

/* UA margin reset, 2026-08-12. figure and blockquote both ship with
   margin: 1em 40px in every browser. Pages that styled their own testimonial
   reset the inner blockquote but not the figure wrapping it, so the whole
   quote, copper rule included, sat 40px right of everything else in its
   column. It bit four pages here and had already bitten the reviews page,
   where it pushed the mobile scroll width to 410. Resetting both at the system
   level rather than per page stops it recurring. */
figure,blockquote{margin:0}

/* Polish pass, 2026-08-12. All additive.

   1. Selection. Untouched, highlighting text produced the browser's default
   blue, a colour that appears nowhere else on this site. */
::selection{background:var(--brand);color:var(--ink-inverse)}

/* 2. The sticky bar steps aside while a form is on screen. form.js adds the
   class; the transition lives here so it eases rather than snaps. */
.psp-stickybar{transition:transform var(--dur) var(--ease),opacity var(--dur) var(--ease)}
.psp-stickybar.is-hidden{transform:translateY(100%);opacity:0;pointer-events:none}
@media (prefers-reduced-motion:reduce){.psp-stickybar{transition:none}}

/* 3. Print. People print directions and appointment confirmations for a
   practice visit. Without this they also print the nav, the drawer, the sticky
   bar and a form they cannot fill in on paper. Link targets are exposed after
   the anchor text so a printed page still tells you where a link went, but
   only for real destinations: in-page anchors and mailto/tel would just add
   noise next to text that already reads as an address or a number. */
@media print{
  .roc-header,.psp-stickybar,.psp-drawer__panel,.roc-utility,form,.roc-consent,.psp-skiplink{display:none!important}
  *{background:#fff!important;color:#000!important;box-shadow:none!important}
  body{font-size:11pt;line-height:1.45}
  .psp-band{padding-block:0.6cm!important}
  a{text-decoration:underline}
  a[href^="http"]::after{content:" (" attr(href) ")";font-size:9pt;word-break:break-all}
  .psp-heading{page-break-after:avoid}
  img,figure,blockquote,.psp-disclosure{page-break-inside:avoid}
  .roc-anim,.roc-wipe>*{opacity:1!important;transform:none!important;clip-path:none!important}
}

/* Disclosure easing, 2026-08-12. Native <details> does not animate: the browser
   simply stops rendering the panel when closed, so a height transition has
   nothing to run against. Animating the panel on open instead gives the motion
   without fighting the element, and costs nothing when it is closed. */
.psp-disclosure__body{animation:psp-reveal .28s var(--ease) both}
@keyframes psp-reveal{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
/* The mobile drawer's submenus are the same component. Navigation should feel
   instant, so it opts out: a menu that fades reads as lag, not as polish. */
.roc-drawer-body .psp-disclosure__body{animation:none}
/* The sign already swaps + for – via content, so it is not rotated: turning
   either glyph 180 degrees looks identical and the transition would be dead
   code. Only the colour eases. */
.psp-disclosure__summary{transition:color var(--dur) var(--ease)}
@media (prefers-reduced-motion:reduce){.psp-disclosure__body{animation:none}}
/* Phase 6 audit fix, 2026-08-11. Additive. The homepage has no form controls,
   so this cannot change it.
   Concept C sets --step-body-sm:15px on .psp-root and every page's form classes
   (.ct-input, .roc-input, .bfa-input, .fc-*) inherit it. Under 16px, iOS zooms
   the viewport on focus. Needs to outrank those single-class rules, hence the
   .psp-root prefix. */
.psp-root input,.psp-root select,.psp-root textarea{font-size:16px}
