/* Generated by scripts/build.py. Edit design/tokens (via ndg-design-system export) or src/*.css. */
/* NDG design tokens. Generated by scripts/build.py from style-kit:ndg/web-public@0.1.0 (candidate).
   kit sha256 37520bd382840aa1aa733b03ada0b9ad83436e92349e1fd55c7a154831964a89. Do not edit; change the kit and rebuild. */
/* design-bind:begin authority=candidate source=style-kit:ndg/web-public@0.1.0 digest=ae7c3ff876801a72e4ef1e7f7fb50c5aae15e07b3d109c0d7540db61e1287fab */
:root {
  --pb-typography-family-sans: Arial, Helvetica, sans-serif;
  --pb-typography-family-serif: Georgia, "Times New Roman", serif;
  --pb-typography-leading-display: 42px;
  --pb-typography-leading-display-narrow: 34px;
  --pb-typography-leading-field-narrow: 20px;
  --pb-typography-leading-meta: 16px;
  --pb-typography-leading-reading: 24px;
  --pb-typography-leading-title: 28px;
  --pb-typography-leading-title-narrow: 24px;
  --pb-typography-leading-ui: 18px;
  --pb-typography-leading-ui-open: 24px;
  --pb-typography-size-display: 38px;
  --pb-typography-size-display-narrow: 30px;
  --pb-typography-size-field-narrow: 16px;
  --pb-typography-size-meta: 11px;
  --pb-typography-size-reading: 15px;
  --pb-typography-size-title: 24px;
  --pb-typography-size-title-narrow: 20px;
  --pb-typography-size-ui: 13px;
  --pb-typography-tracking: normal;
  --pb-typography-weight-bold: 700;
  --pb-typography-weight-regular: 400;
  --pb-spacing-step-1: 4px;
  --pb-spacing-step-10: 96px;
  --pb-spacing-step-2: 8px;
  --pb-spacing-step-3: 12px;
  --pb-spacing-step-4: 16px;
  --pb-spacing-step-5: 20px;
  --pb-spacing-step-6: 24px;
  --pb-spacing-step-7: 32px;
  --pb-spacing-step-8: 48px;
  --pb-spacing-step-9: 56px;
}
/* design-bind:end */
:root {
  --ndg-color-page: #ffffff;
  --ndg-color-ink: #000000;
  --ndg-color-secondary: #595959;
  --ndg-color-link: #0000ee;
  --ndg-color-link-visited: #551a8b;
  --ndg-color-focus: #0000ee;
  --ndg-color-rule: #c9c9c4;
  --ndg-color-control-rule: #85857f;
  --ndg-color-field: #f5f5f5;
  --ndg-width-max: 1376px;
  --ndg-width-reading: 680px;
  --ndg-width-measure: 60ch;
  --ndg-width-rail-text: 232px;
  --ndg-width-card-min: 260px;
  --ndg-grid-columns: 12;
  --ndg-grid-main-columns: 10;
  --ndg-grid-wide: 1200px;
  --ndg-grid-reflow: 900px;
  --ndg-grid-compact: 420px;
  --ndg-control-target-min: 24px;
  --ndg-control-target-touch: 44px;
  --ndg-control-field-height: 34px;
  --ndg-control-row-min: 40px;
  --ndg-focus-ring-width: 2px;
  --ndg-focus-ring-offset: 3px;
  --ndg-shape-radius: 0px;
  --ndg-shape-rule-width: 1px;
  --ndg-shape-underline-hover: 2px;
  --ndg-shape-underline-offset: 0.12em;
  --ndg-shape-disabled-opacity: 0.55;
  --ndg-border-rule: 1px solid #c9c9c4;
  --ndg-border-control: 1px solid #85857f;
  --ndg-border-sheet: 1px solid #c9c9c4;
}

/* NDG reference components. Authored source; values come only from dist/tokens.css.
   Governed properties (font-*, line-height, letter/word-spacing, margin, padding, gap)
   use --pb-* only; color, widths, borders and shape use --ndg-* only.
   Media-query widths are literals that must equal dimensions.grid in the kit:
   1200px (wide), 900px (reflow), 420px (compact). */

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

html {
  color-scheme: light;
  background: var(--ndg-color-page);
  color: var(--ndg-color-ink);
  scrollbar-gutter: stable;
}

