/* ============================================================
   site-polish.css  (polish 2026-11-14), loaded LAST on every page.
   Shared components for the inner pages AND the homepage (the homepage keeps its own inline CSS and does not load site-pages.css).
   Uses only tokens that exist in both worlds: --bg --fg --fg-muted --fg-quiet --gold --gold-hi --border --border-gold.
   Everything that moves: transform / opacity only, off under prefers-reduced-motion, calm on touch.
   Nothing here draws a hairline in, sweeps light across a card, lights a nav pill or glows (sister-site rule, Class A).
============================================================ */

/* ── 1. Page-level ── */
:root { color-scheme: dark; }
.services-hero .hero-right { will-change:auto; }               /* idle will-change removed */

/* hover transforms only where there is a real hover; touch never lifts a button */
@media (hover:none), (pointer:coarse) {
  .site-nav .site-nav-cta:hover, .c-btn:hover, .btn:hover, .industry-card:hover,
  .footer-social a:hover, .portrait-social:hover, .nav-cta:hover { transform:none; }
  .c-btn:hover { box-shadow:none; }
  .c-btn:hover svg { transform:none; }
}

/* ── 2. Page-to-page view transition (cross-document; browsers without it navigate normally) ── */
.px-vt-nav  { view-transition-name:px-nav; }
.px-vt-logo { view-transition-name:px-logo; }
@media (prefers-reduced-motion:no-preference) {
  @view-transition { navigation:auto; }
  ::view-transition-old(root), ::view-transition-new(root) { animation-duration:240ms; }
  ::view-transition-group(px-nav), ::view-transition-group(px-logo) { animation-duration:240ms; }
}

