/* Astradian GP v3.2.0 (build spec v6, section 5; 3.1.0 desktop first: perfect at 1,440/1,920, okay at 390;
   3.1.3 the owner's tokens, completed: units, comments, one duplicate rule removed; 3.2.0 the block
   editor: the service cards' astr-cards wrapper and the list-item rule, no value changed).
   Light theme only. Values are the v6 direction review's (the .site block of the mock).
   Content classes: exactly the frozen list in docs/components.md. Theme chrome uses th-*.
   Red has two roles: the primary action ("Get a free estimate", any button to /contact/) and the
   single figure accent (--fig-accent). Nothing else is red. */

@font-face { font-family: "Open Sans"; font-style: normal; font-weight: 400; font-display: swap; src: url("../fonts/open-sans-latin-400-normal.woff2") format("woff2"); }
@font-face { font-family: "Open Sans"; font-style: italic; font-weight: 400; font-display: swap; src: url("../fonts/open-sans-latin-400-italic.woff2") format("woff2"); }
@font-face { font-family: "Open Sans"; font-style: normal; font-weight: 600; font-display: swap; src: url("../fonts/open-sans-latin-600-normal.woff2") format("woff2"); }
@font-face { font-family: "Open Sans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/open-sans-latin-700-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; font-display: swap; src: url("../fonts/ibm-plex-mono-latin-400-normal.woff2") format("woff2"); }

/* ---------------------------------------------------------------- tokens (5.2; owner's parameterized settings, 2026-10-03) */
/* Every design value the owner set lives here; components read these tokens instead of repeating the value.
   Phone values (below 760 px) are reassigned in the "Phone tokens" block of the responsive section. */
:root {
	/* Color palette */
	--navy: #08094b;
	--ink: #111427;
	--text: #262838;
	--muted: #585c70;
	--rule: #e1e2ea;
	--pale: #eef0f8;
	--paper: #ffffff;
	--line: #b9bccb;
	--tint: #dcdff0;
	--red: #c8102e;
	--on-red: #ffffff;

	/* Theme chrome colors: text on the navy hero, the pressed primary button */
	--on-navy: #dadcf0;
	--red-press: #a30d25;

	/* Typography */
	--sans: "Open Sans", -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
	--mono: "IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace;
	--font-size-base: 16px;       /* body text below 1,200 px; the floor of the desktop clamp */
	--line-height-base: 1.55;
	--fw-normal: 400;
	--fw-semibold: 600;
	--fw-bold: 700;
	--code-box-size: .86rem;      /* code blocks: the pre (its line height; code.css reads it too) */
	--code-size: 15px;            /* code blocks: the code text (GeneratePress's code size, made explicit) */

	/* Type scale (em of the body text; phone: --fs-h1, --fs-h2, --fs-lede) */
	--fs-h1: 2.6em;
	--fs-h2: 1.75em;
	--fs-h2-article: 1.5em;       /* section headings in case studies and posts */
	--fs-h3: 1.3em;
	--fs-h4: 1.06em;              /* also the h4 look: text cards, the contracting card, Articles cards, the takeaways label */
	--fs-lede: 1.18em;

	/* Heading max-widths (ch: characters of the heading's own font) */
	--h1-max-width: 40ch;
	--h1-max-width-case: 40ch;    /* case-study head */
	--h1-max-width-post: 40ch;    /* post head */
	--h2-max-width: 60ch;
	--h2-max-width-article: 40ch; /* case-study and post section headings */
	--h3-max-width: 60ch;
	--h4-max-width: 60ch;
	--lead-heading-max-width: 40ch; /* the lead card's heading (Home, the services hub) */

	/* Layout and spacing */
	--wrap: 1180px;               /* content width */
	--gutter: clamp(16px, 2.78vw, 40px); /* 16 px at 390, 40 px at 1,440 */
	--edge: max(var(--gutter), calc((100% - var(--wrap)) / 2)); /* the wrap's side margin */
	--sec-y: 2em;                 /* section padding, top and bottom (phone: 2.4em; case studies: 2.6em, see templates) */

	/* Content measures */
	--measure-narrow: 34em;       /* hero and case-study ledes, contracting seal caption */
	--measure-prose: 40em;        /* paragraphs and lists: about 83 characters at 1,440 */
	--measure-content: 44em;      /* the case-study and post column, the closing band text */
	--measure-wide: 46em;         /* captions, FAQ, facts tables, person block */

	/* Components and borders */
	--radius-sm: .2em;
	--radius-code: 3px;
	--strong-border-width: 2px;
	--accent-border-width: 3px;
	--accent-border-width-strong: 4px;
	--target-min: 24px;           /* minimum target size (WCAG 2.2, 2.5.8) */
	--focus-outline-width: 3px;
	--focus-outline-offset: 2px;
	--focus-outline: var(--focus-outline-width) solid var(--navy);

	/* Buttons */
	--button-pad: .78em 1.25em;         /* primary (red) */
	--button-pad-outline: .66em 1.1em;  /* navy outline: less padding for the 2 px border */
	--button-pad-compact: .55em .95em;  /* the header's Free estimate */

	/* Figure tokens (4.6): figures paint with these only */
	--fig-ink: var(--ink);
	--fig-muted: var(--muted);
	--fig-surface: var(--paper);
	--fig-tint: var(--tint);
	--fig-rule: var(--line);
	--fig-accent: var(--red);
	--fig-on-accent: var(--on-red);
	--fig-photo-line: var(--paper);
	--fig-photo-halo: var(--ink);
	color-scheme: light;
}

/* ---------------------------------------------------------------- base */
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; background: var(--paper); color: var(--text); font-family: var(--sans); font-size: var(--font-size-base); line-height: var(--line-height-base); }
/* Desktop first: the type grows with the frame from 1,200 px (18 px at 1,440, 19 px from 1,520). */
@media (min-width: 1200px) { body { font-size: clamp(var(--font-size-base), 1.25vw, 19px); } }
/* Short pages (404, Privacy): the footer sits at the bottom of the window. */
body { min-height: 100vh; display: flex; flex-direction: column; }
body > .site { flex: 1 0 auto; }
body, button, input, select, textarea { font-family: var(--sans); }
*, *::before, *::after { box-sizing: border-box; }

