/* ============================================================================
   contact-mph.css — the shared MPH layout system, contact.html's copy.
   Founder, 2026-08-06: "can you go thru all our pages and do these changes and
   make everything look and position the same".

   Loaded LAST on contact.html, gated on `body.bto-mph-c`. Its partner is
   bto-css/bto-about-grounds.css (navy token + on-dark hero H1), linked above.

   ── THE SITE SCALE, SETTLED HERE ───────────────────────────────────────────
   Contact was the LAST page with no pass at all: measured at 2560 its text sat
   at x=44 while About and Founder sat at 640, and its headings ran 52 / 62 / 90
   against their 48. This file brings it onto the same system every other static
   page now uses:

     shell     1280 inside an 80px gutter (max-width 1440, centred)
     h1        60 / 1.05
     h2        48 / 1.05
     h3        30 / 37.5
     eyebrow   14 / 20, w600, ls .32em, uppercase
     lead      16 / 32
     body      16 / 28
     labels    14 / 20, w600
     padding   80 / 80 per band, hero 144 / 80

   🔴 THE SHELL IS A max-width WRAPPER, NEVER A FLAT PADDING ON A FULL-BLEED
   BOX. This is the trap that cost a whole round on /services: a flat 80px
   gutter matches a centred 1440 wrapper at EXACTLY 1440 and nowhere else — at
   2560 the wrapper's edge is 640 and the flat one is still 80. Every band here
   is a wrapper, so the edge tracks correctly at any width. If anything on this
   page ever needs to bleed and still line up, it takes
   `max(80px, calc((100vw - 1280px) / 2))`, not 80px.
   ========================================================================== */


/* ==========================================================================
   §1 · THE SHELL
   ========================================================================== */
body.bto-static.bto-mph-c .container {
  max-width: 1280px;
  padding-inline: 0;
  margin-inline: auto;
  width: 100%;
}

body.bto-static.bto-mph-c .bto-panel > .container,
body.bto-static.bto-mph-c .bto-static__body {
  padding-inline: 80px;
  max-width: 1440px;
}

body.bto-static.bto-mph-c .bto-static__body > .bto-panel { padding-inline: 0; }


/* ==========================================================================
   §2 · THE RHYTHM
   ==========================================================================
   🔴 The hero closes at 80, not 0. MPH's own hero is `pb-0` because their page
   is one continuous ground — a flush close is invisible there. Ours changes
   ink → navy at that seam, so a 0 bottom stops the ink a few pixels under the
   lead while 80px of navy sits above the next eyebrow. Same correction About
   and Founder carry. */
body.bto-static.bto-mph-c .bto-panel.bto-static__sec,
body.bto-static.bto-mph-c .bto-panel {
  padding-block: 80px;
}

body.bto-static.bto-mph-c .page-header-content.bto-panel {
  padding-block: 144px 80px;
}


/* ==========================================================================
   §3 · THE TYPE SCALE
   ==========================================================================
   Contact was 52 / 62 / 90 across its headings. It uses BOTH `.svc-sec-head`
   and `.content__title` for section heads (2 and 3 of them), and BOTH
   `.bto-eyebrow` and `.svc-sec-eyebrow` for kickers — so both of each are
   listed or half the page would silently keep its old size. Checked against
   the markup, not assumed. */

body.bto-static.bto-mph-c .bto-panel .svc-sec-eyebrow,
body.bto-static.bto-mph-c .bto-panel .bto-eyebrow {
  display: block;
  font-size: 14px;
  line-height: 20px;
  font-weight: 600;
  letter-spacing: .32em;
  text-transform: uppercase;
  margin: 0 0 20px;
  color: var(--fg-accent);
}

/* The dark-gold text token is unreadable on ink and navy; the fill token is the
   accent's on-dark form. Without this the eyebrows measure ~2.6:1 on ink and
   ~1.7:1 on navy — the exact regression this rule's twin fixed on founder.css. */
body.bto-static.bto-mph-c .bto-panel--dark .svc-sec-eyebrow,
body.bto-static.bto-mph-c .bto-panel--dark .bto-eyebrow,
body.bto-static.bto-mph-c .bto-panel--navy .svc-sec-eyebrow,
body.bto-static.bto-mph-c .bto-panel--navy .bto-eyebrow { color: var(--fill-accent); }

