/* Hallmark · v2.0.0 · redesign full · theme: almanac (deal: manual, no Node for theme.mjs) · genre editorial · job: look up a company · signature: the latest day's awards printed on the sheet, beside the hero */
/* Critique: a reference book, not a dashboard. Slate stock, blue-black ink, two rule weights, square corners; magenta kept to links, the money a page points at, and the one chart series. Numerals are Plex Mono, tabular, right-aligned. */
/* Hallmark · waive sweep · sloplint not run: Node is not installed on this machine; Floor checked by hand */
/* Hallmark · answered dark mode · the theme defines light only; dark tokens below keep hue 245 slate and lift the magenta to stay legible */

/* Fonts are self-hosted (site_src/static/fonts, SIL Open Font License). */
@font-face { font-family: "Hanken Grotesk"; src: url("fonts/hanken-grotesk-latin-wght-normal.woff2") format("woff2"); font-weight: 100 900; font-display: swap; }
@font-face { font-family: "Newsreader"; src: url("fonts/newsreader-latin-wght-normal.woff2") format("woff2"); font-weight: 200 800; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("fonts/ibm-plex-mono-latin-400-normal.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("fonts/ibm-plex-mono-latin-500-normal.woff2") format("woff2"); font-weight: 500; font-display: swap; }

:root {
  --color-paper: oklch(86% 0.012 245);
  --color-paper-2: oklch(82% 0.012 245);
  --color-paper-3: oklch(78% 0.012 245);
  --color-sheet: oklch(94.5% 0.007 245);
  --color-ink: oklch(16% 0.020 245);
  --color-ink-2: oklch(24% 0.018 245);
  --color-muted: oklch(40% 0.016 245);
  --color-rule: oklch(76% 0.013 240);
  --color-rule-2: oklch(30% 0.018 240);
  --color-accent: oklch(45% 0.180 350);
  --color-accent-2: oklch(37% 0.160 350);
  --color-accent-ink: oklch(97% 0.006 245);
  --color-focus: oklch(46% 0.190 350);
  --color-flag: oklch(45% 0.140 35);
  --color-flag-bg: oklch(92% 0.030 35);
  --color-pot: oklch(42% 0.080 85);
  --color-pot-bg: oklch(91% 0.040 90);
  --color-long: oklch(42% 0.100 150);
  --color-long-bg: oklch(91% 0.040 150);
  --color-short: oklch(45% 0.140 35);
  --color-short-bg: oklch(92% 0.030 35);
  /* chart series: branches stay distinguishable, magenta is the series the page argues from */
  --color-navy: oklch(38% 0.090 255);
  --color-army: oklch(50% 0.080 135);
  --color-air: oklch(62% 0.090 230);
  --color-dla: oklch(68% 0.110 75);
  --color-other: oklch(68% 0.010 245);
  --color-rpo: var(--color-accent);
  --color-rev: oklch(38% 0.090 255);

  --font-display: "Hanken Grotesk", ui-sans-serif, system-ui, sans-serif;
  --font-body: "Newsreader", ui-serif, Georgia, serif;
  --font-figure: "IBM Plex Mono", ui-monospace, "Cascadia Mono", monospace;

  --text-sm: 0.875rem;
  --text-base: 1.0625rem;
  --text-lg: 1.25rem;
  --text-xl: 1.6rem;
  --text-display: clamp(2.4rem, 5.4vw, 4.1rem);
  --space-xs: .25rem; --space-sm: .5rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2.5rem; --space-2xl: 4rem;
  --radius-pill: 2px;
  --rule-hair: 1px;
  --rule-bar: 2px;
  --measure: 66ch;
  --container: 1120px;
  color-scheme: light;
}
@media (prefers-color-scheme: dark) {
  :root {
    --color-paper: oklch(19% 0.018 245);
    --color-paper-2: oklch(23% 0.018 245);
    --color-paper-3: oklch(27% 0.018 245);
    --color-sheet: oklch(24% 0.016 245);
    --color-ink: oklch(95% 0.008 245);
    --color-ink-2: oklch(88% 0.010 245);
    --color-muted: oklch(72% 0.014 245);
    --color-rule: oklch(34% 0.016 240);
    --color-rule-2: oklch(80% 0.012 240);
    --color-accent: oklch(70% 0.105 350);
    --color-accent-2: oklch(78% 0.090 350);
    --color-accent-ink: oklch(18% 0.020 245);
    --color-focus: oklch(78% 0.150 350);
    --color-flag: oklch(78% 0.110 35);
    --color-flag-bg: oklch(30% 0.050 35);
    --color-pot: oklch(84% 0.090 90);
    --color-pot-bg: oklch(30% 0.040 90);
    --color-long: oklch(82% 0.110 150);
    --color-long-bg: oklch(30% 0.050 150);
    --color-short: oklch(78% 0.110 35);
    --color-short-bg: oklch(30% 0.050 35);
    --color-navy: oklch(70% 0.100 255);
    --color-army: oklch(74% 0.100 135);
    --color-air: oklch(80% 0.090 225);
    --color-dla: oklch(80% 0.110 80);
    --color-other: oklch(60% 0.010 245);
    --color-rev: oklch(76% 0.080 255);
    color-scheme: dark;
  }
}

* { box-sizing: border-box; }
html, body { overflow-x: clip; }
body {
  margin: 0;
  background: var(--color-paper);
  color: var(--color-ink-2);
  font: 400 var(--text-base)/1.55 var(--font-body);
  font-optical-sizing: auto;
  -webkit-text-size-adjust: 100%;
}
.wrap { max-width: var(--container); margin: 0 auto; padding: 0 16px; }
main.wrap { padding-bottom: var(--space-xl); }

a { color: var(--color-ink); text-decoration-line: underline; text-decoration-color: var(--color-accent); text-decoration-thickness: 1px; text-underline-offset: 0.15em; }
a:hover { text-decoration-thickness: 2px; }
:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; }

h1, h2, h3 { font-family: var(--font-display); font-weight: 600; color: var(--color-ink); letter-spacing: -0.02em; line-height: 1.05; overflow-wrap: break-word; min-width: 0; }
h1 { font-size: var(--text-display); letter-spacing: -0.035em; line-height: 0.98; margin: var(--space-xl) 0 var(--space-md); }
h2 { font-size: var(--text-xl); margin: var(--space-2xl) 0 var(--space-sm); padding-bottom: var(--space-sm); border-bottom: var(--rule-bar) solid var(--color-rule-2); }
h3 { font-size: var(--text-lg); margin: var(--space-xl) 0 var(--space-sm); }
.sub { color: var(--color-muted); font-family: var(--font-body); font-weight: 400; font-size: .8em; margin-left: .35em; letter-spacing: 0; }
h1 .sub { display: block; margin: var(--space-sm) 0 0; font-size: var(--text-lg); line-height: 1.3; }
.muted { color: var(--color-muted); }
.small { font-size: var(--text-sm); }
.hint { color: var(--color-muted); font-size: var(--text-sm); max-width: var(--measure); }
code { font-family: var(--font-figure); font-size: .82em; }
.links { display: flex; flex-wrap: wrap; gap: var(--space-xs) var(--space-md); align-items: baseline; }

/* chrome */
header.site { border-bottom: var(--rule-hair) solid var(--color-rule); }
.bar { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-md); padding-top: var(--space-md); padding-bottom: var(--space-md); }
.brand { font: 600 var(--text-lg)/1 var(--font-display); letter-spacing: -0.02em; color: var(--color-ink); text-decoration: none; }
nav { display: flex; gap: var(--space-lg); }
nav a { font: 500 var(--text-sm)/1.2 var(--font-display); color: var(--color-ink); text-decoration-color: transparent; }
nav a:hover { text-decoration-color: var(--color-accent); }
.notice { font-size: var(--text-sm); color: var(--color-muted); margin: var(--space-sm) auto 0; }
footer { border-top: var(--rule-bar) solid var(--color-rule-2); margin-top: var(--space-2xl); padding-top: var(--space-md); padding-bottom: var(--space-xl); font-size: var(--text-sm); color: var(--color-muted); }
footer p { max-width: var(--measure); }