h1, h2, h3, h4 { font-family: var(--sans); font-weight: var(--fw-bold); text-wrap: balance; margin: 0 0 .5em; }
h1, h2 { hyphens: manual; word-break: keep-all; }
h1 { font-size: var(--fs-h1); line-height: 1.1; letter-spacing: -.02em; color: var(--navy); max-width: var(--h1-max-width); }
h2 { font-size: var(--fs-h2); line-height: 1.2; letter-spacing: -.01em; color: var(--navy); max-width: var(--h2-max-width); }
h3 { font-size: var(--fs-h3); line-height: 1.25; color: var(--ink); max-width: var(--h3-max-width); }
h4 { font-size: var(--fs-h4); line-height: 1.3; color: var(--ink); max-width: var(--h4-max-width); }
p, ul, ol, dl, table, pre, blockquote { margin: 0 0 1em; }
/* :is(ul, ol) li, not li: the block editor's reset (:where(.editor-styles-wrapper) ul li) would outrank a
   one-element rule in the editor canvas. */
:is(ul, ol) li { margin-bottom: .3em; }
/* Lists keep their markers inside the text column (GeneratePress indents with a margin, reset above). */
.entry-content :is(ul, ol) { padding-left: 1.4em; }
strong, b { font-weight: var(--fw-bold); }
img { max-width: 100%; height: auto; }

a { color: var(--navy); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: .2em; }
a:hover { text-decoration-thickness: 2px; }
:focus-visible { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); }
a:focus-visible, button:focus-visible, summary:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible { outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); }

code, kbd, pre, samp { font-family: var(--mono); }
:not(pre) > code { font-size: .88em; background: var(--pale); border-radius: var(--radius-code); padding: .05em .3em; overflow-wrap: anywhere; }
pre { font-size: var(--code-box-size); line-height: var(--line-height-base); background: var(--pale); padding: 1em 1.2em; overflow-x: auto; }
.codehilite code { font-size: var(--code-size); }

/* Tables: rules only (no zebra, no GeneratePress box borders), a pale header, padded cells. */
table { width: 100%; border-collapse: collapse; font-size: .95em; }
table, th, td { border: 0; }
th, td { text-align: left; vertical-align: top; padding: .6em 1em .6em .8em; border-bottom: 1px solid var(--rule); }
th { font-weight: var(--fw-semibold); color: var(--ink); }
thead th { background: var(--pale); color: var(--ink); font-weight: var(--fw-semibold); font-size: .9em; border-bottom: var(--strong-border-width) solid var(--navy); vertical-align: bottom; }
td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; }
.astr-t-specialist .astr-table th:first-child { width: 22%; }

figure { margin: 1.6em 0 0; }
figcaption { font-size: .92em; color: var(--text); margin-top: .7em; max-width: var(--measure-wide); }
figcaption b { color: var(--ink); margin-right: .35em; }
blockquote { border-left: var(--accent-border-width) solid var(--navy); padding: .1em 0 .1em 1.1em; color: var(--muted); }

.screen-reader-text { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.skip-link:focus { position: fixed !important; z-index: 1000; left: 8px; top: 8px; width: auto; height: auto; clip: auto; background: var(--paper); color: var(--navy); padding: .6em 1em; }

/* ---------------------------------------------------------------- buttons (red = the primary action only) */
.astr-button, .th-cta {
	display: inline-block; background: var(--red); color: var(--on-red); font-weight: var(--fw-bold); line-height: 1.2;
	padding: var(--button-pad); border-radius: var(--radius-sm); text-decoration: none; border: 0;
}
.astr-button:hover, .th-cta:hover { background: var(--red-press); color: var(--on-red); text-decoration: none; }
/* Any other button-styled link (the statement PDF, a secondary destination) is navy outline, never red. */
a.astr-button:not([href^="/contact"]) { background: transparent; color: var(--navy); border: var(--strong-border-width) solid var(--navy); padding: var(--button-pad-outline); }
a.astr-button:not([href^="/contact"]):hover { background: var(--pale); color: var(--navy); }
.astr-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 1em 1.6em; margin: 1.4em 0 0; }
.astr-actions a:not(.astr-button) { font-weight: var(--fw-semibold); }

/* ---------------------------------------------------------------- GeneratePress frame: full width, no containers */
.site.grid-container, .container.grid-container, .site-content, .content-area, .site-main, .inside-article,
.one-container .site-content, .separate-containers .inside-article, .separate-containers .site-main, .site-footer {
	max-width: none; width: auto; margin: 0; padding: 0; background: transparent; border: 0;
}
.site-content { display: block; }
.separate-containers .site-main > *, .one-container .site-main > * { margin-bottom: 0; }
.page .entry-header, .page .featured-image, .single-post .featured-image, .page-header-image, .page-header-image-single { display: none; }
.entry-content { margin: 0 !important; }
.main-navigation, .site-info, .footer-widgets { display: none; }

/* ---------------------------------------------------------------- header (theme chrome, 2.2) */
.th-header { position: relative; z-index: 50; background: var(--paper); border-bottom: 1px solid var(--rule); }
.th-header-in { display: flex; align-items: center; gap: 1.6em; padding: .85em var(--edge); }
.th-logo { display: block; flex: none; line-height: 0; }
.th-logo img { display: block; height: 34px; width: auto; }
.th-logo span { font-weight: var(--fw-bold); color: var(--navy); font-size: 1.1em; line-height: 1.2; }
.th-nav { margin-left: auto; }
.th-nav ul, .th-menu ul { list-style: none; margin: 0; padding: 0; }
.th-nav ul { display: flex; gap: .2em 1.6em; }
.th-nav li, .th-menu li { margin: 0; }
.th-nav a { display: block; color: var(--ink); text-decoration: none; font-size: .95em; padding: .45em 0; }
.th-nav a:hover { color: var(--navy); box-shadow: inset 0 -2px 0 var(--line); }
.th-nav .current-menu-item > a, .th-nav .current-menu-ancestor > a, .th-nav .current-page-ancestor > a, .th-nav a[aria-current="page"] { color: var(--navy); box-shadow: inset 0 -2px 0 var(--navy); }
.th-cta { flex: none; font-size: .9em; padding: var(--button-pad-compact); white-space: nowrap; }
.th-menu { display: none; }
.th-menu > summary { list-style: none; cursor: pointer; border: 1px solid var(--navy); color: var(--navy); font-weight: var(--fw-semibold); font-size: .9em; padding: .35em .75em; border-radius: var(--radius-sm); min-height: 2.2em; display: flex; align-items: center; }
.th-menu > summary::-webkit-details-marker { display: none; }
.th-menu[open] > summary { background: var(--pale); }
.th-menu > nav { position: absolute; left: 0; right: 0; top: 100%; background: var(--paper); border-bottom: var(--strong-border-width) solid var(--navy); box-shadow: 0 1px 0 var(--rule); padding: .4em var(--edge) .8em; }
.th-menu a { display: block; padding: .7em 0; color: var(--ink); text-decoration: none; border-top: 1px solid var(--rule); }
.th-menu li:first-child a { border-top: 0; }
.th-menu .current-menu-item > a, .th-menu .current-page-ancestor > a, .th-menu a[aria-current="page"] { color: var(--navy); font-weight: var(--fw-bold); }