body.bto-static.bto-mph-c .page-header-content .page-header__title {
  font-size: 60px;
  line-height: 1.05;
  letter-spacing: -.02em;
  margin: 0 0 24px;
  max-width: none;
}

body.bto-static.bto-mph-c .bto-panel .svc-sec-head,
body.bto-static.bto-mph-c .bto-panel.bto-static__sec .content__title,
body.bto-static.bto-mph-c .bto-panel .content__title {
  font-size: 48px;
  line-height: 1.05;
  letter-spacing: -.02em;
  margin: 0 0 20px;
}

body.bto-static.bto-mph-c .bto-static__lead {
  font-size: 16px;
  line-height: 32px;
  max-width: 768px;
  margin: 0;
}

body.bto-static.bto-mph-c .bto-support,
body.bto-static.bto-mph-c .bto-prose p,
body.bto-static.bto-mph-c .bto-panel .bto-row__line {
  font-size: 16px;
  line-height: 28px;
  max-width: 56em;
}

body.bto-static.bto-mph-c .bto-panel .bto-row__label,
body.bto-static.bto-mph-c .bto-static__link,
body.bto-static.bto-mph-c .p2-cta {
  font-size: 14px;
  line-height: 20px;
  font-weight: 600;
  letter-spacing: normal;
}

/* Bare list items are not in bto-static.css's on-dark block (it covers `p`,
   `.bto-row__line`, `.bto-stat__label`), so on ink and navy they inherit
   `--fg-ink` and vanish. The navy half lives in bto-about-grounds.css; this is
   the ink half, which that sheet does not own. */
body.bto-static.bto-mph-c .bto-panel--dark li { color: var(--fg-on-dark-mute); }


/* ==========================================================================
   §4 · THE FORM
   ==========================================================================
   `cf-*` is contact's own form namespace (19 hooks). Only the type is touched —
   field sizing, focus rings and the honeypot are bto-contact.css's and are left
   exactly as they are. 16px on inputs is also what stops iOS Safari zooming the
   viewport on focus, so it is a functional floor, not a taste call. */
body.bto-static.bto-mph-c .bto-panel input,
body.bto-static.bto-mph-c .bto-panel textarea,
body.bto-static.bto-mph-c .bto-panel select {
  font-size: 16px;
  line-height: 28px;
}

body.bto-static.bto-mph-c .bto-panel label {
  font-size: 14px;
  line-height: 20px;
  font-weight: 600;
}


/* ==========================================================================
   §5 · NARROW — stepped at the same breakpoints as every other page
   ========================================================================== */
@media (max-width: 991px) {
  body.bto-static.bto-mph-c .bto-panel > .container,
  body.bto-static.bto-mph-c .bto-static__body { padding-inline: 40px; }
  body.bto-static.bto-mph-c .bto-panel.bto-static__sec,
  body.bto-static.bto-mph-c .bto-panel { padding-block: 64px; }
  body.bto-static.bto-mph-c .page-header-content.bto-panel { padding-block: 112px 64px; }
  body.bto-static.bto-mph-c .page-header-content .page-header__title { font-size: 44px; }
  body.bto-static.bto-mph-c .bto-panel .svc-sec-head,
  body.bto-static.bto-mph-c .bto-panel .content__title { font-size: 36px; }
}

@media (max-width: 575px) {
  body.bto-static.bto-mph-c .bto-panel > .container,
  body.bto-static.bto-mph-c .bto-static__body { padding-inline: 24px; }
  body.bto-static.bto-mph-c .page-header-content .page-header__title { font-size: 34px; }
  body.bto-static.bto-mph-c .bto-panel .svc-sec-head,
  body.bto-static.bto-mph-c .bto-panel .content__title { font-size: 28px; }
}


/* ── THE CTA ON A NAVY GROUND ──────────────────────────────────────────────
   🔴 Measured 1.55:1 after #contact-form went navy. bto-about-grounds.css
   restores `--fg-on-dark` for `a` and `--fg-on-accent` for `.p2-cta--primary`,
   but the element here is NOT an anchor, so neither rule reached it and it kept
   `--fg-ink` on #003A6C. Any `.p2-cta` that is not the amber one takes the
   on-dark ink; the primary is excluded because ink-on-amber is correct. */