/* controls */
.btn { display: inline-block; padding: var(--space-sm) var(--space-lg); border: var(--rule-hair) solid var(--color-ink); border-radius: var(--radius-pill); font: 500 var(--text-sm)/1.2 var(--font-display); color: var(--color-ink); text-decoration: none; background: transparent; transition: background-color .15s, color .15s; }
.btn:hover { background: var(--color-paper-2); }
.btn-primary { background: var(--color-accent); border-color: var(--color-accent); color: var(--color-accent-ink); }
.btn-primary:hover { background: var(--color-accent-2); border-color: var(--color-accent-2); }
.actions { display: flex; flex-wrap: wrap; gap: var(--space-sm); margin: var(--space-lg) 0 0; }
summary { cursor: pointer; }

/* home hero: the sentence on the left, the latest day's awards on the printed sheet */
.hero { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--space-xl); align-items: center; margin-top: var(--space-xl); }
.hero h1 { margin-top: 0; }
.lede { font-size: var(--text-lg); max-width: 34ch; color: var(--color-ink-2); margin: 0; }
.sheet { background: var(--color-sheet); border-top: var(--rule-bar) solid var(--color-ink); padding: var(--space-md) var(--space-lg) var(--space-sm); margin: 0; }
.sheet figcaption { font-size: var(--text-sm); margin-bottom: var(--space-sm); }
.sheet figcaption strong { font: 600 var(--text-base)/1.2 var(--font-display); color: var(--color-ink); margin-right: var(--space-xs); }
table.ledger { background: transparent; border-top: 0; }
table.ledger td { padding: var(--space-sm) var(--space-sm) var(--space-sm) 0; border-top: var(--rule-hair) solid var(--color-rule); border-bottom: 0; vertical-align: baseline; }
table.ledger .ledger-date { font-family: var(--font-figure); font-size: .8rem; color: var(--color-muted); width: 3.6em; white-space: nowrap; }
table.ledger .ledger-ticker { font: 600 var(--text-sm)/1.2 var(--font-display); width: 4em; }
table.ledger .ledger-name { color: var(--color-ink-2); font-size: var(--text-sm); max-width: 15em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
table.ledger td.num { padding-right: 0; }

/* tables */
table { width: 100%; border-collapse: collapse; background: transparent; }
thead th { border-bottom: var(--rule-bar) solid var(--color-rule-2); }
th { font: 500 var(--text-sm)/1.3 var(--font-body); color: var(--color-muted); text-align: left; padding: var(--space-sm); vertical-align: bottom; }
td { padding: var(--space-sm); border-top: var(--rule-hair) solid var(--color-rule); text-align: left; vertical-align: top; }
.num, td.num { font-family: var(--font-figure); font-variant-numeric: tabular-nums; text-align: right; white-space: nowrap; font-size: .94rem; }
th.num { font-family: var(--font-body); font-size: var(--text-sm); }
table.summary { background: var(--color-sheet); border-top: var(--rule-bar) solid var(--color-ink); }
table.summary td:first-child a { font: 600 var(--text-base)/1.2 var(--font-display); }
table.summary tbody tr:hover { background: var(--color-paper-2); }
td[data-label="Date"] { white-space: nowrap; color: var(--color-muted); font-family: var(--font-figure); font-size: var(--text-sm); }
td[data-label="Amount"] a, table.ledger td.num a { font-weight: 500; color: var(--color-ink); }
table.compact th, table.compact td { padding: var(--space-xs) var(--space-sm); font-size: var(--text-sm); }
table.compact .num { font-size: .84rem; }
.table-scroll { overflow-x: auto; }
td.detail { width: 48%; }
td.detail summary { color: var(--color-ink-2); font-size: var(--text-sm); }
td.detail blockquote { margin: var(--space-sm) 0; padding: var(--space-sm) var(--space-md); border-left: var(--rule-bar) solid var(--color-rule); font-size: var(--text-sm); }
.meta, .sources { font-size: .82rem; color: var(--color-muted); margin: var(--space-xs) 0; }
.flag { font-size: .82rem; color: var(--color-flag); margin: var(--space-xs) 0; }
.note { font-size: .82rem; color: var(--color-muted); margin: var(--space-xs) 0; }
tr.cat-excluded td { opacity: .65; }
:target { scroll-margin-top: var(--space-md); }
tr:target { outline: 2px solid var(--color-focus); }
.tag { display: inline-block; margin-left: var(--space-xs); padding: 0 .3rem; border-radius: var(--radius-pill); font: 500 .72rem/1.5 var(--font-display); vertical-align: 1px; }
.tag-potential { background: var(--color-pot-bg); color: var(--color-pot); }
.tag-excluded { background: var(--color-flag-bg); color: var(--color-flag); }
.chips { display: flex; flex-wrap: wrap; gap: var(--space-xs) var(--space-md); }
.chips a { font: 600 var(--text-sm)/1.6 var(--font-display); }
details.others { margin-top: var(--space-md); }

/* company page */
.crumb { font-size: var(--text-sm); margin: var(--space-xl) 0 0; }
.crumb + h1 { margin-top: var(--space-sm); }
.cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: var(--space-lg) 0; background: var(--color-sheet); border-top: var(--rule-bar) solid var(--color-ink); }
.card { padding: var(--space-md) var(--space-lg) var(--space-md) var(--space-md); display: flex; flex-direction: column; }
.card + .card { border-left: var(--rule-hair) solid var(--color-rule); }
.card .label { font-size: var(--text-sm); color: var(--color-muted); }
.card .big { font: 500 1.75rem/1.1 var(--font-figure); letter-spacing: -0.04em; color: var(--color-ink); margin: var(--space-xs) 0; }
.card .big.muted { color: var(--color-muted); }
.card .sub { margin: 0; font-size: .82rem; }
details.year { margin: var(--space-md) 0; }
details.year > summary { font: 600 var(--text-lg)/1.3 var(--font-display); color: var(--color-ink); padding: var(--space-xs) 0; }
.entities { columns: 2; font-size: var(--text-sm); padding-left: 1.1rem; }
.empty { background: var(--color-sheet); border-top: var(--rule-bar) solid var(--color-ink); padding: var(--space-md) var(--space-lg); max-width: var(--measure); }
.years { margin-top: var(--space-md); }