/* ---------------------------------------------------------------- footer (theme chrome, 2.2) */
.th-footer { border-top: 1px solid var(--rule); padding: 1.6em var(--edge) 2em; font-size: .85em; color: var(--muted); background: var(--paper); }
.th-footer p { margin: 0; }
.th-footer .th-what { color: var(--text); font-weight: var(--fw-semibold); margin-bottom: .6em; }
.th-footer ul { list-style: none; margin: 0 0 .9em; padding: 0; display: flex; flex-wrap: wrap; gap: .1em 1.5em; }
.th-footer li { margin: 0; }
.th-footer a { color: var(--muted); display: inline-block; padding: .3em 0; text-decoration: none; }
.th-footer a:hover { color: var(--navy); text-decoration: underline; }

/* ---------------------------------------------------------------- page frame: every block on the 1,180 px wrap */
.page .entry-content > * { margin-left: var(--edge); margin-right: var(--edge); }
/* Bands with a background run edge to edge; their content sits on the wrap. */
.page .entry-content > :is(.astr-hero, .astr-sec, .astr-offerband, .astr-cta) { margin-left: 0; margin-right: 0; padding-left: var(--edge); padding-right: var(--edge); }

/* ---------------------------------------------------------------- page head and hero (generated, 4.4) */
.astr-pagehead { padding: 3em 0 2.2em; }
.astr-pagehead h1 { margin-bottom: 0; }
.astr-crumb { font-size: .88em; color: var(--muted); margin: 0 0 1em; }
.astr-crumb a { color: var(--muted); }
.astr-crumb a:hover { color: var(--navy); }
.astr-lede { font-size: var(--fs-lede); line-height: 1.5; color: var(--text); max-width: var(--measure-prose); margin: .8em 0 0; }

.astr-hero { position: relative; overflow: hidden; background: var(--navy); color: var(--paper); padding-top: 5em; padding-bottom: 5em; isolation: isolate; }
.astr-hero::before { content: ""; position: absolute; inset: 0; z-index: -1; background: url("hero-stars.svg") center / cover no-repeat;
	-webkit-mask-image: linear-gradient(90deg, transparent 62%, black 82%); mask-image: linear-gradient(90deg, transparent 62%, black 82%); }
.astr-hero::after { content: ""; position: absolute; z-index: -1; right: var(--edge); top: 3.2em; width: 17em; aspect-ratio: 260 / 150; background: url("satellite.svg") center / contain no-repeat; }
.astr-hero > * { max-width: 54em; }
/* Capped at 3.4rem so the first line clears the satellite when the body reaches 19 px (from 1,520 px). */
.astr-hero h1 { color: var(--paper); font-size: min(3.2em, 3.4rem); max-width: none; margin: 0; }
.astr-hero h1 span { display: block; }
.astr-hero .astr-lede { color: var(--on-navy); font-size: 1.15em; max-width: var(--measure-narrow); margin-top: 1em; }
.astr-hero .astr-actions { margin-top: 1.7em; }
.astr-hero a:not(.astr-button) { color: var(--paper); }
.astr-hero :focus-visible { outline-color: var(--paper); }

/* ---------------------------------------------------------------- sections */
.astr-sec { padding-top: var(--sec-y); padding-bottom: var(--sec-y); }
.astr-sec--alt { background: var(--pale); }
/* Consecutive bands (two figure bands in a row) alternate pale and white, so they never merge into one slab. */
.astr-sec--alt + .astr-sec--alt { background: var(--paper); }
.astr-pagehead + .astr-sec:not(.astr-sec--alt) { padding-top: .2em; }
/* Two plain sections in a row read as one band: no double gap. */
.astr-sec:not(.astr-sec--alt) + .astr-sec:not(.astr-sec--alt) { padding-top: 0; }
.astr-sec > h2 { margin-bottom: .7em; }
.astr-sec > h2 + p { margin-top: -.1em; }
/* Reading measure 70-85 characters at 1,440 (owner ruling, desktop first): 40em, 720 px at 18 px. */
.astr-sec > :is(p, ul, ol) { max-width: var(--measure-prose); }
.astr-sec > :last-child { margin-bottom: 0; }
.astr-sec > h3 { margin-top: 1.6em; }
.astr-sec > * + h2 { margin-top: 1.8em; }
.astr-sec > figure, .astr-cards > .astr-lead { margin-bottom: 1.6em; }
/* Service cards (3.2.0): the lead card and the text cards in one astr-cards wrapper (one block in the
   editor); the text cards sit three across. The :has() form styles pages published before the wrapper. */
.astr-sec:has(> .astr-tcard), .astr-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 2.4em; align-items: start; }
.astr-sec:has(> .astr-tcard) > *, .astr-cards > * { grid-column: 1 / -1; }
.astr-sec:has(> .astr-tcard) > .astr-tcard, .astr-cards > .astr-tcard { grid-column: auto; margin-top: 2.4em; }

/* ---------------------------------------------------------------- home blocks */
.astr-seals { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 1.4em 3.2em; padding: 2.6em 0; text-align: center; }
.astr-seals img { display: block; width: 6.4em; height: 6.4em; object-fit: contain; flex: none; }
.astr-seals > p { flex-basis: 100%; margin: .2em auto 0; max-width: var(--measure-prose); color: var(--ink); font-size: 1.02em; font-weight: var(--fw-semibold); }
.astr-seals > p a { white-space: nowrap; }
.astr-offerband { margin: 0; padding-top: 1.1em; padding-bottom: 1.1em; background: var(--pale); color: var(--text); font-size: .95em; text-align: center; }