body.bto-static.bto-mph-c .bto-panel--navy .p2-cta:not(.p2-cta--primary),
body.bto-static.bto-mph-c .bto-panel--dark .p2-cta:not(.p2-cta--primary) {
  color: var(--fg-on-dark);
}

/* 🔴 AND THE DISABLED SUBMIT NEEDS AN ID IN THE SELECTOR TO BE REACHED.
   The rule above is (0,5,1) and still lost: bto-contact.css ships
   `.bto-static #contact-form .bto-form__submit[disabled] { color: var(--fg-ink) }`,
   and ONE id outweighs any number of classes. That ink was right on the old
   #CCD5DA panel; on navy the "[FORM NOT LIVE — EMAIL US]" button measured
   1.55:1. Matching the id and adding classes is what wins — no !important. */
body.bto-static.bto-mph-c #contact-form .bto-form__submit[disabled],
body.bto-static.bto-mph-c #contact-form .bto-form__submit {
  color: var(--fg-on-dark);
}


/* ==========================================================================
   §6 · THE VERTICAL RHYTHM — the "uneven spacing"
   ==========================================================================
   Founder: "there is alot of uneven spacing and other stuff".

   Measured, eyebrow → heading across the six bands:

     contact-hero      20px      contact-send       80px
     contact-details   20px      contact-next       80px
     contact-form      20px      contact-mechanism  80px

   The split is not random and it is not the eyebrow. §3 sets the eyebrow's
   `margin-bottom: 20px`, and it holds — but three bands wrap their heading in
   `.ms-ah-wrapper`, which carries a top margin of its own that the eyebrow's
   20 then sits on top of. Same fault one level down: heading → next block came
   back 26 · 44 · 60 · 60 · 66, five different numbers for one relationship,
   and two pairs were touching at 0.

   One ladder, applied to the wrapper as well as the parts:
     eyebrow → heading   20
     heading → body      24
     body block → body   24
   `.ms-ah-wrapper` is zeroed so it stops contributing a second gap; it is a
   presentational wrapper, not a spacer. */
body.bto-static.bto-mph-c .bto-panel .ms-ah-wrapper {
  margin: 0 0 24px;
}

body.bto-static.bto-mph-c .bto-panel .svc-sec-head,
body.bto-static.bto-mph-c .bto-panel .content__title {
  margin: 0 0 24px;
}

/* The two 0px collisions — `.bto-mail → .bto-rows` and `.bto-steps →
   .bto-prose`. A margin on the following sibling rather than a bottom margin
   on the first, so a band that ends on one of these does not gain a trailing
   gap inside its 80px padding. */
body.bto-static.bto-mph-c .bto-panel .bto-mail + *,
body.bto-static.bto-mph-c .bto-panel .bto-rows + *,
body.bto-static.bto-mph-c .bto-panel .bto-steps + *,
body.bto-static.bto-mph-c .bto-panel .bto-list + *,
body.bto-static.bto-mph-c .bto-panel .bto-support + * {
  margin-top: 24px;
}

/* `.bto-mail` is the display email address — 56px, a size the 60/48 ladder does
   not contain. It is a link, not a heading, so it takes the h2 step rather than
   inventing a seventh size. */
body.bto-static.bto-mph-c .bto-mail {
  font-size: 48px;
  line-height: 1.05;
  letter-spacing: -.02em;
}


/* ==========================================================================
   §7 · THE FORM — "other stuff"
   ==========================================================================
   Measured at 1440: the form was 516px wide inside a 1280 column, so 764px —
   60% of the band — sat empty beside it, and six full-width fields stacked to
   823px of height. The fields also carried `border-radius: 40px`.

   🔴 40px IS THE CTA PILL RADIUS, NOT A SURFACE RADIUS. `.p2-cta` is 40px
   because it is a pill; every SURFACE on this site is 14px (the work tiles, the
   founder cards, the capability cards). A 58px-tall input at 40px radius is a
   pill too, which is why the fields read as six buttons rather than six inputs.
   14px here; the submit KEEPS its 40 — it really is a pill.

   Two columns for the short fields, full width for the message, which is the
   ordinary shape of a contact form and takes the block from 823px to roughly
   half that. `:has(textarea)` picks the message by what it CONTAINS rather than
   by position, so re-ordering the fields cannot silently break the span —
   `:has()` is already used in bto-static.css:258, so this is not a new
   dependency. */