/* charts: one surface, the sheet */
figure { margin: 0; }
.chart { width: 100%; height: auto; display: block; background: var(--color-sheet); border-top: var(--rule-bar) solid var(--color-ink); }
.chart .grid { stroke: var(--color-rule); }
.chart .axis { fill: var(--color-muted); font-size: 12px; font-family: var(--font-figure); }
.s-navy { fill: var(--color-navy); background: var(--color-navy); }
.s-army { fill: var(--color-army); background: var(--color-army); }
.s-air-force { fill: var(--color-air); background: var(--color-air); }
.s-defense-logistics-agency { fill: var(--color-dla); background: var(--color-dla); }
.s-other-agencies { fill: var(--color-other); background: var(--color-other); }
.seg:hover { opacity: .8; }
.legend { display: flex; flex-wrap: wrap; gap: var(--space-xs) var(--space-lg); font-size: var(--text-sm); color: var(--color-muted); margin: var(--space-sm) 0; }
.sw { display: inline-block; width: .75rem; height: .75rem; margin-right: var(--space-xs); vertical-align: -1px; }
.chart polyline { fill: none; stroke-width: 2; }
.chart polyline.l-rpo { stroke: var(--color-rpo); }
.chart polyline.l-rev { stroke: var(--color-rev); stroke-dasharray: 6 4; }
.chart circle.l-rpo { fill: var(--color-rpo); }
.chart circle.l-rev { fill: var(--color-rev); }
.chart circle:hover, .chart .bar-ratio:hover { opacity: .7; }
.chart .bar-ratio { fill: var(--color-rev); }
.ln { display: inline-block; width: 1.2rem; height: 0; border-top: 2px solid; margin-right: var(--space-xs); vertical-align: 3px; }
.ln.l-rpo { border-color: var(--color-rpo); }
.ln.l-rev { border-color: var(--color-rev); border-top-style: dashed; }
.gap, .note-box { background: var(--color-paper-2); border-left: var(--rule-bar) solid var(--color-rule-2); padding: var(--space-sm) var(--space-md); font-size: var(--text-sm); max-width: var(--measure); margin: var(--space-sm) 0; }
td.mat { font-family: var(--font-figure); font-size: .78rem; }
td.mat a { display: block; color: var(--color-ink-2); }

