/* GENERATED by tools/build_design_tokens.py from design-system/tokens.json - do not hand-edit; edit the tokens and re-run. */

@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 200 900;
  font-display: swap;
  src: url('fonts/SourceSans3VF-Upright.ttf.woff2') format('woff2');
}
@font-face {
  font-family: 'Source Sans Pro';
  font-style: italic;
  font-weight: 200 900;
  font-display: swap;
  src: url('fonts/SourceSans3VF-Italic.ttf.woff2') format('woff2');
}

/* LOCAL ADDITION, 2026-09-04: a metric-matched fallback face for Source Sans
   Pro, so the browser's font-display: swap paint (Arial or a metric-compatible
   clone, before the webfont downloads) reflows to almost nothing when the real
   font lands, instead of shifting text below it. What the overrides actually
   buy, measured (fresh-eyes review 2026-09-04): the LINE BOX matches Source
   Sans in every weight and style (21px at 16px type, where bare Arial gave
   17px), which is what removed the landing page's 33.6px card shift; glyph
   WIDTHS only approximately match (average-width fit), so a long heading can
   still differ by a few pixels in width without moving anything below it.
   Bold and italic are synthesized from the regular face and land closer to
   Source Sans than bare Arial did. The three local() names are the same
   metrics under three vendors: Arial (Windows, Mac), Liberation Sans (Linux),
   Arimo (Chrome OS). Android ships none of them and gets Roboto from the
   stack with no overrides. Values computed from the shipped variable font vs.
   system Liberation Sans by MobileDashboards/font_fallback_metrics.py -- see
   that script's docstring for the method and for why it instantiates the
   variable font at wght=400 rather than trusting the file's own (unexpectedly
   ExtraLight) fvar default. THIS MUST GO UPSTREAM into
   ncdpi-data-visualization's tools/build_design_tokens.py; until it does, a
   regenerated tokens.css will silently drop it. Delete this note once
   upstream carries it. */
@font-face {
  font-family: "Source Sans Pro Fallback";
  src: local("Arial"), local("Liberation Sans"), local("Arimo");
  size-adjust: 97.10%;
  ascent-override: 102.99%;
  descent-override: 33.57%;
  line-gap-override: 0.00%;
}

