/* kit v1.9.0 — generated by sync-kit; edit kit/ and re-sync */
/* kit — reset. The brand-agnostic GROUND layer.
 *
 * What every page hand-authored before kit 1.5.0 (xerf, stellar-m22 and skinmatch-laser
 * each carried their own copy of exactly these rules, in three diverging spellings):
 * box-sizing, the body ground, media defaults, and the reduced-motion clamp. One copy,
 * role-tier only — no hex ever belongs in this file; the placeholders live in roles.css.
 *
 * OPT-IN, per page. The file rides the `tokens` module, so sync-kit copies it into every
 * page's assets/_kit/tokens/ — but a page adopts it by LINKING it, and existing pages
 * migrate when next touched (ADR-0005's progressive-migration rule). Link order is
 * load-bearing and is a four-sheet sequence from 1.5.0:
 *
 *   roles.css → brand.css → reset.css → utilities.css
 *
 * reset paints var(--bg)/var(--text-c), so it must come after the brand layer that gives
 * those roles their values — before it, a flash of placeholder ground on slow connections.
 *
 * DELIBERATELY CONSERVATIVE. This is not a normalize.css: it zeroes only what section
 * authors demonstrably fight (every section in all three pages re-declares its own
 * margins), and it takes no typographic opinions beyond the body ground — those belong
 * to utilities.css (page furniture) or the section (everything else).
 */

*,
::before,
::after {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--text-c);
  font-family: var(--font-body);
  font-size: var(--text-m);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

/* Sections own their margins — the UA's defaults are what every page fought. */
h1, h2, h3, h4, h5, h6,
p, figure, blockquote, dl, dd {
  margin: 0;
}

/* Lists that are navigation/label furniture, not prose. The role attribute is required
 * anyway once list-style is stripped — Safari drops list semantics without it. */
ul[role="list"],
ol[role="list"] {
  margin: 0;
  padding: 0;
  list-style: none;
}

img, svg, video {
  display: block;
  max-width: 100%;
  height: auto;
}

/* Form controls do not inherit type by default; on a page whose body font is a role,
 * that surfaces as Times in the middle of a HubSpot form. */
button, input, select, textarea {
  font: inherit;
  color: inherit;
}

button, summary {
  cursor: pointer;
}

/* Links take the text colour of their context instead of UA blue — on a warm brand
 * palette the default #0000EE is never the intent. The underline stays: colour alone
 * must not be what distinguishes a link (WCAG 1.4.1). */
a {
  color: inherit;
}

/* display:flex/grid on an element defeats the UA's [hidden] rule (specificity 0 both,
 * source order wins) — kit 1.4.0 hit exactly this inside a component; this is the
 * page-wide backstop. */
[hidden] {
  display: none !important;
}

/* Every page has a sticky nav and #anchor CTAs; without this the jump target lands
 * underneath the nav. Component-local override: --scroll-margin on the target. */
:target {
  scroll-margin-block-start: var(--scroll-margin, 5rem);
}

/* The global focus default. --btn-outline-border means "the boundary of a control" and
 * is budgeted at 3:1 in both section contexts — --primary is NOT a focus-ring role
 * (roles.css header, ROLE-TIER.md §Findings 5). Components may re-declare with the same
 * role for offset tweaks; they must not re-declare with a different one. */
:focus-visible {
  outline: 2px solid var(--btn-outline-border);
  outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  *,
  ::before,
  ::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