.astr-proof { display: grid; grid-template-columns: minmax(0, 1.85fr) minmax(0, 1fr); grid-template-rows: 1fr 1fr; column-gap: 2.6em; align-items: start; }
.astr-proof > h2 { grid-column: 2; grid-row: 1; align-self: end; position: relative; z-index: 1; font-size: 1.9em; margin: 0; }
.astr-proof > figure { grid-column: 1 / -1; grid-row: 1 / 3; margin: 0; display: grid; grid-template-columns: subgrid; grid-template-rows: subgrid; align-items: center; }
.astr-proof > figure > svg { grid-column: 1; grid-row: 1 / 3; }
.astr-proof > figure > figcaption { grid-column: 2; grid-row: 2; align-self: start; margin-top: 1em; font-size: .95em; }

.astr-lead { display: grid; grid-template-columns: minmax(0, 2.1fr) minmax(0, 1fr); gap: 2.2em; align-items: center; margin: 1.4em 0 0; }
.astr-lead > svg { background: var(--paper); padding: 1.4em; border-top: var(--accent-border-width) solid var(--navy); max-width: none !important; }
.astr-lead > figcaption { margin: 0; max-width: none; font-size: 1em; }
/* The lead card heading is an h3 under a section h2 (home), or an h2 where it opens the page (hub). */
.astr-lead :is(h2, h3) { font-size: 1.55em; line-height: 1.25; letter-spacing: normal; color: var(--ink); max-width: var(--lead-heading-max-width); margin: 0; }
.astr-lead figcaption p { margin: .9em 0 0; font-weight: var(--fw-semibold); color: var(--navy); font-size: 1.08em; }
.astr-lead figcaption a { display: inline-block; margin-top: 1.1em; font-weight: var(--fw-semibold); }
.astr-lead figcaption p a { margin-top: 0; }

.astr-tcard { border-top: var(--accent-border-width) solid var(--navy); padding-top: .9em; }
.astr-tcard :is(h3, h4) { font-size: var(--fs-h4); line-height: 1.3; margin: 0; }
.astr-tcard p { margin: .45em 0 0; font-size: .95em; font-weight: var(--fw-semibold); color: var(--navy); }
.astr-tcard a { display: inline-block; margin-top: .55em; font-weight: var(--fw-semibold); }
.astr-tcard p a { margin-top: 0; }

.astr-split { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); gap: 3em; align-items: start; }
.astr-split > div > :first-child { margin-top: 0; }
.astr-split > div > p { max-width: var(--measure-prose); }
.astr-cocard { background: var(--paper); border: 1px solid var(--rule); border-top: var(--accent-border-width-strong) solid var(--navy); padding: 1.4em 1.5em; }
/* The card heading is an h2 for the heading order; it keeps the h4 look. */
.astr-cocard :is(h2, h4) { font-size: var(--fs-h4); line-height: 1.3; letter-spacing: normal; color: var(--ink); max-width: none; margin: 0 0 .5em; }
.astr-cocard .astr-facts { margin: 0; font-size: .95em; }
.astr-cocard .astr-facts th, .astr-cocard .astr-facts td { border-bottom: 0; padding: .2em 1em .2em 0; }
.astr-cocard .astr-facts th { width: 6.5em; font-size: .9em; font-weight: var(--fw-normal); }
.astr-cocard .astr-facts tr:nth-child(-n+2) td { font-family: var(--mono); font-size: .94em; }
.astr-cocard .astr-actions { margin-top: 1.1em; }

/* ---------------------------------------------------------------- hub blocks */
.astr-sec:not(.astr-sec--alt) + .astr-band:not(.astr-sec--alt) > :first-child { border-top: 1px solid var(--rule); padding-top: 2em; }
.astr-band > p:has(> img + img) { display: grid; grid-template-columns: minmax(0, 1.34fr) minmax(0, .83fr) minmax(0, 1.3fr); gap: .6em; max-width: none; margin: 0 0 1em; }
.astr-band img { display: block; width: 100%; height: 15em; object-fit: cover; }
.astr-band > h3 { margin: 1em 0 .3em; }
.astr-band > p:last-child a { font-weight: var(--fw-semibold); }
/* Fallback if each image arrives in its own paragraph. */
.astr-band:has(> p > img:only-child) { display: grid; grid-template-columns: minmax(0, 1.34fr) minmax(0, .83fr) minmax(0, 1.3fr); column-gap: .6em; }
.astr-band:has(> p > img:only-child) > * { grid-column: 1 / -1; }
.astr-band:has(> p > img:only-child) > p:has(> img:only-child) { grid-column: auto; margin: 0; }

/* ---------------------------------------------------------------- FAQ, closing band */
.astr-faq { margin-top: 2.6em; max-width: var(--measure-wide); }
.astr-faq details { border-top: 1px solid var(--rule); padding: .75em 0; }
.astr-faq details:last-child { border-bottom: 1px solid var(--rule); }
.astr-faq summary { font-weight: var(--fw-semibold); color: var(--ink); cursor: pointer; min-height: var(--target-min); }
.astr-faq summary:hover { color: var(--navy); }
.astr-faq details p { margin: .45em 0 0; max-width: 42em; }
.astr-sec > .astr-faq:first-child { margin-top: 0; }
.page .entry-content > .astr-faq { margin-top: 2.4em; margin-bottom: 3em; }
/* A page that ends on an actions row (the statement's PDF button) keeps space above the footer. */
.page .entry-content > .astr-actions:last-child { margin-bottom: 4em; }

.astr-cta { background: var(--pale); padding-top: 3.4em; padding-bottom: 3.4em; }
.astr-cta h2 { margin: 0; }
.astr-cta p { max-width: var(--measure-content); margin: .8em 0 0; }
.astr-cta .astr-actions { margin-top: 1.9em; }
.astr-sec--alt + .astr-cta { border-top: 1px solid var(--line); }

/* ---------------------------------------------------------------- case studies: head, cards */
.astr-factline { font-size: .92em; color: var(--muted); max-width: var(--measure-prose); margin: 1.1em 0 0; }
.astr-tiles { display: grid; grid-template-columns: repeat(2, minmax(0, 20em)); gap: 2em 3em; margin: 2em 0 0; }
.astr-tile { border-top: var(--accent-border-width) solid var(--navy); padding-top: .7em; }
.astr-tile b { display: block; font-size: 2em; font-weight: var(--fw-bold); color: var(--navy); line-height: 1.1; letter-spacing: -.01em; }
.astr-tile span { display: block; margin-top: .3em; color: var(--text); }
.astr-pagehead .astr-factline, .astr-pagehead .astr-tiles { margin-left: 0; }
.page .entry-content > .astr-tiles { margin-bottom: 1.4em; }