/* methodology and pitches */
.prose { max-width: var(--measure); }
.prose table { margin: var(--space-sm) 0 var(--space-md); }
.prose li { margin: var(--space-xs) 0; }
.gaps { columns: 2; font-size: var(--text-sm); }
.call { display: inline-block; padding: .05rem .45rem; border-radius: var(--radius-pill); font: 600 .8em/1.4 var(--font-display); }
.call-long { background: var(--color-long-bg); color: var(--color-long); }
.call-short { background: var(--color-short-bg); color: var(--color-short); }
h1 .call { font-size: .38em; vertical-align: .55em; margin-right: var(--space-sm); letter-spacing: 0; }
.facts { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: var(--space-xs) var(--space-lg); font-size: var(--text-sm); margin: var(--space-lg) 0; padding: var(--space-md) 0; border-top: var(--rule-hair) solid var(--color-rule); border-bottom: var(--rule-hair) solid var(--color-rule); }
.facts dt { color: var(--color-muted); }
.facts dd { margin: 0; }
.pitch { margin-top: var(--space-lg); font-size: 1.12rem; }
.pitch h3 { margin-top: var(--space-xl); }
.proof { font-size: .8rem; color: var(--color-muted); overflow-wrap: anywhere; border-top: var(--rule-hair) solid var(--color-rule); padding-top: var(--space-sm); }
.addendum { border-left: var(--rule-bar) solid var(--color-rule-2); padding-left: var(--space-md); margin-top: var(--space-xl); }
.addendum h2 { margin-top: 0; border-bottom: 0; }