/* ── 3. Form: legibility, states, accessibility ── */
#contactForm { scroll-margin-top:9rem; }                        /* lands with the first field visible under the sticky header */
.c-form .c-group input, .c-form .c-group select, .c-form .c-group textarea { border-bottom-color:rgba(236,237,239,.42); }  /* >= 3:1 on the dark surface */
.c-form .c-group input:focus, .c-form .c-group select:focus, .c-form .c-group textarea:focus { border-bottom-color:var(--gold-hi); }
.c-form .c-group.ok input, .c-form .c-group.ok select, .c-form .c-group.ok textarea { border-bottom-color:rgba(200,205,212,.7); }
.c-form .c-group.err input, .c-form .c-group.err select, .c-form .c-group.err textarea { border-bottom-color:#EC8A7E; }
.c-form .c-err { font-size:.72rem; color:#EC8A7E; }
.c-form .c-counter { font-size:.7rem; }
@media (max-width:900px) {                                      /* 16px stops the iOS zoom on focus */
  .c-form .c-group input, .c-form .c-group select, .c-form .c-group textarea { font-size:16px; }
}
.c-opt {                                                         /* "optional" marker, added by contact-form.js */
  margin-left:.7em; font-family:'Onest',system-ui,sans-serif; font-size:.78rem; letter-spacing:.02em;
  text-transform:none; font-weight:300; color:var(--fg-quiet); white-space:nowrap;
}
.c-group label { transition:color .25s; }
/* the two half-width fields keep their lines level even when a label wraps; the link field gets the wider column */
.c-form .c-row { align-items:end; }
@media (min-width:961px) { .c-form .c-row:has(#cg-link) { grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr); } }
.page-contact .intake-copy .section-title { max-width:15ch; }
.c-captcha-group { border-radius:2px; }
.c-captcha-group:focus { outline:none; }
.c-captcha-group:focus-visible { outline:2px solid var(--gold-hi); outline-offset:6px; }
.c-fail {
  display:none; margin:0; padding:.95rem 1.1rem; border:1px solid rgba(236,138,126,.45);
  background:rgba(236,138,126,.06); color:#F0A79E; font-size:.9rem; line-height:1.6;
}
.c-fail.is-on { display:block; }

/* sending: the Send button turns from filled to outline, a small dial turns inside it */
.c-btn .px-dial { display:none; }
.is-sending .c-btn:disabled { opacity:1; background:transparent; color:var(--gold); border-color:var(--border-gold); cursor:progress; box-shadow:none; transform:none; }
.is-sending .c-btn:disabled > svg { display:none; }
.is-sending .c-btn .px-dial { display:inline-block; }
.px-spin .px-nd { transform-origin:20px 20px; }
@media (prefers-reduced-motion:no-preference) {
  .is-sending .px-spin .px-nd { animation:px-turn 2.6s linear infinite; }
}
@keyframes px-turn { from { transform:rotate(0deg); } to { transform:rotate(360deg); } }
.c-btn:not(:disabled):active { background:var(--gold-pale,#AFB5BE); }

/* success: confirmation + a way on; the needle swings to 000 and settles */
.c-success { align-items:center; gap:1.1rem; }
.c-success .px-dial { flex:none; }
.c-success-body { display:grid; gap:.75rem; min-width:0; }
.c-success-msg { margin:0; }
.c-success-link {
  width:fit-content; padding-bottom:3px; border-bottom:1px solid var(--border-gold);
  font-family:'Victor Mono',monospace; font-size:.7rem; letter-spacing:.15em; text-transform:uppercase; color:var(--gold-hi);
  transition:border-color .25s, color .25s;
}
.c-success-link:hover { border-bottom-color:var(--gold-hi); }
@media (prefers-reduced-motion:no-preference) {
  .c-success .px-dial .px-nd { animation:px-settle 1.5s cubic-bezier(.2,.8,.2,1) both; }
}
@keyframes px-settle {
  0%   { transform:rotate(130deg); }
  34%  { transform:rotate(-15deg); }
  58%  { transform:rotate(7deg); }
  80%  { transform:rotate(-2deg); }
  100% { transform:rotate(0deg); }
}

/* "what happens next" under the Send button (copy proposal, no time promise) */
.px-next {
  list-style:none; margin:-.55rem 0 0; padding:1.05rem 0 0; border-top:1px solid var(--border);
  display:grid; gap:.6rem; color:var(--fg-quiet); font-size:.86rem; line-height:1.55;
}
.px-next li { display:grid; grid-template-columns:1.1rem minmax(0,1fr); gap:.55rem; align-items:start; }
.px-next-n { font-family:'Victor Mono',monospace; font-size:.7rem; letter-spacing:.08em; color:var(--gold); padding-top:.2em; }

/* ── 4. Phone call-to-action pill ── */
.px-pill { display:none; }
@media (max-width:900px) {
  .px-pill {
    position:fixed; left:50%; bottom:calc(14px + env(safe-area-inset-bottom, 0px)); z-index:7000;
    display:inline-flex; align-items:center; justify-content:center; min-height:48px; padding:0 1.6rem;
    border:1px solid var(--border-gold); background:rgba(6,6,10,.92); color:var(--gold);
    font-family:'Victor Mono',monospace; font-size:.7rem; font-weight:500; letter-spacing:.15em; text-transform:uppercase; white-space:nowrap;
    opacity:0; visibility:hidden; pointer-events:none; translate:-50% 10px;
    transition:opacity .35s, translate .35s cubic-bezier(.16,1,.3,1), visibility 0s .35s;
  }
  .px-pill.is-on { opacity:1; visibility:visible; pointer-events:auto; translate:-50% 0; transition:opacity .35s, translate .35s cubic-bezier(.16,1,.3,1), visibility 0s; }
  .px-pill:active { background:rgba(200,205,212,.14); }
  /* the back-to-top control (homepage) steps up so the two never overlap */
  #btt { transition:opacity .4s, background .3s, transform .3s cubic-bezier(.16,1,.3,1), bottom .3s cubic-bezier(.16,1,.3,1); }
  /* review 2026-11-14: one floating control at a time on a phone */
  body.px-pill-on #btt { opacity:0 !important; pointer-events:none; }
}
@media (prefers-reduced-motion:reduce) {
  .px-pill, .px-pill.is-on, #btt { transition:none; }
}

/* ── 5. Degree scale divider (static; markup <div class="px-degrees" aria-hidden="true"></div>, ticks built by site-effects.js) ── */
.px-degrees {
  position:relative; width:100%; height:38px; margin:clamp(1.2rem,3vw,2.4rem) 0;
  border-top:1px solid var(--border-gold); color:var(--fg-quiet);
  font-family:'Victor Mono',monospace; font-size:.7rem; letter-spacing:.14em; line-height:1; pointer-events:none;
}
.px-degrees i { position:absolute; top:0; width:1px; height:6px; background:rgba(200,205,212,.34); }
.px-degrees i.maj { height:12px; background:rgba(200,205,212,.7); }
.px-degrees span { position:absolute; top:19px; white-space:nowrap; transform:translateX(-50%); }
.px-degrees span:first-of-type { transform:none; }

/* ── 6. Dial: a compass bezel with a needle (markup <span class="px-dial" aria-hidden="true"></span>; --px-bearing sets the needle) ── */
.px-dial { display:inline-block; width:40px; height:40px; flex:none; color:var(--gold); vertical-align:middle; }
.px-dial--sm { width:24px; height:24px; }
.px-dial svg { display:block; width:100%; height:100%; overflow:visible; }
.px-dial .px-ring { fill:none; stroke:currentColor; stroke-opacity:.4; stroke-width:1; }
.px-dial .px-tk { fill:none; stroke:currentColor; stroke-opacity:.5; stroke-width:1; stroke-linecap:round; }
.px-dial .px-nd { transform-origin:20px 20px; transform:rotate(var(--px-bearing, 0deg)); }
.px-dial .px-nd-n { stroke:var(--gold-hi); stroke-width:2; stroke-linecap:round; }
.px-dial .px-nd-s { stroke:currentColor; stroke-opacity:.45; stroke-width:2; stroke-linecap:round; }
.px-dial .px-hub { fill:currentColor; }
.px-dial--sm .px-tk { stroke-width:1.4; }

/* ── 7. Inner heroes: each page's compass is read at its own bearing (Services 090, Contact 180, About 270) ── */
@property --px-a { syntax:'<angle>'; inherits:true; initial-value:0deg; }
.px-bearing { --px-a:var(--px-bearing, 0deg); transform-origin:100px 100px; transform:rotate(var(--px-a)); }
.px-bearing .n-label { transform-origin:100px 4.2px; transform:rotate(calc(-1 * var(--px-a))); }
@media (prefers-reduced-motion:no-preference) {
  .px-bearing { animation:px-swing 2.4s cubic-bezier(.16,1,.3,1) .4s both; }
}
@keyframes px-swing { from { --px-a:0deg; } }

/* ── 8. Contact page: form first, the checklist after it as one unboxed two-column list ── */
.page-contact .chapter-layout { grid-template-columns:1fr; gap:1.4rem; }
.page-contact .chapter-rail { position:static; }
.page-contact .chapter-rail .section-title { max-width:20ch; }
.page-contact .chapter-note { max-width:62ch; }
.page-contact .chapter-stack { grid-template-columns:repeat(2, minmax(0,1fr)); gap:0 clamp(2rem,5vw,4.5rem); }
.page-contact .faq-item {
  min-height:0; padding:1.25rem 0 1.5rem; border:0; border-top:1px solid var(--border); background:none;
}
.page-contact .faq-item:hover { border-top-color:var(--border-gold); }
.page-contact .faq-item p { max-width:none; }
@media (max-width:960px) {
  .page-contact .chapter-stack { grid-template-columns:1fr; }
}

/* ── 9. Services FAQ: the plus becomes a needle that turns on open ── */
.faq-entry summary::after,
.faq-entry[open] summary::after {
  content:''; width:1.5rem; height:1.5rem; margin-top:0; border:0; border-radius:0;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none'%3E%3Ccircle cx='12' cy='12' r='10.5' stroke='%23C8CDD4' stroke-opacity='.4'/%3E%3Cpath d='M12 2.8v2M12 19.2v2M2.8 12h2M19.2 12h2' stroke='%23C8CDD4' stroke-opacity='.55' stroke-linecap='round'/%3E%3Cpath d='M12 12V5.4' stroke='%23F4F6F8' stroke-width='1.7' stroke-linecap='round'/%3E%3Cpath d='M12 12v4' stroke='%23C8CDD4' stroke-opacity='.45' stroke-width='1.7' stroke-linecap='round'/%3E%3Ccircle cx='12' cy='12' r='1.4' fill='%23C8CDD4'/%3E%3C/svg%3E") center/contain no-repeat;
  transition:transform .55s cubic-bezier(.16,1,.3,1);
}
.faq-entry[open] summary::after { transform:rotate(90deg); }
@media (prefers-reduced-motion:reduce) {
  .faq-entry summary::after, .faq-entry[open] summary::after { transition:none; }
}

/* ── 10. Press states (the touch and the click answer) ── */
.btn-primary:active { background:var(--gold-pale,#AFB5BE); border-color:var(--gold-pale,#AFB5BE); }
.btn-secondary:active { background:rgba(200,205,212,.16); }
.site-nav .site-nav-cta:active, .site-nav-drawer .site-drawer-cta:active { transform:scale(.985); }
.faq-entry summary:active { background:rgba(200,205,212,.05); }

/* ── review 2026-11-14: Contact page, the form block follows the hero without the empty band between two rules ── */
.page-hero + .section-block.intake-layout { margin-top:0; border-top:0; padding-top:clamp(3rem,6vw,4.5rem); }

/* ── review 2 (2026-11-14, after the UI reviewer): phone form ── */
.c-form .c-label-row { flex-wrap:nowrap; align-items:baseline; }
.c-form .c-label-row label { min-width:0; }
.c-form .c-counter { white-space:nowrap; flex-shrink:0; }
.c-form select { text-overflow:ellipsis; }
.c-form .c-btn { white-space:nowrap; }
@media (max-width:430px) {
  .c-form .c-group label { letter-spacing:.1em; }
  .c-form .c-counter { letter-spacing:.06em; }
}
@media (max-width:360px) {
  .c-form .c-btn { letter-spacing:.08em; padding-left:1rem; padding-right:1rem; }
  .c-form select { font-size:15px; }
}
/* the human-check band takes room only while the widget shows something or an error is written (all four forms) */
.c-form #cg-captcha.is-idle { height:0; min-height:0; overflow:hidden; margin:-1.85rem 0 -1.5rem; }
.c-form #cg-captcha.is-idle .c-err { min-height:0; }
.c-form #cg-captcha .cf-turnstile:not(:empty) { min-height:65px; }

/* ── review 3 (2026-11-14, after the second critic) ── */
/* FAQ icon: closed, the needle rests on a diagonal (a vertical needle with a dot read as "!"); open, it swings to north */
.faq-entry summary::after { transform:rotate(45deg); }
.faq-entry[open] summary::after { transform:rotate(0deg); }
/* phone pill: opaque, so page text never shows through */
@media (max-width:900px) {
  .px-pill { background:#0B0B12; border-color:rgba(200,205,212,.3); bottom:calc(20px + env(safe-area-inset-bottom, 0px)); box-shadow:0 10px 30px rgba(0,0,0,.55); }
}
/* footer mark: fainter and faded out toward the link columns, so it never crosses them */
.footer-mark { opacity:.05; -webkit-mask-image:linear-gradient(90deg, transparent 12%, #000 62%); mask-image:linear-gradient(90deg, transparent 12%, #000 62%); }

/* ── s07 (2026-11-14): plan item 23, Services cards ──
   Heading across the whole slab at about 40 px (was 12ch at up to 67 px: three or four lines);
   "Best when" moves up into the empty right column beside the intro; the list runs under the intro. */
@media (min-width:961px) {
  .service-main {
    display:grid;
    grid-template-columns:minmax(0,1.3fr) minmax(220px,.7fr);
    grid-template-areas:"h h" "p b" "c b";
    column-gap:2.2rem;
    align-content:start;
  }
  .service-main h2 { grid-area:h; max-width:none; font-size:clamp(2.1rem,2.75vw,2.6rem); line-height:1; }
  .service-main > p { grid-area:p; max-width:none; }
  .service-main .service-detail-grid { display:contents; }
  .service-main .service-detail-box:first-child { grid-area:c; margin-top:1.6rem; }
  .service-main .service-detail-box:last-child { grid-area:b; align-self:start; margin-top:.35rem; }
}
@media (min-width:961px) {
  /* the ghost numeral leaves the heading line and rests bottom right, under "Best when" */
  .service-main::before { top:auto; bottom:.35rem; }
}

/* ── s07 Class A (2026-11-14): the footer mark loses its ring and ticks and stops bleeding off the page
   (a large faint ticked ring cropped bottom right belongs to a sister site) ── */
.footer-mark { right:4%; bottom:6%; width:min(420px,34vw); }
.footer-mark-svg .brand-logo-tick, .footer-mark-svg .brand-logo-ring, .footer-mark-svg .brand-logo-north, .footer-mark-svg .brand-logo-south { display:none; }
/* s07: the homepage form surface keeps clear of the fixed back-to-top button (was 7 px under it at 1440) */
@media (min-width:769px) { #contact .contact-right { margin-right:3rem; } }

/* ── s07 (2026-11-14): the existing effects made visible ── */
/* 1. Pinned services: the dial sits beside "/ 0N of 04" at 64 px and turns live with the scroll
      (the 40 px dial at the bottom left, 700 px from the label it explained, is retired) */
@media (min-width:1024px) {
  html.services-pinned .services-pin .services-dial { display:none; }
  html.services-pinned .s-bearing .px-dial { display:inline-block; width:64px; height:64px; }
  html.services-pinned .s-bearing .px-dial .px-tk { stroke-width:.9; }
  html.services-pinned .s-bearing .px-dial .px-nd-n, html.services-pinned .s-bearing .px-dial .px-nd-s { stroke-width:1.4; }
  html.services-pinned .s-bearing { gap:.9rem; }
}
/* 2. Homepage nav compass: larger, and its bezel turns twice over the page (was once: about 30 degrees per screen) */
@media (min-width:769px) { .nav-logo { width:60px; } }
@supports (animation-timeline:scroll()) {
  @media (prefers-reduced-motion:no-preference) {
    @keyframes px-bezel-turn { to { transform:rotate(720deg); } }
  }
}
/* 3. Inner heroes: the needle overshoots its bearing and settles (damped), so the arrival reads as a gesture */
@media (prefers-reduced-motion:no-preference) {
  .px-bearing { animation:px-swing2 2.6s cubic-bezier(.33,1,.68,1) .35s both; }
}
@keyframes px-swing2 {
  0%   { --px-a:0deg; }
  55%  { --px-a:calc(var(--px-bearing, 0deg) + 16deg); }
  78%  { --px-a:calc(var(--px-bearing, 0deg) - 5deg); }
  100% { --px-a:var(--px-bearing, 0deg); }
}
/* s07: a pinned panel taller than the screen (RU 1024x768, panel 03) centred upward under the nav; "safe" falls back to the top edge then */
@media (min-width:1024px) {
  html.services-pinned .s-panel { align-items:safe center; padding-top:calc(var(--nav-h) + .75rem); }
}
@media (min-width:1024px) and (max-height:800px) {
  html.services-pinned .s-panel-num-row { margin-bottom:1rem; }
  html.services-pinned .s-desc { margin-bottom:1.3rem; }
  html.services-pinned .s-features { gap:.85rem; padding-top:1.1rem; }
}

/* s07: 64 px dials chosen over a large-compass variant */

/* ── s07: form failure fallback (copy the message / 7N on LinkedIn), shown only on failure ── */
.c-fail { display:none; }
.c-fail.is-on { display:flex; flex-direction:column; gap:.85rem; }
.c-fail:focus { outline:none; }
.c-fail:focus-visible { outline:2px solid var(--gold-hi, #F4F6F8); outline-offset:4px; }
.c-fail .c-fail-text { margin:0; }
.c-fail-actions { display:flex; flex-wrap:wrap; align-items:center; gap:.6rem 1rem; }
.c-fail-btn {
  display:inline-flex; align-items:center; justify-content:center; min-height:44px; padding:0 1.1rem;
  border:1px solid rgba(200,205,212,.45); background:transparent; color:#ECEDEF; cursor:pointer;
  font-family:'Victor Mono',monospace; font-size:.78rem; letter-spacing:.12em; text-transform:uppercase; text-decoration:none;
}
.c-fail-btn:hover, .c-fail-btn:focus-visible { border-color:#ECEDEF; outline:none; }
.c-fail-btn.is-done { border-color:rgba(200,205,212,.8); }
.c-fail-status { font-size:.82rem; color:rgba(236,237,239,.75); }
.c-fail-manual { width:100%; min-height:7rem; padding:.6rem .7rem; background:rgba(0,0,0,.25); color:#ECEDEF; border:1px solid rgba(200,205,212,.3); font:inherit; font-size:.9rem; }
@media (max-width:430px) { .c-fail-btn { flex:1 1 100%; } }
.c-fail-status.is-sr { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }

/* ── s07 batch 2 (2026-11-14) ── */
.nw { white-space:nowrap; }
/* homepage "after you send": in the left column on wide screens, under Send on narrow ones */
.px-next--left { display:none; }
@media (min-width:1024px) {
  .px-next--left { display:grid; margin-top:2rem; max-width:34ch; }
  .px-next--right { display:none; }
}
/* pinned services: the ghost numeral leaves the heading and rests bottom right, behind the list (critic 2, UI review 13) */
@media (min-width:1024px) and (min-height:740px) {
  html.services-pinned .s-ghost { left:auto; top:auto; translate:none; right:calc(max(var(--gutter), calc((100% - 1400px) / 2)) + 64px); bottom:clamp(2rem,5vh,3.5rem); font-size:clamp(9rem,14vw,14rem); line-height:.8; }
}
/* the EST. line: no wide gap between the token and the year */
.c-meta-item { gap:.45rem; }
/* a focused field that is wrong keeps its error underline */
.c-group.err input:focus, .c-group.err textarea:focus, .c-group.err select:focus { border-bottom-color:#EC8A7E; }
/* inner pages: buttons the same size as the homepage's */
.btn { font-size:.78rem; padding:1rem 2rem; }
.site-nav .site-nav-cta { font-size:.78rem; }
/* inner heroes on phones: the compass is centred under the text, not left alone */
@media (max-width:960px) {
  .page-hero .hero-right { display:flex; justify-content:center; width:100%; margin-inline:auto; }
}
/* contact page on phones: heading, a line, the form, then the two notes */
@media (max-width:960px) {
  .page-contact .intake-copy { display:contents; }
  .page-contact .intake-meta { order:2; }
  .page-contact .intake-form-shell { order:1; }
}
/* services: "Who it suits" no longer floats in a 430 px empty band (critic 2, weakest 4) */
.hero-fit-band { margin-top:0; padding-top:clamp(1.25rem,3vw,2.5rem); }
.hero-fit-band + .section-block { margin-top:clamp(2.5rem,5vw,4rem); }

/* ── s07: consent banner for Google Analytics (Consent Mode v2), shown only when GA is active or with ?consent=preview ──
   Small, fixed (no layout shift), both choices equal in weight, refusal honoured; "Cookie settings" in the footer reopens it. */
.px-consent {
  position:fixed; z-index:60; right:max(24px, env(safe-area-inset-right, 0px)); bottom:max(24px, env(safe-area-inset-bottom, 0px));
  width:min(380px, calc(100vw - 48px)); display:flex; flex-direction:column; gap:.9rem;
  padding:1.1rem 1.15rem 1.15rem; background:#0D0D14; border:1px solid rgba(200,205,212,.28);
  box-shadow:0 18px 40px rgba(0,0,0,.55); color:rgba(236,237,239,.82); font-size:.86rem; line-height:1.55;
}
.px-consent[hidden] { display:none; }
.px-consent-text { margin:0; }
.px-consent-text a { color:#ECEDEF; text-decoration:underline; text-underline-offset:3px; }
.px-consent-actions { display:flex; gap:.6rem; }
.px-consent-btn {
  flex:1 1 0; min-height:44px; padding:0 .9rem; background:transparent; color:#ECEDEF; cursor:pointer;
  border:1px solid rgba(200,205,212,.45); font-family:'Victor Mono',monospace; font-size:.74rem; letter-spacing:.12em; text-transform:uppercase;
}
.px-consent-btn:hover, .px-consent-btn:focus-visible { border-color:#ECEDEF; outline:none; }
.px-consent-btn:focus-visible { outline:2px solid #F4F6F8; outline-offset:2px; }
body.px-consent-open .px-pill, body.px-consent-open #btt, body.px-consent-open .px-btt { display:none; }
@media (max-width:600px) {
  .px-consent { left:max(12px, env(safe-area-inset-left, 0px)); right:max(12px, env(safe-area-inset-right, 0px)); bottom:max(12px, env(safe-area-inset-bottom, 0px)); width:auto; }
}
.px-consent.is-away:not(.is-forced) { visibility:hidden; }

/* ── s07 after critic 3 ── */
@media (max-width:900px) { body.px-form-in-view #btt { opacity:0; visibility:hidden; pointer-events:none; } }
/* the homepage contact heading: no stray indent before the italic second line */
.contact-title em { margin-left:0; }
/* the hero sub-line carries the real pitch (founder-led, 30+ years, fee): a little larger and brighter */
.hero-sub { font-size:clamp(1.06rem,1.3vw,1.24rem); color:rgba(236,237,239,.8); max-width:44ch; }

/* ── s07 after adversarial round (batch 2) ── */
.c-group.err input:focus, .c-group.err textarea:focus, .c-group.err select:focus {
  background-image:linear-gradient(#EC8A7E, #EC8A7E);
}
/* the back-to-top button steps aside while the homepage form is on screen, at every width (it could touch the form at 901-1680 px) */
body.px-form-in-view #btt { opacity:0; visibility:hidden; pointer-events:none; }
/* while the consent banner is open, the side dots step aside too */
body.px-consent-open .section-dots { visibility:hidden; }
@media (max-width:600px) {
  .px-consent { padding:.85rem .95rem .95rem; gap:.7rem; font-size:.8rem; line-height:1.45; }
}
/* the phone pill also steps aside while the form or its success box is on screen (every page with a form) */
body.px-form-in-view .px-pill { display:none; }

/* ── s09 after critic 4 (2026-11-15) ── */
/* phones: a long button label stays on one line where it can (less side padding, slightly tighter tracking); where it cannot (320 px), the two lines are centred and balanced, not left-aligned */
@media (max-width:480px) {
  .btn { padding-inline:1.15rem; letter-spacing:.11em; text-align:center; text-wrap:balance; }
}
@media (max-width:400px) {
  .btn { padding-inline:.9rem; letter-spacing:.09em; }
}
/* phone pill: hidden while the visitor reads downward, and while it would sit over anything pressable (logic in site-effects.js, pill()) */
.px-pill.is-over-ctl { transition:none !important; opacity:0 !important; visibility:hidden !important; pointer-events:none !important; }
/* phones: the hero eyebrow breaks as two clean lines (name, then year) instead of leaving "· Est. 2015" alone on line 2 */
@media (max-width:600px) {
  .hero-eyebrow .eb-sep { display:none; }
  .hero-eyebrow .eb-year { display:block; margin-top:.3em; }
}
/* point-of-collection privacy notice under the Send button (four forms) */
.px-privacy-note { margin:-.3rem 0 .15rem; font-size:.8rem; line-height:1.5; color:var(--fg-quiet); }
.px-privacy-note a { color:inherit; text-decoration:underline; text-underline-offset:3px; text-decoration-thickness:1px; }
.px-privacy-note a:hover, .px-privacy-note a:focus-visible { color:var(--fg); }