body {
  margin: 0;
  background: var(--ndg-color-page);
  color: var(--ndg-color-ink);
  font-family: var(--pb-typography-family-sans);
  font-size: var(--pb-typography-size-ui);
  line-height: var(--pb-typography-leading-ui);
  font-weight: var(--pb-typography-weight-regular);
  letter-spacing: var(--pb-typography-tracking);
  text-rendering: optimizeLegibility;
}

h1, h2, h3, h4, p, ul, ol, dl, dd, figure { margin: 0; }
ul, ol { padding: 0; list-style: none; }
img { display: block; max-width: 100%; height: auto; }
button, input { font: inherit; border-radius: var(--ndg-shape-radius); }

/* Links and focus */
a {
  color: var(--ndg-color-link);
  text-decoration: underline;
  text-decoration-thickness: var(--ndg-shape-rule-width);
  text-underline-offset: var(--ndg-shape-underline-offset);
}
a:visited { color: var(--ndg-color-link-visited); }
a:hover { text-decoration-thickness: var(--ndg-shape-underline-hover); }
a[aria-current="page"] { color: var(--ndg-color-ink); text-decoration: none; }
:focus-visible {
  outline: var(--ndg-focus-ring-width) solid var(--ndg-color-focus);
  outline-offset: var(--ndg-focus-ring-offset);
}

.ndg-skip {
  position: fixed;
  inset-block-start: 0;
  inset-inline-start: 0;
  margin: var(--pb-spacing-step-2);
  z-index: 100;
  transform: translateY(-200%);
  padding: var(--pb-spacing-step-2) var(--pb-spacing-step-3);
  background: var(--ndg-color-page);
  border: var(--ndg-border-rule);
  color: var(--ndg-color-ink);
}
.ndg-skip:focus { transform: none; }

