/* DHV canonical type — SELF-HOSTED. Zero remote font origins by law.
 * GENERATED by _Shared/fonts/build_type_css.js — do not hand-edit.
 * Faces: Barlow (display) + Public Sans (body), both SIL OFL 1.1 (see OFL-*.txt).
 * JD ruling 2026-07-28: Inter and system-ui are BANNED as the primary face —
 * they are the stock generative-AI look. SITE-FONT-01.
 * The *-Fallback faces below are local Arial re-metricked from the real binaries,
 * so the swap from fallback to webfont shifts nothing (zero CLS).
 */
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('./Barlow-SemiBold.woff2') format('woff2');
}
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('./Barlow-Bold.woff2') format('woff2');
}
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('./PublicSans-Variable.woff2') format('woff2-variations'), url('./PublicSans-Variable.woff2') format('woff2');
}
@font-face {
  font-family: 'Barlow Fallback';
  src: local('Arial');
  size-adjust: 118.2584%;
  ascent-override: 84.5606%;
  descent-override: 16.9121%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Public Sans Fallback';
  src: local('Arial');
  size-adjust: 123.3558%;
  ascent-override: 77.013%;
  descent-override: 18.2399%;
  line-gap-override: 0%;
}
:root {
  --sans: 'Public Sans', 'Public Sans Fallback', Arial, sans-serif;
  --display: 'Barlow', 'Barlow Fallback', Arial, sans-serif;
  --font-body: var(--sans);
  --font-display: var(--display);
}

/* ── Glyph substitutes — SITE-FONT-01 law L4 ─────────────────────────────────
 * Barlow and Public Sans contain NO arrows, check marks or geometric shapes
 * (verified against the shipped cmaps 2026-08-10: 525 and 565 mapped codepoints).
 * A literal "→"/"✓", an entity "&rarr;", or a CSS escape content:"\2713" all make
 * the browser silently swap that ONE character to a system font — Segoe UI Symbol
 * on Windows, something else on Mac/iOS — so the mark changed shape per device on
 * customer-facing pages. These masks are drawn instead, and inherit the colour and
 * size of surrounding text via currentColor. Brand law permits SVG for chrome
 * icons <= 48px. Enforced by _Shared/glyph_coverage_gate.js.
 *
 * Use:  <i class="gi gi-arrow-right" aria-hidden="true"></i>
 *       …and give the parent a real accessible label when the icon carries meaning.
 * In CSS, where content:"" cannot hold markup, reuse the same artwork:
 *       .row::before{content:"";display:inline-block;width:.8em;height:.8em;
 *         background-color:currentColor;mask:var(--gi-check) no-repeat center/contain}
 */
:root {
  --gi-arrow-right: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12h15'/%3E%3Cpath d='M13 6l6 6-6 6'/%3E%3C/svg%3E"); /* U+2192 → */
  --gi-arrow-left: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 12H5'/%3E%3Cpath d='M11 6l-6 6 6 6'/%3E%3C/svg%3E"); /* U+2190 ← */
  --gi-arrow-up: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20V5'/%3E%3Cpath d='M6 11l6-6 6 6'/%3E%3C/svg%3E"); /* U+2191 ↑ */
  --gi-arrow-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 4v15'/%3E%3Cpath d='M6 13l6 6 6-6'/%3E%3C/svg%3E"); /* U+2193 ↓ */
  --gi-arrow-corner-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6h10a3 3 0 0 1 3 3v8'/%3E%3Cpath d='M13 13l4 4 4-4'/%3E%3C/svg%3E"); /* U+21B4 ↴ */
  --gi-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12.5l5 5L20 6.5'/%3E%3C/svg%3E"); /* U+2713 ✓ */
  --gi-cross: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 6l12 12'/%3E%3Cpath d='M18 6L6 18'/%3E%3C/svg%3E"); /* U+2717 ✗ */
  --gi-dot: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Ccircle cx='12' cy='12' r='5.5'/%3E%3C/svg%3E"); /* U+25CF ● */
  --gi-tri-up: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='M12 6l7 12H5z'/%3E%3C/svg%3E"); /* U+25B2 ▲ */
  --gi-tri-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='M12 18L5 6h14z'/%3E%3C/svg%3E"); /* U+25BC ▼ */
  --gi-play: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='M7.5 4.5l12 7.5-12 7.5z'/%3E%3C/svg%3E"); /* U+25B6 ▶ */
  --gi-warn: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3.2L21.5 20H2.5z'/%3E%3Cpath d='M12 9.5v4.2'/%3E%3Cpath d='M12 17h.01'/%3E%3C/svg%3E"); /* U+26A0 ⚠ */
  --gi-bolt: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23000'%3E%3Cpath d='M13.5 2L4.5 13.5H10l-1.5 8.5 9.5-12H12z'/%3E%3C/svg%3E"); /* U+26A1 ⚡ */
}
.gi {
  display: inline-block;
  width: 1em;
  height: 1em;
  vertical-align: -0.125em;
  flex: none;
  background-color: currentColor;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center;  mask-position: center;
  -webkit-mask-size: contain;     mask-size: contain;
}
.gi-arrow-right{ /* U+2192 → */ -webkit-mask-image: var(--gi-arrow-right); mask-image: var(--gi-arrow-right); }
.gi-arrow-left{ /* U+2190 ← */ -webkit-mask-image: var(--gi-arrow-left); mask-image: var(--gi-arrow-left); }
.gi-arrow-up{ /* U+2191 ↑ */ -webkit-mask-image: var(--gi-arrow-up); mask-image: var(--gi-arrow-up); }
.gi-arrow-down{ /* U+2193 ↓ */ -webkit-mask-image: var(--gi-arrow-down); mask-image: var(--gi-arrow-down); }
.gi-arrow-corner-down{ /* U+21B4 ↴ */ -webkit-mask-image: var(--gi-arrow-corner-down); mask-image: var(--gi-arrow-corner-down); }
.gi-check{ /* U+2713 ✓ */ -webkit-mask-image: var(--gi-check); mask-image: var(--gi-check); }
.gi-cross{ /* U+2717 ✗ */ -webkit-mask-image: var(--gi-cross); mask-image: var(--gi-cross); }
.gi-dot{ /* U+25CF ● */ -webkit-mask-image: var(--gi-dot); mask-image: var(--gi-dot); }
.gi-tri-up{ /* U+25B2 ▲ */ -webkit-mask-image: var(--gi-tri-up); mask-image: var(--gi-tri-up); }
.gi-tri-down{ /* U+25BC ▼ */ -webkit-mask-image: var(--gi-tri-down); mask-image: var(--gi-tri-down); }
.gi-play{ /* U+25B6 ▶ */ -webkit-mask-image: var(--gi-play); mask-image: var(--gi-play); }
.gi-warn{ /* U+26A0 ⚠ */ -webkit-mask-image: var(--gi-warn); mask-image: var(--gi-warn); }
.gi-bolt{ /* U+26A1 ⚡ */ -webkit-mask-image: var(--gi-bolt); mask-image: var(--gi-bolt); }