:root {

  /* color / brand */
  --ncdpi-brand-primary: #092940;
  --ncdpi-brand-secondary-dark: #3B75A9;
  --ncdpi-brand-secondary: #1E79C8;
  --ncdpi-brand-secondary-bright: #3892E1;
  --ncdpi-brand-secondary-light: #EEF7FF;
  --ncdpi-brand-accent: #CF1F42;
  --ncdpi-brand-accent-dark: #BC2442;
  --ncdpi-brand-accent-light: #FFE9EE;
  --ncdpi-brand-white: #FFFFFF;

  /* color / gray */
  --ncdpi-gray-1: #FAF9F9;
  --ncdpi-gray-2: #F3F3F1;
  --ncdpi-gray-5: #E9E9E7;
  --ncdpi-gray-10: #DBDAD6;
  --ncdpi-gray-20: #C2C0BA;
  --ncdpi-gray-30: #A8A59D;
  --ncdpi-gray-40: #8A867C;
  --ncdpi-gray-50: #7A756C;
  --ncdpi-gray-60: #615D56;
  --ncdpi-gray-70: #48453F;
  --ncdpi-gray-80: #32302D;
  --ncdpi-gray-90: #1B1A18;

  /* color / semantic */
  --ncdpi-surface: #FAF9F9;
  --ncdpi-on-surface: #1B1A18;
  --ncdpi-surface-raised: #FFFFFF;
  --ncdpi-on-surface-raised: #1B1A18;
  --ncdpi-surface-sunken: #F3F3F1;
  --ncdpi-on-surface-sunken: #1B1A18;
  --ncdpi-surface-brand: #092940;
  --ncdpi-on-surface-brand: #FFFFFF;
  --ncdpi-surface-info: #EEF7FF;
  --ncdpi-on-surface-info: #092940;
  --ncdpi-surface-accent: #FFE9EE;
  --ncdpi-on-surface-accent: #BC2442;
  --ncdpi-accent: #BC2442;
  --ncdpi-on-accent: #FFFFFF;
  --ncdpi-danger: #BC2442;
  --ncdpi-on-danger: #FFFFFF;
  --ncdpi-action: #092940;
  --ncdpi-on-action: #FFFFFF;
  --ncdpi-action-hover: #3B75A9;
  --ncdpi-text-primary: #1B1A18;
  --ncdpi-text-secondary: #615D56;
  --ncdpi-text-heading: #092940;
  /* LOCAL DEVIATION from the design system, 2026-08-27 (family sweep 2, S2.19).
     Upstream ships #3B75A9, which measures 4.39:1 against --ncdpi-surface-sunken
     (#F3F3F1) and so fails the WCAG 1.4.3 floor of 4.5:1 for normal-size text.
     Every app paints surface-sunken on <body> (2026-08-24 design consult), and
     puts links plus .ncdpi-btn--quiet/--secondary straight onto it, so the whole
     family inherited the failure. #356A99 measures 5.15:1 there and 5.72:1 on
     white. Nothing consumes --ncdpi-link on a dark surface, so darkening is safe
     everywhere; .ncdpi-btn--secondary uses it for ink AND border, so one change
     fixes both halves.
     THIS MUST GO UPSTREAM into ncdpi-data-visualization. Until it does, a verbatim
     file swap will silently revert it -- which is why check_link_contrast.py exists
     and fails if this value comes back. Delete this note once upstream carries it. */
  --ncdpi-link: #356A99;
  --ncdpi-link-hover: #092940;
  --ncdpi-border-subtle: #DBDAD6;
  --ncdpi-border-strong: #8A867C;
  --ncdpi-focus: #3892E1;

  /* font / family */
  --ncdpi-font-ui: 'Source Sans Pro', 'Source Sans 3', 'Source Sans Pro Fallback', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  --ncdpi-font-chart: Arial, Helvetica, sans-serif;

  /* font / weight */
  --ncdpi-weight-regular: 400;
  --ncdpi-weight-semibold: 600;
  --ncdpi-weight-bold: 700;

  /* type / size */
  --ncdpi-size-h1: 42px;
  --ncdpi-size-h2: 36px;
  --ncdpi-size-h3: 28px;
  --ncdpi-size-h4: 24px;
  --ncdpi-size-h5: 21px;
  --ncdpi-size-h6: 18px;
  --ncdpi-size-body: 18px;
  --ncdpi-size-small: 16px;

  /* type / line-height */
  --ncdpi-leading-heading: 1.2;
  --ncdpi-leading-body: 1.667;
  --ncdpi-leading-small: 1.5;

  /* space / 2xs */
  --ncdpi-space-2xs: 4px;

  /* space / xs */
  --ncdpi-space-xs: 8px;

  /* space / sm */
  --ncdpi-space-sm: 16px;

  /* space / md */
  --ncdpi-space-md: 24px;

  /* space / lg */
  --ncdpi-space-lg: 32px;

  /* space / xl */
  --ncdpi-space-xl: 48px;

  /* space / 2xl */
  --ncdpi-space-2xl: 64px;

  /* radius / sm */
  --ncdpi-radius-sm: 4px;

  /* radius / md */
  --ncdpi-radius-md: 6px;

  /* radius / lg */
  --ncdpi-radius-lg: 8px;

  /* shadow / raised */
  --ncdpi-shadow-raised: 0px 1px 3px 0px rgba(9, 41, 64, 0.10), 0px 1px 2px 0px rgba(9, 41, 64, 0.07);

  /* shadow / overlay */
  --ncdpi-shadow-overlay: 0px 4px 16px 0px rgba(9, 41, 64, 0.16);

  /* chart palettes - read-only feed from site/theme/color-data.json (built by build_vega_theme.py); charts themselves keep using that pipeline directly (D2) */
  --ncdpi-chart-background-chart-background: #FFFFFF;
  --ncdpi-chart-diverging-3-steps-step-minus-1: #B33A12;
  --ncdpi-chart-diverging-3-steps-step-0: #DEDEDE;
  --ncdpi-chart-diverging-3-steps-step-plus-1: #077890;
  --ncdpi-chart-diverging-5-steps-step-minus-2: #B33A12;
  --ncdpi-chart-diverging-5-steps-step-minus-1: #C88C78;
  --ncdpi-chart-diverging-5-steps-step-0: #DEDEDE;
  --ncdpi-chart-diverging-5-steps-step-plus-1: #86A4AE;
  --ncdpi-chart-diverging-5-steps-step-plus-2: #077890;
  --ncdpi-chart-diverging-7-steps-step-minus-3: #B33A12;
  --ncdpi-chart-diverging-7-steps-step-minus-2: #C26F54;
  --ncdpi-chart-diverging-7-steps-step-minus-1: #D1BCB5;
  --ncdpi-chart-diverging-7-steps-step-0: #DEDEDE;
  --ncdpi-chart-diverging-7-steps-step-plus-1: #B9C4C7;
  --ncdpi-chart-diverging-7-steps-step-plus-2: #6593A1;
  --ncdpi-chart-diverging-7-steps-step-plus-3: #077890;
  --ncdpi-chart-diverging-9-steps-step-minus-4: #B33A12;
  --ncdpi-chart-diverging-9-steps-step-minus-3: #BE6143;
  --ncdpi-chart-diverging-9-steps-step-minus-2: #CC9F91;
  --ncdpi-chart-diverging-9-steps-step-minus-1: #D5CBC8;
  --ncdpi-chart-diverging-9-steps-step-0: #DEDEDE;
  --ncdpi-chart-diverging-9-steps-step-plus-1: #CACFD1;
  --ncdpi-chart-diverging-9-steps-step-plus-2: #9AB0B7;
  --ncdpi-chart-diverging-9-steps-step-plus-3: #548B9C;
  --ncdpi-chart-diverging-9-steps-step-plus-4: #077890;
  --ncdpi-chart-diverging-continuous-begin: #B33A12;
  --ncdpi-chart-diverging-continuous-mid: #DEDEDE;
  --ncdpi-chart-diverging-continuous-end: #077890;
  --ncdpi-chart-groups-2-cat-1: #5085BC;
  --ncdpi-chart-groups-2-cat-2: #FF9015;
  --ncdpi-chart-groups-2-total-avg: #003A70;
  --ncdpi-chart-groups-3-cat-1: #5085BC;
  --ncdpi-chart-groups-3-cat-2: #FF9015;
  --ncdpi-chart-groups-3-cat-3: #922880;
  --ncdpi-chart-groups-3-total-avg: #003A70;
  --ncdpi-chart-groups-4-cat-1: #5085BC;
  --ncdpi-chart-groups-4-cat-2: #FF9015;
  --ncdpi-chart-groups-4-cat-3: #922880;
  --ncdpi-chart-groups-4-cat-4: #3D803F;
  --ncdpi-chart-groups-4-total-avg: #003A70;
  --ncdpi-chart-groups-5-cat-1: #5085BC;
  --ncdpi-chart-groups-5-cat-2: #FF9015;
  --ncdpi-chart-groups-5-cat-3: #922880;
  --ncdpi-chart-groups-5-cat-4: #3D803F;
  --ncdpi-chart-groups-5-cat-5: #D3B10B;
  --ncdpi-chart-groups-5-total-avg: #003A70;
  --ncdpi-chart-groups-6-cat-1: #5085BC;
  --ncdpi-chart-groups-6-cat-2: #FF9015;
  --ncdpi-chart-groups-6-cat-3: #922880;
  --ncdpi-chart-groups-6-cat-4: #3D803F;
  --ncdpi-chart-groups-6-cat-5: #D3B10B;
  --ncdpi-chart-groups-6-cat-6: #BE7EB3;
  --ncdpi-chart-groups-6-total-avg: #003A70;
  --ncdpi-chart-chart-elements-axis-ruler: #525A60;
  --ncdpi-chart-chart-elements-dividers: #DEDEDE;
  --ncdpi-chart-chart-elements-gridlines: #DEDEDE;
  --ncdpi-chart-chart-elements-reference-lines: #003A70;
  --ncdpi-chart-data-highlight-neutral-bar-line: #B7B9BB;
  --ncdpi-chart-data-highlight-highlighted-bar-line: #003A70;
  --ncdpi-chart-data-highlight-bar-line-is-best: #077890;
  --ncdpi-chart-data-highlight-bar-line-is-worst: #B33A12;
  --ncdpi-chart-sequence-to-bad-worst-step-1: #B33A12;
  --ncdpi-chart-sequence-to-bad-2-steps-step-1: #DC8F76;
  --ncdpi-chart-sequence-to-bad-2-steps-step-2: #B33A12;
  --ncdpi-chart-sequence-to-bad-3-steps-step-1: #E2A996;
  --ncdpi-chart-sequence-to-bad-3-steps-step-2: #D37355;
  --ncdpi-chart-sequence-to-bad-3-steps-step-3: #B33A12;
  --ncdpi-chart-sequence-to-bad-4-steps-step-1: #E3B6A8;
  --ncdpi-chart-sequence-to-bad-4-steps-step-2: #DC8F76;
  --ncdpi-chart-sequence-to-bad-4-steps-step-3: #CD6544;
  --ncdpi-chart-sequence-to-bad-4-steps-step-4: #B33A12;
  --ncdpi-chart-sequence-to-bad-5-steps-step-1: #E4BEB2;
  --ncdpi-chart-sequence-to-bad-5-steps-step-2: #E09F89;
  --ncdpi-chart-sequence-to-bad-5-steps-step-3: #D77F62;
  --ncdpi-chart-sequence-to-bad-5-steps-step-4: #C85D3A;
  --ncdpi-chart-sequence-to-bad-5-steps-step-5: #B33A12;
  --ncdpi-chart-sequence-to-bad-continuous-begin: #DEDEDE;
  --ncdpi-chart-sequence-to-bad-continuous-end: #B33A12;
  --ncdpi-chart-sequence-to-good-best-step-1: #077890;
  --ncdpi-chart-sequence-to-good-2-steps-step-1: #8BAEB9;
  --ncdpi-chart-sequence-to-good-2-steps-step-2: #077890;
  --ncdpi-chart-sequence-to-good-3-steps-step-1: #A9BEC6;
  --ncdpi-chart-sequence-to-good-3-steps-step-2: #6D9CAC;
  --ncdpi-chart-sequence-to-good-3-steps-step-3: #077890;
  --ncdpi-chart-sequence-to-good-4-steps-step-1: #B6C6CC;
  --ncdpi-chart-sequence-to-good-4-steps-step-2: #8BAEB9;
  --ncdpi-chart-sequence-to-good-4-steps-step-3: #5C93A6;
  --ncdpi-chart-sequence-to-good-4-steps-step-4: #077890;
  --ncdpi-chart-sequence-to-good-5-steps-step-1: #BECBCF;
  --ncdpi-chart-sequence-to-good-5-steps-step-2: #9DB8C1;
  --ncdpi-chart-sequence-to-good-5-steps-step-3: #7AA3B1;
  --ncdpi-chart-sequence-to-good-5-steps-step-4: #508EA2;
  --ncdpi-chart-sequence-to-good-5-steps-step-5: #077890;
  --ncdpi-chart-sequence-to-good-continuous-begin: #DEDEDE;
  --ncdpi-chart-sequence-to-good-continuous-end: #077890;
  --ncdpi-chart-sequence-to-neutral-2-steps-step-1: #9CB0CD;
  --ncdpi-chart-sequence-to-neutral-2-steps-step-2: #5085BC;
  --ncdpi-chart-sequence-to-neutral-3-steps-step-1: #B2BFD3;
  --ncdpi-chart-sequence-to-neutral-3-steps-step-2: #85A2C8;
  --ncdpi-chart-sequence-to-neutral-3-steps-step-3: #5085BC;
  --ncdpi-chart-sequence-to-neutral-4-steps-step-1: #BDC7D6;
  --ncdpi-chart-sequence-to-neutral-4-steps-step-2: #9CB0CD;
  --ncdpi-chart-sequence-to-neutral-4-steps-step-3: #799AC5;
  --ncdpi-chart-sequence-to-neutral-4-steps-step-4: #5085BC;
  --ncdpi-chart-sequence-to-neutral-5-steps-step-1: #C4CBD7;
  --ncdpi-chart-sequence-to-neutral-5-steps-step-2: #A9B9D1;
  --ncdpi-chart-sequence-to-neutral-5-steps-step-3: #8EA7CA;
  --ncdpi-chart-sequence-to-neutral-5-steps-step-4: #7196C3;
  --ncdpi-chart-sequence-to-neutral-5-steps-step-5: #5085BC;
  --ncdpi-chart-sequence-to-neutral-continuous-begin: #DEDEDE;
  --ncdpi-chart-sequence-to-neutral-continuous-end: #5085BC;
  --ncdpi-chart-text-annotation: #842175;
  --ncdpi-chart-text-axis-label: #000000;
  --ncdpi-chart-text-axis-value: #525A60;
  --ncdpi-chart-text-chart-note: #525A60;
  --ncdpi-chart-text-chart-subtitle: #525A60;
  --ncdpi-chart-text-chart-title: #000000;
  --ncdpi-chart-text-data-label: #000000;
  --ncdpi-chart-text-control-header: #525A60;
  --ncdpi-chart-text-dashboard-body-text: #000000;
  --ncdpi-chart-text-dashboard-help-text: #006174;
  --ncdpi-chart-text-dashboard-subtitle: #525A60;
  --ncdpi-chart-text-dashboard-title: #003A70;
  --ncdpi-chart-text-selected-control: #111827;
  --ncdpi-chart-text-unselected-control: #525A60;
  --ncdpi-chart-background-control-or-filter-background: #FFFFFF;
  --ncdpi-chart-background-general-background: #FFFFFF;
}