.ndg-vh {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Page frame and grid */
.ndg-frame { padding: var(--pb-spacing-step-9) var(--pb-spacing-step-7) var(--pb-spacing-step-10); }

.ndg-page {
  max-width: var(--ndg-width-max);
  margin-inline: auto;
  display: grid;
  grid-template-columns: repeat(var(--ndg-grid-columns), minmax(0, 1fr));
  column-gap: var(--pb-spacing-step-4);
  align-items: start;
}

.ndg-main {
  grid-column: 3 / -1;
  min-width: 0;
  display: grid;
  grid-template-columns: repeat(var(--ndg-grid-main-columns), minmax(0, 1fr));
  column-gap: var(--pb-spacing-step-4);
  align-content: start;
}
.ndg-main > * { grid-column: 1 / -1; min-width: 0; }
.ndg-main > .ndg-span-gutter { grid-column: 1; }
.ndg-main > .ndg-span-content { grid-column: 2 / -1; }
.ndg-main > .ndg-span-reading { grid-column: 2 / span 6; }

/* Rail (site header) */
.ndg-rail { grid-column: 1 / span 2; min-width: 0; }
.ndg-wordmark {
  display: inline-block;
  margin-bottom: var(--pb-spacing-step-4);
  color: var(--ndg-color-ink);
  font-weight: var(--pb-typography-weight-bold);
  text-decoration: none;
}
.ndg-wordmark:visited { color: var(--ndg-color-ink); }
.ndg-rail__text {
  max-width: var(--ndg-width-rail-text);
  margin-bottom: var(--pb-spacing-step-6);
  line-height: var(--pb-typography-leading-ui-open);
}
.ndg-nav {
  display: grid;
  padding-top: var(--pb-spacing-step-4);
  border-top: var(--ndg-border-rule);
}
.ndg-nav a {
  display: flex;
  align-items: center;
  min-height: var(--ndg-control-target-min);
  width: max-content;
}

/* Text roles */
.ndg-meta {
  color: var(--ndg-color-secondary);
  font-size: var(--pb-typography-size-meta);
  line-height: var(--pb-typography-leading-meta);
}
.ndg-reading {
  max-width: var(--ndg-width-measure);
  font-size: var(--pb-typography-size-reading);
  line-height: var(--pb-typography-leading-reading);
}
.ndg-title {
  font-size: var(--pb-typography-size-title);
  line-height: var(--pb-typography-leading-title);
  font-weight: var(--pb-typography-weight-regular);
}
.ndg-display {
  font-family: var(--pb-typography-family-serif);
  font-size: var(--pb-typography-size-display);
  line-height: var(--pb-typography-leading-display);
  font-weight: var(--pb-typography-weight-regular);
}
.ndg-label { font-weight: var(--pb-typography-weight-bold); }

/* Section head: plain label over a rule */
.ndg-section-head {
  padding-bottom: var(--pb-spacing-step-3);
  border-bottom: var(--ndg-border-rule);
}
.ndg-section-head h2 {
  font-size: var(--pb-typography-size-ui);
  line-height: var(--pb-typography-leading-ui);
  font-weight: var(--pb-typography-weight-regular);
}

/* Project entry (expanded index entry) */
.ndg-entry {
  display: grid;
  grid-template-columns: subgrid;
  padding: var(--pb-spacing-step-7) 0 var(--pb-spacing-step-8);
  border-bottom: var(--ndg-border-rule);
}
.ndg-entry__facts { grid-column: 1; display: grid; align-content: start; gap: var(--pb-spacing-step-1); }
.ndg-entry__body { grid-column: 2 / -1; display: grid; grid-template-columns: subgrid; min-width: 0; }
.ndg-entry__head {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: baseline;
  column-gap: var(--pb-spacing-step-6);
}
.ndg-entry__opening { grid-column: 1 / span 5; margin: var(--pb-spacing-step-6) 0; }
.ndg-entry__body > .ndg-strip { grid-column: 1 / -1; }
.ndg-entry__head + .ndg-strip { margin-top: var(--pb-spacing-step-6); }

/* Aspect-weighted image strip: give each image style="flex-grow: <width/height>"
   so every image in the row resolves to one height. */
.ndg-strip {
  display: flex;
  gap: var(--pb-spacing-step-2);
  align-items: flex-start;
}
.ndg-strip > img { flex-basis: 0; flex-shrink: 1; min-width: 0; width: 100%; }

/* Compact index rows */
.ndg-rows { border-bottom: var(--ndg-border-rule); }
.ndg-row {
  display: grid;
  grid-template-columns: subgrid;
  grid-column: 1 / -1;
  align-items: center;
  min-height: var(--ndg-control-row-min);
  border-bottom: var(--ndg-border-rule);
}
.ndg-row:last-child { border-bottom: 0; }
.ndg-rows { display: grid; grid-template-columns: subgrid; }
.ndg-row__year { grid-column: 1; }
.ndg-row__title { grid-column: 2 / span 6; }
.ndg-row__kind { grid-column: 8 / -1; text-align: right; }

/* Project cards (optional grid presentation) */
.ndg-cards {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--pb-spacing-step-8) var(--pb-spacing-step-4);
  align-items: start;
}
.ndg-card__link { display: block; }
.ndg-card__title { display: block; margin-top: var(--pb-spacing-step-3); }
.ndg-card__facts { margin-top: var(--pb-spacing-step-1); }
.ndg-card--text .ndg-card__link { padding-top: var(--pb-spacing-step-3); border-top: var(--ndg-border-rule); }
.ndg-card--text .ndg-card__title { margin-top: 0; }

/* Project detail */
.ndg-project { display: grid; grid-template-columns: subgrid; row-gap: var(--pb-spacing-step-8); }
.ndg-project__head { grid-column: 2 / span 6; grid-row: 1; border-top: var(--ndg-border-rule); padding-top: var(--pb-spacing-step-6); }
.ndg-project__head .ndg-reading { margin-top: var(--pb-spacing-step-3); }
.ndg-facts { grid-column: 1; grid-row: 1 / span 2; display: grid; align-content: start; gap: var(--pb-spacing-step-3); padding-top: var(--pb-spacing-step-6); }
.ndg-facts dt { color: var(--ndg-color-secondary); font-size: var(--pb-typography-size-meta); line-height: var(--pb-typography-leading-meta); }
.ndg-facts dd { font-size: var(--pb-typography-size-meta); line-height: var(--pb-typography-leading-meta); }
.ndg-prose { grid-column: 2 / span 6; grid-row: 2; }
.ndg-prose > * + * { margin-top: var(--pb-spacing-step-4); }
.ndg-prose h2 {
  font-size: var(--pb-typography-size-ui);
  line-height: var(--pb-typography-leading-ui);
  font-weight: var(--pb-typography-weight-bold);
  margin-top: var(--pb-spacing-step-7);
}
.ndg-figure { grid-column: 2 / -1; display: grid; grid-template-columns: subgrid; row-gap: var(--pb-spacing-step-3); }
.ndg-figure > .ndg-strip, .ndg-figure > img, .ndg-figure > .ndg-artifact { grid-column: 1 / -1; }
.ndg-figure figcaption { grid-column: 1 / span 6; }
.ndg-figure--gallery > .ndg-strip { gap: var(--pb-spacing-step-3); }