body.bto-static.bto-mph-c .bto-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 24px 24px;
  max-width: 860px;
  width: 100%;
}

body.bto-static.bto-mph-c .bto-form__field:has(textarea),
body.bto-static.bto-mph-c .bto-form__note,
body.bto-static.bto-mph-c .bto-form .p2-cta {
  grid-column: 1 / -1;
}

body.bto-static.bto-mph-c .bto-form__field { min-width: 0; }

body.bto-static.bto-mph-c .bto-form input,
body.bto-static.bto-mph-c .bto-form select,
body.bto-static.bto-mph-c .bto-form textarea {
  width: 100%;
  border-radius: 14px;
}

/* The submit is a pill and stays one — but it must not stretch across both
   columns just because its grid area does. */
body.bto-static.bto-mph-c .bto-form .p2-cta {
  justify-self: start;
  border-radius: 40px;
}

@media (max-width: 767px) {
  body.bto-static.bto-mph-c .bto-form { grid-template-columns: 1fr; }
}

/* 🔴 ONE SOURCE FOR THE GAP, OR THE LADDER RE-SPLITS. After §6 the remaining
   spread was 24 / 30 / 48 / 56, and every outlier traced to a block carrying
   its OWN margin on top of the `+ *` rule:

     svc-sec-head → bto-mail   30 = head mb 24 + mail mt 6
     (in #contact-form)        48 = head mb 24 + mail mt 24
     bto-mail → bto-form       56 = mail mb 32 + form mt 24
     bto-support → bto-list    28 = support mb 28 (adjacent margins collapse to
                                    the larger, so the 24 never showed)

   Zeroing the blocks' own vertical margins leaves the `+ *` rule as the only
   thing setting a gap, which is what makes it one number instead of five.
   ⚠ The CONTAINERS are zeroed, never their children — `.bto-prose p` keeps its
   own paragraph spacing, which is a different relationship. */
body.bto-static.bto-mph-c .bto-panel .bto-mail,
body.bto-static.bto-mph-c .bto-panel .bto-rows,
body.bto-static.bto-mph-c .bto-panel .bto-steps,
body.bto-static.bto-mph-c .bto-panel .bto-list,
body.bto-static.bto-mph-c .bto-panel .bto-support,
body.bto-static.bto-mph-c .bto-panel .bto-prose {
  margin-top: 0;
  margin-bottom: 0;
}

body.bto-static.bto-mph-c .bto-panel .bto-mail { display: block; }

/* 🔴 AND THE SIBLING RULE HAS TO COME AFTER THE ZEROING, NOT BEFORE.
   The block above sets `margin-top: 0`; §6's `+ *` rule sets `margin-top: 24px`
   at the SAME specificity but EARLIER in the file, so the zero won and every
   gap it was meant to create collapsed to 0. Restated here, last, where it
   wins. `.bto-form` joins the zeroed set — it carried its own 32px top margin,
   which was the last odd number left (bto-mail → bto-form measured 32). */
body.bto-static.bto-mph-c .bto-panel .bto-form { margin-top: 0; margin-bottom: 0; }

body.bto-static.bto-mph-c .bto-panel .bto-mail + *,
body.bto-static.bto-mph-c .bto-panel .bto-rows + *,
body.bto-static.bto-mph-c .bto-panel .bto-steps + *,
body.bto-static.bto-mph-c .bto-panel .bto-list + *,
body.bto-static.bto-mph-c .bto-panel .bto-support + *,
body.bto-static.bto-mph-c .bto-panel .bto-prose + * {
  margin-top: 24px;
}

/* ⚠ inline-block, NOT block. `display: block` made the email's underline span
   the full 1280 column instead of hugging the address — the rule is only there
   so vertical margins apply, and inline-block gives that without the box
   growing to the container. */
body.bto-static.bto-mph-c .bto-panel .bto-mail { display: inline-block; }

/* 🔴 CORRECTION TO THE CORRECTION: `display: block; width: fit-content`.
   `inline-block` fixed the full-width underline but put the email back on a
   TEXT BASELINE, so its line box added leading below the glyphs and the gaps
   measured 48 and 56 again — an inline-level box cannot give clean block
   margins. `block` restores the margin behaviour, `fit-content` keeps the box
   (and therefore the underline) the width of the address. */