.astr-cases { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 2em 2.2em; margin: 2em 0 0; }
/* Exactly four cards: 2 x 2 above phone width, so no card sits alone on a row (three keep three columns). */
@media (min-width: 760px) {
	.astr-cases:has(> .astr-case:nth-child(4):last-child) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.astr-case { display: flex; flex-direction: column; gap: .35em; color: var(--text); text-decoration: none; background: var(--paper); border: 1px solid var(--rule); border-top: var(--accent-border-width) solid var(--navy); padding: 1.2em 1.4em 1.4em; }
.astr-case > * { margin: 0; }
.astr-case > span { font-size: .85em; color: var(--muted); }
.astr-case h3 { font-size: 1.15em; line-height: 1.3; color: var(--navy); margin: .1em 0 .2em; }
.astr-case p { font-size: .93em; color: var(--muted); }
.astr-case p:last-child { font-size: .98em; font-weight: var(--fw-semibold); color: var(--navy); margin-top: .2em; }
.astr-case:hover h3, .astr-case:focus-visible h3 { text-decoration: underline; text-underline-offset: .2em; }
.astr-case:hover { border-color: var(--line); border-top-color: var(--navy); }
/* Featured article cards: the card image comes first, in a panel 10.5em tall. */
.astr-case > :is(svg, img), .astr-case > figure:first-child { width: calc(100% + 2.8em); max-width: none; height: 10.5em; margin: -1.2em -1.4em .6em; background: var(--pale); border-bottom: 1px solid var(--rule); }
.astr-case > svg { padding: 1em; }
.astr-case > img { display: block; object-fit: cover; object-position: 50% 40%; background: var(--ink); }
.astr-case > figure:first-child { display: flex; align-items: center; justify-content: center; overflow: hidden; }
.astr-case > figure:first-child > svg { height: 100%; width: auto; max-width: 100%; padding: 1em; }
.astr-case > figure:first-child > img { width: 100%; height: 100%; object-fit: cover; }
.astr-case > figure:first-child > figcaption { display: none; }
/* Service pages: engineering write-ups after the cards. */
.astr-sec > .astr-cases + h3, .page .entry-content > .astr-cases + h3 { margin-top: 2em; }
.astr-sec > h3 + ul { list-style: none; padding: 0; display: grid; gap: .55em; }

/* ---------------------------------------------------------------- tables, facts, person */
.astr-table { margin: 1.4em 0; }
.astr-table table { margin: 0; }
/* Below 1,024 px a wide table scrolls inside its own box, never the page. */
@media (max-width: 1023.98px) {
	.astr-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }
	.astr-table table { min-width: 34em; }
}
/* From 1,024 px the headers stay on one line (they are short labels; the body cells wrap). */
@media (min-width: 1024px) { thead th { white-space: nowrap; } }
/* No GeneratePress table borders on the facts tables (Home and Contracting cards, About); the
   row rules below are ours. */
.astr-facts, .astr-facts th, .astr-facts td { border: 0; }
.astr-facts { width: 100%; max-width: var(--measure-wide); border-collapse: collapse; font-size: .97em; margin: 1.4em 0; }
.astr-facts th, .astr-facts td { text-align: left; vertical-align: top; padding: .55em 1em .55em 0; border-bottom: 1px solid var(--rule); }
.astr-facts th { width: 12em; color: var(--muted); font-weight: var(--fw-semibold); font-size: .92em; }
.astr-facts td { color: var(--ink); font-variant-numeric: tabular-nums; }
.astr-facts tr:last-child th, .astr-facts tr:last-child td { border-bottom: 0; }
.astr-person { display: grid; grid-template-columns: 180px minmax(0, 1fr); gap: 1.6em; align-items: start; margin: 2em 0; max-width: var(--measure-wide); }
.astr-person img { width: 180px; height: 180px; object-fit: cover; display: block; }
.astr-person h3 { margin: 0; }
.astr-person p { margin: .35em 0 0; max-width: 36em; }
.astr-person p:nth-of-type(1) { color: var(--muted); margin-top: .15em; }

/* ---------------------------------------------------------------- statement page (statement.css styles the block) */
.astr-statement { margin-top: 1em; margin-bottom: 2em; }
/* Contracting: the statement thumbnail (the first image, a paragraph or a figure) sits beside the actions row after it. */
.astr-t-contracting :is(p, figure):has(> img):has(+ .astr-actions) { float: left; width: 6.5em; margin-top: .4em; margin-right: 1.2em; margin-bottom: 1em; }
.astr-t-contracting :is(p, figure):has(> img):has(+ .astr-actions) img { display: block; width: 100%; height: auto; border: 1px solid var(--rule); }
.astr-t-contracting :is(p, figure):has(> img):has(+ .astr-actions) figcaption { font-size: .78em; color: var(--muted); margin-top: .3em; }
.astr-t-contracting :is(p, figure):has(> img) + .astr-actions { min-height: 8.4em; margin-top: .4em; overflow: hidden; }
.astr-t-contracting :is(p, figure):has(> img) + .astr-actions + * { clear: both; }