/* Artifact frame: a deliverable shown in its own form */
.ndg-artifact {
  background: var(--ndg-color-field);
  padding: var(--pb-spacing-step-8) var(--pb-spacing-step-4);
}
.ndg-artifact__sheet {
  max-width: var(--ndg-width-reading);
  margin-inline: auto;
  background: var(--ndg-color-page);
  border: var(--ndg-border-sheet);
}

.ndg-pager {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: var(--pb-spacing-step-3);
  align-items: center;
  min-height: var(--ndg-control-row-min);
  padding-block: var(--pb-spacing-step-2);
  border-top: var(--ndg-border-rule);
  border-bottom: var(--ndg-border-rule);
}
.ndg-pager > :last-child { text-align: right; }

/* Text page */
.ndg-text { grid-column: 2 / span 6; border-top: var(--ndg-border-rule); padding-top: var(--pb-spacing-step-6); }
.ndg-text > .ndg-display { margin-bottom: var(--pb-spacing-step-4); }
.ndg-text > * + .ndg-reading { margin-top: var(--pb-spacing-step-4); }

/* Inline field (optional inquiry or newsletter) */
.ndg-field {
  display: grid;
  grid-template-columns: subgrid;
  grid-column: 1 / -1;
  align-items: end;
  row-gap: var(--pb-spacing-step-2);
}
.ndg-field label { grid-column: 1; align-self: center; }
.ndg-field input {
  grid-column: 2 / span 5;
  width: 100%;
  min-height: var(--ndg-control-field-height);
  border: 0;
  border-bottom: var(--ndg-border-control);
  background: transparent;
  color: var(--ndg-color-ink);
  padding: 0 0 var(--pb-spacing-step-1);
}
.ndg-field input::placeholder { color: var(--ndg-color-secondary); }
.ndg-field button, .ndg-button {
  grid-column: 7 / span 2;
  justify-self: start;
  min-height: var(--ndg-control-field-height);
  border: 0;
  background: transparent;
  color: var(--ndg-color-link);
  padding: 0 0 var(--pb-spacing-step-1);
  text-decoration: underline;
  text-underline-offset: var(--ndg-shape-underline-offset);
  cursor: pointer;
}
.ndg-field button:hover, .ndg-button:hover { text-decoration-thickness: var(--ndg-shape-underline-hover); }
.ndg-field button:disabled, .ndg-button:disabled { cursor: wait; opacity: var(--ndg-shape-disabled-opacity); }
.ndg-field__status { grid-column: 2 / span 6; }
.ndg-field__status:empty { display: none; }
.ndg-field__status--error { color: var(--ndg-color-ink); }
.ndg-field input[aria-invalid="true"] { border-bottom-color: var(--ndg-color-ink); }

/* Footer and contact */
.ndg-footer {
  display: grid;
  grid-template-columns: subgrid;
  row-gap: var(--pb-spacing-step-6);
  margin-top: var(--pb-spacing-step-10);
  padding-top: var(--pb-spacing-step-6);
  border-top: var(--ndg-border-rule);
}
.ndg-footer__label { grid-column: 1; }
.ndg-footer__body { grid-column: 2 / span 6; line-height: var(--pb-typography-leading-ui-open); }
.ndg-footer__legal { grid-column: 8 / -1; text-align: right; }

/* Facts move out of the gutter while the gutter is narrower than its content */
@media (max-width: 1200px) {
  .ndg-facts {
    grid-column: 2 / span 6;
    grid-row: 2;
    display: flex;
    flex-wrap: wrap;
    gap: var(--pb-spacing-step-2) var(--pb-spacing-step-6);
    padding-top: 0;
  }
  .ndg-facts > div { display: flex; gap: var(--pb-spacing-step-1); }
  .ndg-prose { grid-row: 3; }
  .ndg-entry__opening { grid-column: 1 / span 7; }
}