/* phones */
@media (max-width: 760px) {
  .hero { grid-template-columns: minmax(0, 1fr); gap: var(--space-lg); }
  .cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .card:nth-child(3) { border-left: 0; }
  .card:nth-child(n+3) { border-top: var(--rule-hair) solid var(--color-rule); }
  .card .big { font-size: 1.4rem; }
}
@media (max-width: 680px) {
  .chart .axis { font-size: 20px; }   /* SVG text shrinks with the chart; compensate */
  .entities, .gaps { columns: 1; }
  nav { gap: var(--space-md); }
  .sheet { padding: var(--space-sm) var(--space-md); }
  table.ledger .ledger-name { display: none; }
  table.awards, table.awards tbody, table.awards tr, table.awards td { display: block; width: 100%; }
  table.awards thead { display: none; }
  table.awards tr { border-top: var(--rule-hair) solid var(--color-rule); padding: var(--space-sm) 0; }
  table.awards td { border: 0; padding: .15rem 0; text-align: left; }
  table.awards td.num { text-align: left; }
  table.awards td.mat a { display: inline; margin-right: var(--space-md); }
  table.pitches thead { display: none; }
  table.pitches tr { display: block; border-top: var(--rule-hair) solid var(--color-rule); padding: var(--space-sm) 0; }
  table.pitches td { display: inline-block; border: 0; padding: .1rem var(--space-sm) .1rem 0; }
  table.pitches td:last-child { display: block; }
  .facts { grid-template-columns: minmax(0, 1fr); }
  .facts dd { margin-bottom: var(--space-sm); }
}
@media (prefers-reduced-motion: reduce) { .btn { transition: none; } }