/* ---------------------------------------------------------------- figures (4.6): one family of marks, tokens only */
.fx { display: block; width: 100%; height: auto; margin: 0 auto; overflow: visible; }
.fx text { font-family: var(--sans); font-size: 15px; fill: var(--fig-ink); }
.fx .s13 { font-size: 13px; } .fx .s14 { font-size: 14px; } .fx .s18 { font-size: 18px; } .fx .s19 { font-size: 19px; } .fx .s32 { font-size: 32px; }
.fx .b { font-weight: var(--fw-bold); }
.fx .mu { fill: var(--fig-muted); } .fx .on { fill: var(--fig-on-accent); }
.fx .tick { font-size: 12px; fill: var(--fig-muted); }
.fx .pt { fill: var(--fig-photo-line); stroke: var(--fig-photo-halo); stroke-width: 3.5px; paint-order: stroke; stroke-linejoin: round; font-weight: var(--fw-bold); }
.fx .ptp { fill: var(--fig-photo-line); }
.fx .g { fill: var(--fig-tint); stroke: var(--fig-ink); stroke-width: 1.25; stroke-linejoin: round; }
.fx .ga { fill: var(--fig-accent); stroke: var(--fig-ink); stroke-width: 1.25; }
.fx .g.gate { stroke: var(--fig-accent); stroke-width: 2.5; }
.fx .gd { fill: none; stroke: var(--fig-muted); stroke-width: 1.25; stroke-dasharray: 4 3; }
.fx .gdl { fill: none; stroke: var(--fig-muted); stroke-width: 1.25; }
.fx .th { fill: none; stroke: var(--fig-ink); stroke-width: 1.25; stroke-linejoin: round; }
.fx .surf0 { fill: none; stroke: var(--fig-ink); stroke-width: 1; }
.fx .rulef { fill: var(--fig-rule); } .fx .muf { fill: var(--fig-muted); } .fx .ink { fill: var(--fig-ink); }
.fx .acc { fill: var(--fig-accent); } .fx .tint { fill: var(--fig-tint); } .fx .dot { fill: var(--fig-surface); }
.fx .ln { fill: none; stroke: var(--fig-ink); stroke-width: 1.5; }
.fx .sp { fill: none; stroke: var(--fig-ink); stroke-width: 2.5; }
.fx .bkd { fill: none; stroke: var(--fig-muted); stroke-width: 2.5; stroke-dasharray: 6 4; }
.fx .bk { fill: none; stroke: var(--fig-muted); stroke-width: 1.5; stroke-dasharray: 5 4; }
.fx .gu, .fx .ld, .fx .fr { fill: none; stroke: var(--fig-rule); stroke-width: 1; }
.fx .ax { fill: none; stroke: var(--fig-ink); stroke-width: 1; }
.fx .dm { fill: none; stroke: var(--fig-ink); stroke-width: 1.25; }
.fx .dma { fill: none; stroke: var(--fig-accent); stroke-width: 2; }
.fx .op { fill: none; stroke: var(--fig-muted); stroke-width: 1.5; }
.fx .hd { fill: var(--fig-ink); } .fx .hdm { fill: var(--fig-muted); } .fx .hda { fill: var(--fig-accent); }
.fx .pacc { fill: none; stroke: var(--fig-accent); stroke-width: 3; stroke-linecap: round; }
.fx .plate { fill: var(--fig-photo-halo); }
.fx .ph { fill: none; stroke: var(--fig-photo-halo); stroke-width: 3.5; stroke-linecap: round; }
.fx .pl { fill: none; stroke: var(--fig-photo-line); stroke-width: 1.5; stroke-linecap: round; }
.fx .pdot { fill: var(--fig-photo-line); stroke: var(--fig-photo-halo); stroke-width: 1.5; }
.fx .srv { fill: var(--fig-surface); stroke: var(--fig-ink); stroke-width: 1; }
.fx .disc { fill: var(--fig-tint); stroke: var(--fig-ink); stroke-width: 1.25; }
.fx .hole { fill: var(--fig-surface); stroke: var(--fig-ink); stroke-width: 1; }
.fx .cont { fill: var(--fig-surface); stroke: var(--fig-accent); stroke-width: 2.5; }
.fx .wall { fill: none; stroke: var(--fig-ink); stroke-width: 6; stroke-linejoin: miter; stroke-linecap: butt; }
.fx .brk { fill: none; stroke: var(--fig-muted); stroke-width: 1.25; }
.fx .rail { fill: var(--fig-tint); stroke: var(--fig-ink); stroke-width: 1; }
.fx .rib { fill: none; stroke: var(--fig-muted); stroke-width: .75; }
.fx .bar { fill: none; stroke: var(--fig-ink); stroke-width: 2; }
/* Phone variants: below 640 px (spec 5.4); fx-wide figures (desktop forms 760-1,000 units wide, whose
   14 px labels would fall under 12 px on tablets) switch below 900 px. */
.m-only { display: none; }
figure > svg.m-only + svg.m-only { margin-top: 1.4em; }
@media (max-width: 899.98px) {
	.fx.fx-wide.d-only { display: none; }
	.fx.fx-wide.m-only { display: block; max-width: 24em; }
}
@media (max-width: 639.98px) {
	.d-only { display: none !important; }
	.m-only { display: block; }
}

/* ---------------------------------------------------------------- templates (5.3) */
/* service: big figures to 60em, left-aligned with the text and the logo */
.astr-t-service .astr-sec > figure { max-width: 60em; margin-left: 0; }
.astr-t-service .astr-sec > figure > figcaption { margin-left: 0; max-width: 47em; }
.astr-t-service .astr-sec > figure > .fx:not(.m-only) { max-width: none; margin-left: 0; }
.astr-t-service .astr-sec > figure > .m-only { max-width: 22em; }

/* case study: head, body column 44em, prose 40em; figures centred on the wrap in their own pale bands */
.astr-t-case-study .astr-pagehead h1 { max-width: var(--h1-max-width-case); }
.astr-t-case-study .astr-pagehead .astr-lede { font-size: 1.2em; max-width: var(--measure-narrow); }
.astr-t-case-study .astr-sec { --sec-y: 2.6em; }
.astr-t-case-study .astr-sec > :not(figure) { max-width: var(--measure-content); }
.astr-t-case-study .astr-sec > :is(p, ul, ol) { max-width: var(--measure-prose); }
.astr-t-case-study .astr-sec > figure { max-width: none; margin: 2em auto 1.6em; }
.astr-t-case-study .astr-sec > figure > figcaption { max-width: var(--measure-wide); margin-left: auto; margin-right: auto; }
/* A figure band (the publisher moves each figure that ends a section into its own astr-sec--alt). */
.astr-sec--alt > figure:only-child { margin-top: 0; margin-bottom: 0; }
.astr-t-case-study .astr-sec > h2 { font-size: var(--fs-h2-article); max-width: var(--h2-max-width-article); }
.astr-t-case-study .entry-content > p:not([class]) { max-width: var(--measure-content); margin-top: 1.6em; }
.astr-t-case-study .entry-content > .astr-tiles { margin-top: 0; margin-bottom: 2.4em; }
/* Figures in the article column align left, as the text does. */
.single-post .entry-content > figure > .fx { margin-left: 0; }
/* The guide line after the FAQ (the publisher puts both in the last section). */
.astr-t-case-study .astr-sec > .astr-faq + p, .astr-t-case-study .entry-content > .astr-faq + p { margin-top: 2em; }