body.bto-static.bto-mph-c .bto-panel .bto-mail {
  display: block;
  width: fit-content;
  max-width: 100%;
}

/* The last odd number: `.bto-mail → .bto-form` held 32 against everything
   else's 24. bto-contact.css sets it through `#contact-form`, and an id beats
   the class-only `+ *` rule above — the same arithmetic as the disabled submit.
   Matched at id level so the ladder is finally one value. */
body.bto-static.bto-mph-c #contact-form .bto-form { margin-top: 24px; }

/* 🔴 THE FORM LABELS WERE 1.68:1 — SIX OF THEM.
   bto-contact.css paints `<label>` with `--fg-accent` (#854D00 dark gold), which
   is the accent's LIGHT-surface form and correct on the old #CCD5DA panel. On
   the navy ground it measured 1.68:1. §3's on-dark flip lists the two eyebrow
   CLASSES; a bare `label` is neither, so it was never covered. Same fault, third
   element type — anything tinted with --fg-accent needs an on-dark twin the
   moment its panel changes ground. */
body.bto-static.bto-mph-c .bto-panel--dark label,
body.bto-static.bto-mph-c .bto-panel--navy label,
body.bto-static.bto-mph-c #contact-form label {
  color: var(--fill-accent);
}

/* And the last gap: `.bto-mail`'s own `margin-bottom: 32px` is set through
   `#contact-form`, so the class-level zeroing above never reached it, and
   adjacent margins collapse to the LARGER — 32 beat the form's 24. Matched at
   id level, which is the third time an id in bto-contact.css has outranked a
   class rule on this page. */
body.bto-static.bto-mph-c #contact-form .bto-mail { margin-bottom: 0; }


/* ==========================================================================
   §8 · THE CONTACT BAND — MPH's two-column layout (2026-08-06)
   ==========================================================================
   Founder sent a reference shot: "want this layout". Details left (eyebrow,
   headline, icon cards), the form inside a bordered card on the right, labels
   sentence-case ABOVE each field, submit bottom-right.

   ⚠ The band is `.bto-panel--navy`, so every border and fill here is drawn in
   the ON-DARK tokens, not the light ones. `--bg-hairline` is polar at .55 and
   reads correctly on navy; `--fg-accent` (dark gold) does NOT and is never used
   on this ground — that was the 1.68:1 label bug two passes ago. */
body.bto-static.bto-mph-c .ctm-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(0, 1fr);
  gap: 48px;
  align-items: start;
}

body.bto-static.bto-mph-c .ctm-left .svc-sec-head { margin-bottom: 32px; }

/* ── THE DETAIL CARDS ─────────────────────────────────────────────────────
   Icon tile + label + value, one bordered row each. 14px radius, the site's
   surface radius — the same value the form fields now use, so the two columns
   read as one system rather than two components. */
body.bto-static.bto-mph-c .ctm-cards {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 16px;
}

body.bto-static.bto-mph-c .ctm-card {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 18px 20px;
  border: 1px solid var(--bg-hairline);
  border-radius: 14px;
  background: rgba(255, 255, 255, .04);
}

body.bto-static.bto-mph-c .ctm-card__icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: 10px;
  background: rgba(255, 255, 255, .07);
  color: var(--fill-accent);
}
body.bto-static.bto-mph-c .ctm-card__icon svg { width: 19px; height: 19px; }

body.bto-static.bto-mph-c .ctm-card__body { display: grid; gap: 3px; min-width: 0; }

body.bto-static.bto-mph-c .ctm-card__label {
  font-size: 11px;
  line-height: 16px;
  font-weight: 600;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--fg-on-dark-mute);
}

body.bto-static.bto-mph-c .ctm-card__value {
  font-size: 16px;
  line-height: 24px;
  font-weight: 600;
  color: var(--fg-on-dark);
  overflow-wrap: anywhere;
}
body.bto-static.bto-mph-c .ctm-card__value a { color: inherit; }


/* ── THE FORM CARD ────────────────────────────────────────────────────────
   One bordered panel holding the whole form, exactly as the reference does.
   The grid itself is §7's; only the frame is new. */
body.bto-static.bto-mph-c .ctm-panel {
  border: 1px solid var(--bg-hairline);
  border-radius: 18px;
  background: rgba(255, 255, 255, .04);
  padding: clamp(24px, 2.4vw, 34px);
}