/* Single column: every span dissolves into source order */
@media (max-width: 900px) {
  .ndg-frame { padding: var(--pb-spacing-step-5) var(--pb-spacing-step-5) var(--pb-spacing-step-8); }
  .ndg-page, .ndg-main, .ndg-entry, .ndg-entry__body, .ndg-rows, .ndg-project, .ndg-figure, .ndg-field, .ndg-footer { display: block; }
  .ndg-main { margin-top: var(--pb-spacing-step-7); }
  .ndg-wordmark { margin-bottom: var(--pb-spacing-step-3); }
  .ndg-rail__text { max-width: none; margin-bottom: var(--pb-spacing-step-5); line-height: var(--pb-typography-leading-ui); }
  .ndg-nav { display: flex; flex-wrap: wrap; column-gap: var(--pb-spacing-step-4); padding-top: 0; }
  .ndg-nav a { min-height: var(--ndg-control-target-touch); }
  .ndg-title { font-size: var(--pb-typography-size-title-narrow); line-height: var(--pb-typography-leading-title-narrow); }
  .ndg-display { font-size: var(--pb-typography-size-display-narrow); line-height: var(--pb-typography-leading-display-narrow); }
  .ndg-entry { padding: var(--pb-spacing-step-6) 0 var(--pb-spacing-step-7); }
  .ndg-entry__facts { display: flex; flex-wrap: wrap; gap: var(--pb-spacing-step-1) var(--pb-spacing-step-3); margin-bottom: var(--pb-spacing-step-2); }
  .ndg-entry__head { display: block; }
  .ndg-entry__head a { display: flex; align-items: center; min-height: var(--ndg-control-target-touch); width: max-content; }
  .ndg-entry__opening { margin: var(--pb-spacing-step-3) 0 var(--pb-spacing-step-5); }
  .ndg-strip { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ndg-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: var(--pb-spacing-step-3); row-gap: var(--pb-spacing-step-1); padding-block: var(--pb-spacing-step-2); }
  .ndg-row__year { grid-column: 1 / -1; }
  .ndg-row__title, .ndg-row__kind { grid-column: auto; }
  .ndg-row__title { display: inline-flex; align-items: center; min-height: var(--ndg-control-target-min); }
  .ndg-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pb-spacing-step-7) var(--pb-spacing-step-4); }
  .ndg-project > * + * { margin-top: var(--pb-spacing-step-7); }
  .ndg-project__head + .ndg-facts { margin-top: var(--pb-spacing-step-4); }
  .ndg-figure > * + * { margin-top: var(--pb-spacing-step-3); }
  .ndg-artifact { padding: var(--pb-spacing-step-4) var(--pb-spacing-step-3); }
  .ndg-pager { grid-template-columns: 1fr; gap: 0; }
  .ndg-pager a { display: flex; align-items: center; min-height: var(--ndg-control-target-touch); }
  .ndg-pager > :last-child { text-align: left; }
  .ndg-field > * + * { margin-top: var(--pb-spacing-step-2); }
  .ndg-field input { min-height: var(--ndg-control-target-touch); font-size: var(--pb-typography-size-field-narrow); line-height: var(--pb-typography-leading-field-narrow); }
  .ndg-field button, .ndg-button { display: flex; align-items: center; min-height: var(--ndg-control-target-touch); }
  .ndg-footer > * + * { margin-top: var(--pb-spacing-step-4); }
  .ndg-footer__body a { display: inline-flex; align-items: center; min-height: var(--ndg-control-target-min); }
  .ndg-footer__legal { text-align: left; }
}

@media (max-width: 420px) {
  .ndg-nav { column-gap: var(--pb-spacing-step-3); }
  .ndg-cards { grid-template-columns: minmax(0, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto; transition: none; animation: none; }
}

/* ndg.is additions on top of the NDG design system components (src/components.css, copied from
   ndg-design-system). Values come from the exported tokens; the two preview heights below are
   site layout dimensions, not governed type or spacing values. */

:root {
  --ndg-site-preview-height: 420px;
  --ndg-site-figure-height: 720px;
}

.ndg-section-head--spaced { margin-top: var(--pb-spacing-step-10); }

/* One screenshot per entry: shown whole at a fixed height, left aligned, never cropped. */
.ndg-strip--single > img {
  flex: 0 1 auto;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: var(--ndg-site-preview-height);
  border: var(--ndg-border-rule);
}

/* Project page figure: whole image, capped so portrait captures stay readable. */
.ndg-figure > img {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: var(--ndg-site-figure-height);
  border: var(--ndg-border-rule);
}

@media (max-width: 900px) {
  .ndg-strip--single { display: block; }
  .ndg-strip--single > img { max-height: none; }
}

.ndg-facts dd { overflow-wrap: anywhere; }
.ndg-project__link { margin-top: var(--pb-spacing-step-3); }