/* case-index and articles: card grid; articles list with top rules */
.astr-t-articles .astr-cases + ul, .astr-t-articles .astr-sec > ul:last-of-type { list-style: none; margin: 2.6em 0 1.4em; padding: 0; max-width: var(--wrap); }
.astr-t-articles .astr-cases + ul li { border-top: 1px solid var(--rule); padding: .85em 0; margin: 0; display: flex; flex-wrap: nowrap; justify-content: space-between; align-items: baseline; gap: .2em 1.5em; }
.astr-t-articles .astr-cases + ul li:last-child { border-bottom: 1px solid var(--rule); }
.astr-t-articles .astr-cases + ul a { font-weight: var(--fw-semibold); text-decoration-color: var(--line); min-width: 0; }
.astr-t-articles .astr-cases + ul a:hover { text-decoration-color: currentColor; }
.astr-t-articles .astr-cases + ul time { font-size: .88em; color: var(--muted); white-space: nowrap; }
.astr-t-articles .astr-case h3 { font-size: var(--fs-h4); }

/* contracting: identifiers card left, teaming and the FAQ right; seals beside their caption */
.astr-t-contracting .astr-split { grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr); }
.astr-t-contracting .astr-seals { margin-top: 1.4em; justify-content: flex-start; text-align: left; gap: 1em 2em; padding: 1.8em 0; border-top: 1px solid var(--rule); border-bottom: 0; }
.astr-t-contracting .astr-seals img { width: 4.6em; height: 4.6em; }
.astr-t-contracting .astr-seals > p { flex: 1 1 18em; flex-basis: auto; margin: 0; max-width: var(--measure-narrow); font-size: .97em; }
.astr-t-contracting .astr-split .astr-faq { margin-top: 2em; }

/* single-column pages */
.astr-t-about .entry-content > :is(p, ul, ol), .astr-t-contact .entry-content > :is(p, ul, ol),
.astr-t-specialist .entry-content > :is(p, ul, ol), .astr-t-plain .entry-content > :is(p, ul, ol),
.astr-t-statement .entry-content > :is(p, ul, ol) { max-width: var(--measure-prose); }
.astr-t-about .entry-content > h2, .astr-t-contact .entry-content > h2, .astr-t-specialist .entry-content > h2,
.astr-t-plain .entry-content > h2 { margin-top: 1.8em; }
.astr-t-contact .entry-content > :last-child, .astr-t-plain .entry-content > :last-child:not(.astr-cta) { margin-bottom: 4em; }

/* ---------------------------------------------------------------- posts (5.3 post) */
.single-post .site-main { padding: 2.4em var(--gutter) 0; }
.single-post .entry-header { display: none; }
.single-post .entry-content { max-width: var(--measure-content); margin: 0 auto !important; }
.single-post .entry-content > :is(p, ul, ol) { max-width: var(--measure-prose); }
.single-post .entry-content > h2 { font-size: var(--fs-h2-article); max-width: var(--h2-max-width-article); margin-top: 1.8em; scroll-margin-top: 1em; }
.single-post .entry-content > h3 { margin-top: 1.5em; }
.single-post .entry-content > figure { margin: 1.8em 0; }
.single-post .entry-content > .astr-crumb { margin-bottom: .8em; }
.th-posthead h1 { font-size: 2.2em; max-width: var(--h1-max-width-post); margin: 0; }
.th-byline { font-size: .9em; color: var(--muted); margin: .9em 0 0; }
.th-byline a { color: var(--muted); }
.astr-tldr { background: var(--pale); padding: 1.2em 1.4em; margin: 2em 0 1.6em; }
.astr-tldr > :first-child { margin-top: 0; font-size: var(--fs-h4); color: var(--ink); }
.astr-tldr ul { margin: .5em 0 0; padding-left: 1.2em; }
.astr-tldr li:last-child { margin-bottom: 0; }
.astr-toc { font-size: .92em; margin: 0 0 1.6em; }
.astr-toc details { border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); padding: .6em 0; }
.astr-toc summary { cursor: pointer; font-weight: var(--fw-semibold); color: var(--ink); min-height: var(--target-min); }
.astr-toc :is(ol, ul) { list-style: none; margin: .5em 0 0; padding: 0; }
.astr-toc li { margin: 0; padding: .35em 0; border-top: 1px solid var(--rule); line-height: 1.35; }
.astr-toc a { color: var(--text); text-decoration: none; }
.astr-toc a:hover { color: var(--navy); text-decoration: underline; }
.single-post .astr-cta { padding: 2em 1.6em; margin: 2.4em 0 0; }
.single-post .astr-cta h2 { font-size: 1.4em; }
.single-post .astr-cases { grid-template-columns: repeat(auto-fit, minmax(16em, 1fr)); }
.single-post .codehilite { margin: 1.4em 0; }
.th-author { display: flex; gap: 1.1em; align-items: flex-start; max-width: var(--measure-content); margin: 2.4em auto 4em; padding: 1.2em 0 0; border-top: 1px solid var(--rule); }
.th-author img { width: 72px; height: 72px; object-fit: cover; border-radius: 50%; flex: none; }
.th-author p { margin: 0 0 .25em; font-size: .93em; }
.th-author p:first-child { font-weight: var(--fw-bold); color: var(--ink); font-size: 1em; }
.single-post footer.entry-meta, .single-post .post-navigation { display: none; }
@media (min-width: 1200px) {
	/* The post grid runs on the 1,180 px wrap: a 14em rail (252 px at most), then a column of 865 px
	   from 1,440 up (the rail and its gap stop growing at 18 px type). */
	.single-post { --rail: min(14em, 252px); --rail-gap: min(3.5em, 63px); }
	.single-post .entry-content { max-width: var(--wrap); display: grid; grid-template-columns: var(--rail) minmax(0, 1fr); column-gap: var(--rail-gap); align-content: start; }
	.single-post .site-main { padding: 2.4em var(--edge) 0; }
	.single-post .entry-content > :is(p, ul, ol) { max-width: var(--measure-prose); }
	.single-post .entry-content > :is(figure, .astr-table, .codehilite) { max-width: 52em; }
	.single-post .astr-tldr { max-width: 48em; }
	.single-post .entry-content > * { grid-column: 2; min-width: 0; }
	.single-post .entry-content > .astr-toc { grid-column: 1; grid-row: 1 / span 400; align-self: start; position: sticky; top: 1.5em; margin-top: 4.6em; }
	/* The rail shows the list open; only where the browser can style ::details-content, else the summary stays clickable. */
	@supports selector(::details-content) {
		.single-post .entry-content > .astr-toc details { border: 0; padding: 0; }
		.single-post .entry-content > .astr-toc details::details-content { content-visibility: visible; display: block; }
		.single-post .entry-content > .astr-toc summary { pointer-events: none; list-style: none; color: var(--muted); font-size: .9em; }
		.single-post .entry-content > .astr-toc summary::-webkit-details-marker { display: none; }
	}
	.single-post .th-author { max-width: var(--wrap); padding-left: calc(var(--rail) + var(--rail-gap)); }
}