/* §7 capped the form at 860 for a full-width band; inside the card it should
   simply fill it. */
body.bto-static.bto-mph-c .ctm-panel .bto-form { max-width: none; }

/* 🔴 LABELS BECOME SENTENCE CASE. They were tracked uppercase micro-caps —
   correct for a section eyebrow, wrong for a field label, and the reference
   sets them as plain sentence-case text sitting directly above the input.
   This also retires the amber: on a form, colour on the label competes with
   the field it names. */
body.bto-static.bto-mph-c .ctm-panel label {
  display: block;
  font-size: 14px;
  line-height: 20px;
  font-weight: 500;
  letter-spacing: normal;
  text-transform: none;
  color: var(--fg-on-dark);
  margin-bottom: 8px;
}

body.bto-static.bto-mph-c .ctm-panel input,
body.bto-static.bto-mph-c .ctm-panel select,
body.bto-static.bto-mph-c .ctm-panel textarea {
  background: rgba(255, 255, 255, .05);
  border: 1px solid var(--bg-hairline);
  border-radius: 10px;
  color: var(--fg-on-dark);
  padding: 12px 14px;
  height: auto;
}
body.bto-static.bto-mph-c .ctm-panel textarea { min-height: 150px; resize: vertical; }

body.bto-static.bto-mph-c .ctm-panel ::placeholder { color: var(--fg-on-dark-mute); opacity: 1; }

/* Submit sits bottom-RIGHT of the card in the reference, and is a filled
   button rather than a ghost outline. */
body.bto-static.bto-mph-c .ctm-panel .bto-form .p2-cta {
  justify-self: end;
  background: var(--fill-accent);
  border-color: transparent;
}
body.bto-static.bto-mph-c .ctm-panel .bto-form .p2-cta,
body.bto-static.bto-mph-c #contact-form .ctm-panel .bto-form__submit {
  color: var(--fg-on-accent);
}

body.bto-static.bto-mph-c .ctm-panel .bto-form__note { margin-top: 4px; }

@media (max-width: 991px) {
  body.bto-static.bto-mph-c .ctm-grid { grid-template-columns: 1fr; gap: 36px; }
}

/* 🔴 `#contact-next` WENT NAVY IN §8'S LADDER FIX, AND THE STEP NUMBERS CAME
   WITH IT. `.bto-step__n` / `.bto-step__name` / `.bto-step__line` are not in
   bto-static.css's on-dark block, so they inherited `--fg-ink` onto #003A6C:
   measured 1.61:1 on all four. Fourth element family to need this — the rule of
   thumb by now is that ANY class not named in bto-static.css:265-276 needs an
   on-dark twin the moment its panel changes ground. */
body.bto-static.bto-mph-c .bto-panel--navy .bto-step__n,
body.bto-static.bto-mph-c .bto-panel--dark .bto-step__n,
body.bto-static.bto-mph-c .bto-panel--navy .bto-step__name,
body.bto-static.bto-mph-c .bto-panel--dark .bto-step__name { color: var(--fg-on-dark); }

body.bto-static.bto-mph-c .bto-panel--navy .bto-step__line,
body.bto-static.bto-mph-c .bto-panel--dark .bto-step__line { color: var(--fg-on-dark-mute); }

body.bto-static.bto-mph-c .bto-panel--navy .bto-step,
body.bto-static.bto-mph-c .bto-panel--dark .bto-step { border-color: var(--bg-hairline); }


/* ==========================================================================
   §9 · THE FORM AT 85% — fitting a 15" MacBook at 100% zoom (2026-08-06)
   ==========================================================================
   Founder: "make the form smaller by 15percent so it fits the 15icnh macbook
   at 100percent zoom."

   A 15" MacBook is a 1440x900 CSS viewport; after browser chrome the usable
   height is ~800. The band measured 817px of content INSIDE a section that also
   pays 80/80, so the form alone overshot the screen before the padding was
   counted. Every internal metric comes down ~15%; the SHELL, the type scale and
   the 80/80 band rhythm are untouched, so this page still agrees with the other
   five.

   ⚠ THE 16px INPUT FLOOR SURVIVES BELOW 768px. iOS Safari zooms the viewport
   when a focused input is under 16px, and that zoom does not undo cleanly. 15px
   is a DESKTOP-ONLY saving — §4's 16px stays in force on phones, where vertical
   space is not the constraint anyway. */
@media (min-width: 768px) {
  body.bto-static.bto-mph-c .ctm-panel { padding: clamp(20px, 2vw, 29px); }

  body.bto-static.bto-mph-c .ctm-panel .bto-form { gap: 20px 20px; }

  body.bto-static.bto-mph-c .ctm-panel label {
    font-size: 13px;
    line-height: 18px;
    margin-bottom: 6px;
  }

  body.bto-static.bto-mph-c .ctm-panel input,
  body.bto-static.bto-mph-c .ctm-panel select,
  body.bto-static.bto-mph-c .ctm-panel textarea {
    font-size: 15px;
    line-height: 22px;
    padding: 10px 12px;
    border-radius: 9px;
  }

  body.bto-static.bto-mph-c .ctm-panel textarea { min-height: 118px; }

  body.bto-static.bto-mph-c .ctm-panel .bto-form .p2-cta {
    height: 44px;
    padding-inline: 26px;
    font-size: 13px;
  }

  /* The left column comes down with it, or the two halves stop matching. */
  body.bto-static.bto-mph-c .ctm-cards { gap: 14px; }
  body.bto-static.bto-mph-c .ctm-card { padding: 15px 17px; gap: 14px; }
  body.bto-static.bto-mph-c .ctm-card__icon { width: 36px; height: 36px; border-radius: 9px; }
  body.bto-static.bto-mph-c .ctm-card__icon svg { width: 17px; height: 17px; }
  body.bto-static.bto-mph-c .ctm-left .svc-sec-head { margin-bottom: 28px; }
}

/* The card alone came to 708 (13.3% off 817); the last 2% plus the band's own
   80/80 is what actually decides whether the thing fits an 800px usable
   viewport. 708 + 160 = 868, so the padding has to come in too — but ONLY on
   short screens, or every other page's 80/80 rhythm stops matching this one on
   a normal display. Keyed on HEIGHT, not width, because that is the constraint
   being solved. */
@media (min-width: 768px) {
  body.bto-static.bto-mph-c .ctm-panel textarea { min-height: 104px; }
  body.bto-static.bto-mph-c .ctm-panel .bto-form { gap: 18px 20px; }
}

@media (min-width: 768px) and (max-height: 880px) {
  body.bto-static.bto-mph-c #contact-form.bto-panel { padding-block: 48px; }
}


/* ==========================================================================
   §10 · THREE CORRECTIONS (2026-08-06)
   ==========================================================================
   ① 🔴 THE SUBMIT STAYED LEFT — AND IT IS AN ID, AGAIN.
      `.bto-static #contact-form .bto-form__submit { justify-self: start }` in
      bto-contact.css. §8's (0,5,0) `end` lost to it because one id outweighs
      any number of classes. That is the FOURTH rule on this page to need an id
      in the selector — the others were the disabled colour, the mail margin and
      the label colour. On contact, assume bto-contact.css is styling through
      `#contact-form` and write the override at id level from the start. */
body.bto-static.bto-mph-c #contact-form .ctm-panel .bto-form__submit {
  justify-self: end;
}

/* ② 🔴 THE FORM RAN UNDER THE HEADER. Founder: "the form is merging with the
      heaader."
      The header is a floating pill — measured `top: 20, height 60, bottom 80` —
      and §9 had cut this band's padding to 48 to make it fit an 800px viewport.
      48 < 80, so once the header goes fixed on scroll the eyebrow and the top
      of the card passed beneath it. The fit and the clearance were being
      traded against each other without anyone saying so.

      Both are satisfiable, but only exactly: the card is 684, the usable height
      on a 15" MacBook is ~800, and 800 − 684 = 116px of padding to spend. 88
      above (8px clear of the header's 80) and 28 below. Anything more generous
      above puts the band back over the fold. */
@media (min-width: 768px) and (max-height: 880px) {
  body.bto-static.bto-mph-c #contact-form.bto-panel { padding-block: 88px 28px; }
}

/* ③ Anchor jumps land the band under the header for the same reason. */
body.bto-static.bto-mph-c #contact-form { scroll-margin-top: 96px; }