/* ---------------------------------------------------------------- contact form (Fluent Forms, 5.8) */
.fluentform { max-width: var(--measure-prose); margin-top: 2em; }
.fluentform .ff-el-group { margin-bottom: 1.2em; }
.fluentform .ff-el-input--label label { font-weight: var(--fw-semibold); color: var(--ink); }
.fluentform .ff-el-form-control { width: 100%; font: inherit; color: var(--ink); background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius-sm); padding: .65em .8em; }
.fluentform .ff-el-form-control:focus { border-color: var(--navy); outline: var(--focus-outline); outline-offset: var(--focus-outline-offset); }
.fluentform .ff-btn-submit, .fluentform .ff-btn-submit:hover { background: var(--red) !important; border: 0 !important; color: var(--on-red) !important; font-weight: var(--fw-bold); border-radius: var(--radius-sm); padding: var(--button-pad); }
.fluentform .ff-btn-submit:hover { background: var(--red-press) !important; }
.fluentform .error, .fluentform .text-danger { color: var(--ink); font-weight: var(--fw-semibold); font-size: .9em; }
.ff-message-success { border: 1px solid var(--rule); border-top: var(--accent-border-width-strong) solid var(--navy); padding: 1em 1.2em; }

/* ---------------------------------------------------------------- 404 */
/* The page's inner wrapper: 1,180 px of content, the 40/16 px gutter, 48 px above. */
.error404 .site-main .inside-article { max-width: calc(var(--wrap) + 2 * var(--gutter)); margin: 0 auto; padding: 3em var(--gutter) 5em; }

/* ---------------------------------------------------------------- responsive */
@media (min-width: 760px) and (max-width: 1199.98px) {
	.astr-hero h1 { max-width: calc(100% - 5.8em); }
}
@media (max-width: 1059.98px) {
	.astr-lead { grid-template-columns: minmax(0, 1fr); gap: 1.2em; }
	.astr-lead > svg { padding: 1em .6em; }
}
@media (max-width: 1023.98px) {
	.astr-cases { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.th-header-in { gap: 1.2em; }
	.th-nav ul { gap: .2em 1.1em; }
}
@media (max-width: 859.98px) {
	.th-nav { display: none; }
	.th-cta { margin-left: auto; }
	.th-menu { display: block; }
}
@media (max-width: 759.98px) {
	/* Phone tokens: section rhythm and the type scale (the desktop values are in :root). */
	:root { --sec-y: 2.4em; --fs-h1: 1.85em; --fs-h2: 1.45em; --fs-lede: 1.08em; }
	.astr-pagehead { padding: 2.2em 0 1.6em; }
	.astr-hero { padding-top: 3.4em; padding-bottom: 2em; }
	.astr-hero h1 { font-size: var(--fs-h1); }
	.astr-hero .astr-lede { font-size: 1.03em; }
	.astr-hero .astr-actions { margin-top: 1.2em; }
	.astr-hero::before { -webkit-mask-image: linear-gradient(180deg, black 0, black 3.6em, transparent 5.4em); mask-image: linear-gradient(180deg, black 0, black 3.6em, transparent 5.4em); }
	.astr-hero::after { width: 6.6em; top: .5em; right: .6em; }
	.astr-seals { gap: .8em 1.2em; padding: 1.4em 0; }
	.astr-seals img { width: 3.9em; height: 3.9em; }
	.astr-offerband { text-align: left; }
	/* phone: image, then the heading, then the caption (the mock's order) */
	.astr-proof { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto auto; }
	.astr-proof > h2 { grid-column: 1; grid-row: 2; font-size: var(--fs-h2); margin: .8em 0 0; }
	.astr-proof > figure { grid-column: 1; grid-row: 1 / 4; }
	.astr-proof > figure > svg { grid-column: 1; grid-row: 1; }
	.astr-proof > figure > figcaption { grid-column: 1; grid-row: 3; margin-top: .6em; }
	.astr-sec:has(> .astr-tcard), .astr-cards { grid-template-columns: minmax(0, 1fr); }
	.astr-sec:has(> .astr-tcard) > .astr-tcard, .astr-cards > .astr-tcard { margin-top: 1.4em; }
	.astr-lead :is(h2, h3) { font-size: 1.3em; }
	.astr-split, .astr-t-contracting .astr-split { grid-template-columns: minmax(0, 1fr); gap: 1.8em; }
	.astr-t-contracting .astr-split > div:first-child { order: 2; }
	.astr-band img { height: 8em; }
	.astr-cta { padding-top: 2.4em; padding-bottom: 2.4em; }
	.astr-tiles { grid-template-columns: minmax(0, 1fr); gap: 1em; }
	.astr-t-articles .astr-cases + ul li { flex-wrap: wrap; }
	.astr-tile b { font-size: 1.7em; }
	.astr-cases { grid-template-columns: minmax(0, 1fr); }
	.astr-case > :is(svg, img), .astr-case > figure:first-child { height: 9.5em; }
	.astr-person { grid-template-columns: minmax(0, 1fr); }
	.astr-t-contracting .astr-seals { padding: 1.6em 0; }
	.astr-t-contracting .astr-seals img { width: 3.7em; height: 3.7em; }
	.astr-t-contracting .astr-seals > p { flex-basis: 100%; }
	.astr-t-case-study .astr-sec > h2 { font-size: 1.35em; }
	.th-posthead h1 { font-size: 1.7em; }
	.astr-button { white-space: normal; }
	/* key/value tables stack label over value */
	.astr-facts, .astr-facts tbody, .astr-facts tr, .astr-facts th, .astr-facts td { display: block; width: auto; }
	.astr-facts tr { border-bottom: 1px solid var(--rule); padding: .55em 0; }
	.astr-facts tr:last-child { border-bottom: 0; }
	.astr-facts th, .astr-facts td { border: 0; padding: 0; }
	.astr-facts th { padding-bottom: .1em; }
	.astr-cocard .astr-facts th { width: auto; }
}
@media (max-width: 420px) {
	.th-header-in { gap: .7em; padding-top: .7em; padding-bottom: .7em; }
	.th-logo img { height: 28px; }
	.th-cta { padding: .5em .75em; font-size: .86em; }
	.th-menu > summary { padding: .3em .6em; font-size: .86em; }
}
@media print {
	.th-header, .th-footer, .astr-cta, .th-menu { display: none; }
}
